【问题标题】:Ansible: Can't set variable for sequential executionAnsible:无法为顺序执行设置变量
【发布时间】:2019-09-17 08:38:53
【问题描述】:

我正在尝试使用 serial 元素构建具有滚动更新用例(顺序执行)的剧本。由于我必须在剧本中的多个位置使用序列值,因此我想将其用作变量,可用于在某处定义为组变量。

库存文件

[all]
webserver1  ansible_host=10.1.1.1 ansible_user=root
webserver2  ansible_host=10.1.1.2 ansible_user=root
webserver3  ansible_host=10.1.1.3 ansible_user=root
dbserver1  ansible_host=10.1.2.1 ansible_user=root

[webserver]
webserver1
webserver2
webserver3

[dbserver]
dbserver1

[app-stack:children]
webservers
dbservers

[app-stack:vars]
app_stack_serial_value=1

手册

- hosts: app-stack
  serial: "{{ app_stack_serial_value }}"
  tasks:
   - name: debug
     debug:
       msg: "Ansible Host - {{ ansible_host }}"

错误

错误! 'serial' 字段的值无效,其中包括未定义的变量。错误是:“app_stack_serial_value”未定义

如果我在像serial: 1 这样的序列字段中指定值,这将起作用。但我想将此值用作变量。有什么想法吗??

Ansible 版本:ansible 2.7.10

python 版本 = 3.7.2(默认,2019 年 1 月 13 日,12:50:01)[Clang 10.0.0 (clang-1000.11.45.5)]

【问题讨论】:

  • AFAIK 这是github.com/ansible/ansible/issues/33382 中报告的错误,这里的所有解决方法都非常丑陋。
  • 您可以将其作为额外变量传入:-e 'app_stack_serial_value=1'
  • @jack 我知道这会很好地工作,但我想在变量文件的某个地方配置它。我必须根据组名定义多个序列值。我不能把所有这些变量都作为额外的变量。

标签: serialization ansible ansible-inventory ansible-role


【解决方案1】:

据我所知,您不能在组变量中设置它。但是您可以在运行此 playbook 之前尝试设置 ENV SERIAL_NUMBER=1 并设置串行参数,例如:

  serial: "{{lookup('env','SERIAL_NUMBER')|default(3, true)}}"

【讨论】:

    猜你喜欢
    • 2017-06-11
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 2023-02-03
    相关资源
    最近更新 更多