From 9178aa0660b0abf375737ee2e31683a6f84a22a2 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Wed, 18 Oct 2023 16:00:52 -0400 Subject: [PATCH 01/37] Add Tags dimension --- specification/dimensions/dimensions.mdpp | 1 + specification/dimensions/tags.md | 64 ++++++++++++++++++++++++ supporting_content/dimensions/tags.md | 44 ++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 specification/dimensions/tags.md create mode 100644 supporting_content/dimensions/tags.md diff --git a/specification/dimensions/dimensions.mdpp b/specification/dimensions/dimensions.mdpp index 80dc8f6cd..d2258ce7e 100644 --- a/specification/dimensions/dimensions.mdpp +++ b/specification/dimensions/dimensions.mdpp @@ -26,5 +26,6 @@ dimensions to categorize, filter, and reveal details in your data when grouped w !INCLUDE "servicename.md",1 !INCLUDE "subaccountid.md",1 !INCLUDE "subaccountname.md",1 +!INCLUDE "tags.md",1 [FODOFC]: https://www.finops.org/framework/capabilities/ diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md new file mode 100644 index 000000000..90dbcdd25 --- /dev/null +++ b/specification/dimensions/tags.md @@ -0,0 +1,64 @@ +# Tags + +Tags are the set of finalized User-Defined and/or Provider-Defined Tags assigned to Tag Sources. Tags commonly add business context to billing data to identify and accurately allocate charges. + +If a Tag is subject to a set of prioritized rules for determining its value, it is finalized after a single value is chosen from a set of corresponding values. Otherwise, a Tag and a finalized Tag are equal. + +Tags adhere to the following requirements: + +* Tags MUST only contain finalized tags. +* Tags MUST standardize to Key-Value Format. +* A Tag without a specified value MUST have its value set to null. +* Providers MUST NOT alter User-Defined Tag keys. + +Provider-defined Tags additionally adhere to the following requirements: + +* Provider-defined Tags MUST be prefixed with a provider-defined prefix. +* Providers SHOULD publish all provider-defined prefixes within their respective documentation. + +## Provider-Defined vs. User-Defined Tags + +The following is an example of one User-Defined Tag and one Provider-Defined Tag, respectively, with tag key, foo. The 1st property is not prefixed, and the Provider has a pre-selected prefix, `marketplace/`, applied to denote that it is a different type of tag. + +```json + { + "foo":"bar", + "marketplace/foo": "bar" + } +``` + +## Finalized Tags + +The following example shows a simplified cost and usage data with one metered Account that contains one metered Virtual Machine. The Provider supports tag inheritance where an Account's User-Defined Tags are applied to all Resources' User-Defined Tags, where applicable. + +| ResourceType | ResourceId | Column | +| :---------------| :----------| :----------------------------------| +| Account | my-account | { "team": "web", "env": "prod" } | +| Virtual Machine | my-vm | { "team": "web", *"env": "prod"* } | + +After all tag inheritance rules are processed, the finalized cost and usage dataset shows that the Virtual Machine Resource did inherit tag, `env:prod`, from its corresponding Account because no tag with the same key exists. Conversely, the Virtual Machine Resource did not inherit tag, `team:web`, because the Provider's tag inheritance rules determine that aResource already containing a tag with the same key maintains that same tag. + +## Column ID + +Tags + +## Display Name + +Tags + +## Description + +The set of finalized tags assigned to Tag Sources. + +## Content Constraints + +| Constraint | Value | +|:----------------|:-----------------| +| Column required | True | +| Data type | Object | +| Allows nulls | True | +| Value format | MUST adhere to KeyValueFormat Attribute | + +## Introduced (version) + +1.0 diff --git a/supporting_content/dimensions/tags.md b/supporting_content/dimensions/tags.md new file mode 100644 index 000000000..5ecc5b436 --- /dev/null +++ b/supporting_content/dimensions/tags.md @@ -0,0 +1,44 @@ +# Column: Tags + +## Example provider mappings + +Current resource types found or extracted from available data sets: + +| Provider | Dataset | Column | Hierarchical Resources | Supports Inheritance? +| :-------- | :---------------------- | :-------------------------------------------| :-------------------------------------------| :---------- +| AWS | CUR | resourceTags/user:\*, costCategories/\* | Organization, Organizational Unit(s), Account | No +| GCP | BigQuery Billing Export | Tags | Resource Group, Subscription | Yes +| Microsoft | Cost details | tags, labels, system_labels, project.labels | Folder(s), Project | Yes + +## Discussion Topics + +Discussion / Scratch space: +- User-defined tags should not have a prefix +- Provider can create and account for a reserved prefix set +- Providers should publish known prefixes somewhere + - Refer to Numeric Attribute language around provider-publishing guidelines +- Separator poll? + - Double forward slash (Chris Harris) + - Pipe (Shawn Alpay) +- 2 columns: EffectiveTags and RawTags (better names to be decided) +- Tags + - Providers must account for collisions + - If inheritance exists for a set of tags, provide the “winning” tag + - If inheritance does not exist for a tag, provide all namespaced tags (i.e. costCategory/foo, resourceTags/user:foo) + - MUST adhere to the Key-Value attribute spec + +- Questions: + - Inheritance (e.g., source)? + - Merging different datasets (e.g., source)? + - Do we split effective tags and raw tags or merge them together with a predefined key format (e.g., “/”)? + - Simple JSON key/value pair or array of JSON objects? + - What does it look like interpreting labels using Excel formulas only? Would users be required to dl a plugin, use vbscript, etc. + - Excel: https://support.microsoft.com/en-au/office/parse-text-as-json-or-xml-power-query-7436916b-210a-4299-83dd-8531a1d5e945 (supports {"foo": "bar"} approach) + - Sheets: Seems to require scripting + - How do we fit into the top 3 clouds? + - Should we give an opinion around requiring k/v tags? + - Create a poll around calling the dimension “Tags” or “Labels”? + - “Custom Tags/Labels”? + - One key/value pair for all tags “tags”: [ … ] + - Which raw format do we go with? + From 58a9950181172db1a44b396717e678bc4a68ec3e Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Fri, 20 Oct 2023 20:44:20 -0400 Subject: [PATCH 02/37] Update tags.md --- specification/dimensions/tags.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 90dbcdd25..f70c55096 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -18,7 +18,7 @@ Provider-defined Tags additionally adhere to the following requirements: ## Provider-Defined vs. User-Defined Tags -The following is an example of one User-Defined Tag and one Provider-Defined Tag, respectively, with tag key, foo. The 1st property is not prefixed, and the Provider has a pre-selected prefix, `marketplace/`, applied to denote that it is a different type of tag. +The following is an example of one User-Defined Tag and one Provider-Defined Tag, respectively, with tag key, `foo`. The first property is not prefixed, and the Provider has a pre-selected prefix, `marketplace/`, applied to denote that it is a different type of tag. ```json { @@ -36,7 +36,7 @@ The following example shows a simplified cost and usage data with one metered Ac | Account | my-account | { "team": "web", "env": "prod" } | | Virtual Machine | my-vm | { "team": "web", *"env": "prod"* } | -After all tag inheritance rules are processed, the finalized cost and usage dataset shows that the Virtual Machine Resource did inherit tag, `env:prod`, from its corresponding Account because no tag with the same key exists. Conversely, the Virtual Machine Resource did not inherit tag, `team:web`, because the Provider's tag inheritance rules determine that aResource already containing a tag with the same key maintains that same tag. +After all tag inheritance rules are processed, the finalized cost and usage dataset shows that the Virtual Machine Resource did inherit tag, `env:prod`, from its corresponding Account because no tag with the same key exists. Conversely, the Virtual Machine Resource did not inherit tag, `team:web`, because the Provider's tag inheritance rules determine that a Resource already containing a tag with the same key maintains that same tag. ## Column ID From 8faeb19a1aa83afb3785cd205d8dd7a426cce202 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 23 Oct 2023 16:32:47 -0400 Subject: [PATCH 03/37] Update tags.md --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index f70c55096..ce80eed7a 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -29,7 +29,7 @@ The following is an example of one User-Defined Tag and one Provider-Defined Tag ## Finalized Tags -The following example shows a simplified cost and usage data with one metered Account that contains one metered Virtual Machine. The Provider supports tag inheritance where an Account's User-Defined Tags are applied to all Resources' User-Defined Tags, where applicable. +A Tag can either be static or dynamic. If a Tag is static, its value is immutable. If a Tag is dynamic, its value is determined by a set of predefined user or provider rules. A finalized Tag is the final result of any static or dynamic Tag. | ResourceType | ResourceId | Column | | :---------------| :----------| :----------------------------------| From 1ab730ba2fd0478f5c76f94601710c2eb3d9e5b6 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 30 Oct 2023 16:04:48 -0400 Subject: [PATCH 04/37] Update specification/dimensions/tags.md Co-authored-by: Udam Dewaraja --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index ce80eed7a..3f0bbe9c3 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -1,6 +1,6 @@ # Tags -Tags are the set of finalized User-Defined and/or Provider-Defined Tags assigned to Tag Sources. Tags commonly add business context to billing data to identify and accurately allocate charges. +The Tags column represents the set of finalized user-defined and/or provider-defined tags assigned to Tag Sources. Tags commonly add business context to billing data to identify and accurately allocate charges. If a Tag is subject to a set of prioritized rules for determining its value, it is finalized after a single value is chosen from a set of corresponding values. Otherwise, a Tag and a finalized Tag are equal. From ed570ced46f6730d21bd3ac7744c83e1dfb34010 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 30 Oct 2023 16:05:37 -0400 Subject: [PATCH 05/37] Update specification/dimensions/tags.md Co-authored-by: Udam Dewaraja --- specification/dimensions/tags.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 3f0bbe9c3..eeb4d062f 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -4,12 +4,13 @@ The Tags column represents the set of finalized user-defined and/or provider-def If a Tag is subject to a set of prioritized rules for determining its value, it is finalized after a single value is chosen from a set of corresponding values. Otherwise, a Tag and a finalized Tag are equal. -Tags adhere to the following requirements: +The Tags column adheres to the following requirements: -* Tags MUST only contain finalized tags. -* Tags MUST standardize to Key-Value Format. +* The Tags column MUST contain user-defined and provider-defined tags. +* The Tags column MUST only contain finalized tags. +* The Tags column MUST be in Key-Value Format. * A Tag without a specified value MUST have its value set to null. -* Providers MUST NOT alter User-Defined Tag keys. +* Providers MUST NOT alter user-defined Tag keys or values. Provider-defined Tags additionally adhere to the following requirements: From 8d8f034ce7ff34fc64c62374f5ddd5350d748ed0 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 30 Oct 2023 16:05:51 -0400 Subject: [PATCH 06/37] Update specification/dimensions/tags.md Co-authored-by: Udam Dewaraja --- specification/dimensions/tags.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index eeb4d062f..05c7c6ac7 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -14,8 +14,8 @@ The Tags column adheres to the following requirements: Provider-defined Tags additionally adhere to the following requirements: -* Provider-defined Tags MUST be prefixed with a provider-defined prefix. -* Providers SHOULD publish all provider-defined prefixes within their respective documentation. +* Provider-defined tags MUST be prefixed with a provider-specified tag key prefix. +* Providers SHOULD publish all provider-specified tag key prefixes within their respective documentation. ## Provider-Defined vs. User-Defined Tags From f331ad314dd1acbaeb01c0811eeee6dba18108de Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 30 Oct 2023 16:06:06 -0400 Subject: [PATCH 07/37] Update specification/dimensions/tags.md Co-authored-by: Udam Dewaraja --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 05c7c6ac7..c90fe9062 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -19,7 +19,7 @@ Provider-defined Tags additionally adhere to the following requirements: ## Provider-Defined vs. User-Defined Tags -The following is an example of one User-Defined Tag and one Provider-Defined Tag, respectively, with tag key, `foo`. The first property is not prefixed, and the Provider has a pre-selected prefix, `marketplace/`, applied to denote that it is a different type of tag. +The following is an example of one user-defined tag and one provider-defined tag, respectively, with tag key, `foo`. The first tag, which is user-defined, is not prefixed. The second tag is prefixed with marketplace/ which the provider has specified as a reserved tag key prefix. ```json { From 108186432ab978802524ef8cd229f581adcd5b08 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 30 Oct 2023 16:23:13 -0400 Subject: [PATCH 08/37] Update tags.md --- specification/dimensions/tags.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index c90fe9062..4a3f50a3e 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -2,8 +2,6 @@ The Tags column represents the set of finalized user-defined and/or provider-defined tags assigned to Tag Sources. Tags commonly add business context to billing data to identify and accurately allocate charges. -If a Tag is subject to a set of prioritized rules for determining its value, it is finalized after a single value is chosen from a set of corresponding values. Otherwise, a Tag and a finalized Tag are equal. - The Tags column adheres to the following requirements: * The Tags column MUST contain user-defined and provider-defined tags. From 6ffafd8d25aa8dfd6915354c006b80b9367f368b Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 30 Oct 2023 16:32:45 -0400 Subject: [PATCH 09/37] Update tags.md --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 4a3f50a3e..38e096726 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -54,7 +54,7 @@ The set of finalized tags assigned to Tag Sources. | Constraint | Value | |:----------------|:-----------------| | Column required | True | -| Data type | Object | +| Data type | JSON Object | | Allows nulls | True | | Value format | MUST adhere to KeyValueFormat Attribute | From ab010c8f4325faef8fc05876c1d571b8472896c0 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 30 Oct 2023 17:06:26 -0400 Subject: [PATCH 10/37] Update tags.md --- specification/dimensions/tags.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 38e096726..9f37d451b 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -30,12 +30,22 @@ The following is an example of one user-defined tag and one provider-defined tag A Tag can either be static or dynamic. If a Tag is static, its value is immutable. If a Tag is dynamic, its value is determined by a set of predefined user or provider rules. A finalized Tag is the final result of any static or dynamic Tag. -| ResourceType | ResourceId | Column | -| :---------------| :----------| :----------------------------------| -| Account | my-account | { "team": "web", "env": "prod" } | -| Virtual Machine | my-vm | { "team": "web", *"env": "prod"* } | - -After all tag inheritance rules are processed, the finalized cost and usage dataset shows that the Virtual Machine Resource did inherit tag, `env:prod`, from its corresponding Account because no tag with the same key exists. Conversely, the Virtual Machine Resource did not inherit tag, `team:web`, because the Provider's tag inheritance rules determine that a Resource already containing a tag with the same key maintains that same tag. +As a example, let's assume 1 Account exists with 1 Virtual Machine with the following details: +1. **Account** + * id: *my-account* + * user-defined tags: *team:ops*, *env:prod* +2. **Virtual Machine** + * id: *my-vm* + * user-defined tags: *team:web* + +The table below represents a finalized cost and usage dataset with these resources. It also shows the finalized state after all resource-oriented, tag inheritance rules are processed. + +| ResourceType | ResourceId | Column | +| :---------------| :----------| :----------------------------------------| +| Account | my-account | { "team": "ops", "env": "prod" } | +| Virtual Machine | my-vm | { "team": "web", ==**"env": "prod"**== } | + +Because the the Virtual Machine Resource did not have an `env` tag, it inherited tag, `env:prod` (highlighted), from its parent Account. Conversely, because the Virtual Machine Resource already has a `team` tag (`team:web`), it did not inherit `team:ops` from its parent Account. ## Column ID From baa26bbc6c702ed3a1a5d5b14fff1f4f5b4fd732 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 30 Oct 2023 17:13:50 -0400 Subject: [PATCH 11/37] Update tags.md --- specification/dimensions/tags.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 9f37d451b..9e016dc66 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -31,10 +31,11 @@ The following is an example of one user-defined tag and one provider-defined tag A Tag can either be static or dynamic. If a Tag is static, its value is immutable. If a Tag is dynamic, its value is determined by a set of predefined user or provider rules. A finalized Tag is the final result of any static or dynamic Tag. As a example, let's assume 1 Account exists with 1 Virtual Machine with the following details: -1. **Account** + +### Account * id: *my-account* * user-defined tags: *team:ops*, *env:prod* -2. **Virtual Machine** +### Virtual Machine * id: *my-vm* * user-defined tags: *team:web* From 07168d6c9453b29ef7a6c268e320b9b1e0ae26e6 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Tue, 31 Oct 2023 06:08:44 -0400 Subject: [PATCH 12/37] Update tags.md Co-authored-by: TDubovchenko --- supporting_content/dimensions/tags.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/supporting_content/dimensions/tags.md b/supporting_content/dimensions/tags.md index 5ecc5b436..edac69dac 100644 --- a/supporting_content/dimensions/tags.md +++ b/supporting_content/dimensions/tags.md @@ -7,8 +7,8 @@ Current resource types found or extracted from available data sets: | Provider | Dataset | Column | Hierarchical Resources | Supports Inheritance? | :-------- | :---------------------- | :-------------------------------------------| :-------------------------------------------| :---------- | AWS | CUR | resourceTags/user:\*, costCategories/\* | Organization, Organizational Unit(s), Account | No -| GCP | BigQuery Billing Export | Tags | Resource Group, Subscription | Yes -| Microsoft | Cost details | tags, labels, system_labels, project.labels | Folder(s), Project | Yes +| GCP | BigQuery Billing Export | tags, labels, system_labels, project.labels | Folder(s), Project | Yes +| Microsoft | Cost details | Tags | Subscription, Resource Group | Yes ## Discussion Topics From cdcf5bf15cc4545337d970216c2b944021e07803 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Tue, 31 Oct 2023 13:17:12 -0400 Subject: [PATCH 13/37] Format fixes --- specification/dimensions/tags.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 9e016dc66..f2722ffe9 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -33,11 +33,14 @@ A Tag can either be static or dynamic. If a Tag is static, its value is immutabl As a example, let's assume 1 Account exists with 1 Virtual Machine with the following details: ### Account - * id: *my-account* - * user-defined tags: *team:ops*, *env:prod* + +* id: *my-account* +* user-defined tags: *team:ops*, *env:prod* + ### Virtual Machine - * id: *my-vm* - * user-defined tags: *team:web* + +* id: *my-vm* +* user-defined tags: *team:web* The table below represents a finalized cost and usage dataset with these resources. It also shows the finalized state after all resource-oriented, tag inheritance rules are processed. From 02b50ab30600313e92e2da15314bc98e37195f91 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Tue, 31 Oct 2023 13:18:51 -0400 Subject: [PATCH 14/37] Replaced highlighting with bold text --- specification/dimensions/tags.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index f2722ffe9..4b0112795 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -47,9 +47,9 @@ The table below represents a finalized cost and usage dataset with these resourc | ResourceType | ResourceId | Column | | :---------------| :----------| :----------------------------------------| | Account | my-account | { "team": "ops", "env": "prod" } | -| Virtual Machine | my-vm | { "team": "web", ==**"env": "prod"**== } | +| Virtual Machine | my-vm | { "team": "web", **"env": "prod"** } | -Because the the Virtual Machine Resource did not have an `env` tag, it inherited tag, `env:prod` (highlighted), from its parent Account. Conversely, because the Virtual Machine Resource already has a `team` tag (`team:web`), it did not inherit `team:ops` from its parent Account. +Because the the Virtual Machine Resource did not have an `env` tag, it inherited tag, `env:prod` (bolded), from its parent Account. Conversely, because the Virtual Machine Resource already has a `team` tag (`team:web`), it did not inherit `team:ops` from its parent Account. ## Column ID From 765fd3600618304a23015e5ed53553f5db42a7d2 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Tue, 31 Oct 2023 13:24:23 -0400 Subject: [PATCH 15/37] Ensure not breaks within the Tags table Column --- specification/dimensions/tags.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 4b0112795..98ae1df6b 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -44,12 +44,12 @@ As a example, let's assume 1 Account exists with 1 Virtual Machine with the foll The table below represents a finalized cost and usage dataset with these resources. It also shows the finalized state after all resource-oriented, tag inheritance rules are processed. -| ResourceType | ResourceId | Column | -| :---------------| :----------| :----------------------------------------| -| Account | my-account | { "team": "ops", "env": "prod" } | -| Virtual Machine | my-vm | { "team": "web", **"env": "prod"** } | +| ResourceType | ResourceId | Tags | +| :---------------| :----------| :-------------------------------------------| +| Account | my-account | { "team": "ops", "env": "prod" } | +| Virtual Machine | my-vm | { "team": "web", *"env": "prod"* } | -Because the the Virtual Machine Resource did not have an `env` tag, it inherited tag, `env:prod` (bolded), from its parent Account. Conversely, because the Virtual Machine Resource already has a `team` tag (`team:web`), it did not inherit `team:ops` from its parent Account. +Because the the Virtual Machine Resource did not have an `env` tag, it inherited tag, `env:prod` (italicized), from its parent Account. Conversely, because the Virtual Machine Resource already has a `team` tag (`team:web`), it did not inherit `team:ops` from its parent Account. ## Column ID From 47ef4580f2bfc040728b8bd21c465fe9d66617d9 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Wed, 1 Nov 2023 15:20:47 -0400 Subject: [PATCH 16/37] Update tags.md --- specification/dimensions/tags.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 98ae1df6b..b4d3555d1 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -2,6 +2,8 @@ The Tags column represents the set of finalized user-defined and/or provider-defined tags assigned to Tag Sources. Tags commonly add business context to billing data to identify and accurately allocate charges. +A tag is 'finalized' after a single tag value is chosen from a set of corresponding tag values for a single tag key. Whether a tag key can have multiple, possible values is determined by the Provider. + The Tags column adheres to the following requirements: * The Tags column MUST contain user-defined and provider-defined tags. From a851a5f5b1a3af646906dc549fdb3182e0e82816 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Wed, 1 Nov 2023 15:21:30 -0400 Subject: [PATCH 17/37] Update tags.md --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index b4d3555d1..a788ffb1b 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -6,7 +6,7 @@ A tag is 'finalized' after a single tag value is chosen from a set of correspond The Tags column adheres to the following requirements: -* The Tags column MUST contain user-defined and provider-defined tags. +* The Tags column MUST contain user-defined and/or provider-defined tags. * The Tags column MUST only contain finalized tags. * The Tags column MUST be in Key-Value Format. * A Tag without a specified value MUST have its value set to null. From 0395927e25645fd75de14895a29b60aac4f27b32 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Fri, 3 Nov 2023 06:08:19 -0400 Subject: [PATCH 18/37] Update tags.md Co-authored-by: Michael Flanakin --- supporting_content/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/supporting_content/dimensions/tags.md b/supporting_content/dimensions/tags.md index edac69dac..6e038b863 100644 --- a/supporting_content/dimensions/tags.md +++ b/supporting_content/dimensions/tags.md @@ -8,7 +8,7 @@ Current resource types found or extracted from available data sets: | :-------- | :---------------------- | :-------------------------------------------| :-------------------------------------------| :---------- | AWS | CUR | resourceTags/user:\*, costCategories/\* | Organization, Organizational Unit(s), Account | No | GCP | BigQuery Billing Export | tags, labels, system_labels, project.labels | Folder(s), Project | Yes -| Microsoft | Cost details | Tags | Subscription, Resource Group | Yes +| Microsoft | Cost details | Tags | Billing Account, Billing Profile, Invoice Section, Department, Enrollment Account, Management Group, Subscription, Resource Group | Yes ## Discussion Topics From e9347418df15a264bcaa9ba66774ed702978e45c Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Fri, 3 Nov 2023 06:09:45 -0400 Subject: [PATCH 19/37] Update tags.md Co-authored-by: Michael Flanakin --- specification/dimensions/tags.md | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index a788ffb1b..9ec8f5540 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -32,17 +32,14 @@ The following is an example of one user-defined tag and one provider-defined tag A Tag can either be static or dynamic. If a Tag is static, its value is immutable. If a Tag is dynamic, its value is determined by a set of predefined user or provider rules. A finalized Tag is the final result of any static or dynamic Tag. -As a example, let's assume 1 Account exists with 1 Virtual Machine with the following details: - -### Account - -* id: *my-account* -* user-defined tags: *team:ops*, *env:prod* - -### Virtual Machine - -* id: *my-vm* -* user-defined tags: *team:web* +As a example, let's assume 1 sub account exists with 1 virtual machine with the following details: + +* Sub account + * id: *my-account* + * user-defined tags: *team:ops*, *env:prod* +* Virtual machine + * id: *my-vm* + * user-defined tags: *team:web* The table below represents a finalized cost and usage dataset with these resources. It also shows the finalized state after all resource-oriented, tag inheritance rules are processed. From d2560781c6f7b5676e5409c17066d73ab4583d97 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Fri, 3 Nov 2023 06:11:36 -0400 Subject: [PATCH 20/37] Update tags.md Co-authored-by: Michael Flanakin --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 9ec8f5540..f229ae634 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -1,6 +1,6 @@ # Tags -The Tags column represents the set of finalized user-defined and/or provider-defined tags assigned to Tag Sources. Tags commonly add business context to billing data to identify and accurately allocate charges. +The Tags column represents the set of finalized user-defined and/or provider-defined tags assigned to Tag Sources. Tags are commonly used for scenarios like adding business context to billing data to identify and accurately allocate charges. A tag is 'finalized' after a single tag value is chosen from a set of corresponding tag values for a single tag key. Whether a tag key can have multiple, possible values is determined by the Provider. From 03af758fa92fe2b7e4112af76698b1ea977786af Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 6 Nov 2023 10:28:17 -0500 Subject: [PATCH 21/37] Update specification/dimensions/tags.md Co-authored-by: Michael Flanakin --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index f229ae634..dd0abe4e4 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -69,7 +69,7 @@ The set of finalized tags assigned to Tag Sources. | Column required | True | | Data type | JSON Object | | Allows nulls | True | -| Value format | MUST adhere to KeyValueFormat Attribute | +| Value format | Key-Value Format | ## Introduced (version) From 7d1e66e837366533e68e6d9438f09967b53cbf73 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 6 Nov 2023 10:29:18 -0500 Subject: [PATCH 22/37] Update tags.md --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index dd0abe4e4..54ea0e11c 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -30,7 +30,7 @@ The following is an example of one user-defined tag and one provider-defined tag ## Finalized Tags -A Tag can either be static or dynamic. If a Tag is static, its value is immutable. If a Tag is dynamic, its value is determined by a set of predefined user or provider rules. A finalized Tag is the final result of any static or dynamic Tag. +A tag can either be static or dynamic. If a tag is static, its value is immutable. If a tag is dynamic, its value is determined by a set of predefined user or provider rules. A finalized tag is the final result of any static or dynamic Tag. As a example, let's assume 1 sub account exists with 1 virtual machine with the following details: From 498239ab3ceaa9cfdabac2d01b66ffed0e5f4a42 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 6 Nov 2023 10:29:39 -0500 Subject: [PATCH 23/37] Update specification/dimensions/tags.md Co-authored-by: Udam Dewaraja --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 54ea0e11c..79946379d 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -2,7 +2,7 @@ The Tags column represents the set of finalized user-defined and/or provider-defined tags assigned to Tag Sources. Tags are commonly used for scenarios like adding business context to billing data to identify and accurately allocate charges. -A tag is 'finalized' after a single tag value is chosen from a set of corresponding tag values for a single tag key. Whether a tag key can have multiple, possible values is determined by the Provider. +A tag becomes 'finalized' when a single value is selected from a set of possible tag values assigned to the tag key at different levels of a resource grouping hierarchy (if supported by the Provider).``` The Tags column adheres to the following requirements: From d029e6ec899d651f445be9fff18eca188642372d Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 6 Nov 2023 10:31:36 -0500 Subject: [PATCH 24/37] Update specification/dimensions/tags.md Co-authored-by: Udam Dewaraja --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 79946379d..d55db7503 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -67,7 +67,7 @@ The set of finalized tags assigned to Tag Sources. | Constraint | Value | |:----------------|:-----------------| | Column required | True | -| Data type | JSON Object | +| Data type | JSON | | Allows nulls | True | | Value format | Key-Value Format | From c22877f6839894863dadf8c14f893e6cbb9f2f72 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 6 Nov 2023 16:17:06 -0500 Subject: [PATCH 25/37] Update tags.md --- specification/dimensions/tags.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index d55db7503..4f8fbaf33 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -34,21 +34,21 @@ A tag can either be static or dynamic. If a tag is static, its value is immutabl As a example, let's assume 1 sub account exists with 1 virtual machine with the following details: -* Sub account - * id: *my-account* +* Sub Account + * id: *my-sub-account* * user-defined tags: *team:ops*, *env:prod* -* Virtual machine +* Virtual Machine * id: *my-vm* * user-defined tags: *team:web* The table below represents a finalized cost and usage dataset with these resources. It also shows the finalized state after all resource-oriented, tag inheritance rules are processed. -| ResourceType | ResourceId | Tags | -| :---------------| :----------| :-------------------------------------------| -| Account | my-account | { "team": "ops", "env": "prod" } | -| Virtual Machine | my-vm | { "team": "web", *"env": "prod"* } | +| ResourceType | ResourceId | Tags | +| :---------------| :--------------| :-------------------------------------------| +| Sub Account | my-sub-account | { "team": "ops", "env": "prod" } | +| Virtual Machine | my-vm | { "team": "web", *"env": "prod"* } | -Because the the Virtual Machine Resource did not have an `env` tag, it inherited tag, `env:prod` (italicized), from its parent Account. Conversely, because the Virtual Machine Resource already has a `team` tag (`team:web`), it did not inherit `team:ops` from its parent Account. +Because the the Virtual Machine Resource did not have an `env` tag, it inherited tag, `env:prod` (italicized), from its parent Sub Account. Conversely, because the Virtual Machine Resource already has a `team` tag (`team:web`), it did not inherit `team:ops` from its parent Sub Account. ## Column ID From 7ad1425dd1e576034206353f5104d985daf26ab3 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 6 Nov 2023 16:23:57 -0500 Subject: [PATCH 26/37] Update tags.md --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 4f8fbaf33..0c9b7544f 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -2,7 +2,7 @@ The Tags column represents the set of finalized user-defined and/or provider-defined tags assigned to Tag Sources. Tags are commonly used for scenarios like adding business context to billing data to identify and accurately allocate charges. -A tag becomes 'finalized' when a single value is selected from a set of possible tag values assigned to the tag key at different levels of a resource grouping hierarchy (if supported by the Provider).``` +A tag becomes 'finalized' when a single value is selected from a set of possible tag values assigned to the tag key at different levels of a resource grouping hierarchy (if supported by the Provider). The Tags column adheres to the following requirements: From 1b2fea0c169e6af85b8dbe9e0ac74b4b6bfc10e8 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Mon, 6 Nov 2023 16:41:48 -0500 Subject: [PATCH 27/37] Update tags.md --- supporting_content/dimensions/tags.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/supporting_content/dimensions/tags.md b/supporting_content/dimensions/tags.md index 6e038b863..6203d9f72 100644 --- a/supporting_content/dimensions/tags.md +++ b/supporting_content/dimensions/tags.md @@ -13,6 +13,8 @@ Current resource types found or extracted from available data sets: ## Discussion Topics Discussion / Scratch space: +- Finalized section may or may not be necessary because providers would only provide finalized tags + - Remove 'finalized' from first sentence of Tags - User-defined tags should not have a prefix - Provider can create and account for a reserved prefix set - Providers should publish known prefixes somewhere From d5fa82af88fe7d981779c48d0e9e67ff49ecbe72 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Tue, 7 Nov 2023 10:33:19 -0500 Subject: [PATCH 28/37] Update tags.md --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 0c9b7544f..fb5f924dd 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -32,7 +32,7 @@ The following is an example of one user-defined tag and one provider-defined tag A tag can either be static or dynamic. If a tag is static, its value is immutable. If a tag is dynamic, its value is determined by a set of predefined user or provider rules. A finalized tag is the final result of any static or dynamic Tag. -As a example, let's assume 1 sub account exists with 1 virtual machine with the following details: +As a example, let's assume 1 sub account exists with 1 virtual machine with the following details, and tag inheritance favors Resources over Sub Accounts. * Sub Account * id: *my-sub-account* From 4b023d5695638e55e2b3a66b0707d21416ce268a Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Tue, 7 Nov 2023 10:37:08 -0500 Subject: [PATCH 29/37] Update tags.md --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index fb5f924dd..ddf5efe74 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -1,6 +1,6 @@ # Tags -The Tags column represents the set of finalized user-defined and/or provider-defined tags assigned to Tag Sources. Tags are commonly used for scenarios like adding business context to billing data to identify and accurately allocate charges. +The Tags column represents the set of tags assigned to Tag Sources that also account for potential provider-defined or user-defined tag evaluations. Tags are commonly used for scenarios like adding business context to billing data to identify and accurately allocate charges. A tag becomes 'finalized' when a single value is selected from a set of possible tag values assigned to the tag key at different levels of a resource grouping hierarchy (if supported by the Provider). From e719bb5cdcb7e46cd42a221673ae7eec956bfc61 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Tue, 7 Nov 2023 10:39:58 -0500 Subject: [PATCH 30/37] Update tags.md --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index ddf5efe74..b948d5dcc 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -2,7 +2,7 @@ The Tags column represents the set of tags assigned to Tag Sources that also account for potential provider-defined or user-defined tag evaluations. Tags are commonly used for scenarios like adding business context to billing data to identify and accurately allocate charges. -A tag becomes 'finalized' when a single value is selected from a set of possible tag values assigned to the tag key at different levels of a resource grouping hierarchy (if supported by the Provider). +A tag becomes _finalized_ when a single value is selected from a set of possible tag values assigned to the tag key at different levels of a resource grouping hierarchy (if supported by the Provider). The Tags column adheres to the following requirements: From e4bcfaed7ebec9882d6db98f24b1dbe7fcf8bf14 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Tue, 7 Nov 2023 10:40:26 -0500 Subject: [PATCH 31/37] Update tags.md --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index b948d5dcc..64de64bb8 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -2,7 +2,7 @@ The Tags column represents the set of tags assigned to Tag Sources that also account for potential provider-defined or user-defined tag evaluations. Tags are commonly used for scenarios like adding business context to billing data to identify and accurately allocate charges. -A tag becomes _finalized_ when a single value is selected from a set of possible tag values assigned to the tag key at different levels of a resource grouping hierarchy (if supported by the Provider). +A tag becomes *finalized* when a single value is selected from a set of possible tag values assigned to the tag key at different levels of a resource grouping hierarchy (if supported by the Provider). The Tags column adheres to the following requirements: From 0c84ff8687a61a1b6de0a0a6678c2a1acf4e2d47 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Tue, 7 Nov 2023 10:44:51 -0500 Subject: [PATCH 32/37] Update tags.md --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 64de64bb8..867ce1774 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -2,7 +2,7 @@ The Tags column represents the set of tags assigned to Tag Sources that also account for potential provider-defined or user-defined tag evaluations. Tags are commonly used for scenarios like adding business context to billing data to identify and accurately allocate charges. -A tag becomes *finalized* when a single value is selected from a set of possible tag values assigned to the tag key at different levels of a resource grouping hierarchy (if supported by the Provider). +A tag becomes *finalized* when a single value is selected from a set of possible tag values assigned to the tag key. This can occur when a tag is set at different levels of a resource grouping hierarchy (if supported by the Provider), or a tag is value is determined from a set of user-defined rules. The Tags column adheres to the following requirements: From 24df32d8d320ec1a1bfdbc2828f29191235f0a71 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Tue, 7 Nov 2023 10:51:12 -0500 Subject: [PATCH 33/37] Update tags.md --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 867ce1774..2655cc273 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -60,7 +60,7 @@ Tags ## Description -The set of finalized tags assigned to Tag Sources. +The set of tags assigned to Tag Sources that also account for potential provider-defined or user-defined tag evaluations. ## Content Constraints From dab92546dbcd8579d9f562e54a140385acca06b4 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Tue, 7 Nov 2023 11:57:01 -0500 Subject: [PATCH 34/37] Update specification/dimensions/tags.md Co-authored-by: Udam Dewaraja --- specification/dimensions/tags.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 2655cc273..3abcf0a9b 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -9,7 +9,8 @@ The Tags column adheres to the following requirements: * The Tags column MUST contain user-defined and/or provider-defined tags. * The Tags column MUST only contain finalized tags. * The Tags column MUST be in Key-Value Format. -* A Tag without a specified value MUST have its value set to null. +* A Tag key without a specified value MUST have its tag value set to null. +* If Tag finalization is supported, providers MUST publish tag finalization methods and semantics within their respective documentation. * Providers MUST NOT alter user-defined Tag keys or values. Provider-defined Tags additionally adhere to the following requirements: From 3b44e6bc16447d091ec00fff9ed5b790163dec79 Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Tue, 7 Nov 2023 12:00:29 -0500 Subject: [PATCH 35/37] Update tags.md --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 3abcf0a9b..3e9133b8c 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -2,7 +2,7 @@ The Tags column represents the set of tags assigned to Tag Sources that also account for potential provider-defined or user-defined tag evaluations. Tags are commonly used for scenarios like adding business context to billing data to identify and accurately allocate charges. -A tag becomes *finalized* when a single value is selected from a set of possible tag values assigned to the tag key. This can occur when a tag is set at different levels of a resource grouping hierarchy (if supported by the Provider), or a tag is value is determined from a set of user-defined rules. +A tag becomes *finalized* when a single value is selected from a set of possible tag values assigned to the tag key. When supported by a Provider, this can occur when a tag is set at different levels of a resource grouping hierarchy, or a tag's value is determined from a set of user-defined rules. The Tags column adheres to the following requirements: From ac21cf68a3d0ffe7a9bbfe7b36ea71451c09af9c Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Tue, 7 Nov 2023 12:03:31 -0500 Subject: [PATCH 36/37] Update specification/dimensions/tags.md Co-authored-by: Udam Dewaraja --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 3e9133b8c..0e5555de0 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -31,7 +31,7 @@ The following is an example of one user-defined tag and one provider-defined tag ## Finalized Tags -A tag can either be static or dynamic. If a tag is static, its value is immutable. If a tag is dynamic, its value is determined by a set of predefined user or provider rules. A finalized tag is the final result of any static or dynamic Tag. +Within a provider, tag keys may be associated with multiple values, and potentially defined at different levels within the provider, such as accounts, folders, resources and other resource grouping constructs. When finalizing, providers must reduce these multiple levels of definition to a single value where each key is associated with exactly one value. The method by which this is done and the semantics are up to each provider, but must be documented within their respective documentation. As a example, let's assume 1 sub account exists with 1 virtual machine with the following details, and tag inheritance favors Resources over Sub Accounts. From f37f550bf6987290c9f2bcbbd7c6d30eac42410a Mon Sep 17 00:00:00 2001 From: Christopher Harris Date: Tue, 7 Nov 2023 12:21:56 -0500 Subject: [PATCH 37/37] Update tags.md --- specification/dimensions/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/dimensions/tags.md b/specification/dimensions/tags.md index 0e5555de0..c4f7f99b1 100644 --- a/specification/dimensions/tags.md +++ b/specification/dimensions/tags.md @@ -2,7 +2,7 @@ The Tags column represents the set of tags assigned to Tag Sources that also account for potential provider-defined or user-defined tag evaluations. Tags are commonly used for scenarios like adding business context to billing data to identify and accurately allocate charges. -A tag becomes *finalized* when a single value is selected from a set of possible tag values assigned to the tag key. When supported by a Provider, this can occur when a tag is set at different levels of a resource grouping hierarchy, or a tag's value is determined from a set of user-defined rules. +A tag becomes *finalized* when a single value is selected from a set of possible tag values assigned to the tag key. When supported by a Provider, this can occur when a tag value is set by provider-defined or user-defined rules. The Tags column adheres to the following requirements: