我的gatsby站点根目录中的buildspec.yml文件中有以下命令。
version: 0.2
phases:
install:
commands:
- npm i npm@latest -g
- npm install --global gatsby-cli
- npm install
- pip install --upgrade pip
- pip install --upgrade awscli
build:
commands:
- gatsby build
post_build:
commands:
- aws s3 sync public/ s3://stagging
Run Code Online (Sandbox Code Playgroud)
我有2个环境,即停滞和生产。有没有一种方法可以使我的同步命令自动化,以便在执行代码构建时使用某种变量来更改环境。也许我可以通过命令行传递环境名称。
我是Ansible的新手,我不明白所有人如何在Ansible/YAML语法中轻松编写shell命令.可能是我错过了解释得很好的文档页面.
例如:playbook.yml如果我想在远程计算机中执行这些命令,我需要写入什么内容:
sudo apt-get install software-properties-common
sudo apt-key adv –recv-keys –keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
sudo add-apt-repository 'deb http://mariadb.biz.net.id//repo/5.5/ubuntu precise main'
Run Code Online (Sandbox Code Playgroud)
我想会是这样的:
- name: install mariadb
apt: ...
sudo: yes
Run Code Online (Sandbox Code Playgroud) 此链接中的复杂.yaml文件需要输入到 bash 脚本中,该脚本作为在 Amazon Linux 2 的 EC2 实例上运行的自动化程序的一部分运行。请注意,上面链接中的文件包含许多对象,我需要提取这些对象在文件中定义的众多对象之一中定义的环境变量之一。 .yaml
具体来说,如何
192.168.0.0/16将CALICO_IPV4POOL_CIDR变量的值提取到 bash 变量中?
- name: CALICO_IPV4POOL_CIDR
value: "192.168.0.0/16"
Run Code Online (Sandbox Code Playgroud)
我已经阅读了很多关于解析更扁平、更简单的.yaml文件的其他帖子和博客条目,但这些其他示例都没有显示如何提取像这个问题中的valueofCALICO_IPV4POOL_CIDR这样的嵌套值。
我有一个包含三个配置映射的文件,如下所示。
apiVersion: v1
data:
TEST: "one"
kind: ConfigMap
metadata:
name: test-config-one
---
apiVersion: v1
data:
TEST: "two"
kind: ConfigMap
metadata:
name: test-config-two
---
apiVersion: v1
data:
TEST: "three"
kind: ConfigMap
metadata:
name: test-config-three
Run Code Online (Sandbox Code Playgroud)
我试图仅应用于test-config-three集群。我知道我可以将其分解成自己的文件并运行kubectl apply -f test-config-three.yaml,但是有没有办法做到这一点而无需创建新文件?
我希望能够做类似的事情:
cat file.yml | yq <get only test-config-three> | kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)
但yq似乎不支持在文件中查找单个资源。我还研究了kubesplit等工具,但它们倾向于将所有资源输出到单独的文件中。
有没有一种方法可以从包含多个资源的 yaml 文件中隔离并输出单个资源,而无需创建新文件?
更新
感谢@Inian 下面的回答,我能够让这个完整的命令正常工作。
cat file.yml | yq e 'select(.data.TEST == "three")' - | kubectl apply -f -
Run Code Online (Sandbox Code Playgroud) 我有一个.yml文件,其内容如下:
env_values:
stage: build
before_script: some-value
Run Code Online (Sandbox Code Playgroud)
stage所以我需要读取并获取和 的值before_script,因此它们将分别具有build和some-value。
bash 脚本中有一个很好的简单解决方法来读取此文件并获取值吗?
我用jq从json文件中读取数据。我想将结果附加到yaml文件中,但无法正常工作。我对Shell编程很陌生。我的目标是在yaml文件中将“用户”附加到现有的“用户” -Array中。
这是我的json文件:
#$DEFAULTS_FILE
{"users":
[
{"name":"pi",
"gecos": "Hypriot Pirate",
"sudo":"ALL=(ALL) NOPASSWD:ALL",
"shell": "/bin/bash",
"groups":"users,docker,video",
"plain_text_passwd":"pi",
"lock_passwd":"false",
"ssh_pwauth":"true",
"chpasswd": {"expire": false}
},
{"name":"admin",
"gecos": "Hypriot Pirate",
"sudo":"ALL=(ALL) NOPASSWD:ALL",
"shell": "/bin/bash",
"primary-group": "users",
"groups":"users,docker,adm,dialout,audio,plugdev,netdev,video",
"ssh-import-id":"None",
"plain_text_passwd":"pi",
"lock_passwd":"true",
"ssh_pwauth":"true",
"chpasswd": "{expire: false}",
"ssh-authorized-keys": ["ssh-rsa abcdefg1234567890 YOUR_KEY@YOURHOST.local"]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我用它过滤:
cat $DEFAULTS_FILE | jq .users
我不知道如何将json转换为Yaml。
我的预期结果应该是:
users:
- name: pi
gecos: "Hypriot Pirate"
sudo: ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
groups: users,docker,video
plain_text_passwd: pi
lock_passwd: false
ssh_pwauth: true
chpasswd: { expire: false } …Run Code Online (Sandbox Code Playgroud) 我有一个 config_file.yml 文件:
sample:
sql: "select * from dbname.tableName where sampleDate>='2018-07-20';"
config: {'hosts': [!!python/tuple ['192.162.0.10', 3001]]}
sample2:
sql: "select * from dbname.tableName where sampleDate<='2016-05-25';"
config: {'hosts': [!!python/tuple ['190.160.0.10', 3002]]}
Run Code Online (Sandbox Code Playgroud)
我想使用 shell 脚本遍历它的键值对直到 EOF。基本上我希望能够遍历每个 sql 直到 EOF,并在 shell 循环中执行每个 sql。
尝试查看大量文档,但他们没有足够的信息如何使用 shell 循环遍历 yaml。
任何想法或例子都会非常有帮助......
谢谢!
编辑:
我已经在使用 ->
parse_yaml() {
local prefix=$2
local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034')
sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 |
awk -F$fs '{
indent = length($1)/2;
vname[indent] = $2;
for (i in vname) { …Run Code Online (Sandbox Code Playgroud)