当前位置: 首页 > 知识库问答 >
问题:

Ansible 脚本模块不解释变量

谯德佑
2023-03-14

我在Ansible脚本模块解释with_items变量时遇到了问题。

vsa_deploy_config/tasks/main.yml:

- name: Create VSA scripts for center
  template:
   src: vsa_deploy.ps1.j2
   dest: "/opt/ansible/roles/vsa_deploy_config/files/{{ item.vsa_hostname }}.ps1"
  when: target == "local"
  with_items:
  - "{{ vsa_center }}"

- name: Deploy VSAs on Center
  script: "files/{{ item.vsa_hostname }}.ps1"
  register: out
  when: target == "win_center"
- debug: var=out
  with_items:
  - "{{ vsa_center }}"

vsa_deploy_config/vars/main.yml:

---
vsa_center:
    - vcsa_hostname: 10.10.10.74
      vcsa_username: administrator@vsphere.local
      vcsa_password: password
      vcsa_datacenter: DataCenter1
      vsa_rdm_lun: 02000000006006bf1d58d25a1020d292f8fcfb22b3554353432d4d
      vsa_hostname: sm01-ct01
      vsa_mgmt_ip: 10.10.10.75
      vsa_mgmt_netmask: 255.255.255.192
      vsa_mgmt_gw: 10.10.10.65
      vsa_mgmt_ns: 10.10.10.92
      vsa_mgmt_pg: SC-MGMT
      vsa_mgmt_moref: Network:network-13
      vsa_iscsi_ip: 192.168.2.1
      vsa_iscsi_netmask: 255.255.255.0
      vsa_iscsi_pg: ISCSI
      vsa_iscsi_moref: Network:network-22
      vsa_mirror_ip: 192.168.5.1
      vsa_mirror_netmask: 255.255.255.0
      vsa_mirror_pg: Mirror
      vsa_mirror_moref: Network:network-23
      esxi_hostname: 10.10.10.72
      esxi_datastore: DS-01
    - vcsa_hostname: 10.10.10.74
      vcsa_username: administrator@vsphere.local
      vcsa_password: password
      vcsa_datacenter: DataCenter1
      vsa_rdm_lun: 02000000006006bf1d58d25dd0210bb356a78344e5554353432d4d 
      vsa_hostname: sm02-ct01
      vsa_mgmt_ip: 10.10.10.76
      vsa_mgmt_netmask: 255.255.255.192
      vsa_mgmt_gw: 10.10.10.65
      vsa_mgmt_ns: 10.10.10.92
      vsa_mgmt_pg: SC-MGMT
      vsa_mgmt_moref: Network:network-13
      vsa_iscsi_ip: 192.168.2.2
      vsa_iscsi_netmask: 255.255.255.0
      vsa_iscsi_pg: ISCSI
      vsa_iscsi_moref: Network:network-22
      vsa_mirror_ip: 192.168.5.2
      vsa_mirror_netmask: 255.255.255.0
      vsa_mirror_pg: Mirror
      vsa_mirror_moref: Network:network-23
      esxi_hostname: 10.2.120.73
      esxi_datastore: DS-02

当我运行行动手册时,我收到以下错误:

任务[vsa_deploy_config:在中心服务器上部署VSA]* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *[auto-win 1 . lab . com]:失败!=

使用模板模块的第一个任务解释项目。vsa_hostname变量正确,但脚本模块不正确。脚本模块是否不能使用with_items?

共有2个答案

禹智渊
2023-03-14

只需将行< code>- debug: var=out移到文件的末尾,它就可以工作了

邓鸿彩
2023-03-14

您的脚本任务没有< code>with_items:

- name: Deploy VSAs on Center                    # -\
  script: "files/{{ item.vsa_hostname }}.ps1"    #   \
  register: out                                  #   / This is task1
  when: target == "win_center"                   # -/
- debug: var=out                                 # -\
  with_items:                                    #   > This is task2
  - "{{ vsa_center }}"                           # -/

我猜你想把debug移到最底层:

- name: Deploy VSAs on Center
  script: "files/{{ item.vsa_hostname }}.ps1"
  register: out
  when: target == "win_center"
  with_items: "{{ vsa_center }}"

- debug: var=out

附言:也没有必要将不必要的嵌套列表输入到with_items中。

 类似资料:
  • 在本节,我们主要介绍几种最常用的变量,在后面的章节中,我们会单独介绍一些复杂情景下变量的使用和覆盖原则。 在Playbook中常用的几种变量包含一下几种情况: 在Playbook中用户自定义的变量 用户无需自定义,Ansible会在执行Playbook之前去全程主机上搜集的关于远程节点系统信息的变量 在文件模版中,可以使用里面可以直接使用上述两种变量 把task的运行结果作为一个变量来使用,这个变

  • 我试图使用jobDSL插件中的pipelineJob函数生成Jenkins管道,但是无法将参数从DSL传递到管道脚本。我有几个项目使用本质上相同的Jenkinsfile,只是在几个步骤上有所不同。我正在尝试使用JobDSL插件动态生成这些管道,并解释其中我想要更改的值,以匹配DSL的参数。 我已经在管道脚本和DSL中尝试了几乎所有可能的字符串解释组合,但无法获得Jenkins /groovy来解释

  • 什么是Ansible Module? bash无论在命令行上执行,还是bash脚本中,都需要调用cd、ls、copy、yum等命令;module就是Ansible的“命令”,module是ansible命令行和脚本中都需要调用的。常用的Ansible module有yum、copy、template等。 在bash,调用命令时可以跟不同的参数,每个命令的参数都是该命令自定义的;同样,ansible

  • YML ansible的脚本语言,yaml格式。请参考YAML语法结构章节 别人的Playbook 能够学会快速用别人的成果,高效地分享自己的成果,才是好码农,才是能早下班的好码农。在你动手从头开始写一个Playbook之前,不如先参考一下别人的成果吧。 官方例子 Ansible官方提供了一些比较常用的、经过测试的Playbook例子: https://github.com/ansible/ans

  • 问题内容: 尝试使用TowerJS作为测试设置基本站点,但是在运行脚手架生成器时遇到此错误。 问题答案: 更新您的package.json文件 在“ devDependencies”上并再次更新npm 为我解决了同样的问题

  • Cocos Creator 允许你将代码拆分成多个脚本文件,并且让它们相互调用。要实现这点,你需要了解如何在 Cocos Creator 中定义和使用模块,这个步骤简称为 模块化。 如果你还不确定模块化究竟能做什么,模块化相当于: Java 和 Python 中的 import C# 中的 using C/C++ 中的 include HTML 中的 <link> 模块化使你可以在 Cocos C