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")
      判断:如果是centos就执行httpd。
    • name: Installed HTTP Server
      yum:
      name: httpd2
      state: present
      when: (ansible_distribution == "Ubuntu")
      判断:如果是ubuntu就执行httpd2.

实例:如果有100台服务器,只需要其中的10台安装nginx,那么我们就可以将这10台主机放在一个web组,然后只安装web组里的。
就需要做判断:
[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*"))
      意思:是web的都安装,不是web的都跳过。

when: ( ansible_hostname is match("web")) or ( ansible_hostname is match("web"))
意思是:web和lb都安装。or是或的意思


二:循环语句loop|with_item

    一个tasks安装多个软件  (列表)     

[root@manager ansible_tasks]# cat t3.yml

  • hosts: webservers
    tasks:
    • name: Install Rpm All
      yum:
      name: "{{ item }}"
      state: present
      loop:

      • 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" }
批量创建用户,使用key values字典的方式
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
[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 | include_tasks

[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


六:忽略错误 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

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

七: 异常处理

1.控制task报告的状态,不一定必须是"changed"
[root@manager ansible_tasks]# cat t8.yml

  • hosts: webservers
    tasks:
    • name: Get Nginx Port Status
      shell: netstat -lntp | grep nginx
      register: ngx_status
      changed_when: false #(该tasks任务不会发生changed提示了)
    • name: Debug Nginx Status
      debug:
      msg: "{{ ngx_status.stdout_lines }}"

2.使用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
      配置文件一旦拷贝错误,在重启的时候就会报错,服务挂掉,
      所以这个判断做语法判断是非常有限,又可以检测,又可以不影响服务的使用。
      它会在出现语法错误之后就停止执行。也就不会在去加载启动模块。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343