访次: AmazingCounters.com 次

ansible-plabook 之 when 判断

条件判断

  • when的值是一个条件表达式,如果条件判断成立,这个task就执行,如果判断不成立,则task不执行
  • 如果需要根据变量、facts(setup)或此前任务的执行结果来作为某task执行与否的前提时要用到条件测试,在Playbook中条件测试使用when子句。
  • 在task后添加when子句即可使用条件测试:when子句支持jinjia2表达式或语法,例如:
  • 1 - name: touch centos
    2   command: touch /home/123.test
    3   when:
    4     - ansible_distribution == "CentOS"
    5     - ansible_distribution_major_version == "7"
    6   tags:
    7   - touch_Cent
    • 条件一:为Centos 系统
    • 条件二:版本号为7
    • 满足这两个条件会在 /home/ 创建 123.test 文件
  • 组条件判断
  • - name: "CentOS 6 and Debian 7 systems"
      command: mkdir  /home/test_new/CentOS -p
      when: (ansible_distribution ==  "CentOS" and ansible_distribution_major_version == "7") or
            (ansible_distribution ==  "Debian" and ansible_distribution_major_version == "6")
      tags:
      - mkdir_Cent
  • 自定义条件判断
  • 迭代  
  • 有需要重性执行的任务时,可以使用迭代机制。其使用格式为将需要迭代的内容定义为item变量引用,并通过with_items语句指明迭代的元素列表即可。
  • 示例:  

  

复制代码
- name: Install packages
  yum: name={{ item }} state=present
  with_items:
    - telnet
    - net-tools
    - perl-XML-DOM
    - perl-Switch
  tags:
  - yum
复制代码

 

创建用户组:

- name: "Add groups"
  group: name={{ item.name }} state=present
  with_items:
    - { name: "zhang" }
    - { name: "zhao" }
  tags:
  - Add_group

创建用户:

- name: "Add Users"
  user: name={{ item.name }} state=present groups={{ item.groups }}
  with_items:
    - { name: "hu", groups: "zhang" }
    - { name: "zhi", groups: "zhao" }
  tags:
  - Add_users

删除用户:

复制代码
- name: "userdel user"
  user: name={{ item.name }} state=absent  remove=yes
  with_items:
    - { name: "hu" }
    - { name: "zhi" }
    - { name: "zhangsan" }
    - { name: "lisi" }
    - { name: "zhaosi" }
    - { name: "zhangsi" }
    - { name: "test1" }
  tags:
  - Del_Users 
复制代码

 

 

  • Templates介绍
  • Jinja是基于Python的模板引擎。template类是Jinja的另一个重要组件,可以看作一个编译过的模块文件,用来生产目标文本,传递Python的变量给模板去替换模板中的标记。

# scp root@192.168.92.139:/etc/httpd/conf/httpd.conf ./templates      //复制被管理端的配置文件到本地
# vim templates/httpd.conf      //在管理端讲配置文件要修改的地方定义变量
Listen {{http_port}}
ServerName {{server_name}}  
MaxClients {{access_num}}

  在/etc/ansible/hosts 添加变量

# vim /etc/ansible/hosts
[abc]
192.168.200.129 http_port=192.168.92.139:80 access_num=100 server_name="www.xxxxxx.com:80"
# vim apache.yml
# ansible-playbook twsdyxz.web.yml --tags=copy_httpd.conf.j2    #然后执行脚本  然后去abc组的主机上查看下配置文件是否已经改了

 

复制代码
vim twsdyxz.web.yml
########################################################
- hosts: abc
  remote_user: root
  vars:
    - package: httpd
    - service: httpd
  become: yes                #2.6版本以后的参数,之前是sudo,意思为切换用户运行
  become_user: root          #指定sudo用户为mysql
  roles:
  - twsdyxz
  tags:
  - only0
复制代码

 

 

 

vim tasks/main.yml
###########################################3
- name: "install configure file"
  template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
  tags:
  - copy_httpd.conf.j2

 

posted @   IT老登  阅读(9070)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
访次: AmazingCounters.com 次
点击右上角即可分享
微信分享提示