2016-04-14 3 views
3

У меня очень простая установка Ansible.Невозможно загрузить «все» групповые переменные

group_vars/all/main.yml:

symfony: 
    env: prod 
    owner: capistrano 
    cache_owner: files 
    cache_group: files 
    deploy_base: /opt/symfony 
    keep_count: 2 

deploy.yml:

# ... 
    - name: roll forward latest release 
    symfony_preload: version="{{ symfony.deploy_version }}" deploy_base="{{ symfony.deploy_base }}" 

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

/usr/bin/ansible-playbook deploy.yml -i inventory/hosts \ 
    -e deploy_hosts=stg-web \ 
    -e symfony.deploy_version="$UPSTREAM_BUILD_NUMBER" \ 
    -e symfony.env="stg" 

Это не удается:

TASK [roll forward latest release] ********************************************* 
fatal: [webserver1]: FAILED! => {"failed": true, "msg": "'symfony' is undefined"} 

Что здесь провал? Является ли Ansible уничтожением моих переменных с помощью собственной командной строки?

ответ

1

2 вещи необходимы:

  1. Укажите hash_behaviour = merge в ansible.cfg
  2. Пропустите хэш --extra-вар в формате JSON:

    → ansible-playbook playbooks/variables-demo.yml -e '{"symfony": {"deploy_version": "y", "deploy_base": "/some/other" } }'

+0

Спасибо! Вид глупых, что слияние не по умолчанию в Ansible при работе с хэш-варами. –

1

hash_behaviour = merge является не рекомендуется и предпочитают делать вещи. Я могу показать вам более элегантный способ сделать это:

group_vars/all/main.yml:

symfony: 
    env: "{{ ENV }}" 
    owner: capistrano 
    cache_owner: files 
    cache_group: files 
    deploy_base: /opt/symfony 
    keep_count: 2 
    deploy_version: "{{ DEPLOY_VERSION }}" 
    deploy_hosts: "{{ DEPLOY_HOSTS }}" 

Затем вызовите ваш анзибль так:

/usr/bin/ansible-playbook deploy.yml -i inventory/hosts \ 
    -e "DEPLOY_HOSTS=stg-web" \ 
    -e "DEPLOY_VERSION$UPSTREAM_BUILD_NUMBER" \ 
    -e "ENV=stg" 

Надеется, что поможет вам!

+0

Почему это не рекомендуемый/предпочтительный способ делать что-то? Это имеет смысл и должно быть поведением IMO по умолчанию. –

 Смежные вопросы

  • Нет связанных вопросов^_^