考虑类似于以下示例的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_password在Ansible库中存储一些变量(例如),但不是整个文件.
如何将保险库加密的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语句解析为变量.
我一直在等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 vault文件中看到实际的git commit更改.
有一个简单的方法如何实现这一目标?
我是ansible的新手,我正在使用一个非常简单的剧本来发布sudo apt-get update和sudo 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) 我创建了自己的自定义库,我将自定义库添加到我的存储库的公共文件夹中.我需要动态传递变量.这是一个保密的密码,所以我在ansible中使用"vault".
在我的要求是如何通过include_vars在tasks\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的有效属性
我的一个角色有两种不同的变量类型.一个是公开的(诸如包版本和其他良性信息之类的东西).这些可以毫无顾虑地致力于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 playbook时传递发布的密码.我试着用:
echo $password | ansible-playbook test.yml --ask-vault-pass
Run Code Online (Sandbox Code Playgroud)
将密码传递给playbook,但它不起作用,错误信息是:
"msg":"试图解密但没有发现保险库秘密"
我不想将密码存储在文件中以供某些调用,现在我只想尝试在运行时自动将密码传递给playbook.对我有什么建议吗?ansible版本是2.4.
我有两个角色,其中一个有一个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-vault encrypt_string -n -p,然后将输出写入我的剧本.当我执行playbook时,它说解密的字符串不是JSON可序列化的.
加密的字符串:"inline_name"
我也尝试过inline_name和inlinename,具有相同的结果每次.
我的剧本:
---
- 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) 我正在试图弄清楚如何为Python脚本提供以下功能,以便它可以:
ansible.cfg和读取的vault_password_file变量vault_password_file并临时存储在Python变量中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 以编程方式与托管文件进行交互.