Ansible默認安裝好後有一個配置文件/etc/ansible/ansible.cfg,該配置文件中定義了ansible的主機的默認配置部分,如默認是否須要輸入密碼、是否開啓sudo認證、action_plugins插件的位置、hosts主機組的位置、是否開啓log功能、默認端口、key文件位置等等。html
具體以下:linux
[defaults] # some basic default values... #inventory = /etc/ansible/hosts hostfile = /etc/ansible/conf/hosts \\指定默認hosts配置的位置 # library_path = /usr/share/my_modules/ remote_tmp = $HOME/.ansible/tmp pattern = * forks = 5 poll_interval = 15 sudo_user = root \\遠程sudo用戶 #ask_sudo_pass = True \\每次執行ansible命令是否詢問ssh密碼 #ask_pass = True \\每次執行ansible命令時是否詢問sudo密碼 transport = smart remote_port = 22 module_lang = C gathering = implicit host_key_checking = False \\關閉第一次使用ansible鏈接客戶端是輸入命令提示 log_path = /var/log/ansible.log \\須要時能夠自行添加。chown -R root:root ansible.log system_warnings = False \\關閉運行ansible時系統的提示信息,通常爲提示升級 # set plugin path directories here, separate with colons #action_plugins = /usr/share/ansible/plugins/action #cache_plugins = /usr/share/ansible/plugins/cache #callback_plugins = /usr/share/ansible/plugins/callback #connection_plugins = /usr/share/ansible/plugins/connection #lookup_plugins = /usr/share/ansible/plugins/lookup #inventory_plugins = /usr/share/ansible/plugins/inventory #vars_plugins = /usr/share/ansible/plugins/vars #filter_plugins = /usr/share/ansible/plugins/filter #test_plugins = /usr/share/ansible/plugins/test #strategy_plugins = /usr/share/ansible/plugins/strategy fact_caching = memory [accelerate] accelerate_port = 5099 accelerate_timeout = 30 accelerate_connect_timeout = 5.0 # The daemon timeout is measured in minutes. This time is measured # from the last activity to the accelerate daemon. accelerate_daemon_timeout = 30
ansible默認的配置都是註釋掉的(#),能夠經過去掉#來進行開啓相應的配置服務,好比啓用日誌,更改相應的hosts文件的路徑等等。 如查看日誌,當再次操做ansible的時候就能夠查看生成的日誌了 shell
[root@Monitor .ssh]# tail -f /var/log/ansible.log 192.168.180.4 ^ here Attempted to read "/etc/ansible/conf/hosts" as ini file: /etc/ansible/conf/hosts:7: Expected key=value host variable assignment, got: ansible_ssh_port 2017-09-01 11:09:44,012 p=58662 u=root | 192.168.180.10 | SUCCESS | rc=0 >> 11:07:42 up 46 days, 19:50, 3 users, load average: 0.08, 0.02, 0.01 2017-09-01 11:10:16,229 p=58662 u=root | 192.168.180.2 | SUCCESS | rc=0 >> 11:04:53 up 46 days, 19:52, 3 users, load average: 0.37, 0.41, 0.37
(二)Ansible命令參數vim
(1)命令格式: ansible <host-pattern> [options]bash
[root@Monitor ansible]# ansible --help Usage: ansible <host-pattern> [options] Options: -m MODULE_NAME, --module-name=MODULE_NAME 要執行的模塊,默認爲command -a MODULE_ARGS, --args=MODULE_ARGS 模塊的參數 -u REMOTE_USER, --user=REMOTE_USER ssh 鏈接的用戶名,默認用root,ansible.cfg 中能夠配置 -k, --ask-pass 提示輸入ssh 登陸密碼,當使用密碼驗證登陸的時候用 -s, --sudo sudo 運行 -U SUDO_USER, --sudo-user=SUDO_USER sudo 到哪一個用戶,默認爲root -K, --ask-sudo-pass 提示輸入sudo 密碼,當不是NOPASSWD 模式時使用 -B SECONDS, --background=SECONDS run asynchronously, failing after X seconds(default=N/A) -P POLL_INTERVAL, --poll=POLL_INTERVAL set the poll interval if using -B (default=15) -C, --check 只是測試一下會改變什麼內容,不會真正去執行 -c CONNECTION 鏈接類型(default=smart) -f FORKS, --forks=FORKS fork 多少個進程併發處理,默認5 -i INVENTORY, --inventory-file=INVENTORY 指定hosts 文件路徑,默認default=/etc/ansible/hosts -l SUBSET, --limit=SUBSET 指定一個pattern,對<host_pattern>已經匹配的主機中再過濾一次 --list-hosts 只打印有哪些主機會執行這個playbook 文件,不是實際執行該playboo -M MODULE_PATH, --module-path=MODULE_PATH 要執行的模塊的路徑,默認爲/usr/share/ansible/ -o, --one-line 壓縮輸出,摘要輸出 --private-key=PRIVATE_KEY_FILE 私鑰路徑 -T TIMEOUT, --timeout=TIMEOUT ssh 鏈接超時時間,默認10 秒 -t TREE, --tree=TREE 日誌輸出到該目錄,日誌文件名會以主機名命名 -v, --verbose verbose mode (-vvv for more, -vvvv to enable connection debugging)
以上就是ansible經常使用的命令格式及參數,在接下來的學習中會逐步運用的。
服務器
(2)Ad-Hoc併發
ansible任務:ad hoc任務就是執行shell命令、或shell腳本。能夠執行一些簡單的命令,不須要將這些執行的命令特別保存下來。 app
適合執行簡單的命令。ssh
ansible playbook:能夠解決比較複雜的任務,能夠將命令保存下來。async
適合執行配置管理或部署客戶機。
Ad-Hoc 是指Ansible下臨時執行的一條命令,而且不須要保存的命令,對於複雜的命令會使用playbook。Ad-hoc的執行依賴於模塊,ansible官方提供了大量的模塊。 如:command、raw、shell、file、cron等,具體能夠經過ansible-doc -l 進行查看 。可使用ansible-doc -s module來查看某個模塊的參數,也可使用ansible-doc help module來查看該模塊更詳細的信息。接下來咱們詳細講解該命令的用法:
1.命令說明: ansible 主機或組-m 模塊名-a '模塊參數' ansible參數
主機和組,是在/etc/ansible/hosts 裏進行指定的部分,固然動態Inventory 使用的是腳本從外部應用裏獲取的主機;
模塊名,能夠經過ansible-doc -l 查看目前安裝的模塊,默認不指定時,使用的是command模塊,具體能夠查看/etc/ansible/ansible.cfg 的「#module_name = command 」 部分,默認模塊能夠在該配置文件中進行修改;
模塊參數,能夠經過 「ansible-doc -s 模塊名」 查看具體的用法及後面的參數;
ansible參數,能夠經過ansible命令的幫助信息裏查看到,這裏有不少參數能夠供選擇,如是否須要輸入密碼、是否sudo等。
2.後臺執行。當命令執行時間比較長時,也能夠放到後臺執行,使用-B、-P參數,以下:
ansible all -B 3600-a "/usr/bin/long_running_operation --do-stuff" #後臺執行命令3600s,-B 表示後臺執行的時間 ansible all -m async_status -a "jid=123456789" #檢查任務的狀態 ansible all -B 1800-P 60-a "/usr/bin/long_running_operation --do-stuff" #後臺執行命令最大時間是1800s即30分鐘,-P 每60s檢查下狀態,默認15s
(3)命令執行模塊。命令執行模塊包含以下 四個模塊:
command模塊:該模塊經過-a跟上要執行的命令能夠直接執行,不過命令裏若是有帶有以下字符部分則執行不成功 「 "<", ">", "|", "&" ;
shell 模塊:用法基本和command同樣,不過其是經過/bin/sh進行執行,因此shell 模塊能夠執行任何命令,就像在本機執行同樣;
raw模塊:用法和shell 模塊同樣 ,其也能夠執行任意命令,就像在本機執行同樣;
script模塊:其是將管理端的shell 在被管理主機上執行,其原理是先將shell 複製到遠程主機,再在遠程主機上執行,原理相似於raw模塊。
注:raw模塊和comand、shell 模塊不一樣的是其沒有chdir、creates、removes參數,chdir參數的做用就是先切到chdir指定的目錄後,再執行後面的命令,這在後面不少模塊裏都會有該參數 。接下來進行詳細的介紹:
1,command模塊包含以下選項:
creates:建立一個文件名,當該文件存在,則該命令不執行
free_form:要執行的linux指令
chdir:在執行指令以前,先切換到該指定的目錄
removes:一個文件名,當該文件不存在,則該選項不執行
executable:切換shell來執行指令,該執行路徑必須是一個絕對路徑
一下是使用的例子
使用chdir的實例:
[root@Monitor ansible]# ansible 192.168.180.6 -m command -a 'chdir=/tmp/test.txt touch test.file' [root@Monitor ansible]# ansible 192.168.180.5 -m command -a 'creates=/tmp/lqb.txt touch test.file' 192.168.180.5 | SUCCESS | rc=0 >> [root@Monitor ansible]# ansible 192.168.180.6 -m command -a 'chdir=/tmp/test.txt touch test.file' 192.168.180.6 | FAILED | rc=0 >> MODULE FAILURE [root@Monitor ansible]# ansible 192.168.180.6 -m shell -a 'chdir=/tmp/test.txt touch test.file' 192.168.180.6 | FAILED | rc=0 >> MODULE FAILURE [root@Monitor ansible]# ansible 192.168.180.6 -m raw -a 'chdir=/tmp/test.txt touch test.file' 192.168.180.6 | SUCCESS | rc=0 >> Shared connection to 192.168.180.6 closed.
三個命令都會返回執行成功的狀態。不過實際上只有前兩個文件會被建立成功。使用raw模塊的執行的結果文件事實上也被正常建立了,不過不是在chdir指定的目錄,而是在當前執行用戶的家目錄。
creates與removes示例:
ansible 192.168.1.1 -a 'creates=/tmp/server.txt uptime' ###當/tmp/server.txt文件存在時,則不執行uptime指令 ansible 192.168.1.1 -a 'removes=/tmp/server.txt uptime' ###當/tmp/server.txt文件不存在時,則不執行uptime指令
2.script模塊實例。首先在ansible服務器上建立一個腳本並賦予可執行權限
[root@Monitor ansible]# vim script.sh #/bin/bash ifconfig -a; df -h ~ [root@Monitor ansible]# chmod +x script.sh [root@Monitor ansible]# ansible 192.168.180.5 -m script -a 'script.sh' 192.168.180.5 | SUCCESS => { "changed": true, "rc": 0, "stderr": "Shared connection to 192.168.180.5 closed.\r\n", "stdout": "eth0 Link encap:Ethernet HWaddr 00:15:5D:6E:28:0F \r\n inet addr:192.168.180.5 Bcast:192.168.180.255 Mask:255.255.255.0\r\n inet6 addr: fe80::215:5dff:fe6e:280f/64 Scope:Link\r\n UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1\r\n RX packets:8629 errors:0 dropped:0 overruns:0 frame:0\r\n TX packets:2576 errors:0 dropped:0 overruns:0 carrier:0\r\n collisions:0 txqueuelen:1000 \r\n RX bytes:1868783 (1.7 MiB) TX bytes:299303 (292.2 KiB)\r\n\r\nlo Link encap:Local Loopback \r\n inet addr:127.0.0.1 Mask:255.0.0.0\r\n inet6 addr: ::1/128 Scope:Host\r\n UP LOOPBACK RUNNING MTU:16436 Metric:1\r\n RX packets:0 errors:0 dropped:0 overruns:0 frame:0\r\n TX packets:0 errors:0 dropped:0 overruns:0 carrier:0\r\n collisions:0 txqueuelen:0 \r\n RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)\r\n\r\n文件系統\t 容量 已用 可用 已用%% 掛載點\r\n/dev/mapper/VolGroup-lv_root\r\n 50G 4.6G 43G 10% /\r\ntmpfs 935M 0 935M 0% /dev/shm\r\n/dev/sda1 485M 32M 429M 7% /boot\r\n/dev/mapper/VolGroup-lv_home\r\n 72G 180M 68G 1% /home\r\n", "stdout_lines": [ "eth0 Link encap:Ethernet HWaddr 00:15:5D:6E:28:0F ", " inet addr:192.168.180.5 Bcast:192.168.180.255 Mask:255.255.255.0", " inet6 addr: fe80::215:5dff:fe6e:280f/64 Scope:Link", " UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1", " RX packets:8629 errors:0 dropped:0 overruns:0 frame:0", " TX packets:2576 errors:0 dropped:0 overruns:0 carrier:0", " collisions:0 txqueuelen:1000 ", " RX bytes:1868783 (1.7 MiB) TX bytes:299303 (292.2 KiB)", "", "lo Link encap:Local Loopback ", " inet addr:127.0.0.1 Mask:255.0.0.0", " inet6 addr: ::1/128 Scope:Host", " UP LOOPBACK RUNNING MTU:16436 Metric:1", " RX packets:0 errors:0 dropped:0 overruns:0 frame:0", " TX packets:0 errors:0 dropped:0 overruns:0 carrier:0", " collisions:0 txqueuelen:0 ", " RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)", "", "文件系統\t 容量 已用 可用 已用%% 掛載點", "/dev/mapper/VolGroup-lv_root", " 50G 4.6G 43G 10% /", "tmpfs 935M 0 935M 0% /dev/shm", "/dev/sda1 485M 32M 429M 7% /boot", "/dev/mapper/VolGroup-lv_home", " 72G 180M 68G 1% /home" ] }
#########也能夠直接進行輸出以下圖