标签: ansible-facts

Ansible 上的“ansible_architecture”和“ansible_machine”有什么区别?

我正在尝试使用Ansiblefacts来查找机器的架构。

\n

我们可以通过运行命令来收集有关机器的信息ansible -m setup <host-name>,如文档中所述:发现变量:事实和魔术变量 \xe2\x80\x94 Ansible 文档

\n

但看起来 和ansible_architectureansible_machine相同的值。我不确定它们之间的区别。上述文档中的示例显示了以下两个具有相同值的值:

\n
    "ansible_architecture": "x86_64",\n    "ansible_machine": "x86_64",\n
Run Code Online (Sandbox Code Playgroud)\n

在我的 M1 MacBook 上,结果是这样的:

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

我们可以互换使用这些值吗?或者在另一种情况下它们可以有其他值吗?

\n

macos ansible ansible-facts apple-silicon

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

收集事实到事实缓存的最快方法

我正在努力使Ansible与--limit一起工作并且这样做我需要关于其他主机的事实,我正在使用fact_caching进行缓存.我应该运行什么命令,以便它只是收集所有主机上的所有事实并缓存它们,而不运行任何任务?如果它缓存了它收集的事实,那么设置模块之类的东西将是完美的,但它似乎没有.

caching ansible ansible-facts

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

如何在 vars 中使用已注册 ansible 变量的字典?

我想使用vars. 目前,我正在做如下

vars:
    var1_name: "var1_value"
    var2_name: "var2_value"
Run Code Online (Sandbox Code Playgroud)

由于变量的数量可以增加,我宁愿使用vars. 我已经构建了一个变量字典,如下所示

- name: set fact
  hosts: localhost
  tasks:
  - set_fact:
      variables: "{{ variables|default({}) | combine( {item.variable: item.value} ) }}"
    with_items:
    - variable: var1_name
      value: "var1_value"
    - variable: var2_name
      value: "var2_name"
Run Code Online (Sandbox Code Playgroud)

字典看起来像这样:

"variables": {
    "var1_name": "var1_value",
    "var2_name": "var2_value",
}
Run Code Online (Sandbox Code Playgroud)

现在,我想让这个字典中的变量可用于在其他主机上执行的角色。

但是,当我试图通过字典来vars喜欢下面

vars: "{{ variables }}"
Run Code Online (Sandbox Code Playgroud)

Ansible 抛出错误:

ERROR! Vars in a Play must be specified as a dictionary, or a list of dictionaries
Run Code Online (Sandbox Code Playgroud)

如何传入字典变量vars

ansible ansible-facts

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

Ansible:在剧本中指定清单文件

因此,根据我收集的信息,我们可以使用 ansible.cfg 来设置 ansible 在运行剧本时查找的默认清单文件。

我们还可以在通过命令行运行 ansible playbook 时使用 -i 参数覆盖该清单。

有没有办法让我在不使用命令行或更改 ansible.cfg 文件的情况下在剧本中指定特定的特殊清单文件?

ansible ansible-facts ansible-inventory

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

禁用 Ansible 从命令行收集事实

为了加快 Ansible playbook 的执行速度,我有时想在设置阶段禁用收集事实。这可以通过在剧本中添加以下内容来完成:

gather_facts: False
Run Code Online (Sandbox Code Playgroud)

但如何在命令行中控制呢?

我像这样执行我的 Ansible 剧本:

ansible-playbook playbook.yaml -i inventory.yaml
Run Code Online (Sandbox Code Playgroud)

ansible ansible-facts

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

如何用yaml指定数组或列表元素事实?

当我们检查hostvars时:

  - name: Display all variables/facts known for a host
    debug: var=hostvars[inventory_hostname]
Run Code Online (Sandbox Code Playgroud)

我们得到:

ok: [default] => {
    "hostvars[inventory_hostname]": {
        "admin_email": "admin@surfer190.com", 
        "admin_user": "root", 
        "ansible_all_ipv4_addresses": [
            "192.168.35.19", 
            "10.0.2.15"
        ],...
Run Code Online (Sandbox Code Playgroud)

我如何指定"ansible_all_ipv4_addresses"列表的第一个元素?

yaml ansible ansible-facts

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

使用 ansible_facts.packages["zabbix-agent"] 时如何获取软件的版本

我在 Ansible 中使用 package_facts 模块时遇到问题。基本上,我只想安装 zabbix-agent 的版本,因为我需要根据安装的版本做一些事情。

现在我在剧本任务中得到了这个:

- name: Gather Installed Packages Facts
  package_facts:
    manager: "auto"
  tags:
    - zabbix-check

- name: "Zabbix Found test result"
  debug: var=ansible_facts.packages['zabbix-agent']
  when: "'zabbix-agent' in ansible_facts.packages"
  tags:
    - zabbix-check

- name: "Zabbix Not-found test result"
  debug: 
    msg: "Zabbix NOT found"
  when: "'zabbix-agent' not in ansible_facts.packages"
  tags:
    - zabbix-check
Run Code Online (Sandbox Code Playgroud)

它吐出这样的东西:

ok: [vm3] => {
    "ansible_facts.packages['zabbix-agent']": [
        {
            "arch": "x86_64", 
            "epoch": null, 
            "name": "zabbix-agent", 
            "release": "1.el7", 
            "source": "rpm", 
            "version": "4.0.10"
    ]
}
ok: [vm4] => { …
Run Code Online (Sandbox Code Playgroud)

ansible ansible-facts

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

将文件从 ansible 中的相对路径复制到服务器

如何传递相对路径,以便 Ansible 可以从node/keys服务器复制文件并将其复制到服务器?

剧本是ansible/playbook

我的目录结构是:

??? ansible
?   ??? inventory
?   ??? playbook
??? node
?   ??? keys
?   ??? index.js
?   ??? node_modules
?   ??? package-lock.json
?   ??? utils
??? shell
    ??? data.json
    ??? create-data.sh
    ??? destory.sh
    ??? firewall-rules.sh
Run Code Online (Sandbox Code Playgroud)

下面是剧本:

- hosts: all
  vars:
    source: "{{ source }}"
    destination: /home/ubuntu

  tasks: 

    - name: Copy files
      copy: 
        src:  "{{ source }}"
        dest: "{{ destination }}"
Run Code Online (Sandbox Code Playgroud)

这就是我运行的方式:

ansible-playbook -i inventory/inventory.yaml playbook/crypto-generate.yaml
 --extra-vars "source=../node/keys"
Run Code Online (Sandbox Code Playgroud)

我正在尝试传递相对路径。

ansible ansible-facts ansible-inventory

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

Ansible:如何从特定角色的“文件”文件夹中复制所有内容

我有一个 ansible 角色,如下所示:

\n\n
my-role\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 files\n\xe2\x94\x82       my-file-one\n\xe2\x94\x82       my-file-two\n\xe2\x94\x82       my-file-...\n\xe2\x94\x82       my-file-n\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 tasks\n        main.yml\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的main.yml中,我有这个递归复制任务,\n并且我想复制所有文件,而不需要手动列出它们:

\n\n
- name: copy all files\n  copy:\n    src: "{{ item }}"\n    dest: /dest/\n  with_items:\n    - ????\n
Run Code Online (Sandbox Code Playgroud)\n\n

建议??

\n

ansible ansible-2.x ansible-facts

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

无法将 Ansible 事实设置为整数

我正在尝试提取主要发行版版本(以ansible_facts字符串形式保存)并将其存储为整数以供以后使用<>与整数进行比较。当我这样做时:

- set_fact:
    distromajor: "{{ ansible_facts['distribution_major_version'] | int }}"
Run Code Online (Sandbox Code Playgroud)

我发现distromajorHold"7"而不是7.
所以后来比较失败。事实上,我让它发挥作用的唯一方法就是像这样进行比较:

(distromajor|int >=6) and (distromajor|int <= 8)
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?
为什么我不能将发行版主要版本保存为 int?

最接近的SO问题没有解释为什么后来的整数比较失败而没有distromajor在比较时将变量重新转换为整数。

ansible ansible-facts

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