Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
Variables 如何使用ansible动态加载var文件并将它们组合成一个变量_Variables_Dynamic_Ansible - Fatal编程技术网

Variables 如何使用ansible动态加载var文件并将它们组合成一个变量

Variables 如何使用ansible动态加载var文件并将它们组合成一个变量,variables,dynamic,ansible,Variables,Dynamic,Ansible,我想在ansible中动态地包含var文件。动态意味着,用户可以提供一个列表作为额外的变量,该列表将转换为一个数组并定义要加载的文件。到目前为止,这是可能的。使之困难的是,这些文件将导致一个单独的对象保存信息 这将运行并加载文件夹中的所有文件,并根据其中指定的值创建变量(项目): - name: Load project-specific Configuration include_vars: name: projects dir: "{{project_vars_dir}}"

我想在ansible中动态地包含var文件。动态意味着,用户可以提供一个列表作为额外的变量,该列表将转换为一个数组并定义要加载的文件。到目前为止,这是可能的。使之困难的是,这些文件将导致一个单独的对象保存信息

这将运行并加载文件夹中的所有文件,并根据其中指定的值创建变量(项目):

- name: Load project-specific Configuration
  include_vars:
   name: projects
   dir: "{{project_vars_dir}}"
   extensions:
     - yml
为了达到我的目标并能够指定要加载的文件,我尝试了以下方法:

- name: Load project-specific Configuration (requested projects only)
  include_vars:
    name: projects
    file: "{{project_vars_dir}}/{{item}}.yml"    
  with_items: "{{projectlist.split(',') | list}}"
我现在可以调用我的playbook并指定--extra vars,比如:--extra vars projectlist=projectA,projectB

加载这些文件是可行的,但最后一个文件总是覆盖projects变量。我怎样才能把它组合起来


这是一个有点复杂的循环,因此您需要2个文件和include_tasks模块:

在tasks.yml中,您输入:

- include_vars:
    name: file_vars
    file: "{{ item }}"
- set_fact:
    all_vars: "{{ file_vars | combine(all_vars | default({})) }}"
- hosts: all
  tasks:
  - include_tasks: tasks.yaml
    loop: "{{projectlist.split(',') | list}}"
在playbook.yml中,您将:

- include_vars:
    name: file_vars
    file: "{{ item }}"
- set_fact:
    all_vars: "{{ file_vars | combine(all_vars | default({})) }}"
- hosts: all
  tasks:
  - include_tasks: tasks.yaml
    loop: "{{projectlist.split(',') | list}}"

Ansible并不是用来作为编程语言的,所以复杂的循环很难优雅地编写。理想情况下,您应该寻找处理您的用例的内置模块(据我所知,这里不是这样),编写您自己的自定义模块或查看其他人编写的预打包角色。

这是一个有点复杂的循环,因此您需要2个文件和include_tasks模块:

在tasks.yml中,您输入:

- include_vars:
    name: file_vars
    file: "{{ item }}"
- set_fact:
    all_vars: "{{ file_vars | combine(all_vars | default({})) }}"
- hosts: all
  tasks:
  - include_tasks: tasks.yaml
    loop: "{{projectlist.split(',') | list}}"
在playbook.yml中,您将:

- include_vars:
    name: file_vars
    file: "{{ item }}"
- set_fact:
    all_vars: "{{ file_vars | combine(all_vars | default({})) }}"
- hosts: all
  tasks:
  - include_tasks: tasks.yaml
    loop: "{{projectlist.split(',') | list}}"
Ansible并不是用来作为编程语言的,所以复杂的循环很难优雅地编写。理想情况下,您应该寻找处理您的用例的内置模块(据我所知,这里不是这样),编写您自己的自定义模块或查看其他人编写的预打包角色