如何让变量在多个Ansible Playbook之间共享?
问题分析与解决
你遇到的问题核心是Ansible默认未启用事实缓存——即便第一个Playbook里用cacheable: yes标记了要缓存事实,没有配置缓存机制的话,这些事实不会被持久化存储,第二个Playbook自然读不到对应的变量。
解决步骤
1. 配置Ansible事实缓存
编辑ansible.cfg文件(全局路径通常是/etc/ansible/ansible.cfg,也可以在当前Playbook目录下创建本地的./ansible.cfg),添加或修改以下配置项:
[defaults] # 选择文件型缓存(适合单主机场景) fact_caching = jsonfile # 指定缓存文件存储目录,确保当前用户有读写权限 fact_caching_connection = ~/.ansible/facts_cache # 设置缓存永不过期(按需调整,单位为秒) fact_caching_timeout = 0
2. 创建缓存目录
执行命令生成配置中指定的缓存目录:
mkdir -p ~/.ansible/facts_cache
3. 重新执行Playbook
先运行第一个获取城市名称的Playbook:
ansible-playbook get_city.yml
再运行第二个打印变量的Playbook:
ansible-playbook print_fact.yml
额外可选方案
如果不想修改配置文件,也可以通过环境变量临时启用缓存来执行第一个Playbook:
ANSIBLE_FACT_CACHING=jsonfile ANSIBLE_FACT_CACHING_CONNECTION=~/.ansible/facts_cache ansible-playbook get_city.yml
内容的提问来源于stack exchange,提问作者Cruise5
相关产品推荐
相关产品推荐

