我正在编写一本剧本,需要在其中重新启动具有特定映像的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'2020-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'2020-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'2020-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'2020-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”]
现在,您正试图遍历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 }}"