Ansible 未加载 "all" 组变量
Ansible not loading the "all" group variables
我有一个非常简单的 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 }}"
事实上,这个模块确实有效,只是 Ansible 似乎没有正确加载变量。我这样调用 Ansible:
/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 是否会从命令行中用自己的变量清除我的变量?
需要 2 样东西:
- 在 ansible.cfg
中指定 hash_behaviour = merge
以 JSON 格式传递散列 --extra-var:
→ ansible-playbook playbooks/variables-demo.yml -e '{"symfony": {"deploy_version": "y", "deploy_base": "/some/other" } }'
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 }}"
然后像这样调用你的 Ansible:
/usr/bin/ansible-playbook deploy.yml -i inventory/hosts \
-e "DEPLOY_HOSTS=stg-web" \
-e "DEPLOY_VERSION$UPSTREAM_BUILD_NUMBER" \
-e "ENV=stg"
希望对您有所帮助!
我有一个非常简单的 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 }}"
事实上,这个模块确实有效,只是 Ansible 似乎没有正确加载变量。我这样调用 Ansible:
/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 是否会从命令行中用自己的变量清除我的变量?
需要 2 样东西:
- 在 ansible.cfg 中指定
以 JSON 格式传递散列 --extra-var:
→ ansible-playbook playbooks/variables-demo.yml -e '{"symfony": {"deploy_version": "y", "deploy_base": "/some/other" } }'
hash_behaviour = merge
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 }}"
然后像这样调用你的 Ansible:
/usr/bin/ansible-playbook deploy.yml -i inventory/hosts \
-e "DEPLOY_HOSTS=stg-web" \
-e "DEPLOY_VERSION$UPSTREAM_BUILD_NUMBER" \
-e "ENV=stg"
希望对您有所帮助!