gpt4 book ai didi

ansible 属性错误 : 'list' object has no attribute 'startswith'

转载 作者:行者123 更新时间:2023-12-04 16:09:37 28 4
gpt4 key购买 nike

我正在运行 ansible 并尝试执行此任务,但失败并显示以下错误:

An exception occurred during task execution. To see the fulltraceback, use -vvv. The error was: AttributeError: 'list' object hasno attribute 'startswith' fatal: [test-1]: FAILED! =>{"failed": true, "msg": "Unexpected failure during module execution.","stdout": ""} msg: Unexpected failure during module execution.


代码是:
  - name: Register env Type
shell: facter configured_setup
register: setup

- name: foo tasks
shell: {{some_script}} -t -a {{hosts}} -i {{inventory_hostname}}
register: test
when: setup.stdout == "something"

- name: fetch group_vars
fetch:
src:
- { "{{ item }}", when: setup.stdout == "something" }
dest: "{{group_vars}}"
flat: yes
with_items:
- "{{ test.stdout_lines[0] }}"
- "{{ test.stdout_lines[1] }}"
“fetch group_vars”是总是失败的任务,知道这是如何工作的吗?
我想要做的是添加更多源文件以从不同的 setvers 中获取。
所以我想在“src:”下有更多的行,说 - { filename, when setup.stdout =="something else" }完整的错误是:

An exception occurred during task execution. The full traceback is:Traceback (most recent call last):File "/usr/lib/python2.7/site-packages/ansible/executor/task_executor.py", line 96, in runitem_results = self._run_loop(items)File "/usr/lib/python2.7/site-packages/ansible/executor/task_executor.py", line 252, in _run_loopres = self._execute(variables=task_vars)File "/usr/lib/python2.7/site-packages/ansible/executor/task_executor.py", line 446, in _executeresult = self._handler.run(task_vars=variables)File "/usr/lib/python2.7/site-packages/ansible/plugins/action/fetch.py", line 62, in runsource = self._remote_expand_user(source)File "/usr/lib/python2.7/site-packages/ansible/plugins/action/init.py", line 460, in _remote_expand_userif not path.startswith('~'): # FIXME: Windows paths may start with "~ instead of just ~AttributeError: 'list' object has no attribute 'startswith'

fatal: [test-1]: FAILED! => {"failed": true, "msg":"Unexpected failure during module execution.", "stdout": ""} msg:Unexpected failure during module execution.

最佳答案

ansible documentation clearly states that fetch 是获取一个文件,而不是一个文件列表。尽管可以对应用程序进行编程以处理从 YAML 文档加载的标量和序列,但这不是自动的,并且几乎肯定会反射(reflect)在文档中。

由于您已经拥有更高级别的序列,因此只需扩展它即可。

- name: Register env Type
shell: facter configured_setup
register: setup

- name: transparency tasks
shell: {{some_script}} -t -a {{hosts}} -i {{inventory_hostname}}
register: test
when: setup.stdout == "something"

- name: fetch group_vars
fetch:
src: { "{{ item }}", when: setup.stdout == "something" }
dest: "{{group_vars}}"
flat: yes
with_items:
- "{{ test.stdout_lines[0] }}"
- "{{ test.stdout_lines[1] }}"

- name: fetch group_vars2
fetch:
src: { filename, when setup.stdout =="something else" }
dest: "{{group_vars}}"
flat: yes
with_items:
- "{{ test.stdout_lines[0] }}"
- "{{ test.stdout_lines[1] }}"

您可能可以通过使用 YAML 的 anchor 和 merge 来减少重复性。 :
- name: Register env Type
shell: facter configured_setup
register: setup

- name: transparency tasks
shell: {{some_script}} -t -a {{hosts}} -i {{inventory_hostname}}
register: test
when: setup.stdout == "something"

- &fetchtask
name: fetch group_vars
fetch: &fetchsrc
src: { "{{ item }}", when: setup.stdout == "something" }
dest: "{{group_vars}}"
flat: yes
with_items:
- "{{ test.stdout_lines[0] }}"
- "{{ test.stdout_lines[1] }}"

- <<: *fetchtask
name: fetch group_vars2
fetch:
<<: *fetchsrc
src: { filename, when setup.stdout =="something else" }

Ansible 大概扩展了 {{...}}在将文档交给 YAML 解析器之前,否则为 shell 的值在“透明任务”中会抛出错误。但是您可能仍然应该像使用 dest 的值一样引用它。

关于ansible 属性错误 : 'list' object has no attribute 'startswith' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45124730/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com