【问题标题】:using env variables in YAML with kubectl command通过 kubectl 命令在 YAML 中使用环境变量
【发布时间】:2019-08-03 11:41:48
【问题描述】:

如何在 YAML 文件中使用环境变量?

我正在使用 kubectl 创建一个命名空间,并且想知道如何使用变量而不是 testnamespace,例如 name: $var

apiVersion: v1
kind: Namespace
metadata:
  name: testnamespace
spec:
  finalizers:
  - kubernetes

【问题讨论】:

  • YAML 不知道环境变量,任何此类功能都必须构建到加载 YAML 的程序中。

标签: kubectl


【解决方案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 规范的一部分。

解决方法

  • 将 YAML 与模板系统(例如 Jinja2 或 Twig)结合使用
  • 使用 YAML 扩展库
  • 使用托管语言中的 sprintfstr.format 样式功能

另见

【讨论】:

  • 非常好的答案,有好的来源,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 2022-08-16
  • 2015-03-07
  • 2015-11-04
相关资源
最近更新 更多