使用"替代目录布局"并使用保险库

时间:2017-10-24 09:04:14

标签: ansible ansible-vault

我正在尝试使用Alternative Directory Layout和ansible-vaults。 但是当我运行我的剧本时,保险库加密的变量无法用该目录结构解析。那么我做错了什么?

我执行via:

ansible-playbook -i inventories/inv/hosts playbooks/inv/invTest.yml --check --ask-vault

这是我的结构:

.
├── inventories
│   ├── inv
│   │   ├── group_vars
│   │   │   ├── var.yml
│   │   │   └── vault.yml
│   │   └── hosts
│   └── staging
│       ├── group_vars
│       │   ├── var.yml
│       │   └── vault.yml
│       └── hosts
├── playbooks
│   ├── staging
│   │   └── stagingTest.yml
│   └── inv
│       ├── invTest.retry
│       └── invTest.yml
└── roles
    ├── basic-linux
    │   ├── defaults
    │   │   └── main.yml
    │   └── tasks
    │       └── main.yml
    ├── test
    │   ├── defaults
    │   │   └── main.yml
    │   └── tasks
    │       └── main.yml
    └── webserver
        ├── defaults
        │   └── main.yml
        ├── files
        ├── handler
        │   └── main.yml
        ├── tasks
        │   └── main.yml
        └── templates

这是我的主机文件(inventories/inv/hosts):

[inv]
testvm-01    ansible_ssh_port=22    ansible_ssh_host=172.16.0.101    ansible_ssh_user=root
testvm-02    ansible_ssh_port=22    ansible_ssh_host=172.16.0.102    ansible_ssh_user=root

playbook(playbooks/inv/invTest.yml):

---
  - name: this is test
    hosts: inv
    roles:
      - { role: ../../roles/test }
...

使用保险库加密var(roles/test/tasks/main.yml)的角色:

---
  - name: create test folder
    file:
        path: "/opt/test/{{ app_user }}/"
        state: directory
        owner: "{{ default_user }}"
        group: "{{ default_group }}"
        mode: 2755
        recurse: yes
...

var指向库(库存/ inv / group_vars / var.yml):

---
app_user: '{{ vault_app_user }}'
app_pass: '{{ vault_app_pass }}'
...

保管库文件(ansible-vault edit inventories/inv/group_vars/vault.yml):

vault_app_user: itest
vault_app_pass: itest123

我得到的错误信息是这样的:

  

失败! => {"失败":是的," msg":"字段' args'具有无效值,似乎包含未定义的变量。错误是:{{app_user}}:' app_user'未定义\ n \ n错误似乎在' roles / test / tasks / main.yml':但可能在文件的其他位置,具体取决于确切的语法问题。\ n \ n违规行似乎是:\ n \ n \ n - 名称:创建测试文件夹\ n ^ here \ n"}

1 个答案:

答案 0 :(得分:1)

您在group_vars文件夹中存储的名为app_user的文件中定义变量var.yml

在执行行中,您指向inventories/inv/hosts作为您的广告资源目录。

在这条路径中使用的字符串并不重要 - 从Ansible的观点来看,它只能看到:

hosts
group_vars
├── var.yml
└── vault.yml

对于名为var.yml的主机组和var,对于名为vault.yml的主机组,它将会显示vault

在你的情况下 - 永远不会。

您可能希望以这种方式整理文件:

inventories
└── production
    ├── group_vars
    │   └── inv
    │       ├── var.yml
    │       └── vault.yml
    └── hosts

这样,系统group_vars/inv中的主机就会读取inv中的文件。