Ansible Role变量嵌套定义与Molecule测试文件变量引用问题
Ansible Nginx Role配置问题解答
问题1:使用version变量定义nginx_package的正确写法
你当前的写法存在三处错误:
defaults/main.yml是Ansible Role存储默认变量的专用文件,变量直接定义为顶层键即可,不需要额外嵌套defaults父级字典- 同一文件内引用已定义的变量,不需要加
defaults.前缀,直接使用变量名即可 - 包含Jinja模板语法的变量值需要用引号包裹,避免YAML解析时出现语法错误
修正后的正确写法如下:
--- user: nginx group: nginx version: 1.19.2 nginx_package: "nginx-{{ version }}-1.el7.ngx" OS: centos OSRELEASE: 7
问题2:在molecule verify.yml中使用version变量的实现方法
可以使用,常见实现方式有两种:
方式一:继承converge阶段的变量上下文
如果你的converge.yml中已经引入了该nginx Role,那么Role的默认变量会自动加载到当前Molecule场景的变量上下文中,verify.yml可以直接调用{{ version }}变量,不需要额外配置。
方式二:主动加载defaults变量文件
如果converge阶段没有引入该Role,可以在molecule/default/molecule.yml的provisioner配置段中添加变量加载规则,示例配置如下:
provisioner: name: ansible inventory: host_vars: all: version: "{{ (lookup('file', '../../defaults/main.yml') | from_yaml).version }}"
配置完成后即可在verify.yml中直接使用{{ version }}变量。
内容的提问来源于stack exchange,提问作者Marco Ferrara
相关产品推荐
相关产品推荐

