Инвентарь Ansible для переменных среды внутри роли

У меня есть роль 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 / production / inventory

[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

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

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

Указание их в соответствующем файле инвентаризации, похоже, не работает, ошибки playbook для "undefined vars" имеют смысл. Вот как я пытался. / app / production / inventory

[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 работает отлично. Действительно ценю некоторые вклады. Я только начал работать с анзиблем, поэтому, пожалуйста, будьте как можно проще с примерами. Заранее спасибо :)


person bindo    schedule 17.02.2020    source источник
comment
Вы сказали: "... playbook errors out for "undefined vars" which make sense." Можно ли объяснить, что именно имеет смысл?   -  person Vladimir Botka    schedule 17.02.2020


Ответы (1)


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

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

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

- 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
person Vladimir Botka    schedule 17.02.2020
comment
Спасибо @Vladimir Да db_host из инвентаря был пропущен по ошибке при публикации вопроса. Однако удачи все равно нет. Я обновил свой исходный вопрос с ошибкой playbook. - person bindo; 18.02.2020