本節內容:
- ansible命令基礎
- 常見模塊舉例
一、ansible命令基礎
語法:
ansible <host-pattern> [-f forks] [-m module_name] [-a args] [options]
- host-pattern:這次的命令對哪些主機生效;
- -f forks:啟動的並發線程數,就是一次並行處理多少主機;
- -m module_name:要使用的模塊;
- -a args:模塊特有的參數。
常見的模塊:
- user
- yum
- copy
- cron
- command:這是默認的模塊,表示在被管理主機上運行一個命令。對於command模塊,-a不再是指定參數,而是命令本身。
- shell
二、常見模塊舉例
1. /etc/ansible/hosts配置文件內容
2. command模塊
command模塊是默認的模塊,表示在被管理主機上運行一個命令。對於command模塊,-a不再是指定參數,而是命令本身。所以這個模塊有個缺陷,運行的命令中不能使用變量或者參數。
示例:
[root@node1 ~]# ansible nginx -m command -a "date"
[root@node1 ~]# ansible mysql -m command -a "tail -3 /etc/passwd"
3. cron模塊
cron模塊可以讓每一個被管理節點能夠自動生成一個定期任務計划。查看cron模塊的用法:
[root@node1 ~]# ansible-doc -s cron
示例:
[root@node1 ~]# ansible mysql -m cron -a 'minute="*/10" job="/usr/bin/echo hello" name="test cron job"'
注意:
- 所有的參數可以用""包含起來
- day之類的參數沒有指定,默認都是*
- 默認state參數的值為present
4. user模塊
user模塊實現用戶賬號管理。查看user模塊的用法:
[root@node1 ~]# ansible-doc -s user
幾個主要參數:
- name=:用戶名
- uid:用戶的uid
- group:所屬組,即私有組
- groups:附加組。
- state:狀態。
示例:
[root@node1 ~]# ansible mysql -m user -a 'name="jack"'
[root@node1 ~]# ansible mysql -m user -a 'name="jack" state=absent'
5. group模塊
group模塊:組管理。查看group模塊的用法:
示例:
[root@node1 ~]# ansible-doc -s group
[root@node1 ~]# ansible mysql -m group -a 'name=mysql gid=306 system=yes'
6. copy模塊
copy模塊實現文件復制。查看copy模塊的用法:
[root@node1 ~]# ansible-doc -s copy
幾個主要參數:
- src=:指明源文件本地路徑。可以是絕對路徑,也可以是相對路徑。可以不使用src,使用content。就是說用content內容來生成文件。
- dest=:定義遠程目標文件路徑,只能使用絕對路徑。
- content=:可以不使用src,使用content。就是說用content內容來生成文件。
示例:
[root@node1 ~]# ansible mysql -m copy -a 'src=/etc/fstab dest=/tmp/fstab.ansible owner=root mode=640'
[root@node1 ~]# ansible mysql -m copy -a 'content="Hello World\nGood boy" dest=/tmp/test.txt owner=root mode=640'
7. file模塊
file模塊可以設定文件屬性,還可以創建文件的符號鏈接。查看file模塊的用法:
[root@node1 ~]# ansible-doc -s file
幾個重要參數:
- path=:指明對哪個文件做管理。也可以使用dest和name。
- 創建文件的符號鏈接:src=:指明源文件,path=:指明符號鏈接文件路徑
示例:
[root@node1 ~]# ansible mysql -m file -a 'owner=root group=mysql mode=644 path=/tmp/test.txt'
[root@node1 ~]# ansible mysql -m file -a 'path=/tmp/test.link src=/tmp/test.txt state=link'
8. ping模塊
ping模塊測試指定主機是否能連接。查看ping模塊的用法:
[root@node1 ~]# ansible-doc -s ping
示例:
[root@node1 ~]# ansible nginx -m ping
9. service模塊
service模塊是管理服務的。查看service模塊的用法:
[root@node1 ~]# ansible-doc -s service
幾個重要參數:
- enabled=:是否開機自動啟動,取值為true或false;
- name=:服務名字;
- state=:狀態,取值有started,stoped,restarted。
示例:
[root@node1 ~]# ansible 172.16.7.151 -m service -a 'enabled=true name=httpd state=stopped'
10. shell模塊
和command模塊類似,但是可以使用變量。用於執行一些復雜的命令。查看shell模塊的使用方法:
[root@node1 ~]# ansible-doc -s shell
示例:
[root@node1 ~]# ansible mysql -m user -a 'name="test"' [root@node1 ~]# ansible mysql -m command -a 'echo wisedu | passwd --stdin test' [root@node1 ~]# ansible mysql -m command -a 'tail -1 /etc/passwd'
[root@node1 ~]# ansible mysql -m shell -a 'echo wisedu | passwd --stdin user1' [root@node1 ~]# ansible mysql -m command -a 'tail -1 /etc/shadow'
所以一旦有管道、變量之類的,你最好使用shell模塊,而不要用command模塊。
11. script模塊
script模塊將本地腳本復制到遠程主機並運行之。查看script模塊的用法:
[root@node1 ~]# ansible-doc -s script
示例:
[root@node1 ~]# vim test.sh #/bin/bash echo "hello world" >/tmp/nba.txt [root@node1 ~]# chmod +x test.sh [root@node1 ~]# ansible mysql -m script -a '/root/test.sh'
12. yum模塊
yum模塊管理程序包。查看yum模塊的用法:
[root@node1 ~]# ansible-doc -s yum
幾個重要參數:
- name=:指定要安裝的程序包,可以帶上版本號,否則安裝最新版本;
- state=:present表示安裝,absent表示卸載。
示例:
[root@node1 ~]# ansible mysql -m yum -a 'name=ksh'
13. setup模塊
setup模塊:收集遠程主機的facts。ansbile在管理每一個主機時,這些主機在被運行管理命令之前,會首先向ansible節點報告自己主機當前的各種可能被ansible主機用到的狀態信息,如操作系統版本、ip地址等信息,這些信息都是以變量的形式,ansible主機可以在jinjia2中調用,為不同的服務器生成不同的配置文件。
[root@node1 ~]# ansible mysql -m setup