18 Sep 2019
--- - name: set_fact basic usage set_fact: fact1: fact1_value php_ver: 5.6.40 - debug: msg: "\{\{ fact1 }}"
此处逻辑设定
[mysql, nginx, php-fpm]三个服务lnmp_running为false
“` yaml
—name: set lnmp_is_running true set_fact: lnmp_is_running: true when: lnmp_is_running is not defined
debug: msg: “{{ lnmp_is_running }}”
### 3. 根据复杂条件来设定 此处逻辑设定 - 对于`[mysql, nginx, php-fpm]`三个服务 - 其中任意一个服务未启动,则设定`lnmp_running`为`false` - 同时需要记录未启动的服务列表`failed_services` 增加一个前提,我们提前设定一个空列表`failed_services` ``` yaml --- failed_services: []
此时上面的yaml就要改动一下
--- - name: populate service facts service_facts: # 值得注意的是 # 判断条件里面,增加判断lnmp_is_running是否被定义,是为了避免变量被重复覆盖 # 导致循环中只有最后一个元素的运行状态决定了lnmp_is_running的值得情况 # 所以这里增加判断,只要lnmp_is_running被定义了,其他元素就可以skip了 - name: set lnmp_is_running false set_fact: lnmp_is_running: "\{\% if lnmp_is_running is not defined \%\}false\{\% else \%\}\{\{lnmp_is_running}}\{\% endif \%\}" failed_services: "\{\{ ports_listen_check }} + ['\{\{ item.port }}']" when: ansible_facts.services['\{\{item.name}}.service'].state != 'running' with_items: "\{\{ [{'name':'php-fpm','port':'81'}, {'name':'mysql','port':'3306'}, {'name':'nginx','port':'80'}] }}" ignore_errors: yes # 值得注意的是 # 如果when的条件全部元素都未达成,lnmp_is_running是不会被设定的,尝试使用它时会报错该变量未定义 # 所以上面使用了两个when来达到if else的效果 - name: set lnmp_is_running true set_fact: lnmp_is_running: true when: lnmp_is_running is not defined - debug: msg: "\{\{ lnmp_is_running }}"