Ansible自动化运维
安装
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 [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
$ ansible-galaxy search --platforms
$ ansible-galaxy search --galaxy-tags
$ ansible-galaxy info
$ ansible-galaxy install -p
$ ansible-galaxy install -r ...
$ ansible-galaxy list
$ ansible-galaxy remove
$ ansible-galaxy init
$ ansible-galaxy init --offline
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 [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 | 要求提权密码 |