针对具有不同配置的多个主机

时间:2019-06-28 13:34:25

标签: ansible

我检查了一些类似的问题,但是那些问题没有回答我的问题。

我有三位房东:

   - host_abc_01
   - host_def_01
   - host_ghi_01

我想用这种方式创建目录:

   - host_abc_01:
     - d:\abc\dir1\dir2

   - host_def_01:
     - d:\def\dir1\dir2

   - host_ghi_01:
     - d:\ghi\dir1\dir2

唯一的不同是目录名称。子目录具有相同的名称。

除了使用自己的任务和varfiles创建三个不同的角色之外,还有什么方法可以一次完成该任务?

   - name: create project directory
      win_file:
        path: '{{ projects_volume }}\{{ item.proj_name }}\{{ some_dir }}'
      state: directory
      loop:
        - { proj_name: 'abc', when: "'abc' in inventory_hostname" }
        - { proj_name: 'def', when: "'def' in inventory_hostname" }
        - { proj_name: 'ghi', when: "'ghi' in inventory_hostname" }

但是所有目录都是在所有主机上创建的。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

您可以split 库存主机名

path: 'd:\{{ inventory_hostname.split("_")[1] }}\dir1\dir2'

(未经测试)

答案 1 :(得分:0)

如果子文件夹名称不属于主机名,则为更通用的方法

vars:
path_part:
  'host_01': 'abc'
  'host_02': 'def'
  'host_03': 'ghi'

tasks:
- name: create project directory
  win_file:
    path: '{{ projects_volume }}\{{ path_part[inventory_hostname] }}\{{ some_dir }}'
    state: directory

答案 2 :(得分:0)

可能不是您要找的答案,但是您可以创建3个host_vars文件:

库存/ host_vars / host_abc_01

proj_name: abc

库存/ host_vars / host_def_01

proj_name: def

库存/ host_vars / host_ghi_01

proj_name: ghi

那么您的角色将是:

- name: create project directory
  win_file:
    path: '{{ projects_volume }}\{{ proj_name }}\{{ some_dir }}'
    state: directory

您可以根据需要组织var,只需查看: Working with Inventory