标签: ansible-vault

Ansible:如何在单独的保险库文件中加密库存文件中的某些变量?

设置

考虑类似于以下示例的Ansible清单文件:

[san_diego]
host1
host2

[san_francisco]
host3
host4

[west_coast]
san_diego
san_francisco

[west_coast:vars]
db_server=foo.example.com
db_host=5432
db_password=top secret password
Run Code Online (Sandbox Code Playgroud)

问题

我想db_passwordAnsible库中存储一些变量(例如),但不是整个文件.

如何将保险库加密的ansible文件导入未加密的库存文件?

我试过的

我创建了一个加密的vars文件,并尝试使用以下命令导入它:

include: secrets
Run Code Online (Sandbox Code Playgroud)

为了这ansible-playbook与回应:

ERROR: variables assigned to group must be in key=value form
Run Code Online (Sandbox Code Playgroud)

可能是因为它试图将include语句解析为变量.

encryption ansible ansible-playbook ansible-vault

62
推荐指数
4
解决办法
6万
查看次数

如何使用ansible-vault 2.3.0解密字符串

我一直在等ansible 2.3,因为它将引入encrypt_string功能.

不幸的是,我不确定如何读取加密的字符串.

我确实尝试过decrypt_string,解密(文件),查看(文件),但没有任何作用.

cat test.yml 
---
test: !vault |
     $ANSIBLE_VAULT;1.1;AES256
     37366638363362303836383335623066343562666662386233306537333232396637346463376430
     3664323265333036663736383837326263376637616466610a383430623562633235616531303861
     66313432303063343230613665323930386138613334303839626131373033656463303736366166
     6635346135636437360a313031376566303238303835353364313434363163343066363932346165
     6136
Run Code Online (Sandbox Code Playgroud)

我打算的错误是 ERROR! input is not vault encrypted data for test.yml

如何解密字符串,以便我知道它的价值是什么而不需要运行游戏?

ansible ansible-vault

42
推荐指数
10
解决办法
3万
查看次数

如何改变金库变化?

我想在ansible vault文件中看到实际的git commit更改.

有一个简单的方法如何实现这一目标?

git diff ansible ansible-vault

28
推荐指数
3
解决办法
6173
查看次数

如何在库中存储ansible_become_pass以及如何使用它?

我是ansible的新手,我正在使用一个非常简单的剧本来发布sudo apt-get updatesudo apt-get upgrade在几台服务器上.

这是我正在使用的剧本:

---

- name: Update Servers
  hosts: my-servers
  become: yes
  become_user: root
  tasks:
    - name: update packages
      apt: update_cache=yes

    - name: upgrade packages
      apt: upgrade=dist
Run Code Online (Sandbox Code Playgroud)

这是我~/.ansible/inventory/hosts文件的摘录:

[my-servers]
san-francisco ansible_host=san-francisco ansible_ssh_user=user ansible_become_pass=<my_sudo_password_for_user_on_san-francisco>
san-diego     ansible_host=san-diego     ansible_ssh_user=user ansible_become_pass=<my_sudo_password_for_user_on_san-diego>
Run Code Online (Sandbox Code Playgroud)

如果我启动剧本,这就是我得到的:

$ ansible-playbook update-servers-playbook.yml                                                                                                                                     

PLAY [Update Servers] **********************************************************

TASK [setup] *******************************************************************
ok: [san-francisco]
ok: [san-diego]

TASK [update packages] *********************************************************
ok: [san-francisco]
ok: [san-diego]

TASK [upgrade packages] ********************************************************
ok: [san-francisco]
ok: [san-diego]

PLAY RECAP ********************************************************************* …
Run Code Online (Sandbox Code Playgroud)

security ansible ansible-vault

17
推荐指数
3
解决办法
1万
查看次数

如何在ansible中使用include_vars

我创建了自己的自定义库,我将自定义库添加到我的存储库的公共文件夹中.我需要动态传递变量.这是一个保密的密码,所以我在ansible中使用"vault".

在我的要求是如何通过include_varstasks\main.yml主机前.

例如:mytasks.yml

- include_vars: sample_vault.yml
- include: sample_tasks.yml
- hosts: localhost
  tasks:
    name: "free task"
    command: ls -a
Run Code Online (Sandbox Code Playgroud)

我的目录结构如下:

myfolder
  - common 
      -library   
         -my file.py
      - sample_tasks.yml

  - mytasks
      -mytasks.yml(my main master playbook file)
      -sample_vault.yml  (note:i create this using vault for confidential purpose)
      - roles
        -myrole
Run Code Online (Sandbox Code Playgroud)

sample_vault.yml使用ansible执行hosts任务之前,我需要使用文件中传递的变量运行sample_tasks文件.如果我使用额外的变量意味着密码可见,所以我不需要.

当我include_vars在我的tasks/main.yml文件中使用时,它显示以下错误:

错误!'include_vars'不是Play的有效属性

include ansible ansible-playbook ansible-vault

13
推荐指数
1
解决办法
3万
查看次数

在ansible角色中使用多个var文件

我的一个角色有两种不同的变量类型.一个是公开的(诸如包版本和其他良性信息之类的东西).这些可以毫无顾虑地致力于SCM.它还需要一些私人信息(例如API密钥和其他秘密信息).我正在使用ansible-vault加密秘密信息.我的解决方案是vars/main.yaml为pulic和vars/vault.yml加密的私人信息.

我遇到了一个问题,我不确定这里的最佳实践或实际解决方案是什么.似乎ansible只加载vars/main.yml文件.当然,我不想加密公共信息,所以我寻找解决方案.到目前为止,我提出的唯一解决方案(在IRC上建议)是group_vars/all/vault.yml使用角色名称创建所有变量并为其添加前缀.这是有效的,因为ansible似乎递归地加载了所有内容group_vars.这确实有效,但似乎在组织上不正确,因为变量是针对特定角色而不是"全局普遍真实".我也试图把include: vars/vault.yml进入vars/main.yml,但没有奏效.

有没有正确的方法来做到这一点?

ansible ansible-vault

12
推荐指数
3
解决办法
8373
查看次数

运行Ansible playbook时如何自动传递保管库密码?

我有一个带有保险库的Ansible剧本,我想通过我的网络界面中的提示框询问保险箱密码,然后在运行ansible playbook时传递发布的密码.我试着用:

echo $password | ansible-playbook test.yml --ask-vault-pass
Run Code Online (Sandbox Code Playgroud)

将密码传递给playbook,但它不起作用,错误信息是:

"msg":"试图解密但没有发现保险​​库秘密"

我不想将密码存储在文件中以供某些调用,现在我只想尝试在运行时自动将密码传递给playbook.对我有什么建议吗?ansible版本是2.4.

ansible ansible-vault

11
推荐指数
2
解决办法
9376
查看次数

如何忽略解密存储文件的失败?

我有两个角色,其中一个有一个group_vars拱形文件,另一个没有.我想运行不需要任何存储信息的角色,但是ansible提示我输入保险库密码:

$ tree
??? deploy-home-secure.yml
??? deploy-home.yml
??? group_vars
?   ??? home
?   ?   ??? unvaulted
?   ??? home-secure
?       ??? unvaulted
?       ??? vaulted
??? hosts
??? roles
    ??? home
    ?   ??? tasks
    ?       ??? main.yaml
    ??? home-secure
        ??? tasks
            ??? main.yaml

$ ansible-playbook --version
ansible-playbook 1.8.2
  configured module search path = None

$ ansible-playbook -i hosts deploy-home.yml
ERROR: A vault password must be specified to decrypt vaulttest/group_vars/home-secure/vaulted

$ ansible-playbook --vault-password-file=/dev/null -i hosts deploy-home.yml
ERROR: Decryption failed
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook ansible-vault

10
推荐指数
2
解决办法
7344
查看次数

内联加密变量不是JSON可序列化的

我试图了解如何使用保险库加密单个变量.首先我用字符串加密字符串ansible-vault encrypt_string -n -p,然后将输出写入我的剧本.当我执行playbook时,它说解密的字符串不是JSON可序列化的.

加密的字符串:"inline_name" 我也尝试过inline_nameinlinename,具有相同的结果每次.

我的剧本:

---
- name: Build System

  hosts: dev

  tasks:
  - name: Create 
    mysql_db:
      state: present
      name: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          39613261386438623937643062636166663638633062323939343734306334346537613233623064
          3761633832326365356231633338396132646532313861350a316666376566616633376238313636
          39343833306462323534623238333639663734626662623731666239366566643636386261643164
          3861363730336331660a316165633232323732633364346636363764623639356562336536636136
          6364
      login_host: "{{ mysql_host }}"
      login_user: "{{ mysql_user }}"
      login_password: "{{ mysql_pass }}"
  - name: Check if can access plain text vars
    debug:
      msg: "{{ my_plain_txt }}"
Run Code Online (Sandbox Code Playgroud)

错误信息:

An exception occurred during task execution. To see the full traceback, use -vvv. 
The error was: …
Run Code Online (Sandbox Code Playgroud)

ansible ansible-vault

9
推荐指数
1
解决办法
2684
查看次数

如何在Python脚本中查看/解密Ansible保险库凭证文件?

我正在试图弄清楚如何为Python脚本提供以下功能,以便它可以:

  1. 导入Ansible Python模块
  2. 打开我定义ansible.cfg和读取的vault_password_file变量
  3. 读取vault_password_file并临时存储在Python变量中
  4. 解密引用的Ansible存储文件

通过谷歌找到了这个代码,但是当我尝试它时似乎没有用:

import ansible.utils

bar = dict()

bar = ansible.utils._load_vars_from_path("secrets.yml", results=bar, vault_password="password")

print bar
Run Code Online (Sandbox Code Playgroud)

抛出此错误:

$ python ansible-vault-ex.py
Traceback (most recent call last):
  File "ansible-vault-ex.py", line 5, in <module>
    bar = ansible.utils._load_vars_from_path("credentials.vault", results=bar, vault_password="password")
AttributeError: 'module' object has no attribute '_load_vars_from_path'
Run Code Online (Sandbox Code Playgroud)

当我调查这个时,我在任何Ansible相关文件中都没有看到这个函数的迹象,这让我相信这个方法不再适用于Ansible的一些新版本.

底线是我想从Python脚本导入Ansible库/模块的一些方法,以便我可以ansible-vault从Python 以编程方式与托管文件进行交互.

python encryption ansible ansible-vault

8
推荐指数
2
解决办法
7428
查看次数