我是 Ansible 的新手。我有許多路由器配置模板要生成,但想在劇本中指定應該生成哪個特定模板。為了簡單起見,我在這里只展示了兩個模板檔案。我能夠根據我的設定生成配置,一切正常。但是,我不知道如何在 site.yaml 劇本中的角色中執行單個模板檔案。這是我的目錄結構:
├── roles
│ ├── router
│ ├── tasks
│ │ └── main.yaml
│ ├── templates
│ │ ├── 4331-router.j2
│ │ ├── 881-router.j2
│ │ └── base.j2
│ └── vars
│ └── main.yaml
│
└── site.yaml
以下是 site.yaml 劇本的構建方式:
---
- name: Generate Router Configuration Files
hosts: localhost
roles:
- router
這是任務檔案夾中的 main.yaml:
---
- name: Generate 4331 configuration files
template: src=4331-router.j2 dest=~/ansible/configs/{{item.hostname}}.txt
with_items: "{{ routers_4331 }}"
- name: Generate 881 configuration files
template: src=881-router.j2 dest=~/ansible/configs/{{item.hostname}}.txt
with_items: "{{ routers_881 }}"
當我運行劇本時,它會生成所有配置模板。我希望能夠指定要呈現的配置模板,例如:routers_4331 或 routers_881。
如何在劇本中指定這一點?
uj5u.com熱心網友回復:
我想您在主機名串列和 file.j2 之間有一個鏈接(例如,相同的數字)
- find:
path: "path of templates" # give the right folder of templates
file_type: file
patterns: '[0-9] -.*?\.j2' #search files format xxxx-yyyy.j2
use_regex: yes
register: result
- set_fact:
hosting: "{{ hosting | d([]) _dico }}"
loop: "{{ result.files | map(attribute='path') | list }}"
vars:
_src: "{{ item }}"
_num: "{{ (_src | basename).split('-') | first }}"
_grp: "{{ 'routers' ~ '_' ~ _num }}"
_hosts: "{{ lookup('vars', _grp) }}"
_dico: >-
{%- set ns = namespace() -%}
{%- set ns.l = [] -%}
{%- for h in _hosts -%}
{%- if h.update({'pathj2': _src}) -%}{%- endif -%}
{%- set ns.l = ns.l [h] -%}
{%- endfor -%}
{{ ns.l }}
- name: Generate configuration files
template:
src: "{{item.pathj2}}"
dest: ~/ansible/configs/{{item.hostname}}.txt
loop: "{{ hosting }}"
第一個任務從檔案夾模板中選擇檔案 j2(遵循正則運算式模式)
第二個任務將檔案 j2 的相應路徑添加到包含主機名的檔案中
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/491521.html
上一篇:std::conditional用于編譯時繼承與std::enable_if用于編譯時方法
下一篇:驗證精度四舍五入到3dp
