当前位置: 首页 > 知识库问答 >
问题:

如何在Ansible中重写高优先级变量?

糜野
2023-03-14

我正在尝试用play vars_prompt变量重写inventory group_vars/all变量。考虑下面的代码:

inventory/group_vars/all.yml

variable_1: test1
variable_2: test2

test.yml

- hosts: localhost
  vars_prompt:
    - name: "variable_1"
      prompt: "Enter variable_1"
      private: no

    - name: "variable_2"
      prompt: "Enter variable_2"
      private: no

- hosts: group_1
  roles:
    - { role: role_1, tags: role_1 }

- hosts: group_2
  roles:
    - { role: role_2, tags: role_2 }
- name: role_1 task
  shell: echo "{{ variable_1 }}"
  register: out

- debug:
    msg: "{{ out.stdout }}"
- name: role_2 task
  shell: echo "{{ variable_2 }}"
  register: out

- debug:
    msg: "{{ out.stdout }}"
TASK [role_1 : role_1 task] *******************************************************************************************************************************
Monday 15 January 2018  03:42:12 -0800 (0:00:02.915)       0:00:15.048 *****
changed: [xxx.xxx.com]

TASK [role_1 : debug] *************************************************************************************************************************************
Monday 15 January 2018  03:42:13 -0800 (0:00:00.525)       0:00:15.574 *****
ok: [xxx.xxx.com] => {
    "msg": "test1"
}

PLAY [group_2] ********************************************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************************************
Monday 15 January 2018  03:42:13 -0800 (0:00:00.051)       0:00:15.625 *****
ok: [xxx.xxx.com]

TASK [role_2 : role_2 task] *******************************************************************************************************************************
Monday 15 January 2018  03:42:15 -0800 (0:00:02.178)       0:00:17.804 *****
changed: [xxx.xxx.com]

TASK [role_2 : debug] *************************************************************************************************************************************
Monday 15 January 2018  03:42:15 -0800 (0:00:00.397)       0:00:18.202 *****
ok: [xxx.xxx.com] => {
    "msg": "test2"
}

PLAY RECAP ************************************************************************************************************************************************
localhost   : ok=1    changed=0    unreachable=0    failed=0
xxx.xxx.com : ok=3    changed=1    unreachable=0    failed=0
xxx.xxx.com : ok=3    changed=1    unreachable=0    failed=0
xxx.xxx.com : ok=3    changed=1    unreachable=0    failed=0

我想用var1和var2(用vars_prompt接受的值)代替test1和test2(在inventory/group_vars/all.yml中设置的值)重写variable_1和variable_2值。有什么方法可以覆盖这些值吗?或任何其他方法来在不同的剧本中共享变量。

共有1个答案

楚知
2023-03-14

变量提示是与播放绑定的,因此提示的variable_1=varvariable_2=var只注册用于第一次播放(在示例中为空),第二次和第三次播放对此一无所知。

或者将提示应用于相应的播放,或者使用set_fact对所有主机进行run first播放,如下所示:

- hosts: all
  gather_facts: no
  vars_prompt:
    - name: "variable_1"
      prompt: "Enter variable_1"
      private: no
    - name: "variable_2"
      prompt: "Enter variable_2"
      private: no
  tasks:
    - set_fact:
        variable_1: "{{ variable_1 }}"
        variable_2: "{{ variable_2 }}"

- hosts: group_1
  roles:
    - { role: role_1, tags: role_1 }

- hosts: group_2
  roles:
    - { role: role_2, tags: role_2 }

这将定义主机事实variable_1variable_2,它们是主机绑定的(并通过几次播放存活下来),并且具有比清单中的组变量更高的优先级。

 类似资料:
  • host_vars/test.localdomain包含我想优先于默认值的变量。 inventory/debug是我们将要使用的库存文件。 roles/debug/tasks/main.yml输出foo.bar变量。

  • 我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。

  • 问题内容: 在Linux实时进程优先级范围为1到99的情况下,我不清楚哪个是最高优先级,即1或99。 “了解Linux内核”(O’Reilly)的7.2.2节说1是最高优先级,考虑到正常进程的静态优先级从100到139,其中100是最高优先级,这是有道理的: “每个实时过程都与一个实时优先级相关联,该优先级的值范围是1(最高优先级)到99(最低优先级)。” 另一方面,sched_setschedu

  • 我目前正在研究分布式应用程序的性能。我的目标是网络组件。目前,每个连接都有一个专用线程,在阻塞模式下处理套接字。我的目标是减少线程数量(不降低性能),如果可能的话,提高性能。 我重新设计了网络组件以使用异步通信,并尝试使用1到2个线程来处理整个网络。我做了一个简单的测试,我从一个节点在一个循环中写入,然后在另一个节点上读取,这是为了测试最大nw线程能力,我发现我的繁忙循环实现消耗了100%的cpu

  • 问题内容: 我在Linux中使用pthread。我想通过设置参数来增加线程优先级。但是,我从网上找不到有关我可以设置的线程优先级范围或有关线程优先级描述的大量信息。 另外,我想了解相对线程优先级,因为我不想将线程优先级设置得太高而导致OS停止。有人可以帮我吗? 问题答案: 默认的Linux调度策略是,它没有优先级选择,但是可以在策略内部进行调整。 您必须使用函数更改为其他 计划策略(另请参见) “

  • 我有这样的表达: 以下哪些元素(