ansible的基本架構
1.鏈接插件(connectior plugins) 用於鏈接主機 用來鏈接被管理端
2.核心模塊(core modules) 鏈接主機實現操做, 它依賴於具體的模塊來作具體的事情
3.自定義模塊(custom modules) 根據本身的需求編寫具體的模塊
4.插件(plugins) 完成模塊功能的補充
5.playbooks(劇本) ansible的配置文件,將多個任務定義在劇本中,由ansible自動執行
6.host inventory(主機清單)定義ansible須要操做主機的範圍
最重要的一點是 ansible是模塊化的 它全部的操做都依賴於模塊
https://www.processon.com/mindmap/58d6713be4b0359bbccc00aa 架構圖
html
$ git clone git://github.com/ansible/ansible.git --recursive $ cd ./ansible $ make rpm $ sudo rpm -Uvh ./rpm-build/ansible-*.noarch.rpm
ansible系統由控制主機對被管節點的操做方式有兩種ad_hoc和playbookpython
ansible all -a "/bin/echo hello"
--- - hosts: webservers vars: http_port: 80 max_clients: 200 remote_user: root tasks: - name: ensure apache is at the latest version yum: name=httpd state=latest - name: write the apache config file template: src=/srv/httpd.j2 dest=/etc/httpd.conf notify: - restart apache - name: ensure apache is running (and enable it at boot) service: name=httpd state=started enabled=yes handlers: - name: restart apache service: name=httpd state=restarted
安裝完ansible後,發現ansible一共爲咱們提供了七個指令:ansible、ansible-doc、ansible-galaxy、ansible-lint、ansible-playbook、ansible-pull、ansible-vault 。這裏咱們只查看usage部分,詳細部分能夠經過 「指令 -h」 的方式獲取。
一、ansible
[root@localhost ~]# ansible -h Usage: ansible <host-pattern> [options]
git
ansible是指令核心部分,其主要用於執行ad-hoc命令,即單條命令。默認後面須要跟主機和選項部分,默認不指定模塊時,使用的是command模塊。如:
[root@localhost ~]# ansible 127.0.0.1 -a ‘date‘ 127.0.0.1 | SUCCESS | rc=0 >>Sun May 28 11:00:40 CST 2017
github
默認使用的模塊是能夠在ansible.cfg 中進行修改的。ansible命令下的參數部分解釋以下web
參數: -a ‘Arguments‘, --args=‘Arguments‘ 命令行參數 -m NAME, --module-name=NAME 執行模塊的名字,默認使用 command 模塊,因此若是是隻執行單一命令能夠不用 -m參數 -i PATH, --inventory=PATH 指定庫存主機文件的路徑,默認爲/etc/ansible/hosts. -u Username, --user=Username 執行用戶,使用這個遠程用戶名而不是當前用戶 -U --sud-user=SUDO_User sudo到哪一個用戶,默認爲 root -k --ask-pass 登陸密碼,提示輸入SSH密碼而不是假設基於密鑰的驗證 -K --ask-sudo-pass 提示密碼使用sudo -s --sudo sudo運行 -S --su 用 su 命令 -l --list 顯示所支持的全部模塊 -s --snippet 指定模塊顯示劇本片斷 -f --forks=NUM 並行任務數。NUM被指定爲一個整數,默認是5。 #ansible testhosts -a "/sbin/reboot" -f 10 重啓testhosts組的全部機器,每次重啓10臺 --private-key=PRIVATE_KEY_FILE 私鑰路徑,使用這個文件來驗證鏈接 -v --verbose 詳細信息 all 針對hosts 定義的全部主機執行 -M MODULE_PATH, --module-path=MODULE_PATH 要執行的模塊的路徑,默認爲/usr/share/ansible/ --list-hosts 只打印有哪些主機會執行這個 playbook 文件,不是實際執行該 playbook 文件 -o --one-line 壓縮輸出,摘要輸出.嘗試一切都在一行上輸出。 -t Directory, --tree=Directory 將內容保存在該輸出目錄,結果保存在一個文件中在每臺主機上。 -B 後臺運行超時時間 -P 調查後臺程序時間 -T Seconds, --timeout=Seconds 時間,單位秒s -P NUM, --poll=NUM 調查背景工做每隔數秒。須要- b -c Connection, --connection=Connection 鏈接類型使用。可能的選項是paramiko(SSH),SSH和地方。當地主要是用於crontab或啓動。 --tags=TAGS 只執行指定標籤的任務 例子:ansible-playbook test.yml --tags=copy 只執行標籤爲copy的那個任務 --list-hosts 只打印有哪些主機會執行這個 playbook 文件,不是實際執行該 playbook 文件 --list-tasks 列出全部將被執行的任務 -C, --check 只是測試一下會改變什麼內容,不會真正去執行;相反,試圖預測一些可能發生的變化 --syntax-check 執行語法檢查的劇本,但不執行它 -l SUBSET, --limit=SUBSET 進一步限制所選主機/組模式 --limit=192.168.0.15 只對這個ip執行 --skip-tags=SKIP_TAGS 只運行戲劇和任務不匹配這些值的標籤 --skip-tags=copy_start -e EXTRA_VARS, --extra-vars=EXTRA_VARS 額外的變量設置爲鍵=值或YAML / JSON #cat update.yml --- - hosts: {{ hosts }} remote_user: {{ user }} .............. #ansible-playbook update.yml --extra-vars "hosts=vipers user=admin" 傳遞{{hosts}}、{{user}}變量,hosts能夠是 ip或組名 -l,--limit 對指定的 主機/組 執行任務 --limit=192.168.0.10,192.168.0.11 或 -l 192.168.0.10,192.168.0.11 只對這個2個ip執行任務
二、ansible-docdocker
[root@localhost ~]# ansible-doc -hUsage: ansible-doc [options] [module...]Options: -a, --all Show documentation for all modules -h, --help show this help message and exit -l, --list List available modules -M MODULE_PATH, --module-path=MODULE_PATH specify path(s) to module library (default=None) -s, --snippet Show playbook snippet for specified module(s) -v, --verbose verbose mode (-vvv for more, -vvvv to enable connection debugging) --version show program‘s version number and exit
該指令用於查看模塊信息,經常使用參數有兩個-l 和 -s ,具體以下
//列出全部已安裝的模塊# ansible-doc -l//查看具體某模塊的用法,這裏如查看command模塊# ansible-doc -s commandshell
三、ansible-galaxy
ansible-galaxy 指令用於方便的從https://galaxy.ansible.com/ 站點下載第三方擴展模塊,咱們能夠形象的理解其相似於centos下的yum、python下的pip或easy_install 。以下示例:數據庫
[root@localhost ~]# ansible-galaxy install aeriscloud.docker- downloading role ‘docker‘, owned by aeriscloud- downloading role from https://github.com/AerisCloud/ansible-docker/archive/v1.0.0.tar.gz- extracting aeriscloud.docker to /etc/ansible/roles/aeriscloud.docker- aeriscloud.docker was installed successfully
這個安裝了一個aeriscloud.docker組件,前面aeriscloud是galaxy上建立該模塊的用戶名,後面對應的是其模塊。在實際應用中也能夠指定txt或yml 文件進行多個組件的下載安裝。這部分能夠參看官方文檔。
四、ansible-lint
ansible-lint是對playbook的語法進行檢查的一個工具。用法是ansible-lint playbook.yml 。
五、ansible-playbook
該指令是使用最多的指令,其經過讀取playbook 文件後,執行相應的動做,這個後面會作爲一個重點來說。
六、ansible-pull
該指令使用須要談到ansible的另外一種模式---pull 模式,這和咱們日常常常用的push模式恰好相反,其適用於如下場景:你有數量巨大的機器須要配置,即便使用很是高的線程仍是要花費不少時間;你要在一個沒有網絡鏈接的機器上運行Anisble,好比在啓動以後安裝。這部分也會單獨作一節來說。
七、ansible-vault
ansible-vault主要應用於配置文件中含有敏感信息,又不但願他能被人看到,vault能夠幫你加密/解密這個配置文件,屬高級用法。主要對於playbooks裏好比涉及到配置密碼或其餘變量時,能夠經過該指令加密,這樣咱們經過cat看到的會是一個密碼串類的文件,編輯的時候須要輸入事先設定的密碼才能打開。這種playbook文件在執行時,須要加上 –ask-vault-pass參數,一樣須要輸入密碼後才能正常執行。具體該部分能夠參查官方博客。apache
查看配置文件設置
http://docs.ansible.com/ansible/intro_configuration.html#poll-intervalvim
* inventory–這個參數表示資源清單inventory文件配置,資源清單就是一些ansible須要連接管理的主機列表。安裝完ansible以後默認所在的inventory列表配置以下: inventory = /etc/ansible/hosts * library–Ansible的操做動做,不管是本地或遠程,都使用一小段代碼來執行。這小段代碼成爲模塊,這個library參數就是隻想存放在Ansible模塊的目錄。Ansible支持多個目錄方式,只要用冒號(:)隔開就能夠,同時也會檢查當前執行playbook位置下的./library位置。默認的配置以下: library = /usr/share/ansible * forks–設置默認狀況下Ansible最多能有多少個進程同時工做,默認設置最多5個進程並行處理。具體須要設置多少個,能夠根據控制主機的性能和被管理節點的數量來肯定。默認參數配置以下: forks=20 你沒有優化的優化的狀況下執行比較慢 forks = 5 * sudo_user–這個設置默認執行命令的用戶,在playbook中從新設置這個參數。默認參數配置以下: sudo_user = root * remote_port–這個是指定連接被管節點的管理端口,默認22。除非設置了特殊的SSH端口,否則這個參數通常是不須要修改的。默認配置以下: remote_port = 22 * host_key_checking–這個設置是否檢查SSH主機的祕鑰。能夠設置爲True或者False。默認配置以下: host_key_checking = false * timeout–這是設置SSH連接的超時間隔,單位是秒。默認配置實例以下: timeout = 60 * log_path–Ansible系統默認是不記錄日誌的,若是想把Ansible系統的輸出記錄到日誌文件中,須要設置log\_path來指定一個存儲Ansible日誌的文件。配置實例以下: log_path = /var/log/ansible.log poll_interval 異步執行任務的時候多久檢查一次任務裝填 poll_interval = 15 選擇遠程的工具 默認狀況下就是smart(智能)模式 自動選擇鏈接方式 只有當你須要優化執行速度的時候才須要修改這個選項 transport = smart module_set_locale 設置本地的環境變量 inventory = /etc/ansible/hosts 這個是默認庫文件位置,腳本,或者存放可通訊主機的目錄 #library = /usr/share/my_modules/ Ansible默認搜尋模塊的位置 remote_tmp = $HOME/.ansible/tmp Ansible 經過遠程傳輸模塊到遠程主機,而後遠程執行,執行後在清理現場.在有些場景下,你也許想使用默認路徑但願像更換補丁同樣使用 pattern = * 若是沒有提供「hosts」節點,這是playbook要通訊的默認主機組.默認值是對全部主機通訊 forks = 5 在與主機通訊時的默認並行進程數 ,默認是5d poll_interval = 15 當具體的poll interval 沒有定義時,多少時間回查一下這些任務的狀態, 默認值是5秒 sudo_user = root sudo使用的默認用戶 ,默認是root #ask_sudo_pass = True 用來控制Ansible playbook 在執行sudo以前是否詢問sudo密碼.默認爲no #ask_pass = True 控制Ansible playbook 是否會自動默認彈出密碼 transport = smart 通訊機制.默認 值爲’smart’。若是本地系統支持 ControlPersist技術的話,將會使用(基於OpenSSH)‘ssh’,若是不支持講使用‘paramiko’.其餘傳輸選項包括‘local’, ‘chroot’,’jail’等等 #remote_port = 22 遠程SSH端口。 默認是22 module_lang = C 模塊和系統之間通訊的計算機語言,默認是C語言 gathering = implicit 控制默認facts收集(遠程系統變量). 默認值爲’implicit’, 每一次play,facts都會被收集 #roles_path = /etc/ansible/roles roles 路徑指的是’roles/’下的額外目錄,用於playbook搜索Ansible roles #host_key_checking = False 檢查主機密鑰 sudo_exe = sudo 若是在其餘遠程主機上使用另外一種方式執sudu操做.可使用該參數進行更換 #what flags to pass to sudo 傳遞sudo以外的參數 #sudo_flags = -H #SSH timeout SSH超時時間 timeout = 10 #remote_user = root 使用/usr/bin/ansible-playbook連接的默認用戶名,若是不指定,會使用當前登陸的用戶名 #log_path = /var/log/ansible.log 日誌文件存放路徑 #module_name = command ansible命令執行默認的模塊 #executable = /bin/sh 在sudo環境下產生一個shell交互接口. 用戶只在/bin/bash的或者sudo限制的一些場景中須要修改 #jinja2_extensions = jinja2.ext.do,jinja2.ext.i18n 容許開啓Jinja2拓展模塊 #private_key_file = /root/.ssh/id_rsa 私鑰文件存儲位置 ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host} 這個設置能夠告知用戶,Ansible修改了一個文件,而且手動寫入的內容可能已經被覆蓋. #display_skipped_hosts = True 顯示任何跳過任務的狀態 ,默認是顯示 #error_on_undefined_vars = False 若是所引用的變量名稱錯誤的話, 將會致使ansible在執行步驟上失敗 #system_warnings = True 容許禁用系統運行ansible相關的潛在問題警告 #deprecation_warnings = True 容許在ansible-playbook輸出結果中禁用「不建議使用」警告 #command_warnings = False 當shell和命令行模塊被默認模塊簡化的時,Ansible 將默認發出警告 #nocows = 1 默認ansible能夠調用一些cowsay的特性 開啓/禁用:0/1 #nocolor = 1 輸出帶上顏色區別, 開啓/關閉:0/1
3.1 生成祕鑰
#ssh-keygen -t rsa
3.2 將祕鑰拷貝到預管理的節點上
#ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.116.130
4.1測試主機連通性
修改主機和配置
#vim /etc/ansible/hosts [xxx] 10.0.0.1 10.0.0.2 ansible all -m ping -k -k指令是增長密碼驗證
4.2批量執行命令
ansible all -m shell -a '/bin/echo hello ansible'