安裝
brew install ansible | macos |
yum install -y ansible | centos |
pip install ansible | python |
- Ansible 官方文檔
配置位置
/etc/ansible/ansible.cfg | 系統範圍的配置 |
~/ansible.cfg | 使用者特定的配置 |
$pwd/ansible.cfg | 目前目錄下的配置 |
Inventory檔案(hosts清單)
靜态Inventory
/etc/ansible/hosts
mail.example.com
[webservers]
foo.example.com
bar.example.com
Inventory 主機組使用多個IP和域名
[web]
172.18.12.5[1:4]
[webservers]
www[01:50].example.com
Inventory 主機組使用子主機組
[usa:children]
southeast
northeast
southwest
northwest
給多台主機設定變量
group variables 如果組中的所有主機共享一個變量值,則可以一次将該變量應用于整個組
[atlanta]
host1
host2
[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com
指令行(ad-hoc)
ansible
檢查Inventory是否生效
$ ansible all --list-hosts
ping所有目标
$ ansible all -m ping
ping本地(不使用SSH連接配接)
$ ansible all -i localhost, -e '{"ansible_connection": "local"}' -m ping
本地執行指令
$ ansible all -i localhost, -e '{"ansible_connection": "local"}' -a 'hostname'
擷取本地主機的資訊
$ ansible all -i localhost, -e '{"ansible_connection": "local"}' -m setup
擷取遠端到本地
$ ansible target -m fetch -a "src=/tmp/seq dest=/tmp/seq"
拷貝本地到遠端
$ ansible target -m copy -a "src=/tmp/seq dest=/tmp/seq"
Ansible 指令幫助
$ ansible
$ ansible <host-pattern> [options]
-a MODULE_ARGS, --args=MODULE_ARGS | 子產品參數 |
--ask-vault-pass | 詢問保險庫密碼 |
-B SECONDS, --background=SECONDS | 異步運作,X 秒後失敗 (預設=N/A) |
-C, --check | 不要做任何改變;相反,嘗試預測可能發生的一些變化 |
-D, --diff | 更改(小)檔案和模闆時,顯示這些檔案中的差異; 與 --check 配合使用效果很好 |
-e EXTRA_VARS, --extra-vars=EXTRA_VARS | 将附加變量設定為 key=value 或 YAML/JSON |
-f FORKS, --forks=FORKS | 指定要使用的并行程序數 (default=5) |
-h, --help | 顯示此幫助資訊并退出 |
-i INVENTORY, --inventory-file=INVENTORY | 指定清單主機路徑(預設=/etc/ansible/hosts)或逗号分隔的主機清單 |
-l SUBSET, --limit=SUBSET | 進一步将標明主機限制為其他模式 |
--list-hosts | 輸出比對主機清單;不執行任何其他操作 |
-m MODULE_NAME, --module-name=MODULE_NAME | 要執行的子產品名稱 (default=command) |
-M MODULE_PATH, --module-path=MODULE_PATH | 指定子產品庫的路徑 (default=None) |
--new-vault-password-file=NEW_VAULT_PASSWORD_FILE | 用于重新生成密鑰的新保管庫密碼檔案 |
-o, --one-line | 壓縮輸出 |
--output=OUTPUT_FILE | 用于加密或解密的輸出檔案名; 使用 - 用于标準輸出 |
-P POLL_INTERVAL, --poll=POLL_INTERVAL | 如果使用 -B 則設定輪詢間隔(default=15) |
--syntax-check | 對 playbook 執行文法檢查,但不要執行它 |
-t TREE, --tree=TREE | 将輸出記錄到此目錄 |
--vault-password-file=VAULT_PASSWORD_FILE | 保險庫密碼檔案 |
-v, --verbose | 詳細模式(-vvv 更多,-vvvv 啟用連接配接調試) |
--version | 顯示程式的版本号并退出 |
控制誰以及如何連接配接到主機,連接配接選項:
-k, --ask-pass | 詢問連接配接密碼 |
--private-key=PRIVATE_KEY_FILE, --key-file=PRIVATE_KEY_FILE | 使用此檔案來驗證連接配接 |
-u REMOTE_USER, --user=REMOTE_USER | 以此使用者身份連接配接(default=None) |
-c CONNECTION, --connection=CONNECTION | 要使用的連接配接類型 (default=smart) |
-T TIMEOUT, --timeout=TIMEOUT | 以秒為機關覆寫連接配接逾時 (default=10) |
--ssh-common-args=SSH_COMMON_ARGS | 指定要傳遞給 sftp/scp/ssh 的常用參數 (e.g. ProxyCommand) |
--sftp-extra-args=SFTP_EXTRA_ARGS | 指定僅傳遞給 sftp 的額外參數 (e.g. -f, -l) |
--scp-extra-args=SCP_EXTRA_ARGS | 指定僅傳遞給 scp 的額外參數 (e.g. -l) |
--ssh-extra-args=SSH_EXTRA_ARGS | 指定僅傳遞給 ssh 的額外參數 (e.g. -R) |
控制您成為目标主機上的使用者的方式和使用者,特權更新選項:
-s, --sudo | 使用 sudo (nopasswd) 運作操作(已棄用,使用 become) |
-U SUDO_USER, --sudo-user=SUDO_USER | 所需的 sudo 使用者(預設=root)(已棄用,使用 become) |
-S, --su | 使用 su 運作操作(已棄用,使用 become) |
-R SU_USER, --su-user=SU_USER | 以該使用者身份使用 su 運作操作(預設 = root)(已棄用,使用 become) |
-b, --become | 使用 become 運作操作(不暗示密碼提示) |
--become-method=BECOME_METHOD | 要使用的權限提升方法(預設=sudo),有效選擇:[ sudo |
--become-user=BECOME_USER | 以該使用者身份運作操作(預設=root) |
--ask-sudo-pass | 詢問 sudo 密碼(已棄用,使用 become) |
--ask-su-pass | 詢問 su 密碼(已棄用,使用 become) |
-K, --ask-become-pass | 要求提權密碼 |
Ansible Galaxy 工具
$ ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ...
-h, --help | 顯示此幫助資訊并退出 |
-v, --verbose | 詳細模式(-vvv 更多,-vvvv 啟用連接配接調試) |
--version | 顯示程式的版本号并退出 |
$ ansible-galaxy search --author <AUTHOR>
$ ansible-galaxy search --platforms <PLATFORM>
$ ansible-galaxy search --galaxy-tags <TAG>
$ ansible-galaxy info <ROLE>
$ ansible-galaxy install <ROLE> -p <ROLE_DIRECTORY>
$ ansible-galaxy install -r <ROLE1> <ROLE2> <ROLE3> ...
$ ansible-galaxy list
$ ansible-galaxy remove <ROLE>
$ ansible-galaxy init <ROLE>
$ ansible-galaxy init --offline <ROLE>
ansible-doc
在本地通路文檔
$ ansible-doc
$ ansible-doc [options] [module...]
-h, --help | 顯示此幫助資訊并退出 |
-l, --list | 列出可用子產品 |
-M MODULE_PATH, --module-path=MODULE_PATH | 指定子產品庫的路徑 (default=None) |
-s, --snippet | 顯示指定子產品的劇本片段 |
-v, --verbose | 詳細模式(-vvv 更多,-vvvv 啟用連接配接調試) |
--version | 顯示程式的版本号并退出 |
ansible-vault
$ ansible-vault
$ ansible-vault [create|decrypt|edit|encrypt|rekey|view] [--help] [options] vaultfile.yml
--ask-vault-pass | 詢問保險庫密碼 |
-h, --help | 顯示此幫助資訊并退出 |
--new-vault-password-file=NEW_VAULT_PASSWORD_FILE | 用于重新生成密鑰的新保管庫密碼檔案 |
--output=OUTPUT_FILE | 用于加密或解密的輸出檔案名; 使用 - 用于标準輸出 |
--vault-password-file=VAULT_PASSWORD_FILE | 保險庫密碼檔案 |
-v, --verbose | 詳細模式(-vvv 更多,-vvvv 啟用連接配接調試) |
--version | 顯示程式的版本号并退出 |
ansible-playbook
$ ansible-playbook
$ ansible-playbook playbook.yml
--ask-vault-pass | 詢問保險庫密碼 |
-C, --check | 不要做任何改變;相反,嘗試預測可能發生的一些變化 |
-D, --diff | 更改(小)檔案和模闆時,顯示這些檔案中的差異;與 --check 配合使用效果很好 |
-e EXTRA_VARS, --extra-vars=EXTRA_VARS | 将附加變量設定為 key=value 或 YAML/JSON |
--flush-cache | 清除事實緩存 |
--force-handlers | 即使任務失敗也運作處理程式 |
-f FORKS, --forks=FORKS | 指定要使用的并行程序數(預設值=5) |
-h, --help | 顯示此幫助資訊并退出 |
-i INVENTORY, --inventory-file=INVENTORY | 指定清單主機路徑(預設=/etc/ansible/hosts)或逗号分隔的主機清單 |
-l SUBSET, --limit=SUBSET | 進一步将標明主機限制為其他模式 |
--list-hosts | 輸出比對主機清單;不執行任何其他操作 |
--list-tags | 列出所有可用的标簽 |
--list-tasks | 列出所有将要執行的任務 |
-M MODULE_PATH, --module-path=MODULE_PATH | 指定子產品庫的路徑(預設=無) |
--new-vault-password-file=NEW_VAULT_PASSWORD_FILE | 用于重新生成密鑰的新保管庫密碼檔案 |
--output=OUTPUT_FILE | 用于加密或解密的輸出檔案名;使用 - 用于标準輸出 |
--skip-tags=SKIP_TAGS | 隻運作标簽與這些值不比對的播放和任務 |
--start-at-task=START_AT_TASK | 在比對此名稱的任務處啟動劇本 |
--step | 一步一步:在運作前确認每個任務 |
--syntax-check | 對 playbook 執行文法檢查,但不要執行它 |
-t TAGS, --tags=TAGS | 隻運作帶有這些值标記的播放和任務 |
--vault-password-file=VAULT_PASSWORD_FILE | 保險庫密碼檔案 |
-v, --verbose | 詳細模式(-vvv 更多,-vvvv 啟用連接配接調試) |
--version | 顯示程式的版本号并退出 |
連接配接選項:
-k, --ask-pass | 詢問連接配接密碼 |
--private-key=PRIVATE_KEY_FILE, --key-file=PRIVATE_KEY_FILE | 使用此檔案來驗證連接配接 |
-u REMOTE_USER, --user=REMOTE_USER | 以此使用者身份連接配接(預設=None) |
-c CONNECTION, --connection=CONNECTION | 要使用的連接配接類型(預設=smart) |
-T TIMEOUT, --timeout=TIMEOUT | 以秒為機關覆寫連接配接逾時(預設值 = 10) |
--ssh-common-args=SSH_COMMON_ARGS | 指定要傳遞給 sftp/scp/ssh 的常用參數(例如 ProxyCommand) |
--sftp-extra-args=SFTP_EXTRA_ARGS | 指定僅傳遞給 sftp 的額外參數(例如 -f、-l) |
--scp-extra-args=SCP_EXTRA_ARGS | 指定僅傳遞給 scp 的額外參數(例如 -l) |
--ssh-extra-args=SSH_EXTRA_ARGS | 指定僅傳遞給 ssh 的額外參數(例如 -R) |
特權更新選項:
-s, --sudo | 使用 sudo (nopasswd) 運作操作(已棄用,使用 become) |
-U SUDO_USER, --sudo-user=SUDO_USER | 所需的 sudo 使用者(預設=root)(已棄用,使用become) |
-S, --su | 使用 su 運作操作(已棄用,使用 become) |
-R SU_USER, --su-user=SU_USER | 以該使用者身份使用 su 運作操作(預設 = root)(已棄用,使用become) |
-b, --become | 使用 become 運作操作(不暗示密碼提示) |
--become-method=BECOME_METHOD | 要使用的權限提升方法(預設=sudo),有效選擇:[ sudo | su | pbrun | pfexec | runas | doas | dzdo ] |
--become-user=BECOME_USER | 以該使用者身份運作操作(預設=root) |
--ask-sudo-pass | 詢問 sudo 密碼(已棄用,使用 become) |
--ask-su-pass | 詢問 su 密碼(已棄用,使用 become) |
-K, --ask-become-pass | 要求提權密碼 |
ansible-pull
$ ansible-pull
$ ansible-pull -U <repository> [options]
--accept-host-key | 如果尚未添加,則添加 repo url 的主機密鑰 |
--ask-vault-pass | 詢問保險庫密碼 |
-C CHECKOUT, --checkout=CHECKOUT | 分支/标簽/送出結帳。預設為存儲庫子產品的行為。 |
-d DEST, --directory=DEST | 簽出存儲庫的目錄 |
-e EXTRA_VARS, --extra-vars=EXTRA_VARS | 将附加變量設定為 key=value 或 YAML/JSON |
-f, --force | 即使無法更新存儲庫也運作 playbook |
--full | 做一個完整的克隆,而不是一個淺的 |
-h, --help | 顯示此幫助資訊并退出 |
-i INVENTORY, --inventory-file=INVENTORY | 指定清單主機路徑(預設=/etc/ansible/hosts)或逗号分隔的主機清單 |
-l SUBSET, --limit=SUBSET | 進一步将標明主機限制為其他模式 |
--list-hosts | 輸出比對主機清單;不執行任何其他操作 |
-m MODULE_NAME, --module-name=MODULE_NAME | 存儲庫子產品名稱,ansible 将使用它來簽出 repo。預設是 git |
-M MODULE_PATH, --module-path=MODULE_PATH | 指定子產品庫的路徑(預設=無) |
--new-vault-password-file=NEW_VAULT_PASSWORD_FILE | 用于重新生成密鑰的新保管庫密碼檔案 |
-o, --only-if-changed | 僅在存儲庫已更新時才運作 playbook |
--output=OUTPUT_FILE | 用于加密或解密的輸出檔案名;使用 - 用于标準輸出 |
--purge | 劇本運作後清除結帳 |
--skip-tags=SKIP_TAGS | 隻運作标簽與這些值不比對的播放和任務 |
-s SLEEP, --sleep=SLEEP | 在開始之前休眠随機間隔(在 0 到 n 秒之間)。這是分散 git 請求的有用方法 |
-t TAGS, --tags=TAGS | 隻運作帶有這些值标記的播放和任務 |
-U URL, --url=URL | 劇本存儲庫的 URL |
--vault-password-file=VAULT_PASSWORD_FILE | 保險庫密碼檔案 |
-v, --verbose | 詳細模式(-vvv 更多,-vvvv 啟用連接配接調試) |
--verify-commit | 驗證簽出送出的 GPG 簽名,如果失敗則中止運作 playbook。這就需要對應的VCS子產品來支援這樣的操作 |
--version | 顯示程式的版本号并退出 |
連接配接選項:
-k, --ask-pass | 詢問連接配接密碼 |
--private-key=PRIVATE_KEY_FILE, --key-file=PRIVATE_KEY_FILE | 使用此檔案來驗證連接配接 |
-u REMOTE_USER, --user=REMOTE_USER | 以此使用者身份連接配接(預設=無) |
-c CONNECTION, --connection=CONNECTION | 要使用的連接配接類型(預設=智能) |
-T TIMEOUT, --timeout=TIMEOUT | 以秒為機關覆寫連接配接逾時(預設值 = 10) |
--ssh-common-args=SSH_COMMON_ARGS | 指定要傳遞給 sftp/scp/ssh 的常用參數(例如 ProxyCommand) |
--sftp-extra-args=SFTP_EXTRA_ARGS | 指定僅傳遞給 sftp 的額外參數(例如 -f、-l) |
--scp-extra-args=SCP_EXTRA_ARGS | 指定僅傳遞給 scp 的額外參數(例如 -l) |
--ssh-extra-args=SSH_EXTRA_ARGS | 指定僅傳遞給 ssh 的額外參數(例如 -R) |
特權更新選項:
--ask-sudo-pass | 詢問 sudo 密碼(已棄用,使用become) |
--ask-su-pass | 詢問 su 密碼(已棄用,使用become) |
-K, --ask-become-pass | 要求提權密碼 |