- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我遇到了一些 ansible 模块的问题。我这样编写自定义模块及其输出:
ok: [localhost] => {
"msg": {
"ansible_facts": {
"device_id": "/dev/sdd"
},
"changed": true,
"failed": false
}
}
我的自定义模块:
#!bin/env python
from ansible.module_utils.basic import *
import json
import array
import re
def find_uuid():
with open("/etc/ansible/roles/addDisk/library/debug/disk_fact.json") as disk_fact_file, open("/etc/ansible/roles/addDisk/library/debug/device_links.json") as device_links_file:
disk_fact_data = json.load(disk_fact_file)
device_links_data = json.load(device_links_file)
device = []
for p in disk_fact_data['guest_disk_facts']:
if disk_fact_data['guest_disk_facts'][p]['controller_key'] == 1000 :
if disk_fact_data['guest_disk_facts'][p]['unit_number'] == 3:
uuid = disk_fact_data['guest_disk_facts'][p]['backing_uuid'].split('-')[4]
for key, value in device_links_data['ansible_facts']['ansible_device_links']['ids'].items():
for d in device_links_data['ansible_facts']['ansible_device_links']['ids'][key]:
if uuid in d:
if key not in device:
device.append(key)
if len(device) == 1:
json_data={
"device_id": "/dev/" + device[0]
}
return True, json_data
else:
return False
check, jsonData = find_uuid()
def main():
module = AnsibleModule(argument_spec={})
if check:
module.exit_json(changed=True, ansible_facts=jsonData)
else:
module.fail_json(msg="error find device")
main()
我想在其他任务上使用 device_id 变量。我想用 module.exit_json 方法处理,但我该怎么做?
最佳答案
I want to use device_id variable on the other tasks
您正在寻找的东西是 register:
,以便使该值持久保存到运行该任务的主机的“主机事实”中。然后,您可以使用“推”模型,在该模型中,您将这个事实设置在您感兴趣的所有其他主机上,或者您可以使用“拉”模型,其中感兴趣的主机可以在他们需要时伸出手来获取值(value).
让我们看看这两种情况,以便进行比较。
首先,捕获该值,为了便于讨论,我将使用名为“alpha”的主机:
- hosts: alpha
tasks:
- name: find the uuid task
# or whatever you have called your custom task
find_uuid:
register: the_uuid_result
现在输出可用在主机“alpha”上作为 {{ vars["the_uuid_result"]["device_id"] }}
将是 /dev/sdd
在你上面的例子中。也可以缩写为 {{ the_uuid_result.device_id }}
在“推送”模型中,您现在可以遍历所有主机,或仅遍历特定组中的主机,这些主机也应该接收到 device_id
事实;对于这个例子,让我们定位一个名为“need_device_id”的现有主机组:
- hosts: alpha # just as before, but for context ...
tasks:
- find_uuid:
register: the_uuid_result
# now propagate out the value
- name: declare device_id fact on other hosts
set_fact:
device_id: '{{ the_uuid_result.device_id }}'
delegate_to: '{{ item }}'
with_items: '{{ groups["need_device_id"] }}'
最后,相反,如果主机“beta”需要查找主机“alpha”发现的 device_id
,则可以获取并提取该事实:
- hosts: alpha
# as before
- hosts: beta
tasks:
- name: set the device_id fact on myself from alpha
set_fact:
device_id: '{{ hostvars["alpha"]["the_uuid_result"]["device_id"] }}'
您还可以在“alpha”上运行相同的 set_fact: device_id:
业务,以防止名为 the_uuid_result
的“本地”变量从 alpha 的剧本中泄露出来。由你决定。
关于linux - 来自另一个任务输出的ansible set fact,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57680365/
170!接近浮点 double 的极限:171!会溢出。 不过170!长度超过 300 位。 因此,有 没办法那170!可以用浮点数精确表示。 然而 Excel 返回 170 的正确答案!/169!
我正在尝试访问与我的目标主机不同的主机的 Ansible 事实。以下是我的示例剧本。但是当我运行下面的游戏时,不会为 util 服务器收集事实。谁能帮我,我怎样才能访问不同服务器的事实? --- -
我有点难以理解 not函数与模式匹配交互。我想写一个模式匹配,“这样的事实不存在”。 也就是说,我想要的是: (defrule init-count (not (highest-debt ?)
我有一个经常使用 observeChanges 的包 ( yeputons/meteor-smart-publish ),我想添加一个测试(我现在使用 TinyTest),它允许我确保所有这些观察者都
我遇到了一些 ansible 模块的问题。我这样编写自定义模块及其输出: ok: [localhost] => { "msg": { "ansible_facts": {
鉴于这些事实: pos(a,1). pos(b,2). pos(c,3). 我想找到一个角色的位置。例如,pos(b,P) P=2。 将这些事实转换为列表并进行成员资格检查是否更好,如下所示: mem
我们有一个文件夹,里面装满了需要设置为单个 URI 的 JSON 文本文件。目前这一切都是用一个 xUnit "[Fact]"完成的,如下所示 [Fact] public void TestAllCa
我正在尝试编写一个函数,它接受任何 TList 并返回 TList 的所有元素的字符串表示形式。 我尝试了这样的功能 function ListToString(list:TList):String;
我是 Scheme 的新手,所以请原谅这个问题:我有一个计算数字列表的阶乘的函数,但它在结果中的最后一个数字之前给了我一个句点。我哪里错了? 代码: #lang scheme (define fac
举个例子:我有一个数据库来检测访问者(机器人等),并且由于并非每个访问者都具有相同数量的“凭据”,因此我制作了一个“动态”表,如下所示:请参阅 fiddle :http://sqlfiddle.com
示例: [Fact] public void FooTest(){ } VS2015 中的结果:测试通过 我在 .NET 4.6 Framework C# 项目中使用 xUnit NuGet v2.4
我在/etc/ansible/facts.d/mount.fact 中创建了以下本地事实文件: [ { "name": "/mastersystem",
我是 puppet 和 ruby 的新手,只是尝试编写自定义事实但是......遇到以下问题 Facter.add("vsphere_installed") do confine :opera
我对 python 中函数装饰器的理解(我可能是错的)是它们应该添加副作用并修改函数的返回值。现在装饰器被添加到要装饰的函数的函数定义之上或通过赋值。这是一个小例子: def print_args_d
在为 future 几年设置 C++ 单元测试框架的过程中,我们入围了 GoogleTest 和 CppUnit。我对这两者都有一些经验,我最喜欢的是 GoogleTest。无论如何,为了说服我的老板
我有一个应用程序,我知道它可以制作一个很棒的多维数据集,并且比标准的平面 Reporting Services 报表更有用。我们即将与一名顾问一起进入 BI 领域,但我想在此之前先试一试,主要是因为我
我是音频播放的新手,并且整天都在阅读wav文件规范。我编写了一个简单的程序来提取文件头,但是现在我的程序始终返回false,因为DataID始终以“事实”而不是“数据”形式返回。 我认为有几种原因可能
我正在使用 RDBMS 构建一个穷人的数据仓库。我已确定要记录的关键“属性”: 性别(真/假) 人口统计分类(A、B、C 等) 出生地 出生日期 体重(每日记录):正在记录的事实 我的要求是能够运行“
我已将带有我想要的事实的 Pojo 模型的 .jar 导入到我的 Guvnor 存储库中。其中一个类有一个带参数的构造函数,这是我无法在给定部分的测试场景中实例化的唯一事实。我得到一个指向该类的 In
在官方 Java 指南中 “Programming with assertions”据称(页面最后一段) Few programmers are aware of the fact that a cl
我是一名优秀的程序员,十分优秀!