| 知乎专栏 |
定义组
# cat /etc/ansible/hosts [www] 192.168.2.23
创建yml文件
# cat test.yml
---
- hosts: www
user: root
tasks:
- name: no selinux
action: command /usr/sbin/setenforce 0
- name: no iptables
action: service name=iptables state=stopped
- name: made up task just to show variables work here
action: command /bin/echo release is $release
执行任务
# ansible-playbook test.yml -u root -T 1 PLAY [www] ********************* GATHERING FACTS ********************* ok: [192.168.2.23] TASK: [no selinux] ********************* ok: [192.168.2.23] TASK: [no iptables] ********************* ok: [192.168.2.23] TASK: [made up task just to show variables work here] ********************* ok: [192.168.2.23] PLAY RECAP ********************* 192.168.2.23 : ok=4 changed=2 unreachable=0 failed=0
# ansible-playbook update.yml --list-hosts
playbook: update.yml
play #1 (all): host count=11
192.168.2.10
192.168.2.11
192.168.2.12
192.168.2.13
192.168.2.15
192.168.6.10
192.168.6.11
192.168.6.12
192.168.6.13
192.168.6.15
192.168.2.9
我们将下面的playbook文件分成三个文件,这样更灵活。
---
- hosts: all
remote_user: username
sudo: yes
tasks:
- yum: name=wget state=present
when: ansible_distribution == 'CentOS' or ansible_distribution == 'Red Hat Enterprise Linux'
- yum: name=gcc state=present
when: ansible_distribution == 'CentOS' or ansible_distribution == 'Red Hat Enterprise Linux'
tasks/cenos.yml
- yum: name=wget state=present - yum: name=gcc state=present
tasks/deban.yml
- apt: pkg=wget state=present - apt: pkg=gcc state=present
playbook.yml
---
- hosts: all
remote_user: username
sudo: yes
tasks:
- include: tasks/centos.yml
when: ansible_distribution == 'CentOS' or ansible_distribution == 'Red Hat Enterprise Linux'
- include: tasks/debian.yml
when: ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu'
执行playbook
# ansible-playbook playbook.yml