diff --git a/.github/ISSUE_TEMPLATE/discussion-topic.md b/.github/ISSUE_TEMPLATE/discussion-topic.md deleted file mode 100644 index e5443e87e..000000000 --- a/.github/ISSUE_TEMPLATE/discussion-topic.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Discussion Topic -about: Discussion topics that require broader input from FOCUS members -title: Title of the discussion topic OR open question needing member feedback -labels: discussion topic -assignees: '' - ---- - -### Description -> Describe the discussion topic and/or open topic is. Describe discussion that has taken place and where community feedback is needed. Provide specifics (specially if there are multiple possible options). - -### Proposed approach -> Describe the approach that your group is proposing - -### Github issue or Reference -> If the topic is related to a particular work item, reference the Github issue. If its a specification-wide topic, indicate that. - -### Context -> Add any context that may help the community think through this and provide useful feedback diff --git a/.github/ISSUE_TEMPLATE/discussion-topic.yml b/.github/ISSUE_TEMPLATE/discussion-topic.yml deleted file mode 100644 index 08d54d674..000000000 --- a/.github/ISSUE_TEMPLATE/discussion-topic.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: Discussion Topic -description: Initiate discussion on broad topics within the FOCUS community. -title: "[DISCUSSION]: " -labels: ["discussion topic"] -assignees: ["shawnalpay"] -body: - - type: textarea - attributes: - label: Description - description: Describe the discussion topic, the discussions that have already taken place, and where community feedback is needed. Provide specifics, especially if there are multiple possible options. - placeholder: Describe the topic and any prior discussions here. - validations: - required: true - - - type: textarea - attributes: - label: Proposed Approach - description: Describe the approach that your group is proposing for the discussion topic. - placeholder: Outline your proposed approach here. - validations: - required: true - - - type: input - attributes: - label: GitHub Issue or Reference - description: If the topic is related to a particular work item, reference the GitHub issue here. If it's a specification-wide topic, indicate that. - placeholder: e.g., Issue #123 or Specification-wide - validations: - required: false - - - type: textarea - attributes: - label: Context - description: Add any context that may help the community think through this and provide useful feedback. - placeholder: Provide additional context here. - validations: - required: false - - - type: textarea - attributes: - label: Data Submission for Discussion - description: Provide relevant sample data or data extracts that support your discussion. Ensure data is anonymized and does not include sensitive or proprietary information. - placeholder: Attach sample data or data extracts here. Ensure compliance with data privacy guidelines. - validations: - required: false diff --git a/.github/ISSUE_TEMPLATE/feedback.md b/.github/ISSUE_TEMPLATE/feedback.md new file mode 100644 index 000000000..a5cb2d3ed --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feedback.md @@ -0,0 +1,78 @@ +# Feedback on Unsupported Features, Use Cases, and Existing FOCUS Spec. +description: Provide feedback on unsupported FinOps features, use cases, or scenarios, as well as on the existing FOCUS specification content. Avoid sharing proprietary information. +title: "[FEEDBACK]" +labels: ["feedback"] +assignees: [shawnalpay, jpradocueva] + +--- + +### **Template Usage Notes**: +1. All fields marked as **mandatory** [*] must be filled before submission. +2. For **Supporting Data/Documentation**, ensure that linked files are accessible to relevant stakeholders. + +## 1. **Problem statement** +Describe the problem or opportunity that this issue addresses. Explain the context and why it needs resolution. + +**Summary: [*]** +_Briefly describe the problem or opportunity that this issue addresses and why it needs resolution._ +> **Placeholder:** Briefly describe the problem or opportunity that needs resolution. + +**Which area does this issue relate to? [*]** +_Select one of the provided options:_ +- A: Missing FinOps feature, use case, or scenario +- B: Existing FOCUS specification content +- C: Other + +**Detailed Description [*]:** +_Provide a detailed description of the problem or opportunity. Add context or any other relevant information that may help in addressing this issue._ +> **Placeholder:** Provide a comprehensive description of the problem or opportunity, including context and any relevant details. + +## 2. **Use Cases** +Please describe the use cases, whether FinOps-related or otherwise, that cannot be performed with the existing specification unless this issue is addressed. + +**What use cases, FinOps or others, can't be performed with the existing specification unless this issue is addressed? [*]** +_Provide detailed descriptions of the use cases that can't be performed unless this issue is addressed._ +> **Placeholder:** List the specific use cases that can't be performed due to the existing limitations. + +## 3. **FinOps Personas** +List the FinOps personas this issue relates to. + +**Which FinOps personas does this issue relate to? [*]** +_Indicate which FinOps personas this issue relates to._ +> **Placeholder:** e.g., Practitioner, Executive, Finance, Engineering, Procurement, Operations, etc. + +## 4. **Providers** +List provider groups or specific providers this issue relates to. + +**Which provider groups or specific providers does this issue relate to? [*]** +_List provider groups (e.g., CSPs, SaaS) separated by semicolons (`;`), and specific providers within those groups separated by commas (`,`). If the issue applies to all providers within a group, you can simply specify the group name (e.g., 'All CSPs')._ +> **Placeholder:** e.g., All CSPs; SaaS: Snowflake, Salesforce + +## 5. **Criticality Scale** +Indicate how critical this issue or feature request is for your organization using the scale provided below. + +**On a scale of 1 - 4, how critical is this for your organization? [*]** +_Select one of the provided options:_ +- 1: Critical - Blocks my organization from adopting FOCUS +- 2: Important - Ideally resolved within the next 3-6 months +- 3: Important - Ideally resolved within the next 6-12 months +- 4: Suggestion - Resolution not urgent + +## 6. **Objective** +State the objective of this feedback. +- What outcome is expected? +- Define how success will be measured (e.g., metrics and KPIs). + +**Objective:** +_Outline the expected outcome and success criteria._ +> **Placeholder:** Outline the desired outcome and any metrics or KPIs to measure success. + +## 7. **Supporting Data/Documentation** + +**Data Examples:** +_Provide links to relevant sample data or attach data extracts that support your feedback. Ensure data is anonymized and does not include sensitive or proprietary information._ +> **Placeholder:** Add link(s) to sample data or attach extracts that support your feedback. + +**Issues, PRs, or Other References:** +_Provide links to any relevant GitHub issues, pull requests, or other applicable references._ +> **Placeholder:** Add links to any relevant GitHub issues, pull requests, or other applicable references. diff --git a/.github/ISSUE_TEMPLATE/feedback.yml b/.github/ISSUE_TEMPLATE/feedback.yml index 656903ca8..db90a1289 100644 --- a/.github/ISSUE_TEMPLATE/feedback.yml +++ b/.github/ISSUE_TEMPLATE/feedback.yml @@ -1,48 +1,113 @@ -name: Feature Request and Use Case Feedback -description: Provide feedback on unsupported use cases or features in the FOCUS specification, including FinOps scenarios, to help prioritize updates. Avoid sharing proprietary information. +name: "Feature Request and Use Case Feedback" +description: "Provide feedback on unsupported FinOps features, use cases, or scenarios, as well as on the existing FOCUS specification content. Avoid sharing proprietary information." title: "[FEEDBACK]: " -labels: ["use case"] -assignees: ["shawnalpay, jpradocueva,"] +labels: + - "feedback" +assignees: + - "shawnalpay" + - "jpradocueva" body: - type: markdown attributes: - value: "FOCUS working group seeks gaps in the current specification for FinOps and beyond. Share unsupported use cases or features to prioritize updates. Avoid sharing proprietary information." - + value: | + --- + ### **Template Usage Notes**: + 1. All fields marked as **mandatory** [*] must be filled before submission. + 2. For **Supporting Data/Documentation**, ensure that linked files are accessible to relevant stakeholders. + + + - type: markdown + attributes: + value: | + ## 1. **Problem statement** + Describe the problem or opportunity that this issue addresses. Explain the context and why it needs resolution. + + - type: textarea + id: issue-summary + attributes: + label: Summary + description: "Briefly describe the problem or opportunity that this issue addresses and why it needs resolution." + placeholder: "Briefly describe the problem or opportunity that needs resolution." + validations: + required: true + + - type: dropdown + id: issue-area + attributes: + label: Which area does this issue relate to? + description: "Select one of the provided options:" + options: + - 'A: Missing FinOps feature, use case, or scenario' + - 'B: Existing FOCUS specification content' + - 'C: Other' + validations: + required: true + - type: textarea + id: issue-description attributes: - label: Proposed Change - description: Short description of the change and why it is necessary. - placeholder: Describe the proposed change briefly and why it is necessary + label: Detailed Description + description: "Provide a detailed description of the problem or opportunity. Add context or any other relevant information that may help in addressing this issue." + placeholder: "Provide a comprehensive description of the the problem or opportunity, including context and any relevant details" validations: required: true - + + - type: markdown + attributes: + value: | + ## 2. **Use Cases** + Please describe the use cases, whether FinOps-related or otherwise, that cannot be performed with the existing specification unless this issue is addressed. + - type: textarea + id: use_cases attributes: - label: What use cases, FinOps or others, can't be performed with the current specification without this change? - description: Describe in detail the use cases, whether FinOps-related or otherwise, that your organization cannot perform with the current specification without the proposed change. + label: What use cases, FinOps or others, can't be performed with the existing specification unless this issue is addressed? + description: "Provide detailed descriptions of the use cases that can't be performed unless this issue is addressed." + placeholder: "List the specific use cases that can't be performed due to the existing limitations." validations: required: true - - type: input + - type: markdown attributes: - label: Which FinOps personas perform this use case? - description: List one or more FinOps personas that perform this use case - placeholder: e.g., Cost Analyst, Cloud Architect, etc + value: | + ## 3. **FinOps Personas** + List the FinOps personas this issue relates to. + + - type: textarea + id: finops-personas + attributes: + label: Which FinOps personas does this issue relate to? + description: "Indicate which FinOps personas this issue relates to." + placeholder: "e.g., Practitioner, Executive, Finance, Engineering, Procurement, Operations, etc." validations: required: true - - type: input + - type: markdown + attributes: + value: | + ## 4. **Providers** + List provider groups or specific providers this issue relates to. + + - type: textarea + id: providers attributes: - label: For which providers do you perform this use case for? - description: List each provider separated by commas - placeholder: e.g., AWS, Azure, GCP, Snowflake, etc + label: Which provider groups or specific providers does this issue relate to? + description: "List provider groups (e.g., CSPs, SaaS) separated by semicolons (`;`), and specific providers within those groups separated by commas (`,`). If the issue applies to all providers within a group, you can simply specify the group name (e.g., 'All CSPs')." + placeholder: "e.g., All CSPs; SaaS: Snowflake, Salesforce" validations: required: true + - type: markdown + attributes: + value: | + ## 5. **Criticality Scale** + Indicate how critical this issue or feature request is for your organization using the scale provided below. + - type: dropdown + id: criticality-scale attributes: - label: Criticality Scale - description: On a scale of 1 - 4, how critical is this for your organization? + label: On a scale of 1 - 4, how critical is this for your organization? + description: "Select one of the provided options." options: - '1: Blocks my organization from adopting FOCUS' - '2: Important for adoption in the next 3-6 months' @@ -51,26 +116,42 @@ body: validations: required: true + - type: markdown + attributes: + value: | + ## 6. **Objective** + State the objective of this feedback. + - What outcome is expected? + - Define how success will be measured (e.g., metrics and KPIs). + - type: textarea + id: objective attributes: - label: Key Metrics and KPIs - description: List the metrics and KPIs that will measure the success of this use case (e.g., cost per service, spend reduction percentage). - placeholder: e.g., cost per service, spend reduction percentage, etc. + label: "Objective" + description: "Outline the expected outcome and success criteria." + placeholder: "Outline the desired outcome and any metrics or KPIs to measure success." validations: required: false + - type: markdown + attributes: + value: | + ## 7. **Supporting Data/Documentation** + - type: textarea + id: data_examples attributes: - label: Context / Supporting information - description: Provide any other relevant information here - placeholder: Additional details... + label: "Data Examples" + description: "Provide links to relevant sample data or attach data extracts that support your feedback. Ensure data is anonymized and does not include sensitive or proprietary information." + placeholder: "Add link(s) to sample data or attach extracts that support your feedback." validations: - required: true + required: false - type: textarea + id: issue_pr_references attributes: - label: Data Submission for Discussion - description: Provide relevant sample data or data extracts that support your feedback. Ensure data is anonymized and does not include sensitive or proprietary information. - placeholder: Attach sample data or data extracts here. Ensure compliance with data privacy guidelines. + label: "Issues, PRs, or Other References" + description: "Provide links to any relevant GitHub issues, pull requests, or other applicable references." + placeholder: "Add links to any relevant GitHub issues, pull requests, or other applicable references." validations: - required: false + required: false diff --git a/.github/ISSUE_TEMPLATE/spec-change.md b/.github/ISSUE_TEMPLATE/spec-change.md deleted file mode 100644 index 0e8003855..000000000 --- a/.github/ISSUE_TEMPLATE/spec-change.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: Spec Change -about: Spec change issue -title: Spec Change title -labels: spec change -assignees: '' ---- - -### Type -> Type of issue (e.g. Dimension, Metric, Attribute, Documentation etc.) -Normalized? Yes | No - - -### Description -> Description of the issue - -### Definition of done - -- [ ] Rationalize vendor-neutral, cross-cloud naming -- [ ] Complete spec template and include naming (code name, display name), constraints, guidelines, compatibility with major providers etc. -** If Normalized Dimension ** -- [ ] Include principles and governance criteria for maintaining this dimension - -** If Normalized Dimension ** -Work for generating the normalized list of supported values is tracked in a separate issue. Mappings between normalized values and vendor specified values need to be explored as a part of this work. However, these mappings are not included in the spec documentation. Separate tasks will be created for making these mappings available to practitioners outside of the FOCUS repository. diff --git a/.github/ISSUE_TEMPLATE/spec-change.yml b/.github/ISSUE_TEMPLATE/spec-change.yml deleted file mode 100644 index aa4104c63..000000000 --- a/.github/ISSUE_TEMPLATE/spec-change.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: Spec Change -description: Submit changes or updates to the current specification. -title: "[SPEC CHANGE]: " -labels: ["discussion topic"] -assignees: ["shawnalpay"] -body: - - type: dropdown - attributes: - label: Type of Issue - description: Select the type of spec change (e.g., Dimension, Metric, Attribute, Documentation). - options: - - 'Dimension' - - 'Metric' - - 'Attribute' - - 'Documentation' - validations: - required: true - - - type: checkboxes - attributes: - label: Normalized - description: Indicate if the dimension is normalized. - options: - - label: "Yes" - - label: "No" - validations: - required: true - - - type: textarea - attributes: - label: Description - description: Describe the issue and the changes being proposed. - placeholder: Provide a detailed description of the spec change. - validations: - required: true - - - type: textarea - attributes: - label: Definition of Done - description: Checklist of items that define the completion of the spec change. - placeholder: "- Rationalize vendor-neutral, cross-cloud naming\n- Complete spec template and include naming, constraints, guidelines\n- Include principles and governance criteria for maintaining normalized dimensions" - validations: - required: true - - - type: textarea - attributes: - label: Context / Supporting Information - description: Provide any additional context that may help in understanding or evaluating the spec change. Include mappings between normalized values and vendor-specified values if applicable. - placeholder: Additional context, references to other issues, or any relevant supporting information. - validations: - required: false diff --git a/.github/ISSUE_TEMPLATE/work-item.yml b/.github/ISSUE_TEMPLATE/work-item.yml index bc422b790..2f588c778 100644 --- a/.github/ISSUE_TEMPLATE/work-item.yml +++ b/.github/ISSUE_TEMPLATE/work-item.yml @@ -30,8 +30,7 @@ body: attributes: label: "Problem Statement" description: "Provide a detailed explanation of the problem or issue." - placeholder: "Your input here..." - value: "Provide details of the problem statement here." + placeholder: "Provide details of the problem statement here." validations: required: true @@ -47,8 +46,7 @@ body: attributes: label: "Objective" description: "Describe the expected outcome and success criteria." - placeholder: "Your input here..." - value: "Outline the expected outcome and success criteria." + placeholder: "Outline the expected outcome and success criteria." validations: required: true @@ -65,8 +63,7 @@ body: attributes: label: "Supporting Documentation" description: "Provide links to data examples, use cases, PRs, or other relevant documents." - placeholder: "Your input here..." - value: "Include links to supporting documentation, if applicable." + placeholder: "Include links to supporting documentation, if applicable." validations: required: true @@ -85,8 +82,7 @@ body: attributes: label: "Proposed Solution / Approach" description: "Outline potential solutions or approaches." - placeholder: "Your input here..." - value: "Summarize the proposed solution or approach." + placeholder: "Summarize the proposed solution or approach." - type: markdown attributes: @@ -101,8 +97,7 @@ body: attributes: label: "Epic or Theme Association" description: "Provide potential epics or themes" - placeholder: "Your input here..." - value: "Provide the rational for the Epic or Theme." + placeholder: "Provide the rational for the Epic or Theme." - type: markdown attributes: @@ -117,5 +112,4 @@ body: attributes: label: "Stakeholders" description: "List the main stakeholders for this work item." - placeholder: "Your input here..." - value: "Provide names and roles of key stakeholders." + placeholder: "Provide names and roles of key stakeholders." diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index 232e61ba7..000000000 --- a/LICENSE.txt +++ /dev/null @@ -1 +0,0 @@ -See: License.md \ No newline at end of file diff --git a/README.md b/README.md index fd92a2516..74b29f28a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# FinOps Open Cost and Usage Specification (FOCUS) - Specification Working Group +# FinOps Open Cost and Usage Specification (FOCUS) - Working Group ## Overview @@ -6,14 +6,12 @@ The FinOps Open Cost and Usage Specification (FOCUS) is a community-driven effor The vision of the FOCUS project is to help the cloud and SaaS industry move toward a common vocabulary around usage and billing data. This will not only help FinOps professionals in the analysis of billing data from disparate sources but will also help software engineering teams by providing a target format for the usage and billing data that their products will generate. -Some of the usecases this capability can enable: +Some of the use cases this capability can enable: - The FOCUS spec will make it easier for FinOps practitioners to approach a new billing data source, as common concepts have been mapped to the common vocabulary of the spec. - The FOCUS spec will make it easier to merge multiple billing data sources together, and perform cross-cloud and cross-vendor analysis and cost reporting. - The FOCUS spec should make it easier to open source more FinOps visibility tools, and to accelerate the FinOps framework capability of data ingestion and normalization. -[Working Group Charter]() **Link TBC** - ## Notation Conventions and Compliance The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", @@ -24,12 +22,12 @@ The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", [[RFC8174](https://tools.ietf.org/html/rfc8174)] when, and only when, they appear in all capitals, as shown here. -An implementation of the [specification][] is not compliant if it fails to +An implementation of the specification is not compliant if it fails to satisfy one or more of the "MUST", "MUST NOT", "REQUIRED", "SHALL", or "SHALL -NOT" requirements defined in the [specification][]. Conversely, an -implementation of the [specification][] is compliant if it satisfies all the +NOT" requirements defined in the specification. Conversely, an +implementation of the specification is compliant if it satisfies all the "MUST", "MUST NOT", "REQUIRED", "SHALL", and "SHALL NOT" requirements defined in -the [specification][]. +the specification. ## Versioning the Specification @@ -37,13 +35,17 @@ Changes to the [specification](./specification/overview.md) are versioned accord ## Project Naming -- The official project name is "FinOps Open Cost and Usage Specification" -- The official acronym used by the FinOps Open Cost and Usage Specification project is "FOCUS" -- While the official acronym includes the word "Specification", it is still acceptable to refer to this working groups output as the "FOCUS Specification" +- The official project name is "FinOps Open Cost and Usage Specification". +- The official acronym used by the FinOps Open Cost and Usage Specification project is "FOCUS". +- While the official acronym includes the word "Specification", it is still acceptable to refer to this working group's output as the "FOCUS Specification". ## About the project See the [project repository](https://github.com/FinOps-Open-Cost-and-Usage-Spec/foundation) for information about the following, and more: +- [Project Charter](https://github.com/FinOps-Open-Cost-and-Usage-Spec/foundation/blob/main/FOCUS_-_Membership_Agreement_Package_for_use.pdf) +- [Operating Procedures](https://github.com/FinOps-Open-Cost-and-Usage-Spec/foundation/blob/main/operating_procedures.md) +- [Steering Committee](https://github.com/FinOps-Open-Cost-and-Usage-Spec/foundation/blob/main/steering_committee.md) +- [Release Planning](https://github.com/FinOps-Open-Cost-and-Usage-Spec/FOCUS_Spec/blob/working_draft/RELEASE-PLANNING.md) - [Change / contribution process](https://github.com/FinOps-Open-Cost-and-Usage-Spec/foundation/blob/main/contributing.md) diff --git a/specification/columns/invoiceissuer.md b/specification/columns/invoiceissuer.md index dfe03ed11..ccc89482b 100644 --- a/specification/columns/invoiceissuer.md +++ b/specification/columns/invoiceissuer.md @@ -3,7 +3,10 @@ An Invoice Issuer is an entity responsible for invoicing for the [*resources*](#glossary:resource) or [*services*](#glossary:service) consumed. It is commonly used for cost analysis and reporting scenarios. -The InvoiceIssuer column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). This column MUST be of type String and MUST NOT contain null values. +The InvoiceIssuer column adheres to the following requirements: + +* The InvoiceIssuer column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). +* This column MUST be of type String and MUST NOT contain null values. See [Appendix: Origination of cost data](#originationofcostdata) section for examples of [Provider](#provider), [Publisher](#publisher) and Invoice Issuer values that can be used for various purchasing scenarios. diff --git a/specification/columns/provider.md b/specification/columns/provider.md index a88b07b69..a838fe476 100644 --- a/specification/columns/provider.md +++ b/specification/columns/provider.md @@ -2,7 +2,10 @@ A Provider is an entity that makes the [*resources*](#glossary:resource) or [*services*](#glossary:service) available for purchase. It is commonly used for cost analysis and reporting scenarios. -The Provider column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). This column MUST be of type String and MUST NOT contain null values. +The Provider column adheres to the following requirements: + +* The Provider column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). +* This column MUST be of type String and MUST NOT contain null values. See [Appendix: Origination of cost data](#originationofcostdata) section for examples of Provider, Publisher and Invoice Issuer values that can be used for various purchasing scenarios. diff --git a/specification/columns/regionid.md b/specification/columns/regionid.md index b1cada0e4..7d6d459db 100644 --- a/specification/columns/regionid.md +++ b/specification/columns/regionid.md @@ -2,7 +2,10 @@ A Region ID is a provider-assigned identifier for an isolated geographic area where a [*resource*](#glossary:resource) is provisioned or a [*service*](#glossary:service) is provided. The region is commonly used for scenarios like analyzing cost and unit prices based on where *resources* are deployed. -The RegionId column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports deploying resources or services within a *region* and MUST be of type String. RegionId MUST NOT be null when a *resource* or *service* is operated in or managed from a distinct region by the Provider and MAY contain null values when a *resource* or *service* is not restricted to an isolated geographic area. +The RegionId column adheres to the following requirements: + +* The RegionId column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports deploying resources or services within a region and MUST be of type String. +* RegionId MUST NOT be null when a *resource* or *service* is operated in or managed from a distinct region by the Provider and MAY contain null values when a *resource* or *service* is not restricted to an isolated geographic area. ## Column ID diff --git a/specification/columns/regionname.md b/specification/columns/regionname.md index ee3092e51..dcce41c0c 100644 --- a/specification/columns/regionname.md +++ b/specification/columns/regionname.md @@ -2,7 +2,10 @@ Region Name is a provider-assigned display name for an isolated geographic area where a [*resource*](#glossary:resource) is provisioned or a [*service*](#glossary:service) is provided. Region Name is commonly used for scenarios like analyzing cost and unit prices based on where *resources* are deployed. -The RegionName column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports deploying resources or services within a *region* and MUST be of type String. RegionName MUST NOT be null when a *resource* or *service* is operated in or managed from a distinct region by the Provider and MAY contain null values when a *resource* or *service* is not restricted to an isolated geographic area. +The RegionName column adheres to the following requirements: + +* The RegionName column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports deploying resources or services within a region and MUST be of type String. +* RegionName MUST NOT be null when a *resource* or *service* is operated in or managed from a distinct region by the Provider and MAY contain null values when a *resource* or *service* is not restricted to an isolated geographic area. ## Column ID diff --git a/specification/columns/resourceid.md b/specification/columns/resourceid.md index f494aa480..764be72d2 100644 --- a/specification/columns/resourceid.md +++ b/specification/columns/resourceid.md @@ -2,7 +2,13 @@ A Resource ID is an identifier assigned to a [*resource*](#glossary:resource) by the provider. The Resource ID is commonly used for cost reporting, analysis, and allocation scenarios. -The ResourceId column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources. This column MUST be of type String. The ResourceId value MAY be a nullable column as some cost data [*rows*](#glossary:row) may not be associated with a *resource*. ResourceId MUST appear in the cost data if an identifier is assigned to a *resource* by the provider. ResourceId SHOULD be a fully-qualified identifier that ensures global uniqueness within the provider. +The ResourceId column adheres to the following requirements: + +* The ResourceId column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources. +* This column MUST be of type String. +* The ResourceId value MAY be a nullable column as some cost data [*rows*](#glossary:row) may not be associated with a *resource*. +* ResourceId MUST appear in the cost data if an identifier is assigned to a *resource* by the provider. +* ResourceId SHOULD be a fully-qualified identifier that ensures global uniqueness within the provider. ## Column ID diff --git a/specification/columns/resourcename.md b/specification/columns/resourcename.md index 71fa7a938..bb41c6182 100644 --- a/specification/columns/resourcename.md +++ b/specification/columns/resourcename.md @@ -2,7 +2,13 @@ The Resource Name is a display name assigned to a [*resource*](#glossary:resource). It is commonly used for cost analysis, reporting, and allocation scenarios. -The ResourceName column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources. This column MUST be of type String. The ResourceName value MAY be a nullable column as some cost data [*rows*](#glossary:row) may not be associated with a *resource* or because a display name cannot be assigned to a *resource*. ResourceName MUST NOT be null if a display name can be assigned to a *resource*. *Resources* not provisioned interactively or only have a system-generated [ResourceId](#resourceid) MUST NOT duplicate the same value as the ResourceName. +The ResourceName column adheres to the following requirements: + +* The ResourceName column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources. +* This column MUST be of type String. +* The ResourceName value MAY be a nullable column as some cost data [*rows*](#glossary:row) may not be associated with a *resource* or because a display name cannot be assigned to a *resource*. +* ResourceName MUST NOT be null if a display name can be assigned to a *resource*. +* *Resources* not provisioned interactively or only have a system-generated [ResourceId](#resourceid) MUST NOT duplicate the same value as the ResourceName. ## Column ID diff --git a/specification/columns/resourcetype.md b/specification/columns/resourcetype.md index d05622c87..0d7e6c079 100644 --- a/specification/columns/resourcetype.md +++ b/specification/columns/resourcetype.md @@ -2,7 +2,11 @@ Resource Type describes the kind of [*resource*](#glossary:resource) the charge applies to. A Resource Type is commonly used for scenarios like identifying cost changes in groups of similar *resources* and may include values like Virtual Machine, Data Warehouse, and Load Balancer. -The ResourceType column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources and supports assigning a type for resources. This column MUST be of type String and MUST NOT be null when a corresponding [ResourceId](#resourceid) is not null. When a corresponding ResourceId value is null, the ResourceType column value MUST also be null. +The ResourceType column adheres to the following requirements: + +* The ResourceType column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) when the provider supports billing based on provisioned resources and supports assigning a type for resources. +* This column MUST be of type String and MUST NOT be null when a corresponding [ResourceId](#resourceid) is not null. +* When a corresponding ResourceId value is null, the ResourceType column value MUST also be null. ## Column ID diff --git a/specification/columns/servicecategory.md b/specification/columns/servicecategory.md index 77a83c41e..90925b24e 100644 --- a/specification/columns/servicecategory.md +++ b/specification/columns/servicecategory.md @@ -2,7 +2,10 @@ The Service Category is the highest-level classification of a [*service*](#glossary:service) based on the core function of the *service*. Each *service* should have one and only one category that best aligns with its primary purpose. The Service Category is commonly used for scenarios like analyzing costs across providers and tracking the migration of workloads across fundamentally different architectures. -The ServiceCategory column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) and MUST NOT be null. This column is of type String and MUST be one of the allowed values. +The ServiceCategory column adheres to the following requirements: + +* The ServiceCategory column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset) and MUST NOT be null. +* This column is of type String and MUST be one of the allowed values. ## Column ID diff --git a/specification/columns/servicename.md b/specification/columns/servicename.md index a5086cba1..b5a0d7af4 100644 --- a/specification/columns/servicename.md +++ b/specification/columns/servicename.md @@ -4,7 +4,10 @@ A [*service*](#glossary:service) represents an offering that can be purchased fr The Service Name is a display name for the offering that was purchased. The Service Name is commonly used for scenarios like analyzing aggregate cost trends over time and filtering data to investigate anomalies. -The ServiceName column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). This column MUST be of type String and MUST NOT contain null values. +The ServiceName column adheres to the following requirements: + +* The ServiceName column MUST be present in a [*FOCUS dataset*](#glossary:FOCUS-dataset). +* This column MUST be of type String and MUST NOT contain null values. ## Column ID diff --git a/specification/versions/candidate_release.md b/specification/versions/candidate_release.md index 536156fe9..9a9e1f2ef 100644 --- a/specification/versions/candidate_release.md +++ b/specification/versions/candidate_release.md @@ -1,6 +1,6 @@ ## Version -v1.0 Candidate Release +v1.2 Candidate Release | ⚡ Warning | |:-------------------------------------------------------------------------------| diff --git a/specification/versions/main.md b/specification/versions/main.md index abf1c7eff..1ba30a72d 100644 --- a/specification/versions/main.md +++ b/specification/versions/main.md @@ -1,6 +1,6 @@ ## Version -Publication version 1.0 +Publication version 1.2 Copyright © 2024 - FinOps Open Cost and Usage Specification (FOCUS) a Series of the Joint Development Foundation Projects, LLC. Linux Foundation [trademark](https://www.linuxfoundation.org/legal/trademarks), and document use rules apply.