本文共 10481 字,大约阅读时间需要 34 分钟。
loop: ##赋值列表 - value1 - value2 - ...{ {item}} ##迭代变量名称#实例#---- name: create file hosts: 172.25.0.254 tasks: - name: file module file: name: /mnt/{ {item}} state: present loop: - westos_file1 - westos_file2
---- name: create file hosts: 172.25.0.254 tasks: - name: file module service: name: "{ { item.name}}" state: "{ { item.state }}" loop: - name: httpd state: started - name: vsftpd state: stopped
---- name: create file hosts: list1 tasks: - name: create group group: name: "{ {item.name}}" gid: "{ {item.gid}}" state: present loop: - name: shengchan gid: 8000 - name: caiwu gid: 8001 - name: jishu gid: 8002 - name: westosuser gid: 8003 - name: linux gid: 8004 - name: westosadmin gid: 8005 - name: create user user: name: "{ {item.name}}" groups: "{ {item.groups}}" group: "{ {item.group}}" shell: "{ {item.shell}}" uid: "{ {item.uid}}" password: '$6$4RBSjfuYIt694mEi$KetzruRtGRzZIPA4B/hDCimIWCalsOkzCH2GEoHvRTZpDXWL1xf.0.SYDg.SQ6KwtMUDKsNIcH0MAd3AHBRET0' loop: - name: westosuser groups: shengchan, jishu group: 8003 shell: /bin/bash uid: 8003 - name: lee groups: jishu group: caiwu shell: /bin/bash uid: 8001 - name: linux groups: linux group: linux shell: /sbin/nologin uid: 8004 - name: westosadmin groups: westosadmin group: westosadmin shell: /bin/bash uid: 8005 - name: westosadmin lineinfile: path: /etc/sudoers regexp: "^root" insertafter: "^root" line: "westosadmin { {ansible_facts['fqdn']}}=(root) NOPASSWD: /sbin/useradd, /sbin/userdel, /sbin/usermod" - name: configure password messages shell: chage -d 0 -M 30 -W 2 "{ {item}}" loop: - westosuser - lee - westosadmin
---- name: dnf and create user hosts: 172.25.11.3 tasks: - name: dnf vsftpd http dhcp-server dnf : name: "{ {item.name}}" state: present loop: - name: vsftpd - name: httpd - name: dhcp-server - name: create group group: name: "{ {item.name}}" gid: "{ {item.gid}}" state: present loop: - name: westosuser1 gid: 444 - name: westosuser2 gid: 6666 - name: westosuser gid: 21 ignore_errors: yes ###受控主机中的21组存在,忽略错误继续执行 - name: create user user: name: "{ {item.name}}" group: "{ {item.group}}" home: "{ {item.home}}" groups: 21 loop: - name: westosuser1 group: 444 home: /mnt/westosuser1 - name: westosuser2 group: 6666 home: /mnt/westosuser2
when: - 条件1 - 条件2
#条件判断#= value == "字符串",value == 数字< value < 数字> value > 数字<= value <= 数字>= value >= 数字 != value != 数字is defined value value is defined 变量存在is not defined value is not defined 变量不存在bool变量 为true value value的值为truebool变量 false not value value的值为false value in value2 value的值在value2列表中
when: 条件1 and 条件2 - 条件1 - 条件2when: 条件1 or 条件2when: > 条件1 or 条件2
---- name: check vsftpd hosts: 172.25.11.3 tasks: - name: check vsftpd shell: rpm -q vsftpd register: vsftpd_state ignore_errors: yes - name: debug debug: msg: it is not installed vsftpd" when: vsftpd_state.rc == 1 - name: dnf vsftpd dnf: name: vsftpd state: present when: vsftpd_stste.rc == 1
notify: 触发器当遇到更改是触发handlershandlers: 触发器触发后执行的动作#实例#---- name: create virtualhost for web server hosts: 172.25.0.254 vars_files: ./vhost_list.yml tasks: - name: create document file: path: "{ {web2.document}}" state: directory - name: create vhost.conf copy: dest: /etc/httpd/conf.d/vhost.conf content: "\n\tServerName { {web1.name}}\n\tDocumentRoot { {web1.document}}\n\tCustomLog logs/{ {web1.name}}.log combined\n \n\n\n\tServerName { {web2.name}}\n\tDocumentRoot { {web2.document}}\n\tCustomLog logs/{ {web2.name}}.log combined\n " notify: restart apache handlers: - name: restart apache service: name: httpd state: restarted
---- name: creat vsftpd hosts: all tasks: - name: install vsftpd dnf: name: vsftpd state: present - name: config vsftpd.conf template: src: ~/ansible/vsftpd.conf.j2 dest: /etc/vsftpd/vsftpd.conf notify: restart vsftpd - name: config ftpdir file: path: /var/ftp/pub group: ftp mode: '0775' setype: "public_content_rw_t" - name: set sebool seboolean: name: ftpd_anon_write state: yes persistent: yes - firewalld: zone: public service: ftp permanent: yes state: enabled immediate: yes handlers: - name: restart vsftpd service: name: vsftpd state: restarted
- name: check sdb hosts: 172.25.11.2 tasks: - name: check debug: msg: "{ {ansible_facts.all_ipv4_addresses}} is not exist with /dev/sdb" when: ansible_facts.devices.sdb is not defined - name: parted parted: device: /dev/sdb number: 1 state: present part_end: 1GiB when: ansible_facts.devices.sdb is defined notify: - filesystem - mounted handlers: - name: filesystem filesystem: dev: /dev/sdb1 fstype: xfs - name: mounted mount: path: /westos src: /dev/sdb1 fstype: xfs state: mounted
#作用:当play遇到任务失败是会终止ignore_errors: yes 将会忽略任务失败使下面的任务继续运行#实例#- name: test dnf: name: westos state: latest ignore_errors: yes - name: create file file: path: /mnt/westos state: touch
#作用:#当任务失败后play被终止也会调用触发器进程#example---- name: apache change port hosts: 172.25.0.254 force_handlers: yes vars: http_port: 80 tasks: - name: configure apache conf file lineinfile: path: /etc/httpd/conf/httpd.conf regexp: "^Listen" line: "Listen { { http_port }}" notify: restart apache - name: install error ###没有westos服务,所以这部会出现错误,后续无法执行,force_handlers 强制执行 dnf: name: westos state: latest handlers: - name: restart apache service: name: httpd state: restarted enabled: yes
#作用:#控制任务在何时报告它已进行更改---- name: apache change port hosts: 172.25.0.254 force_handlers: yes vars: http_port: 8080 tasks: - name: configure apache conf file lineinfile: path: /etc/httpd/conf/httpd.conf regexp: "^Listen" line: "Listen { { http_port }}" changed_when: true notify: restart apache handlers: - name: restart apache service: name: httpd state: restarted enabled: yes
#当符合条件时强制任务失败---- name: test hosts: 172.25.0.254 tasks: - name: shell shell: echo hello register: westos failed_when: "'hello' in westos.stdout"
block: ##定义要运行的任务rescue: ##定义当block句子中出现失败任务后运行的任务always: ##定义最终独立运行的任务
---- name: create /dev/vdb1 hosts: all tasks: - block: - parted: device: /dev/vdb number: 1 state: present part_end: 2000MiB - parted: device: /dev/vdb number: 1 state: absent - parted: device: /dev/vdb number: 1 state: present part_end: 1500MiB when: ansible_facts['devices']['vdb'] is defined rescue: - debug: msg: /dev/vdb is less then 2G - parted: device: /dev/vdb number: 1 state: present part_end: 800MiB always: - filesystem: fstype: xfs dev: /dev/vdb1 force: yes - mount: path: /westos src: /dev/vdb1 fstype: xfs state: mounted - name: check /dev/vdb debug: msg: "vdb is not exist" when: ansible_facts['devices']['vdb'] is not defined
- name: check sdb hosts: all tasks: - name: check debug: msg: "{ {ansible_facts.all_ipv4_addresses}} is not exist with /dev/sdb" when: ansible_facts.devices.sdb is not defined - name: create sdb1 block: - name: create 1500M sdb1 parted: device: /dev/sdb number: 1 state: present part_end: 1500 MiB when: ansible_facts.devices.sdb is defined notify: - filesystem - mounted rescue: - name: check /dev/sdb debug: msg: "{ {ansible_facts.all_ipv4_addresses}} 's /dev/sdb is less than 1500M; ## 注意:不同版本的虚拟机所列出的信息不一致,先使用 ansible ip -m setup 列出信息 when: ansible_facts.devices.sdb is defined - name: create /dev/sdb parted: device: /dev/sdb number: 1 state: present part_end: 800MiB when: ansible_facts.devices.sdb is defined notify: - filesystem - mounted handlers: - name: filesystem filesystem: dev: /dev/sdb1 fstype: xfs - name: mounted mount: path: /westos src: /dev/sdb1 fstype: xfs state: mounted
转载地址:http://lnhzi.baihongyu.com/