标签: ansible-facts

Ansible - 包括来自远程主机的vars文件

我想在远程主机上的文件中包含变量,而不是运行Ansible的控制机器.

例如,我有一个文件/var/database_credentials.yml(在我的网络服务器上)

将变量从该文件添加到hostvars的最佳方法是什么,以便我可以在模板中使用它们?

include_vars模块仅从控制计算机获取文件.我可以使用fetch模块,但这似乎是一个不必要的步骤.

amazon-web-services ansible ansible-facts

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

尝试在剧本中注册输出时未定义变量

我正在尝试使用 F5 池查询的输出注册一个变量,但收到此错误:

"<type 'list'>": "VARIABLE IS NOT DEFINED!", 
Run Code Online (Sandbox Code Playgroud)

我做错了什么?任何帮助表示赞赏。谢谢!

---
- name: GRAB F5 FACTS
  hosts: f5
  connection: local
  gather_facts: no
  tasks:
    - name: Collect BIG-IP facts
      bigip_device_facts:
        gather_subset: ltm-pools
        provider: "{{ prov }}"
      register: bigip_device_facts

    - name: FACTS OUTPUT
      debug:
        var: "{{ item.members | rejectattr('state', 'match', '^present$') | map(attribute='name') | list }}"
      register: jkout
      with_items: "{{ bigip_device_facts.ltm_pools }}" 
      when: item.full_path  == "/Common/mypool"

    - name: Set a variable
      debug:
        msg: "jkvar={{ jkout }}"
Run Code Online (Sandbox Code Playgroud)

ansible ansible-facts

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

如何获取 Ansible playbook 中使用的变量列表?

我想获取 ansible 剧本中使用的变量列表。我研究了设置和调试模块,但我怀疑我能做到这一点。

有没有通用的方法?

ansible ansible-facts

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

获取Ansible控制机器IP地址的最佳方法

我正在使用Ansible并ufw在服务器上设置防火墙。作为ufw规则的一部分,我希望允许来自Ansible控制机器的SSH,但不允许任何其他地方的SSH。我的问题是-获取控制机器本身的IP地址的最佳方法是什么,以便我将其放入规则中?

我知道我可以使用事实来获取正在运行该剧本的计算机的IP地址,但是我看不到任何简单的方法可以为运行ansible的计算机自动获取它。

我想避免添加一个新变量来表示此变量,因为如果可以自动发现它将会很好,尽管如果这是唯一已知的最佳方法,那么我将这样做。

编辑:我发现这个重复的问题与我的相同,但是它也没有得到答案,因此将对此保留一些时间。

ansible ansible-facts

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

如何在Ansible中将命令输出存储到数组中?

基本上,我希望能够使用ansible在Linux中处理"通配符文件名".本质上,这意味着使用ls命令,其中部分文件名后跟"*",以便它仅列出某些文件.

但是,我无法将输出正确存储在变量中,因为可能会返回多个文件名.因此,我希望能够存储这些结果,无论一个任务期间阵列中可能有多少结果.然后,我希望能够在以后的任务中从数组中检索所有结果.此外,由于我不知道可能返回多少文件,因此我无法为每个文件名执行任务,并且数组更有意义.

这背后的原因是随机存储位置中的文件经常更改,但它们始终具有相同的上半部分.这是他们的名字的后半部分是随机的,我不想将其硬编码到ansible中.

我完全不确定如何在ansible中正确实现/操作数组,所以下面的代码是我"试图"完成的一个例子.显然,如果返回多个文件名,它将无法按预期运行,这就是我在此主题上寻求帮助的原因:

- hosts: <randomservername>
  remote_user: remoteguy
  become: yes
  become_method: sudo
  vars:
    aaaa: b
  tasks:

 - name: Copy over all random file contents from directory on control node to target clients.  This is to show how to manipulate wildcard filenames.
    copy:
      src: /opt/home/remoteguy/copyable-files/testdir/
      dest: /tmp/
      owner: remoteguy
      mode: u=rwx,g=r,o=r
    ignore_errors: yes

  - name: Determine the current filenames and store in variable for later use, obviously for this exercise we know part of the filenames.
    shell: "ls {{item}}"
    changed_when: …
Run Code Online (Sandbox Code Playgroud)

linux arrays ansible ansible-facts

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

Ansible:从字典中删除项目

我遇到了一种情况,我试图从列表中删除该项目。但我没有得到预期的结果。请帮助我我在这里做错了什么?

这是清单:

    "get_ec2_id.instances[0].tags": {
    "Name": "test-db-system-2",
    "aws:cloudformation:logical-id": "DBInstance",
    "aws:cloudformation:stack-id": "arn:aws:cloudformation:us-east-1:123456789012:stack/test-db-system-2/0115v0a0-5d44-17e8-a024-503ama4a5qd1",
    "aws:cloudformation:stack-name": "test-db-system-2",
    "dbsystem:stack": "test-db-system-2",
    "dbsystem:type": "db"
}
Run Code Online (Sandbox Code Playgroud)

}

我正在尝试使用以下过滤器从列表中删除所有“aws:cloudformation”标签:

    "{{ get_ec2_id.instances[0].tags | reject('search','aws:') | list }}"
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

    ok: [10.52.8.101] => {
"instances_tags": [
    "dbsystem:type",
    "dbsystem:stack",
    "Name"
]
    }
Run Code Online (Sandbox Code Playgroud)

但我预计结果如下:

      "instances_tags": [
    "dbsystem:stack": "test-db-system-2",
    "dbsystem:type": "db"
    "Name" : "test-db-system-2",
]
  }
Run Code Online (Sandbox Code Playgroud)

帮我解决问题。

ansible ansible-2.x ansible-facts

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

如何获取小写的 ansible 事实

我正在收集可靠的事实。序列号有大写和小写两种形式。见下文。

5A2c32a-f1G85g-2035-0483-1fe9c129216d 
Run Code Online (Sandbox Code Playgroud)

我需要将该事实与另一个完全小写的序列号进行比较。请参见下文。

5a2c32a-f1g85g-2035-0483-1fe9c129216d 
Run Code Online (Sandbox Code Playgroud)

如果我使用 jinja2 过滤器转换为小写。然后我无法操作 json 输出。例如。我试过这个

- set_fact:
     facts: "{{ facts | lower | to_json }}"

- debug:
    var: facts.instance
Run Code Online (Sandbox Code Playgroud)

它抛出错误

TASK [play : set_fact] ******************************************************************************
ok: [localhost]

TASK [play : debug] ******************************************************************************
ok: [localhost] => {
    "facts.instance": "VARIABLE IS NOT DEFINED!"
}
Run Code Online (Sandbox Code Playgroud)

但如果我facts只调试。它给了我输出。下面的作品,

- set_fact:
     facts: "{{ facts | lower | to_json }}"

- debug:
    var: facts
Run Code Online (Sandbox Code Playgroud)

但我需要获得更多的价值facts.instance.disk

python jquery jinja2 ansible ansible-facts

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

在 M1 Mac 上的 Rosetta 2 模拟下,Ansible 返回的“ansible_machine”和“ansible_architecture”是什么

在 M1 MacBook 上,ansible_architectureansible_machine返回相同的值arm64

shuuji3@momo mac-dev-playbook
> ansible -m setup localhost | egrep '_architecture|_machine'
        "ansible_architecture": "arm64",
        "ansible_machine": "arm64",
Run Code Online (Sandbox Code Playgroud)

在 M1 Mac 上的 Rosetta 2 仿真下怎么样?

ansible ansible-facts apple-m1

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

在 Ansible 中使用 if 条件将 True 或 False 分配给 Gather_facts 不起作用

---
- hosts: "{{ run_on_node|default('mysql_cluster_sql[0]')}}"
  connection: "{% if migrated is defined and migrated == 'yes' %}local{% else %}ssh{% endif %}" # This works as we are assigning non boolean value
  gather_facts: "{% if migrated is defined and migrated == 'yes' %}false{% else %}true{% endif %}" #This doesnt work well
  tasks:
    - debug: var=ansible_all_ipv4_addresses
    - debug: var=ansible_default_ipv4.address
Run Code Online (Sandbox Code Playgroud)

库存文件:

[mysql_cluster_sql]
10.200.1.191 migrated=yes
Run Code Online (Sandbox Code Playgroud)

该变量根据条件具有 true 和 false 值,但即使 Gather_facts 为 false,它也会收集事实。

ansible devops ansible-facts

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

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
查看次数