Как использовать вложенную переменную из Jenkinsfile в Ansible? - PullRequest
0 голосов
/ 18 октября 2019

В моем Jenkinsfile у меня есть имя среды, указанное в качестве переменной среды:

environment {
   WORK_ENV = 'DEV'
} 

В моих скриптах Ansible у меня есть переменная:

postfix:
  DEV: temp
  TEST: test

Так что теперь в зависимости от значения WORK_ENVПеременная постфикс должен измениться.

Мне нужен эквивалент этой операции в Ansible:

{{ postfix.{{ WORK_ENV }} }}

Я знаю, что эта строка не будет работать, поэтому я ищу обходной путь - есть идеи?

РЕДАКТИРОВАТЬ:

Я пробовал поиск:

{{ lookup('vars', 'postfix_' + work_env) }}

И у меня такие переменные (я бы предпочел использовать предыдущий способ):

postfix_DEV: "temp"
postfix_UAT1: "TEST"

Это вроде работает, но вывод неправильный ...

enter image description here

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

В моем случае это работало, когда я использовал:

- name: Run SQL scripts
  win_shell: |
    cd "{{ package_unzip_dest }}"
    Write-Output "Running script {{ item }}.sql"
    sqlcmd -S {{ server }} -U {{ db_user }} -P {{ db_password }} -i {{ item }}.sql -d {{ data_base }}_{{ lookup('vars', 'postfix_' + work_env) | to_nice_yaml | regex_replace('- ', '') }}
  with_items: "{{ scripts }}"
  vars:
    postfix_DEV: temp
    postfix_UAT1: TEST

Без использования to_nice_yaml У меня была проблема с выводом Unicode.

0 голосов
/ 18 октября 2019

Если ваша переменная действительно доступна в вашем jenkins env, и вы запускаете playbook оттуда, вы можете попробовать следующее: поиск значения в вашем env vars

{{ postfix[lookup('env', 'WORK_ENV')] }}

Если это не работает в вашем сценарии, вы можете передать дополнительный вар в свою книгу, как предложено @Matt Schuchard в комментариях выше.

...