1.判断语句when
[root@manager ansible_tasks]
- hosts: webservers
tasks:
- name: Installed HTTP Server
yum:
name: httpd
state: present
when: (ansible_distribution == "CentOS")
- name: Installed HTTP Server
yum:
name: httpd2
state: present
when: (ansible_distribution == "Ubuntu")
[root@manager ansible_tasks]
[root@manager ansible_tasks]
- hosts: all
tasks:
- name: Installed Nginx Web Server
yum:
name: nginx
state: present
when: ( ansible_hostname is match("web*"))
[root@manager ansible_tasks]
2.循环语句loop|with_items
2.1一个tasks安装多个软件 (列表)
[root@manager ansible_tasks]
- hosts: webservers
tasks:
- name: Install Rpm All
yum:
name: "{{ item }}"
state: present
loop:
- httpd
- httpd-tools
- name: ensure a list of packages installed
yum:
name: "{{ packages }}"
vars:
packages:
- httpd
- httpd-tools
[root@manager ansible_tasks]
2.2一个tasks启动多个服务 (列表)
[root@manager ansible_tasks]
- hosts: webservers
tasks:
- name: Started Nginx And PHP-FPM Server
systemd:
name: "{{ item }}"
state: started
enabled: yes
loop:
- nginx
- php-fpm
[root@manager ansible_tasks]
2.3一个tasks拷贝多个文件 (字典)
[root@manager ansible_tasks]
- hosts: webservers
tasks:
- name: Configure Rsync Deamon
copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
mode: "{{ item.mode }}"
loop:
- { src: rsyncd.conf.j2, dest: /opt/rsyncd.conf, mode: "0644" }
- { src: rsync.pass.j2, dest: /opt/rsync.pass, mode: "0600" }
[root@manager ansible_tasks]
[root@manager ansible_tasks]
- hosts: webservers
tasks:
- name: Create Users
user:
name: "{{ item.name }}"
uid: "{{ item.uid }}"
group: "{{ item.group }}"
shell: "{{ item.shell }}"
loop:
- { name: testuser1 , uid: 8989 , group: bin , shell: /bin/bash }
- { name: testuser2 , uid: 7878 , group: root , shell: /bin/sh }
[root@manager ansible_tasks]
3.触发器 Handlers
4.标签 Tag
[root@manager ansible_tasks]
- hosts: webservers
tasks:
- name: Install Nfs Server
yum:
name: nfs-utils
state: present
tags: install_nfs
- name: Service Nfs Server
service:
name: nfs-server
state: started
enabled: yes
tags: start_nfs
[root@manager ansible_tasks]
[root@manager ansible_tasks]
5.包含 Include | include_tasks
[root@manager ansible_tasks]
- name: Restart Nginx Server
systemd:
name: nginx
state: restarted
[root@manager ansible_tasks]
- hosts: webservers
tasks:
- name: A Project command
command: echo "A"
- name: Restart Nginx
include: restart_nginx.yml
[root@manager ansible_tasks]
- hosts: webservers
tasks:
- name: B Project command
command: echo "B"
- name: Restart Nginx
include: restart_nginx.yml
[root@manager ansible_tasks]
[root@manager ansible_tasks]
6.忽略错误 Ignore_errors
[root@manager ansible_tasks]
- hosts: webservers
tasks:
- name: Shell Command
command: /bin/false
ignore_errors: yes
- name: Create File
file:
path: /tmp/oldux_tt
state: touch
7.异常处理
- 控制task报告的状态,不一定必须是"changed"
[root@manager ansible_tasks]
- hosts: webservers
tasks:
- name: Get Nginx Port Status
shell: netstat -lntp | grep nginx
register: ngx_status
- name: Debug Nginx Status
debug:
msg: "{{ ngx_status.stdout_lines }}"
[root@manager ansible_tasks]
- hosts: webservers
tasks:
- name: Get Nginx Port Status
shell: netstat -lntp | grep nginx
register: ngx_status
changed_when: false
- name: Debug Nginx Status
debug:
msg: "{{ ngx_status.stdout_lines }}"
- 使用changed_when检查tasks任务返回的结果
[root@manager ansible_tasks]
- hosts: webservers
tasks:
- name: Install Nginx Server
yum:
name: nginx
state: present
tags: Install_Nginx_Server
- name: Configure Nginx Server
copy:
src: ./nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Restart Nginx Server
- name: Check Nginx Configure File
shell: nginx -t
register: check_ngx
changed_when:
- false
- check_ngx.stdout.find('successful')
- name: Started Nginx Server
systemd:
name: nginx
state: started
enabled: yes
handlers:
- name: Restart Nginx Server
systemd:
name: nginx
state: restarted