英文:
error: failed to read input object (not a Template?): error converting YAML to JSON: yaml: mapping values are not allowed in this context
问题
这个错误是什么意思?是因为缩进问题吗?有没有办法自动对齐yaml文件?
我尝试通过对齐等方式修复它,但没有成功,我的Jenkins构建失败了。
- name: SPLUNK_LOG_TOKEN
valueFrom:
secretKeyRef:
name: splunk-secret
key: splunk.token - name: SPLUNK_LOG_URL //这一行有错误
valueFrom:
configMapKeyRef:
name: splunk-config
key: splunk.url
英文:
What does this error mean? Is it due to indentation? Is there any way to auto align yaml files
I tried fixing it by aligning etc but it didn't work and my jenkins build is failing.
- name: SPLUNK_LOG_TOKEN
valueFrom:
secretKeyRef:
name: splunk-secret
key: splunk.token
- name: SPLUNK_LOG_URL //error in this line
valueFrom:
configMapKeyRef:
name: splunk-config
key: splunk.url
答案1
得分: 3
以下是无效的YAML(在两个项目中均如此):
- name: SPLUNK_LOG_TOKEN
valueFrom:
这是因为valueFrom
的缩进比name
更多。因此,YAML认为valueFrom
是标量SPLUNK_LOG_TOKEN
的继续部分。然而,随后有一个:
,它结束了隐式映射键。而在多行标量上下文中,隐式映射键是被禁止的,因此会出错。
是否有办法自动对齐YAML文件?
YAML的缩进是语义的一部分(就像在Python中一样)。您基本上在问是否可以猜测糟糕缩进文件的预期语义。虽然从理论上讲这并非不可能(我的意思是,您可以在StackOverflow上的YAML语法问题上训练一个神经网络;我已经看过这个特定问题无数次了),但我认为目前没有现成可用的解决方案。
您问题的可能解决方案是:
- name: SPLUNK_LOG_TOKEN
valueFrom:
不过,我无法百分之百确定;也许您更希望像这样做:
- name:
id: SPLUNK_LOG_TOKEN
valueFrom:
如果valueFrom
应该是name
的子项。
英文:
The following is invalid YAML (in both items):
- name: SPLUNK_LOG_TOKEN
valueFrom:
This is because valueFrom
is more indented than name
. Thus YAML thinks that valueFrom
is a continuation of the scalar SPLUNK_LOG_TOKEN
. However, a :
follows which ends an implicit mapping key. And implicit mapping keys are forbidden in a multi-line scalar context, hence the error.
> Is there any way to auto align yaml files
Indentation in YAML is part of the semantic (like in Python). You are basically asking whether you can guess the intended semantic for badly indented files. While this is theoretically not impossible (I mean, you could train a neural network on YAML syntax questions on StackOverflow; I have seen this particular problem countless times), I don't think a readily usable solution exists.
The probable solution for your problem is
- name: SPLUNK_LOG_TOKEN
valueFrom:
however, I can't be 100% sure; perhaps you rather want to do something like
- name:
id: SPLUNK_LOG_TOKEN
valueFrom:
if valueFrom
should be a child of name
.
答案2
得分: 2
以下是已翻译的部分:
高亮显示的部分是无效的 YAML 模式。
- name: SPLUNK_LOG_TOKEN
valueFrom:
secretKeyRef:
name: splunk-secret
key: splunk.token
- name: SPLUNK_LOG_URL
valueFrom:
configMapKeyRef:
name: splunk-config
key: splunk.url
如果你喜欢 JSON,你可以尝试这个在线转换器 https://www.json2yaml.com/convert-yaml-to-json
当我刚开始使用 YAML 时,我会写小块的 JSON 数据,然后使用 https://www.json2yaml.com/convert-yaml-to-json 进行转换成 YAML 格式。还有其他在线工具可用,但从个人经验来看,我更喜欢这个。
英文:
The highlighted one is the invalid yaml pattern's.
- name: SPLUNK_LOG_TOKEN
- name: SPLUNK_LOG_URL
.
It should be something like this
- name:
name: SPLUNK_LOG_TOKEN
valueFrom:
secretKeyRef:
name: splunk-secret
key: splunk.token
- name:
name: SPLUNK_LOG_URL
valueFrom:
configMapKeyRef:
name: splunk-config
key: splunk.url
If you are JSON lover like me, then you can try this online converter https://www.json2yaml.com/convert-yaml-to-json
When I was new to yaml, I used to write smaller chunks of JSON data and get it converted using the online https://www.json2yaml.com/convert-yaml-to-json into YAML format.
There are also other tools available online, but from personal experience I preferred this.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论