ansible命令行工具常用选项
选项:
-a MODULE_ARGS, --args=MODULE_ARGS 模块参数
-C, --check 运行检查,不执行任何操作
-e EXTRA_VARS, --extra-vars=EXTRA_VARS 设置附加变量 key=value
-f FORKS, --forks=FORKS 指定并行进程数量,默认5
-i INVENTORY, --inventory=INVENTORY 指定主机清单文件路径
--list-hosts 输出匹配的主机列表,不执行任何操作
-m MODULE_NAME, --module-name=MODULE_NAME 执行的模块名,默认command
--syntax-check 语法检查playbook文件,不执行任何操作
-t TREE, --tree=TREE 将日志输出到此目录
-v, --verbose 详细信息,-vvv更多, -vvvv debug
--version 查看程序版本
连接选项:控制谁连接主机和如何连接
-k, --ask-pass 请求连接密码
--private-key=PRIVATE_KEY_FILE, --key-file=PRIVATE_KEY_FILE 私钥文件
-u REMOTE_USER, --user=REMOTE_USER 连接用户,默认None
-T TIMEOUT, --timeout=TIMEOUT 覆盖连接超时时间,默认10秒
提权选项:控制在目标主机以什么用户身份运行
-b, --become 以另一个用户身份操作
--become-method=BECOME_METHOD 提权方法,默认sudo
--become-user=BECOME_USER 提权后的用户身份,默认root
-K, --ask-become-pass 提权密码
[root@es1 playbook-demo]# cat nginx.yml
---
- hosts: webservers
vars:
hello: Ansible
tasks:
- name: Add repo
yum_repository:
name: nginx
description: nginx repo
baseurl: http://nginx.org/packages/centos/7/$basearch/
gpgcheck: no
enabled: 1
- name: Install nginx
yum:
name: nginx
state: latest
- name: Copy nginx configuration file
copy:
src: ./site.conf
dest: /etc/nginx/conf.d/site.conf
- name: Start nginx
service:
name: nginx
state: started
- name: Create wwwroot directory
file:
dest: /var/www/html
state: directory
- name: Create test page index.html
shell: echo "hello {{hello}}" > /var/www/html/index.html
[root@es1 playbook-demo]#
[root@es1 playbook-demo]#
[root@es1 playbook-demo]#
[root@es1 playbook-demo]#
[root@es1 playbook-demo]# cat site.conf
server {
listen 80;
server_name www.ctnrs.com;
location / {
root /var/www/html;
index index.html;
}
}
[root@es1 playbook-demo]#
[root@es1 playbook-demo]# ansible-playbook nginx.yml
PLAY [webservers] ********************************************************************************************************************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************************************************************************
ok: [192.168.0.12]
ok: [192.168.0.13]
TASK [Add repo] **********************************************************************************************************************************************************************************
changed: [192.168.0.12]
changed: [192.168.0.13]
TASK [Install nginx] *****************************************************************************************************************************************************************************
changed: [192.168.0.13]
changed: [192.168.0.12]
TASK [Copy nginx configuration file] *************************************************************************************************************************************************************
changed: [192.168.0.12]
changed: [192.168.0.13]
TASK [Start nginx] *******************************************************************************************************************************************************************************
changed: [192.168.0.13]
changed: [192.168.0.12]
TASK [Create wwwroot directory] ******************************************************************************************************************************************************************
changed: [192.168.0.12]
changed: [192.168.0.13]
TASK [Create test page index.html] ***************************************************************************************************************************************************************
changed: [192.168.0.13]
changed: [192.168.0.12]
PLAY RECAP ***************************************************************************************************************************************************************************************
192.168.0.12 : ok=7 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.0.13 : ok=7 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@es1 playbook-demo]#
[root@es2 ~]# curl 192.168.0.12 -H "Host:www.ctnrs.com"
[root@es1 playbook-demo]# cat demo.yml
---
- name: play1
hosts: webservers
remote_user: root
vars:
var_name: value
tasks:
- name: echo
shell: "echo {{var_name}}"
- name: play2
hosts: webservers
remote_user: root
vars:
var_name: value
tasks:
- name: echo
shell: "echo {{var_name}}"
[root@es1 playbook-demo]#
[root@es1 playbook-demo]# ansible-playbook demo.yml
PLAY [play1] *************************************************************************************************************************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************************************************************************
ok: [192.168.0.12]
ok: [192.168.0.13]
TASK [echo] **************************************************************************************************************************************************************************************
changed: [192.168.0.12]
changed: [192.168.0.13]
PLAY [play2] *************************************************************************************************************************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************************************************************************
ok: [192.168.0.12]
ok: [192.168.0.13]
TASK [echo] **************************************************************************************************************************************************************************************
changed: [192.168.0.13]
changed: [192.168.0.12]
PLAY RECAP ***************************************************************************************************************************************************************************************
192.168.0.12 : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.0.13 : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@es1 playbook-demo]#
notify:在任务结束时触发
handlers:由特定条件触发Tasks
[root@es1 playbook-demo]# cat demo3.yml
---
- hosts: webservers
gather_facts: no
tasks:
- name: Copy nginx configuration file
copy:
src: ./site.conf
dest: /etc/nginx/conf.d/site.conf
notify:
- restart nginx
handlers:
- name: restart nginx
service: name=nginx state=reloaded
[root@es1 playbook-demo]#
[root@es1 playbook-demo]#
[root@es1 playbook-demo]# ansible-playbook demo3.yml --syntax-check
playbook: demo3.yml
[root@es1 playbook-demo]# ansible-playbook demo3.yml
PLAY [webservers] ********************************************************************************************************************************************************************************
TASK [Copy nginx configuration file] *************************************************************************************************************************************************************
ok: [192.168.0.12]
ok: [192.168.0.13]
PLAY RECAP ***************************************************************************************************************************************************************************************
192.168.0.12 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.0.13 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@es1 playbook-demo]#
[root@es1 playbook-demo]#
任务控制(tags)与Playbook调试
[root@es1 playbook-demo]# cat demo4.yml
---
- hosts: webservers
gather_facts: no
tasks:
- name: Install redis
yum: name=redis state=present
tags: install
- name: Copy redis configuration file
copy: src=redis.conf dest=/etc/redis/redis.conf
tags: configuration
- name: Restart redis
service: name=redis state=restarted
tags: restart
[root@es1 playbook-demo]# ansible-playbook demo4.yml --syntax-check
playbook: demo4.yml
[root@es1 playbook-demo]#
指定:ansible-playbook example.yml --tags "configuration,install"
跳过:ansible-playbook example.yml --skip-tags "install"
Playbook文件调试(debug)
[root@es1 playbook-demo]# cat demo5.yml
---
- name: play1
hosts: webservers
gather_facts: no
remote_user: root
vars:
var_name: value
appuser: usa
tasks:
- name: echo1
#shell: "echo {{var_name}}"
debug: msg="{{var_name}}"
tags: test1
- name: echo2
shell: "echo {{appuser}}"
tags: test2
[root@es1 playbook-demo]#
[root@es1 playbook-demo]# ansible-playbook demo5.yml --tags "test1"
PLAY [play1] *************************************************************************************************************************************************************************************
TASK [echo1] *************************************************************************************************************************************************************************************
ok: [192.168.0.12] => {
"msg": "value"
}
ok: [192.168.0.13] => {
"msg": "value"
}
PLAY RECAP ***************************************************************************************************************************************************************************************
192.168.0.12 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.0.13 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@es1 playbook-demo]#
[root@es1 playbook-demo]# ansible-playbook demo5.yml --tags "test2"
PLAY [play1] *************************************************************************************************************************************************************************************
TASK [echo2] *************************************************************************************************************************************************************************************
changed: [192.168.0.12]
changed: [192.168.0.13]
PLAY RECAP ***************************************************************************************************************************************************************************************
192.168.0.12 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.0.13 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@es1 playbook-demo]#
[root@es1 playbook-demo]#