标签: ansible-playbook

在ansible lineinfile中引用

当我lineinfile在ansible中使用它不是写字',"字符 lineinfile: 'dest=/home/xyz state=present line="CACHES="default""'

它是给予,CACHES=default 但所需的输出是CACHES="default"

怎么做到这一点?

ansible ansible-playbook

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

在`with_items`任务上使用`failed_when`取决于返回码

我正在尝试编写一个运行ldapmodify语句列表的任务,并且如果任何返回代码不是0或68(对象已经存在),则只希望它失败:

- name: add needed LDAP infrastructure
  action: command ldapmodify -x -D '{{ ADMINDN }}' -w '{{ LDAPPW }}' -H {{ LDAPURI }} -c -f {{ item }}
  register: result
  failed_when: "result.results | rejectattr('rc', 'sameas', 0) | rejectattr('rc', 'sameas', 68) | list | length > 0"
  # ignore_errors: true
  with_items:
    - a.ldif
    - b.ldif
Run Code Online (Sandbox Code Playgroud)

不起作用,产生错误:

error while evaluating conditional: result.results | rejectattr('rc', 'sameas', 0) | rejectattr('rc', 'sameas', 68) | list | length > 0
Run Code Online (Sandbox Code Playgroud)

但是,如果我评论failed_when并使用ignore_errors,则以下任务会产生正确的结果.虽然我可以使用此解决方法来解决我的问题,但我想了解为什么failed_when …

ansible ansible-playbook

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

删除目录中包含特定名称的所有文件

我有以下目录,它有以下内容

/tmp/test/file1.txt
/tmp/test/file1.txt.backup
/tmp/test/mywords.csv

How do I use the file component to just remove file1* files??
Run Code Online (Sandbox Code Playgroud)

ansible-playbook

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

Ansible,使用不同的参数集多次运行角色

使用不同参数集运行一个角色的最佳做法是什么?

我需要在一台服务器上多次运行一个应用程序(docker container),每个服务器都有不同的环境变量.

ansible docker ansible-playbook

15
推荐指数
3
解决办法
7980
查看次数

Ansible如何在变量中"注册"包含剧本的结果?

一个变量中的Ansible剧本如何包含另一个剧本?register

例如,将以下寄存器执行的结果tasks/foo.ymlresult_of_foo

tasks:
  - include: tasks/foo.yml
  - register: result_of_foo
Run Code Online (Sandbox Code Playgroud)

Ansible如何记录任务序列的结果?

ansible ansible-playbook

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

Ansible:理解复合条件语句时

考虑下面这个简单的ansible剧本和相关的输出.为什么任务5被执行?这些任务是针对debian运行的.任务1按预期失败.那么,为什么和'ansible_lsb.major_release | int <14'一起使它成为真的呢?这是否与运算符优先级有关?

-JK

---
- name: These tests run against debian
  hosts: frontend001
  vars:
    - bcbio_dir: /mnt/bcbio
    - is_ubuntu: "'{{ansible_distribution}}' == 'Ubuntu'"
    - is_debian: "'{{ansible_distribution}}' == 'Debian'"
  tasks:
    - name: 1. Expect skip because test is_ubuntu
      debug: msg="ansible distribution - {{ansible_distribution}}, release - {{ansible_distribution_release}}, {{ ansible_lsb.major_release }}"
      when: is_ubuntu 

    - name: 2. Expect to print msg because test is_debian
      debug: msg="ansible distribution - {{ansible_distribution}}, release - {{ansible_distribution_release}}, {{ ansible_lsb.major_release }}"
      when: is_debian

    - name: 3. Expect to print …
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook

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

Ansible 1.9.1'成为'和sudo问题

我正在尝试运行一个非常简单的剧本来测试一个新的Ansible设置.

在我的ansible.cfg文件中使用'new'Ansible Privilege Escalation配置选项时:

[defaults]

host_key_checking=false

log_path=./logs/ansible.log
executable=/bin/bash

#callback_plugins=./lib/callback_plugins

######

[privilege_escalation]
become=True
become_method='sudo'
become_user='tstuser01'
become_ask_pass=False

[ssh_connection]
scp_if_ssh=True
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

fatal: [webserver1.local] => Internal Error: this module does not support running commands via 'sudo'

FATAL: all hosts have already failed -- aborting
Run Code Online (Sandbox Code Playgroud)

剧本也很简单:

# Checks the hosts provisioned by midrange
---
- name: Test su connecting as current user
  hosts: all
  gather_facts: no
  tasks:
  - name: "sudo to configued user -- tstuser01"
    #action: ping
    command: /usr/bin/whoami
Run Code Online (Sandbox Code Playgroud)

我不确定Ansible 1.9.1中是否有什么东西坏了,或者我做错了什么.当然,Ansible中的'command'模块允许将命令作为sudo运行.

bash sudo ansible ansible-playbook

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

在Ansible/Jinja2中设置var的case语句

我正在使用Ansible和Jinja2模板,这是一个我无法在Ansible的文档中找到解决方案或浏览Jinja2示例的场景.这是我想在Ansible中实现的逻辑:

if {{ existing_ansible_var }} == "string1"
  new_ansible_var = "a"
else if {{ existing_ansible_var }} == "string2"
  new_ansible_var = "b"
<...>
else
  new_ansible_var = ""
Run Code Online (Sandbox Code Playgroud)

我可以通过组合几种技术来实现这一点,这里的变量赋值:在jinja中设置变量,条件比较在这里:http://jinja.pocoo.org/docs/dev/templates/#if-expression,以及默认值在此过滤:https://docs.ansible.com/playbooks_filters.html#defaulting-undefined-variables,

......但我觉得这太过分了.有更简单的方法吗?

jinja2 ansible ansible-playbook

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

Ansible创建可以访问所有表的postgresql用户?

这应该很简单.我想创建一个Ansible语句来创建一个Postgres用户,该用户具有对特定数据库的连接权限,并为该特定数据库中的所有表选择/插入/更新/删除权限.我尝试了以下方法:

  - name: Create postgres user for my app
    become: yes
    become_user: postgres
    postgresql_user:
      db: "mydatabase"
      name: "myappuser"
      password: "supersecretpassword"
      priv: CONNECT/ALL:SELECT,INSERT,UPDATE,DELETE
Run Code Online (Sandbox Code Playgroud)

我明白了 relation \"ALL\" does not exist

如果我删除ALL:,我得到Invalid privs specified for database: INSERT UPDATE SELECT DELETE

postgresql ansible ansible-playbook

14
推荐指数
1
解决办法
6337
查看次数

使用with_items迭代并注册

寻找一个问题的帮助我一直在努力几个小时.我想迭代一个列表,运行一个命令,为每个命令注册输出,然后在每个唯一寄存器{{someregister}}上进行调试迭代.stdout

例如,以下代码将吐出 "msg":"1""msg":"2"

---

- hosts: localhost
  gather_facts: false

  vars:
    numbers:
      - name: "first"
        int: "1"
      - name: "second"
        int: "2"

  tasks:

    - name: Register output
      command: "/bin/echo {{ item.int }}"
      register: result
      with_items: "{{ numbers }}"

    - debug: msg={{ item.stdout }}
      with_items: "{{ result.results }}"
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试在使用with_list命名的寄存器变量中捕获命令的输出,则无法访问列表或其中的元素.例如,将代码稍微改为:

---

- hosts: localhost
  gather_facts: false

  vars:
    numbers:
      - name: "first"
        int: "1"
      - name: "second"
        int: "2"

  tasks:

    - name: Register output
      command: "/bin/echo {{ item.int }}"
      register: "{{ item.name …
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook ansible-2.x

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

标签 统计

ansible-playbook ×10

ansible ×9

ansible-2.x ×1

bash ×1

docker ×1

jinja2 ×1

postgresql ×1

sudo ×1