gpt4 book ai didi

python-3.x - 使用 Python3 为 Kubernetes 创建 YAML

转载 作者:行者123 更新时间:2023-12-02 11:39:45 24 4
gpt4 key购买 nike

我正在尝试为 Kubernetes 创建我的角色 YAML 文件,但我遇到了所需 YAML 的这个特定部分:

rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["get", "watch", "list"]

我尝试将其添加为字典,然后将其添加为 -apiGroups 行的字典列表,但这会导致规则的其余参数出现问题。即使我指定了 default_flow_style=False,当我使用 yaml.dump 时,我也遇到了 [] 显示的问题。
def create_role_yml(role_filename, team_name, group_user):
"""
https://kubernetes.io/docs/reference/
access-authn-authz/rbac/#role-and-clusterrole
"""

yml_file_kubernetes_data = dict(

apiVersion='rbac.authorization.k8s.io/v1',
kind='Role',
metadata=dict(
namespace=team_name,
name=group_user,
),
rules={
[{'apiGroups':""}],
'resourses': '[pods]',
'verbs':'[get, watch, list]'}

)

with open(role_filename, 'w') as outfile:
yaml.dump(yml_file_kubernetes_data, outfile,
default_flow_style=False)

我想打开 YAML,它看起来与 Kubernetes 引用 YAML 完全一样:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["get", "watch", "list"]

但我将 [ ] 分开,而没有 - 对于 apiGroup。这是我的结果:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: pod-reader
rules:
apiGroups:
- "" # "" indicates the core API group
resources:
- "pods"
verbs:
-"get"
-"watch"
-"list"

最佳答案

使用可以交给 PyYAML 的 dump() 的正常参数,您尝试做的事情是不可能的。 ,
使用 default_flow_style 只为您提供非常类(class)控制

  • True : 一切都是流式的(类似JSON)
  • False : 一切都是 block 状
  • None : 叶集合为流式,其余 block 式

  • 您引用的 YAML 有两个 block 样式的叶子集合:值
    key metadata ,以及流式叶子集合:
    键值 verbs .如果不入侵代表,您将无法
    在 PyYAML 中实现这一点。

    以您的特定形式生成 YAML 的更简单方法是
    使用知道如何的解析器读取-修改-写入您预期的 YAML
    保留格式。您可以使用 ruamel.yaml ,即
    专门为保存这些东西而开发的(免责声明:我
    我是那个包的作者)。

    如果您的输入文件是 input.yaml :
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    namespace:
    rules:
    - apiGroups: [""] # "" indicates the core API group
    resources: ["pods"]
    verbs: ["get", "watch", 'list']

    ( metadata 下的单个条目是故意的,但您可以同时指定两者,或者如果
    您分配而不是更新)

    以及以下程序:
    import sys
    from pathlib import Path
    import ruamel.yaml

    yaml_str = """\
    """

    in_file = Path("input.yaml")
    out_file = Path("output.yaml")

    team_name = "default"
    group_user = "pod-reader"


    yaml = ruamel.yaml.YAML()
    yaml.preserve_quotes = True
    data = yaml.load(in_file)
    data["metadata"].update(dict(namespace=team_name, name=group_user))
    yaml.dump(data, out_file)

    output.yaml :
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    namespace: default
    name: pod-reader
    rules:
    - apiGroups: [""] # "" indicates the core API group
    resources: ["pods"]
    verbs: ["get", "watch", 'list']

    请注意,除了 block /流样式,还有单/双引号
    从原始和评论被保留。你的缩进
    已经与默认值匹配,因此未明确设置( yaml.indent(mapping=2, sequence=2, offset=0) )。

    关于python-3.x - 使用 Python3 为 Kubernetes 创建 YAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55562664/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com