小编Mxx*_*Mxx的帖子

Ansible幂等MySQL安装Playbook

我想在AWS上设置MySQL服务器,使用Ansible进行配置管理.我正在使用Amazon的默认AMI(ami-3275ee5b),它yum用于包管理.

当下面的Playbook被执行时,一切顺利.但是当我第二次运行它时,任务Configure the root credentials失败了,因为MySQL的旧密码不再匹配,因为它上次运行这个Playbook时已经更新了.

这使得Playbook非幂等,我不喜欢.我希望能够根据需要多次运行Playbook.

- hosts: staging_mysql
  user: ec2-user
  sudo: yes

  tasks:
    - name: Install MySQL
      action: yum name=$item
      with_items:
        - MySQL-python
        - mysql
        - mysql-server

    - name: Start the MySQL service
      action: service name=mysqld state=started

    - name: Configure the root credentials
      action: command mysqladmin -u root -p $mysql_root_password
Run Code Online (Sandbox Code Playgroud)

什么是解决这个问题的最佳方法,这意味着使Playbook具有幂等性?提前致谢!

mysql command-line amazon-ec2 amazon-web-services ansible

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

Ansible在没有手动加载的情况下不会选择group_vars

在我local.yml能够运行剧本和参考变量group_vars/all但我无法访问其中的变量group_vars/phl-stage.我们假设如下.

ansible-playbook -i phl-stage site.yml
Run Code Online (Sandbox Code Playgroud)

我有一个变量,让我们称之为deploy_path每个环境都不同.我把变量放在里面group_vars/< environment name >.如果我group_vars/phl-stagevars_files其中包含文件,但我会认为组文件会自动加载?

site.yml

- include: local.yml
Run Code Online (Sandbox Code Playgroud)

local.yml

- hosts: 127.0.0.1
  connection: local

  vars_files:
    - "group_vars/perlservers"
    - "group_vars/deploy_list"
Run Code Online (Sandbox Code Playgroud)

group_vars/PHL级

[webservers]
phl-web1
phl-web2

[perlservers]
phl-perl1
phl-perl2

[phl-stage:children]
webservers
perlservers
Run Code Online (Sandbox Code Playgroud)

目录结构:

group_vars
  all
  phl-stage
  phl-prod
site.yml
local.yml
Run Code Online (Sandbox Code Playgroud)

ansible

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

Ansible处理程序不运行多个处理程序任务

我们有一个Ansible角色需要在handlers/main.yml任务文件中运行三个任务,但它只运行第一个任务.如何强制它运行其他两个任务?ignore如果第一个任务失败,我确实有标志.

tasks/main.yml文件看起来像:

- name: openfire | Copy plugins into openfire/plugins
  copy: src={{ srcdir }}/xmpp/{{ item }} dest=${bindir}/openfire/plugins/{{ item }}
  with_items:
   - x.jar
   - y.jar
  sudo: yes
  sudo_user: ${tomcat_user}
  notify: restart openfire

- name: openfire | Copy jars into openfire/lib
  copy: src={{ srcdir }}/xmpp/{{ item }} dest=${bindir}/openfire/lib/{{ item }}
  with_items:
   - a.jar
   - b.jar
  sudo: yes
  sudo_user: ${tomcat_user}
  notify: restart openfire
Run Code Online (Sandbox Code Playgroud)

handlers/main.yml文件看起来像:

- name: restart openfire
  service: name=openfire state=stopped
  ignore_errors: true
  sudo: yes …
Run Code Online (Sandbox Code Playgroud)

handler ansible

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

为环境量身定制ansible角色

我有许多环境,需要定制一堆文本文件才能让mule这样的东西与正确的端点对话.

对于这种环境,这有效:

ansible-playbook test03.yml
Run Code Online (Sandbox Code Playgroud)

环境(来自ansible的观点)之间的唯一区别是./roles/esb/vars/main.yml中包含的信息.

我已经考虑过使用svn为每个环境保留一个vars/main.yml,所以每次我需要配置一个环境时,我会检查角色,然后在运行上面的命令之前检查该环境的vars/main.yml.

对我而言,不是一个优雅的解决方案 我怎么能做得更好?

目录结构

./test03.yml
./roles/esb/vars/main.yml
./roles/esb/tasks/main.yml
./roles/esb/templates/trp.properties.j2
Run Code Online (Sandbox Code Playgroud)

./test03.yml

---
- hosts: test03-esb
  gather_facts: no
  roles:
    - esb
Run Code Online (Sandbox Code Playgroud)

./roles/esb/vars/main.yml

---
  jndiProviderUrl: 'jnp://mqendpoint.company.com:1099'
  trp_endpoint_estask: 'http://tmfendpoint.company.com:8080/tmf/estask'
  trp_endpoint_builderQ: 'jnp://mqendpoint.company.com:1099'
Run Code Online (Sandbox Code Playgroud)

./roles/esb/tasks/main.yml

---
  - name: replace variables in templates
    template: src=trp.properties.j2  dest=/path/to/mule/deploy/conf/trp.properties
Run Code Online (Sandbox Code Playgroud)

./roles/esb/templates/trp.properties.j2

trp.endpoint.estask={{ trp_endpoint_estask }}
trp.endpoint.builderQ={{ trp_endpoint_builderQ }}
Run Code Online (Sandbox Code Playgroud)

roles ansible

13
推荐指数
1
解决办法
7854
查看次数

Ansible with_fileglob正在跳过

我正在整理一个旨在构建网络服务器的Ansible Playbook.但是我在尝试使用时遇到困难,with_fileglob因为Ansible一直在报告它正在跳过nginx vhost文件的副本.

我的脚本看起来像这样:

 - name: Nginx | Copy vhost files
   copy: src={{ item }} dest=/etc/nginx/sites-available owner=root group=root  mode=600
   with_fileglob:
     - "{{ templates_dir }}/nginx/sites-available/*"  
   notify
   - nginx-restart:
Run Code Online (Sandbox Code Playgroud)

{{ templates }}已在别处定义为角色/公共/模板.在这个目录中,我有一个名为webserver1的文件,我希望Ansible可以复制到该文件中/etc/nginx/sites-available/

我发现其他人在讨论这个问题,但没有任何回复帮助我解决这个问题.为什么Ansible会跳过文件?

编辑:我应该指出我想使用with_fileglob(而不是直接复制),因为我希望将来迭代其他虚拟主机.

ansible

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

Ansible Windows客户端或主机与Ansible Linux服务器?可能?

我正在Ansible为我的项目使用一些基础设施管理问题.我使用Linux客户端实现了这项任务,比如说从Ansible服务器复制bin文件并将其安装在客户机上.这涉及我的剧本中的任务,使用正常的Linux命令,如ssh,scp,./ bin等,

现在我想在Windows客户端中实现相同的功能.我找不到任何好的文档来试试.如果你们中的任何人尝试过将Ansible与Windows客户端一起使用,那么如果您可以分享程序或原型或任何信息来开始并进一步解决我的问题,那将会很棒.

windows client infrastructure ansible

10
推荐指数
2
解决办法
3897
查看次数

Ansible-vault错误与"奇长字符串"

我跑Ansible 1.8.2.我在另一个系统上创建了一个拱形文件.在该系统上它没有任何问题.但是,当我在本地系统上运行它时,我收到以下错误:

$» ansible-vault --debug view vars/vaulted_vars.yml
Vault password:
Traceback (most recent call last):
  File "/usr/bin/ansible-vault", line 225, in main
    fn(args, options, parser)
  File "/usr/bin/ansible-vault", line 172, in execute_view
    this_editor.view_file()
  File "/usr/lib/python2.7/site-packages/ansible/utils/vault.py", line 280, in view_file
    dec_data = this_vault.decrypt(tmpdata)
  File "/usr/lib/python2.7/site-packages/ansible/utils/vault.py", line 136, in decrypt
    data = this_cipher.decrypt(data, self.password)
  File "/usr/lib/python2.7/site-packages/ansible/utils/vault.py", line 545, in decrypt
    data = unhexlify(data)
TypeError: Odd-length string

ERROR: Odd-length string
Run Code Online (Sandbox Code Playgroud)

我试图手动输入密码或复制粘贴它,但错误仍然发生.

这里发生了什么以及如何解决此错误?

ansible

8
推荐指数
1
解决办法
6779
查看次数

ansible 1.6>在with_items循环中使用with_first_found?

是否可以with_first_foundwith_items循环中使用,例如:

- template:
    dest=/foo/{{ item.name }}-{{ item.branch | default('master') }}
    src={{ item }}
  with_first_found:
    - {{ item.name }}-{{ item.branch | default('master') }}
    - {{ item.name }}.j2
    - apache_site.j2
  with_items: apache_sites
Run Code Online (Sandbox Code Playgroud)

似乎无法使其正常使用with_nested.

ansible ansible-playbook

7
推荐指数
1
解决办法
2332
查看次数

如何使用ansible在目标上提取war文件

我正在使用Ansible的unarchive模块,但似乎并没有提取war文件.它适用于.tar.

还有一个开关setype:"键入SELinux文件上下文的一部分",我不确定是否可以用来将文件类型设置为war.

我试过这个:

-name: Unpack war
 unarchive: src=~/wars/mywar.war
            dest=/tmp/deploy
            setype=war
            copy=no
Run Code Online (Sandbox Code Playgroud)

它给出了错误: msg: Failed to find handler to unarchive. Make sure the required command to extract the file is installed.

当我不使用'setype'时,我再次得到完全相同的错误.

如何使用Ansible提取war文件?

ubuntu ansible

6
推荐指数
1
解决办法
9003
查看次数

Android应用如何在未经许可的情况下访问铃声?

我有Android 5.0.1(API级别21).

我正在使用NewRelic应用程序版本1.9.3.(如果需要,我可以提供此版本的apk).

从更新1.9.4开始READ_EXTERNAL_STORAGE,他们的应用程序开始要求访问,即" 照片/媒体/文件 "权限.

当我联系该公司以获取此许可要求的解释时,他们表示这是" 必须 "访问存储在外部SD卡上的铃声/通知.但是,我一直在我的可移动SD卡上保留我的自定义铃声和通知,我一直能够在这个应用程序中使用它们,而无需要求此权限.

如果没有此权限,此应用程序如何才能访问我的铃声?或者该公司对此许可的解释是否不合理?

permissions android

6
推荐指数
1
解决办法
1156
查看次数