我有使用生成文件来控制流浪的一个项目,我想把流浪汉参数到生成文件,如cpu
,memory
,ip
,hostname
,forwarded_port
等。我找到了一种让 vagrantfile 读取 yaml 文件来参数化 vagrantfile 的方法。因此,makefile 需要target
读取所有用户选项变量并将它们key-value
成对写入 config.yaml 。
样本如下
# === BEGIN USER OPTIONS ===
BOX_OS ?= fedora
# Box setup
#BOX_IMAGE
# Disk setup
DISK_COUNT ?= 1
DISK_SIZE_GB ?= 25
# VM Resources
MASTER_CPUS ?= 2
MASTER_MEMORY_SIZE_GB ?= 2
NODE_CPUS ?= 2
NODE_MEMORY_SIZE_GB ?= 2
NODE_COUNT ?= 2
# Network
MASTER_IP ?= 192.168.26.10
NODE_IP_NW ?= 192.168.26.
POD_NW_CIDR ?= 10.244.0.0/16
...
...
# === END USER OPTIONS ===
该echo
命令确实实现了它
# Makefile
envInit:
@echo "POD_NW_CIDR : \"$(POD_NW_CIDR)\"" > ${FILECWD}/configs.yaml
但too many variables
可能太复杂了。
有没有办法批量读取变量及其值并将它们写入 yml 文件
如果你们能告诉我如何实现批量读取变量及其值并将它们写入 yml 文件,我将不胜感激。
将所有用户选项(以及默认值)定义为一个列表,以便它们是可迭代的:
# list of user options with default values
userOptions = \
BOX_OS=2 \
DISK_COUNT=1 \
MASTER_IP=192.168.26.10
# replace each default value with the env value, if any
userOptionValues = $(foreach i, $(userOptions), \
$(word 1, $(subst =, ,$i))=$(or \
$($(word 1, $(subst =, ,$i))), $($(word 1, $(subst =, ,$i))), $(word 2, $(subst =, ,$i))))
# write the yaml file
envInit:
# empty the file
@printf "" > configs.yaml
# write a line for each option
@for i in $(userOptionValues); do \
printf "%s : %s\n" "$$(printf $$i | cut -d= -f1)" "$$(printf $$i | cut -d= -f2)" >> configs.yaml; \
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句