通过 kubectl 命令在 YAML 中使用环境变量
Posted
技术标签:
【中文标题】通过 kubectl 命令在 YAML 中使用环境变量【英文标题】:using env variables in YAML with kubectl command 【发布时间】:2019-08-03 11:41:48 【问题描述】:如何在 YAML 文件中使用环境变量?
我正在使用 kubectl 创建一个命名空间,并且想知道如何使用变量而不是 testnamespace
,例如 name: $var
apiVersion: v1
kind: Namespace
metadata:
name: testnamespace
spec:
finalizers:
- kubernetes
【问题讨论】:
YAML 不知道环境变量,任何此类功能都必须构建到加载 YAML 的程序中。 【参考方案1】:作为一种解决方法,您始终可以使用命令模式创建对象,而不是将变量合并到 yaml 文件中,即
kubectl create namespace $NAME [--dry-run] [options]
问题
YAML 本身不支持变量占位符 锚点和别名确实允许某种程度的抽象和间接,但它们不能用作可插入到整个 YAML 文本中的任意区域的变量占位符。它们必须作为单独的 YAML 节点放置 有一些附加库支持任意变量占位符,但它们不是本机 YAML 规范的一部分示例
考虑以下示例 YAML。它是格式良好的 YAML 语法,但是它使用(非标准)花括号占位符和嵌入式表达式。
嵌入的表达式不会在 YAML 中产生所需的结果,因为它们不是本机 YAML 规范的一部分。不过,在此示例中使用它们只是为了帮助说明标准 YAML 中哪些可用,哪些不可用。
part01_customer_info:
cust_fname: "Homer"
cust_lname: "Himpson"
cust_motto: "I love donuts!"
cust_email: homer@himpson.org
part01_government_info:
govt_sales_taxrate: 1.15
part01_purchase_info:
prch_unit_label: "Bacon-Wrapped Fancy Glazed Donut"
prch_unit_price: 3.00
prch_unit_quant: 7
prch_product_cost: "prch_unit_price * prch_unit_quant"
prch_total_cost: "prch_product_cost * govt_sales_taxrate"
part02_shipping_info:
cust_fname: "cust_fname"
cust_lname: "cust_lname"
ship_city: Houston
ship_state: Hexas
part03_email_info:
cust_email: "cust_email"
mail_subject: Thanks for your DoughNutz order!
mail_notes: |
We want the mail_greeting to have all the expected values
with filled-in placeholders (and not curly-braces).
mail_greeting: |
Greetings cust_fname cust_lname!
We love your motto "cust_motto" and we agree with you!
Your total purchase price is prch_total_cost
Thank you for your order!
说明
标记为 GREEN 的替换在标准 YAML 中很容易使用,使用锚点、别名和 merge keys。
标记为 YELLOW 的替换在技术上可以在标准 YAML 中使用,但不能没有 custom type declaration 或其他一些绑定机制。
RED 中标记的替换在标准 YAML 中不可用。然而,有一些变通方法和替代方案;比如通过string formatting或者字符串模板引擎(比如python的str.format
)。
详情
YAML 的一个经常请求的功能是能够插入任意变量占位符,这些占位符支持任意交叉引用和与同一(或transcluded)YAML 文件中的其他内容相关的表达式。
YAML 支持锚点和别名,但此功能不支持在 YAML 文本中任意位置放置占位符和表达式。它们仅适用于 YAML 节点。
YAML 还支持 custom type declaration,但这些不太常见,如果您接受来自潜在不受信任来源的 YAML 内容,则会存在安全隐患。
YAML 插件库
有 YAML 扩展库,但这些不是本机 YAML 规范的一部分。
Ansible https://docs.ansible.com/ansible-container/container_yml/template.html (支持对 YAML 的许多扩展,但它是一个编排工具,如果你只想要 YAML,那就有点大材小用了) https://github.com/kblomqvist/yasha https://github.com/dreftymac/dynamic.yaml https://bitbucket.org/djarvis/yamlp解决方法
将 YAML 与模板系统(例如 Jinja2 或 Twig)结合使用 使用 YAML 扩展库 使用托管语言中的sprintf
或 str.format
样式功能
另见
String interpolation in YAML how to reference a YAML "setting" from elsewhere in the same YAML file? Use YAML with variables How can I include a YAML file inside another? Passing variables inside rails internationalization yml file Can one YAML object refer to another? is there a way to reference a constant in a yaml with rails? https://learnxinyminutes.com/docs/yaml/【讨论】:
非常好的答案,有好的来源,谢谢以上是关于通过 kubectl 命令在 YAML 中使用环境变量的主要内容,如果未能解决你的问题,请参考以下文章