ansible правильный способ вызова + создание переменной - PullRequest
0 голосов
/ 06 апреля 2020

Я столкнулся с проблемой и надеялся, что смогу получить помощь.
Я пытаюсь создать файл на основе имени переменной, содержащий переменную.
app-inputs/app1.yml

---
app_name: "labo.{{ environment }}.eng.inet.com"
environment:
  - int
  - lab

при попытке создать файл:
roles/buld_config/tasks/main.yml

---
- name: create destination file
  file:
    path: "{{ folder_path ~ item[0] }}/{{ item[1] }}.yml"
  with_nested:
    - "{{ config_folders }}"
    - "{{ app_name }}"

Я сталкиваюсь со следующей проблемой:
"msg": "file (/etc/scripts/app-configs/[].labo.eng.inet.com.yml) is absent, cannot continue"
Переменная {{environment}} не Население.

Я вижу проблему: нигде, я не скажу им l oop по средам, но я не вижу, как это сделать правильно.

Конечная цель - создать файл для лаборатории в каталоге лаборатории, на основе шаблона jinja2, создать конфигурацию. Затем это будет int environment, et c ...

Среды не являются фиксированными и могут отличаться в зависимости от приложения, поэтому они определены в -e @app-inputs/app1.yml файле

. надеясь, что я смогу получить помощь от людей, более знающих меня, с помощью ansible, поскольку это одна из моих первых попыток.

Ваша помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 06 апреля 2020

Эй, я понимаю ситуацию. Есть несколько способов решить эту проблему, это также зависит от того, чего мы достигнем к ansible.

Итак, из вышеприведенной ситуации я мог бы предложить одно небольшое простое решение. Но, как я сказал, есть несколько способов сделать это, и это один из них. Возможно, вы увидите, что каждый вносит свой вклад в этот вопрос.

Вот одно из решений:

app-inputs/app1.yml переменные будут выглядеть как

---
app_name: "labo.eng.inet.com"
environment:
  - int
  - lab

roles/buld_config/tasks/main.yml ваша задача будет выглядеть как

---
- name: create destination file
  file:
    path: "{{ item[0] }}/{{ item[2] }}.{{ item[1] }}.yml"
  with_nested:
    - "{{ config_folders }}"
    - "{{ app_name }}"
    - "{{ environment }}"

Надеюсь, это поможет, но это похоже на взлом. Я могу предложить еще кое-что на основе вашего комментария.

Обновление

На основе комментария приведен обновленный ответ, опять же, есть несколько способов добиться этого.

app-inputs/app1.yml переменные будут выглядеть так:

---
app_name_lab: "labo.eng.lab.inet.com"
app_name_int: "labo.eng.int.inet.com"
#I am aware environment is a reserved keyword in ansible, use your own word.
environment: 
  - int
  - lab

roles/build_config/tasks/main.yml ваша задача будет выглядеть как

---
- name: create destination file
  file:
    path: "{{ item[0] }}/{{ vars['app_name_'+item[1] ] }}.yml"
  with_nested:
    - "{{ config_folders }}"
    - "{{ environment }}"

Надеюсь, это решит вашу проблему. Опять же, это не единственно возможное решение, можно достичь этого несколькими способами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...