<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.6.4 (Ruby 2.6.10) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-palmero-opsawg-dmlmo-09" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="DMLMO">Data Model for Lifecycle Management and Operations</title>

    <author initials="M." surname="Palmero" fullname="Marisol Palmero">
      <organization>Cisco Systems</organization>
      <address>
        <email>mpalmero@cisco.com</email>
      </address>
    </author>
    <author initials="F." surname="Brockners" fullname="Frank Brockners">
      <organization>Cisco Systems</organization>
      <address>
        <email>fbrockne@cisco.com</email>
      </address>
    </author>
    <author initials="S." surname="Kumar" fullname="Sudhendu Kumar">
      <organization>NC State University</organization>
      <address>
        <email>skumar23@ncsu.edu</email>
      </address>
    </author>
    <author initials="S." surname="Bhandari" fullname="Shwetha Bhandari">
      <organization>Thoughtspot</organization>
      <address>
        <email>shwetha.bhandari@thoughtspot.com</email>
      </address>
    </author>
    <author initials="C." surname="Cardona" fullname="Camilo Cardona">
      <organization>NTT</organization>
      <address>
        <email>camilo@ntt.net</email>
      </address>
    </author>
    <author initials="D." surname="Lopez" fullname="Diego Lopez">
      <organization>Telefonica I+D</organization>
      <address>
        <email>diego.r.lopez@telefonica.com</email>
      </address>
    </author>

    <date year="2023" month="January" day="17"/>

    <area>operations</area>
    <workgroup>OPSA Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document motivates and specifies a data model for lifecycle management and operations. It describes the motivation and requirements to collect asset-centric metrics including but not limited to asset adoption and usability, licensing, supported features and capabilities, enabled features and capabilities, etc.; with the primary objective to measure and improve the overall user experience along the lifecycle journey, from technical requirements and technology selection through advocacy and renewal, including the end of life of an asset.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>The virtualization of hardware assets and the development of applications using microservice architecture for cloud-native infrastructure created new consumption and licensing models. Any service can be deployed by composing multiple assets together where an asset refers to hardware, software, application, system or service. For example, cloud-native infrastructure from one vendor may be hosted on the physical server from another vendor or a combination of multiple cloud-native functions from one or more vendors can be combined to execute any service.</t>

<t>This introduces challenges for both lifecycle and adoption management of the assets. For example, a user may need to identify the capability availability of different assets or measure the usage of each capability (or the combination) from any specific asset to measure its optimal potential.  Moreover, the user could pinpoint the reason: the software application could not be optimally deployed, or is not simple to use, or is not well documented, etc.  The user may use feed such measurements and analysis metrics back to the support engineers and the developers, so they can focus their work effort only on features that users are adopting, or even determine when the lifecycle of the development could end.</t>

<t>This creates the need to collect and analyze asset-centric lifecycle management and operations data. From now on this data will be referred as Lifecycle Management and Operations (LMO); where LMO is not limited to virtualized or cloud environments, it covers all types of networking environments in which technology assets are deployed.</t>

<t>LMO data constitutes data needed to measure asset-centric lifecycle metrics including but not limited to asset adoption and usability, licensing, supported features and capabilities, enabled features and capabilities, etc. The primary objective is to facilitate the asset lifecycle management from the initial asset selection and positioning, licensing, feature enablement and usage, and beyond renewal to improve the overall user experience.</t>

<t>The main challenge in collecting LMO-related data, especially in a multi-vendor environment, relies on the ability to produce and consume such data in a vendor-agnostic, consistent and synchronized manner. APIs or telemetry are meant to collect and relay this data to receiving equipment for storing, analysis and/or visualization.</t>

<t>This document describes the motivation behind LMO, lists use cases, followed by the information model and data model of LMO. The list of use cases describes the need for new functional blocks and their interactions. The current version of this draft is focused on assets, entitlement information, feature usage and incident management. This draft specifies four YANG modules <xref target="RFC7950"/> focused on LMO, including:</t>

<figure><artwork><![CDATA[
* Entitlement, 
* Assets, 
* Usage level of Asset features, and 
* Incident Management.
]]></artwork></figure>

<t>This document is organized as follows.  Section 2 establishes the terminology and abbreviations.  In Section 3, the goals and motivation of LMO are discussed.  In Section 4, use cases are introduced. Section 5 specifies the information model and the data models for LMO.</t>

<section anchor="requirements-language"><name>Requirements language</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

</section>
</section>
<section anchor="terminology"><name>Terminology</name>

<t>Terminology and abbreviations used in this document:</t>

<t><list style="symbols">
  <t>Asset: refers to hardware, software, applications, or services. An asset can be physical or virtual.</t>
  <t>Consumer: refers to an entity that utilizes the outcomes of LMO. A consumer can be a user, a developer or some other interested third party.</t>
  <t>Developer: refers to the entity that creates or develops the entire asset or the part of the asset.</t>
  <t>EOL: End of Life.</t>
  <t>Features: are options or functional capabilities available in an asset.</t>
  <t>Entitlement: also known as license, is issued by an entity such as the developer or the Open Source community and allows the user to operate the asset. Entitlements determine how the asset can be leveraged and what is required in cases the asset is changed.</t>
  <t>LMO: Lifecycle Management and Operations.</t>
  <t>Optimal Software Version(OSV): refers to the elected software version considered optimal in the user environment.</t>
  <t>PID: Product Identifier.</t>
  <t>Usage: refers to how features of the asset are used.</t>
  <t>User: refers to owner or consumer of the asset. User belongs to an organization. Within the organization there are entities that: a) use the assets in their operations, b) manage the assets.</t>
  <t>User Experience: how a user interacts with and experiences a particular asset. It includes a user's perceptions of ease of use, efficiency, and utility of an asset.</t>
</list></t>

</section>
<section anchor="motivation"><name>Motivation</name>

<t>The user experience with a specific asset can be organized into four classes:</t>

<t><list style="numbers">
  <t>Asset characteristic class, covering anything related to asset, entitlement, features, etc.</t>
  <t>Utilization class, to measure how the assets and features are used, duration of usage, uptime, etc.</t>
  <t>Notification class, covering any security advisory, retirement, etc.</t>
  <t>Incident class, to record and report any problem the user has faced with the asset.</t>
</list></t>

<t>The ability to measure, produce and consume LMO could benefit the user organization in addressing issues such as:</t>

<t><list style="symbols">
  <t>Entitlements may not have been obtained at the optimum level for a given feature, where a user might have bought entitlements that are not activated.</t>
  <t>Features of an asset might not be used as needed in all deployments within the organization.</t>
  <t>Resolution of incidents involving the asset and the developer of the technology used within the asset.</t>
</list></t>

<t>In addition to the resolution of incidents, LMO could allow developer organizations to optimize the features they offer.  For example, they could consider deprecating features that are used infrequently or focus on introducing more features for the assets that are widely deployed in various infrastructures.</t>

<t>LMO also covers the need of communication between users and the developer.  LMO can provide the capability for users to provide feedback about any asset (e.g., potential deficiency of a feature, feature enhancement request).  An administrator in the user organization may include specific metrics that identify a potential problem of that specific feature or a capability of the asset.  An engineer in the developer organization can determine the impact of the potential deficiency from the number of users providing feedback.  Note that this channel is different from a "call to a Technical Assistance Center" in which the user may request help in resolving operational issues with the asset.</t>

</section>
<section anchor="use-cases"><name>Use Cases</name>

<section anchor="entitlement-inventory-and-activation"><name>Entitlement Inventory and Activation</name>

<t>An operations engineer would like to understand which entitlements are activated and which are used and/or consumed. It is also important for asset users to understand which features within their assets might need a entitlement and how to activate them.</t>

<t>It is relatively straightforward to have an inventory of existing entitlements when there is only one asset developer (providing the asset) and one asset family.</t>

<t>But complexity grows when there are many different developers, systems and processes involved. New service offerings have introduced new attributes and datasets and require alignment with new business models (pay-per-product, subscription model, pay-as-you-go model, etc.). They might support different entitlement types and models: asset activation keys, trust-based model, systems that act as proxy from the back end owned by the asset developer to support the control of entitlements, etc.</t>

<t>Sometimes it is a challenge to report which entitlements have been bought by the asset user, or who in the user organization owns that entitlement because that information might rely on different asset developers; even within the same asset developer, entitlements may correspond to different types or groups of assets. Asset users often need to interact with different entitlement systems and processes.</t>

<t>Information on how assets are entitled could be delivered from a combination of attributes such as: sales order, purchase order, asset activation key, serial number, etc.</t>

<t>If there is no consistency on how to deal with those data points, complexity increases for the consumer, potentially requiring manual steps. Automating those manual steps or exceptions becomes time-consuming, eventually leading to higher costs for the asset consumer.</t>

<t>Having a common data model for LMO eases the integration between different data sources, processes, and consolidation of the information under a common reference.</t>

</section>
<section anchor="features-in-use"><name>Features in Use</name>

<t>Feature logic is required to identify the configured features from the running configuration and determine how they might be used. There is often a lack of an easy method to list any configured features available in the current asset.</t>

<t>This information is extracted from the running configuration many times, implemented by a rule system without having an easy method to list any configured features available in the current asset.</t>

<t>Some of these use cases need to be built on top of others, and from them, other more complex use cases could be created. For instance, Software Compliance use cases can be automated, based on use cases like security advisory, errata, End of Life(EOL), etc.</t>

<t>All this brings a complete set of use cases that fulfills Lifecycle Management of assets, complementing and providing metrics on how asset users are using assets and how their experience from using those assets can be improved.</t>

</section>
<section anchor="assets-in-use"><name>Assets in Use</name>

<t>Current approach to quantify how an asset is used, requires volume or aggregated usage/consumption metrics related to deployed assets, functions, features, integrations, etc. Also the need to quantify which metrics might be associated to a user, an organization, to specific services and how often are used; while others may be based on pre agreed profile (contractural or usage) of intented use. Examples include:</t>

<t><list style="symbols">
  <t>Number of search/queries sent by the user.</t>
  <t>Amount of data returned to the user.</t>
  <t>Amount of active time spent using the asset/feature.</t>
  <t>Number of concurrent users accessing the asset/feature.</t>
  <t>Number of features in use.</t>
  <t>Number of users or sites using those features, etc.</t>
</list></t>

<t>The information models and data models for LMO include data fields to support metrics that might be required by consumption-based charging and licensing of asset usage.</t>

</section>
<section anchor="risk-mitigation-check-rmc"><name>Risk Mitigation Check (RMC)</name>

<t>Network, software and cloud engineers would like to be aware of known issues that are causing assets to crash so that they can act to remediate the issue quickly, or even prevent the crash if alerts are triggered on time.  There are analytics tools that can process memory core dumps and crash-related files, providing the ability to the asset developers to determine the root cause.</t>

<t>Accordingly, asset users can remediate the problem, automate the remedy to enable incident deflection, allowing the support staff to focus on new problems.  The goal of introducing normalization is not to define attributes for each of the elements being part of the crash information, but the results of RMC should be normalized and registered.</t>

<t>Risk Mitigation Check could also include the possibility to be aware of current and historical restarts allowing network and software engineers to enhance the service quality to asset users.</t>

</section>
<section anchor="errata"><name>Errata</name>

<t>Both hardware and software critical issues or Errata need development to automate asset user matching:</t>

<t><list style="symbols">
  <t>Hardware Errata match on product identifiers (PIDs) + serial numbers along with additional hardware attributes.</t>
  <t>Software Errata match on software type and software version along with some additional device attributes.</t>
</list></t>

<t>Engineering might develop the logic to check whether any critical issue applies to a single serial number or a specific software release.</t>

<t>The information to be correlated includes customer identification, entitlement, and asset information that the asset user might own. All this information needs to be correlated with hardware and software Errata, and EOL information to show which part of the asset inventory might be affected.</t>

</section>
<section anchor="security-advisory"><name>Security Advisory</name>

<t>The Security Advisory use case automates the matching of asset user data to security bulletins published by asset
developers.<br />
Security Advisory logic implemented by developers could apply to a specific software release.</t>

</section>
<section anchor="optimal-software-version-osv"><name>Optimal Software Version (OSV)</name>

<t>The objective of the Optimal Software Version (OSV) use case is that consumers can mark software images as OSV for their assets; based on this, it is easier for them to control and align their hardware and software assets to the set of OSVs.</t>

<t>Based on the logic of OSV, use cases like software compliance, risk trend analysis, acknowledge bugs, security advisories, errata, what-if analysis, etc., could be realized.</t>

<section anchor="software-conformance"><name>Software Conformance</name>

<t>All the assets should be at their latest recommended software version in case a security update is required to address a security issue of a specific feature.</t>

<t>The Software Conformance use case provides a view to the asset users and informs the users whether the assets that belong to a specific group conforms to the OSV or not.  It can provide the users with a report, including a representation of software compliance for the entire network and software applications.  This report could include the current software version running on the asset and the recommended software version. The report could enable users to quickly highlight which group of assets might need the most attention to inspire appropriate actions.</t>

<t>The Software Conformance use case uses data that might not be provided by the asset itself. Data needs to be provided and maintained also by the asset developers, through e.g., asset catalog information.  Similar logic applies to a feature catalog, where the asset developer maintains the data and updates it adequately based on existing bugs, security advisories, etc.</t>

<t>The Software Conformance process needs to correlate the Software catalog information with the software version running on the asset.</t>

</section>
<section anchor="risk-trend-analysis"><name>Risk Trend Analysis</name>

<t>The Risk Trend Analysis use case provides customers with a risk trend analysis, summarizing what might change before applying changes, including registered bugs, security advisories and errata.</t>

</section>
<section anchor="what-if-analysis"><name>What-if Analysis</name>

<t>The What-if Analysis use case allows asset users to plan for new hardware or software, giving them the possibility to change the config parameters or model how new hardware or software might change the software suggestions generated by OSV.</t>

<t>OSV and the associated use cases involve dependencies on attributes that might need to be collected from assets directly, including related inventory information (serial numbers, asset identifiers, software versions, etc.), but also dynamic information could be required, like:</t>

<t><list style="symbols">
  <t>Information on features that might be enabled on the particular asset.</t>
  <t>Catalogs, that might include information related to release notes. For example, consider a feature catalog. This catalog could include software versions that support a specific feature; the software releases that a feature is supported in; or the latest version that a feature is supported in, in case the feature is EOL.</t>
  <t>Data sources to correlate information coming from reports on critical issues or errata, security advisory, End of Life, etc.</t>
</list></t>

<t>Those catalogs and data sources with errata information, EOL, etc. need to be maintained and updated by asset developers, making sure, that the software running on the assets is safe to run and up to date.</t>

</section>
</section>
<section anchor="asset-retirement-end-of-life-eol"><name>Asset Retirement - End of Life (EOL)</name>

<t>Hardware EOL reports need to map Hardware EOL PIDs, focusing on base PIDs so that bundles, spares, non-base PIDs, etc., do not provide false EOL reporting to asset users. Software EOL reports are used to automate the matching of user software type and software version to software EOL bulletins.</t>

</section>
</section>
<section anchor="information-model"><name>Information Model</name>

<t>The broad metric classes defined in section 3 that quantify user experience can be modeled as shown in Figure 1. There is an inventory of all assets that the user possesses.  Each asset in the inventory may be entitled to one or more entitlements; a entitlement may contain one or more sub-entitlements.  The level of usage for each feature and entitlement associated with the asset is measured.  For every asset, a list of incidents could be created.</t>

<t>For example, a user needs to measure the utilization of a specific entitlement for a specific type of asset.  The information about the entitlement may reside in a entitlement server.  The state (activated or not) of the entitlement may reside with the asset itself or a proxy.  They can be aggregated/correlated as per the information model shown in Figure 1 to give information to the user regarding the utilization of the entitlements.  The user experience is thus enhanced by having accurate knowledge about the utility of the given entitlement.</t>

<figure><artwork><![CDATA[
 may_be_part_of                                    may_be_part_of
   +------+                                            +-------+
   |      |                                            |       |
   |      v                                            v       |
+------------+  entitled_by            tracked_by   +------------+
|Entitlements|<------------+          +-------------|   Usage    |
+------------+-----------+ | may_be_  | +---------->+------------+
|Entitlement | entitles  | | part_of  | | tracks    |  Features  |
| attributes |           | | +------+ | |           | and usage  |
+------------+           | | |      | | |           | attributes |
                         v | |      v v |           +------------+
                        +----------------+          
                        |     Asset      |                         
          future_       +----------------+    generated_by        
          association   |     Asset      |<----------------+
            +---------->|   attributes   |---------------+ |
            |           +----------------+    generates  | |
            v                                            v |
      +-----------+                                 +------------+
      |  Future   |                                 |  Incident  |
      | Expansion |                                 +------------+
      +-----------+                                 |  Incident  |
                                                    | attributes |
                                                    +------------+

                 Figure 1: Information Model 
]]></artwork></figure>

<t>The model allows for future expansion by new metrics that will quantify user experience. Notice that future asociation relationship and future expansion might be linked to asset or to one of the other datasets: Incident, Feature Usage or Entitlements. 
 Two new YANG modules have been created for User and Organization. For sake of simplicity they have not been included in Figure 1; they have direct association with asset. Also, feature usage are split into two different YANG modules: Feature and Usage.</t>

</section>
<section anchor="data-models"><name>Data Models</name>

<section anchor="tree-diagrams-of-the-modules-that-form-lmo"><name>Tree Diagrams of the modules that form LMO</name>

<section anchor="aggregated-asset"><name>Aggregated Asset</name>

<t>This specification uses <xref target="RFC9179"/>, <xref target="I-D.draft-ietf-opsawg-sbom-access-10"/>
    module: ietf-lmo-assets</t>

<figure><artwork><![CDATA[
  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst:
    +--rw role?                     identityref
    +--rw aggregation?              boolean
    +--rw number-of-instances?      uint32
    +--rw platform-dependency-os?   identityref
    +--rw install-location
    |  +--rw geo-location
    |     +--rw reference-frame
    |     |  +--rw alternate-system?    string {alternate-systems}?
    |     |  +--rw astronomical-body?   string
    |     |  +--rw geodetic-system
    |     |     +--rw geodetic-datum?    string
    |     |     +--rw coord-accuracy?    decimal64
    |     |     +--rw height-accuracy?   decimal64
    |     +--rw (location)?
    |     |  +--:(ellipsoid)
    |     |  |  +--rw latitude?    decimal64
    |     |  |  +--rw longitude?   decimal64
    |     |  |  +--rw height?      decimal64
    |     |  +--:(cartesian)
    |     |     +--rw x?           decimal64
    |     |     +--rw y?           decimal64
    |     |     +--rw z?           decimal64
    |     +--rw velocity
    |     |  +--rw v-north?   decimal64
    |     |  +--rw v-east?    decimal64
    |     |  +--rw v-up?      decimal64
    |     +--rw timestamp?         yang:date-and-time
    |     +--rw valid-until?       yang:date-and-time
    +--rw deployment-mode?          identityref
    +--rw activation-date?          yang:date-and-time
    +--rw software-version?         string
    +--ro hotfixes
    |  +--ro hostfix* []
    |     +--ro version?   identityref
    |     +--ro order?     uint8
    +--rw software-type?            string
    +--rw sign-of-life-timestamp?   yang:date-and-time
    +--rw tags?                     string
]]></artwork></figure>

</section>
<section anchor="entitlements"><name>Entitlements</name>
<figure><artwork><![CDATA[
module: ietf-lmo-entitlements

  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst:
    +--rw uid?                string
    +--rw (all-1-asset)?
    |  +--:(all-assets)
    |  |  +--rw all-assets?   boolean
    |  +--:(assets)
    |     +--rw assets
    |        +--rw asset* [lmo-class id]
    |           +--rw lmo-class    -> /ietf-lmo:lmos/lmo/lmo-class
    |           +--rw id           -> /ietf-lmo:lmos/lmo[ietf-lmo:lmo-class  = current()/../lmo-class]/inst/id
    +--rw resource* [id]
    |  +--rw id                string
    |  +--rw name?             string
    |  +--rw summary?          string
    |  +--rw characteristic* [id]
    |     +--rw id             string
    |     +--rw name?          string
    |     +--rw description?   string
    |     +--rw unit?          string
    |     +--rw value?         yang:counter64
    |     +--rw value-max?     yang:counter64
    +--rw features
    |  +--rw feature* [lmo-class id]
    |     +--rw lmo-class    -> /ietf-lmo:lmos/lmo/lmo-class
    |     +--rw id           -> /ietf-lmo:lmos/lmo[ietf-lmo:lmo-class =  current()/../lmo-class]/inst/id
    +--rw state?              ietf-lmo-common:entitlement-state-t
    +--rw renewal-profile
       +--rw activation-date?   yang:date-and-time
       +--rw expiration-date?   yang:date-and-time
  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst:
    +--rw entitlements
       +--rw lmo-class?   -> /ietf-lmo:lmos/lmo/lmo-class
       +--rw id?          -> /ietf-lmo:lmos/lmo[ietf-lmo:lmo-class =  current()/../lmo-class]/inst/id
]]></artwork></figure>

</section>
<section anchor="features"><name>Features</name>
<figure><artwork><![CDATA[
module: ietf-lmo-feature

  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst:
    +--rw features
       +--rw feature* [lmo-class id]
          +--rw lmo-class    -> /ietf-lmo:lmos/lmo/lmo-class
          +--rw id           -> /ietf-lmo:lmos/lmo[ietf-lmo:lmo-class =  current()/../lmo-class]/inst/id
  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst:
    +--rw name?                      string
    +--rw summary?                   string
    +--rw category?                  string
    +--rw entitlement?               string
    +--rw first-available-version?   string
    +--ro backported-versions
    |  +--ro backported-version* []
    |     +--ro version?   identityref
    +--rw scope?                     identityref
    +--rw config-options* [id]
    |  +--rw id                string
    |  +--rw name?             string
    |  +--rw summary?          string
    |  +--rw characteristic* [id]
    |     +--rw id       string
    |     +--rw name?    string
    |     +--rw value?   string
    +--rw asset
    |  +--rw lmo-class?   -> /ietf-lmo:lmos/lmo/lmo-class
    |  +--rw id?          -> /ietf-lmo:lmos/lmo[ietf-lmo:lmo-class = current()/../lmo-class]/inst/id
    +--rw subfeatures
       +--rw subfeature* [lmo-class id]
          +--rw lmo-class    -> /ietf-lmo:lmos/lmo/lmo-class
          +--rw id           -> /ietf-lmo:lmos/lmo[ietf-lmo:lmo-class =  current()/../lmo-class]/inst/id
]]></artwork></figure>

</section>
<section anchor="usage"><name>Usage</name>
<figure><artwork><![CDATA[
module: ietf-lmo-usage

  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst:
    +--rw feature
    |  +--rw lmo-class?   -> /ietf-lmo:lmos/lmo/lmo-class
    |  +--rw id?          -> /ietf-lmo:lmos/lmo[ietf-lmo:lmo-class =  current()/../lmo-class]/inst/id
    +--rw name?                   string
    +--rw summary?                string
    +--rw uri?                    string
    +--rw deployment-mode?        identityref
    +--rw scope?                  identityref
    +--rw activation-status?      string
    +--rw instances?              uint32
    +--rw count-type?             identityref
    +--rw timestamp?              yang:date-and-time
    +--rw count?                  uint32
    +--rw frequency* [name]
    |  +--rw name         string
    |  +--rw type-freq?   string
    |  +--rw value?       yang:counter64
    +--rw resource-consumption* [id]
       +--rw id                string
       +--rw name?             string
       +--rw summary?          string
       +--rw characteristic* [id]
          +--rw id           string
          +--rw name?        string
          +--rw unit?        string
          +--rw value?       yang:counter64
          +--rw value-max?   yang:counter64
]]></artwork></figure>

</section>
<section anchor="incident-management"><name>Incident Management</name>
<figure><artwork><![CDATA[
module: ietf-lmo-incident-management

  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst:
    +--rw id?                 string
    +--rw title?              string
    +--rw summary?            string
    +--rw severity?           string
    +--rw status?             string
    +--rw created?            yang:date-and-time
    +--rw last_updated?       yang:date-and-time
    +--rw capability?         string
    +--rw technology?         string
    +--rw subtechnology?      string
    +--rw problem-type?       string
    +--rw resolution?         string
    +--rw owner?              string
    +--rw support-engineer?   string
    +--rw asset
    |  +--rw lmo-class?   -> /ietf-lmo:lmos/lmo/lmo-class
    |  +--rw id?          -> /ietf-lmo:lmos/lmo[ietf-lmo:lmo-class =  current()/../lmo-class]/inst/id
    +--rw feature
    |  +--rw lmo-class?   -> /ietf-lmo:lmos/lmo/lmo-class
    |  +--rw id?          -> /ietf-lmo:lmos/lmo[ietf-lmo:lmo-class =  current()/../lmo-class]/inst/id
    +--rw contract-number?    string
]]></artwork></figure>

</section>
<section anchor="organization"><name>Organization</name>
<figure><artwork><![CDATA[
module: ietf-lmo-organization

  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst:
    +--rw address?      string
    +--rw department?   boolean
  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst:
    +--rw organization
       +--rw lmo-class?   -> /ietf-lmo:lmos/lmo/lmo-class
       +--rw id?          -> /ietf-lmo:lmos/lmo[ietf-lmo:lmo-class =  current()/../lmo-class]/inst/id
]]></artwork></figure>

</section>
<section anchor="user"><name>User</name>
<figure><artwork><![CDATA[
module: ietf-lmo-user

  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst:
    +--rw billing-account?   uint32
    +--rw represents
    |  +--rw lmo-class?   -> /ietf-lmo:lmos/lmo/lmo-class
    |  +--rw id?          -> /ietf-lmo:lmos/lmo[ietf-lmo:lmo-class =  current()/../lmo-class]/inst/id
    +--rw authority?         enumeration
    +--rw email?             string
  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst:
    +--rw user
       +--rw lmo-class?   -> /ietf-lmo:lmos/lmo/lmo-class
       +--rw id?          -> /ietf-lmo:lmos/lmo[ietf-lmo:lmo-class =  current()/../lmo-class]/inst/id
]]></artwork></figure>

</section>
</section>
<section anchor="lmo-modules"><name>LMO Modules</name>

<section anchor="lmo-common-module"><name>LMO Common Module</name>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-lmo-common@2023-01-16.yang"
module ietf-lmo-common {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-lmo-common";
  prefix ietf-lmo-common;
  organization
    "IETF OPSA (Operations and Management Area) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>
     Editor:  Josh Suhr
              <mailto:josuhr@cisco.com>
     Editor:  Sudhendu Kumar
              <mailto:skumar23@ncsu.edu>";
  description
    "This YANG module defines a collection of useful data types
     and identity for Lifecycle Management and Operations (LMO).

     Copyright (c) 2021 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions  
  
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";
  
  revision 2023-01-16 {
    description
      "rename license by entitlement";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-02-28 {
    description
      "Introduced flexible root structure";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2021-08-23 {
    description
      "Initial revision for Common Module as part of the LMO
       YANG Model";
    reference
      "RFC XXXX: LMO YANG Model";
  }

  typedef entitlement-id-t {
    type string;
    description
      "Entitlement ID Type";
  }
  typedef entitlement-model-t {
    type enumeration {
      enum perpetual {
        description
          "Perpetual entitlement";
      }
      enum subscription {
        description
          "Subscription entitlement";
      }
      enum usage-based {
        description
          "Usage-based entitlement";
      }
      enum other {
        description
          "Undefined entitlement type";
      }
    }
    description
      "Entitlement Model Type";
  }
  identity entitlement-buying-program-t {
    description
      "Entitlement Buying Program that contains the plan to generate
       revenue for specific asset";
  }
  identity enterprise-agreement {
        base entitlement-buying-program-t; 
        description
          "Enterprise Agreement";
  }
  identity managed-service-entitlement-agreement {
        base entitlement-buying-program-t; 
        description
          "Managed Service Entitlement Agreement";
  }
  identity service-provider-network-agreement {
        base entitlement-buying-program-t; 
        description
          "Service Provider Network Agreement";
  }
  identity collab-active-user {
        base entitlement-buying-program-t; 
        description
          "Collaboration Active User";
  }
  identity service-full-coverage {
        base entitlement-buying-program-t; 
        description
          "Service Full-Coverage";
  }
  identity offer-type-t {
    description
      "License Offer Type, part of the plan to generate revenue
       for specific asset";
  }
  identity perpetual-software {
      base offer-type-t;
      description
          "Perpetual softwar gives the user the right to use the
           program indefinitely";
  }
  identity standalone-hardware {
      base offer-type-t;
      description
          "Standalone hardware is able to function independently
           of other hardware";
  }
  identity on-premise-software-subscription {
      base offer-type-t;
      description
          "On-Premise software subscription, relates to a temporary
           on-prem licencing model, allowing users to pay a per user 
           fee";
  }
  identity cloud-software-saas-subscription {
      base offer-type-t;
      description
          "Cloud Software (SaaS) subscription is a service busines
           model where the user is entitled to use the cloud software
           for a specific time period";
  }
  identity third-party-software {
      base offer-type-t;
      description
          "It includes licenses, entitlements, agreements, obligations
          or other commitment under which the user can use the asset 
          not directly sold by the manufacturer";
  }
  identity flex-cloud-prem-subscription {
      base offer-type-t;
      description
          "Flex Cloud-Prem subscription allows software vendors to 
          limit the number of entitlements for the use of the specific 
          asset";
  }
  typedef purchase-order-t {
    type string;
    description
      "License purchase order number";
  }
  typedef entitlement-state-t {
    type enumeration {
      enum inactive {
        description
          "Inactive State";
      }
      enum active {
        description
          "Active State";
      }
      enum unknown {
        description
          "Unknown State";
      }
    }
    description
      "Entitlement State Type";
  }

  typedef asset-id {
    type string;
    description
      "Asset ID Type";
  }

  typedef vendor-id {
    type enumeration {
      enum cisco {
        description
          "Vendor-id is Cisco";
      }
      enum other {
        description
          "Vendor-id is not determined";
      }
    }
    description
      "Vendor identifier";
  }

  identity asset-type {
    description 
      "type of the asset: hardware, software, software cloud, ...";
  }
  identity hw {
    base asset-type; 
    description
      "Hardware refers to any physical device";
  }
  identity sw { 
    base asset-type; 
    description
      "Software refers to a collection of code installed on a 
      hardware asset";
  }
  identity sw-cloud { 
    base asset-type; 
    description
      "Cloud-based software, that allows users access to software 
      application that run on a shared computing resources via 
      Internet";
  }
  identity phone { 
    base asset-type;
    description
      "Mobile telephone or a handheld two-way communication device 
      over a cellular network.";
  }
  identity other { 
    base asset-type;
    description
      "Different or additional type not specified as part of another 
      defined asset-type.";
  }
  identity asset-subtype {
    description 
      "subtype of the asset: router, switch, wireless, 
      controller, ...";
  }
  identity router {
    base asset-subtype;
    description
      "Network connecting device. It operates at layer-3 of the OSI 
      model.";
  }
  identity switch {
    base asset-subtype;
    description
      "Network connecting device. It operates at layer-2(Data Link 
      Layer) of the OSI model.";
  }
  identity wireless { 
    base asset-subtype; 
    description
      "Network connecting device. It creates a wireless local area 
      network. It connects to a wired router, switch, or hub via an 
      Ethernet cable, and projects a Wi-Fi signal to a designated 
      area";
  }
  identity controller {
    base asset-subtype;
    description
      "Centralized device in the network which is used in combination 
      with network connection devices, when there is a need to manage 
      them in large quantities.";
  }
  identity board {
    base asset-subtype;
    description
      "Electronic circuit board in an asset which interconnects 
      another hardware assets attached to it.";
  }
  identity p-supply {
    base asset-subtype;
    description
      "Power supply, as it might have independent identity.";
  }
  identity transceiver {
    base asset-subtype;
    description
      "Device that is both a transmitter and a receiver. Usually 
      it's in a single device. 
      This is commonly used as a modular network interface";
  }
  identity others {
    base asset-subtype;
    description
      "Different or additional type not specified as part of another 
      defined asset-subtype.";
  }
  identity version {
    description
      "Base identity for all version types";
  }
  identity version-sw { 
  base version;
    description
      "Version release of the operating system that runs on the 
      asset";
  }  
  identity platform-dependency-os {
    description
      "Operating system that creates an environment for the asset
       to get deployed. Enum of options covering OS platform 
       dependency.";
  }
  identity linux {
    base platform-dependency-os;
    description
      "UNIX like operating system";
  }
  identity windows {
    base platform-dependency-os;
    description
      "Windows operating system";
  }
  identity macOS { 
    base platform-dependency-os;
    description
      "Mac operating system develop by Apple, Inc.";
  }
  identity darwin { 
    base platform-dependency-os;
    description
      "Open-source Unix-like operating system first released by Apple 
      Inc.";
  }
  identity ubuntu { 
    base platform-dependency-os;
    description
      "Linux distribution, used in desktop distribution";
  }
  identity red-hat {
    base platform-dependency-os;
    description
      "Red Hat Enterprise Linux, released in multiple server and 
      desktop versions";
  }
// NEED to extend and include iOS, Android, etc.;

  identity role {
    description
      "What the role of a given device/component is in the network.
      This attribute normally will be configured on the specific
      component during setup. This attribute normally will be 
      configured on the specific component during setup";
  }
  identity border-router { 
    base role;
    description
      "Router that provides connectivity between interior and 
      exterior network routers or to the cloud";
  }
  identity access { 
    base role;
    description
      "Router that provides access to a larger communication network 
      of some sort.";
  }
  identity control-plane { 
    base role;
    description
      "Network component that controls how data packets are 
      forwarded";
  }
  identity edge {
    base role;
    description
      "Router that provides an entry point into enterprise or service 
      provider core networks";
  }
  identity core { 
    base role;
    description
      "Component part of the high-speed backbone of the network. It 
      provides fast and efficient data transport";
  }
  identity datacenter { 
    base role;
    description
      "Component placed in the data center, mantaining and housing 
      back-end IT system and data stores";
  }
  identity branch {
    base role;
    description
      "Router in a remote branch of an enterprise's network";
  
  }
  identity deployment-mode {
    description
      "This attribute will denote the configured deployment mode
       for the asset and features, if applicable; e.g.,
       High Availability(HA) or Faiover cluster, virtual appliance, 
       etc.";
  }
  identity primary { 
    base deployment-mode;
    description
      "Asset or featurs that support critical applications to 
      minimize system downtime, to achieve high availabiilty or 
      failover";
  }
  identity secondary { 
    base deployment-mode;
    description
      "Redundant asset or feature, that is triggered when the 
      primary encounters performance issues, to achieve high 
      availability or failover";
  }
  identity cloud { 
    base deployment-mode;
    description
      "Especially it refers to remote, distributed and shared asset 
      resources (i.e. data storage, computing power, etc.), which 
      are hooked together and meant to operate as a single 
      ecosystem.";
  }
  identity virtual-appliance { 
    base deployment-mode;
    description
      "pre-configured virtual machine image, ready to run on a 
      hypervisor";
  }
  identity container { 
    base deployment-mode;
    description
      "Standard unit of software that packages up code and all its 
      dependencies so the application runs quickly and reliably from 
      one computing environment to another";

  }
  identity undeployed { 
    base deployment-mode;
    description
      "it refers to an asset that is undeployed";

  }
  identity counter-type {
    description
      "Specify the different type of counters, i.e accumulated-count,
       average-count, last-count, high-water mark count, low-water
       mark count" ;
  }
  identity accumulated {
    base counter-type;
    description
      "monotonically increasing counters. They're useful for 
       aggregating metric information such as the number of hits 
       on a web page, how many users log into a portal, etc.";
  }
  identity average { 
    base counter-type;
    description
      "typical value in a set of metrics, in particular the mean, 
      which is calculated by dividing the sum of the values in the 
      set by their number.";
  }
  identity last { 
    base counter-type;
    description
      "Last value measured and collected for specific metric.";
  }
  identity high-water-mark { 
    base counter-type;
    description
      "Highest level of value in a set of metrics.";
  }
  identity low-water-mark { 
    base counter-type;
    description
      "Lowest level of value in a set of metrics.";
  }
  identity feature-scope { 
    description
      "Optional tag that could apply to any usage feature, so that
       if there are multiple dimensions of reporting that need to
       be accommodated (i.e., report feature usage by 'site')";
  }
  identity site { 
    base feature-scope;
    description
      "Single location, part of the network";
  }
  identity network { 
    base feature-scope;
    description
      "scope limited to the networking assets";
  }
  typedef feature-usage-type {
    type enumeration {
      enum none {
        description
          "No Usage";
      }
      enum low {
        description
          "Usage meeting the Low Threshold";
      }
      enum medium {
        description
          "Usage meeting the Medium Threshold";
      }
      enum high {
        description
          "Usage meeting the High Threshold";
      }
      // NEED to elaborate more on this list, based on use case 
      // validation
    }
    description
      "feature usage % 0-25-50-75-100";
  }

  identity lmo-class {
    description "Base identity for classes of LMOs";
  }
}    <CODE ENDS>
]]></artwork></figure>

</section>
<section anchor="lmo-module"><name>LMO Module</name>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-lmo@2022-12-20.yang"
module ietf-lmo {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-lmo";
  prefix ietf-lmo;
  import ietf-lmo-common {
    prefix ietf-lmo-common;
  }
  import ietf-yang-types {
    prefix yang;
  }
  organization
    "IETF OPSA (Operations and Management Area) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>
     Editor:  Jan Lindblad
              <mailto:jlindbla@cisco.com>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>";
  description
    "This YANG module add the flexibility to define its own 
     and extensible set of lmo classes.

     Copyright (c) 2021 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions  
  
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";
  revision 2022-12-20 {
    description
      "deref reference removed";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-03-01 {
    description
      "Initial revision for LMO Module as part of the
       LMO YANG Model";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  
  container lmos {
    //config false; //temporarily commented out for easy testing
    description
      "Container that includes instances for all types of datasets
       which are part of DMLMO";
    list lmo {
      key lmo-class;
      description
        "list that includes the instances for all DMLMO datasets";
      leaf lmo-class {
        type identityref {
          base ietf-lmo-common:lmo-class;
        }
        description
          "lmo-class defining the type of instance";  
      }
      list inst {
        key id;
        description
          "defines the specific instance";
        leaf id {
          type string;
          description
            "Identifies the instance";
        }
        container parent {
          description
            "identifies the hierarchy structure for a given instance";
          leaf lmo-class {
            type leafref {
              path /lmos/lmo/lmo-class;
            }
            description
              "lmo-class that defines the parent type of instance";
          }
          leaf id {
            type leafref {
               path "/ietf-lmo:lmos/ietf-lmo:lmo[ietf-lmo:lmo-class"
            + "=current()/../lmo-class]/ietf-lmo:inst/ietf-lmo:id";
            }
            description
              "identifies the parent type of instance";
          }
        }
        container capture-info {
          // Moved capture-info to the instance level, as
          // asset/... data will generally be collected
          // from one source at one time.
          description
            "Capture information for this data";
          leaf collected-on {
            type yang:date-and-time;
            description
              "Time at which this data was collected";
          }
          leaf collected-from {
            type string;
            description
              "Identifier for original source of this data";
          }
        }
      }
    }
  }
}    <CODE ENDS>
]]></artwork></figure>

</section>
<section anchor="aggregated-asset-1"><name>Aggregated Asset</name>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-lmo-assets@2023-01-16.yang"
module ietf-lmo-assets {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-lmo-assets";
  prefix ietf-lmo-asset;
  import ietf-lmo-common {
    prefix ietf-lmo-common;
  }
  import ietf-lmo {
    prefix ietf-lmo;
  }
  import ietf-yang-types {
    prefix yang;
  }
  import ietf-geo-location {
    prefix ietf-geo-location;
  }
  organization
    "IETF OPSA (Operations and Management Area) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>
     Editor:  Josh Suhr
              <mailto:josuhr@cisco.com>
     Editor:  Sudhendu Kumar
              <mailto:skumar23@ncsu.edu>";
  description
    "This YANG module includes the concept asset aggregation
     and platform dependency of an asset.

     Copyright (c) 2021 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions  
  
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";
  revision 2023-01-16 {
    description
      "Removed inventory suffix from the YANG model";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-11-25 {
    description
      "Removed inventory information from this module, in order to let
       such information be mapped from other inventory models instead";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-07-07 {
    description
      "fixed YANG statements";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-02-22 {
    description
      "Introduced flexible root structure";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2021-10-25 {
    description
      "Initial revision for Aggregated Assets Inventory as part of
       the LMO YANG Model";
    reference
      "RFC XXXX: LMO YANG Model";
  }

  identity asset {
    base ietf-lmo-common:lmo-class;
    description 
      "An asset is a class of lmo that represents a 
      hardware, software, application, or service component.
      An asset can also be physical or virtual";
  }
  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst {
    when "derived-from-or-self(../ietf-lmo:lmo-class,'ietf-lmo-asset:asset')";
    description
      "Assets container includes attributes that add the aggregated
       view";
    // Removed vendor, name, description, pid, serial-number, vid, 
    // mac-address, ip-address, entity-name, product-description, udi,
    // transparency-info, from version 08;
    // as these and similar properties are expected to be managed using
    // other inventory mechanisms. Maybe more leafs should be removed.
    leaf role {
      type identityref {
        base ietf-lmo-common:role;
      }
      description
        "What the role of a given device/component is in the 
        network. This attribute normally will be configured on the 
        specific component during setup";
    }
    leaf aggregation {
      type boolean;
      must "../number-of-instances = 1 or current() = 'true'";
      default false;
      description
        "Asset aggregation; e.g., false (default) or true";
    }
    leaf number-of-instances {
      type uint32;
      default 1;
      description
        "Number of instances or endpoints covered by the aggregated
          asset. If different from 1, it should enforce that
          aggregation attribute is set to true";
    }
    leaf platform-dependency-os {
      type identityref {
          base ietf-lmo-common:platform-dependency-os;  
      }
      description
        "Operating system for the asset to be deployed."; 
    }
    container install-location {
      uses ietf-geo-location:geo-location;
      description
        "Physical installed location of the product. Location is
          provided based on what customer/user configures";
    }
    leaf deployment-mode {
      type identityref {
        base ietf-lmo-common:deployment-mode;
      }
      description
        "Deployment mode for the asset, if applicable; e.g.,
          HA cluster, virtual appliance, etc.";
    }
    leaf activation-date {
      type yang:date-and-time;
      description
        "Date of asset activation or initial contact";
    }
    leaf software-version {
      type string;
      description
        "Software version running on the hardware device or
          software component";
    }
    container hotfixes {
      config false;
      description "list of hotfixes";
      list hostfix {
      description
        "List of hotfixes that have been installed"; 
        leaf version {
          type identityref {
            base ietf-lmo-common:version;
          }
          description
            "It includes the first hotfix installed";
        }
        leaf order {
          type uint8;
          description
            "It refers to the order of how the hotfixes have been
              installed, range 0..100";
        }
      }
    }
    leaf software-type {
      type string;
      description
        "Software type or Operating System";
    }
    leaf sign-of-life-timestamp {
      type yang:date-and-time;
      description
        "Date of last contact";
    }
    leaf tags {
      type string;
      description
        "Comma-separated descriptive tags for this asset";
    }
  }
}
<CODE ENDS>
]]></artwork></figure>

</section>
<section anchor="entitlements-1"><name>Entitlements</name>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-lmo-entitlements@2022-12-20.yang"
module ietf-lmo-entitlements {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-lmo-entitlements";
  prefix ietf-lmo-entitlements;
  import ietf-yang-types {
    prefix yang;
  }
  import ietf-lmo-common {
    prefix ietf-lmo-common;
  }
  import ietf-lmo {
    prefix ietf-lmo;
  }
  import ietf-lmo-assets {
    prefix ietf-lmo-asset;
  }
  import ietf-lmo-feature {
    prefix ietf-lmo-feature;
  }
  organization
    "IETF OPSA (Operations and Management Area) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>
     Editor:  Josh Suhr
              <mailto:josuhr@cisco.com>
     Editor:  Sudhendu Kumar
              <mailto:skumar23@ncsu.edu>";
  description
    "This YANG module includes the entitlement attributes of a
     product.

     Copyright (c) 2021 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions  
  
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";
  revision 2022-12-20 {
    description
      "license(s) renamed to entitlement(s)";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-09-20 {
    description
      "fixed YANG statements";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-07-07 {
    description
      "fixed YANG statements";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-02-28 {
    description
      "Introduced flexible root structure";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2021-10-25 {
    description
      "Initial revision for Licenses Module as part of the LMO YANG 
      Model";
    reference
      "RFC XXXX: LMO YANG Model";
  }

// Can we capture licensing ties to API access where we may be 
// entitled on events queries per second, minute, hour, etc. 
// This is a popular model in the cloud space for example the Google 
// MAPs API??

  identity entitlement {
    base ietf-lmo-common:lmo-class;
    description "A entitlement is a class of lmo that represents how 
    the asset(s) or feature(s) can be leveraged and what is required
    in cases the asset(s) or feature(s) are changed.";
  }
  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst {
    when "derived-from-or-self(../ietf-lmo:lmo-class, "+
         " 'ietf-lmo-entitlements:entitlement')";
    description
      "entitlements container includes attributes for entitlements";
    leaf uid {
      type string;
      description
        "Unique License Identifier";
    }
    choice all-1-asset{
      description
        "Considering entitlement is linked to all or explicitely a 
        one/few assets";
      leaf all-assets {
        type boolean;
        default false;
        description
          "License apply to all assets; e.g., false (default) or 
          true";
      }
      container assets {
        description
          "Assets to which this entitlement are attached";
        list asset {
          key "lmo-class id";
          description
            "list of assests";
          leaf lmo-class {
            type leafref {
              path "/ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:lmo-class";
            }
            must "derived-from-or-self(current(), "+
                 " 'ietf-lmo-asset:asset')"; 
            description
              "Asset class to which this entitlement is attached"; 
          }     
          leaf id {
            type leafref {
              path "/ietf-lmo:lmos/ietf-lmo:lmo[ietf-lmo:lmo-class "+ 
              " = current()/../lmo-class]/ietf-lmo:inst/ietf-lmo:id";
            }
            description
              "Asset to which this entitlement is attached";
          }
        }  
      }
     } 
    list resource {
      key "id";
      description
        "Resource profile";
      leaf id {
        type string;
        description
          "Identify resource for entitlement consumption metric";
      }
      leaf name {
        type string;
        description
          "Friendly name of the resource";
      }
      leaf summary {
        type string;
        description
          "Brief description of the resource";
      }
      list characteristic {
        key "id";
        description
          "Characteristic of resource consumption, i.e., 
          number of cpu's, limit BW.";
        leaf id {
          type string;
          description
            "Identifier for resource consumption characteristic";
        }
        leaf name {
          type string;
          description
            "Friendly name for resource consumption 
            characteristic";
        }
        leaf description {
          type string;
          description
            "Description for resource consumption 
            characteristic";
        }
        leaf unit {
          type string;
          description
            "unit of measurement for the characteristic";
        }

        // NEED to define identity type for unit: min, hour, sec, 
        // days, ...

        leaf value {
          type yang:counter64;
          description
            "Resource consumption characteristic measurement";
        }
        leaf value-max {
          type yang:counter64;
          description
            "Maximum resource consumption characteristic value";
        }
      }
    }
    container features {
      description
        "Features to which this entitlement are attached";
      list feature {
        key "lmo-class id";
        description
          "list of features";
        leaf lmo-class {
          type leafref {
            path "/ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:lmo-class";
          }
          must "derived-from-or-self(current(), "+
               " 'ietf-lmo-feature:feature')";
          description
            "feature to which this entitlement is attached";
        }
        leaf id {
          type leafref {
            path "/ietf-lmo:lmos/ietf-lmo:lmo[ietf-lmo:lmo-class = "+
                 " current()/../lmo-class]/ietf-lmo:inst/ietf-lmo:id";
          }
          description
            "Feature to which this entitlement is attached";
        }
      } 
    }
    leaf state {
      type ietf-lmo-common:entitlement-state-t;
      description
        "Entitlement state; e.g., active, inactive, or unknown";
    }
    container renewal-profile {
      description
        "Profile of entitlement renewal status and information";
      leaf activation-date {
        type yang:date-and-time;
        description
          "Activation Date";
      }
      leaf expiration-date {
        type yang:date-and-time;
        description
          "Expiration Date";
      }
    }
  }
  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst {
    when "derived-from-or-self(../ietf-lmo:lmo-class, "+
         " 'ietf-lmo-asset:asset')";
    description
      "assets attributes related to entitlements";
  
    container entitlements {
      description
        "entitlement attributes";
      leaf lmo-class {
        type leafref {
          path "/ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:lmo-class";
        }
        must "derived-from-or-self(current(), "+
             " 'ietf-lmo-entitlements:entitlement')";
        description
          "Asset class to which this entitlement is attached";
      }    
      leaf id {
        type leafref {
          path "/ietf-lmo:lmos/ietf-lmo:lmo[ietf-lmo:lmo-class = "+
               " current()/../lmo-class]/ietf-lmo:inst/ietf-lmo:id";
        }
        description
          "Asset to which this entitlement is attached";
      }
    }
    
    //Fill more leafs for entitlement if required...
  }  
}    <CODE ENDS>
]]></artwork></figure>

</section>
<section anchor="features-1"><name>Features</name>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-lmo-feature@2022-12-20.yang"
module ietf-lmo-feature {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-lmo-feature";
  prefix ietf-lmo-feature;
  import ietf-lmo-common {
    prefix ietf-lmo-common;
  }
  import ietf-lmo {
    prefix ietf-lmo;
  }
  import ietf-lmo-assets {
    prefix ietf-lmo-asset;
  }
  organization
    "IETF OPSA (Operations and Management Area) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>
     Editor:  Josh Suhr
              <mailto:josuhr@cisco.com>
     Editor:  Sudhendu Kumar
              <mailto:skumar23@ncsu.edu>";
  description
    "This YANG module includes the different attributes that define
     description, usage and resource consumption for specific 
     features or capabilities of assets.

     Copyright (c) 2021 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions  
  
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";
  revision 2022-12-20 {
    description
      "fixed YANG statements";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-09-20 {
    description
      "fixed YANG statements";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-07-07 {
    description
      "fixed YANG statements";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-02-28 {
    description
      "Introduced flexible root structure";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2021-10-25 {
    description
      "Initial revision for Product Usage Module as part of the
       LMO YANG Model";
    reference
      "RFC XXXX: LMO YANG Model";
  }

  identity feature {
    base ietf-lmo-common:lmo-class;
    description 
      "A feature is a class of lmo that represents 
       options or functional capabilities available in an asset";
  }
  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst {
    when "derived-from-or-self(../ietf-lmo:lmo-class, 'ietf-lmo-asset:asset')";
    description
      "feature attributes related to assets";

    container features {
      description
        "Features to be part of an asset";
      list feature {
        key "lmo-class id";
        description
          "Subfeature ID";
        leaf lmo-class {
          type leafref {
            path "/ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:lmo-class";
          }
          must "derived-from-or-self(current(), "+
          " 'ietf-lmo-feature:feature')";
          description
            "Reference to lmo-class"; 
        }
        leaf id {
          type leafref {
             path "/ietf-lmo:lmos/ietf-lmo:lmo[ietf-lmo:lmo-class = "+
                  " current()/../lmo-class]/ietf-lmo:inst/ietf-lmo:id";
          }
          description
            "Reference to Feature ID";    
        }
      }
    }
    //Fill more leafs for license when organization 
    //module is present here...
  }  
  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst {
    when "derived-from-or-self(../ietf-lmo:lmo-class, "+
         " 'ietf-lmo-feature:feature')";
    description
      "feature attributes";

    leaf name {
      type string;
      description
        "Friendly name of the feature";
    }
    leaf summary {
      type string;
      description
        "Brief description of the feature";
    }
    leaf category {
      type string;
      description
        "Feature category or tag list (as applicable to the 
        product)";
    }
    leaf entitlement {
      type string;
      description
        "Minimum entitlement level, subscription, or license level
          required for the feature";
    }
    leaf first-available-version {
      type string;
      description
        "The first version in which this feature was enabled";
    }
    container backported-versions {
      config false;
      description
        "software patch or update is taken from a recent software 
        version and applied to an older version of the same 
        software";
      list backported-version {
        config false;
        description
          "Backport releases to older release";
        leaf version {
          type identityref {
            base ietf-lmo-common:version;
          }
          description
            "version of the backport release";
        }
      }
    }
    leaf scope {
      type identityref {
        base ietf-lmo-common:feature-scope;
      }
      description
        "Optional tag that could apply to any of the usage 
        features, so that if there are multiple dimensions of 
        reporting that need to be accommodated (i.e., report 
        feature usage by 'site')";
    }
    list config-options {
      key "id";
      description
        "Feature configuration profile - optional, for features 
        that require configuration beyond enable/disable";
      leaf id {
        type string;
        description
          "Identify feature configuration option uniquely across 
          all products";
      }
      leaf name {
        type string;
        description
          "Friendly name of the feature option";
      }
      leaf summary {
        type string;
        description
          "Brief description of the feature option";
      }
      list characteristic {
        key "id";
        description
          "Characteristics of feature configuration options,
            i.e. value=enabled/disabled";
        leaf id {
          type string;
          description
            "Identifier for feature option configuration
              characteristic";
        }
        leaf name {
          type string;
          description
            "Friendly name for feature option configuration
              characteristic";
        }
        leaf value {
          type string;
          description
            "Configuration characteristic value; describes how 
            this feature option characteristic is configured";
        }
      }
    }
    container asset{
      description
        "Asset that this feature is attached to";
      leaf lmo-class {
        type leafref {
          path "/ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:lmo-class";
        }
        must "derived-from-or-self(current(), "+
             " 'ietf-lmo-asset:asset')";
        default ietf-lmo-asset:asset;
        description
          "Asset class to which this feature is attached";
      }    
      leaf id {
        type leafref {
          path "/ietf-lmo:lmos/ietf-lmo:lmo[ietf-lmo:lmo-class = "+
              "current()/../lmo-class]/ietf-lmo:inst/ietf-lmo:id";
        }
        description
          "Asset to which this feature is attached";
      }  
    }
    container subfeatures {
      description
        "Sub-features to the top-level feature";
      list subfeature {
        key "lmo-class id";
        description
          "Subfeature ID";
        leaf lmo-class {
          type leafref {
            path "/ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:lmo-class";
          }
          must "derived-from-or-self(current(), "+
               " 'ietf-lmo-feature:feature')";
          description
            "lmo-class reference";
        }
        leaf id {
          type leafref {
            path "/ietf-lmo:lmos/ietf-lmo:lmo[ietf-lmo:lmo-class = "+
                 " current()/../lmo-class]/ietf-lmo:inst/ietf-lmo:id";
          }
          description
            "Reference to Feature ID";
        }
      }
    }
  }
}    <CODE ENDS>
]]></artwork></figure>

</section>
<section anchor="usage-1"><name>Usage</name>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-lmo-usage@2022-09-20.yang"
module ietf-lmo-usage {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-lmo-usage";
  prefix ietf-lmo-usage;
  import ietf-lmo-common {
    prefix ietf-lmo-common;
  }
  import ietf-lmo {
    prefix ietf-lmo;
  }
  import ietf-yang-types {
    prefix yang;
  }
  import ietf-lmo-feature {
    prefix ietf-lmo-feature;
  }
  organization
    "IETF OPSA (Operations and Management Area) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>
     Editor:  Jan Lindblad
              <mailto:jlindbla@cisco.com>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>";
  description
    "This YANG module includes the different attributes that define
     description, usage and resource consumption for specific 
     features or capabilities of assets.

     Copyright (c) 2021 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions  
  
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";
  
  revision 2022-09-20 {
    description
      "fixed YANG statements";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-07-07 {
    description
      "fixed YANG statements";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-02-22 {
    description
      "Introduced flexible root structure";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2021-10-25 {
    description
      "Initial revision for Product Usage Module as part of the
       LMO YANG Model";
    reference
      "RFC XXXX: LMO YANG Model";
  }

  identity usage {
    base ietf-lmo-common:lmo-class;
    description "A usage is a class of lmo that represents how 
    features of an asset are used";
  }
  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst {
    when "derived-from-or-self(../ietf-lmo:lmo-class, "+
         " 'ietf-lmo-usage:usage')";
    description
      "usage attributes";
    container feature {
      leaf lmo-class {
        type leafref {
          path "/ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:lmo-class";
        }
        must "derived-from-or-self(current(), "+
             " 'ietf-lmo-feature:feature')";
        default ietf-lmo-feature:feature;
        description
          "feature to which this license is attached";
      }
      leaf id {
        type leafref {
           path "/ietf-lmo:lmos/ietf-lmo:lmo[ietf-lmo:lmo-class = "+
                " current()/../lmo-class]/ietf-lmo:inst/ietf-lmo:id";
        }
        description
          "Feature to which this license is attached";
      }
      description
        "usage link to a feature";
    }
    leaf name {
      type string;
      description
        "Name of feature usage characteristic";
    }
    leaf summary {
      type string;
      description
        "Brief description of feature usage characteristic";
    }
    leaf uri {
      type string;
      description
        "Target URI of feature characteristic, if applicable - e.g.,
         for clickstream or API";
    }
    leaf deployment-mode {
      type identityref {
        base ietf-lmo-common:deployment-mode;
      }
      description
        "Deployment mode for the feature. When applicable, feature
         might be independent of the deployment mode in the asset;
         e.g., cloud, HA cluster, virtual appliance, etc.";
    }
    leaf scope {
      type identityref {
        base ietf-lmo-common:feature-scope;
      }
      description
        "Optional tag that could apply to any of the usage 
        features, so that if there are multiple dimensions of 
        reporting that need to be accommodated, (i.e., report 
        feature usage by 'site')";
    }
    leaf activation-status {
      type string;
      description
        "Feature activation status for this instance of the 
        product (on/off; active/inactive; enabled/disabled)";
    }
    leaf instances {
      type uint32;
      description
        "Number of instances or end-points using this feature";
    }

    leaf count-type {
      type identityref {
        base ietf-lmo-common:counter-type;
      }
      description
        "Specify the counter type i.e accumulated-count,
          average-count, last-count, high-water mark count
          (+time stamp), low-water mark count (+time stamp)";
    }
    leaf timestamp {
      type yang:date-and-time;
      description  
        "Some counters will benefit from timestamp based on the 
        time when the counter has been collected";
    }
    leaf count {
      type uint32;
      units "times";
      description
        "Count of times the feature has been used";
    }
    list frequency {
      key "name";
      description
        "Frequency with which the feature is used";
      leaf name {
        type string {
          length "1..64";
        }
        description
          "reference in case that feature is for different 
          purpose of usage";
      }
      leaf type-freq {
        type string;
        description
          "Frequency type, i.e daily, weekly, monthly";
      }
      leaf value {
        type yang:counter64;
        description
          "Value collected for the usage";
      }
    }
    list resource-consumption {
      key "id";
      description
        "Resource consumption profile";
      leaf id {
        type string;
        description
          "Identify resource for consumption measurement";
      }
      leaf name {
        type string;
        description
          "Friendly name of the resource";
      }
      leaf summary {
        type string;
        description
          "Brief description of the resource";
      }
      list characteristic {
        key "id";
        description
          "Characteristic of resource consumption";
        leaf id {
          type string;
          description
            "Identifier for resource consumption characteristic";
        }
        leaf name {
          type string;
          description
            "Friendly name for resource consumption 
            characteristic";
        }

        leaf unit {
          type string;
          description
            "unit of measurement for the characteristic";
        }

        // NEED to define identity type for unit: min, hour, sec, 
        // days, ...

        leaf value {
          type yang:counter64;
          description
            "Resource consumption characteristic measurement";
        }
        leaf value-max {
          type yang:counter64;
          description
            "Maximum resource consumption characteristic value";
        }
      }
    }
  }
}    <CODE ENDS>
]]></artwork></figure>

</section>
<section anchor="incident-management-1"><name>Incident Management</name>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-lmo-incident-management@2022-09-20.yang"
module ietf-lmo-incident-management {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-lmo-incident-management";
  prefix ietf-lmo-incident;

  import ietf-lmo-common {
    prefix ietf-lmo-common;
  }
  import ietf-lmo {
    prefix ietf-lmo;
  }
  import ietf-yang-types {
    prefix yang;
  }
  import ietf-lmo-assets {
    prefix ietf-lmo-asset;
  }
  import ietf-lmo-feature {
    prefix ietf-lmo-feature;
  }
  organization
    "IETF OPSA (Operations and Management Area) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>
     Editor:  Josh Suhr
              <mailto:josuhr@cisco.com>
     Editor:  Sudhendu Kumar
              <mailto:skumar23@ncsu.edu>";
  description
    "This YANG module includes the incident management attributes
     to handle incidents.

     Copyright (c) 2021 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions  
  
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";
  revision 2022-09-20 {
    description
      "fixed YANG statements";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-07-07 {
    description
      "fixed YANG statements";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-02-28 {
    description
      "Introduced flexible root structure";
    reference
      "RFC XXXX: LMO YANG Model";
  }  
  revision 2021-10-25 {
    description
      "Initial revision for Incident Management as part of
       the LMO YANG Model";
    reference
      "RFC XXXX: LMO YANG Model";
  }

  identity incident {
    base ietf-lmo-common:lmo-class;
    description 
    "An incident is a class of lmo that represents an event 
    that is not part of normal operations that disrupts 
    operational processes.";
  }
  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst {
    when "derived-from-or-self(../ietf-lmo:lmo-class, "+
         " 'ietf-lmo-incident:incident')";
    description
      "licenses container includes attributes for licenses";

    leaf id {
      type string;
      description 
        "Technical Support Center Case Number id";
    }
    leaf title {
      type string;
      description 
        "headline Incident Case";
    }
    leaf summary {
      type string;
      description 
        "Problem description summary";
    } 
    leaf severity {
      type string;
      description 
      "severity, in some cases also defined as priority";
      // NEED to define different levels of severity, from 
      // severity 1 to 6, i.e. Sev1: network down, Sev6: enhacement
    }
    leaf status {
      type string;
      description 
      "case status, i.e. Customer-Pending, Customer 
      Engineer-Pending, Developer-Pending, Closed, Open, etc.";
      // NEED to define different status
    }
    leaf created {
      type yang:date-and-time;
      description 
      "created date-and-time";
    }
    leaf last_updated {
      type yang:date-and-time;
      description 
      "last updated date-and-time";
    }
    leaf capability {
      type string;
      description 
      "i.e. to reveal associated RMA items";
    }
    leaf technology{
      type string;
      description 
      "Technology related";
    } 
    leaf subtechnology{
      type string;
      description 
      "Subtechnology related";
    } 
    leaf problem-type{
      type string;
      description 
      "Problem type definition, i.e. network, faulty hardware, 
      performance, security, etc. ";
    } 
    leaf resolution{
      type string;
      description 
      "code (closed cases only)";
    } 
    leaf owner{
      type string; 
      description 
      "Customer in charge of the case";
    // NEED to refer to user lmo-class
    } 
    leaf support-engineer{
      type string;
      description 
      "Customer Support Engineer in charge of the case";
    // NEED to refer to user lmo-class
    } 
    container asset {
      description
          "Asset container to which this incident is attached";
      leaf lmo-class {
        type leafref {
          path "/ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:lmo-class";
        }
        must "derived-from-or-self(current(), "+
             " 'ietf-lmo-asset:asset')";
        default ietf-lmo-asset:asset;
        description
          "Asset class to which this incident is attached";
      }    
      leaf id {
        type leafref {
           path "/ietf-lmo:lmos/ietf-lmo:lmo[ietf-lmo:lmo-class = "+
                " current()/../lmo-class]/ietf-lmo:inst/ietf-lmo:id";
        }
        description
          "Asset to which this incident is attached";
      }
    }
    container feature {
      description
          "Feature to which this incident is attached";
      leaf lmo-class {
        type leafref {
          path "/ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:lmo-class";
        }
        must "derived-from-or-self(current(), "+
             " 'ietf-lmo-feature:feature')";
        default ietf-lmo-feature:feature;
        description
          "Feature class to which this incident is attached";
      }    
      leaf id {
        type leafref {
          path "/ietf-lmo:lmos/ietf-lmo:lmo[ietf-lmo:lmo-class = "+
               " current()/../lmo-class]/ietf-lmo:inst/ietf-lmo:id";
        }
        description
          "Feature to which this incident is attached";
      }
    }    
    leaf contract-number {
      type string;
      description
      "Support contract number";
    // NEED to evaluate if it should be independent container. It 
    // should be associated to asset and license
    }
  }
}    <CODE ENDS>
]]></artwork></figure>

</section>
<section anchor="organization-1"><name>Organization</name>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-lmo-organization@2022-12-20.yang"
module ietf-lmo-organization {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-lmo-organization";
  prefix ietf-lmo-organization;
  import ietf-lmo-common {
    prefix ietf-lmo-common;
  }
  import ietf-lmo {
    prefix ietf-lmo;
  }
  import ietf-lmo-entitlements {
    prefix ietf-lmo-entitlements;
  }
  organization
    "IETF OPSA (Operations and Management Area) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>
     Editor:  Jan Lindblad
              <mailto:jlindbla@cisco.com>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>";
  description
    "This YANG module defines the organization module and the 
     different attributes that defines it.

     Copyright (c) 2021 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions  
  
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";
  revision 2022-12-20 {
    description
      "license(s) renamed to entitlement(s)";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-09-20 {
    description
      "fixed YANG statements";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-07-07 {
    description
      "fixed YANG statements";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-03-01 {
    description
      "Initial revision for Organization Module as part of the
       LMO YANG Model";
    reference
      "RFC XXXX: LMO YANG Model";
  }

  identity organization {
    base ietf-lmo-common:lmo-class;
    description 
    "An organization is a class of lmo that represents an entity 
    such as a company, an institution, or an association, 
    comprising one or more people and having a particular 
    purpose";
  }
  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst {
    when "derived-from-or-self(../ietf-lmo:lmo-class, "+
         " 'ietf-lmo-organization:organization')";
    description
      "organization attributes";

    leaf address {
      type string;
      description 
        "organization address";
    }
    leaf department {
      type boolean;
      default false;
      description
        "How to categorize the organization";
    }
    //Fill more leafs for organizations here...
  }
  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst {
    when "derived-from-or-self(../ietf-lmo:lmo-class, "+
         " 'ietf-lmo-entitlements:entitlement')";
    description
      "entitlement attributes related to organization";
  
    container organization {
      //NEED to determine how the model will consume 
      //organization/service/user
      //Leaving it here for the moment
      description
        "Organization container";
      leaf lmo-class {
        type leafref {
          path "/ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:lmo-class";
        }
        must "derived-from-or-self(current(), "+
             " 'ietf-lmo-organization:organization')";
        description
          "Organization class to which this entitlement is attached";
      }    
      leaf id {
        type leafref {
          path "/ietf-lmo:lmos/ietf-lmo:lmo[ietf-lmo:lmo-class = "+
               " current()/../lmo-class]/ietf-lmo:inst/ietf-lmo:id";
        }
        description
          "Organization to which this entitlement is attached";
      }
    }
    //License module can be extended here when organization is 
    //present...
  }   
}    <CODE ENDS>
]]></artwork></figure>

</section>
<section anchor="user-1"><name>User</name>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-lmo-user@2022-12-20.yang"
module ietf-lmo-user {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-lmo-user";
  prefix ietf-lmo-user;
  import ietf-lmo-common {
    prefix ietf-lmo-common;
  }
  import ietf-lmo {
    prefix ietf-lmo;
  }
  import ietf-lmo-entitlements {
    prefix ietf-lmo-entitlements;
  }
  import ietf-lmo-organization {
    prefix ietf-lmo-organization;
  }
  organization
    "IETF OPSA (Operations and Management Area) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>
     Editor:  Jan Lindblad
              <mailto:jlindbla@cisco.com>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>";
  description
    "This YANG module includes the user module and the different 
     attributes that defines it.

     Copyright (c) 2021 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions  
  
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";

  revision 2022-12-20 {
    description
      "license(s) renamed to entitlement(s)";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-10-11 {
    description
      "fixed definition of users";
    reference
      "RFC XXXX: LMO YANG Model";
  }    
  revision 2022-09-20 {
    description
      "fixed YANG statements";
    reference
      "RFC XXXX: LMO YANG Model";
  }
  revision 2022-07-07 {
    description
      "fixed YANG statements";
    reference
      "RFC XXXX: LMO YANG Model";
  }

  revision 2022-03-01 {
    description
      "Initial revision for User Module as part of the
       LMO YANG Model";
    reference
      "RFC XXXX: LMO YANG Model";
  }

  identity user {
    base ietf-lmo-common:lmo-class;
    description 
    "A user is a class of lmo that refers to owner or consumer 
    of the asset. User belongs to an organization. Within the 
    organization there are entities that: a) use the assets 
    in their operations, b) manage the assets. ";
  }
  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst {
    when "derived-from-or-self(../ietf-lmo:lmo-class, "+
         " 'ietf-lmo-user:user')";
    description
      "user attributes";

    leaf billing-account {
      type uint32;
      description "billing account information";
    }
    container represents {
      description
        "Organization to which this user is attached";
      leaf lmo-class {
        type leafref {
          path "/ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:lmo-class";
        }
        must "derived-from-or-self(current(), "+
             " 'ietf-lmo-organization:organization')";
        description
          "Organization class to which this user is attached";
      }
      leaf id {
        type leafref {
          path "/ietf-lmo:lmos/ietf-lmo:lmo[ietf-lmo:lmo-class = "+
               " current()/../lmo-class]/ietf-lmo:inst/ietf-lmo:id";
        }
        description
          "Organization to which this user is attached";
      }  
    }
    leaf authority {
      type enumeration {
        enum super-user {
          description
            "super-user";
          }
        enum standard-user {
          description
            "standard-user";
          }
        enum restricted-user {
          description
            "restricted-user";
          }
        enum admin {
          description
            "admin";
          }
      }
      default standard-user;
      description 
        "authority assign to the user";
    }
    leaf email {
      type string; 
      description
          "user email";
    }    
    // Fill in more leafs you want on organizations here...
  }

  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst {
    when "derived-from-or-self(../ietf-lmo:lmo-class, "+
         " 'ietf-lmo-entitlements:entitlement')";
    description
      "entitlement attributes related to user";

    container user {
      //NEED to determine how the model will consume 
      //organization/service/user. Leaving it here for the moment
      description 
      "user container";
      leaf lmo-class {
        type leafref {
          path "/ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:lmo-class";
        }
        must "derived-from-or-self(current(), "+
             " 'ietf-lmo-user:user')";
        description
          "User class to which this entitlement is attached";
      }    
      leaf id {
        type leafref {
          path "/ietf-lmo:lmos/ietf-lmo:lmo[ietf-lmo:lmo-class = "+
               " current()/../lmo-class]/ietf-lmo:inst/ietf-lmo:id";
        }
        description
          "User to which this entitlement is attached";
      }
    }
  }
}    <CODE ENDS>
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="deployment-considerations"><name>Deployment Considerations</name>

<t>LMO Data Models defines the data schemas for LMO data. LMO Data Models are based on YANG. YANG data models can be used independent of the transport and can be converted into any encoding format supported by the network configuration protocol. YANG is a protocol independent.</t>

<t>To enable the exchange of LMO data among all interested parties, deployment considerations that are out of the scope of this document, will need to include:</t>

<t><list style="symbols">
  <t>The data structure to describe all metrics and quantify relevant data consistently, i.e. specific formats like XML or JSON encoded message would be deemed valid or invalid based on LMO models.</t>
  <t>The process to share and collect LMO data across the consumers consistently, including the transport mechanism. The LMO YANG models can be used with network management protocols such as NETCONF <xref target="RFC6241"/>, RESTCONF <xref target="RFC8040"/>, streaming telemetry, etc. OpenAPI specification might also help to consume LMO metrics.</t>
  <t>How the configuration of assets should be done.</t>
</list></t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>The security considerations mentioned in section 17 of <xref target="RFC7950"/> apply.</t>

<t>LMO brings several security and privacy implications because of the various components and attributes of the information model. For example, each functional component can be tampered with to give manipulated data. LMO when used alone or with other relevant data, can identify an individual, revealing Personal Identifiable Information (PII). Misconfigurations can lead to data being accessed by unauthorized entities.</t>

<t>Methods exist to secure the communication of management information. The transport entity of the functional model MUST implement methods for secure transport. This document also contains an Information model and Data-Model in which none of the objects defined are writable. If the objects are deemed sensitive in a particular environment, access to them MUST be restricted using appropriately configured security and access control rights. The information model contains several optional elements which can be enabled or disabled for the sake of privacy and security. Proper authentication and audit trail MUST be included for all the users/processes that access the LMO.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="the-ietf-xml-registry"><name>The IETF XML Registry</name>

<t>This document registers URIs in the IETF XML registry <xref target="RFC3688"/>. Following the format in <xref target="RFC3688"/>, the registrations defined below are requested:</t>

<t>URI: urn:ietf:params:xml:ns:yang:ietf-lmo <br />
Registrant Contact: The OPSA WG of the IETF. <br />
XML: N/A, the requested URI is an XML namespace. <br /></t>

<t>URI: urn:ietf:params:xml:ns:yang:ietf-lmo-common <br />
Registrant Contact: The OPSA WG of the IETF. <br />
XML: N/A, the requested URI is an XML namespace. <br /></t>

<t>URI: urn:ietf:params:xml:ns:yang:ietf-lmo-assets <br />
Registrant Contact: The OPSA WG of the IETF. <br />
XML: N/A, the requested URI is an XML namespace. <br /></t>

<t>URI: urn:ietf:params:xml:ns:yang:ietf-lmo-entitlements <br />
Registrant Contact: The OPSA WG of the IETF. <br />
XML: N/A, the requested URI is an XML namespace. <br /></t>

<t>URI: urn:ietf:params:xml:ns:yang:ietf-lmo-feature <br />
Registrant Contact: The OPSA WG of the IETF. <br />
XML: N/A, the requested URI is an XML namespace. <br /></t>

<t>URI: urn:ietf:params:xml:ns:yang:ietf-lmo-usage <br />
Registrant Contact: The OPSA WG of the IETF. <br />
XML: N/A, the requested URI is an XML namespace. <br /></t>

<t>URI: urn:ietf:params:xml:ns:yang:ietf-lmo-incident-management <br />
Registrant Contact: The OPSA WG of the IETF. <br />
XML: N/A, the requested URI is an XML namespace. <br /></t>

<t>URI: urn:ietf:params:xml:ns:yang:ietf-lmo-organization <br />
Registrant Contact: The OPSA WG of the IETF. <br />
XML: N/A, the requested URI is an XML namespace. <br /></t>

<t>URI: urn:ietf:params:xml:ns:yang:ietf-lmo-user <br />
Registrant Contact: The OPSA WG of the IETF. <br />
XML: N/A, the requested URI is an XML namespace. <br /></t>

</section>
<section anchor="the-yang-module-names-registry"><name>The YANG Module Names Registry</name>

<t>This document registers YANG modules in the YANG Module Names registry <xref target="RFC7950"/>. Following the format in <xref target="RFC7950"/>, the registrations defined below are requested:</t>

<t>name: ietf-lmo <br />
namespace: urn:ietf:params:xml:ns:yang:ietf-lmo <br />
maintained by IANA: N <br />
prefix: ietf-lmo <br />
reference: RFC XXXX <br /></t>

<t>name: ietf-lmo-common <br />
namespace: urn:ietf:params:xml:ns:yang:ietf-lmo-common <br />
maintained by IANA: N <br />
prefix: ietf-lmo-common <br />
reference: RFC XXXX <br /></t>

<t>name: ietf-lmo-asset-inventory <br />
namespace: urn:ietf:params:xml:ns:yang:ietf-lmo-assets <br />
maintained by IANA: N <br />
prefix: ietf-lmo-asset <br />
reference: RFC XXXX <br /></t>

<t>name: ietf-lmo-entitlements <br />
namespace: urn:ietf:params:xml:ns:yang:ietf-lmo-entitlements <br />
maintained by IANA: N <br />
prefix: ietf-lmo-entitlements <br />
reference: RFC XXXX <br /></t>

<t>name: ietf-lmo-feature <br />
namespace: urn:ietf:params:xml:ns:yang:ietf-lmo-feature <br />
maintained by IANA: N <br />
prefix: ietf-lmo-feature <br />
reference: RFC XXXX <br /></t>

<t>name: ietf-lmo-usage <br />
namespace: urn:ietf:params:xml:ns:yang:ietf-lmo-usage <br />
maintained by IANA: N <br />
prefix: ietf-lmo-usage <br />
reference: RFC XXXX <br /></t>

<t>name: ietf-lmo-incident-management <br />
namespace: urn:ietf:params:xml:ns:yang:ietf-lmo-incident-management <br />
maintained by IANA: N <br />
prefix: ietf-lmo-incident <br />
reference: RFC XXXX <br /></t>

<t>name: ietf-lmo-organization <br />
namespace: urn:ietf:params:xml:ns:yang:ietf-lmo-organization <br />
maintained by IANA: N <br />
prefix: ietf-lmo-organization <br />
reference: RFC XXXX <br /></t>

<t>name: ietf-lmo-user <br />
namespace: urn:ietf:params:xml:ns:yang:ietf-lmo-user <br />
maintained by IANA: N <br />
prefix: ietf-lmo-user <br />
reference: RFC XXXX <br /></t>

</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>





<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author fullname='S. Bradner' initials='S.' surname='Bradner'><organization/></author>
<date month='March' year='1997'/>
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference anchor='RFC8174' target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author fullname='B. Leiba' initials='B.' surname='Leiba'><organization/></author>
<date month='May' year='2017'/>
<abstract><t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='8174'/>
<seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>




    </references>

    <references title='Informative References'>





<reference anchor='RFC7950' target='https://www.rfc-editor.org/info/rfc7950'>
<front>
<title>The YANG 1.1 Data Modeling Language</title>
<author fullname='M. Bjorklund' initials='M.' role='editor' surname='Bjorklund'><organization/></author>
<date month='August' year='2016'/>
<abstract><t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols.  This document describes the syntax and semantics of version 1.1 of the YANG language.  YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification.  There are a small number of backward incompatibilities from YANG version 1.  This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t></abstract>
</front>
<seriesInfo name='RFC' value='7950'/>
<seriesInfo name='DOI' value='10.17487/RFC7950'/>
</reference>



<reference anchor='RFC9179' target='https://www.rfc-editor.org/info/rfc9179'>
<front>
<title>A YANG Grouping for Geographic Locations</title>
<author fullname='C. Hopps' initials='C.' surname='Hopps'><organization/></author>
<date month='February' year='2022'/>
<abstract><t>This document defines a generic geographical location YANG grouping. The geographical location grouping is intended to be used in YANG data models for specifying a location on or in reference to Earth or any other astronomical object.</t></abstract>
</front>
<seriesInfo name='RFC' value='9179'/>
<seriesInfo name='DOI' value='10.17487/RFC9179'/>
</reference>


<reference anchor='I-D.draft-ietf-opsawg-sbom-access-10'>
   <front>
      <title>Discovering and Retrieving Software Transparency and Vulnerability Information</title>
      <author fullname='Eliot Lear' initials='E.' surname='Lear'>
         <organization>Cisco Systems</organization>
      </author>
      <author fullname='Scott Rose' initials='S.' surname='Rose'>
         <organization>NIST</organization>
      </author>
      <date day='28' month='September' year='2022'/>
      <abstract>
	 <t>   To improve cybersecurity posture, automation is necessary to locate
   what software is running on a device, whether that software has known
   vulnerabilities, and what, if any recommendations suppliers may have.
   This memo specifies a model to provide access to this information.
   It may optionally be discovered through manufacturer usage
   descriptions.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-opsawg-sbom-access-10'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-opsawg-sbom-access-10.txt' type='TXT'/>
</reference>



<reference anchor='RFC6241' target='https://www.rfc-editor.org/info/rfc6241'>
<front>
<title>Network Configuration Protocol (NETCONF)</title>
<author fullname='R. Enns' initials='R.' role='editor' surname='Enns'><organization/></author>
<author fullname='M. Bjorklund' initials='M.' role='editor' surname='Bjorklund'><organization/></author>
<author fullname='J. Schoenwaelder' initials='J.' role='editor' surname='Schoenwaelder'><organization/></author>
<author fullname='A. Bierman' initials='A.' role='editor' surname='Bierman'><organization/></author>
<date month='June' year='2011'/>
<abstract><t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices.  It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages.  The NETCONF protocol operations are realized as remote procedure calls (RPCs).  This document obsoletes RFC 4741.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6241'/>
<seriesInfo name='DOI' value='10.17487/RFC6241'/>
</reference>



<reference anchor='RFC8040' target='https://www.rfc-editor.org/info/rfc8040'>
<front>
<title>RESTCONF Protocol</title>
<author fullname='A. Bierman' initials='A.' surname='Bierman'><organization/></author>
<author fullname='M. Bjorklund' initials='M.' surname='Bjorklund'><organization/></author>
<author fullname='K. Watsen' initials='K.' surname='Watsen'><organization/></author>
<date month='January' year='2017'/>
<abstract><t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t></abstract>
</front>
<seriesInfo name='RFC' value='8040'/>
<seriesInfo name='DOI' value='10.17487/RFC8040'/>
</reference>



<reference anchor='RFC3688' target='https://www.rfc-editor.org/info/rfc3688'>
<front>
<title>The IETF XML Registry</title>
<author fullname='M. Mealling' initials='M.' surname='Mealling'><organization/></author>
<date month='January' year='2004'/>
<abstract><t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t></abstract>
</front>
<seriesInfo name='BCP' value='81'/>
<seriesInfo name='RFC' value='3688'/>
<seriesInfo name='DOI' value='10.17487/RFC3688'/>
</reference>



<reference anchor='RFC8345' target='https://www.rfc-editor.org/info/rfc8345'>
<front>
<title>A YANG Data Model for Network Topologies</title>
<author fullname='A. Clemm' initials='A.' surname='Clemm'><organization/></author>
<author fullname='J. Medved' initials='J.' surname='Medved'><organization/></author>
<author fullname='R. Varga' initials='R.' surname='Varga'><organization/></author>
<author fullname='N. Bahadur' initials='N.' surname='Bahadur'><organization/></author>
<author fullname='H. Ananthakrishnan' initials='H.' surname='Ananthakrishnan'><organization/></author>
<author fullname='X. Liu' initials='X.' surname='Liu'><organization/></author>
<date month='March' year='2018'/>
<abstract><t>This document defines an abstract (generic, or base) YANG data model for network/service topologies and inventories.  The data model serves as a base model that is augmented with technology-specific details in other, more specific topology and inventory data models.</t></abstract>
</front>
<seriesInfo name='RFC' value='8345'/>
<seriesInfo name='DOI' value='10.17487/RFC8345'/>
</reference>




    </references>


<section numbered="false" anchor="change-log"><name>Change log</name>

<t>RFC Editor Note: This section is to be removed during the final publication of the document.</t>

<t>version 09</t>

<t><list style="symbols">
  <t>Rename "license" to "entitlement".</t>
  <t>renamed ietf-lmo-assets-inventory to ietf-lmo-assets.</t>
  <t>ietf-lmo-assets provides capability of integration and extention for a different approach on how to address inventory use cases. Process is explained in the Appendix A.</t>
  <t>ietf-lmo-example-mapping-XXX YANG modules accommodates the ietf-lmo-assets YANG module to any other inventory which will be required in the future to be referenced.</t>
</list></t>

<t>version 08</t>

<t><list style="symbols">
  <t>fixing errors shown in YANG validation</t>
</list></t>

<t>version 07</t>

<t><list style="symbols">
  <t>fixing references</t>
</list></t>

<t>version 06</t>

<t><list style="symbols">
  <t>fixing errors shown in YANG validation</t>
</list></t>

<t>version 05</t>

<t><list style="symbols">
  <t>introduce fixes for YANG statements</t>
</list></t>

<t>version 04</t>

<t><list style="symbols">
  <t>Remove ietf-lmo-service YANG module, as service is considered within the asset concept</t>
  <t>Fix introduced to the .xml and .txt avoiding a compiling issue on the YANG modules.</t>
</list></t>

<t>version 03</t>

<t><list style="symbols">
  <t>Flexible root structure has been introduced by the ietf-lmo YANG module: Modules are arranged into layers, with ietf-lmo-common and ietf-lmo at the core. Other modules can be added in layers on top.
 This structure allows flexibility and the option to be enhanced by vendor implementation.<br />
 The new structure allows to include other lmo classes, or exclude current lmo classes.</t>
  <t>Feature and Usage containers have been split in two independent modules.  Where Usage relates to runtime data.</t>
  <t>Organization attribute, has been enhanced to an independent YANG module, adding flexibility and the option to be called independently and enhanced.</t>
  <t>Service and User YANG modules, have been also introduced in a similar flexible structure, being part of new lmo classes.</t>
  <t>Information Model, has been enhanced with new modules: Organization, Service and User modules.  On this version the new lmo classes can be called independently or from the entitlements module.  There is no restriction to be called from any of the other YANG modules.</t>
</list></t>

<t>version 02</t>

<t><list style="symbols">
  <t>"Support case" renamed to "incident".</t>
  <t>Add MAC address and IP address attributes under asset-inventory YANG module.</t>
  <t>Link among objects &amp; YANG modules (notably with feature).</t>
  <t>New text about asset usage.</t>
</list></t>

<t>version 01</t>

<t><list style="symbols">
  <t>Fixes for YANG validator and idnits warnings.</t>
</list></t>

<t>version 00</t>

<t><list style="symbols">
  <t>Initial version.</t>
</list></t>

</section>
<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>The ideas in this document originate from early work by Tony Colon, Carlos Pignataro, and Yenu Gobena originally referred to as Experience Telemetry.</t>

<t>This document was created by meaningful contributions from Josh Suhr, Eric Vyncke, Yannis Viniotis, Nagendra Kumar Nainar, Yenu Gobena, Dhiren Tailor and Jan Lindblad.</t>

<t>The authors wish to thank Gonzalo Salgueiro, Martin Beverley, Ignacio Dominguez Martinez and many others for their helpful comments and suggestions.</t>

</section>
<section numbered="false" anchor="appendix-a"><name>Appendix A</name>

<t>Hardware network inventory is described as part of network topology which is defined in <xref target="RFC8345"/>, it has been explored in several IETF work as it might need an extension for some of the use cases that need to consume inventory information. This is the case for DMLMO, as assets are defined as hardware, software or even service instances.</t>

<t>This section summarizes and provides an example with the changes to make DMLMO compatible to any future changes that will come as part of the current inventory discussions and decisions.</t>

<t>DMLMO version -09 provides the approach to make DMLMO independent from the network inventory discussions, providing a way to consume any inventory management module(s). Version -09 contains changes to accommodate ietf-lmo-assets, aka ietf-lmo-assets-inventory in previous versions, to any other inventory module that might be required.</t>

<t>The following example considers iana-hardware and ietf-network-inventory YANG modules as inventory YANG modules to consider. It could include others, i.e., openconfig-platform.</t>

<figure><artwork><![CDATA[
<CODE BEGINS> file "iana-hardware@.yang"
module iana-hardware {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:iana-hardware";
  prefix ianahw;

  organization "IANA";
  contact
    "        Internet Assigned Numbers Authority

     Postal: ICANN
             12025 Waterfront Drive, Suite 300
             Los Angeles, CA  90094-2536
             United States of America

     Tel:    +1 310 301 5800
     E-Mail: iana@iana.org>";

  description
    "IANA-defined identities for hardware class.

     The latest revision of this YANG module can be obtained from
     the IANA website.

     Requests for new values should be made to IANA via
     email (iana@iana.org).

     Copyright (c) 2018 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Simplified BSD License

     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     The initial version of this YANG module is part of RFC 8348;
     see the RFC itself for full legal notices.";
  reference
    "https://www.iana.org/assignments/yang-parameters";

  revision 2018-03-13 {
    description
      "Initial revision.";
    reference
      "RFC 8348: A YANG Data Model for Hardware Management";
  }

  /*
   * Identities
   */

  identity hardware-class {
    description
      "This identity is the base for all hardware class
       identifiers.";
  }

  identity unknown {
    base ianahw:hardware-class;
    description
      "This identity is applicable if the hardware class is unknown
       to the server.";
  }

  identity chassis {
    base ianahw:hardware-class;
    description
      "This identity is applicable if the hardware class is an
       overall container for networking equipment.  Any class of
       physical component, except a stack, may be contained within a
       chassis; a chassis may only be contained within a stack.";
  }

  identity backplane {
    base ianahw:hardware-class;
    description
      "This identity is applicable if the hardware class is some sort
       of device for aggregating and forwarding networking traffic,
       such as a shared backplane in a modular ethernet switch.  Note
       that an implementation may model a backplane as a single
       physical component, which is actually implemented as multiple
       discrete physical components (within a chassis or stack).";
  }

  identity container {
    base ianahw:hardware-class;
    description
      "This identity is applicable if the hardware class is capable
       of containing one or more removable physical entities,
       possibly of different types.  For example, each (empty or
       full) slot in a chassis will be modeled as a container.  Note
       that all removable physical components should be modeled
       within a container component, such as field-replaceable
       modules, fans, or power supplies.  Note that all known
       containers should be modeled by the agent, including empty
       containers.";
  }

  identity power-supply {
    base ianahw:hardware-class;
    description
      "This identity is applicable if the hardware class is a
       power-supplying component.";
  }

  identity fan {
    base ianahw:hardware-class;
    description
      "This identity is applicable if the hardware class is a fan or
       other heat-reduction component.";
  }

  identity sensor {
    base ianahw:hardware-class;
    description
      "This identity is applicable if the hardware class is some sort
       of sensor, such as a temperature sensor within a router
       chassis.";
  }

  identity module {
    base ianahw:hardware-class;
    description
      "This identity is applicable if the hardware class is some sort
       of self-contained sub-system.  If a module component is
       removable, then it should be modeled within a container

       component; otherwise, it should be modeled directly within
       another physical component (e.g., a chassis or another
       module).";
  }

  identity port {
    base ianahw:hardware-class;
    description
      "This identity is applicable if the hardware class is some sort
       of networking port capable of receiving and/or transmitting
       networking traffic.";
  }

  identity stack {
    base ianahw:hardware-class;
    description
      "This identity is applicable if the hardware class is some sort
       of super-container (possibly virtual) intended to group
       together multiple chassis entities.  A stack may be realized
       by a virtual cable, a real interconnect cable attached to
       multiple chassis, or multiple interconnect cables.  A stack
       should not be modeled within any other physical components,
       but a stack may be contained within another stack.  Only
       chassis components should be contained within a stack.";
  }

  identity cpu {
    base ianahw:hardware-class;
    description
      "This identity is applicable if the hardware class is some sort
       of central processing unit.";
  }

  identity energy-object {
    base ianahw:hardware-class;
    description
      "This identity is applicable if the hardware class is some sort
       of energy object, i.e., it is a piece of equipment that is
       part of or attached to a communications network that is
       monitored, it is controlled, or it aids in the management of
       another device for Energy Management.";
  }

  identity battery {
    base ianahw:hardware-class;
    description
      "This identity is applicable if the hardware class is some sort
       of battery.";
  }

  identity storage-drive {
    base ianahw:hardware-class;
    description
      "This identity is applicable if the hardware class is some sort
       of component with data storage capability as its main
       functionality, e.g., hard disk drive (HDD), solid-state device
       (SSD), solid-state hybrid drive (SSHD), object storage device
       (OSD), or other.";
  }
}
<CODE ENDS>


<CODE BEGINS> file "ietf-network-inventory@2022-07-11.yang"
module ietf-network-inventory {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-network-inventory";
  prefix ni;

  import ietf-yang-types {
    prefix yang;
    reference
      "RFC6991: Common YANG Data Types.";
  }

  import iana-hardware {
    prefix ianahw;
    reference
      "RFC 8348: A YANG Data Model for Hardware Management.";
  }

  import ietf-inet-types {
    prefix inet;
  }

  organization
    "IETF CCAMP Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/ccamp/>
     WG List:  <mailto:ccamp@ietf.org>

     Editor:   Chaode Yu
               <yuchaode@huawei.com>

     Editor:   Italo Busi
               <italo.busi@huawei.com>

     Editor:   Aihua Guo
               <aihuaguo.ietf@gmail.com>

     Editor:   Sergio Belotti
               <sergio.belotti@nokia.com>

     Editor:   Jean-Francois Bouquier
               <jeff.bouquier@vodafone.com>

     Editor:   Fabio Peruzzini
               <fabio.peruzzini@telecomitalia.it>";

  description
    "This module defines a model for retrieving network inventory.
    The model fully conforms to the Network Management
    Datastore Architecture (NMDA).

    Copyright (c) 2022 IETF Trust and the persons
    identified as authors of the code.  All rights reserved.

    Redistribution and use in source and binary forms, with or
    without modification, is permitted pursuant to, and subject
    to the license terms contained in, the Revised BSD License
    set forth in Section 4.c of the IETF Trust's Legal Provisions
    Relating to IETF Documents
    (https://trustee.ietf.org/license-info).

    This version of this YANG module is part of RFC XXXX; see
    the RFC itself for full legal notices.

    The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
    NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
    'MAY', and 'OPTIONAL' in this document are to be interpreted as
    described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
    they appear in all capitals, as shown here.";

  // RFC Ed.: replace XXXX with actual RFC number and remove this
  // note.
  // RFC Ed.: update the date below with the date of RFC publication
  // and remove this note.

  revision 2022-07-11 {
    description
      "version 3.0.0";
    reference
      "draft-yg3bp-ccamp-inventory-yang-01: A YANG Data
      Model for Network Inventory.";
  }

  revision 2022-03-04 {
    description
      "version 3.0.0";
    reference
      "draft-yg3bp-ccamp-inventory-yang-00: A YANG Data
      Model for Network Inventory.";
  }

  revision 2021-11-09 {
    description
      "version 2.0.0";
    reference
      "draft-yg3bp-ccamp-optical-inventory-yang-00: A YANG Data
      Model for Optical Network Inventory.";
  }

  revision 2021-10-25 {
    description
      "Initial revision.";
    reference
      "draft-yg3bp-ccamp-optical-inventory-yang-00: A YANG Data
      Model for Optical Network Inventory.";
  }

  container network-inventory {
    config true;
    description
      "The top-level container for the network inventory
      information.";
    uses equipment-rooms-grouping;
    uses network-elements-grouping;
  }

  grouping common-entity-attributes {
    description
      "A set of attributes which are common to all the entities
      (e.g., component, equipment room) defined in this module.";
    leaf uuid {
      config true;
      type string;
      description
        "Uniquely identifies an entity (e.g., component).";
    }
    leaf name {
      type string;
      description
        "A name for an entity (e.g., component), as specified by
        a network manager, that provides a non-volatile 'handle'
        for the entity and that can be modified anytime during the
        entity lifetime.

        If no configured value exists, the server MAY set the value
        of this node to a locally unique value in the operational
        state.";
    }
    leaf description {
      type string;
      description "a textual description of inventory object";
    }
    leaf alias {
      type string;
      description
      "a alias name of inventory objects. This alias name can be
      specified by network manager.";
    }
  }

  grouping network-elements-grouping {
    description
      "The attributes of the network elements.";
    container network-elements {
      description
        "The container for the list of network elements.";
      list network-element {
        key uuid;
        description
          "The list of network elements within the network.";
        uses common-entity-attributes;
        container ne-location {
          description
            "To be added.";
          leaf-list equipment-room-name {
            type leafref {
              path "/ni:network-inventory/ni:equipment-rooms/" +
                   "ni:equipment-room/ni:name";
            }
            description
              "Names of equipment rooms where the NE is located.
              Please note that a NE could be located in several
              equipment rooms.";
          }
        }
        uses ne-specific-info-grouping;
        uses components-grouping;
      }
    }
  }

  grouping ne-specific-info-grouping {
    description
      "To be added.";
    leaf hardware-rev {
      type string;
      description
        "The vendor-specific hardware revision string for the NE.";
    }
    leaf firmware-rev {
      type string;
      description
        "The vendor-specific firmware revision string for the NE.";
    }
    leaf software-rev {
      type string;
      description
        "The vendor-specific software revision string for the NE.";
    }
    leaf mfg-name {
      type string;
      description "The name of the manufacturer of this NE";
    }
    leaf mfg-date {
      type yang:date-and-time;
      description "The date of manufacturing of the NE.";
    }
    leaf part-number {
      type string;
      description
        "The vendor-specific model name identifier string associated
         with this NE.  The preferred value is the customer-visible
         part number, which may be printed on the NE itself.";
    }
    leaf serial-number {
      type string;
      description
        "The vendor-specific serial number string for the NE";
    }
    leaf product-name {
      type string;
      description
        "indicates the vendor-spefic device type infomation.";
    }
  }

  grouping equipment-rooms-grouping {
    description
      "The attributes of the equipment rooms.";
    container equipment-rooms {
      description
        "The container for the list of equipment rooms.";
      list equipment-room {
        key uuid;
        description
          "The list of equipment rooms within the network.";
        uses common-entity-attributes;
        leaf location {
          type string;
          description
            "compared with the location information of the other
            inventory objects, a GIS address is preferred for
            equipment room";
        }
        container racks {
          description
            "To be added.";
          list rack {
            key uuid;
            description
              "The list of racks within an equipment room.";
            uses common-entity-attributes;
            uses rack-specific-info-grouping;
            list contained-chassis {
              key "ne-ref component-ref";
              description
                "The list of chassis within a rack.";
              leaf ne-ref {
                type leafref {
                  path "/ni:network-inventory/ni:network-elements"
                  + "/ni:network-element/ni:uuid";
                }
                description
                  "The reference to the network element containing
                  the chassis component.";
              }
              leaf component-ref {
                type leafref {
                  path "/ni:network-inventory/ni:network-elements"
                  + "/ni:network-element[ni:uuid"
                  + "=current()/../ne-ref]/ni:components"
                  + "/ni:component/ni:uuid";
                }
                description
                  "The reference to the chassis component within
                  the network element and contained by the rack.";
              }
            }
          }
        }
      }
    }
  }

  grouping rack-specific-info-grouping {
    description
      "To be added.";
    container rack-location {
      description
        "To be added.";
      leaf equipment-room-name {
        type leafref {
          path "/ni:network-inventory/ni:equipment-rooms"
          + "/ni:equipment-room/ni:name";
        }
        description
        "Name of equipment room where this rack is located.";
      }
      leaf row-number {
        type uint32;
        description
          "Identifies the row within the equipment room where
          the rack is located.";
      }
      leaf column-number {
        type uint32;
        description
          "Identifies the physical location of the rack within
          the column.";
      }
    }
    leaf rack-number {
      type uint32;
      description
        "An integer identifier of rack.";
    }
    leaf height {
      type uint16;
      units millimeter;
      description
        "To be added.";
    }
    leaf width {
      type uint16;
      units millimeter;
      description
        "To be added.";
    }
    leaf depth {
      type uint16;
      units millimeter;
      description
        "To be added.";
    }
    leaf max-voltage {
      type uint16;
      units volt;
      description
        "The maximum voltage could be supported by the rack.";
    }
  }

  grouping components-grouping {
    description
      "The attributes of the hardware components.";
    container components {
      description
        "The container for the list of components.";
      list component {
        key uuid;
        description
          "The list of components within a network element.";
        uses common-entity-attributes;
        leaf location {
          type string;
          description
            "To be added.

            In optical transport network, the location string is
            using the following pattern:
              '/ne=<nw-ne-name>[/r=<r_index>][/sh=<sh_index>
              [/s_sh=<s_sh_index> ...]][[/sl=<sl_index>
              [/s_sl=<s_sl_index> ...]][/p=<p_index> …]]'
            ";
        }
        leaf class {
          type identityref {
            base ianahw:hardware-class;
          }
          description
            "An indication of the general hardware type of the
             component.";
          reference
            "RFC 8348: A YANG Data Model for Hardware Management.";
        }
        leaf-list contained-child {
          type leafref {
            path "../ni:uuid";
          }
          description
            "The child components' identifier that are physically
            contained by this component.";
        }
        leaf parent-rel-pos {
          type int32 {
            range "0 .. 2147483647";
          }
          description
            "To be added.";
          reference
            "RFC 6933: Entity MIB (Version 4) -
                       entPhysicalParentRelPos";
        }
        container parent-references {
          description
            "To be added.";
          leaf equipment-room-uuid {
            type leafref {
              path "/ni:network-inventory/ni:equipment-rooms/" +
                   "ni:equipment-room/ni:uuid";
            }
            description
              "To be added.";
          }
          leaf ne-uuid {
            type leafref {
              path "/ni:network-inventory/ni:network-elements/" +
                   "ni:network-element/ni:uuid";
            }
            description
              "To be added.";
          }
          leaf rack-uuid {
            type leafref {
              path "/ni:network-inventory/ni:equipment-rooms/" +
                   "ni:equipment-room/ni:racks/ni:rack/ni:uuid";
            }
            description
              "To be added.";
          }
          container component-references {
            description
              "To be added.";
            list component-reference {
              key index;
              description
                "this list object is used to indicate its
                hierarchial parent components' identifier.
                This hierarchial relation can be found by index
                parameter. The topest parent component should be
                0-index.";
              leaf index {
                type uint8;
                description
                  "To be added.";
              }
              leaf class {
                type leafref {
                  path "../../../../ni:class";
                }
                description
                  "To be added.";
              }
              leaf uuid {
                type leafref {
                  path "../../../../ni:uuid";
                }
                description
                  "To be added.";
              }
            }
          }
        }
        leaf hardware-rev {
          type string;
          description
            "The vendor-specific hardware revision string for the
             component.  The preferred value is the hardware revision
             identifier actually printed on the component itself (if
             present).";
          reference
            "RFC 6933: Entity MIB (Version 4) -
                       entPhysicalHardwareRev";
        }
        leaf firmware-rev {
          type string;
          description
            "The vendor-specific firmware revision string for the
             component.";
          reference
            "RFC 6933: Entity MIB (Version 4) -
                       entPhysicalFirmwareRev";
        }
        leaf software-rev {
          type string;
          description
            "The vendor-specific software revision string for the
             component.";
          reference
            "RFC 6933: Entity MIB (Version 4) -
                       entPhysicalSoftwareRev";
        }
        leaf serial-num {
          type string;
          description
            "The vendor-specific serial number string for the
             component.  The preferred value is the serial number
             string actually printed on the component itself (if
             present).";
          reference
            "RFC 6933: Entity MIB (Version 4) -
            entPhysicalSerialNum";
        }
        leaf mfg-name {
          type string;
          description
            "The name of the manufacturer of this physical component.
             The preferred value is the manufacturer name string
             actually printed on the component itself (if present).

             Note that comparisons between instances of the
             'model-name', 'firmware-rev', 'software-rev', and
             'serial-num' nodes are only meaningful amongst
             components with the same value of 'mfg-name'.

             If the manufacturer name string associated with the
             physical component is unknown to the server, then this
             node is not instantiated.";
          reference
            "RFC 6933: Entity MIB (Version 4) - entPhysicalMfgName";
        }
        leaf part-number {
          type string;
          description
            "The vendor-specific model name identifier string
             associated with this physical component.  The preferred
             value is the customer-visible part number, which may be
             printed on the component itself.

             If the model name string associated with the physical
             component is unknown to the server, then this node is
             not instantiated.";
          reference
            "RFC 6933: Entity MIB (Version 4) -
            entPhysicalModelName";
        }
        leaf asset-id {
          type string;
          description
            "This node is a user-assigned asset tracking identifier
             for the component.

             A server implementation MAY map this leaf to the
             entPhysicalAssetID MIB object.  Such an implementation
             needs to use some mechanism to handle the differences in
             size and characters allowed between this leaf and
             entPhysicalAssetID.  The definition of such a mechanism
             is outside the scope of this document.";
          reference
            "RFC 6933: Entity MIB (Version 4) - entPhysicalAssetID";
        }
        leaf is-fru {
          type boolean;
          description
            "This node indicates whether or not this component is
             considered a 'field-replaceable unit' by the vendor.  If
             this node contains the value 'true', then this component
             identifies a field-replaceable unit.  For all components
             that are permanently contained within a
             field-replaceable unit, the value 'false' should be
             returned for this node.";
          reference
            "RFC 6933: Entity MIB (Version 4) - entPhysicalIsFRU";
        }
        leaf mfg-date {
          type yang:date-and-time;
          description
            "The date of manufacturing of the managed component.";
          reference
            "RFC 6933: Entity MIB (Version 4) - entPhysicalMfgDate";
        }
        leaf-list uri {
          type inet:uri;
          description
            "This node contains identification information about the
             component.";
          reference
            "RFC 6933: Entity MIB (Version 4) - entPhysicalUris";
        }
        uses component-specific-info-grouping;
      }
    }
  }

  grouping component-specific-info-grouping {
    description
      "In case if there are some missing attributes of component not
      defined by RFC8348. These attributes could be
      component-specific.
      Here we provide a extension structure for all the components
      we recognized. We will enrich these component specifc
      containers in the future.";
    choice component-class {
      description
        "To be added.";
      case chassis {
        when "./class = 'ianahw:chassis'";
        container chassis-specific-info {
          description
            "This container contains some attributes belong to
            chassis only.";
          uses chassis-specific-info-grouping;
        }
      }
      case container {
        when "./class = 'ianahw:container'";
        container slot-specific-info {
          description
            "This container contains some attributes belong to
            slot or sub-slot only.";
          uses slot-specific-info-grouping;
        }
      }
      case module {
        when "./ni:class = 'ianahw:module'";
        container board-specific-info {
          description
            "This container contains some attributes belong to
            board only.";
          uses board-specific-info-grouping;
        }
      }
      case port {
        when "./ni:class = 'ianahw:port'";
        container port-specific-info {
          description
            "This container contains some attributes belong to
            port only.";
          uses port-specific-info-grouping;
        }
      }
    //TO BE ADDED: transceiver
    }
  }

  grouping chassis-specific-info-grouping {
  //To be enriched in the future.
    description
      "To be added.";
  }

  grouping slot-specific-info-grouping {
  //To be enriched in the future.
    description
      "To be added.";
  }

  grouping board-specific-info-grouping {
  //To be enriched in the future.
    description
      "To be added.";
  }

  grouping port-specific-info-grouping {
  //To be enriched in the future.
    description
      "To be added.";
  }
}
<CODE ENDS>
]]></artwork></figure>

<t>The YANG modules ietf-lmo-example-mapping-ietf-network-inventory and ietf-lmo-example-mapping-openconfig-platform make the import of the inventory module(s) and augment the ietf-lmo-assets YANG module to include inventory attributes to the asset identity.</t>

<t>For this practice, ietf-lmo-assets.yang, removes vendor, name, description, pid, serial-number, vid, mac-address, ip-address, entity-name, product-description, udi, transparency-info as these and similar properties are expected to be managed using other inventory mechanism.</t>

<t>This process requires to include a mapping YANG module per imported inventory YANG module.</t>

<t>Module ietf-lmo-example-mapping-ietf-network-inventory, makes the mapping between ietf-network-inventory and ietf-lmo-assets, augmenting asset identity:</t>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-lmo-example-mapping-ietf-network-inventory@.yang"
module ietf-lmo-example-mapping-ietf-network-inventory {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-lmo-example-mapping-ietf-network-inventory";
  prefix ietf-lmo-example-map-ietf;

  import ietf-lmo-common {
    prefix ietf-lmo-common;
  }
  import ietf-lmo {
    prefix ietf-lmo;
  }
  import ietf-lmo-assets {
    prefix ietf-lmo-asset;
  }
  import ietf-network-inventory {
    prefix ni;
  }
  organization
    "IETF OPSA (Operations and Management Area) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>
     Editor:  Josh Suhr
              <mailto:josuhr@cisco.com>
     Editor:  Sudhendu Kumar
              <mailto:skumar23@ncsu.edu>";
  description
    "This YANG module maps the IETF LMO asset concept to the 
     IETF network inventory framework.

     Copyright (c) 2021 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions  
  
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";

    revision 2022-11-25 {
    description
      "First version of mapping to IETF asset invetory modules.";
    reference
      "RFC XXXX: mapping inventory and LMO YANG Model";
  }

  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst {
    when "derived-from-or-self(../ietf-lmo:lmo-class,'ietf-lmo-asset:asset')";

    choice mapping-type {
      // config true;
      description
        "mapping type description";
      case network-element {
        leaf network-element-ref {
          type leafref {
            path "/ni:network-inventory/ni:network-elements/"
            + "ni:network-element/ni:uuid";
          description
            "network element reference description";
          }
        }
      }
      case component {
        leaf component-network-element-ref {
          type leafref {
            path "/ni:network-inventory/ni:network-elements/"
            + "ni:network-element/ni:uuid";
          description
            "component network element reference description";
        }
        leaf component-ref {
          type leafref {
            path "/ni:network-inventory/ni:network-elements/"
            + "ni:network-element"
            + "[ni:uuid = current()/../network-element-ref]/"
            + "ni:components/ni:component/ni:uuid";
          description
            "component reference description";
          }
        }
      }
      case rack { 
        leaf rack-equipment-room-ref {
          type leafref {
            path "/ni:network-inventory/ni:equipment-rooms/"
            + "ni:equipment-room/ni:uuid";
          description
            "rack equipment room reference description";
          }
        }
        leaf rack-ref {
          type leafref {
            path "/ni:network-inventory/ni:equipment-rooms/"
            + "ni:equipment-room"
            + "[ni:uuid = current()/../rack-equipment-room-ref]/"
            + "ni:racks/ni:rack/ni:uuid";
          description
            "rack reference description";  
          }
        }
      }
    }

    description 
      "This adds a reference from LMO instances of class 'asset'
       to the IETF network inventory tree.";
  }
}    <CODE ENDS>
]]></artwork></figure>

<t>Module ietf-lmo-example-mapping-openconfig-platform, includes the mapping between openconfig-platform and ietf-lmo-assets, augmenting asset identity:</t>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-lmo-example-mapping-openconfig-platform@2023-01-16.yang"
module ietf-lmo-example-mapping-openconfig-platform {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-lmo-example-mapping-openconfig-platform";
  prefix ietf-lmo-example-map-oc;

  import ietf-lmo {
    prefix ietf-lmo;
  }
  import ietf-lmo-assets {
    prefix ietf-lmo-asset;
  }
  // For the show case, import statement should be uncommented, 
  // import openconfig-platform {
  //  prefix oc-platform;
  // }
  organization
    "IETF OPSA (Operations and Management Area) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>
     Editor:  Josh Suhr
              <mailto:josuhr@cisco.com>
     Editor:  Sudhendu Kumar
              <mailto:skumar23@ncsu.edu>";
  description
    "This YANG module maps the IETF LMO asset concept to the 
     OpenConfig platform framework.

     Copyright (c) 2021 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions  
  
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";
  revision 2023-01-16 {
    description
      "import openconfig-platform statement commented out.";
    reference
      "RFC XXXX: mapping openconfig inventory and LMO YANG Model";
  }
  revision 2022-11-25 {
    description
      "First version of mapping to OC platform modules.";
    reference
      "RFC XXXX: mapping openconfig inventory and LMO YANG Model";
  }

  augment /ietf-lmo:lmos/ietf-lmo:lmo/ietf-lmo:inst {
    when "derived-from-or-self(../ietf-lmo:lmo-class,'ietf-lmo-asset:asset')";

    leaf oc-component-ref {
      type string;
      config true;
      // leafref path "/oc-platform:components/oc-platform:component/" 
      // + "oc-platform:name";
      // this is simplified version to show case
      description "simplified example to include component reference";
    }

    description 
      "This adds a reference from LMO instances of class 'asset'
       to the OpenConfig platform tree.";
  }
}    <CODE ENDS>
]]></artwork></figure>

<t>openconfig-platform.yang is not included in the section for simplicity of the output.</t>

<t>Once compilation is applied to the YANG modules, the following configuration, considers network element "router2" as a hardware network element, which is described under network-inventory YANG module:</t>

<t>network-inventory network-elements network-element 22222
 name          router2
 hardware-rev  1.1
 software-rev  17.1
 mfg-name      cisco
 serial-number AF123456
 product-name  ASR1k
 components component fan
  part-number 678678
 components component psu
  part-number 654321</t>

<t>"router2" asset identity is augmented including attributes from ietf-network-inventory(i.e. rack-equipment-room-ref, rack-ref, network-element-ref, etc) and any other imported YANG module, i.e. openconfig-platform inventory YANG modules, with oc-component-ref.</t>

<t>lmo0(config)#lmos lmo asset inst router2 ? 
Possible completions:
  activation-date          age                             aggregation                capture-info                component-network-element-ref<br />
  component-ref            ietf-lmo-asset:deployment-mode  ietf-lmo-feature:features  install-location            interfaces 
  licenses                 network-element-ref             number-of-instances        oc-component-ref            parent                     <br />
  platform-dependency-os   rack-equipment-room-ref         rack-ref                   role                        sign-of-life-timestamp       <br />
  software-type            software-version                tags</t>

<t>Changes in future versions of DMLMO, might require one unique import statement in the mapping YANG module, from another inventory YANG module.</t>

</section>


  </back>

<!-- ##markdown-source:
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
V62rgZJaHQCsqoz357JpO6aoUeaQGmXe7om2m++JReV2CcYyPEqUYLfRcSLl
WesYglXxWUD/VkzOd2kQUOsVhKUDnBaEdaLBq3OqehBgMdHlxbDPwowKZXfJ
DbS8hkxaSMS3T1HPsHQ9kRWdNpeW5DqlVUQEu2bTUamNQ23UuVq5rmptI14X
sqsKfedRU01tLL84UCaO6r0xpOsN17aqlBBzW3kI9L3sK0nP3cq+ilMpP97b
TDhTb1zgdN0WyLZjH/ceuUq51vYW1g2/0DX2VgYNDeQzaGo7RMQD5vY1yYJv
gPrN7NpM0kK+OVUnBZA3tz8e/6InAfZ8gu/eqhHqDE+sShULn15303hIq9CZ
H4uaw/GGEeK8mqfNHXZVnRnNbo+8TaVNJU1kbINgNBq1s9jFlTUxsVEDkqVx
tyxX146ym06vTa9qrgLdoRLC7MH1p78w5c309DUHPfq51YVarvYW2jg1FXC7
tfDiiuXQjcBlQcOOFbNdXFuNZY3dWsEpVmUNYxU85XexQBitq4DVUKen5aoq
uUifKm92GTvLPkObPu00OxaoT3esdtNiz7MxhvPAJIh4LNKVFqCqLyLQA8C0
HV5RUSm7j6VUDbfGQesNNzVKEirOJwZ5B0ULE7g+5Kf6Aj6CbEqa0/FDNiGi
W8ojie0Xpjyxo3iwi8vM3QE2P4SJP/2YgXrS5Qd5VpXY96S4isvJAkMxWPkP
2/Va70o56AQf7GQOPJqfQcj8G7GpvBgwaYrHEsiSd5n6Lkor8wLLLifhGlSa
x7qQ9sWZDTRp7R2w8orfL6yP9qj8wvM4fWuD+hx/3LfXsQl4tU0tZKvg38hh
uhfAGXFoIen58Pp6glUoHPagDhm9xEMJc72igtZ1KoNzsqjGxGRCh0qf4pFI
qcrvmEqvcVekf9KAYfBTPHwW093aUJqVwrrwL4wI2iwP4OtyfilyvtnuY0/U
XFpaCCOSEnqq8DSbP9IfiYpeWq3zrKGky6S7F5q9FYNaU87QqsdIjdqtoagE
LcwEvG8eSbEW7AHfQUzjDLuE3ggVT1GC5lmK5Q7jfFKBdcOjYqU61SdKsIGi
RBOJvWmp61DR/a3KMpwspFNc2bGO1RBTDMFwvNFSXmVXWBuSRsI6tFj12WrN
bTmF9MwdMAGBpMUkwgaKNwPrlAmMW1cWgF2quUzDU0ScK9VgoXSebRT8WHCT
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
evDl4CA4CdPgKlL5aMLXiJHE3Inj+NWZqiLEDSau0GW91qWcYIxItZnARl6X
pCX+q4pyHAB7b3CxigHWxqhKuldcSRUEPYIq6YhXi1d0jZdbWog7WHpWkFZJ
2dHvwBpImFv8Oct0HQRMrzt+VSDM335rszFfj6wbRpp2j53BNseY0KDTI2l3
DTIfU3MD/8Kg0ZiTAHMKDKAcupL793n0rwoL1uqBsGRrWIh4bxmRHBALtAun
zZuv7zXmFOx+4uo6u8EDr5J/ZP3RJyblmCjdkSkiIJ/RIeZeVUuK3dba+zGN
gfq1yDd5fn7XzyJDzxG6VA9Zy+/lnjkBNQBrSnHFCIcMkzjlEiKUQ0+nBZ2B
1MrIDXRS6YmDWXRVvwGrcYFgNWwTjRRP6KMjctGZs66wZa5NA+w8c0ccozZK
zVPvOjwMUXgX1NVWg58HoKycUkeTxnvbUgO4nl+PbrR6YJs/mNVvJXZ7Ups7
PUfK30fX0Gp7RzPfTj57V5a354T3Ss/m+JiXbeiwWJNV6JUHrZHrRoenTUm4
HDSTzPrW/Y0La3vrc1BmbaN9zvWT66+TWw+4ai4dMfVNe4vzu0ywP1aRpT4I
rePT+fvXtnjXr+Z7OgmqBpODUzpitSW1stTXagSwf9Fl1uSGjQ1tzf/u4CYi
D9YG4ppAQk5VVEvWMrhgRStT43gtdhy+OWDPQGFLp8B9aTxRQxWQ3RAAuFx/
7cZAfA9AzBw9qzcgSAWg5eThBKtwFmAg1uDxUUMnMCfuaFSCQ/bM2iOqSjQa
1A+gqbMzWVUPQPXhllrf/zSqi4i7uoLFFwt8INfwtDnm4SGx6wPoElorjI0X
twXapqLbgv3UGvPuIKfKZLcFsipzJgWEnDLmPQBzvrLKZqg787qPAIKH4+J8
R2jsKUsP7L9BY5hpuC6oV0tzEo4gUu0eLw4ofiCFgT7/dCtcvN58GGw8bd4p
AnO4DN/dOqjn4bt4WS37nF+GYstgn9GHVTnPfoHhZ+rpa+jDxKObUQr8bNKG
uy7eiias1uHjr+2K8AaF7FaU4LoCdRMF2FZ/ZcVH8l/HUN6ENqsQzXUUNc9Z
aJNhN0CuT9f9psMyuLm2u1VKwbNbQuCvvpwr1qxKb4ZN3VdlTan6WPbSea3Q
MU+ljG1uPTnQDS4p6Vm6Rm5IYYENiK7CZChqdD+u8koedtuMqrEItqqQyvr6
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
zv8POem0L/ZKAgA=

-->

</rfc>

