小编Ant*_*hon的帖子

如果有“!”,如何使用 PyYAML 解析 YAML 在 YAML 中

我有一个 YAML 文件,我只想解析description变量;但是,我知道我的 CloudFormation 模板(YAML 文件)中的感叹号给 PyYAML 带来了麻烦。

我收到以下错误:

yaml.constructor.ConstructorError: could not determine a constructor for the tag '!Equals'

该文件有很多!Ref!Equals. 我怎样才能忽略这些构造函数并获得我正在寻找的特定变量——在这种情况下,description变量。

python constructor yaml pyyaml aws-cloudformation

3
推荐指数
2
解决办法
3686
查看次数

Node.js 写入 YAML 文件

我正在使用 Node.js,但无法弄清楚如何读取 YAML 文件、替换其中的值并将更新后的值写入 YAML 文件。

我目前正在使用模块“yamljs”,它允许我加载 YAML 文件,并且我已经设法编辑加载的对象中的值。

我唯一需要帮助的部分是如何写入 YAML 文件。由于某种原因,我无法在任何地方找到解决方案,我什至不确定我是否可以为此使用该模块。

该模块确实有一些命令行工具,但我也不太确定如何使用这些工具。

yaml module file-writing node.js

3
推荐指数
1
解决办法
5516
查看次数

合并嵌套的 Yaml 数组

这是 Ben 帖子的后续内容,有 YAML 语法用于共享列表或地图的一部分,尽管我在合并两个数组后更进一步并第三次继承。

我正在创建一个docker-compose.yml文件并想要做锚点和别名

x-template:
  base-template: &base-template
    environemt:
      FOO=BAR
  custom-template-1: &custom-template1
    <<: *base-template
    environment+:
      FOO2=BAR2

services:
  service-1:
    <<: *custom-template1
Run Code Online (Sandbox Code Playgroud)

但我得到了错误

Unsupported config option for services.service-1: 'environment+'
Run Code Online (Sandbox Code Playgroud)

如果我不使用environment+:custom-tamplate-1:,如果我定义级别,或者environment+:service-1:它工作的水平。

我希望结果是

services:
  service-1:
    environment:
      FOO:BAR
      FOO2:BAR2
Run Code Online (Sandbox Code Playgroud)

有可能实现我想要的吗?

arrays dictionary yaml docker-compose

3
推荐指数
1
解决办法
3999
查看次数

在 Python 中漂亮地将 2D 数组转储到 YAML

假设我有一个像这样定义的二维数组:

import sys

from ruamel.yaml import YAML

yaml = YAML()
yaml.version = (1,2)

def main():
    data = {
        "foo": [
            [1,2,3],
            [4,5,6]
        ]
    }
    yaml.dump(data, sys.stdout)

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

我想输出一个“可读”、有效的 YAML 文件,其中每个“行”位于单独的行上:

"foo":
- [1,2,3]
- [4,5,6]
Run Code Online (Sandbox Code Playgroud)

甚至

"foo": [
  [1,2,3],
  [4,5,5]
]
Run Code Online (Sandbox Code Playgroud)

我已经研究过ruamel.yaml,但默认行为是每一列都在单独的行上,虽然有效,但不易阅读:

%YAML 1.2
---
foo:
- - 1
  - 2
  - 3
- - 4
  - 5
  - 6
Run Code Online (Sandbox Code Playgroud)

python yaml ruamel.yaml

3
推荐指数
1
解决办法
5757
查看次数

使用 kubectl 命令在 YAML 中使用环境变量

如何在 YAML 文件中使用环境变量?

我正在使用 kubectl 创建一个命名空间,并想知道如何使用变量而不是testnamespacename: $var

apiVersion: v1
kind: Namespace
metadata:
  name: testnamespace
spec:
  finalizers:
  - kubernetes
Run Code Online (Sandbox Code Playgroud)

kubectl

3
推荐指数
1
解决办法
5860
查看次数

如何在 Prometheus 中使用两个指标执行查询?

我正在使用 Prometheus 从 Apache Flink 查询指标。我想测量 Map 函数每秒输入和输出的记录数。当我在 Prometheus 中查询两个不同的指标时,图表只显示其中之一。

flink_taskmanager_job_task_operator_numRecordsInPerSecond{operator_name="Map"} 
or flink_taskmanager_job_task_operator_numRecordsOutPerSecond{operator_name="Map"}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明 如果我将运算符更改orand. 该图表仅显示第一个 ( flink_taskmanager_job_task_operator_numRecordsInPerSecond)。我也尝试过编辑 Prometheus 配置文件,/etc/prometheus/prometheus.yml但我对 Prometheus 没有太多经验,而且我的配置有问题。我的解决方案基于这篇文章

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'node_exporter'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9100']   
  - job_name: 'flink'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9250', 'localhost:9251', '192.168.56.20:9250']
    metrics_path: /
# HOW TO ADD THE OPERATOR NAME ON THE METRIC NAME?
    metric_relabel_configs:
      - source_labels: [__name__] …
Run Code Online (Sandbox Code Playgroud)

prometheus

3
推荐指数
2
解决办法
1万
查看次数

AWS CloudFormation 安全组和网络接口错误、参数组合无效

每当我启动堆栈时(可能未在同一请求中指定网络接口和实例级安全组),我都会收到此错误,并且无法找出问题所在,即使在进行更改并在线查看问题之后也是如此。

我的堆栈包括公共子网中的 2 个 ec2 实例和私有子网中的 2 个 ec2 实例。网络服务器(公共)都有弹性 IP,并且每个服务器都有一个单独的安全组。

我尝试将 SecurityGroupIds 交换为 SecurityGroups 但这并没有改变错误。我也尝试完全删除 Groupset,出现同样的错误。

WebServerInstance:
    Type: 'AWS::EC2::Instance'
    Properties:
      UserData: !Base64 
        'Fn::Join':
          - ''
          - - WebEIP=
            - !Ref WebEIP
      ImageId: ami-d7576bc1
      InstanceType: t2.micro
      KeyName: !Ref KeyName
      NetworkInterfaces:
        - AssociatePublicIpAddress: 'true'
          DeleteOnTermination: 'true'
          DeviceIndex: '0'
          GroupSet:
            - !Ref PublicSecurityGroup
          PrivateIpAddress: 10.1.1.100
          SubnetId: !Ref PublicSubnetAZ1
      SecurityGroupIds:
        - !Ref PublicSecurityGroup
Run Code Online (Sandbox Code Playgroud)

启动此堆栈后,大多数资源都会被创建,除非它到达 WebServerInstance1 和 WebServerInstance2(公共子网中的 ec2 实例),其中错误为

不能在同一请求上指定网络接口和实例级安全组(服务:AmazonEC2;状态代码:400;错误代码:InvalidParameterCombination

amazon-ec2 amazon-web-services amazon-vpc

3
推荐指数
1
解决办法
1万
查看次数

YYYYMMDD yaml 定义上的日期格式

我有一个要求,其中请求以 YYYYMMDD 格式传递日期。基于 swagger 文档,在字符串类型下定义的日期归档。但是,它遵循 RFC 3339,第 5.6 节,文档(例如 2018-03-20 作为格式)

下面的代码不适用于 yaml。

dateOfBirth:
          type: string
          minLength: 8
          maxLength: 8
          format: date
          example: 19000101
          description: Birth date of the  member in YYYYMMDD format.
Run Code Online (Sandbox Code Playgroud)

如何为 YYYYMMDD 的日期格式定义 YAML 定义。

rest swagger openapi

3
推荐指数
1
解决办法
3899
查看次数

在 python 中禁用 yaml 文件的别名

我有一个问题,我希望防止 YAML 文件中出现别名。无论如何,我可以禁用生成的 YAML 文件中的别名,以实现预期的输出吗?

我当前的 YAML 文件如下:

agents:
-   start: [0, 0]
    goal: [2, 0]
    name: agent0
-   start: [2, 0]
    goal: [0, 0]
    name: agent1
map:
    dimensions: [3, 3]
    obstacles:
    - !!python/tuple [0, 1]
    - !!python/tuple [2, 1]
Run Code Online (Sandbox Code Playgroud)

当我更新每个代理的 YAML 文件时,每当他们达到目标点时,我都会遇到别名是起始值和目标值而不是我想要的值的问题,即为[0,0]开始,[0,0]为目标。

agents:
- start: &id001 [2, 0]
  goal: *id001
  name: agent0
- start: &id002 [0, 0]
  goal: *id002
  name: agent1
map:
  dimensions: [3, 3]
  obstacles:
  - !!python/tuple [0, 1]
  - !!python/tuple [2, 1]
Run Code Online (Sandbox Code Playgroud)

预期输出: …

python yaml ruamel.yaml

3
推荐指数
1
解决办法
2948
查看次数

无法使用 Python 将 AnsibleVault 正确转储到 yaml 中

我有一个 python 字典,其中一个 AnsibleVault 作为值。我似乎无法将其正确转储到具有正确格式的 yaml 输出中。我正在使用该ansible-vault包生成加密数据,如下所示:

from ansible_vault import Vault
import yaml

vault = Vault('secretpassword')
data = "secretvalue"
Run Code Online (Sandbox Code Playgroud)

为了加密数据,我执行以下操作:

password = (vault.dump(data))
Run Code Online (Sandbox Code Playgroud)

这会生成正确的 AnsibleVault

$ANSIBLE_VAULT;1.1;AES256
36323830636261313833333932326661613063663361656362626432303232636463643030396366
3132623365633138613862333034626261336638613233650a653765386332666537613231626537
37666461653439616564343133656263613134643235363539396435616461626338393338616365
3339383030373532310a366662386665326132373535393930663737383136363735646361383066
65623033343262643138633839666237643735366465373932316233373339643835
Run Code Online (Sandbox Code Playgroud)

为了能够在保管库中使用它,我将以下内容附加到它:

$ANSIBLE_VAULT;1.1;AES256
36323830636261313833333932326661613063663361656362626432303232636463643030396366
3132623365633138613862333034626261336638613233650a653765386332666537613231626537
37666461653439616564343133656263613134643235363539396435616461626338393338616365
3339383030373532310a366662386665326132373535393930663737383136363735646361383066
65623033343262643138633839666237643735366465373932316233373339643835
Run Code Online (Sandbox Code Playgroud)

这样我就可以在 host_var 中使用它。然后我将它添加到带有其他一些值的字典中,然后我将使用 yaml 转储这些值。

password = "!vault |\n" + (vault.dump(data))
Run Code Online (Sandbox Code Playgroud)

直到这里一切看起来都很好,当我尝试将上面的字典输出到 yaml 输出时,事情就出了问题。

hostvar_dict = {
    "a": "1",
    "secret_item": password,
    "b": "2"
}
Run Code Online (Sandbox Code Playgroud)

给我以下输出:

print(yaml.dump(hostvar_dict))
Run Code Online (Sandbox Code Playgroud)

我查看了yaml.dump 的答案,在多行字符串中添加不需要的换行符,但这些没有给出正确的输出。我想要得到的是:

a: '1'
b: '2'
secret_item: '!vault |

  $ANSIBLE_VAULT;1.1;AES256

  36353763313938663936303630306161393433633765353936656139363937373365376563623937

  3762633462623434393036316264646535316233346166660a396634386439656437343162613365 …
Run Code Online (Sandbox Code Playgroud)

python yaml ansible ansible-vault

3
推荐指数
1
解决办法
376
查看次数