Ansible-pull 在 group_vars 目录中找不到 vars

Ansible-pull 在 group_vars 目录中找不到 vars

我有一个包含一些角色的 ansible 结构。

/usr/local/ansible
    playbooks
        roles
            role1
            role2
                tasks
                handlers
                files
                templates
                    my_template.yml
                vars
                    main.yml
    group_vars
        role2.yml

通常,当从 ansible 服务器运行它时,模板:模块会找到 group_vars/role2.yml 并将其应用于 my_template。

当我使用 ansible-pull 时,模板模块找不到组 vars,并且引用变量的第一个模板行会导致错误 - 找不到变量。只有将我的变量放在 vars/main.yml 中我们才能找到它们。

ansible-pull -C dockervm -d /usr/local/ansible -U [email protected]:MRI-Software/HappySoftware-config-usr_local_ansible.git -i localhost, -e 'small=yes vagrant=True ServerNamePrefix=docker' --accept-host-key /usr/local/ansible/playbooks/docker.yml

由于 ansible-pull 操作留下了整个 /usr/local/ansible 目录树(从 gi​​t 服务器中提取),我尝试手动运行 ansible-playbook 但遇到与 ansible-pull 相同的失败。

ansible-playbook -i localhost -e  'small=yes vagrant=True ServerNamePrefix=docker'  ./docker.yml

此配置与常规 Web 服务器配置之间的主要区别在于它是针对本地主机运行的。

因此,我确保 /usr/local/ansible/group_vars 和 /usr/local/ansible/playbooks/group_vars 都包含 localhost 变量集合,但剧本仍然在模板中的第一个变量引用上失败:

TASK [docker : template] *******************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'SSH_WEB_USER' is undefined"}

是的,我检查了变量定义是否在那里。

因此,我将整个变量集合移植到 main.yml 内的 role/docker/vars 目录中,并且它可以工作,但与其余配置角色相比,它现在是一个例外。

知道如何让 ansible-pull 引用 group_vars 目录(在剧本中)吗?

答案1

您的目录组变量剧本位于同一目录中/usr/本地/ansible。 命令ansible-pull从目录运行剧本剧本 /usr/local/ansible/playbooks/docker.yml

看一眼变量优先级:我应该把变量放在哪里?.你会看到组变量可以放在剧本或库存目录中(优先级 4.-7.)。

  • 最简单的解决办法就是组变量进入目录剧本
/usr/local/ansible/playbooks/group_vars/main.yml

但是,如果你还没有克隆存储库,你会看到一个错误剧本然而

致命:目标路径“/usr/local/ansible/playbooks”已存在且不是空目录。

因此,如果您移动组变量进入已经克隆的存储库和选项- 清除未使用。

  • 下一个选择是搬家组变量进入库存。例如,
shell> pwd
/tmp/test

shell> tree .
.
└── inventory
    ├── group_vars
    │   └── all
    │       └── main.yml
    └── hosts

3 directories, 2 files

shell> cat inventory/hosts 
localhost

shell> cat inventory/group_vars/all/main.yml 
test_var_1: test variable 1

配置库存

shell> export ANSIBLE_INVENTORY=/tmp/test/inventory

并运行ansible-pull命令

shell> ansible-pull -d /tmp/test/test_001 -U https://repos.example.org/test_001.git --full /tmp/test/test_001/pb_001.yml
Starting Ansible Pull at 2023-07-22 19:18:03
/home/admin/.local/bin/ansible-pull -d /tmp/test/test_001 -U https://repos.example.org/test_001.git --full /tmp/test/test_001/pb_001.yml
localhost | CHANGED => {
    "after": "1f637428cafb37156e4027dc459e90609a2c2192",
    "before": null,
    "changed": true
}

PLAY [all] *********************************************************************

TASK [debug] *******************************************************************
ok: [localhost] => 
  msg: Playbook pb_001.yml is runnning ...

TASK [debug] *******************************************************************
ok: [localhost] => 
  test_var_1: test variable 1

PLAY RECAP *********************************************************************
localhost: ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

,其中使用了下面的剧本

shell> cat test_001/pb_001.yml 
- hosts: all
  gather_facts: false
  tasks:
    - debug:
        msg: Playbook pb_001.yml is runnning ...
    - debug:
        var: test_var_1

相关内容