Ansible 模式

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一般在配置大批量機器的場景下會使用,靈活性稍有欠缺,但效率幾乎能夠無限提高,對運維人員的技術水平和前瞻性規劃有較高要求

相關文章
相關標籤/搜索