【问题标题】:Assign item to a var with_items in ansible在ansible中将项目分配给带有_items的var
【发布时间】:2018-03-02 05:28:59
【问题描述】:

我正在尝试创建一个剧本来找出在哪个 openstack 服务器 vm 上运行。我在 vars 中创建了一个 openstack 服务器列表,并使用 delegate_to 和 with_items 进行迭代,直到找到 vm。我在命令末尾使用 wc -l , 1 将成功。目的是,一旦找到 os-server,将 servername 存储到 var 中,这样它就可以用于 playbook 中的其余任务。我无法从列表中获取 var 中的操作系统服务器名称。我不是一个可靠的专家。任何人都可以帮助实现这一目标吗?谢谢


- hosts: localhost

  vars:

   openstack:
     - reg1
     - reg2
     - reg3
     - reg4

  tasks:

- name: Command to find os server where vm exists
  shell: somecommand-to-check-if-vm-exist | wc -l
  delegate_to: "{{ item }}"
  with_items: "{{ openstack }}"
  register: found_server
  retries: 1
  delay: 1
  until: found_server.stdout != "1"

- debug: var=found_server

- name: set fact
  set_fact: os-server = "{{ item.item }}"
  when: item.stdout == "1"
  with_items: "{{ found_server.results }}"
  register: var2

- name: debug var
  debug: var=var2

- debug: var=os-server

【问题讨论】:

    标签: ansible


    【解决方案1】:

    这里不需要retry/until,第二个循环也是如此。

    试试这个:

    - hosts: localhost
      vars:
        openstack: [reg1, reg2, reg3, reg4]
      tasks:
        - name: Command to find os server where vm exists
          shell: somecommand-to-check-if-vm-exist | wc -l
          delegate_to: "{{ item }}"
          with_items: "{{ openstack }}"
          register: vm_check
    
        - name: set fact
          set_fact:
            os_server: "{{ (vm_check.results | selectattr('stdout','equalto','1') | list | first).item }}"
    
        - name: debug var
          debug:
            msg: "{{ os_server }}"
    

    这会将来自每个服务器的结果注册到vm_check.results,然后只需选择将stdout 设置为1 的元素,取它的第一个元素(我想你总是有一个带有VM 的服务器),然后得到这个元素的.item 包含原始循环的项目(在我们的例子中是服务器的名称)。

    【讨论】:

    • 由于某些原因,我收到此错误。我在上面的代码中遗漏了什么吗?致命的:[本地主机]:失败! => { "msg": "模板化字符串时出现模板错误:预期标记 'name',得到 '('。字符串:{{ vm_check.results | selectattr('stdout','equalto','1') | list |第一个).item }}"
    猜你喜欢
    • 2021-06-15
    • 2019-05-10
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    相关资源
    最近更新 更多