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

如何从角色目录Ansible中包含变量?

逄嘉木
2023-03-14

我有我的ansible playbook基本上创建一个新的虚拟机从模板在esxi什么,我必须转换到角色的playbook。我是ansible的新手,所以我不知道如何从roles(install)->vars目录调用硬编码变量。

这是我的剧本

---
# create a new VM from a template

- name: VM from template
  hosts: localhost
  gather_facts: false
  connection: local
  vars:
    vcenter_hostname: vcenter-app
    vcenter_user: john@doe
    vcenter_pass: blabla6
    esxhost: esx-4.cbalo.fr
    datastore: VM-PROD-02-NORMAL
    vmtemplate: Centos7-template
    name: "newvm2"
    notes: Ansible Test
    dumpfacts: False
  tasks:
    - name: Create VM from template
      vmware_guest:
        validate_certs: False
        hostname: "{{ vcenter_hostname }}"
        username: "{{ vcenter_user }}"
        password: "{{ vcenter_pass }}"
        esxi_hostname: "{{ esxhost }}"
        datacenter: CD06
        folder: Test
        name: "{{ name }}"
        template: "{{ vmtemplate }}"
        hardware:
          memory_mb: "{{ vm_memory | default(1024) }}"
        wait_for_ip_address: True
        state: present
      register: newvm2
---
- name: Create VM from template
              vmware_guest:
                validate_certs: False
                hostname: "{{ vcenter_hostname }}"
                username: "{{ vcenter_user }}"
                password: "{{ vcenter_pass }}"
                esxi_hostname: "{{ esxhost }}"
                datacenter: CD06
                folder: Test
                name: "{{ name }}"
                template: "{{ vmtemplate }}"
                hardware:
                  memory_mb: "{{ vm_memory | default(1024) }}"
                wait_for_ip_address: True
                state: present
              register: newvm2
---
    # create a new VM from a template
    
    - name: VM from template
      hosts: localhost
      gather_facts: false
      connection: local
      
      roles:
        - install

问题是我不知道如何从roles->vars目录调用var,正如你可以在我的剧本中看到的,我有硬代码变量。我需要在文件中获取或设置变量,并从该文件调用它。

**vcenter_hostname: vcenter-app
vcenter_user: john@doe
vcenter_pass: blabla6
esxhost: esx-4.cbalo.fr
datastore: VM-PROD-02-NORMAL
vmtemplate: Centos7-template
name: "newvm2"
datacenter: CD06
folder: Test**

共有1个答案

长孙嘉
2023-03-14

ansible中的变量是一组将替换某些位置持有者的值。您在运行playbook时提供它们,如果您包括角色等,它们将“涓滴而下”。请查看文档以了解Ansible中的变量优先级。

因此,您要做的是将变量赋值放在清单中(也可以使用group_vars)将变量拆分到单独的文件中),然后在ansible-playbook命令中使用-i path/to/inventory.yml

结构可以如下所示:

my-ansible/
  roles/
    my-role/
      tasks/
        main.yaml
      defaults/
        main.yaml # contains default values for your variables
  inventory/
    inventory.yaml # contains hosts and variable assignments
  run.yaml
  
ansible-playbook -i inventory/inventory.yaml run.yaml
  • 不要使用my-role/vars,因为很难在其中重写变量赋值。(请参见变量优先级)
  • defaults/main.yaml不是必需的,但对于很少更改的变量却很方便
 类似资料:
  • 我认为构建一个包含本地服务器、目录文件和host_Vars文件夹的ansible角色会很好。因此,通过在ansible从工作目录上安装该角色,并将清单名称作为参数传递,我可以在ansible文件夹中复制与该名称相关的文件,并在下一步中将其用作清单文件和变量,以便部署到远程服务器上。 首先,有没有人有更好的主意来制作一个动态的库存文件?使用本地git服务器和存储库还是shell命令? 主要问题:如何

  • 下面是名为webserver的ansibel角色的目录结构 本地主机角色#树

  • 这个结构有一些问题,我也不喜欢它。-这样合适吗?-我如何使用EC2的结果-创建角色,我想部署代码到服务器,这是刚刚创建的,我不知道ID。-还有其他方法可以将参数传递给角色吗?

  • myrole/tasks/main.yml myrole/defaults/main.yml 但是,当我将变量传递给我的角色时,它无法使用defaults/main.yml文件,并且得到以下错误: 似乎可以使用数组,但如果我使用哈希并希望访问带有item.xxx的变量,则返回此错误: 失败了!=>{“failed”:true,“msg”:“字段'args'具有无效值,该值似乎包含未定义的变量。错误

  • 本文向大家介绍ansible 使用角色,包括了ansible 使用角色的使用技巧和注意事项,需要的朋友参考一下 示例 Ansible使用角色的概念来更好地允许模块化代码并避免重复自己。 角色只是Ansible知道从何处加载vars文件,任务和处理程序的文件夹结构。一个例子可能看起来像这样: 然后,您可以将该角色用于基本的剧本,如下所示: 针对此剧本运行Ansible时,它将针对组中的所有主机并针对

  • 本文向大家介绍ansible 与Ansible Galaxy共享角色,包括了ansible 与Ansible Galaxy共享角色的使用技巧和注意事项,需要的朋友参考一下 示例 还可以轻松地与社区共享角色,或通过Ansible Galaxy下载由社区其他成员创建的角色。 Ansible附带了一个名为的命令行工具ansible-galaxy,可用于在ansible.cfg文件中定义的角色目录中安装角