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


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

]>


<rfc ipr="trust200902" docName="draft-palmero-ivy-dmalmo-01" category="std" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="DMALMO">Data Model for Asset 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="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="2024" month="April" day="24"/>

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

    <abstract>


<t>This document includes a data model for assets lifecycle management and operations. The primary objective of the data model is to measure and improve the network operators' experience along the lifecycle journey, from technical requirements and technology selection through renewal, including the end of life of an asset.</t>

<t>This model is based on the information model introduced in "Asset Lifecycle Management and Operations: A Problem Statement" (ALMO) <xref target="I-D.draft-palmero-opsawg-ps-almo-00"/> IETF draft.</t>



    </abstract>



  </front>

  <middle>


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

<t>The dynamicity in "where", "how" and "who" uses an asset introduces challenges for both lifecycle and adoption management of the assets. These challenges and the motivation to fix the problems are shown with some examples in the companion draft "Asset Lifecycle Management and Operations: A Problem Statement" (ALMO) <xref target="I-D.draft-palmero-opsawg-ps-almo-00"/> IETF draft.
Taking inspiration from the use cases and the Information Model given in Section 5 of the companion draft, we attempt to standardize some of the associations (with the data attributes) between the entities in the Information model. 
The YANG data models specified in this draft are subject to modification and refinement subsequent to the IVY Working Group's ratification of a stable iteration of the core inventory data models.
Please note, the data model presented in the draft can be extended as per the expandability provided by the Information Model using the entity Future Expansion.</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>The document makes use of the following terms:</t>

<t><list style="symbols">
  <t>Asset: refers to hardware, software, applications, or services. An asset can be physical or virtual. The granularity of what constitutes an asset is deployment and implementation specific.</t>
  <t>Features: are options or functional capabilities offered by an asset.</t>
  <t>Entitlement: commonly implemented as license; it represents the rights obtained by the user, that allow them to access and utilize certain capabilities of the asset, including a feature or set of features.</t>
  <t>Lifecycle Management and Operations (LMO) connects to:
  <list style="numbers">
      <t>Assets as a generalized entity subject to Lifecycle Management (LCM).</t>
      <t>Entitlements as the essential policy root for LCM.</t>
      <t>Metrics as the evidence for LCM transitions.</t>
      <t>Reports (no incidents) as the way of collecting input from users.</t>
    </list></t>
  <t>Usage: refers to how an asset is being used (e.g., which features are used).</t>
</list></t>

<t>Abbreviations:</t>

<t><list style="symbols">
  <t>ALMO: Asset Lifecycle Management and Operations</t>
  <t>EoL: End of Life</t>
  <t>EoS: End of Support</t>
  <t>LCM: Lifecycle Management</t>
  <t>PID: Product Identifier</t>
</list></t>

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

<t>The motivation behind ALMO is to address the existing gap that network operators and business architects face in measuring and producing data related to various issues. This includes challenges such as unactivated entitlements, underutilized features, incident resolution, virtualized asset lifecycle events, DevOps deployment, and supply chain management.</t>

<t>By implementing ALMO, developer organizations can optimize their features by identifying and deprecating infrequently used features. They can also focus on widely deployed assets and improve usability and integration. ALMO provides a structured approach for users to provide feedback about an asset, enabling developers to assess the impact of potential deficiencies based on user feedback.</t>

<t>Overall, ALMO aims to bridge the gap in data measurement and production, helping operators and business architects improve asset management, optimize features, and gather valuable user feedback for continuous improvement.</t>

<t>DMALMO offers a common data model to implement ALMO data.</t>

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

<section anchor="overview"><name>Overview</name>

<t>Based on the ALMO IETF draft, assets can be characterized by their features, entitlements, and other attributes. Features represent the specific capabilities or functionalities of an asset. Entitlements, on the other hand, are related to asset usage and determine the level of access granted to users for utilizing the features. This implies that users have the necessary rights or licenses to use the asset and its associated features.</t>

<t>Entitlements can be complex to model as they vary in coverage and limitations. Some entitlements cover all features, while others target specific ones. For example, advanced or additional licenses may be required to access certain features like "MPLS-EVPN".</t>

<t>It is common in the industry to have tables that outline the entitlements and the features they cover, enabling users to understand their access based on entitlements. Some entitlements also impose restrictions on feature usage, such as limiting the number of users or CPUs.</t>

<t>The DMALMO model does not aim to provide a catalog of features and entitlements, but rather provides an inventory with focus on connecting features and entitlements to assets and tracking their usage. While it is possible to have multiple usage limits, the model may not support interrelating them. For instance, the statement "Entitlement covers up to N CPUs if you have more than X users, if not then M CPUs" may not be supported, but "Entitlement covers up to N CPUs and up to X users" is supported.</t>

<t>The usage aspect is particularly relevant in business use cases as it helps understand how to effectively utilize an asset. It provides insights into asset usage and highlights the importance of tracking it. While there may be other models addressing different aspects of an asset's lifecycle, the usage model serves a unique purpose by specifically focusing on practical utilization. Therefore, it is not redundant with other models and offers valuable insights into asset usage.</t>

<t>The different modules included in DMALMO are:</t>

<t><list style="symbols">
  <t>Aggregated Assets Module</t>
</list></t>

<t>In the context of ALMO, the Asset module represents specific entity, that can include various elements such as hardware, software, virtualized components, or even services. The assets module can be linked to specific network inventory and can also augment certain attributes that might be required for the implementation of a specific use case.</t>

<t><list style="symbols">
  <t>Entitlements Module</t>
</list></t>

<t>Entitlement module defines the level of access or permission granted to a user or entity to utilize specific features, functionalities, or resources associated with an asset. It represents the rights or licenses obtained by the user that allow them to access and utilize certain capabilities of the asset.</t>

<t><list style="symbols">
  <t>Features Module</t>
</list></t>

<t>Feature module includes various attributes and relationships that describe the characteristics, properties, and associations of the feature within a specific context. A well-defined feature enhances the asset's value, differentiates it from others, and meets the requirements and expectations of users.</t>

<t><list style="symbols">
  <t>Usage Module</t>
</list></t>

<t>The Usage model of a feature includes various elements that capture information about how the feature is utilized within the asset.</t>

<t>As part of the ALMO future extension modules, DMALMO considers:</t>

<t><list style="symbols">
  <t>Event Report Module</t>
  <t>Organization Module, and</t>
  <t>User Module</t>
</list></t>

<t>Where the Event Report module includes various components that capture information about specific events or incidents that occur within ALMO related entities. And the Organization and User Modules encompass various components to capture information about users and organizations and their relationship to assets, features and/or entitlements.</t>

</section>
<section anchor="tree-diagrams-of-almo-modules"><name>Tree Diagrams of ALMO Modules</name>

<section anchor="aggregated-assets-module"><name>Aggregated Assets Module</name>

<t>This specification uses <xref target="RFC9179"/>, <xref target="RFC9472"/>
    module: ietf-almo-assets</t>

<figure><artwork><![CDATA[
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo: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-module"><name>Entitlements Module</name>

<figure><artwork><![CDATA[
module: ietf-almo-entitlements

  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
    +--rw uid?                        string
    +--rw state?                      ietf-almo-common:entitlement-state-t
    +--rw renewal-profile
    |  +--rw activation-date?   yang:date-and-time
    |  +--rw expiration-date?   yang:date-and-time
    +--rw parent-entitlement
    |  +--rw almo-class?   -> /ietf-almo:almos/almo/almo-class
    |  +--rw id?           -> /ietf-almo:almos/almo[ietf-almo:almo-class=current()/../almo-class]/inst/id
    +--rw entitlement-attachements
       +--rw entity
       |  +--rw organizations
       |     +--rw organization* [almo-class id]
       |        +--rw almo-class    -> /ietf-almo:almos/almo/almo-class
       |        +--rw id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
       +--rw assets
          +--rw assets
             +--rw asset* [almo-class id]
                +--rw almo-class    -> /ietf-almo:almos/almo/almo-class
                +--rw id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst/ietf-almo-feature:features/ietf-almo-feature:feature:
    +--ro entitlements-info
       +--ro entities-entitlement-info* []
          +--ro entity-entitlement-info
          |  +--ro organizations
          |     +--ro organization* [almo-class id]
          |        +--ro almo-class    -> /ietf-almo:almos/almo/almo-class
          |        +--ro id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
          +--ro entitlements
          |  +--ro entitlement* [almo-class id]
          |     +--ro almo-class    -> /ietf-almo:almos/almo/almo-class
          |     +--ro id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
          +--ro entitled?                  boolean
          +--ro infriges?                  boolean
          +--ro in-use?                    boolean
          +--ro entitlement-limit
             +--ro users
             |  +--ro value?     uint32
             |  +--ro maximum?   uint32
             +--ro cpus
             |  +--ro value?     uint32
             |  +--ro maximum?   uint32
             +--ro bandwidth
                +--ro value?     decimal64
                +--ro maximum?   decimal64
]]></artwork></figure>

</section>
<section anchor="features-module"><name>Features Module</name>

<figure><artwork><![CDATA[
module: ietf-almo-feature

  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
    +--rw features
       +--rw feature* [almo-class id]
          +--rw almo-class    -> /ietf-almo:almos/almo/almo-class
          +--rw id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo: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 almo-class?   -> /ietf-almo:almos/almo/almo-class
    |  +--rw id?           -> /ietf-almo:almos/almo[ietf-almo:almo-class = current()/../almo-class]/inst/id
    +--rw subfeatures
       +--rw subfeature* [almo-class id]
          +--rw almo-class    -> /ietf-almo:almos/almo/almo-class
          +--rw id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
]]></artwork></figure>

</section>
<section anchor="usage-module"><name>Usage Module</name>

<figure><artwork><![CDATA[
module: ietf-almo-usage

  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
    +--rw feature
    |  +--rw almo-class?   -> /ietf-almo:almos/almo/almo-class
    |  +--rw id?           -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-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 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="event-report-module"><name>Event Report Module</name>
<figure><artwork><![CDATA[
module: ietf-almo-event-report

  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo: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 almo-class?   -> /ietf-almo:almos/almo/almo-class
    |  +--rw id?           -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
    +--rw feature
    |  +--rw almo-class?   -> /ietf-almo:almos/almo/almo-class
    |  +--rw id?           -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
    +--rw contract-number?    string
]]></artwork></figure>

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

  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
    +--rw address?      string
    +--rw department?   boolean
]]></artwork></figure>

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

  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
    +--rw billing-account?   uint32
    +--rw represents
    |  +--rw almo-class?   -> /ietf-almo:almos/almo/almo-class
    |  +--rw id?           -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
    +--rw authority?         enumeration
    +--rw email?             string
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst/ietf-almo-entitlements:entitlement-attachements/ietf-almo-entitlements:entity:
    +--rw users
       +--rw users* [almo-class id]
          +--rw almo-class    -> /ietf-almo:almos/almo/almo-class
          +--rw id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst/ietf-almo-feature:features/ietf-almo-feature:feature/ietf-almo-entitlements:entitlements-info/ietf-almo-entitlements:entities-entitlement-info/ietf-almo-entitlements:entity-entitlement-info:
    +--ro users
       +--ro users* [almo-class id]
          +--ro almo-class    -> /ietf-almo:almos/almo/almo-class
          +--ro id            -> /ietf-almo:almos/almo[ietf-almo:almo-class =  current()/../almo-class]/inst/id
]]></artwork></figure>

</section>
</section>
<section anchor="yang-data-models-of-almo-modules"><name>YANG data models of ALMO Modules</name>

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

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-almo-common@2023-10-23.yang"
module ietf-almo-common {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-almo-common";
  prefix ietf-almo-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-10-23 {
    description
      "Renamed all references from LMO to ALMO. Refer to 
      DMLMO draft";
    reference
      "RFC XXXX: ALMO 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 nfv { 
    base asset-type; 
    description
      "irtual assets, as a separate type to connect with NFV practice";
  }
  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. To be considered a few specific subtype 
      of assets related to: 3GPP, BBF, TMF, I2NSF (and security in 
      general), PCE, etc";
  }
  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, excluding 3GPP";
  }
  identity ran {
    base role;
    description
       "RAN links user equipment, such as a cellphone, computer or 
       any remotely controlled machine, over a fiber or wireless 
       backhaul connection. That link goes to the core network, which 
       manages subscriber information, location and more.";
  }
  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 metric-type {
    description
      "Specify the different type of metrics, i.e accumulated-count,
       average-count, last-count, high-water mark count, low-water
       mark count" ;
  }
  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 almo-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-almo@2023-10-23.yang"
module ietf-almo {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-almo";
  prefix ietf-almo;
  import ietf-almo-common {
    prefix ietf-almo-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 almo 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 2023-10-23 {
    description
      "Renamed all references from LMO to ALMO. Refer to 
      DMLMO draft";
    reference
      "RFC XXXX: ALMO YANG Model";
  }
  
  container almos {
    //config false; //temporarily commented out for easy testing
    description
      "Container that includes instances for all types of datasets
       which are part of DMLMO";
    list almo {
      key almo-class;
      description
        "list that includes the instances for all DMLMO datasets";
      leaf almo-class {
        type identityref {
          base ietf-almo-common:almo-class;
        }
        description
          "almo-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 almo-class {
            type leafref {
              path /almos/almo/almo-class;
            }
            description
              "almo-class that defines the parent type of instance";
          }
          leaf id {
            type leafref {
               path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class"
            + "=current()/../almo-class]/ietf-almo:inst/ietf-almo: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>
} ### Aggregated Asset Module

<CODE BEGINS> file "ietf-almo-assets@2023-10-23.yang"
module ietf-almo-assets {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-almo-assets";
  prefix ietf-almo-asset;
  import ietf-almo-common {
    prefix ietf-almo-common;
  }
  import ietf-almo {
    prefix ietf-almo;
  }
  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-10-23 {
    description
      "Renamed all references from LMO to ALMO. Refer to 
      DMLMO draft";
    reference
      "RFC XXXX: ALMO YANG Model";
  }

  identity asset {
    base ietf-almo-common:almo-class;
    description 
      "An asset is a class of almo that represents a 
      hardware, software, application, or service component.
      An asset can also be physical or virtual";
  }
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
    when "derived-from-or-self(../ietf-almo:almo-class,'ietf-almo-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-almo-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-almo-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-almo-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-almo-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-module-1"><name>Entitlements Module</name>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-almo-entitlements@2023-10-23.yang"
module ietf-almo-entitlements {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-almo-entitlements";
  prefix ietf-almo-entitlements;
  import ietf-yang-types {
    prefix yang;
  }
  import ietf-almo-common {
    prefix ietf-almo-common;
  }
  import ietf-almo {
    prefix ietf-almo;
  }
  import ietf-almo-assets {
    prefix ietf-almo-asset;
  }
  import ietf-almo-feature {
    prefix ietf-almo-feature;
  }
  import ietf-almo-organization {
    prefix ietf-almo-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:  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.

     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.
     ";

  revision 2023-10-23 {
    description
      "Renamed all references from LMO to ALMO. Refer to 
      DMLMO draft";
    reference
      "RFC XXXX: ALMO YANG Model";
  }

// Can we capture entitlement 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-almo-common:almo-class;
    description "A entitlement is a class of ALMO 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-almo:almos/ietf-almo:almo/ietf-almo:inst {
    when "derived-from-or-self(../ietf-almo:almo-class, "+
         " 'ietf-almo-entitlements:entitlement')";
    description
      "entitlements container includes attributes for entitlements";
    leaf uid {
      type string;
      description
        "Unique Entitlement Identifier";
    }

    leaf state {
      type ietf-almo-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";
      }
    }


    container parent-entitlement {
      // There is already a parent in the base model  but we have to force this  to 
      // be entilement.. can we do something else?
      description
        "identifies the hierarchy structure for a given instance";
      leaf almo-class {
        type leafref {
          path /ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class;
        }
          must "derived-from-or-self(current(), "+
             " 'ietf-almo-entitlements:entitlement')";
          description
          "almo-class that defines the parent type of instance";
      }
      leaf id {
        type leafref {
           path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class"
        + "=current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
        }
        description
          "identifies the parent type of instance";
      }
    }

    container entitlement-attachements {
      description 
         "An entilement entitles an entity to the use of a feature under an
         asset.";

      container entity {
        description "The entity to which the entilemets entitles. 
        There can be multiple. Empty entity attachments can occur for
        special licenses. This value  still SHOULD always be explicitly filed.
        It might be expanded to cover selection cases e.g. all users in
        a special country.";
        container organizations {
          description "Attachment to specifc organizations.";
          list organization {
            key "almo-class id";
            description
              "list of organizations";
            leaf almo-class {
              type leafref {
                path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
              }
              must "derived-from-or-self(current(), "+
                   " 'ietf-almo-organization:organization')";
              description
                "organization to which this entitlement is attached";
            }
            leaf id {
              type leafref {
                path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                     " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
              }
              description
                "organization to which this entitlement is attached";
            }
          }

        }

      }


        // We could expand this to more generic selections of users
        // or organizations, but not to save lines, but when the attachment
        // is loose per the license: "e.g. users in Asia"


      container assets {
        description "Descriptive set of assets to which the license is attached. Some licenses might not be attached to specific assets";

        container assets {
          description 
             "list of assets to which this license is attached";
          list asset {
            key "almo-class id";
            description
              "list of assets to which this license is attached";
            leaf almo-class {
              type leafref {
                path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
              }
              must "derived-from-or-self(current(), "+
                   " 'ietf-almo-asset:asset')";
              description
                "organization to which this entitlement is attached";
            }
            leaf id {
              type leafref {
                path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                     " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
              }
              description
                "organization to which this entitlement is attached";
            }
          }

        }

        // We could have other container with more descriptive set of assets
        // such as "all laptops in school Y (site license)"

      }
      }

    }

    


  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst/ietf-almo-feature:features/ietf-almo-feature:feature {
    when "derived-from-or-self(../../../ietf-almo:almo-class, "+
         " 'ietf-almo-asset:asset')";
    description "Augmenting features with entilement info.";

    container entitlements-info {
      config false;
      description
       "information over this feature under this asset";
      

        list entities-entitlement-info {
          description "include info for the entitlement";
          container entity-entitlement-info {
            description "Entities that uses the feature. It can be empty
            but each server should provide meaning to this. It could mean
            general use of the feature";
            container organizations {
              description "link  to  organizations.";
              list organization {
                key "almo-class id";
                description
                  "list of organizations";
                leaf almo-class {
                  type leafref {
                    path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
                  }
                  must "derived-from-or-self(current(), "+
                       " 'ietf-almo-organization:organization')";
                  description
                    "organization to which this entitlement is attached";
                }
                leaf id {
                  type leafref {
                    path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                         " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
                  }
                  description
                    "organization to which this feature and entitlement is related";
                }
              }

        }


          }


          container entitlements {
            description "List of entitlements that enable the use of this
            feature.";
            list entitlement {
              key "almo-class id";
              description
                "Subfeature ID";
              leaf almo-class {
                type leafref {
                  path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
                }
                must "derived-from-or-self(current(), "+
                " 'ietf-almo-entitlements:entitlement')";
                description
                  "Reference to almo-class"; 
              }
              leaf id {
                type leafref {
                   path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                        " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
                }
                description
                  "Reference to Feature ID";    
              }

            }

          }

          leaf entitled {
            type boolean;
            description "Means one or more entitles allows the use of this feature. 
            This does not deal with limits, just the general use of the feature
            The lack of this leaf means the server state is not determined";
          }

          leaf infriges {
            type boolean;
            description "Whether the feature use is infriging its entilement level.
            It means the feature is in use iwthout an entitlement, or going over a level.";
          }

          leaf in-use {
            type boolean;
            description "Whther the level of usage of the feature will leave it 
            to infrigement if the entilement in entitlements is removed";
          }


          container entitlement-limit {
            // TODO: this was failing even without the entitled.
            //must "../entitled = 'true'" {
            //  error-message "entiltlement-limit can only exist if entitled is set to true";
            //}
            description "Limits of the entilement";
            // Check with Jan if it is better to use the usage class, but thsi one is specific 
            // for licenses.
            // This container should be expanded if needed by augmentation
            // This could also be a grouping with the usage, but then the meanings
            // could change..
            // And one cannot really augment groupins, so yeah..
            // Pending: Will the meaning of this containers mean anything? 
            // Maybe the container without the value as None?
            container users {
              description "Number of users";
              leaf value {
                type uint32;
                units "users";
                description "Limit in number of users";
              }
              leaf maximum {
                type uint32;
                units "users";
                description 
                "Maximum number of users allowed by the current entilement.
                Lack of this container means there is no user limit";
              }
            }
            container cpus {
              description "Number of cpus";
              leaf value {
                type uint32;
                units "cpus";
                description "Limit in number of cpus. Some vendors have their own
                meaning of cpus in the commercial sense. This could mean that too.";
              }

              leaf maximum {
                type uint32;
                units "cpus";
                description 
                "Maximum number of cpus allowed by the current entilement.
                Lack of this container means there is no cpu limit on the entitlement level";
              }
            }

            container bandwidth {
              description "Limit in bandwidth";
              leaf value {
                type decimal64 {
                fraction-digits 6;
                }
                units "Mbps";
                description "Limit in the bandwidth of a service.";
              }
              leaf maximum {
                type decimal64 {
                fraction-digits 6;
                }
                units "Mbps";
                description 
                "Maximum amount of bandwidth of the server by license restriction.";
              }
            }

            // do an expansion of egress and ingress queues as an example

          }
      }

      }
    
  }  
<CODE ENDS>
}
]]></artwork></figure>

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

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-almo-feature@2023-10-23.yang"
module ietf-almo-feature {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-almo-feature";
  prefix ietf-almo-feature;
  import ietf-almo-common {
    prefix ietf-almo-common;
  }
  import ietf-almo {
    prefix ietf-almo;
  }
  import ietf-almo-assets {
    prefix ietf-almo-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 2023-10-23 {
    description
      "Renamed all references from LMO to ALMO. Refer to 
      DMLMO draft";
    reference
      "RFC XXXX: ALMO YANG Model";
  }

  identity feature {
    base ietf-almo-common:almo-class;
    description 
      "A feature is a class of almo that represents 
       options or functional capabilities available in an asset";
  }


  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
    when "derived-from-or-self(../ietf-almo:almo-class, 'ietf-almo-asset:asset')";
    description
      "feature attributes related to assets";

    container features {
      description
        "Features supported by an asset";
      list feature {
        key "almo-class id";
        description
          "Subfeature ID";
        leaf almo-class {
          type leafref {
            path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
          }
          must "derived-from-or-self(current(), "+
          " 'ietf-almo-feature:feature')";
          description
            "Reference to almo-class"; 
        }
        leaf id {
          type leafref {
             path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                  " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
          }
          description
            "Reference to Feature ID";    
        }

        }


      }
    //Fill more leafs for license when organization 
    //module is present here...
  }  


  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
    when "derived-from-or-self(../ietf-almo:almo-class, "+
         " 'ietf-almo-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-almo-common:version;
          }
          description
            "version of the backport release";
        }
      }
    }
    leaf scope {
      type identityref {
        base ietf-almo-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 almo-class {
        type leafref {
          path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
        }
        must "derived-from-or-self(current(), "+
             " 'ietf-almo-asset:asset')";
        default ietf-almo-asset:asset;
        description
          "Asset class to which this feature is attached";
      }    
      leaf id {
        type leafref {
          path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
              "current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
        }
        description
          "Asset to which this feature is attached";
      }  
    }
    container subfeatures {
      description
        "Sub-features to the top-level feature";
      list subfeature {
        key "almo-class id";
        description
          "Subfeature ID";
        leaf almo-class {
          type leafref {
            path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
          }
          must "derived-from-or-self(current(), "+
               " 'ietf-almo-feature:feature')";
          description
            "almo-class reference";
        }
        leaf id {
          type leafref {
            path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                 " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
          }
          description
            "Reference to Feature ID";
        }
      }
    }
  }
<CODE ENDS>
}
]]></artwork></figure>

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

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-almo-usage@2023-10-23.yang"
module ietf-almo-usage {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-almo-usage";
  prefix ietf-almo-usage;
  import ietf-almo-common {
    prefix ietf-almo-common;
  }
  import ietf-almo {
    prefix ietf-almo;
  }
  import ietf-yang-types {
    prefix yang;
  }
  import ietf-almo-feature {
    prefix ietf-almo-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 2023-10-23 {
    description
      "Renamed all references from LMO to ALMO. Refer to 
      initial DMLMO draft";
    reference
      "RFC XXXX: ALMO YANG Model";
  }

  identity usage {
    base ietf-almo-common:almo-class;
    description "A usage is a class of almo that represents how 
    features of an asset are used";
  }
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
    when "derived-from-or-self(../ietf-almo:almo-class, "+
         " 'ietf-almo-usage:usage')";
    description
      "usage attributes";
    container feature {
      leaf almo-class {
        type leafref {
          path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
        }
        must "derived-from-or-self(current(), "+
             " 'ietf-almo-feature:feature')";
        default ietf-almo-feature:feature;
        description
          "feature to which this license is attached";
      }
      leaf id {
        type leafref {
           path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                " current()/../almo-class]/ietf-almo:inst/ietf-almo: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-almo-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-almo-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 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="event-report-module-1"><name>Event Report Module</name>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-almo-event-report@2023-10-23.yang"
module ietf-almo-event-report {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-almo-event-report";
  prefix ietf-almo-event;

  import ietf-almo-common {
    prefix ietf-almo-common;
  }
  import ietf-almo {
    prefix ietf-almo;
  }
  import ietf-yang-types {
    prefix yang;
  }
  import ietf-almo-assets {
    prefix ietf-almo-asset;
  }
  import ietf-almo-feature {
    prefix ietf-almo-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 event reports.

     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-10-23 {
    description
      "Renamed all references from LMO to ALMO. Refer to 
       DMLMO draft";
    reference
      "RFC XXXX: ALMO YANG Model";
  }
  
  identity event {
    base ietf-almo-common:almo-class;
    description 
    "An event is a class of ALMO that represents an event 
    that is not part of normal operations that disrupts 
    operational processes.";
  }
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
    when "derived-from-or-self(../ietf-almo:almo-class, "+
         " 'ietf-almo-event:event')";
    description
      "event container includes attributes for event reports";

    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 almo-class
    } 
    leaf support-engineer{
      type string;
      description 
      "Customer Support Engineer in charge of the case";
    // NEED to refer to user almo-class
    } 
    container asset {
      description
          "Asset container to which this event is attached";
      leaf almo-class {
        type leafref {
          path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
        }
        must "derived-from-or-self(current(), "+
             " 'ietf-almo-asset:asset')";
        default ietf-almo-asset:asset;
        description
          "Asset class to which this event is attached";
      }    
      leaf id {
        type leafref {
           path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
        }
        description
          "Asset to which this event is attached";
      }
    }
    container feature {
      description
          "Feature to which this event is attached";
      leaf almo-class {
        type leafref {
          path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
        }
        must "derived-from-or-self(current(), "+
             " 'ietf-almo-feature:feature')";
        default ietf-almo-feature:feature;
        description
          "Feature class to which this event is attached";
      }    
      leaf id {
        type leafref {
          path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
               " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
        }
        description
          "Feature to which this event 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>
} ### Organization Module

<CODE BEGINS> file "ietf-almo-organization@2023-10-23.yang"
module ietf-almo-organization {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-almo-organization";
  prefix ietf-almo-organization;
  import ietf-almo-common {
    prefix ietf-almo-common;
  }
  import ietf-almo {
    prefix ietf-almo;
  }
  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 2023-10-23 {
    description
      "Renamed all references from LMO to ALMO. Refer to 
      DMLMO draft";
    reference
      "RFC XXXX: ALMO YANG Model";
  }

  identity organization {
    base ietf-almo-common:almo-class;
    description 
    "An organization is a class of almo 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-almo:almos/ietf-almo:almo/ietf-almo:inst {
    when "derived-from-or-self(../ietf-almo:almo-class, "+
         " 'ietf-almo-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...
  }
<CODE ENDS>
}
]]></artwork></figure>

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

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-almo-user@2023-10-23.yang"
module ietf-almo-user {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-almo-user";
  prefix ietf-almo-user;
  import ietf-almo-common {
    prefix ietf-almo-common;
  }
  import ietf-almo {
    prefix ietf-almo;
  }
  import ietf-almo-entitlements {
    prefix ietf-almo-entitlements;
  }
  import ietf-almo-organization {
    prefix ietf-almo-organization;
  }
  import ietf-almo-feature {
    prefix ietf-almo-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 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 2023-10-23 {
    description
      "Renamed all references from LMO to ALMO. Refer to 
      DMLMO draft";
    reference
      "RFC XXXX: ALMO YANG Model";
  }

  identity user {
    base ietf-almo-common:almo-class;
    description 
    "A user is a class of almo 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-almo:almos/ietf-almo:almo/ietf-almo:inst {
    when "derived-from-or-self(../ietf-almo:almo-class, "+
         " 'ietf-almo-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 almo-class {
        type leafref {
          path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
        }
        must "derived-from-or-self(current(), "+
             " 'ietf-almo-organization:organization')";
        description
          "Organization class to which this user is attached";
      }
      leaf id {
        type leafref {
          path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
               " current()/../almo-class]/ietf-almo:inst/ietf-almo: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-almo:almos/ietf-almo:almo/ietf-almo:inst/ietf-almo-entitlements:entitlement-attachements/ietf-almo-entitlements:entity {
    when "derived-from-or-self(../../../ietf-almo:almo-class, "+
         " 'ietf-almo-entitlements:entitlement')";
    description
      "entitlement attributes related to user";

    container users {
      description "Users to which the entilement is attached";
      list users {
        key "almo-class id";
        description
          "list of users";
        leaf almo-class {
          type leafref {
            path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
          }
          must "derived-from-or-self(current(), "+
               " 'users')";
          description
            "users to which this entitlement is attached";
        }
        leaf id {
          type leafref {
            path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                 " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
          }
          description
            "users to which this entitlement is attached";
        }
      }

    }
  }

  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst/ietf-almo-feature:features/ietf-almo-feature:feature/ietf-almo-entitlements:entitlements-info/ietf-almo-entitlements:entities-entitlement-info/ietf-almo-entitlements:entity-entitlement-info {
    when "derived-from-or-self(../../../../../../ietf-almo:almo-class, "+
         " 'ietf-almo-entitlements:entitlement')";
    description
      "entitlement attributes related to user";

    container users {
      description "Users to which the entilement is attached";
      list users {
        key "almo-class id";
        description
          "list of users";
        leaf almo-class {
          type leafref {
            path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
          }
          must "derived-from-or-self(current(), "+
               " 'users')";
          description
            "users to which this entitlement is attached";
        }
        leaf id {
          type leafref {
            path "/ietf-almo:almos/ietf-almo:almo[ietf-almo:almo-class = "+
                 " current()/../almo-class]/ietf-almo:inst/ietf-almo:id";
          }
          description
            "users to which this entitlement is attached";
        }
      }

    }
  }

<CODE ENDS>
}
]]></artwork></figure>

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

<t>ALMO Data Models defines the data schemas for ALMO data. ALMO 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 ALMO 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 ALMO models.</t>
  <t>The process to share and collect ALMO data across the consumers consistently, including the transport mechanism. The ALMO 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 ALMO 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. ALMO 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 ALMO data.</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-almo <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-almo-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-almo-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-almo-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-almo-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-almo-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-almo-event-report <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-almo-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-almo-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-almo <br />
namespace: urn:ietf:params:xml:ns:yang:ietf-almo <br />
maintained by IANA: N <br />
prefix: ietf-almo <br />
reference: RFC XXXX <br /></t>

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

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

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

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

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

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

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

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

</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor='RFC2119'>
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname='S. Bradner' initials='S.' surname='Bradner'/>
    <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'>
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname='B. Leiba' initials='B.' surname='Leiba'/>
    <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='I-D.draft-palmero-opsawg-ps-almo-00'>
   <front>
      <title>Asset Lifecycle Management and Operations, Problem Statement</title>
      <author fullname='Marisol Palmero' initials='M.' surname='Palmero'>
         <organization>Cisco Systems</organization>
      </author>
      <author fullname='Frank Brockners' initials='F.' surname='Brockners'>
         <organization>Cisco Systems</organization>
      </author>
      <author fullname='Sudhendu Kumar' initials='S.' surname='Kumar'>
         <organization>NC State University</organization>
      </author>
      <author fullname='Camilo Cardona' initials='C.' surname='Cardona'>
         <organization>NTT</organization>
      </author>
      <author fullname='Diego Lopez' initials='D.' surname='Lopez'>
         <organization>Telefonica I+D</organization>
      </author>
      <date day='29' month='June' year='2023'/>
      <abstract>
	 <t>   This document presents a problem statement for assets lifecycle
   management and operations.  It describes the framework, the
   motivation and requirements for asset-centric metrics including but
   not limited to asset adoption, usability, entitlements, supported
   features and capabilities, enabled features and capabilities.  An
   information model is proposed whose primary objective is to measure
   and improve the network operators&#x27; experience along the lifecycle
   journey, from technical requirements and technology selection through
   renewal, including the end of life of an asset.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-palmero-opsawg-ps-almo-00'/>
   
</reference>

<reference anchor='RFC9179'>
  <front>
    <title>A YANG Grouping for Geographic Locations</title>
    <author fullname='C. Hopps' initials='C.' surname='Hopps'/>
    <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='RFC9472'>
  <front>
    <title>A YANG Data Model for Reporting Software Bills of Materials (SBOMs) and Vulnerability Information</title>
    <author fullname='E. Lear' initials='E.' surname='Lear'/>
    <author fullname='S. Rose' initials='S.' surname='Rose'/>
    <date month='October' year='2023'/>
    <abstract>
      <t>To improve cybersecurity posture, automation is necessary to locate the software a device is using, whether that software has known vulnerabilities, and what, if any, recommendations suppliers may have. This memo extends the Manufacturer User Description (MUD) YANG schema to provide the locations of software bills of materials (SBOMs) and vulnerability information by introducing a transparency schema.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='9472'/>
  <seriesInfo name='DOI' value='10.17487/RFC9472'/>
</reference>

<reference anchor='RFC6241'>
  <front>
    <title>Network Configuration Protocol (NETCONF)</title>
    <author fullname='R. Enns' initials='R.' role='editor' surname='Enns'/>
    <author fullname='M. Bjorklund' initials='M.' role='editor' surname='Bjorklund'/>
    <author fullname='J. Schoenwaelder' initials='J.' role='editor' surname='Schoenwaelder'/>
    <author fullname='A. Bierman' initials='A.' role='editor' surname='Bierman'/>
    <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'>
  <front>
    <title>RESTCONF Protocol</title>
    <author fullname='A. Bierman' initials='A.' surname='Bierman'/>
    <author fullname='M. Bjorklund' initials='M.' surname='Bjorklund'/>
    <author fullname='K. Watsen' initials='K.' surname='Watsen'/>
    <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='RFC7950'>
  <front>
    <title>The YANG 1.1 Data Modeling Language</title>
    <author fullname='M. Bjorklund' initials='M.' role='editor' surname='Bjorklund'/>
    <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='RFC3688'>
  <front>
    <title>The IETF XML Registry</title>
    <author fullname='M. Mealling' initials='M.' surname='Mealling'/>
    <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'>
  <front>
    <title>A YANG Data Model for Network Topologies</title>
    <author fullname='A. Clemm' initials='A.' surname='Clemm'/>
    <author fullname='J. Medved' initials='J.' surname='Medved'/>
    <author fullname='R. Varga' initials='R.' surname='Varga'/>
    <author fullname='N. Bahadur' initials='N.' surname='Bahadur'/>
    <author fullname='H. Ananthakrishnan' initials='H.' surname='Ananthakrishnan'/>
    <author fullname='X. Liu' initials='X.' surname='Liu'/>
    <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 01</t>

<t><list style="symbols">
  <t>DMALMO data models will be adjusted once the terminology of the core IVY WG data models is agreed.</t>
</list></t>

<t>version 00</t>

<t><list style="symbols">
  <t>Initial version of DMALMO, based on ALMO version 01 and DMLMO version 10.</t>
</list></t>

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

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

<t>The authors wish to thank Gonzalo Salgueiro, Martin Beverley, Mohamed Boucadair, 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 ALMO and DMALMO, 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 DMALMO compatible to any future changes that will come as part of the current inventory discussions and decisions.</t>

<t>DMLMO version -09 provided the approach to make DMALMO independent from the network inventory discussions, providing a way to consume any inventory management module(s). Version -09 contains changes to accommodate ietf-almo-assets, 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-almo-example-mapping-ietf-network-inventory and ietf-almo-example-mapping-openconfig-platform make the import of the inventory module(s) and augment the ietf-almo-assets YANG module to include inventory attributes to the asset identity.</t>

<t>For this practice, ietf-almo-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-almo-example-mapping-ietf-network-inventory, makes the mapping between ietf-network-inventory and ietf-almo-assets, augmenting asset identity:</t>

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

  import ietf-almo {
    prefix ietf-almo;
  }
  import ietf-almo-assets {
    prefix ietf-almo-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:  Jan Lindblad
              <mailto:jlindbla@cisco.com>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>";

  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 2023-10-23 {
    description
      "Renamed all references from LMO to ALMO. Refer to 
      DMLMO draft";
    reference
      "RFC XXXX: ALMO YANG Model";
  }


  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
    when "derived-from-or-self(../ietf-almo:almo-class,'ietf-almo-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-almo-example-mapping-openconfig-platform, includes the mapping between openconfig-platform and ietf-almo-assets, augmenting asset identity:</t>

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

  import ietf-almo {
    prefix ietf-almo;
  }
  import ietf-almo-assets {
    prefix ietf-almo-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:  Jan Lindblad
              <mailto:jlindbla@cisco.com>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>";
  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-10-23 {
    description
      "Renamed all references from LMO to ALMO. Refer to 
      DMLMO draft";
    reference
      "RFC XXXX: ALMO YANG Model";
  }

  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
    when "derived-from-or-self(../ietf-almo:almo-class,'ietf-almo-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-almo-asset:deployment-mode  ietf-almo-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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
8vPg8P79db5hVWi53+3C8wJDzblE1JOLyzqhc9T42dPTKw4IflPFmPcOLu8X
VW4g3lY4uVlJPY5cf8918trj2tdGoL/xDETQ00tWcxz8rd73441i/w+QJJ5E
yWQUh/Xkx0QyOvA85jbdoed3Cok3WOkXfB5OVNnSWL6OlIoCrIDfaEkmRE/d
CgSuEUaFtUZkv+dXXqRpdbg+RZh/ijDHzx8iwvyjCC03WK+USErGYq3k4IB1
WDEN41x+A//WIVFRzN6ckkpDIp0jzmSYAx+QeWHnumq1ZOpZWYvSUTYmP6Zx
fuCrAvYbuXG9mgTbC1Dq11RBqLKQhIKIcK5P/LyStixgizlt4tIuDeQCy4Wf
6wCrzVLQOjJULMOpXwbBDwnDVp7R2s9KeG9Ul/GvwxXYOsVACyCOOVTCoNY1
9RJ3v7GPqjM+IQfb1WBGPEeTb/pCYpclNW+M1fROc8JlVI/BbwnOWDczShT6
EnH3dbcLqdXZ4aI5DWA6Z4zcGecRyDHZeI5RnVlJcVwqGo4fj1sgWkdVBifY
zEdV+FmGcDsceHM61Wer42DdMl0CU1VQq21WiGvSWm2g+qRt299jsbza3TW5
wbwJqXYbw/1Z7HaUI2pJL3YUTRoLvAVeawR0O1S2UbQq2En3dAONoLtdpNcY
GGG3UrYBPTFXFh44MpnuTUYDQJcyDNMrjPKoi1fs3EAhJ7IuGUNfLk2bSCOO
FfQvfFIYbnL+TjwlSflhB6QMBMt/0gxkQSPZCH4I/c3sq83tXrO5LzDyNSxM
fKiCSdyEeQVCv2NSQUyoa4HZzzPXwmn4ZkbIS0G4jhKKgafN0UKcF5/tlNiM
D2tTt30lXDfI68bWq5553ZTj6LYV8aBmQmto1fT7W9XKaxJSm0VgGwq93deu
69oyvd3k38c28CnDnSNlw46M5VK/x1oljF0jg3HYrfwPlW9ByKW/seEnK8Mn
K8MnK8M7TWDnRj7WnYd6abRtsZHH+jWWgqtYydDGRY5TMGmq/WHKdpi39VY9
sL0EjeOjLV+amTFlRxjnFIpiwrSht3r2bxhebpec2MIaeZyAspyBXsgyXZBm
AZLXPiggPr1lsFcTJo7o/63Xy27/n9xSDAxjNk5USq3TZuHQSGP2/XAdyRtr
NpDjn8sF6RCc92BAYtPABmMgluiODbsQhbFK+45eURPLDwrGWYTjQOVbB+a3
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

-->

</rfc>

