56. ansible playbook------ 判断 | 循环语句 | 异常处理

一,判断语句when

根据不同的操作系统进行判断	Apache 
		centOS      httpd 
		Ubuntu	    httpd2

根据不同的主机名称进行判断
[root@manager ansible_tasks]# cat t1.yml

- 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")

nginx官方的仓库安装
思路:

1.配置一个yum仓库 yum_repository
2.安装Nginx yum
实现:
100台主机里面只有10台主机是运行nginx的。难道我们需要给100台主机都配置nginx的官方源?
只有主机名称是 web的 我们就安装 nginx的官方仓库 以及 安装nginx的软件。

代码:
组件这套集群架构时:
主机名称是web的,我们就安装nginx、…

[root@manager ansible_tasks]# cat t2.yml

- hosts: all
  tasks:
    - name: Installed Nginx Web Server
      yum:
        name: nginx
        state: present
      when: ( ansible_hostname is match("web*"))



      when: ( ansible_hostname is match("web*")) or
            ( ansible_hostname is match("lb*")) 

二,循环语句loop | with_items

#一个tasks安装多个软件 (列表)
[root@manager ansible_tasks]# cat t3.yml

- hosts: webservers
tasks:
- name: Install Rpm All
 yum:
   name: “{{ item }}” #固定的变量(会在loop列表中依次提取对应的值 )
   state: present
  loop:
   - httpd
  - httpd-tools

对比官方的另一种方法
- name: ensure a list of packages installed
yum:
 name: “{{ packages }}”
vars:
  packages:
   - httpd
   - httpd-tools

① 一个tasks启动多个服务 (列表)

[root@manager ansible_tasks]# cat t4.yml
- hosts: webservers
  tasks:

    - name: Started Nginx And PHP-FPM Server
      systemd:
        name: "{{ item }}"
        state: started
        enabled: yes
      loop:
        - nginx
        - php-fpm

②一个tasks拷贝多个文件 (字典)

[root@manager ansible_tasks]# cat t5.yml

- 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" }

批量创建用户,(字典)
testuser1  基本组 bin    8989 /bin/bash
testuser2  基本组 root    7878 /bin/sh

[root@manager ansible_tasks]# cat t6.yml

- 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 }
	

三,触发器 Handlers

①标签 Tag

(三个任务 Install Configure Started )
 对一个task打一个标签、 1 2 3
  对一个task打多个标签、
  对多个task打一个标签、 install nfs

[root@manager ansible_tasks]# ·cat t7.yml·

- 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

指定执行 playbook中的某一个标签 ( 通常是用来快速解决问题 )
[root@manager ansible_tasks]# ansible-playbook t7.yml -t install_nfs
指定排除某个tags,其余都正常执行
[root@manager ansible_tasks]# ansible-playbook t7.yml --skip-tags install_nfs


四,Include包含

[root@manager ansible_tasks]# cat restart_nginx.yml

- name: Restart Nginx Server
 systemd:
  name: nginx
  state: restarted

[root@manager ansible_tasks]#cat a_project.yml

- hosts: webservers
  tasks:
    - name: A Project command
      command: echo "A"
    - name: Restart Nginx
      include: restart_nginx.yml

[root@manager ansible_tasks]# cat b_project.yml

- hosts: webservers
  tasks:
    - name: B Project command
      command: echo "B"
    - name: Restart Nginx
      include: restart_nginx.yml

ps: 不同playbook可以共同包含一个playbook


五, Ignore_errors 忽略错误

[root@manager ansible_tasks]# cat errors.yml

- hosts: webservers
  tasks:

    - name: Shell Command
      command: /bin/false
      ignore_errors: yes #忽略错误

    - name: Create File
      file:
         path: /tmp/oldux_tt
         state: touch

ps:ignore_errors使用当我们发现 某个task 偶尔会执行失败,但该task并不影响后续的tasks正常运行,那么此时可以 添加一个ignore_errors忽略经常出错的这个task


六, 异常处理

① 控制task报告的状态
“changed”-----“OK”

[root@manager ansible_tasks]# cat t8.yml

 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]# cat t8.yml

- hosts: webservers
  tasks:

    - name: Get Nginx Port Status
      shell:  netstat -lntp | grep nginx
      register: ngx_status        #将执行结果保存到ngx_status变量中--->再调用检查变量
      changed_when: false         #该tasks任务不会发生changed提示了

②使用changed_when检查tasks任务返回的结果

[root@manager ansible_tasks]# cat t9.yml
- 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       #将nginx -t的结果存储至check_ngx变量中
      changed_when:
        - false	
         #由于没有在被控端执行任何操作,所以可以将其修改为false,这个任务每次执行就ok状态
        - check_ngx.stdout.find('successful')
      	#检查变量中是否存在successful的字符串,如果存在则继续,不存在则停止,调用检测结果并报错。

    - name: Started Nginx Server
      systemd:
        name: nginx
        state: started
        enabled: yes

  handlers:
    - name: Restart Nginx Server
      systemd:
        name: nginx
        state: restarted
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值