如何在循环中从注册变量中获取项目Ansible

问题描述 投票:0回答:1

我正在编写一本剧本,需要在其中重新启动具有特定映像的Docker容器。我写了类似下面的东西,但是失败了。我想我的循环似乎出了点问题。

---
- name: restart app servers
  hosts: shashank-VM
  connection: local
  become: yes
  become_method: sudo
  tasks:
    - name: Get info on the Container
      shell: docker ps | awk '/{{ item }}/{print $1}'
      register: list_of_containers
      with_items:
        - ubuntu

    - debug:
        msg: "item.item={{item.item}}, item.stdout_lines={{item.stdout_lines}}, item.changed={{item.changed}}"
      loop: "{{ list_of_containers.results }}"

    - name: Restart Docker Service
      docker_container:
       name: "{{ item.stdout_lines }}"
       image: ubuntu
       state: started
       restart: yes
      register: result_of_action
      loop: "{{ list_of_containers.results }}"

以下错误-

*任务[调试] *********************************************** ****************************************************** ****************************************/usr/lib/python2.7/dist-packages/requests/init.py:80:RequestsDependencyWarning:urllib3(1.25.9)或chardet(3.0.4)与支持的版本不匹配!RequestsDependencyWarning)好的:[shashank-VM] =>(item = {'stderr_lines':[],'ansible_loop_var':u'item',u'end':u'202​​0-04-23 10:36:26.885300',u' stderr':u'',u'stdout':u'466236fa1676 \ n74d1c2d3effb',u'changed':True,'failed':False,u'delta':u'0:00:00.099078',u'cmd' :u“ docker ps | awk'/ ubuntu / {print $ 1}'','item':u'ubuntu',u'rc':0,u'invocation':{u'module_args':{u'warn' :是,u'executable':没有,u'_uses_shell':是,u'strip_empty_ends':是,u'_raw_params':u“ docker ps | awk'/ ubuntu / {print $ 1}'”,u'removes' :无,u'argv':无,u'creates':无,u'chdir':无,u'stdin_add_newline':正确,u'stdin':无}} ,,'stdout_lines':[u'466236fa1676', u'74d1c2d3effb'],u'start':u'202​​0-04-23 10:36:26.786222'})=> {“ msg”:“ item.item = ubuntu,item.stdout_lines = [u'466236fa1676',u'74d1c2d3effb'],item.changed =真实”}

任务[重启Docker服务] ********************************************** ****************************************************** ********************/usr/lib/python2.7/dist-packages/requests/init.py:80:RequestsDependencyWarning:urllib3(1.25.9)或chardet(3.0.4)与支持的版本不匹配!RequestsDependencyWarning)[警告]:字符串字段中的值['466236fa1676','74d1c2d3effb'](类型列表)已转换为u“ ['466236fa1676','74d1c2d3effb']”(类型字符串)。如果这看起来不符合您的期望,请引用整个值以确保其不变。失败:[shashank-VM](item = {'stderr_lines':[],'ansible_loop_var':u'item',u'end':u'202​​0-04-23 10:36:26.885300',u'stderr' :u'',u'stdout':u'466236fa1676 \ n74d1c2d3effb',u'changed':true,'failed':False,u'delta':u'0:00:00.099078',u'cmd':u “ docker ps | awk'/ ubuntu / {print $ 1}'”,'项目':u'ubuntu',u'rc':0,u'invocation':{u'module_args':{u'warn':True ,u'executable':无,u'_uses_shell':正确,u'strip_empty_ends':正确,u'_raw_params':u“ docker ps | awk'/ ubuntu / {print $ 1}'”,u'removes':无,u'argv':无,u'creates':无,u'chdir':无,u'stdin_add_newline':正确,u'stdin':无}}},'stdout_lines':[u'466236fa1676',u' 74d1c2d3effb'],u'start':u'202​​0-04-23 10:36:26.786222'})=> {“ ansible_loop_var”:“ item”,“ changed”:false,“ item”:{“ ansible_loop_var”: “ item”,“ changed”:true,“ cmd”:“ docker ps | awk'/ ubuntu / {print $ 1}'”,“ delta”:“ 0:00:00.099078”,“ end”:“ 2020-04 -23 10:36:26.885300“,”失败“:false,”调用“:{” module_args“:{” _raw_params“:” docker ps | awk'/ ubun tu / {print $ 1}'“,” _uses_shell“:true,” argv“:null,” chdir“:null,” creates“:null,” executable“:null,” removes“:null,” stdin“:null ,“ stdin_add_newline”:true,“ strip_empty_ends”:true,“ warn”:true}},“ item”:“ ubuntu”,“ rc”:0,“ start”:“ 2020-04-23 10:36:26.786222 “,” stderr“:”“,” stderr_lines“:[],” stdout“:” 466236fa1676 \ n74d1c2d3effb“,” stdout_lines“:[” 466236fa1676“,” 74d1c2d3effb“]},” msg“:”创建容器时出错: 400客户端错误:错误的请求(\“无效的容器名称(['466236fa1676','74d1c2d3effb']),仅允许[a-zA-Z0-9] [a-zA-Z0-9 _.-] \”) “} *

如何从我的注册变量中循环使用这些值?

“ stdout_lines”:[“ 466236fa1676”,“ 74d1c2d3effb”]

docker ansible containers ansible-inventory
1个回答
0
投票

现在,您正试图遍历list_of_containers.results,这是一个包含各种与结果相关的信息的字典,包括stdout_lines

由于要遍历输出行,请替换当前的行

loop: "{{ list_of_containers.results }}"

带有您要循环显示的内容:

loop: "{{ list_of_containers.results.stdout_lines }}"

并在您的docker命令中使用"{{ item }}"作为名称。

因此:

- name: Restart Docker Service
  docker_container:
   name: "{{ item }}"
   image: ubuntu
   state: started
   restart: yes
  register: result_of_action
  loop: "{{ list_of_containers.results.stdout_lines }}"
© www.soinside.com 2019 - 2024. All rights reserved.