我正在使用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
如何传入变量?
使用--extra-vars
(或-e
(传递变量,请参阅https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#passing-命令行上的变量
下面是一个片段,展示了如何将额外的vars传递到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
虽然我不太确定查找是否能在清单插件配置文件中工作(我会让你试试(,但你所写的根本无法工作。您无意中说密码是字符串"lookup('env','vCenterAdminPass'("。
密码的内容应该是由jinja2处理的查找结果。因此,您需要将表达式封装在jinja2模板块中:
password: "{{ lookup('env','vCenterAdminPass') }}"
我最终完成了一项构建工作,将密码注入库存文件:
- 'echo "password: $vCenterAdminPass" >> vSphere/vxrail.vmware.yml'