我将env变量传递给ansible playbook中的Docker容器,如何在env的键/值中的键中设置Ansible变量?
所以这:
- name: webproxy container
docker_container:
name: "webproxy"
image: "webproxy"
env:
SERVICE_443_NAME: "webproxy"
Run Code Online (Sandbox Code Playgroud)
成为这个:
- name: webproxy container
docker_container:
name: "webproxy"
image: "webproxy"
env:
SERVICE_{{ port_number }}_NAME: "webproxy"
Run Code Online (Sandbox Code Playgroud) 我编写了一个 Ansible playbook,它需要运行它的作业编号作为其参数之一,以便我将对该作业的引用添加到我维护的数据库中。如何获取 Tower 模板以将其传递给剧本?
这是我目前的解决方案,但并不理想:
我首先启动包含我的剧本的模板,tower-cli此时工作编号会返回给我。然后,我将作业编号作为参数传递给另一个模板,该模板调用一个剧本,将作业编号写入数据库。
理想情况下,我希望能够通过运行单个剧本tower-cli,而不用担心这样做时的作业数量。我希望 Tower 将作业编号传递给原始剧本,以免需要第二个剧本。此问题的任何其他解决方案也将受到赞赏。
是否可以在ansible剧本的条件下使用Jinja2过滤器的结果?
我试图让这个工作,但没有成功:
{% if (item | ipv4) %}{{ item }}{% else %}{{ lookup('dig', item) }}{% endif %}}
Run Code Online (Sandbox Code Playgroud)
我当前测试中的项目设置为localhost(可以是任何其他私有或公共域).
应该这样做:如果item是IPv4地址,则应返回地址,否则应将其"转换"(使用dig进行DNS查找)到IPv4地址 - 但它始终返回主机名.
任何的想法?
先谢谢马蒂亚斯
我正在尝试创建具有与其with_items值匹配的值的文件.
我有一个像这样的var列表:
sites:
- domain: google.com
cname: blue
- domain: facebook.com
cname: green
- domain: twitter.com
cname: red
Run Code Online (Sandbox Code Playgroud)
我为此任务中的列表中的每个对象创建单个文件:
- name: Create files
template:
src: file.conf
dest: "/etc/nginx/conf.d/{{item.cname}}.conf"
with_items: "{{sites}}"
Run Code Online (Sandbox Code Playgroud)
这些都很有效.我需要什么,有我的模板文件为它创建一个名为blue.conf并且有google.com它只是.
我尝试了很多变化.我最接近的是:
server {
listen 80;
listen [::]:80;
{% for item in sites %}
server_name {{item.cname}}.es.nodesource.io;
location / {
proxy_pass {{item.domain}};
}
{% endfor %}
}
Run Code Online (Sandbox Code Playgroud)
这将创建单个文件,但每个文件都包含所有域和名称.
我正在使用这种类型的 Ansible 清单编写自动化:
[nodes]
<publicIp1> privateIp=<privateIp1>
<publicIp2> privateIp=<privateIp2>
Run Code Online (Sandbox Code Playgroud)
我这样做是因为有时主机具有不同的公共 IP 与私有 IP(例如,AWS)。
现在,在配置任何主机时,我需要在模板模块的 jinja2 文件中获取一个类似于“privateIp1,privateIp2”的 csv。
最好,我什至不想提及组名“节点”,而只是要求“给我当前主机组的所有成员的所有‘privateIp’库存变量的列表”。<< 假设我的主人只是一个组的成员。
如果不可能,有没有办法引用组名并执行此操作?
找不到任何Google'ing。
有group_vars / all /用于变量。模板有类似的东西吗?我想在多个角色中使用一些模板。
我正在尝试使用从列表中确定的值填充nsswitch.conf。该列表是字符串:
openldap_nsswitch:
- group
- hosts
- passwd
- shadow
Run Code Online (Sandbox Code Playgroud)
如果字符串在列表中,我想在模板中输出一些内容。
passwd: compat {% if openldap_nsswitch contains passwd %}ldap{% endif %}
Run Code Online (Sandbox Code Playgroud)
仅当我的列表包含特定元素时,才能写字符串吗?
我的剧本:
- name: JBoss KeyStore and Truststore passwords will be stored in the password vault
#shell: less "{{ vault }}"
shell: cat "{{ vault }}"
register: vault_contents
tags:
- BW.6.1.1.10
with_items:
- "{{ vault }}"
- debug:
msg: "JBoss config filedoes not contains the word vault"
when: vault_contents.stdout.find('$VAULT') == -1
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 Jinga2 模板通过 ansible 读取多个文件并将输出解析为 stdout 并搜索关键字并报告它。
它失败并出现以下错误:
TASK [testing_roles : debug] **************************************************************************. *****************************************************************
fatal: [d84e4fe137f4]: FAILED! => {"failed": true, "msg": "The conditional check 'vault_contents.stdout.find('$VAULT') == -1' failed.
The error …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ansible设置服务器,并且我想使用此银河角色。
它定义了一个我想自定义的模板,但我不知道如何。
现在,我将角色定义为,requirements.yml并使用以下命令进行安装:
ansible-galaxy install -r requirements.yml
它将角色安装在我的系统上的某个位置。
我尝试通过将文件夹树重新创建到存储剧本的存储库中来进行尝试:
roles
|- ansible-role-passenger
|- templates
|- passenger.j2
Run Code Online (Sandbox Code Playgroud)
但它不起作用。当我运行剧本时,ansible会passenger.j2从银河角色内部使用该文件。
我想我可以在github上派出银河角色,然后根据passenger.j2需要编辑文件,但是我不知道这是否有“更好”的方法:)
我在 ansible 中有一个基于分隔符的分割函数。但只想获取第一次出现的分隔符字符串,其余的作为第二个字符串。
string: "hello=abcd=def=asd"
string1= string.split("=")[0]
string2= string.split("=)[1..n] (This is what i missing)
Run Code Online (Sandbox Code Playgroud)
我如何使用 string.split 在 ansible 中实现此目的?