Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 当一个列表可能为空时,在Ansible中合并两个列表_List_Ansible - Fatal编程技术网

List 当一个列表可能为空时,在Ansible中合并两个列表

List 当一个列表可能为空时,在Ansible中合并两个列表,list,ansible,List,Ansible,实际上,我有一个问题,在一个列表可能为空或不为空的情况下,将两个列表合并成一个新列表 编辑: 默认情况下定义了一个列表 standardvolumes: '/usr/share/zoneinfo:/usr/share/zoneinfo:ro' 另一个列表可以在组_vars.yml中为主机组定义 volumes: - '/usr/data:/data' - '/usr/data2:/data2' - '/usr/data3:/data3' 在任务中,我列出了以下列表:

实际上,我有一个问题,在一个列表可能为空或不为空的情况下,将两个列表合并成一个新列表

编辑:

默认情况下定义了一个列表

standardvolumes: '/usr/share/zoneinfo:/usr/share/zoneinfo:ro'
另一个列表可以在组_vars.yml中为主机组定义

volumes:
    - '/usr/data:/data'
    - '/usr/data2:/data2'
    - '/usr/data3:/data3'
在任务中,我列出了以下列表:

  - name: Combine volume lists
    set_fact:
      volumestostart: '{{ standardvolumes|default([]) + volumes|default([]) }}'
在游戏中,我会遇到以下错误:

TASK [do-docker-deployment : Combine volume lists] *****************************
fatal: [shs_de_postd_server1]: FAILED! => {"msg": "Unexpected templating type error occurred on ({{ standardvolumes|default([]) + volumes|default([]) }}): coercing to Unicode: need string or buffer, list found"}
因此,我尝试重新定义我的默认列表:

standardvolumes: 
  - '/usr/share/zoneinfo:/usr/share/zoneinfo:ro'
但是我得到了一个docker格式错误:

failed: [shs_de_postd_server1] (item={u'key': u'qit', u'value': {u'cgrouptype': u'blech', u'nexususer': u'cbs-qit-user', u'notstartable': u'no', u'nexuspassword': u'48vhw63u', u'nexusport': u'8191', u'nexuspath': u'ftg/postd-server', u'graylogip': u'tcp://10.20.30.40:12201'}}) => {"ansible_loop_var": "item", "changed": false, "item": {"key": "qit", "value": {"cgrouptype": "blech", "graylogip": "tcp://10.20.30.40:12201", "nexuspassword": "48vhw63u", "nexuspath": "ftg/postd-server", "nexusport": "8191", "nexususer": "cbs-qit-user", "notstartable": "no"}}, "msg": "Found invalid volumes mode: ro']"}
列表是容器的docker卷,我将从我的角色开始

有什么好主意吗

感谢和问候, 大卫

试试这个

volumes:{{volumes | default([])+standardcolumes | default([])}

比如说

-设置事实:
列表A:“{{list_A | default([])+列表B | default([])}”
-调试:
变量:列表A
给予

列表A:[]
试试这个

volumes:{{volumes | default([])+standardcolumes | default([])}

比如说

-设置事实:
列表A:“{{list_A | default([])+列表B | default([])}”
-调试:
变量:列表A
给予

列表A:[]

请参阅。如果问:“如何连接两个可能未定义的列表?”
list_A:“{{list_A+list_B}”
当一个列表或两个列表都未定义时,这不起作用。@gurbelunder的问题可能就这么短,并且完美地解释了您试图解决的问题:连接两个可能未定义的列表。值得注意的是:
standardvolumes
在默认值中定义的不是列表,而是上面的字符串我也试过把它列为列表,但后来我发现不清楚的docker错误。如你所见。如果问:“如何连接两个可能未定义的列表?”
list_A:“{{list_A+list_B}”
当一个列表或两个列表都未定义时,这不起作用。@gurbelunder的问题可能就这么短,并且完美地解释了您试图解决的问题:连接两个可能未定义的列表。值得注意的是:
standardvolumes
在默认值中定义的不是列表,而是上面的字符串我也试过把它列为列表,但后来我发现不清楚的docker错误。如你所见,谢谢,看起来不错。当然,只需设置默认值no“nothing”。但是现在我得到了另一个错误,我的卷的格式是错误的?`` ansible error(item={u'key':u'qit',u'value':{u'cgrouptype':u'blech',u'nexususer':u'cbs-qit-user',u'notstartable':u'no',u'nexuspassword':u'48vhw63u',u'nexusport':u'8191',u'nexuspath':u'ftg/postd server',u'graylogip':u'tcp://10.20.30.40:12201'}}) => {“ansible_loop_var”:“item”,“changed”:false,“item”:{“key”:“qit”,“value”:{“cgrouptype”:“blech”,“graylogip”:”tcp://10.20.30.40:12201“,“nexuspassword”:“48vhw63u”,“nexuspath”:“ftg/postd服务器”,“nexusport”:“8191”,“nexususer”:“cbs qit用户”,“notstartable”:“否”},,“消息”:“发现无效卷模式:ro']”``好的;我发现了格式问题。但是现在:{“msg”:“在({{standardvolumes | default([])+volumes | default([])}上发生了意外的模板类型错误:强制使用Unicode:需要字符串或缓冲区,列表已找到”}谢谢,看起来不错。当然,只需设置默认的否“nothing”“。但是现在我得到另一个错误,我的卷有错误的格式?`` ansible error(item={u'key':u'qit',u'value':{u'cgrouptype':u'blech',u'nexususer':u'cbs-qit-user',u'notstartable':u'no',u'nexuspassword':u'48vhw63u',u'nexusport':u'8191',u'nexuspath':u'ftg/postd server',u'graylogip':u'tcp://10.20.30.40:12201'}}) => {“ansible_loop_var”:“item”,“changed”:false,“item”:{“key”:“qit”,“value”:{“cgrouptype”:“blech”,“graylogip”:”tcp://10.20.30.40:12201“,“nexuspassword”:“48vhw63u”,“nexuspath”:“ftg/postd服务器”,“nexusport”:“8191”,“nexususer”:“cbs qit用户”,“notstartable”:“否”},,“消息”:“发现无效卷模式:ro']”```好的;我发现了格式问题。但是现在这个:{“msg”:“在({{standardvolumes | default([])+volumes | default([])})上发生了意外的模板类型错误:强制使用Unicode:需要字符串或缓冲区,找到列表”}