1、Ansible 命令python
一、Ansible 命令執行的方式有兩種:Ad-Hoc、Ansible-playbooks,這兩種方式沒有本質的區別,Ad-Hoc用於臨時執行命令;Ansible-playbooks能夠理解爲Ad-Hoc的集合,經過必定的規則編排在一塊兒,也就是劇本。nginx
二、Ansible通信機制是ssh,有祕密和祕鑰驗證,通常來講都是配置祕鑰驗證。祕鑰配置使用ssh-keygen。git
三、使用命令格式:github
ansible <host-pattent> [options]網絡
解釋:併發
ansible Ansible命令運維
<host-pattern>是Inventory中定義的主機名、IP、group組名、具備 "." 或 "*" 或 ":"等特殊字符的匹配型字符串。<>表示該選項是必須。ssh
[options]是Ansible的參數選項,可選參數。模塊化
經常使用選項以下:高併發
-m NAME,--module-name=NAME:指定執行使用的模塊(ansible的功能都是基於模塊化的)。
-u USERNAME,--user=USERNAME:指定遠程主機以USERNAME執行。
-s,--sudo:遠程執行命令時使用sudo方式,至關於Linux系統下的sudo命令。
-U SUDO_USERNAME,--sudo-user=SUDO_USERNAME:sudo 用戶
注意:上述的-s和-U選項在新版中已經失效。新版本選項以下兩項:
-s,--sudo 被改爲 -b,--become
-U,--sudo-user被改爲 --become-user
-K, --ask-become-pass:使用--become或者--become-user時使用的密碼認證。
-f FORKS, --forks=FORKS:並行線程數量。
-k, --ask-pass:鏈接到遠程主機的密碼,當沒有使用免密認證時使用
eg:
一、---測試 -m -u選項;-m指定 ping模塊,以yjt用戶執行ping存活檢測。若是不指定用戶,在遠程機器上默認是以root用戶執行。
[root@manager1 ~ 15:53:53]#ansible 192.168.4.46 -m ping -u yjt ---注意,ip須要在/etc/ansible/hosts提早裏面配置,若是想在多個主機測試,這裏能夠改爲all,固然,前提是須要在hosts文件配置好。 192.168.4.46 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
提示SUCCESS就表示成功了。
二、測試 -b;以yjt用戶sudo到root執行ping存活檢測。這種方式須要在遠程主機的/etc/sudoers文件中配置yjt用戶,若是沒有配置NOPASSWD,則須要加上-K選項。
遠程主機/etc/sudoers文件添加以下:
yjt ALL=(root)NOPASSWD: ALL
[root@manager1 ~ 16:26:00]#ansible 192.168.4.46 -m ping -u yjt -b
192.168.4.46 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
把上訴的yjt ALL=(root)NOPASSWD: ALL換成yjt ALL=(root) ALL,再次執行
[root@manager1 ~ 16:37:19]#ansible 192.168.4.46 -m ping -u yjt -b
192.168.4.46 | FAILED! => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"module_stderr": "Shared connection to 192.168.4.46 closed.\r\n",
"module_stdout": "sudo: a password is required\r\n",
"msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
"rc": 1
}
發現報錯了,這個時候因爲遠程機器的yjt用戶不能免密登陸到root用戶,因此,執行方式改爲以下,加-K(大寫)選項
[root@manager1 ~ 16:30:34]#ansible 192.168.4.46 -m ping -u yjt -b -K
BECOME password: ---輸入yjt用戶的密碼。
192.168.4.46 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
2、ansible-galaxy
用於從ansible galaxy官網上傳下載roles。
命令用法:
ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options]
init:用於初始化本地的roles,以備上傳至galaxy。
info:指定roles的詳細信息。
install:下載roles到本地。
list:列出本地已經存在的roles。
remove:刪除本地已經存在的roles。
eg:下載nginx的roles,默認存放在/etc/ansible/roles
[root@manager1 kvm 17:19:05]#ansible-galaxy --ignore-errors install azavea.git - downloading role 'git', owned by azavea - downloading role from https://github.com/azavea/ansible-git/archive/0.1.0.tar.gz - extracting azavea.git to /root/.ansible/roles/azavea.git ---這裏存放在了這個目錄下。 - azavea.git (0.1.0) was installed successfully
3、ansible-pull 遠端拉取命令或者劇本,效率無限提高,對運維要求較高 該指令的使用涉及Ansible的另外一種工做模式:pull模式(Ansible默認使用push模式)。這和一般使用的push模式工做機理恰好相反,其適用於如下場景: 一、你有數量巨大的機器須要配置,即便使用高併發線程依舊要花費不少時間;二、你要在剛啓動的、沒有網絡鏈接的主機上運行Anisble Usage: ansible-pull -U <repository> [options] [<playbook.yml>] 例: */20 * * * * root /usr/local/bin/ansible-pull -o -C 2.1.0 -d /srv/www/king-gw/ -i /etc/ansible/hosts -U git:// git.kingifa.com/king-gw-ansiblepull >> /var/log/ansible-pull.log 2>&1 它是經過經過ansible-pull結合Git和crontab一併實現,其原理以下:經過crontab按期拉取指定的Git版本到本地,並以指定模式自動運行預先制訂好的指令 注:ansible-pull一般在配置大批量機器的場景下會使用,靈活性稍有欠缺,但效率幾乎能夠無限提高,對運維人員的技術水平和前瞻性規劃有較高要求