簡體   English   中英

如何將大量變量包含到 Ansible 角色中

[英]How do I include a lot of vars into Ansible roles

考慮這樣的播放設置:

- name: Provision the stage platform
  hosts: my-stage-host
  vars_files:
    - ../../env_vars/base.yml
    - ../../env_vars/stage.yml
  roles:
    - {role: 'some.ThirdpartyRole'}
    - {role: 'My.Role', name: 'app1', somevar: 'var2', dict: {'var1': 'var2'}, list: [{'var1': 'var2'}]}
    - {role: 'My.Role', name: 'app2', somevar: 'var2', dict: {'var1': 'var2'}, list: [{'var1': 'var2'}]}

這個設置很好,一切都按預期工作(雖然我真的不喜歡數據結構)。問題是 My.Role 有很多角色實例特定的變量、列表和字典等,不幸的是不能在defaults/main.ymldefaults/main.yml (因為它們特定於當前角色實例),並且因為我希望能夠在一台服務器上多次使用此角色,所以我需要隔離變量。

在一個完美的世界里,我將能夠..

  roles:
    - My.Role
      include: ../../varsA.yml

就像任務一樣......但從我目前在文檔和論壇中讀到的內容來看,這是不可能的......

目前,我的職責是使用以下不理想的設置:

文件:group_vars/my-host.yml

apps:
  name: 'something'
  someList:
    - item
    ...
  someDict:
    item: item
    itemsList: 
      - item
      ...
  name: 'somethingElse'
  someList:
    - item
    ...
  someDict:
    item: item
    itemsList: 
      - item
      ...

文件:playbooks/my-play.yml

  ...
  roles:
    - some.ThirdpartyRole
    - My.Role

正如您所看到的,它從我的 group_vars 中定義的字典中獲取所有變量,並且角色中的每個任務都使用with_items: myDict ,這使得子列表(除其他外)有點像噩夢,例如:

with_subelements:
  - myDict
  - subList

而且我無法檢查mydict.subList的存在,而是需要在任何地方定義空變量。

我希望我已經正確地解釋了自己,我想知道是否有人在他們需要在劇中多次使用的角色中使用大量 var 的經驗,或者關於角色/var 布局的任何其他指針。

我提出了一個解決方案,它不一定是“Ansible”方式,但是直到允許角色使用包含指令(就像任務一樣),這似乎是最干凈的方式。

劇本.yml

- name: My Play
  hosts: my-host
  roles:
    - {"role": My.role, "vars_file": "../../vars/projectA.yml"}
    - {"role": My.role, "vars_file": "../../vars/projectB.yml"}

我的角色/任務/main.yml

- name: Load in project specific vars
  include_vars: "{{ vars_file }}"
  ...

在 ansible 上包含變量

我在 Ansibles Github 上看到了一個最近的問題,它可能會影響這個解決方案,我將看看它是否仍然如此,一旦我嘗試過,我會嘗試並添加到我的答案中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM