ansible import_playbook,名称中带有变量

问题描述 投票:0回答:1

我想在剧本的路径中使用变量

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 的名称中设置变量

有人知道如何在剧本名称中使用变量吗?

谢谢

ansible
1个回答
0
投票

看起来你正处于 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
© www.soinside.com 2019 - 2024. All rights reserved.