You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible:如何从OpenShift 'oc'命令响应中获取结构化YAML?

解决方案

方法一:使用Ansible官方K8s模块(推荐)

直接用Ansible的k8s_info模块获取OpenShift路由,无需调用oc命令,能直接拿到结构化数据,处理更可靠。

示例代码:

- name: 获取OpenShift路由信息
  k8s_info:
    host: "{{ os_project.host }}"
    api_key: "{{ os_token }}"
    namespace: "{{ os_project.project }}"
    kind: Route
    api_version: route.openshift.io/v1
  register: route_data

- name: 生成按---分隔的路由配置文件
  copy:
    content: |
      {% for route in route_data.resources %}
      {{ route | to_yaml }}
      ---
      {% endfor %}
    dest: "processed_templates/os_backup/os_dump_{{ version }}.yml"

说明:

  • k8s_info直接返回路由的结构化列表,存储在route_data.resources中
  • 通过Jinja2循环遍历每个路由,用to_yaml转为YAML格式,每个路由后添加---分隔符

方法二:改进现有Shell模块的实现

如果必须使用oc命令,需将返回的stdout解析为YAML结构,提取items列表后再处理:

示例代码:

- name: 获取K8s路由列表
  register: getItems
  shell: oc --server {{ os_project.host }} --namespace {{ os_project.project }} --token {{ os_token }} get -o yaml route.route.openshift.io

- name: 生成按---分隔的配置文件
  copy:
    content: |
      {% for item in (getItems.stdout | from_yaml).items %}
      {{ item | to_yaml }}
      ---
      {% endfor %}
    dest: "processed_templates/os_backup/os_dump_{{ version }}.yml"

说明:

  • 用from_yaml把oc命令返回的字符串转为Ansible可处理的字典结构
  • 提取其中的items列表,循环每个对象转为YAML,添加分隔符---

两种方法最终都会生成你需要的格式:每个路由的完整YAML定义用---分隔,不含外层的List结构。

内容的提问来源于stack exchange,提问作者malltaf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:03:22