From 428e151258f533f1226b9159488fc603b22bf96a Mon Sep 17 00:00:00 2001 From: Shawn Alpay <77511110+shawnalpay@users.noreply.github.com> Date: Thu, 7 Nov 2024 12:34:53 -0800 Subject: [PATCH 1/9] Editorial changes to readme.md and license.txt (#621) - Made small editorial changes and added links and more context in readme.md - Deleted license.txt in favor of license.md --------- Co-authored-by: Joaquin --- LICENSE.txt | 1 - README.md | 24 +++++++++++++----------- 2 files changed, 13 insertions(+), 12 deletions(-) delete mode 100644 LICENSE.txt 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) From 63e519d91179796354a3ca4f17eb8498544fd0ad Mon Sep 17 00:00:00 2001 From: Mike Fuller Date: Fri, 8 Nov 2024 09:59:19 +1100 Subject: [PATCH 2/9] Bumped versions for work to begin on version 1.2 Signed-off-by: Mike Fuller --- specification/versions/candidate_release.md | 2 +- specification/versions/main.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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. From 58ee57b1f5d634b5da389a6e544eba1b3f5b34be Mon Sep 17 00:00:00 2001 From: Joaquin Date: Sat, 9 Nov 2024 20:46:11 +0000 Subject: [PATCH 3/9] [Editorial ] invoiceIssuerName: convert normative statements in bullet points (#623) Linked to Issue #606 that converts normative verbose statements into bullet points. --- specification/columns/invoiceissuer.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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. From 83dd2f59210b74e7465115bf2cb9257e8a29b89f Mon Sep 17 00:00:00 2001 From: Joaquin Date: Sat, 9 Nov 2024 20:47:25 +0000 Subject: [PATCH 4/9] [Editorial] Provider: convert the normative statements into bullet point (#624) This PR is derived from Issue #606 --- specification/columns/provider.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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. From ffa39b326e62e7610011a24e10460950788278e4 Mon Sep 17 00:00:00 2001 From: Joaquin Date: Sat, 9 Nov 2024 20:51:18 +0000 Subject: [PATCH 5/9] [Editorial] Regionid: covert the normative statements into bullet points (#625) This PR is in alignment with Issue #606 --------- Co-authored-by: Irena Jurica --- specification/columns/regionid.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 From d784abd002ff48f80bc5129a5f3e0081f10abc14 Mon Sep 17 00:00:00 2001 From: Joaquin Date: Sat, 9 Nov 2024 20:53:02 +0000 Subject: [PATCH 6/9] [Editorial] RegionName: convert the normative statements into bullet points (#626) This PR is in alignment with Issue #606 --------- Co-authored-by: Irena Jurica --- specification/columns/regionname.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 From c7c953d8d2648bc407e2ec37e823ca19a0ccd234 Mon Sep 17 00:00:00 2001 From: Joaquin Date: Sat, 9 Nov 2024 20:55:47 +0000 Subject: [PATCH 7/9] [Editorial] ResourceID: convert the normative statement into bullet points (#627) This PR is in alignment with Issue #606 --- specification/columns/resourceid.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 From 5d85c991e76460773d6da33c2df973b5c5478795 Mon Sep 17 00:00:00 2001 From: Joaquin Date: Sat, 9 Nov 2024 20:56:55 +0000 Subject: [PATCH 8/9] [Editorial] ResourceName: convert the normative statement into bullet points (#628) This PR is in alignment with Issue #660. --- specification/columns/resourcename.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 From c773e3f6c9eb557e0e4a539df543ab3bea2be86e Mon Sep 17 00:00:00 2001 From: Joaquin Date: Sat, 9 Nov 2024 21:00:01 +0000 Subject: [PATCH 9/9] [Editorial] ResourceType: convert the normative statements into bullet points (#629) This PR is in alignment with Issue #606 --- specification/columns/resourcetype.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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