目录
- {{item}} 迭代变量名称
- loop:
- - value1
- - value2
- - ... //赋值列表
-
-
- {{item}} //迭代变量名称
- - name: create file
- hosts: host1
- tasks:
- - name: file moudle
- service:
- name: "{{ item.name }}"
- state: "{{ item.state }}"
- loop:
- - name: httpd
- state: started
- - name: vsftpd
- state: stopped
- ~


- when:
- - 条件1
- - 条件2




- = //value == “字符串”,value == 数字 解释
- < //value < 数字
- > //value > 数字
- <= //value <= 数字
- >= //value >= 数字
- != //value != 数字
- is defined value //value is defined 变量存在
- is not defined //value is not defined 变量不存在
- in //value is in value 变量为
- not in //value is not in value 变量不为
- bool变量 为true value //value的值为true
- bool变量 false not value //value的值为false
多条条件组合
- when:
- 条件1 and 条件2
- - 条件1
- - 条件2 //当条件1和条件2都为真
-
- when:
- 条件1 or 条件2 //满足其中一个
-
- when: >
- 条件1
- or
- 条件2 //满足其中一个
创建两个用户 user1 和 user2, user1 的 UID 是 6666,注释是 user1 comment,user2 的 UID 是 7777,没有注释。
- vim userlist.yml
- userlist:
- - name: user1
- id: 6666
- comment: user1 comment
- - name: user2
- id: 7777
-
- vim usercreate.yml
- - name: create user
- hosts: all
- vars_files: ./userlist.yml
- tasks:
- - name: create user with comment
- user:
- name: "{{item.name}}"
- uid: "{{item.id}}"
- comment: "{{item.comment}}"
- state: present
- when: item.comment is defined
- loop:
- "{{userlist}}"
-
- - name: create user without comment
- user:
- name: "{{item.name}}"
- uid: "{{item.id}}"
- state: present
- when: item.comment is not defined
- loop:
- "{{userlist}}"



- notify: //触发器当遇到更改是触发handlers
- handlers: //触发器触发后执行的动作
在指定的服务器上部署网站,并创建一个简单的主页
- vim webs.yml
- webs:
- - name: bbs.westos.org
- doc: /var/www/virtual/westos.org/bbs/html
- index: "bbs.westos.org's page"
-
- - name: login.westos.org
- doc: /var/www/virtual/westos.org/login/html
- index: "login.westos.org's page"
-
- - name: www.westos.org
- doc: /var/www/html
- index: "www.westos.org's page"
-

- vim html.j2
- {% for web in webs %}
- {% if web.name is not defined %}
- <VirtualHost _default_:80>
- {% elif web.name is defined %}
- <VirtualHost *:80>
- ServerName {{web.name}}
- {% endif %}
- DocumentRoot {{web.doc}}
- </VirtualHost>
- {% endfor %}

- vim web.yml
- - name: Create website index page
- hosts: all
- vars_files: ./webs.yml
-
- tasks:
- - name: install httpd
- yum:
- name: httpd
- state: present
-
- - name: service
- service:
- name: httpd
- state: started
- enabled: no
-
- - name: Create index.html for each website
- template:
- src: ./html.j2
- dest: "/etc/httpd/conf.d/vhost.conf"
- notify: restart httpd
-
- - name: create directory
- lineinfile:
- path: "{{item.doc}}/index.html"
- line: "{{ item.index }}"
- create: yes
- loop: "{{webs}}"
-
- handlers:
- - name: restarted httpd
- service:
- name: httpd
- state: restarted

作用:当play遇到任务失败时会终止
ignore_errors:yes //将会忽略任务失败使下面的任务运行
- - name: ignore
- hosts: all
- tasks:
- - name: test file
- shell: test -e /mnt/test
- ignore_errors: no/yes
- - debug:
- msg: hello



作用: 当任务失败后play被终止也会调用触发器进程
- - name: ignore
- hosts: all
- force_handlers: yes
- tasks:
- - name: test file
- shell: test -e /mnt/test
- notify: DEBUG
- - name: error
- yum:
- name: haha
- handlers:
- - name: DEBUG
- debug:
- msg: hello



作用:控制任务在何时报告它已进行更改,用于指定一个条件,当这个条件成立时,任务将被标记为已更改。
- - name: ignore
- hosts: all
- force_handlers: yes
- tasks:
- - name: test file
- lineinfile:
- path: /mnt/test
- line: "hello world"
- notify: DEBUG
- changed_when: false
- handlers:
- - name: DEBUG
- debug:
- msg: hello



作用:当符合条件时会强制任务失败
- - name: ignore
- hosts: all
- force_handlers: yes
- tasks:
- - name: test file
- shell: echo hello
- register: HA
- failed_when: "'hello' in HA.stdout"


- block: //定义要运行的任务
- rescue: //定义当block句子中出现失败任务后运行的任务
- always: //定义最终独立运行的任务
给/dev/sdb分区,如果/dev/sdb不存在请输入:/dev/sdb is not exist ,如果/dev/sdb不足1.5G请输出/dev/sdb is less than 1.5G
并建立800M大小的/dev/sdb1,挂载到/westos上
- - name: fdisk
- hosts: all
- vars:
- mount_point: /westos
- device: /dev/sdb
- tasks:
- - name: Check if device exists
- stat:
- path: "{{ device }}"
- register: device_stat
- ignore_errors: yes
-
- - name: Fail if device does not exist
- debug:
- msg: "/dev/sdb is not exist"
- when: not device_stat.stat.exists
-
- - name: create /dev/sdb1
- block:
- - name: create 1500M
- parted:
- device: "{{device}}"
- number: 1
- state: present
- part_end: 1500GiB
- when: device_stat.stat.exists
- - debug:
- msg: /dev/sdb is lee than 1.5G
- rescue:
- - name: create 800M
- parted:
- device: "{{device}}"
- number: 1
- state: present
- part_end: 800MiB
- when: device_stat.stat.exists
- notify:
- - Format partition
- - Mount partition
- handlers:
- - name: Format partition
- filesystem:
- fstype: ext4
- dev: "{{device}}1"
- - name: Mount partition
- mount:
- path: "{{ mount_point }}"
- src: "{{ device}}1"
- fstype: ext4
- state: mounted
