Is there a way to use placeholders in yaml like this:
foo: &FOO <<propname>>: type: number default: <<default>> bar: - *FOO propname: "some_prop" default: "some default"
Passing variables between tasks in the same jobSet the value with the command echo "##vso[task. setvariable variable=FOO]some value" In subsequent tasks, you can use the $(FOO) syntax to have Azure Pipelines replace the variable with some value.
PY-yaml library doesn't resolve environment variables by default. You need to define an implicit resolver that will find the regex that defines an environment variable and execute a function to resolve it. You can do it through yaml.
The <<: inserts the content of that node. Allow me to quote the YAML spec here: Repeated nodes (objects) are first identified by an anchor (marked with the ampersand - “&”), and are then aliased (referenced with an asterisk - “*”) thereafter.
yaml.load
Consider the following example YAML. It is well-formed YAML syntax, however it uses (non-standard) curly-brace placeholders with embedded expressions.
The embedded expressions do not produce the desired result in YAML, because they are not part of the native YAML specification. Nevertheless, they are used in this example only to help illustrate what is available with standard YAML and what is not.
part01_customer_info: cust_fname: "Homer" cust_lname: "Himpson" cust_motto: "I love donuts!" cust_email: [email protected] 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}}
Below is an inline image that illustrates the example with colored regions in green, yellow and red.
The substitutions marked in GREEN are readily available in standard YAML, using anchors, aliases, and merge keys.
The substitutions marked in YELLOW are technically available in standard YAML, but not without a custom type declaration, or some other binding mechanism.
The substitutions marked in RED are not available in standard YAML. Yet there are workarounds and alternatives; such as through string formatting or string template engines (such as python's str.format
).
A frequently-requested feature for YAML is the ability to insert arbitrary variable placeholders that support arbitrary cross-references and expressions that relate to the other content in the same (or transcluded) YAML file(s).
YAML supports anchors and aliases, but this feature does not support arbitrary placement of placeholders and expressions anywhere in the YAML text. They only work with YAML nodes.
YAML also supports custom type declarations, however these are less common, and there are security implications if you accept YAML content from potentially untrusted sources.
There are YAML extension libraries, but these are not part of the native YAML spec.
sprintf
or str.format
style functionality from the hosting languageIf you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With