我有一个 YAML 文件,我只想解析description变量;但是,我知道我的 CloudFormation 模板(YAML 文件)中的感叹号给 PyYAML 带来了麻烦。
我收到以下错误:
yaml.constructor.ConstructorError: could not determine a constructor for the tag '!Equals'
该文件有很多!Ref和!Equals. 我怎样才能忽略这些构造函数并获得我正在寻找的特定变量——在这种情况下,description变量。
我正在使用 Node.js,但无法弄清楚如何读取 YAML 文件、替换其中的值并将更新后的值写入 YAML 文件。
我目前正在使用模块“yamljs”,它允许我加载 YAML 文件,并且我已经设法编辑加载的对象中的值。
我唯一需要帮助的部分是如何写入 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)
有可能实现我想要的吗?
假设我有一个像这样定义的二维数组:
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) 如何在 YAML 文件中使用环境变量?
我正在使用 kubectl 创建一个命名空间,并想知道如何使用变量而不是testnamespace像name: $var
apiVersion: v1
kind: Namespace
metadata:
name: testnamespace
spec:
finalizers:
- kubernetes
Run Code Online (Sandbox Code Playgroud) 我正在使用 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)
如果我将运算符更改or为and. 该图表仅显示第一个 ( 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) 每当我启动堆栈时(可能未在同一请求中指定网络接口和实例级安全组),我都会收到此错误,并且无法找出问题所在,即使在进行更改并在线查看问题之后也是如此。
我的堆栈包括公共子网中的 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
我有一个要求,其中请求以 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 定义。
我有一个问题,我希望防止 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 字典,其中一个 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) yaml ×6
python ×4
ruamel.yaml ×2
amazon-ec2 ×1
amazon-vpc ×1
ansible ×1
arrays ×1
constructor ×1
dictionary ×1
file-writing ×1
kubectl ×1
module ×1
node.js ×1
openapi ×1
prometheus ×1
pyyaml ×1
rest ×1
swagger ×1