标签: ansible-playbook

Ansible:检查变量是否等于字符串

我在命令行上传递了一个ansible变量:

ansible-playbook -e environment=staging ansible/make_server.yml
Run Code Online (Sandbox Code Playgroud)

我想在我的角色中加载一些变量,这取决于环境的价值.我尝试了很多不同的方法,例如:

- include_vars: staging_vars.yml
  when: environment | staging
Run Code Online (Sandbox Code Playgroud)

- include_vars: staging_vars.yml
  when: "{{environment}} == "staging"
Run Code Online (Sandbox Code Playgroud)

- include_vars: staging_vars.yml
  when: "{{environment}} | match('staging')"
Run Code Online (Sandbox Code Playgroud)

但似乎没什么用.我该怎么做呢?

细节:

  • 我正在使用ansible 1.7.2

variables conditional ansible ansible-playbook

26
推荐指数
1
解决办法
5万
查看次数

如何检查文件是否已在ansible中下载

wget从ansible 下载文件.

  - name: Download Solr
    shell: chdir={{project_root}}/solr wget http://mirror.mel.bkb.net.au/pub/apache/lucene/solr/4.7.0/solr-4.7.0.zip
Run Code Online (Sandbox Code Playgroud)

但如果该位置不存在zip文件,我只想这样做.目前系统每次都下载它.

ansible ansible-playbook

25
推荐指数
5
解决办法
3万
查看次数

如何在Ansible游戏中列出所有当前目标主机

我正在运行Ansible游戏,并希望列出它所针对的所有主机.Ansible文档提到这是可能的,但他们的方法似乎不适用于复杂的目标群体(针对主机:web_servers:&data_center_primary)

我确信这是可行的,但似乎无法找到任何进一步的文档.所有当前目标主机都有变量吗?

ansible ansible-playbook

25
推荐指数
2
解决办法
5万
查看次数

将列表变量附加到Ansible中的另一个列表

是否可以将变量列表附加到ansible的静态列表中?

我可以将整个列表定义为变量:

my_list:
  - 1
  - 2
  - 3
Run Code Online (Sandbox Code Playgroud)

然后在剧本中使用它

something: {{my_list}}
Run Code Online (Sandbox Code Playgroud)

但我似乎无法找到如何做到这一点(伪代码):

list_to_append: 
  - 3
  - 4
Run Code Online (Sandbox Code Playgroud)

然后在剧本中:

something:
  - 1
  - 2
  - {{append: list_to_append}}
Run Code Online (Sandbox Code Playgroud)

如果这实际上是不可能的,你会对我的用例有什么建议?

我有一个参数中的项目列表,但其中一些是optional并且应该可以使用变量进行修改.

换句话说:我有default values+ optional values可以或不可以通过变量添加.

optional values事先不知道,我可以添加1,2或其中的100个,所以它们不是静态的.

我基本上有一个默认静态列表++一个可附加的可配置变量列表.

编辑:我发现了这个,但它只适用于with_items,我需要在普通参数中:

  with_flattened:
   - "{{list1}}"
   - "{{list2}}"
Run Code Online (Sandbox Code Playgroud)

jinja2 ansible ansible-playbook

25
推荐指数
1
解决办法
4万
查看次数

ansible - 检查*local*machine上是否存在文件

我有一种情况需要检查本地机器上的文件状态(我将调用的文件ansible-playbook ...).

如果存在由用户创建的文件,则需要将其复制到远程主机.如果它不存在,则没有远程主机需要它.

我知道我做过的事情:

- name: Check for ~/.blah/config
  stat: path=/home/ubuntu/.blah/config
  register: stat_blah_config

- name: Do something with blah config
  shell: ~/do_something_with_config.sh
  when: stat_aws_config.stat.exists == true
Run Code Online (Sandbox Code Playgroud)

但这只有在远程存在文件时才有效.有没有办法有条件地执行任务(如副本)只有当文件存在于本地时(stat第一个任务在本地而不是远程执行),如果没有,则无声地失败?我不确定ansible是否具有这种功能,但它会很有用.

ansible ansible-playbook

25
推荐指数
2
解决办法
2万
查看次数

Ansible:如果不存在则插入行

我正在尝试使用ansible在属性文件中插入一行.我想添加一些属性,如果它不存在,但如果文件中已经存在这样的属性,则不要替换它.

我加入了我的ansible角色

- name: add couchbase host to properties
  lineinfile: dest=/database.properties regexp="^couchbase.host"  line="couchbase.host=127.0.0.1"
Run Code Online (Sandbox Code Playgroud)

但是,如果属性值已存在于文件中,则会将属性值替换回127.0.0.1.

我做错了什么?

ansible ansible-playbook

24
推荐指数
3
解决办法
4万
查看次数

是否with_fileglob在ansible中远程工作?

是否with_fileglob在ansible远程工作?

主要是我想要使用类似的东西with_fileglob但是会使远程/目标机器上的文件全局化,而不是运行ansible的文件.

ansible ansible-playbook

24
推荐指数
2
解决办法
1万
查看次数

Ansible:仅在未定义时设置变量

我想将一个ansible变量设置为某个默认值,但前提是该变量未定义.否则我想保持不变.

我尝试了这两种方法,它们都产生递归循环:

namespace: "{{namespace|default(default_namespace)}}"
namespace: "{% if namespace is defined %}{{namespace}}{% else %}{{default_namespace}}{% endif %}"
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook

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

如何将数组分配给Ansible-Playbook中的变量

在剧本中我得到了以下代码:

---
- hosts: db
  vars:
    postgresql_ext_install_contrib: yes
    postgresql_pg_hba_passwd_hosts: ['10.129.181.241/32']
...
Run Code Online (Sandbox Code Playgroud)

我想postgresql_pg_hba_passwd_hosts我所有的webservers私有ips替换值.我知道我能得到这样的价值观这样一个模板:

{% for host in groups['web'] %}
   {{ hostvars[host]['ansible_eth1']['ipv4']['address'] }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

将此循环的结果分配给剧本中的变量的最简单/最简单的方法是什么?或者,有没有更好的方法来收集这些信息?我应该把这个循环放在模板中吗?

额外的挑战:我必须添加/32到每个条目.

ansible ansible-playbook

23
推荐指数
3
解决办法
5万
查看次数

条款时使用True False和Ansible

我遇到了最愚蠢的问题.我无法弄清楚如何在Ansible 2.2任务文件中测试布尔值.

vars/main.yml,我有:

destroy: false
Run Code Online (Sandbox Code Playgroud)

在剧本中,我有:

roles: 
  - {'role': 'vmdeploy','destroy': true}
Run Code Online (Sandbox Code Playgroud)

在任务文件中,我有以下内容:

- include: "create.yml"
  when: "{{ destroy|bool }} == 'false'"
Run Code Online (Sandbox Code Playgroud)

我尝试了以下各种组合:

when: "{{ destroy|bool }} == false"
when: "{{ destroy|bool }} == 'false'"
when: "{{ destroy|bool  == false}}"
when: "{{ destroy  == false}}"
when: "{{ destroy  == 'false'}}"
when: destroy|bool  == false
when: destroy|bool  == 'false'
when: not destroy|bool
Run Code Online (Sandbox Code Playgroud)

在以上所有情况下,我仍然得到:

statically included: .../vmdeploy/tasks/create.yml
Run Code Online (Sandbox Code Playgroud)

调试输出:

- debug:
    msg: "{{ destroy }}"

---

ok: [atlcicd009] => {
"msg": true …
Run Code Online (Sandbox Code Playgroud)

boolean ansible ansible-playbook ansible-2.x

23
推荐指数
4
解决办法
5万
查看次数