小编tlo*_*tlo的帖子

如何检测Ansible playbook在执行期间挂起的原因

我写的一些任务开始并且永远不会结束.Ansible不提供任何可以解释这一点的错误或日志,即使使用-vvvv选项也是如此.Playbook只是挂起,过了几个小时不会改变任何东西.

当我尝试手动运行我的任务时(通过SSH输入命令)一切都很好.

挂起的示例任务:

- name: apt upgrade
  shell: apt-get upgrade
Run Code Online (Sandbox Code Playgroud)

有没有办法看到stdout和stderr?我试过了:

- name: apt upgrade
  shell: apt-get upgrade
  register: hello
- debug: msg="{{ hello.stdout }}"
- debug: msg="{{ hello.stderr }}"
Run Code Online (Sandbox Code Playgroud)

但没有改变.

我确实有必要的权限,我传递了正确的sudo密码 - 其他需要sudo正确执行的任务.

deployment ubuntu provisioning ansible ansible-playbook

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

Ansible Playbook运行Shell命令

我最近潜入了Ansible的一台服务器,发现它真的很有趣,省时省力.我正在运行一个Ubuntu专用服务器,并配置了许多用Python编写的Web应用程序和一些用PHP编写的Web应用程序.对于Python,我使用uwsgi作为HTTP网关.我编写了shell脚本来启动/重启几个进程,以便运行特定Web应用程序的实例.我每次都要做的是,连接ssh并导航到该特定应用程序并运行脚本.

我需要的

我一直试图找到一种方法来编写Ansible playbook,用一行命令从我的个人计算机上做所有这些,但我不知道如何做到这一点.我没有在互联网上找到一个非常解释性的(初学者)文档或帮助.

如何使用Ansible playbook重新启动Nginx?如何通过进程ID杀死进程?

shell nginx uwsgi ansible ansible-playbook

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

如何创建Ansible playbook以获取远程主机的OS版本?

我是ansible的新手.我有一个要求,要求我为AWS中托管的450多个Linux服务器提取操作系统版本.AWS不提供此功能 - 它建议我们从木偶或厨师那里获取它.

我创建了几个没有运行的简单剧本

---
- hosts: testmachine
user: ec2-user
sudo: yes
tasks:
- name: Update all packages to latest
yum: name=* state=latest

task:
- name: obtain OS version
shell: Redhat-release
Run Code Online (Sandbox Code Playgroud)

playbook应该输出一个带有主机名和操作系统版本的文本文件.任何有关这方面的见解将受到高度赞赏.

linux amazon-ec2 amazon-web-services ansible ansible-playbook

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

将Ansible变量从一个角色(在一个主机上运行)传递到在同一个playbook中的另一个主机上运行的另一个角色

我有一个在不同主机上运行不同角色的剧本.是否可以将变量从一个主机上运行的一个角色传递到同一个playbook运行中运行的另一个主机上的另一个角色?或任何解决方法?

playbook
   host1
     role1
       here I get some variables: var1 var2 ...etc
   host2
     role2
       here I need to use var1 var2 ... etc from the above host/role
Run Code Online (Sandbox Code Playgroud)

role1中设置teh变量的任务db如下所示:

- shell: cd /ACE/conf && grep ^db.url local1.properties | awk -F/ '{print $4}' | awk -F? '{print $1}'
  register: db
Run Code Online (Sandbox Code Playgroud)

更新:在第一台主机上,值是动态的,它就像一个始终更新的配置文件.在我使用role1将值存储在host1上的变量之后,然后移动到host2,运行role2并使用host1存储的变量对这些值进行处理.

我尝试使用hostvars:

{{ hostvars.LBL.db.stdout }}
{{ hostvars['LBL']['db'] }}
{{ hostvars['LBL']['db']['stdout'] }}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

in get_variables raise Exception("host not found: %s" % hostname) Exception: host not found: LBL
Run Code Online (Sandbox Code Playgroud)

LBL存在于主机中,我运行第一个角色

我在一台主机上设置了一个变量,我希望该变量可供其他主机使用.所有这些都在一本剧本中.可以吗?

hostvars不能像这样使用它:

--- …
Run Code Online (Sandbox Code Playgroud)

variables roles ansible ansible-playbook

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

在Ansible中,是否可以根据剧本定义身份验证方法?

TL; DR:是否可以使用一个ansible-playbook命令链接两个剧本,其中一个剧本是密码认证而另一个剧本是密钥认证?(参见上一节的实际目的).

建立:

我有两本剧本,第二部是include第一部.

PlaybookA.yml

---
- name: PlaybookA # requires password authentication
  hosts: sub.domain.ext
  remote_user: root
  roles:
    - { role: role1, sudo: yes }
...
Run Code Online (Sandbox Code Playgroud)

PlaybookB.yml

---
- name: Run PlaybookA
  include: PlaybookA.yml

- name: PlaybookB # requires ssh-key authentication
  hosts: sub.domain.ext
  remote_user: ansible
  roles:
    - { role: role2, sudo: yes }
...
Run Code Online (Sandbox Code Playgroud)

要求:

  1. 仅执行一个命令.
  2. 使用密码验证为PlaybookA.
  3. 对PlaybookB使用ssh-key auth.

问题1:

在Ansible(版本1.9.4或更低版本)中是否可以执行一个ansible-playbook命令,该命令将使用ssh-key身份验证成功运行PlaybookB,但是当PlaybookB包含PlaybookA时,使用密码身份验证运行PlaybookA?

问题2:

如果Ansible 1.9.4或更低版本无法做到这一点,那么这可能是2.0.0+吗?

价值说明:

  1. Ansible提供--ask-pass(或-k)作为启用密码验证的命令行开关.
  2. Ansible提供ask_pass了一个变量但似乎只能在其中设置ansible.cfg(我无法将其设置为Playbook变量以达到所需效果).
  3. 尝试ask_pass在剧本中设置指令会产生以下结果: …

authentication passwords ssh-keys ansible ansible-playbook

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

获取使用Ansible创建的AWS实例的IP地址/属性

我知道如何使用Ansible创建AWS实例.现在我想要实现的是通过使用创建实例的相同playbook安装nginx来将该实例配置为Web服务器.

该剧本的目标是:

  1. 创建AWS实例.
  2. 通过设置Nginx服务器将实例配置为Web服务器.

有可能与ansible?

amazon-web-services ansible ansible-playbook

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

Ansible playbook 不复制文件,不出错

我的 ansible playbook 只复制我指定的文件之一。该剧本运行完成,没有任何错误。如果我在剧本之外运行相同的命令,它将复制

我非常简单的剧本

---
- hosts: "dudes"
  vars:
    remote_user: root
tasks:
    - name: Installs logstash-forwarder rpm
      yum: name=logstash-forwarder state=present disable_gpg_check=yes

    - name: Add the certs init and etc files into place
      action: copy src=/etc/ansible/files/logstash-forwarder/logstash-forwarder.crt dest=/etc/pki/tls/certs/ owner=root group=root mode=644
      action: copy src=/etc/ansible/files/logstash-forwarder/logstash-forwarder-etc dest=/etc/logstash-forwarder owner=root group=root mode=644 force=yes
      action: copy src=/etc/ansible/files/logstash-forwarder/logstash-forwarder-etc-sysconfig dest=/etc/sysconfig/logstash-forwarder owner=root group=root mode=644 force=yes
      action: copy src=/etc/ansible/files/logstash-forwarder/logstash-forwarder-init-d dest=/etc/init.d/logstash-forwarder mode=0755

    - name: add logstash forwarder to chkconfig
      command: chkconfig --add logstash-forwarder
      notify:
            - start logstash-forwarder
handlers:
    - name: start …
Run Code Online (Sandbox Code Playgroud)

copy ansible ansible-playbook

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

用于检查操作系统的 Ansible 剧本

如果系统安装了 Oracle Linux,如何检查已安装的操作系统并继续下载文件。

这就是我要做的

- hosts: all
  become: true
  gather_facts: true
  tasks:
    - name: Check if oracle linux is installed
      shell: |
        cat: /etc/system-release
      register: os_name
      ignore_errors: yes
    - debug:
      msg: "{{os_name.stdout}}"```
Run Code Online (Sandbox Code Playgroud)

ansible

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

Ansible - 在运行时定义库存

如果我的问题有点基础的话,我对ansible很新.

场景:

我有一些远程主机组,如[EPCs] [客户端]和[测试人员]我能够按照我希望的方式配置它们.

问题:

我需要编写一个剧本,在运行时,会在运行时向用户询问库存.作为运行剧本的示例,应按以下方式提示用户:"输入要配置的EPC数量""输入要配置的客户端数量""输入要配置的测试人员数量"

会发生什么:

例如,用户分别输入2,5和8.现在,剧本应仅解决组[EPC]中的前2个节点,组[客户端]中的前5个节点以及组[测试人员]中的前7个节点.我不想创建大量的子组,例如,如果我有20个EPC,那么我不想为我的EPC定义20个组,我想要一些动态库存,它应该自动配置根据用户在运行时输入的机器使用vars_prompt选项或类似的东西

让我发布我的剧本的部分内容,以便更好地了解将要发生的事情:

---
- hosts: epcs # Now this is the part where I need a lot of flexibility

  vars_prompt:
    name: "what is your name?"
    quest: "what is your quest?"

  gather_facts: no

  tasks:

  - name: Check if path exists
    stat: path=/home/khan/Desktop/tobefetched/file1.txt
    register: st

  - name: It exists
    debug: msg='Path existence verified!'
    when: st.stat.exists

   - name: It doesn't exist
     debug: msg="Path does not exist"
     when: st.stat.exists == false

   - name: Copy file2 …
Run Code Online (Sandbox Code Playgroud)

variables roles inventory ansible ansible-playbook

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

ansible playbook 将文件复制到 docker 容器

我想使用 ansible playbook 将文件复制到 docker 容器。我怎样才能做到这一点 ?

- name: kapacitor conf
  template: src=/home/debian/roles/tick_install/files/kapacitor.conf  dest=/etc/kapacitor/kapaci
Run Code Online (Sandbox Code Playgroud)
my docker container = tick_kapacitor
Run Code Online (Sandbox Code Playgroud)

copy file ansible docker

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