标签: ansible-facts

使用ansible通过编程方式收集的事实

我想写一个Python程序,它使用Ansible给我的事实ansible HOST -m setup.

当我调用它时,我得到一个响应,使它只有几乎纯粹的JSON:

$ ansible localhost -m setup
localhost | success >> {
    // actual data
}
Run Code Online (Sandbox Code Playgroud)

有没有办法直接获得这个JSON响应而不解析shell输出(可能不太稳定)?我甚至可以直接在Python 3程序中使用Ansible吗?

python ansible ansible-facts

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

在 Jinja 模板中使用 Ansible 控制主机的 IP 地址

我想将 IP 地址插入到 Ansible playbook 使用的 J2 模板中。该 IP 地址不是正在配置的主机的地址,而是完成配置的主机的 IP。到目前为止,我发现的所有内容都涵盖了使用与所配置的主机相关的变量/事实。\n换句话说:I\xe2\x80\x99d 喜欢插入的 IP 是[\'ansible_default_ipv4\'][\'address\']执行ansible -m setup 127.0.0.1.

\n\n

我认为我可以使用本地剧本编写一个包含 IP 的动态生成的模板文件,但我希望这可能是 \xe2\x80\x9cAnsible 方式\xe2\x80\x9d。

\n

ansible ansible-facts

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

在Ansible临时命令中使用Ansible事实

是否可以使用ansible_factsAnsible adhoc命令中通常包含的内容?

例如,我/tmp/myFile所有服务器上都有一个文件,我想这样做:

ansible all -i [inventory file] -m fetch -a "src=/tmp/myFile dest=myFile-[insert ansible_hostname here]"
Run Code Online (Sandbox Code Playgroud)

无需为此编写一本完整的剧本。

ansible ansible-facts ansible-ad-hoc

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

Amazon Linux机器-Ansible ansible_distribution *变量主要发行版本

我正在使用Ansible:2.2.0.0

我有3台机器:

两个无聊的盒子(一个CentOS 7.x和一个Ubuntu 14.04)和
第三个盒子是EC2 Amazon Linux实例(Amazon Linux AMI版本2016.03)。

在这些框中,我正在运行以下命令并获得有效的输出(如下所示):

CentOS的

[vagrant@myvagrant ~] $ ansible all -m setup -i "`hostname`," --connection=local -a "filter=ansible_distribution*"
myvagrant | SUCCESS => {
    "ansible_facts": {
        "ansible_distribution": "CentOS", 
        "ansible_distribution_major_version": "7", 
        "ansible_distribution_release": "Core", 
        "ansible_distribution_version": "7.2.1511"
    }, 
    "changed": false
}
Run Code Online (Sandbox Code Playgroud)

Ubuntu的

vagrant@myubuntuvagrant:~$ ansible all -m setup -i "`hostname`," --connection=local -a "filter=ansible_distribution*"
myubuntuvagrant | SUCCESS => {
    "ansible_facts": {
        "ansible_distribution": "Ubuntu", 
        "ansible_distribution_major_version": "14", 
        "ansible_distribution_release": "trusty", 
        "ansible_distribution_version": "14.04"
    }, 
    "changed": false
}
vagrant@myubuntuvagrant:~$ 
Run Code Online (Sandbox Code Playgroud)

Amazon …

yum amazon-ec2 amazon-web-services ansible-2.x ansible-facts

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

运行Ansible播放时未定义的变量

我正在运行YAML文件中定义的多个ansible播放。

在上一部游戏中,出现以下错误:

{"failed": true, "msg": "The conditional check 'ansible_os_family == \"RedHat\"' failed. The error was: error while evaluating conditional (ansible_os_family == \"RedHat\"): 'ansible_os_family' is undefined\n
Run Code Online (Sandbox Code Playgroud)

我是否需要通过收集事实或其中的某些内容来进行任何更改ansible.cfg

ansible ansible-facts

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

在一个角色中创建set_fact变量,并在另一个角色中使用它们

我有一个复杂的环境,有多个系统的阶段和用户.

阶段是:dev,int等.

每个阶段都有一个应用程序用户,让我们调用用户john.这导致dev和johni的用户johnd为int等等.

为了抽象系统管理,由于阶段中的所有系统都是相同的,我创建了这个数据结构:

users:
  john:
    dev:
      name: "johnd"
    int:
      name: "johni"
Run Code Online (Sandbox Code Playgroud)

现在我有一个角色"collect_user_information",它从LDAP收集所有类型的信息,并在set_fact的帮助下将它们存储在变量中.

- name: Get the userhome out of LDAP
  shell: 'getent passwd {{ users[ user ][ stage ].name }} | cut -d: -f6'
  register: user_home
Run Code Online (Sandbox Code Playgroud)

和set_fact:

- name: set facts for LDAP user
  set_fact:
    "{{user}}":
      name: "{{ users[ user ][ stage ].name }}"
      home: "{{ user_home.stdout }}"
Run Code Online (Sandbox Code Playgroud)

要转储变量,我使用:

- name: debug output for myuser
  debug: var="{{user}}"
Run Code Online (Sandbox Code Playgroud)

调试输出看起来很有意思.

TASK [collect_user_information : debug output for user] *******
ok: [host1] => …
Run Code Online (Sandbox Code Playgroud)

ansible ansible-facts

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

Ansible - 在远程主机模板中使用来自本地主机的事实

我有一个包含localhost角色和远程主机角色的playbook.

在其中一个localhost角色中,我设置了一个名为的事实git_tag.

我想在远程主机的模板中使用这个事实.

我试过了:

- name: Read Version
  set_fact:
    git_tag: "{{ package_json.stdout | from_json | json_query('version')}}"
  delegate_to: "test-server"
Run Code Online (Sandbox Code Playgroud)

但是当Ansible达到了读取模板的角色时,{{ git_tag }}它会说出来git_tag is undefined.

我确定我做错了什么.我该怎么做?

ansible ansible-facts

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

Ansible:使用ansible事实,如何基于存储控制器值获取磁盘设备,然后将该设备设置为变量

上下文:我的系统具有来自不同存储控制器的磁盘组合,因此每种类型的磁盘都有不同的用途。我是新手,可以边学边学。编写一本从每种类型的控制器获取磁盘的剧本,以便我进行设置。

例如 以下是#'filter = ansible_devices *'输出的示例... sdz设备来自SATA控制器。在我的其他主机上,它可能不一定总是sdz ..因此,如果设备具有“主机”:“ SATA控制器”,我想获取设备名称并存储在变量中。我在想,也许我需要遍历ansible_devices词典,找到匹配的密钥(“主机”:“ SATA控制器”),然后为其获取父字典,即该设备。有没有办法做到..或更简单的方法?:)

"sdz": {
            "holders": [
                "mpathz"
            ],
            "host": "SATA controller: Intel Corporation C610/X99 series chipset 6-Port SATA Controller [AHCI mode] (rev 05)",
            "links": {
                "ids": [
                    "ata-SAMSUNG_MZ7GE960HMHP-00003_S1Y2NYAFC02269",
                    "wwn-0x50025388003aeb2a"
                ],
                "labels": [],
                "masters": [
                    "dm-19"
                ],
                "uuids": []
            },
            "model": "SAMSUNG MZ7GE960",
            "partitions": {},
            "removable": "0",
            "rotational": "0",
            "sas_address": null,
            "sas_device_handle": null,
            "scheduler_mode": "cfq",
            "sectors": "1875385008",
            "sectorsize": "512",
            "serial": "S1Y2NYAFC02269",
            "size": "894.25 GB",
            "support_discard": "512",
            "vendor": "ATA",
            "virtual": 1,
            "wwn": "0x50025388003aeb2a"
Run Code Online (Sandbox Code Playgroud)

ansible ansible-facts

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

Ansible 从 ansible play/playbook 中获取“hosts”键的值

有什么方法可以获取正在执行戏剧的一组主机的组名称吗?我知道 ansible 有一个名为ansible_play_hosts的变量,它是正在执行特定操作的所有主机的列表。我想要包含所有这些主机的实际组名称。

我使用的是ansible版本2.3.2.0

例子:

# file: hosts

[my-host-group]
hostname-1
hostname-2
Run Code Online (Sandbox Code Playgroud)


# file: playbook.yml
---

- hosts: my-host-group
  tasks:
    - name: "Print group name for 'hosts'"
      debug:
        msg: "Hosts var is '{{ hosts }}'"  
Run Code Online (Sandbox Code Playgroud)

我想要打印该消息Hosts var is 'my-host-group'

variables ansible ansible-2.x ansible-facts

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

Ansible 在同一剧本中的主机之间传递事实

我试图将一个事实从host1传递到host2,但是当ansible到达hosts2时,它返回“未定义的变量”:

- name: some playbook
  gather_facts: false
  hosts: host1
  tasks:
    - set_fact:
        fact1: "foo"

- hosts: host2
  gather_facts: false
  tasks:
    - debug:
        msg: "{{ fact1 }}"
Run Code Online (Sandbox Code Playgroud)

ansible ansible-facts

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