5、Ansible流程控制
版权声明:原创作品,谢绝转载!否则将追究法律责任。
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。
当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。
问问自己,想要怎样的人生。
playbook条件语句
不管是 shell 还是各大编程语言中,流程控制,条件判断这些都是必不可少的,在我们使用 Ansible 的过程中,条件判断的使用频率极其高。
例如:
1.我们使用不同的系统的时候,可以通过判断系统来对软件包进行安装。
2.在 nfs 和 rsync 安装过程中,客户端服务器不需要推送配置文件,之前我们都是写多个play,会影响效率。
3.我们在源码安装nginx的时候,执行第二遍就无法执行了,此时我们就可以进行判断是否安装过。
【根据不同的操作系统安装apache】
官方示例:
tasks:
‐ name: "shut down Debian flavored systems"
command: /sbin/shutdown ‐t now
when: ansible_facts['os_family'] == "Debian"
# note that all variables can be used directly in conditionals without double curly
braces
‐ hosts: web_group
tasks:
‐ name: Install CentOS Httpd
yum:
name: httpd
state: present
#官方
when: ansible_facts['os_family'] == "CentOS"
#非官方
when: ansible_distribution == "CentOS"
‐ name: Install Ubuntu Httpd
yum:
name: apache2
state: present
when: ansible_facts['os_family'] == "Ubuntu"
【还可以使用括号对条件进行分组】
tasks:
‐ name: "shut down CentOS 6 and Debian 7 systems"
command: /sbin/shutdown ‐t now
when: (ansible_facts['distribution'] == "CentOS" and
ansible_facts['distribution_major_version'] == "6") or
(ansible_facts['distribution'] == "Debian" and
ansible_facts['distribution_major_version'] == "7")
【也可以指定多条件为列表】
tasks:
‐ name: "shut down CentOS 6 systems"
command: /sbin/shutdown ‐t now
when:
‐ ansible_facts['distribution'] == "CentOS"
‐ ansible_facts['distribution_major_version'] == "6"
【条件运算】
tasks:
‐ shell: echo "only on Red Hat 6, derivatives, and later"
when: ansible_facts['os_family'] == "RedHat" and ansible_facts['lsb']
['major_release']|int >= 6
【过滤匹配返回值包含successfu】
‐ name: Check Nginx Configure
command: /usr/sbin/nginx ‐t
register: result
‐ name: Restart web02
command: /usr/sbin/reboot
changed_when: result.stderr_lines| match successful
或者
changed_when: result.stderr_lines is search successful
【rsync服务端推送配置文件】
[root@m01 ~]# cat rsyncd/rsyncd.yml
‐ hosts: rsync_server
tasks:
‐ name: Install Rsyncd Server
yum:
name: rsync
state: present
‐ name: Create www Group
group:
name: www
gid: 666
‐ name: Create www User
user:
name: www
group: www
uid: 666
create_home: false
shell: /sbin/nologin
‐ name: Scp Rsync Config
copy:
src: ./rsyncd.j2
dest: /etc/rsyncd.conf
owner: root
group: root
mode: 0644
when: ansible_hostname == "backup"
‐ name: Create Passwd File
copy:
content: 'rsync_backup:123'
dest: /etc/rsync.passwd
owner: root
group: root
mode: 0600
when: ansible_hostname == "backup"
‐ name: Create backup Directory
file:
path: /backup
state: directory
mode: 0755
owner: www
group: www
recurse: yes
when: ansible_hostname == "backup"
‐ name: Start Rsyncd Server
systemd:
name: rsyncd
state: started
when: ansible_hostname == "backup"
【rsync客户端推送脚本】
[root@m01 ~]# vim rsync.yml
‐ hosts: rsync_server
tasks:
‐ name: SCP Backup Shell
copy:
src: ./backup.sh
dest: /root/backup.sh
when: ansible_hostname is match "web*"
#执行结果
PLAY [rsync_server]
********************************************************************************************
********************************************************************************************
**********************************
TASK [Gathering Facts]
********************************************************************************************
******