如何将已注册的变量保存到文件中?我从教程中得到了这个:
- hosts: web_servers
tasks:
- shell: /usr/bin/foo
register: foo_result
ignore_errors: True
- shell: /usr/bin/bar
when: foo_result.rc == 5
Run Code Online (Sandbox Code Playgroud)
如何将foo_result变量保存到文件中,例如foo_result.log使用ansible?
我正在运行Ansible playbook,它在一台机器上工作正常.
在我第一次尝试的新机器上,我收到以下错误.
17:04:34 PLAY [appservers] *************************************************************
17:04:34
17:04:34 GATHERING FACTS ***************************************************************
17:04:34 fatal: [server02.cit.product-ref.dev] => {'msg': "FAILED: (22, 'Invalid argument')", 'failed': True}
17:04:34 fatal: [server01.cit.product-ref.dev] => {'msg': "FAILED: (22, 'Invalid argument')", 'failed': True}
17:04:34
17:04:34 TASK: [common | remove old ansible-tmp-*] *************************************
17:04:34 FATAL: no hosts matched or all hosts have already failed -- aborting
17:04:34
17:04:34
17:04:34 PLAY RECAP ********************************************************************
17:04:34 to retry, use: --limit @/var/lib/jenkins/site.retry
17:04:34
17:04:34 server01.cit.product-ref.dev : ok=0 changed=0 unreachable=1 failed=0
17:04:34 server02.cit.product-ref.dev : ok=0 …Run Code Online (Sandbox Code Playgroud) 有没有人有一个使用ansible-vault解密和上传文件的例子.
我正在考虑在源代码管理中保持我的ssl证书加密.
看起来像下面的东西应该工作.
---
- name: upload ssl crt
copy: src=../../vault/encrypted.crt dest=/usr/local/etc/ssl/domain.crt
Run Code Online (Sandbox Code Playgroud) 有没有办法检查playbook语法和变量?
我正在尝试干运行( - 检查),但由于某些原因,它的工作速度非常慢.看起来它试图执行操作而不是只检查语法
我想省略这样的错误:
..."msg": "AnsibleUndefinedVariable: ERROR! 'application_name' is undefined"}
Run Code Online (Sandbox Code Playgroud) 我正在使用ansible 2.1.我有以下清单主机文件和一个需要访问主机文件变量的播放器调用的角色.有关如何访问它的任何想法(目前收到错误):
主机文件
[test1]
test-1 ansible_ssh_host=abc.def.ghi.jkl ansible_ssh_port=1212
[test2]
test2-1 ansible_ssh_host=abc.def.ghi.mno ansible_ssh_port=1212
[test3]
test3-1 ansible_ssh_host=abc.def.ghi.pqr ansible_ssh_port=1212
test3-2 ansible_ssh_host=abc.def.ghi.stu ansible_ssh_port=1212
[all:children]
test1
test2
test3
Run Code Online (Sandbox Code Playgroud)
角色 我试图访问在以下时尚的作用:
{{ hostvars.ansible_ssh_host }}
Run Code Online (Sandbox Code Playgroud)
&&
{{ hostvars.test1.ansible_ssh_host }}
Run Code Online (Sandbox Code Playgroud)
我试图访问test1部分中的ansible_ssh_host.
错误
fatal: [localhost]: FAILED! => {"failed": true, "msg": "'ansible.vars.hostvars.HostVars object' has no attribute 'ansible'"}
Run Code Online (Sandbox Code Playgroud) 我有以下/ etc/ansible/hosts:
[ESNodes]
isk-vsrv643
isk-vsrv644
isk-vsrv645
[PerfSetup]
isk-dsrv613
isk-dsrv614
Run Code Online (Sandbox Code Playgroud)
我知道有一个选项可以使用-l在特定主机上运行一个剧本吗?有没有办法只在PerfSetup组上运行一个剧本?
如果某些条件失败,我想中止剩余任务的执行.并显示正确的错误消息.
因此,我没有跳过剩余的任务,而是希望显示错误消息并停止执行ansible playbook.
让我们说我在命令之下运行
$ ansible-playbook playbook.yml -e "param1=value1 param2=value"
Run Code Online (Sandbox Code Playgroud)
我的剧本看起来像这样: -
playbook.yml: -
---
- hosts: local
user: roop
gather_facts: no
vars: {param1: "", param2: ""}
tasks:
#check whether param1 defined
- name: 'Check for valid param1'
shell: echo {{ param1 }}
register: isValidParam1
when: param1 !=""
#check if param1 is null or invalid
- name: 'check if param1 is null or invalid'
debug: msg="Please enter correct param1"
when: param1 == ""
#check whether param2 defined
- name: 'Check …Run Code Online (Sandbox Code Playgroud) 我在FreeBSD上运行PostgreSQL 9.3.FreeBSD pgsql用作PostgreSQL的默认系统用户.我/usr/local/pgsql/data/pg_hba.conf看起来像这样:
# TYPE DATABASE USER ADDRESS METHOD
local all pgsql peer
local all all md5
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
Run Code Online (Sandbox Code Playgroud)
使用此配置,我可以在pgsql没有密码的情况下连接到数据库.
$ su pgsql
$ psql template1
template1=# \l
List of databases
...
Run Code Online (Sandbox Code Playgroud)
这按预期工作.
在远程计算机上,我有一个Ansible任务在FreeBSD服务器上创建数据库.
- name: Create the postgresql database
postgresql_db: name=mydatabase login_user=pgsql
Run Code Online (Sandbox Code Playgroud)
执行此任务失败并显示错误Peer authentication failed for user "pgsql".
PLAY [web] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [host.example.org]
TASK: [database | Create the postgresql database] ***************************** …Run Code Online (Sandbox Code Playgroud) 我有一个Ansible手册,用于将Java应用程序部署为init.d守护程序.
作为Ansible和Linux的初学者,我很难根据主机的状态有条件地在主机上执行任务.
也就是说,我有一些主机已经提供服务,并且在我做任何其他事情之前我想要停止它.然后可能会有新主机,但尚未提供服务.所以我不能简单地使用service: name={{service_name}} state=stopped,因为这将在新主机上失败.
我怎么能做到这一点?这是我到目前为止所拥有的:
- name: Check if Service Exists
shell: "if chkconfig --list | grep -q my_service; then echo true; else echo false; fi;"
register: service_exists
# This should only execute on hosts where the service is present
- name: Stop Service
service: name={{service_name}} state=stopped
when: service_exists
register: service_stopped
# This too
- name: Remove Old App Folder
command: rm -rf {{app_target_folder}}
when: service_exists
# This should be executed on all hosts, but only after …Run Code Online (Sandbox Code Playgroud) 我需要从其他变量的内容创建新变量.目前我正在使用这样的东西:
- command: echo "{{ var1 }}-{{ var2 }}-{{ var3 }}"
register: newvar
Run Code Online (Sandbox Code Playgroud)
问题是:
{{ var1 }}...{{ varN }}带来太长的字符串和非常难看的代码.{{ newvar.stdout }}有点好但令人困惑.set_fact模块的使用在运行之间缓存事实.这对我来说不合适.还有其他解决方案吗?
ansible ×10
ansible-playbook ×10
ansible-2.x ×1
centos ×1
freebsd ×1
hosts-file ×1
postgresql ×1
ssh ×1