小编tec*_*raf的帖子

如何在Ansible中执行任务之前强制处理程序运行?

我有一个应该在指定的IP上配置的剧本,而不是连接到这个应用程序来配置里面的东西.

我遇到了一个问题:我需要在应用配置中更改任何内容后重新启动应用程序,如果我没有重新启动应用程序,则连接失败(没有连接,因为应用程序对新配置的新配置一无所知我'我试图访问).

我目前的剧本:

tasks:
- name: Configure app
  template: src=app.conf.j2 dest=/etc/app.conf
  notify: restart app

- name: Change data in app
  configure_app: host={{new_ip}} data={{data}}

handlers:
- name: restart app
  service: name=app state=restarted
Run Code Online (Sandbox Code Playgroud)

我需要强制处理程序configure_app在执行'更改应用程序中的数据'之前运行.

ansible ansible-handlers

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

重新加载Ansible的动态库存

我正在使用Ansible来设置EC2实例并部署应用程序.有一个主机脚本,它收集标签相关的服务器和组信息.我想把这些动作作为一个单一的剧本来运行,所以

  1. 如果需要,将创建新实例
  2. 主机脚本加载库存(包括服务器的事实)
  3. 部署剧本有效

但是,如果在播放期间创建/更新了服务器,则提前加载库存,因此没有服务器/组数据.我可以1)单独提供和部署剧本2)使用add_host技巧在服务器更新时模拟动态库存,但这些方法存在缺陷.

我可以强制Ansible重新加载库存吗?我的测试文件是: hosts脚本:

#!/bin/sh
echo `date` >> log.log
echo "{\"standalone\":[\"localhost\"]}"
Run Code Online (Sandbox Code Playgroud)

样品playbook.yml:

---
- hosts: all
  tasks:
    - name: show inventory_hostname
      command: echo {{ inventory_hostname }}
Run Code Online (Sandbox Code Playgroud)

我运行它ansible-playbook -i hosts playbook.yml -v,看到两个运行:

$> cat log.log
Thu Mar 12 09:43:16 SAMT 2015
Thu Mar 12 09:43:16 SAMT 2015
Run Code Online (Sandbox Code Playgroud)

但是我还没有找到加倍它的命令.

ansible ansible-inventory

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

Ansible - 收集事实之前的行动

收集事实之前,有谁知道如何做某事(比如等待受管节点的端口/启动)?我知道我可以收集事实

gather_facts: no
Run Code Online (Sandbox Code Playgroud)

THEN等港口,但如果我需要的事实,同时也还需要等待,直到节点启动时?

ansible ansible-facts

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

为什么Ansible显示"ERROR!在任务中未检测到任何操作"错误?

Ansible显示错误:

错误!任务中未检测到任何操作.这通常表示拼写错误的模块名称或模块路径不正确.

怎么了?


确切的记录是:

ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.

The error appears to have been in 'playbook.yml': line 10, column 3, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

---
- name: My task name
  ^ here
Run Code Online (Sandbox Code Playgroud)

ansible

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

如何使用ansible-vault 2.3.0解密字符串

我一直在等ansible 2.3,因为它将引入encrypt_string功能.

不幸的是,我不确定如何读取加密的字符串.

我确实尝试过decrypt_string,解密(文件),查看(文件),但没有任何作用.

cat test.yml 
---
test: !vault |
     $ANSIBLE_VAULT;1.1;AES256
     37366638363362303836383335623066343562666662386233306537333232396637346463376430
     3664323265333036663736383837326263376637616466610a383430623562633235616531303861
     66313432303063343230613665323930386138613334303839626131373033656463303736366166
     6635346135636437360a313031376566303238303835353364313434363163343066363932346165
     6136
Run Code Online (Sandbox Code Playgroud)

我打算的错误是 ERROR! input is not vault encrypted data for test.yml

如何解密字符串,以便我知道它的价值是什么而不需要运行游戏?

ansible ansible-vault

42
推荐指数
10
解决办法
3万
查看次数

SSL握手失败 - 一个verisign链证书 - 包含两个CA签名证书和一个自签名证书

我遇到了问题并尝试调试它.我们购买了Verisign证书.当我们使用时:

openssl> s_client -connect myweb.com:443 -showcerts
Run Code Online (Sandbox Code Playgroud)

SSL握手永远不会完成,最后我们会看到错误:

Verify return code: 19 (self signed certificate in certificate chain)
Run Code Online (Sandbox Code Playgroud)

它显示3个---BEGIN/END CERTIFICATE---标签.链中的两个证书是Verisign签署的,但其中一个是自签名的.

  1. 如果有人可以解释这个自签名证书如何出现在CA签名证书中?

  2. 这个错误是否19 (self signed certificate in certificate chain)良性?如果没有,可能是什么原因造成的?

  3. 客户端在受信任存储中具有CA证书,但自签名证书没有任何内容.你认为这可能导致问题吗?如果是,我该怎么做:

    1. 如何从链证书中删除自签名证书,只留下链中的2个CA签名证书?
    2. 在客户端信任存储上添加此自签名证书?

ssl openssl handshake

40
推荐指数
3
解决办法
12万
查看次数

在Docker中安装MySQL失败,并显示错误消息"无法通过套接字连接到本地MySQL服务器"

我正在尝试在docker容器中安装mysql,尝试从github的各种图像,似乎他们都设法成功安装mysql但是当我尝试运行mysql时它给出了一个错误:

ERROR 2002(HY000):无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器

系统规格:

  • Ubuntu 12,04在AWS上
  • Docker 0.10.0

我到目前为止尝试的包:

mysql docker

36
推荐指数
10
解决办法
7万
查看次数

访问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安装Bundler gem

我正在尝试使用Ansible在我的VPS上安装Bundler.

我已经设置了rbenv,全局ruby是2.1.0.

如果我以root身份SSH到服务器并运行gem install bundler,它将完美安装.

我已经尝试了以下三种使用Ansible来安装Bundler gem的方法,并且这三种方法都没有产生任何错误,但是当我在SSH中运行时gem list,Bundler无处可见.

尝试1:

---
- name: Install Bundler
  shell: gem install bundler
Run Code Online (Sandbox Code Playgroud)

尝试2:

---
- name: Install Bundler
  shell: gem install bundler
Run Code Online (Sandbox Code Playgroud)

尝试3:

---
- name: Install Bundler
  gem: name=bundler
       state=latest
Run Code Online (Sandbox Code Playgroud)

我也尝试了最后的尝试,user_install=yesuser_install=no没有做任何改变.

有什么想法我怎么能通过Ansible正确安装Bundler?

我已经在这方面工作了一段时间,我安装了1个ruby版本:2.1.0和ahve发现rbenv的shims目录不包含垫片bundle.

应该有垫片bundle吗?我只是感到困惑,为什么capistrano无法找到bundle命令,因为它在我运行sudo gem list时列出但不是在我跑的时候gem list

root@weepingangel:/usr/local/rbenv/shims# echo $PATH
/usr/local/rbenv/shims:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
root@weepingangel:/usr/local/rbenv/shims# gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 2.2.0
  - RUBY VERSION: 2.1.0 (2013-12-25 …
Run Code Online (Sandbox Code Playgroud)

ruby ubuntu rubygems bundler ansible

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

是否可以在YAML中编写Ansible主机/库存文件?

在最佳实践页面中,有一个hosts.yml用于主机文件的示例:

基于YAML的主机文件

但是,在文档中,我只能找到用于编写hosts文件的INI语法.

YAML中库存文件的语法是什么?

ansible ansible-inventory

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