ansible詳解-經常使用模塊

Ansible介紹

ansible是一款輕量級的自動化管理工具,相對於puppet,saltstack來講它更加的輕量化,用python編寫。支持多種指令操做,同時也支持playbook。經過ssh進行通訊,客戶端無需安裝客戶端便可進行批量管理,ansible對遠程主機的操做具備冪等性,因此能夠重複執行而不用擔憂有問題。node

ansible組成

  • ansible:主要的服務,用於調用其餘各類組件;
  • inventoy:用於存儲要控制的主機,包括主機用戶名密碼等信息;
  • playbooks:用於制定各類playbook;
  • core modules:ansible的核心模塊,ansible依賴各類模塊進行服務器控制;
  • custome modules:自定義模塊;
  • connect plugins:調用python的併發鏈接器進行服務器鏈接;
  • other plugins:其餘插件,例如日誌記錄,郵件等;

ansible inventoy配置文件組成

# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
#   - Comments begin with the '#' character
#   - Blank lines are ignored
#   - Groups of hosts are delimited by [header] elements
#   - You can enter hostnames or ip addresses
#   - A hostname/ip can be a member of multiple groups

# Ex 1: Ungrouped hosts, specify before any group headers.

## green.example.com
## blue.example.com
## 192.168.100.1
## 192.168.100.10

# Ex 2: A collection of hosts belonging to the 'webservers' group

## [webservers]
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110

# If you have multiple hosts following a pattern you can specify
# them like this:

## www[001:006].example.com    #也可使用此種方法來表示一個地址段,此處表示從001到006

# Ex 3: A collection of database servers in the 'dbservers' group

## [dbservers]
## 
## db01.intranet.mydomain.net
## db02.intranet.mydomain.net
## 10.25.1.56
## 10.25.1.57

# Here's another example of host ranges, this time there are no
# leading 0s:

## db-[99:101]-node.example.com

[test]
192.168.189.129

ansible控制方式

  • 免密鑰控制
  • 經過inventoy記錄主機ip地址(主機名)、用戶名密碼進行控制
#vim /etc/ansible/hosts
[webservers]
192.168.1.[31:32] ansible_ssh_user='root' ansible_ssh_pass='redhat'

ansible命令執行方式

  • 經過調用各類模塊進行命令執行
  • 經過編寫playbook進行服務器各類管理工做
    ansible (all|主機組名|主機名|ip地址) -m 模塊名 -a '要調用的模塊選項'

ansible配置文件

  • /etc/ansible/ansible.cfg:ansible配置文件
  • /etc/ansible/hosts:inventoy配置文件

ansible獲取幫助信息

ansible-doc -s 模塊名python

ansible經常使用模塊

command:用於執行命令,可是不能應用變量,管道等
ansible test -m command -a 'date'web

shell:相似command,能夠用變量,管道等
ansible test -m shell -a 'echo 1234567a |passwd test --stdin'shell

user經常使用選項:vim

  • name:用戶名
  • password:密碼
  • state:present爲添加,absent爲刪除
  • remove:刪除用戶,yes|no
  • system:是否爲系統用戶
  • createhome:是否建立家目錄
  • shell:指定用戶shell
  • group:設置基本組
  • groups:設置夫家族
  • uid:指定uid
    ansible test -m user -a 'name=hello password=123456 state=present system=yes createhome=no'

group經常使用選項:服務器

  • name:組名
  • gid:gid
  • state:present爲建立,absent爲刪除
  • system:是否爲系統組
    ansible all -m group -a 'name=hello system=yes state=present'

cron經常使用選項:併發

  • day:天,1-9,,/3
  • hour:小時
  • month:月
  • name:cron任務名
  • state:present,absent
  • weekday:周
  • minute:分鐘
  • job:工做內容
    ansible all -m cron -a 'minute=*/1 name="echo hello world" job="echo hello world" state=present'

copy經常使用選項:dom

  • src:源文件絕對路徑或相對路徑
  • dest:目標地址,必須是絕對路徑
  • content:能夠代替src,要寫入到dest文件中的內容,會echo追加進去
  • owner:屬主
  • group:屬組
  • backup:覆蓋文件以前是否備份,yes|no
  • directory_mode:遞歸設定目錄權限
  • force:yes,若是文件存在,可是內容不一樣,則強行覆蓋,默認選項;no,若是文件不存在才複製
ansible test -m copy -a 'src=/etc/fstab dest=/tmp/fstab.ansible owner=test group=hello'
ansible test -m copy -a 'content="hello world" dest=/tmp/log.ansible'    #把hello world寫入目標文件

file經常使用模塊,對被控主機文件進行操做:ssh

  • owner:屬主
  • group:屬組
  • mode:權限
  • recurse:遞歸設置,對目錄有限
  • state
    • touch:建立一個空白文件
    • directory:建立一個新目錄,目錄存在則不會修改
    • link:建立軟連接
    • hard:建立硬連接
    • absent:刪除
  • src:當state=link的時候,要被連接的源文件
ansible test -m file -a 'path="/tmp/log.ansible" owner=root group=wheel mode=640'
ansible test -m file -a 'src="/etc/fstab" path="/tmp/fstab.link" state=link'

script,再被控主機執行ansible控制端的腳本:
ansible test -m script -a '/root/test.sh'工具

yum模塊經常使用選項:

  • name:要安裝的軟件名
  • state
    • present:安裝
    • absent:卸載
    • lastest:安裝爲最新版本

setup用於收集指定遠程主機的facts信息,這些facts信息能夠做爲變量被調用:
ansible test -m setup

service經常使用模塊,用於控制服務:

  • enabled:該服務是否開機自啓
  • name:服務名
  • state
    • started:啓動
    • stopped:中止
    • restarted:重啓
  • sleep:啓動和中止中間sleep時間
  • runlevel:在哪些級別能夠自啓動
  • arguments:向命令行傳遞參數
    ansible test -m service -a 'name=httpd enabled=yes state=started'

ping,用於測試遠程主機是否在線,回覆pong表示在線
ansible test -m ping

相關文章
相關標籤/搜索