Ansible:条件任务参数

时间:2017-01-18 16:30:35

标签: ansible jinja2

只有在定义ssl_ca时才需要将mysql_db传递给mysql_use_ssl模块。这是否可以使用一个任务,如:

mysql_db: name=mydb state=import target=/tmp/mysql.sql login_host="mydbhost" login_user="root" login_password="password" {% if mysql_use_ssl %}ssl_ca=/path/to/cert.pem{% endif %}

此实际代码段不起作用,结果:

{"failed": true, "msg": "template error while templating string: Encountered unknown tag 'endif'.. String: /path/to/cert.pem{% endif %}"}

将条件移动为:

mysql_db: name=mydb state=import target=/tmp/mysql.sql login_host="mydbhost" login_user="root" login_password="password" ssl_ca="{% if mysql_use_ssl %}/path/to/cert.pem{% else %}none{% endif %}"
然后它"工作"但是none不是用于关闭mysql ssl连接的受支持参数,因此它不会关闭ssl。

2 个答案:

答案 0 :(得分:8)

omit关键字/变量:

mysql_db:
  name: mydb
  state: import
  target: /tmp/mysql.sql
  login_host: mydbhost
  login_user: root
  login_password: password
  ssl_ca: "{{ '/path/to/cert.pem' if mysql_use_ssl | default(false) else omit }}"

答案 1 :(得分:0)

从ansible v2.8开始,你可以做三元运算符:

...
ssl_ca: "{{ (if mysql_use_ssl) | ternary('/path/to/cert.pem', false, omit) }}"
...