ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ### when 语句 #### 使用 when 来判断这台主机是否要执行 ``` # 只有当系统是Debian的时候才执行 tasks: - name: XXXXXX command: XXXXXXX when: ansible_os_family == "Debian" ``` #### 根据某条命令的成功或失败来执行不同的语句 使用`ignore_errors: True` 来忽略语句执行是否成功,避免在之后的 task 中不在该主机上执行 ``` tasks: - command: /bin/false register: result # 将语句执行的结果赋值给 result ignore_errors: True - command: /bin/something when: result|failed - command: /bin/something_else when: result|success - command: /bin/still/something_else when: result|skipped ``` #### 文本类型转成数值类型 比如某个文件中记录了应用的版本,内容如下: `10` 这个时候可以这样来对字符串进行操作 ``` tasks: - name: read txt file shell: car /pwd/file.txt register: version # 这个时候version的值是10,但是这个是文本格式,不能比较数值 when: version|int ==10 # 使用 |int 将version 的内容转换成数值类型 ``` #### 判断奇偶性  `even`:判断数值是否是偶数,是偶数则返回真 `odd`:判断数值是否是奇数,是奇数则返回真 `divisibleby(num)`:判断是否可以整除指定的数值,如果除以指定的值以后余数为0,则返回真 ``` vars: num_1: 1 num_2: 2 num_3: 3 tasks: - name XXXX shell: XXXXX when: num_1 is odd # 判断是否为奇数 - name: XXXX shell: XXXXX when: num_2 is even # 判断是都为偶数 - name: XXXX shell:XXXX when: num_3 is divisibleby(3) # 判断能不能被 3 这个数整除 ``` #### 布尔值运算 ``` vars: value: true tasks: -name: XXX when: value -name: XXX when: not value ``` #### 在 Roles 中使用 When 语句 ``` - hosts: all roles: - { role: some_role , when: ansible_os_family == 'Debian' } ``` #### 带有条件的导入 不同的操作系统中,可能使用不同的变量,比如Centos中网络服务使用`network`,在Ubuntu中可能使用`networking` ``` --- - hosts: all remote_user: root vars_files: - "vars/common.yml" - [ "vars/{{ ansible_os_family }}.yml", "vars/os_defaults.yml" ] tasks: - name: make sure apache is running service: name={{ apache }} state=running ``` - 如果是 Cenots 系统,则导入`var/centos.yaml`中网络服务名的变量`network` - 如果是 Ubuntu 系统,则导入`var/ubuntu.yaml`中网络服务名的变量`networking` - 如果 Centos 和 Ubuntu 文件都没有,那就使用默认的 `os_defaults.yml` 文件