问题标签 [ansible-facts]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
caching - 将事实收集到事实缓存的最快方法
我正在尝试使 Ansible 与 --limit 一起工作,为此我需要有关其他主机的事实,我正在使用 fact_caching 对其进行缓存。我应该运行什么命令,以便它简单地收集所有主机上的所有事实并缓存它们,而不运行任何任务?如果像设置模块这样的东西缓存了它收集的事实,它会是完美的,但它似乎没有。
ansible - 如何在 Ansible 中获取任意远程用户的主目录?
我可以使用 shell 的组合来做到这一点,getent
就像awk
这样:
作为参考,在 Puppet 中,我可以使用自定义事实,如下所示:
这使得用户的主目录作为home_<user name>
事实可用。
如何获取任意远程用户的主目录?
ansible - 在 Jinja 模板中使用 Ansible 控制 master 的 IP 地址
我想在 Ansible 剧本使用的 J2 模板中插入一个 IP 地址。该 IP 地址不是正在配置的主机的地址,而是完成配置的主机的 IP。到目前为止,我发现的所有内容都涵盖了使用与正在配置的主机相关的变量/事实。换句话说:我想插入的IP是['ansible_default_ipv4']['address']
执行时的IP ansible -m setup 127.0.0.1
。
我认为我可以使用本地剧本来编写包含 IP 的动态生成的模板文件,但我希望这可能是“Ansible 方式”。
module - 从 Ansible 模块访问 Ansible 事实。Ansible 中的预取/刷新?
Ansible 模块可以通过将它们包含在其 JSON 输出中来生成自定义事实。下次在同一个 Ansible 运行期间调用它时,是否可以从同一个模块访问这些事实?这个想法是使用它们来预取某个,呃……一类事物的 is-state。在 Puppet 中称为“资源类型”的东西。
或者还有其他预取 Ansible 模块的方法吗?
ansible - Ansible:无法创建 /etc/ansible/facts.d/openshift.fact,权限被拒绝
我正在关注此博客以使用 ansible 在 OpenStack 上安装 OpenShift Origin V3。但我收到错误
“无法创建事实文件:%s,错误:%s”%(文件名,ex) main .OpenShiftFactsFileWriteError:无法创建事实文件:/etc/ansible/facts.d/openshift.fact,错误:[Errno 13]权限被拒绝:'/etc/ansible/facts.d'
目标系统是 CentOS,我可以在目标系统上执行无密码 sudo。我什至添加了/etc/sudoers
centos 全部=(ALL) NOPASSWD:ALL
到所有节点以及我运行ansible的系统上。
在我运行 ansible 的系统中,我尝试以 sudo 和 root 身份执行,但结果相同。
我不确定它在哪里面临权限被拒绝,我的意思是在主机或目标系统上。
Ansible 主机:
Ansible.cfg
以下是日志:
我以前没有使用 ansible 的经验,因此我无法进行更多调试。
python - 本地事实 (facts.d) 和挂载模块
我在 /etc/ansible/facts.d/mount.fact 中创建了以下本地事实文件:
当我尝试将这些事实用于安装模块时
我有一个错误,比如
失败:[127.0.0.1] => (item={u'src': u'/dev/sda1', u'state': u'mounted', u'name': u'/mastersystem', u'opts ': u'defaults', u'fstype': u'ext3'}) => {"failed": true, "item": {"fstype": "ext3", "name": "/mastersystem", " opts": "defaults", "src": "/dev/sda1", "state": "mounted"}} msg: state 的值必须是以下之一:present,absent,mounted,unmounted, got: {u' src': u'/dev/sda1', u'state': u'mounted', u'name': u'/mastersystem', u'opts': u'defaults', u'fstype': u'ext3 '}。状态
任何其他尝试都会导致类似的错误。知道我做错了什么吗?
ansible - 如何在剧本中过滤收集事实?
我正在从事一个只需要收集一个事实的角色。
性能是一个问题,我知道收集事实非常耗时。
我正在寻找某种方法来过滤gather_facts
剧本,这将使我只收集所需的事实。
使用 setup core 模块可以做到这一点:
可以在剧本中使用此功能吗?像这样的东西?
PS:上面的代码抛出语法异常。
编辑 1:如果有人需要获取主机名,还有另一个有用的变量inventory_hostname。
ansible - 获取Ansible控制机IP地址的最佳方法
我正在使用 Ansible 并ufw
在我的服务器上设置防火墙。作为ufw
规则的一部分,我希望允许来自 Ansible 控制机器的 SSH,但不允许来自其他任何地方。我的问题是 - 获取控制机器本身的 IP 地址以便我可以将其放入规则中的最佳方法是什么?
我知道我可以使用事实来获取运行 playbook 的机器的 IP 地址,但我没有看到任何简单的方法可以为运行 ansible 的机器自动获取它。
如果可能的话,我想避免添加一个新变量来表示它,因为如果它可以自动发现会很好,但如果这是唯一已知的最佳方法,那么我会这样做。
编辑:我发现这个重复的问题与我的相同,但是它也没有得到解答,因此将保持开放状态。
ansible - 如何在 Ansible 中获取每个命令的事实
Ansible 仅在开始时获取事实。但我需要检查每个命令的事实。例如:
我需要创建一个目录,之后我需要将文件放到这个目录中。但是ansible在开始时得到事实'dir不存在',创建dir,在下一步事实仍然是FALSE并且ansible跳过这一步=(并且只有在第二次运行后才执行这一步。
我会setup
在所有步骤之后再次尝试收集事实,但它不起作用。
我这样做:
amazon-web-services - Ansible - 包含来自远程主机的 vars 文件
我想包含远程主机上文件中的变量,而不是运行 Ansible 的控制机器。
例如,我有一个文件 /var/database_credentials.yml (在我的网络服务器上)
将该文件中的变量添加到主机变量以便我可以在模板中使用它们的最佳方法是什么?
include_vars 模块仅从控制机器获取文件。我可以使用 fetch 模块,但这似乎是一个不必要的步骤。