name: debug ping result vars: ansible_connection: local result: "{{ item.stdout[0] | parse_cli_textfsm('/usr/share/ansible/plugins/textfsm/ping') | json_query('[0]') | json_format }}" commandsH: { command: "ping {{item.item.vrf}} {{item.item.dest}} " } debug: msg: "{{result}} {{ commandsH }}" when: params is defined and item.skipped is not defined and item is succeeded loop: "{{ pingresult4.results | union(pingresult6.results) }}" - name: save ping vars: ansible_connection: local result: "{{ item.stdout[0] | parse_cli_textfsm('/usr/share/ansible/plugins/textfsm/ping') | json_query('[0]') | json_format }}" set_result: "{{ result is string | ternary(default_result, result) }}" isAlive: { isAlive: "{{ set_result.RATE > 0 | ternary(True, False) }}", RATE: "{{ set_result.RATE }}" } commandsH: { command: "ping {{item.item.vrf}} {{item.item.dest}} " } uri: url: "http://localhost:{{runServerPort}}/kafka/PerfRaw" method: POST body_format: json return_content: yes body: # 毫秒级,date命令不能计算毫秒,直接拼接 # 使用!!强制类型转换为int报错,原因尚未明确 taskId: "{{ id }}" extendInfo: "{{ item.item.extendInfo | default({}) | combine(commandsH) }}" ipFrom: "{{ host.ip }}" ip: "{{ item.item.dest }}" taskFinishTime: "{{ lookup('pipe','date +%s000') }}" result: { rping: "{{ set_result | combine(isAlive) | json_format }}" } taskType: monitor workerType: ansible monitorItemType: "{{item.item.monitorItemType}}" monitorItemList: "{{item.item.monitorItemList}}" register: this failed_when: "'\"code\":0' not in this.content" when: params is defined and item.skipped is not defined and item is succeeded loop: "{{ pingresult4.results | union(pingresult6.results) }}"
时间: 2024-04-27 17:20:51 浏览: 11
这部分代码是将 rping 的结果进行处理并保存到数据库中的过程,其中包含了两个 task。第一个 task 是将 rping 的结果进行格式化并输出到控制台,第二个 task 是将结果保存到数据库中。
在第一个 task 中,使用 `json_query` 函数和 `json_format` 过滤器将 `item.stdout` 中的 ping 结果转换为 JSON 格式,并存储在 `result` 变量中。然后使用 `debug` 模块打印出结果和相应的命令。`loop` 参数用于遍历 `pingresult4.results` 和 `pingresult6.results` 中的所有结果。
在第二个 task 中,使用 `uri` 模块将结果保存到数据库中。`body` 参数是一个 JSON 对象,其中包含了需要保存的信息,例如 taskId、extendInfo、ipFrom、ip、taskFinishTime、result 等字段。这些字段的具体含义需要根据实际情况进行理解和修改。`register` 参数用于将保存结果的返回值存储到 `this` 变量中,`failed_when` 参数用于判断请求是否成功。
注意,这段代码中的 `id`、`runServerPort`、`host.ip`、`item.item.extendInfo`、`item.item.monitorItemType`、`item.item.monitorItemList` 等变量的值需要根据实际情况进行修改。
相关问题
tasks: - name: run rping ipv4 cli_command: command: ping {{vrf}} {{dest}} when: params is not defined and dest | ipv4 ignore_errors: True register: pingresult4 - name: debug ping result vars: ansible_connection: local result: "{{ item.stdout[0] | parse_cli_textfsm('/usr/share/ansible/plugins/textfsm/ping') | json_query('[0]') | json_format }}" commandsH: { command: "ping {{item.item.vrf}} {{item.item.dest}} " } debug: msg: "{{result}} {{ commandsH }}" when: params is defined and item.skipped is not defined and item is succeeded loop: "{{ pingresult4.results }}" - name: save ping vars: ansible_connection: local result: "{{ item.stdout[0] | parse_cli_textfsm('/usr/share/ansible/plugins/textfsm/ping') | json_query('[0]') | json_format }}" set_result: "{{ result is string | ternary(default_result, result) }}" isAlive: { isAlive: "{{ set_result.RATE > 0 | ternary(True, False) }}", RATE: "{{ set_result.RATE }}" } commandsH: { command: "ping {{item.item.vrf}} {{item.item.dest}} " } uri: url: "http://localhost:{{runServerPort}}/kafka/PerfRaw" method: POST body_format: json return_content: yes body: # 毫秒级,date命令不能计算毫秒,直接拼接 # 使用!!强制类型转换为int报错,原因尚未明确 taskId: "{{ id }}" extendInfo: "{{ item.item.extendInfo | default({}) | combine(commandsH) }}" ipFrom: "{{ host.ip }}" ip: "{{ item.item.dest }}" taskFinishTime: "{{ lookup('pipe','date +%s000') }}" result: { rping: "{{ set_result | combine(isAlive) | json_format }}" } taskType: monitor workerType: ansible monitorItemType: "{{item.item.monitorItemType}}" monitorItemList: "{{item.item.monitorItemList}}" register: this failed_when: "'\"code\":0' not in this.content" when: params is defined and item.skipped is not defined and item is succeeded loop: "{{ pingresult4.results }}"
这段代码是关于使用 Ansible 进行网络 ping 监测并将结果保存到 Kafka 的,其中使用了 textfsm 和 json_query 对 ping 命令的结果进行了解析和处理,最终将结果以 JSON 格式保存到了 Kafka 中。同时也使用了一些 Ansible 的特性,如变量注册、循环等。
ModuleNotFoundError: No module named 'ansible_collections.ansible.builtin'
ModuleNotFoundError: No module named 'ansible_collections.ansible.builtin' 错误通常是由于缺少所需的 Ansible 模块或模块路径不正确引起的。请确保安装了正确的 Ansible 版本,并且所需的模块已经正确安装。
您可以通过以下步骤来解决这个问题:
1. 首先,确认您是否已经安装了 Ansible 的最新版本。您可以使用命令 `ansible --version` 来检查已安装的 Ansible 版本。
2. 如果您的 Ansible 版本不是最新的,请考虑升级到最新版本。可以通过包管理器或官方网站获取最新版本的 Ansible。
3. 如果您已经安装了最新版本的 Ansible,但仍然遇到该错误,请确保所需的模块已正确安装。您可以使用命令 `ansible-doc -l` 来列出所有可用的内置模块,并确保 `ansible_collections.ansible.builtin` 模块存在。
4. 如果模块确实缺失,您可以尝试重新安装 Ansible 或使用适当的包管理器来安装缺失的模块。具体安装方法可以参考 Ansible 官方文档或相关教程。
5. 最后,如果问题仍然存在,请检查您的 Ansible 配置文件(ansible.cfg)中的模块搜索路径是否正确配置,并确保路径指向正确的模块位置。