Модуль Ansible docker_container - Как передать переменные в раздел окружения?

Каждый раз, когда мне нужно использовать несколько версий Python в любой системе, в которой я использую Pyenv, вы можете использовать его для каждой роли пользователя или просто использовать его глобально.

Сайт Пьенв

Из их ридми:

pyenv позволяет легко переключаться между несколькими версиями Python. Это просто, ненавязчиво и следует традициям UNIX в отношении одноцелевых -инструментов, которые хорошо справляются с одной задачей.

0
07.08.2019, 18:35
2 ответа

Это может сделать то, что вы хотите(ansible 2.8)

-e 'name1_var=""testa"" name2_var=""testb"" name1_var3=""testc""'
0
28.01.2020, 02:39

TLDR;

Все выражения шаблона jinja2 должны быть заключены в кавычки в вашем плейбуке, когда они начинаются с двойных фигурных скобок иначе вы получите синтаксическую ошибку (Что вы и получите, я думаю)

Вы должны написать свою задачу, как показано ниже, чтобы устранить ошибку и установить ваши envs на ваши переданные дополнительные vars:

- name: Create a data container
  docker_container:
    name: mydeploycontainer
    image: 1111112222.dkr.ecr.us-east-1.amazonaws.com/someteam/app-deploy:v.1
    env:
      name1: "{{ name1_var }}"
      name2: "{{ name2_var }}"
      name3: "{{ name3_var }}"

Рекомендуется всегда заключать строки в кавычки, если они содержат шаблонные выражения jinja2, даже если они не начинаются с двойных фигурных скобок (, например.path: "/fix/path/{{ var_file_name }}")

ПОК

Вот доказательство концепции, которую я написал и поиграл с ansible 2.8.1, чтобы показать вам, что он работает так, как ожидалось. Чтобы воспроизвести, убедитесь, что вы pip install jmespath, поскольку я использовал json_queryдля значений отладки.

Сборник игр test.yml:

---
- name: Test passing vars to docker from command line
  hosts: localhost
  gather_facts: false

  tasks:

    - name: Spin up a container
      docker_container:
        state: started
        image: busybox:latest
        command: sh -c "while true; do sleep 1000; done"
        name: test_for_so
        env:
          oneenv: "{{ oneenv_value }}"
          otherenv: "{{ otherenv_value }}"

    - name: Get env values from container
      command: >-
        docker exec test_for_so sh -c 'echo ${{ item }}'
      register: env_out
      loop:
        - oneenv
        - otherenv

    - name: Display collected values
      debug:
        msg: "{{ env_out.results | json_query('[].{env: item, value: stdout}') }}"

Команда:

ansible-playbook test.yml \
  -e '{"oneenv_value": "This is value 1", "otherenv_value": "This is value 2"}'

И результат:

PLAY [Test passing vars to docker from command line] **********************************************************************************************************************************************************************

TASK [Spin up a container] ************************************************************************************************************************************************************************************************
changed: [localhost]

TASK [Get env values from container] *************************************************************************************************************************************************************************************
changed: [localhost] => (item=oneenv)
changed: [localhost] => (item=otherenv)

TASK [Display collected values] *******************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": [
        {
            "env": "oneenv",
            "value": "This is value 1"
        },
        {
            "env": "otherenv",
            "value": "This is value 2"
        }
    ]
}

PLAY RECAP ****************************************************************************************************************************************************************************************************************
localhost                  : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Счетчик POC

Если вы удалите кавычки вокруг строк шаблонов jinja2 в разделе env (, как в вашем примере ), вот что произойдет:

ERROR! Syntax Error while loading YAML.
  found unacceptable key (unhashable type: 'AnsibleMapping')

The error appears to be in '/home/user/test.yml': line 15, column 20, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

        env:
          oneenv: {{ oneenv_value }}
                   ^ here
We could be wrong, but this one looks like it might be an issue with
missing quotes. Always quote template expression brackets when they
start a value. For instance:

    with_items:
      - {{ foo }}

Should be written as:

    with_items:
      - "{{ foo }}"
3
28.01.2020, 02:39

Теги

Похожие вопросы