我想在剧本的路径中使用变量
ansible.builtin.import_playbook: "{{ home_directory_of_user }}/.ansible/.......
我有:
- hosts: localhost
gather_facts: false
vars_files:
- "{{ var_file }}"
tasks:
- name: var_file
set_fact:
ansible_collections_directory: "{{ ansible_collections_directory }}"
- name: Import the k3s playbook with flannel
ansible.builtin.import_playbook: "{{ hostvars['localhost']['ansible_collections_directory'] }}/techno_tim/k3s_ansible/site.yml"
vars:
ansible_collections_directory: "{{ hostvars['localhost']['ansible_collections_directory'] }}"
这样我确实得到了这个错误:
ERROR! 'hostvars' is undefined.
当我调试该值时,我确实得到了正确的路径,因此它必须是关于如何在 import_playbook 的名称中设置变量
有人知道如何在剧本名称中使用变量吗?
谢谢
看起来你正处于 A/B 问题的中间,所以我会给你两个答案。
当我调试该值时,我确实得到了正确的路径,所以它必须是关于如何以
的名称设置变量import_playbook
是的 - 因为当您调试该值时,它位于运行
debug
任务的主机范围内(尽管它始终在控制器上运行,但在这里并不重要)。
import_playbook
不是一项任务,因此它超出了任何主机的范围 - 所以没有 hostvars
。
有人知道如何在剧本名称中使用变量吗?
您可以像以前一样使用
vars
关键字,但不能将 hostvars
中的任何值分配给它:
# playbook.yaml
---
- name: Import a playbook with a variable in name
ansible.builtin.import_playbook: "{{ playbook_to_import }}"
vars:
playbook_to_import: playbook-to-import.yml
您可以根据
优先规则使用
--extra-vars
覆盖该值:
ansible-playbook playbook.yaml --extra-vars playbook_to_import=another-playbook-to-import.yml
您的代码表明您正在尝试使用来自 techno-tim/k3s-ansible 的剧本,因此还适用一些其他规则。像往常一样,这在 Ansible 文档中进行了描述 - 使用集合中的 playbook:
- name: Import a playbook
ansible.builtin.import_playbook: my_namespace.my_collection.playbookX
当然,集合必须正确安装
ansible- galaxy
。
因此,在您的情况下,只需设置正确的集合名称,不要使用任何变量:
- name: Import the k3s playbook with flannel
ansible.builtin.import_playbook: techno_tim.k3s_ansible.site