我正在使用Gitlab CI运行程序执行Ansible剧本,并且无法将在Gitlab中定义的变量推送到Ansible中。我知道我可以使用lookup('env','var')
来获取变量,但是在yml广告资源文件中似乎不起作用。例如:
# List everything in vCenter
- ansible-inventory --list -i vSphere/vxrail.vmware.yml
vxrail.vmware.yml
plugin: vmware_vm_inventory
strict: False
hostname: XXX.XXX.XXX.XXX
username: administrator@vsphere.local
# This isn't working
password: lookup('env','vCenterAdminPass')
validate_certs: False
with_tags: True
如何传递变量?
答案 0 :(得分:1)
尽管我不太确定查找是否可以在清单插件配置文件中使用(我会尽力尝试),但是您编写的内容根本无法使用。您只是在说密码是字符串“ lookup('env','vCenterAdminPass')”。
密码的内容应该是jinja2将处理的查找结果。因此,您需要将表达式包含在jinja2模板块中:
password: "{{ lookup('env','vCenterAdminPass') }}"
答案 1 :(得分:0)
让我们使用--extra-vars
(或-e
)来传递变量,请参见https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#passing-variables-on-the-command-line
下面是一个片段,显示了如何将额外的变量传递到我的Gitlab CI脚本部分。
deploy_ec2:
stage: deploy_ec2
script:
- ansible-playbook cuong-conf/main.yml --limit="${CI_COMMIT_REF_NAME}" -e "env=${CI_COMMIT_REF_NAME} app=${CI_PROJECT_NAME} method=${CI_JOB_STAGE} app_path=${APPLICATION_PATH}"
only:
- staging
- demo
- production
tags:
- gitlab_runner
答案 2 :(得分:0)
我最终完成了将密码注入清单文件的构建工作:
- 'echo "password: $vCenterAdminPass" >> vSphere/vxrail.vmware.yml'