一、Ansible 命令
1、Ansible 命令執行的方式有兩種:Ad-Hoc、Ansible-playbooks,這兩種方式沒有本質的區別,Ad-Hoc用於臨時執行命令;Ansible-playbooks可以理解為Ad-Hoc的集合,通過一定的規則編排在一起,也就是劇本。
2、Ansible通訊機制是ssh,有秘密和秘鑰驗證,一般來說都是配置秘鑰驗證。秘鑰配置使用ssh-keygen。
3、使用命令格式:
ansible <host-pattent> [options]
解釋:
ansible Ansible命令
<host-pattern>是Inventory中定義的主機名、IP、group組名、具有 "." 或 "*" 或 ":"等特殊字符的匹配型字符串。<>表示該選項是必須。
[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:
1、---測試 -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就表示成功了。
2、測試 -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"
}
二、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
三、ansible-pull
遠端拉取命令或者劇本,效率無限提升,對運維要求較高
該指令的使用涉及Ansible的另一種工作模式:pull模式(Ansible默認使用push模式)。這和通常使用的push模式工作機理剛好相反,其適用於以下場景:
1、你有數量巨大的機器需要配置,即使使用高並發線程依舊要花費很多時間;2、你要在剛啟動的、沒有網絡連接的主機上運行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通常在配置大批量機器的場景下會使用,靈活性稍有欠缺,但效率幾乎可以無限提升,對運維人員的技術水平和前瞻性規划有較高要求