有没有办法在yaml中使用占位符,如下所示:
foo: &FOO
<<propname>>:
type: number
default: <<default>>
bar:
- *FOO
propname: "some_prop"
default: "some default"
Run Code Online (Sandbox Code Playgroud) 在YAML中是否有自定义标记,以便在YAML文件中包含YAML文件?
#E.g.:
--- !include
filename: another.yml
Run Code Online (Sandbox Code Playgroud)
前一段时间问了一个类似的问题,没有相关的答案.
我想知道是否有是Ruby一些自定义标签类似这样一个为Python.
我希望YAML文件包含一个include,类似于这个问题,但是使用Snakeyaml: 我如何在另一个文件中包含一个YAML文件?
例如:
%YAML 1.2
---
!include "load.yml"
!include "load2.yml"
Run Code Online (Sandbox Code Playgroud)
我遇到了很多麻烦.我定义了构造函数,我可以导入一个文档,但不能导入两个文档.我得到的错误是:
Exception in thread "main" expected '<document start>', but found Tag
in 'reader', line 5, column 1:
!include "load2.yml"
^
Run Code Online (Sandbox Code Playgroud)
有一个包含,Snakeyaml很高兴它找到了一个EOF并处理导入.有两个,它不开心(上图).
我的java源代码是:
package yaml;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.AbstractConstruct;
import org.yaml.snakeyaml.constructor.Constructor;
import org.yaml.snakeyaml.nodes.Node;
import org.yaml.snakeyaml.nodes.ScalarNode;
import org.yaml.snakeyaml.nodes.Tag;
public class Main {
final static Constructor constructor = new MyConstructor();
private static class ImportConstruct extends AbstractConstruct {
@Override
public Object construct(Node node) {
if (!(node …Run Code Online (Sandbox Code Playgroud) 如何添加YAML指向例如另一个网站的文件的链接?描述字段没问题.
我阅读了YAML文档,但找不到"外部引用"的引用.
我们在一个团队中使用 Gitlab 项目。每个开发人员在云端都有自己的 Kubernetes 集群,在 GitLab 中有自己的分支。我们使用 GitLab-CI 自动构建新容器并将它们部署到我们的 Kubernetes 集群。
目前我们有一个.gitlab-ci.yml看起来像这样的东西:
variables:
USERNAME: USERNAME
CI_K8S_PROJECT: ${USERNAME_CI_K8S_PROJECT}
REGISTRY_JSON_KEY_FILE: ${USERNAME_REGISTRY_JSON_KEY_FILE}
[...]
stages:
- build
- deploy
- remove
build-zeppelin:
stage: build
image: docker:latest
variables:
image_name: "zeppelin"
only:
- ${USERNAME}@Gitlab-Repo
tags:
- cloudrunner
script:
- docker login -u _json_key -p "${REGISTRY_JSON_KEY_FILE?}" https://eu.gcr.io
- image_name_fqdn="eu.gcr.io/${CI_K8S_PROJECT?}/${image_name?}:latest"
- docker build -t ${image_name_fqdn?} .
- docker push ${image_name_fqdn?}
- echo "Your new image is '${image_name_fqdn?}'. Have fun!"
[...]
Run Code Online (Sandbox Code Playgroud)
因此,一开始我们通过使用 USERNAME 前缀来引用重要信息。这工作得很好,但有问题,因为我们需要在来自另一个用户的每个拉取请求之后更正它们。
因此,我们寻找一种方法来使 gitlab-ci 文件对每个开发人员都相同,同时仍然引用一些针对每个开发人员不同的 …
我们有一组在应用程序的不同实例之间共享的服务器,并且希望它们的列表成为一个单独的文件,以及其他特定于实例的清单(包括它)。
(我知道,这可以通过动态库存来完成,但可以这么说,这些都是代码,我们希望我们的服务器列表保留数据。)
对于 INI 库存,这是不可能的,但对于 YAML 来说,这是非常接近的。例如,这个答案显示了如何通过!include向 Python 的 YAML 解析器添加处理程序来完成此操作。然后我们可以这样写:
all:
group1:
host1:
host2:
sharedservers: !include shared-servers.yaml
Run Code Online (Sandbox Code Playgroud)
如何将此功能添加到自己的 Ansible 存储库中——最好不要实现全新的库存插件(尽管从 Ansible 的现有插件继承也可以)?
我想要一个基本配置文件,其他配置文件使用它来共享通用配置。
例如,如果我有一个base.yml文件
foo: 1
bar:
- 2
- 3
Run Code Online (Sandbox Code Playgroud)
然后是第二个some_file.yml文件
foo: 2
baz: "baz"
Run Code Online (Sandbox Code Playgroud)
我希望最终得到一个合并的配置文件
foo: 2
bar:
- 2
- 3
baz: "baz"
Run Code Online (Sandbox Code Playgroud)
编写处理标签的自定义加载器很容易!include。
class ConfigLoader(yaml.SafeLoader):
def __init__(self, stream):
super().__init__(stream)
self._base = Path(stream.name).parent
def include(self, node):
file_name = self.construct_scalar(node)
file_path = self._base.joinpath(file_name)
with file_path.open("rt") as fh:
return yaml.load(fh, IncludeLoader)
Run Code Online (Sandbox Code Playgroud)
然后我可以解析一个!include标签。所以如果我的文件是
inherit:
!include base.yml
foo: 2
baz: "baz"
Run Code Online (Sandbox Code Playgroud)
但现在基本配置是一个映射。即如果我加载文件我最终会得到
foo: 1
bar:
- 2
- 3
Run Code Online (Sandbox Code Playgroud)
但是如果我不将标签作为映射的一部分,例如
!include base.yml
foo: 2
baz: …Run Code Online (Sandbox Code Playgroud) 因此,对于我在C#问题中解析文本,我得到了YAML的指导.我正在推荐这个图书馆的墙,所以这是一个快速的.
heading:
name: A name
taco: Yes
age: 32
heading:
name: Another name
taco: No
age: 27
Run Code Online (Sandbox Code Playgroud)
等等.这有效吗?
Spring Boot和MySQL在这里.试图让我的Spring Boot应用程序使用Liquibase进行数据库迁移,并在文档中看到Spring Boot 内置了对Liquibase的支持.
但是在阅读完这些文档之后,我还有几个相关的问题:
db/changelog/db.changelog-master.yaml文件的基本目的是什么?是存储Liquibase配置(指示Liquibase的行为),还是我应该将实际的顺序SQL更改(" 迁移 ")本身放在哪里?
src/main/resources/migrations目录并将我的迁移更改存储为单独的SQL文件,如下所示:src/main/resources/migrations/001-schema.sqlsrc/main/resources/migrations/002-init.sqlsrc/main/resources/migrations/003-changing-account-types.sql如何在 YAML 文件中使用环境变量?
我正在使用 kubectl 创建一个命名空间,并想知道如何使用变量而不是testnamespace像name: $var
apiVersion: v1
kind: Namespace
metadata:
name: testnamespace
spec:
finalizers:
- kubernetes
Run Code Online (Sandbox Code Playgroud) 我花了一些时间阅读go-yaml的代码和文档,但除了分叉项目之外,我还没有找到任何方法来做到这一点。
我想扩展 YAML 解组器,以便它可以接受自定义 YAML 标记(!include <file>在本例中),这反过来又允许我添加对包含文件的支持。这可以使用其他 YAML 库轻松实现,就像这个答案中一样。
有没有办法使用库(或另一个 yaml 库)的公共接口来完成此任务?
yaml ×9
ansible ×1
config ×1
gitlab-ci ×1
go ×1
include ×1
indirection ×1
kubectl ×1
liquibase ×1
python ×1
pyyaml ×1
ruamel.yaml ×1
ruby ×1
snakeyaml ×1
spring-boot ×1
validation ×1
well-formed ×1