将Gitlab CI变量注入Ansible



我正在使用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'

最新更新