小编lou*_*ong的帖子

是否可以在 Ansible 中捕获并处理 SSH 连接错误?

我正在使用 ansible 来升级网络设备的软件。安装后,我重新启动盒子,然后使用 ansible 的wait_for模块等待 SSH 恢复,然后使用 do-until 循环运行命令并等待特定的输出字符串:

- name: Wait for box to come back up
  local_action: wait_for host={{ ansible_ssh_host | default(inventory_hostname) }}
      search_regex=OpenSSH
      port=22
      delay=20
      timeout=600

- name: Wait for box to enter the running phase
  shell: tmsh -q -a show sys mcp
  changed_when: False
  ignore_errors: True
  register: mcp_wait
  until: mcp_wait.stdout.find("running") != -1
  retries: 1200
  delay: 10
Run Code Online (Sandbox Code Playgroud)

问题是,对于某些软件升级,设备将重新启动两次。它出现,SSH 启动,然后安装一些固件更新,并第二次重新启动。这导致我的剧本出错。任务wait_for成功,然后 do-until 任务开始循环,但盒子的第二次重新启动会导致此 do-until 命令失败并出现错误SSH Connection timed out

TASK: [appliance | Wait for …
Run Code Online (Sandbox Code Playgroud)

ansible

5
推荐指数
1
解决办法
3492
查看次数

在带有 Jmespath 的多选哈希中使用来自 json src 文档的键

我有一个看起来像这样的源 json 文档:

# Source json
{
  "nics": {
    "vlan_internal": {
      "mac": "aa:aa:aa:aa:aa:aa"
    },
    "vlan_external": {
      "mac": "aa:aa:aa:aa:aa:bb"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

使用ansible的json_query过滤器(使用jmespath),我想操作上面的json,使输出的json文档看起来像这样:

# Desired output json
{
  "vlan_internal": "aa:aa:aa:aa:aa:aa",
  "vlan_external": "aa:aa:aa:aa:aa:ab"
}
Run Code Online (Sandbox Code Playgroud)

似乎我应该使用某种类型的多选哈希,但我找不到将 vlan 名称(它们是源 json 文档中的哈希键,而不是哈希值)放入输出 json 文档的好方法。

我不会提前知道 vlan 的名称,所以我不能硬编码vlan_internalvlan_external进入 jmespath 表达式。

我最接近的是这个 jmespath 表达式:

nics.{ vlans: keys(@), macs: *.mac }
Run Code Online (Sandbox Code Playgroud)

这会产生一个几乎有用的输出 json 文档:

{
  "vlans": [
    "vlan_internal",
    "vlan_external"
  ],
  "macs": [
    "aa:aa:aa:aa:aa:aa",
    "aa:aa:aa:aa:aa:bb"
  ]
}
Run Code Online (Sandbox Code Playgroud)

如果保证 vlan 名称列表的顺序和 mac 地址列表的顺序与源 json …

json ansible jmespath

5
推荐指数
1
解决办法
558
查看次数

标签 统计

ansible ×2

jmespath ×1

json ×1