Pyyaml:修改aws-auth-cm.yaml,保留多行字符串

2023-12-06

我正在尝试在 python 中加载 YAML 文件,修改它并将其转储回来。 YAML 看起来像这样:

data:
  mapRoles: |
    - username: system:node:{{EC2PrivateDNSName}}
      groups:
      - system:bootstrappers
      - system:nodes
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system

我想修改它以便输出文件包含一个新行rolearn: awsarn在地图角色中:

data:
  mapRoles: |
    - username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
      rolearn: awsarn
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system

但我得到的输出是,mapRoles 值像字符串一样被引用,并包含文字\n:

apiVersion: v1
data:
  mapRoles: "- username: system:node:{{EC2PrivateDNSName}}\n  groups:\n    - system:bootstrappers\n\
    \    - system:nodes\n  rolearn: arnaws"
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system

我正在使用的代码:

with open ('/tmp/aws-auth-cm.yaml') as f:
  content = yaml.safe_load(f)
  content['data']['mapRoles'] = content['data']['mapRoles'] + '  rolearn: awsarn' 
with open("/tmp/aws-auth-cm.yaml", "w") as f:
  yaml.safe_dump(content, f, default_flow_style=False)

我也尝试过使用yaml.safe_dump(content, f, default_flow_style=False, default_style='|')那么所有的值都有 |- 并且键用双引号引起来:

"apiVersion": |-
  v1
"data":
  "mapRoles": |-
    - username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
      rolearn: arnaws
"kind": |-
  ConfigMap
"metadata":
  "name": |

有没有办法可以应用 style='|'只是字符串并确保键没有被引号引起来?


您可以尝试使用 PyYAML 执行此操作,但您需要加载块样式文字标量 (这就是这样的多行结构所表示的|被称为)中 字符串的子类,确保可以修改它,然后在转储时使用特殊的表示器 对于再次转储为文字标量的子类。

实现这一点的简单方法是从 PyYAML 升级到ruamel.yaml(免责声明:我是该包的作者),它不仅保留 文字块它还支持最新的 YAML 1.2 规范(2009 年发布), 保留注释和标签、整数和浮点格式以及(可选)多余的引号:

import sys
import ruamel.yaml


yaml = ruamel.yaml.YAML()
with open('aws-auth-cm.yaml') as f:
    content = yaml.load(f)
content['data']['mapRoles'] += '  rolearn: awsarn\n'
with open('aws-auth-cm.yaml', 'w') as f:
    yaml.dump(content, f)

这使:

data:
  mapRoles: |
    - username: system:node:{{EC2PrivateDNSName}}
      groups:
      - system:bootstrappers
      - system:nodes
      rolearn: awsarn
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system

请注意,我通过使用节省了一些打字+=改变 从文字标量加载的“字符串”。我添加了一个换行符 添加字符串的末尾,因为否则你的文字标量将是 介绍与|-, the -块咀嚼 操作员表明剥离.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pyyaml:修改aws-auth-cm.yaml,保留多行字符串 的相关文章

随机推荐

  • 如何在android中的onResponse方法之外访问响应值

    我正在开发一个安卓项目 我从 google api 得到了响应并解析了 json 但我想返回 onResponse 方法之外的值 这对我来说现在似乎是不可能的 下面是我的代码 我已经看过了answer这里 但我想要这个异步方法之外的值 是否
  • R - 并行化错误,checkCluster(cl) - 不是有效的集群

    这段代码给我带来了一个错误 Error in checkCluster cl not a valid cluster library parallel numWorkers lt 8 cl lt makeCluster numWorkers
  • 一个类的 bean 的多个实例,填充了 application.properties 中的值

    我打算写一些HealtCheckContributors对于 Spring Boot 应用程序 使用弹簧启动执行器 因此 我实现了其中两个 当然 它们旨在检查不同应用程序的运行状况 但具有几乎相同的结构 除了配置属性之外 SonarQube
  • Angular.js 缓存 $compiled 模板/ng-repeat 内指令的渲染性能

    我有一个渲染表格单元格的指令 看看我在这里编译它的方式 基本上使用 compile inside link fn Angular js 指令模板使用父 继承范围中的变量 现在这在两个内部使用ng repeats 一个用于行 一个用于列 所以
  • 哪些 Java SE 版本可与 android studio 3.1 配合使用?

    哪个 Java SE 版本适用于 android studio 3 1 我最近在 Windows 10 上安装了 Java SE 10 但 android studio 总是显示 Gradle 同步失败消息 并显示以下错误 Could no
  • jQuery 单选按钮显示 div

    嘿伙计们 如果选中此单选按钮则显示此 div 我可以使用什么功能来表示 提前致谢 HTML
  • 如何在交互式 Python 中查看整个命令历史记录?

    I m working on the default python interpreter on Mac OS X and I Cmd K cleared my earlier commands I can go through them
  • 使用 WMI 更改亮度

    我尝试过这个 Windows 示例从远程计算机获取 WMI 数据还有这个调用提供者方法 并且两者都在我的计算机上正常工作 不过 我尝试使用 WMI 来更改亮度 但在本部分的第 6 步中出现错误 Get the Next Object fro
  • Android 如何以编程方式添加/配置 Exchange 设置?

    是我的问题还是我找不到任何有关如何以编程方式添加 配置 Microsoft Exchange 的示例 这好像是 客户经理 addAccount String accountType String authTokenType String r
  • Facebook feed 对话框:允许用户选择目标页面或组

    我通过 JavaScript 使用 Facebook 提要对话框 var p method feed name Title caption Subtitle 26 02 2013 description My text link windo
  • PostgreSQL 查询性能不佳

    更新 我突然想到 pgAdmin是否有可能计算的不是查询的实际时间 而是在网格中绘制结果所需的时间 我只是使用命令行 psql 执行查询并将结果输出到 txt 文件中 速度非常快 最多 1 2 秒 在这种情况下 问题不是 postgresq
  • 如何在iOS上的某个帧中显示GIF,直到完全加载后才显示,并允许缩放?

    当用户选择 GIF 时 我想在显示 GIF 的所有内容之上呈现一个叠加层 我知道 iOS 上有几种方法可以做到这一点 那里有伟大的UI图像 GIF动画它工作得很好 但对于较长的 GIF 它们非常慢 并且不能以与 UIWebView 相同的速
  • jQuery - 单击按钮时增加计数器的值

    我正在制作一个系统 用户单击按钮 他们的分数就会增加 有一个计数器 我想在单击按钮时增加使用 jQuery 的值 以便页面不需要刷新 我该怎么办呢 update 是按钮 counter 是计数器 在 php 中 增加了某些东西的价值 等效的
  • 为什么将 JavaScript 放在页面的页脚中?

    所以我最近从 ThemeForest 购买并下载了一个模板 我在本地服务器上设置了模板 我使用 codeigniter 生成了带有下拉菜单的导航 我已经正确编码了菜单中的所有内容 我只生成了标题并对其进行了测试 并意识到下拉菜单不起作用 我
  • 如何用html写小数值?

    我想写分数值 如下图 如何在不使用图像的情况下使用 html 编写分数值 注意 我不想要这个 1 1 2 图案 但严格如上图所示 请尝试以下操作 1
  • 象征崩溃

    我使用以下脚本来表示我从用户那里得到的崩溃报告 Developer Platforms iPhoneOS platform Developer Library Xcode Plug ins iPhoneRemoteDevice xcodep
  • 如何在 Xamarin 中更改 MasterMainPage 的导航栏颜色

    我正在构建一个 Xamarin 跨平台应用程序 问题是我想改变颜色NavigationBar of MainPage这是MasterPage里面有一个抽屉菜单 我尝试使用此代码来更改颜色 但导航栏上出现了一个我不想要的额外栏 应用程序 xa
  • Haskell 中给定种子的随机数质量

    我正在玩一个小型 ascii 游戏中的程序生成 并且在 haskell 中遇到了随机数的问题 基本思想是提供一个随机数 该随机数以游戏世界某些部分的 x y 为种子 例如确定那里是否有一棵树 这家伙解释得很好 这是我为每一代尝试不同的种子时
  • Intellij IDEA:如何更改组织导入功能

    我想知道如何避免让 IntelliJ IDEA 自动将包的所有类与 例如 假设我导入了以下类 import java util Arrays import java util Scanner import java util Collect
  • Pyyaml:修改aws-auth-cm.yaml,保留多行字符串

    我正在尝试在 python 中加载 YAML 文件 修改它并将其转储回来 YAML 看起来像这样 data mapRoles username system node EC2PrivateDNSName groups system boot