automation - 包括在剧本的第一次播放中生成的变量
问题描述
我有一本包含两个剧本的剧本:1:在本地主机上创建库存文件和变量文件2:在生成的库存上使用命令中的变量
示例剧本:
---
- name: Generating inventory and variables
hosts: localhost
vars_files:
- variables.yml #variables file used for automating
tasks:
- name: Creating inventory template
template:
src: hosts.j2
dest: "./inventories/{{location}}/hosts"
mode: 0777
force: yes
ignore_errors: yes
run_once: true
- meta: refresh_inventory
- name: Creating predefined variables from a template
template:
src: predefined-vars.yml.j2
dest: "./variables/predefined-vars.yml"
- name: Setting vlan to network devices
remote_user: Ansible
hosts: all
vars_files:
- variables.yml #variables file used for automating.
- variables/predefined-vars.yml
tasks:
- name: configure Junos ROUTER for vlan
include_tasks: ./roles/juniper/tasks/add_vlan_rt.yml
when:
- inventory_hostname in groups['junos_routers']
- groups['junos_routers'] | length == 1
- location == inventory_name
这会产生未定义的变量错误(对于在第一次播放中创建的变量)。
有没有办法做到这一点?我用它来生成 router_port_name 等变量 - 变量取决于位置和专用服务器,它们在 variables.yml 中定义
非常感谢任何帮助。
谢谢
编辑:但是,我注意到这本剧本:
---
- hosts: localhost
gather_facts: false
name: 1
vars_files:
- variables.yml
tasks:
- name: Creating predefined variables from a template
template:
src: predefined-vars.yml.j2
dest: "./variables/predefined-vars.yml"
- name: Generate hosts file
hosts: all
vars_files:
- variables.yml
- ./variables/predefined-vars.yml
tasks:
- name: test
debug: msg="{{ router_interface_name }}"
显示在第一次播放中创建的变量。
我看到的不同之处在于,第一个剧本在第一次剧本开始时读取剧本中使用的所有变量文件(甚至是预定义的-vars.yml <- 在第一次比赛时创建,在另一个剧本中使用)(生成库存和创建变量文件) 而第二个剧本在第一次播放时读取 variables.yml ,并且仅在第二次播放开始时读取预定义的vars.yml 。
任何想法如何使第一个剧本的行为方式相同?
解决方案
因此,我根据其他人的文档和建议找到了问题的解决方案。
我对这个问题的理解:
剧本将读取所有提供的变量(所有剧本)到缓存中以供以后使用,所以如果我将我的预定义-vars.yml 包含到 vars_files 中,那么在第一次播放更改它之后,这些更改将不会被以后的播放使用因为他们会为此使用缓存。
因此,我必须在第二次播放中创建另一个任务,它将读取(加载到缓存中)我新生成的文件(用于该播放):
- name: Include predefined vars
include_vars: ./variables/predefined-vars.yml
run_once: true
希望这对你有帮助!仍然不知道为什么第二场比赛会显示变量......
推荐阅读
- python - Pandas:如何为每个 ID 获得一个月内最频繁的值?
- typescript - 除类型函数外的重载函数从不选择回退实现(其余参数)
- node.js - 如何使用 node.js 和 express.js 为网站启用 TLS 和 https 请求?
- java - 如何将 @RestController 中的请求正文转换为抽象值列表?
- angular - Angular 5将http数据存储在本地存储中
- button - 如何为颤动按钮添加边框?
- python-3.x - rasa-core 没有正确处理我的故事
- python - 从我的对象中提取日期的麻烦
- mongodb - 将字符串更新为 Mongodb 中子项的 ObjectId
- reactjs - 如何在本机反应中显示静态图像