首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python3编辑yaml参数

使用python3编辑yaml参数
EN

Stack Overflow用户
提问于 2021-05-05 19:06:20
回答 1查看 32关注 0票数 0

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

代码语言:javascript
复制
imagePullSecrets: 
  - dockerpullsecret
container:
  imagePullPolicy: IfNotPresent

这是一个文件的示例:

代码语言:javascript
复制
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

这是我想要的输出:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2021-05-05 20:56:02

如果你一心想要一个Python解决方案,那么下面这样的代码可能就行了:

代码语言:javascript
复制
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就地编辑它们。

代码语言:javascript
复制
for file in *.yaml; do 
  yq -i e '.spec.template.imagePullSecrets = ["dockerpullsecret"] | .spec.template.container.imagePullPolicy = "IfNotPresent"' "$file"
done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67400076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档