📜  [?contains(`{@)] ansible jinja2 (1)

📅  最后修改于: 2023-12-03 14:38:56.618000             🧑  作者: Mango

介绍Ansible中Jinja2的用法

在Ansible的playbook中,可以使用Jinja2模板语言来实现动态的变量赋值和模板渲染,其中'[?contains(`{@)]'是Jinja2中的一个常用操作符,用于判断一个字符串是否包含另一个字符串。

使用Jinja2中的'[?contains(`{@)]'操作符

在Ansible中,使用Jinja2的'[?contains({@)]'操作符可以实现对字符串是否包含另一个字符串的判断。可以通过以下方式使用'[?contains({@)]'操作符:

{% if some_string|contains('substring') %}
  # do something
{% else %}
  # do something else
{% endif %}

其中,some_string为待判断的字符串,substring为需要判断是否包含的子字符串。如果some_string包含substring,则执行第一个代码块中的操作,否则执行第二个代码块中的操作。

示例:使用'[?contains(`{@)]'操作符判断主机操作系统类型

在Ansible的playbook中,可以根据主机的操作系统类型来执行不同的操作。可以使用Jinja2的'[?contains(`{@)]'操作符来判断主机的操作系统类型是否包含某个特定的字符串。以下示例代码可以判断主机的操作系统类型是否包含'ubuntu'字符串:

- name: 判断主机是否为Ubuntu操作系统
  hosts: all
  tasks:
    - name: 获取主机操作系统类型
      ansible.builtin.command: cat /etc/lsb-release | grep DISTRIB_ID | awk -F'=' '{print $2}'
      register: os_type

    - name: 安装nginx
      ansible.builtin.package:
        name: nginx
        state: present
      when: os_type.stdout | contains('Ubuntu')

其中,使用ansible.builtin.command模块获取主机操作系统类型,并将其保存到变量os_type中。然后,使用Jinja2的'[?contains(`{@)]'操作符来判断os_type.stdout是否包含'Ubuntu'字符串,如果包含,则安装nginx软件包。