【问题标题】:yaml params edit with python3使用 python3 编辑 yaml 参数
【发布时间】:2021-07-27 16:53:15
【问题描述】:

我有一个 yaml 文件列表,我想以同样的方式对其进行编辑。将以下块放在每个文件的 spec.template.imagePullSecret 和 spec.template.container.imagePullPolicy 下:

imagePullSecrets: 
  - dockerpullsecret
container:
  imagePullPolicy: IfNotPresent

这是一个文件的示例:

apiVersion: argoproj.io/v1alpha1
kind: Sensor
meta data:
  name: sensor-finanda-ci
  namespace: argo-events
spec:  
  template:
    serviceAccountName: argo-events-sa
  dependencies:
    - name: eventsource-iv
      eventSourceName: eventsource-iv
      eventName: iv

这是我想要的输出:

apiVersion: argoproj.io/v1alpha1
kind: Sensor
meta data:
  name: sensor-finanda-ci
  namespace: argo-events
spec:  
  template:
    serviceAccountName: argo-events-sa
    imagePullSecrets: 
      - dockerpullsecret
    container:
      imagePullPolicy: IfNotPresent
  dependencies:
    - name: eventsource-iv
      eventSourceName: eventsource-iv
      eventName: iv

【问题讨论】:

  • 您需要发布您尝试过的内容以供他人帮助
  • 我什至不知道如何开始,我正在寻找建议.....

标签: python python-3.x yaml


【解决方案1】:

如果您一心想使用 Python 解决方案,可能会这样做:

import os
import yaml

for yaml_filename in [filename for filename in os.listdir('.') if filename.endswith('.yaml')]:
    with open(yaml_filename, 'r') as yaml_file:
        yaml_obj = yaml.safe_load(yaml_file)

    if 'spec' not in yaml_obj:
        yaml_obj['spec'] = {"template": {}}
    if 'template' not in yaml_obj['spec']:
        yaml_obj['spec']['template'] = {"imagePullSecrets": [], "container": {}}
    if 'container' not in yaml_obj['spec']['template']:
        yaml_obj['spec']['template']['container'] = {}

    yaml_obj['spec']['template']['imagePullSecrets'] = ["dockerpullsecret"]
    yaml_obj['spec']['template']['container']['imagePullPolicy'] = 'IfNotPresent'

    with open(yaml_filename, 'w') as yaml_file:
        yaml.dump(yaml_obj, yaml_file)

如果您对命令行实用程序持开放态度,这会更简洁:

遍历文件并使用yq 就地编辑它们。

for file in *.yaml; do 
  yq -i e '.spec.template.imagePullSecrets = ["dockerpullsecret"] | .spec.template.container.imagePullPolicy = "IfNotPresent"' "$file"
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-14
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    相关资源
    最近更新 更多