标签: ansible-playbook

Ansible - 将注册变量保存到文件

如何将已注册的变量保存到文件中?我从教程中得到了这个:

- 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 ansible-playbook

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

ansible ssh提示known_hosts问题

我正在运行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)

ssh command-prompt hosts-file ansible ansible-playbook

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

如何使用ansible vault上传加密文件?

有没有人有一个使用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)

ansible ansible-playbook

37
推荐指数
7
解决办法
3万
查看次数

Ansible.快速查看语法的方法?

有没有办法检查playbook语法和变量?

我正在尝试干运行( - 检查),但由于某些原因,它的工作速度非常慢.看起来它试图执行操作而不是只检查语法

我想省略这样的错误:

..."msg": "AnsibleUndefinedVariable: ERROR! 'application_name' is undefined"}
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook

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

访问ansible playbook中的库存主机变量

我正在使用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)

ansible ansible-playbook ansible-2.x ansible-inventory

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

在特定服务器组上运行Ansible Playbook

我有以下/ etc/ansible/hosts:

[ESNodes]
isk-vsrv643
isk-vsrv644
isk-vsrv645

[PerfSetup]
isk-dsrv613
isk-dsrv614
Run Code Online (Sandbox Code Playgroud)

我知道有一个选项可以使用-l在特定主机上运行一个剧本吗?有没有办法只在PerfSetup组上运行一个剧本?

ansible ansible-playbook

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

如果某些条件失败,则中止执行剩余任务

如果某些条件失败,我想中止剩余任务的执行.并显示正确的错误消息.

因此,我没有跳过剩余的任务,而是希望显示错误消息并停止执行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)

ansible ansible-playbook

35
推荐指数
3
解决办法
6万
查看次数

PostgreSQL与Ansible失败的对等身份验证

我在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)

authentication postgresql freebsd ansible ansible-playbook

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

检查Ansible是否存在服务

我有一个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)

centos ansible ansible-playbook

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

连接变量字符串的正确方法

我需要从其他变量的内容创建新变量.目前我正在使用这样的东西:

- command: echo "{{ var1 }}-{{ var2 }}-{{ var3 }}"
  register: newvar
Run Code Online (Sandbox Code Playgroud)

问题是:

  • 用法{{ var1 }}...{{ varN }}带来太长的字符串和非常难看的代码.
  • 使用{{ newvar.stdout }}有点好但令人困惑.
  • set_fact模块的使用在运行之间缓存事实.这对我来说不合适.

还有其他解决方案吗?

ansible ansible-playbook

35
推荐指数
3
解决办法
7万
查看次数