标签: ansible-facts

我在哪里可以获得Ansible预定义变量的列表?

我看到Ansible提供了一些我们可以在playbooks和模板文件中使用的预定义变量.例如,主机IP地址是ansible_eth0.ipv4.address.谷歌搜索和搜索文档我找不到所有可用变量的列表.有人会为我列出它们吗?

ansible ansible-facts

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

Ansible:获取当前目标主机的IP地址

如何获得角色中当前主机的IP地址?

我知道您可以获取主机所属的组列表以及主机的主机名,但我无法找到获取IP地址的解决方案.

您可以使用{{inventory_hostname}}和使用组来获取主机名{{group_names}}

我尝试过像{{ hostvars[{{ inventory_hostname }}]['ansible_ssh_host'] }}ip="{{ hostvars.{{ inventory_hostname }}.ansible_ssh_host }}"

ansible ansible-template ansible-facts

78
推荐指数
9
解决办法
19万
查看次数

如何在Ansible中获取任意远程用户的主目录?

我可以使用shell getentawk这样的组合来做到这一点:

getent passwd $user | awk -F: '{ print $6 }'
Run Code Online (Sandbox Code Playgroud)

作为参考,在Puppet中我可以使用自定义事实,如下所示:

require 'etc'

Etc.passwd { |user|

   Facter.add("home_#{user.name}") do
      setcode do
         user.dir
      end
   end

}
Run Code Online (Sandbox Code Playgroud)

这使得用户的主目录可用作home_<user name>事实.

如何获取任意远程用户的主目录?

ansible ansible-facts

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

Ansible - 收集事实之前的行动

收集事实之前,有谁知道如何做某事(比如等待受管节点的端口/启动)?我知道我可以收集事实

gather_facts: no
Run Code Online (Sandbox Code Playgroud)

THEN等港口,但如果我需要的事实,同时也还需要等待,直到节点启动时?

ansible ansible-facts

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

如何从Ansible中的安装模块输出中获取列表的第一个元素?

我从设置模块收到以下数据:

"ansible_nodename": "3d734bc2a391",
"ansible_os_family": "RedHat",
"ansible_pkg_mgr": "yum",
"ansible_processor": [
  "AuthenticAMD",
  "AMD PRO A10-8700B R6, 10 Compute Cores 4C+6G"
],
"ansible_processor_cores": 1,
"ansible_processor_count": 1,
"ansible_processor_threads_per_core": 1,
Run Code Online (Sandbox Code Playgroud)

我想检索第一个值ansible_processor并在Jinja2模板中使用它.

如果我使用{{ ansible_processor }}它,它给了我两个价值观:

"AuthenticAMD",
"AMD PRO A10-8700B R6, 10 Compute Cores 4C+6G"
Run Code Online (Sandbox Code Playgroud)

但我只想要第一个.

jinja2 ansible ansible-template ansible-facts

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

强制所有主机上的事实收集

我坐在一个相当复杂的Ansible项目前面,我们用它来设置我们的本地开发环境(多个VM),并且有一个角色使用Ansible收集的事实来/etc/hosts在每个VM上设置文件.不幸的是,当你只想为一个主机运行playbook时(使用-limit参数),其他主机的事实(显然)都会丢失.

有没有办法强制Ansible在所有主机上收集事实,即使你将剧本限制在一个特定的主机上?

我们尝试在剧本中添加一个剧本来收集所有主持人的事实,但当然这也限于-limit参数给出的一个主持人.如果有一种方法可以强制这个游戏在其他播放之前在所有主机上运行,​​那将是完美的.

我已经google了一下,发现了使用redis进行事实缓存的解决方案,但由于我们的本地操作本使用,我想避免使用其他软件.我知道,这不是什么大不了的事,但我只是在寻找一个"更清洁",仅限Ansible的解决方案,并且想知道,如果存在的话.

hosts limit ansible ansible-facts

22
推荐指数
3
解决办法
9467
查看次数

ansible 返回“无法导入所需的 Python 库(用于 Python 的 Docker SDK:docker (Python &gt;= 2.7) 或 docker-py (Python 2.6))

我在 ubuntu 中运行我的服务器:

+ sudo cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
Run Code Online (Sandbox Code Playgroud)

我使用ansible,当我运行它时,出现以下错误:

fatal: [localhost]: FAILED! => {"changed": false, "msg": "Failed to import the required Python library (Docker SDK for Python: docker (Python >= 2.7) or docker-py (Python 2.6)) on dd63315fad06's Python /usr/bin/python. Please read module documentation and install in the appropriate location, for example via `pip install docker` or `pip install docker-py` (Python 2.6). The error was: No …
Run Code Online (Sandbox Code Playgroud)

ansible ansible-2.x ansible-facts ansible-inventory

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

你如何改变ansible_default_ipv4?

我想将ansible_default_ipv4更改为指向eth1而不是eth0.我可以在剧本中或通过--extra-vars选项执行此操作吗?

ansible ansible-facts

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

Ansible - 在Playbook内部使用过滤器收集事实

我正在研究一个只需要收集一个事实的角色.

性能这是一个问题,我知道收集事实是耗时的.

我正在寻找一些方法来过滤gather_facts剧本,这将允许我只收集所需的事实.

这可以使用安装核心模块:

ansible -m setup -a 'filter=ansible_hostname' my_host

10.200.0.127 | success >> {
    "ansible_facts": {
        "ansible_hostname": "my_host"
    },
    "changed": false
}
Run Code Online (Sandbox Code Playgroud)

在剧本中可以使用这个功能吗?像这样的东西?

- hosts: all
  sudo: yes
  gather_facts: True
    filter: "filter=ansible_*"
Run Code Online (Sandbox Code Playgroud)

PS:上面的代码抛出语法异常.

编辑1:如果有人需要获取主机名,那么还有另一个有用的变量inventory_hostname.

ansible ansible-facts

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

检查数组是否已定义且在ansible中不为空

我有以下代码

- set_fact:
    MY_HOSTNAME: "SOME VALUE"
    MY_SERVER: "00.00.00.00"
- name: Get MY server
  set_fact:
    MY_SERVER: "{{ groups[MY_HOSTNAME][0] }}"
  when: groups[MY_HOSTNAME] is defined
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,groups[MY_HOSTNAME]是一个数组.什么是检查groups[MY_HOSTNAME]定义的最佳方法,并且它是否是not empty 如果它是我想要00.00.00.00分配值的任何一个MY_SERVER

ansible ansible-facts

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