Ansible инвентарь для переменных среды внутри роли - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть роль Ansible, с которой я хочу выполнить сценарий psql. Название роли - «db_scripts», и я перечислю содержимое соответствующих каталогов / файлов ниже.

db_scripts / tasks / mail.yml

-
  name: "Run the SQLS"
  command: "psql -f \"{{ script }}\"/files/my_sql_script.sql"
  environment:
    PGDATABASE: "{{ db_name }}"
    PGUSER: "{{ db_user }}"
    PGHOST: "{{ db_host }}"
    PGPORT: "{{ db_port }}"
  delegate_to: localhost

db_scripts / files / my_sql_script.yml

insert into employees(name, contact) values (Jack, 5555555);

db_scripts / default / main.yml

script: "{{ role_path }}"

/ app / производство / инвентарь

[dbservers]
db_host=192.168.1.100 db_name=mycompany db_user=abc db_port=3308

/ app / playbooks / run_sqls.yml

- name: Run sql
  hosts: dbservers
  roles:
    - db_scripts

Я запускаю playbook "run_sqls" следующим образом.

ansible-playbook run_sqls.yml -i inventories/app/production/inventory

Что я хочу понять, так это то, как я должен указать значения для следующих переменных среды, чтобы они могли быть динамическими c и могли использоваться хостами других сред, например: development et c ..

PGDATABASE: "{{ db_name }}"
PGUSER: "{{ db_user }}"
PGHOST: "{{ db_host }}"
PGPORT: "{{ db_port }}"

Задание их в соответствующем файле инвентаря, похоже, не работает, ошибки playbook для «неопределенных переменных» имеют смысл. Вот как я пытался. / приложение / производство / инвентарь

[dbservers]
192.168.1.100 db_name=mycompany db_user=abc db_port=3308

Ошибка при запуске playbook

TASK [db_scripts : Run the SQLS] ******************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "The field 'environment' has an invalid value, which includes an undefined variable. The error was: 'db_host' is undefined\n\nThe error appears to be in '/home/db_scripts/tasks/mail.yml': line 37, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n-\n  name: \"Run the SQLS\"\n  ^ here\n"}

Обратите внимание, когда значения для Указанные env-переменные указаны в "db_scripts / default / main.yml", playbook Работает отлично. Действительно ценю некоторые материалы. Я только начал с ansible, поэтому, пожалуйста, будьте просты с примерами. Заранее спасибо:)

1 Ответ

0 голосов
/ 17 февраля 2020
[dbservers]
192.168.1.100 db_name=mycompany db_user=abc db_port=3308

Q: "Задание их (переменных) в соответствующем файле инвентаризации, похоже, не работает, ошибки playbook для" неопределенных переменных "имеют смысл. "

A: Переменные из этого инвентаря должны работать как положено. Просто проверьте его

- hosts: dbservers
  tasks:
    - debug:
        msg:
          - '{{ db_name }}'
          - '{{ db_user }}'
          - '{{ db_host }}'
          - '{{ db_port }}'

Есть 2 проблемы

1) db_host отсутствует в инвентаре

2) Путь в команде inventories/app/production/inventory отличается от описанного пути /app/production/inventory

ansible-playbook run_sqls.yml -i inventories/app/production/inventory
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...