当我lineinfile在ansible中使用它不是写字',"字符
lineinfile: 'dest=/home/xyz state=present line="CACHES="default""'
它是给予,CACHES=default
但所需的输出是CACHES="default"
怎么做到这一点?
我正在尝试编写一个运行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 …
我有以下目录,它有以下内容
/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) 使用不同参数集运行一个角色的最佳做法是什么?
我需要在一台服务器上多次运行一个应用程序(docker container),每个服务器都有不同的环境变量.
一个变量中的Ansible剧本如何包含另一个剧本?register
例如,将以下寄存器执行的结果tasks/foo.yml中result_of_foo?
tasks:
- include: tasks/foo.yml
- register: result_of_foo
Run Code Online (Sandbox Code Playgroud)
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.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运行.
我正在使用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,
......但我觉得这太过分了.有更简单的方法吗?
这应该很简单.我想创建一个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
寻找一个问题的帮助我一直在努力几个小时.我想迭代一个列表,运行一个命令,为每个命令注册输出,然后在每个唯一寄存器{{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-playbook ×10
ansible ×9
ansible-2.x ×1
bash ×1
docker ×1
jinja2 ×1
postgresql ×1
sudo ×1