<?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-00" 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="2023" month="October" day="23"/>

    <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.
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: Entitlement is the right to something. Entitlement with regards to a license is the right to use a licensed asset in accordance to the terms of the licence agreement. This could include the right to install or remove the asset, to access certain features or functionality and to use the asset for certain purposes.</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 (all-1-asset)?
    |  +--:(all-assets)
    |  |  +--rw all-assets?   boolean
    |  +--:(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
    +--rw resource* [id]
    |  +--rw id                string
    |  +--rw name?             string
    |  +--rw summary?          string
    |  +--rw characteristic* [id]
    |     +--rw id             string
    |     +--rw name?          string
    |     +--rw description?   string
    |     +--rw unit?          string
    |     +--rw value?         yang:counter64
    |     +--rw value-max?     yang:counter64
    +--rw features
    |  +--rw feature* [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 state?              ietf-almo-common:entitlement-state-t
    +--rw renewal-profile
       +--rw activation-date?   yang:date-and-time
       +--rw expiration-date?   yang:date-and-time
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
    +--rw entitlements
       +--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="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 count-type?             identityref
    +--rw timestamp?              yang:date-and-time
    +--rw count?                  uint32
    +--rw frequency* [name]
    |  +--rw name         string
    |  +--rw type-freq?   string
    |  +--rw value?       yang:counter64
    +--rw resource-consumption* [id]
       +--rw id                string
       +--rw name?             string
       +--rw summary?          string
       +--rw characteristic* [id]
          +--rw id           string
          +--rw name?        string
          +--rw unit?        string
          +--rw value?       yang:counter64
          +--rw value-max?   yang:counter64
]]></artwork></figure>

</section>
<section anchor="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
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst:
    +--rw organization
       +--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="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:
    +--rw user
       +--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>
<section anchor="yang-data-models-of-almo-modules"><name>YANG data models of ALMO Modules</name>

<section anchor="almo-common-module"><name>ALMO 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 IVY(Network Inventory YANG) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/ivy/about>
     WG List:  <mailto:inventory-yang@ietf.org>
     Editor:  Jan Lindblad
              <mailto:jlindbla@cisco.com>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>";

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

  identity almo-class {
    description "Base identity for classes of LMOs";
  }
<CODE ENDS>
} ### ALMO Module

<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 IVY(Network Inventory YANG) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/ivy/about>
     WG List:  <mailto:inventory-yang@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 IVY(Network Inventory YANG) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/ivy/about>
     WG List:  <mailto:inventory-yang@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;
  }
  organization
    "IETF IVY(Network Inventory YANG) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/ivy/about>
     WG List:  <mailto:inventory-yang@ietf.org>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>
     Editor:  Josh Suhr
              <mailto:josuhr@cisco.com>
     Editor:  Sudhendu Kumar
              <mailto:skumar23@ncsu.edu>";
  description
    "This YANG module includes the entitlement attributes of a
     product.

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

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

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

  revision 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";
    }
    choice all-1-asset{
      description
        "Considering entitlement is linked to all or explicitely a 
        one/few assets";
      leaf all-assets {
        type boolean;
        default false;
        description
          "Entitlement apply to all assets; e.g., false (default) or 
          true";
      }
      container assets {
        description
          "Assets to which this entitlement are attached";
        list asset {
          key "almo-class id";
          description
            "list of assests";
          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
              "Asset class 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
              "Asset to which this entitlement is attached";
          }
        }  
      }
     } 
    list resource {
      key "id";
      description
        "Resource profile";
      leaf id {
        type string;
        description
          "Identify resource for entitlement consumption metric";
      }
      leaf name {
        type string;
        description
          "Friendly name of the resource";
      }
      leaf summary {
        type string;
        description
          "Brief description of the resource";
      }
      list characteristic {
        key "id";
        description
          "Characteristic of resource consumption, i.e., 
          number of cpu's, limit BW.";
        leaf id {
          type string;
          description
            "Identifier for resource consumption characteristic";
        }
        leaf name {
          type string;
          description
            "Friendly name for resource consumption 
            characteristic";
        }
        leaf description {
          type string;
          description
            "Description for resource consumption 
            characteristic";
        }
        leaf unit {
          type string;
          description
            "unit of measurement for the characteristic";
        }

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

        leaf value {
          type yang:counter64;
          description
            "Resource consumption characteristic measurement";
        }
        leaf value-max {
          type yang:counter64;
          description
            "Maximum resource consumption characteristic value";
        }
      }
    }
    container features {
      description
        "Features to which this entitlement are attached";
      list feature {
        key "almo-class id";
        description
          "list of features";
        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
            "feature 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
            "Feature to which this entitlement is attached";
        }
      } 
    }
    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";
      }
    }
  }
  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 attributes related to entitlements";
  
    container entitlements {
      description
        "entitlement attributes";
      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
          "Asset class 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
          "Asset to which this entitlement is attached";
      }
    }
    
    //Fill more leafs for entitlement if required...
  }  
<CODE ENDS>
} ### Features Module

<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 IVY(Network Inventory YANG) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/ivy/about>
     WG List:  <mailto:inventory-yang@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 to be part of 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>
} ### Usage Module

<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 IVY(Network Inventory YANG) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/ivy/about>
     WG List:  <mailto:inventory-yang@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 count-type {
      type identityref {
        base ietf-almo-common:metric-type;
      }
      description
        "Specify the counter type i.e accumulated-count,
          average-count, last-count, high-water mark count
          (+time stamp), low-water mark count (+time stamp)";
    }
    leaf timestamp {
      type yang:date-and-time;
      description  
        "Some counters will benefit from timestamp based on the 
        time when the counter has been collected";
    }
    leaf count {
      type uint32;
      units "times";
      description
        "Count of times the feature has been used";
    }
    list frequency {
      key "name";
      description
        "Frequency with which the feature is used";
      leaf name {
        type string {
          length "1..64";
        }
        description
          "reference in case that feature is for different 
          purpose of usage";
      }
      leaf type-freq {
        type string;
        description
          "Frequency type, i.e daily, weekly, monthly";
      }
      leaf value {
        type yang:counter64;
        description
          "Value collected for the usage";
      }
    }
    list resource-consumption {
      key "id";
      description
        "Resource consumption profile";
      leaf id {
        type string;
        description
          "Identify resource for consumption measurement";
      }
      leaf name {
        type string;
        description
          "Friendly name of the resource";
      }
      leaf summary {
        type string;
        description
          "Brief description of the resource";
      }
      list characteristic {
        key "id";
        description
          "Characteristic of resource consumption";
        leaf id {
          type string;
          description
            "Identifier for resource consumption characteristic";
        }
        leaf name {
          type string;
          description
            "Friendly name for resource consumption 
            characteristic";
        }

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

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

        leaf value {
          type yang:counter64;
          description
            "Resource consumption characteristic measurement";
        }
        leaf value-max {
          type yang:counter64;
          description
            "Maximum resource consumption characteristic value";
        }
      }
    }
  }
<CODE ENDS>
} ### Event Report Module

<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 IVY(Network Inventory YANG) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/ivy/about>
     WG List:  <mailto:inventory-yang@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;
  }
  import ietf-almo-entitlements {
    prefix ietf-almo-entitlements;
  }
  organization
    "IETF IVY(Network Inventory YANG) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/ivy/about>
     WG List:  <mailto:inventory-yang@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...
  }
  augment /ietf-almo:almos/ietf-almo:almo/ietf-almo:inst {
    when "derived-from-or-self(../ietf-almo:almo-class, "+
         " 'ietf-almo-entitlements:entitlement')";
    description
      "entitlement attributes related to organization";
  
    container organization {
      //NEED to determine how the model will consume 
      //organization/service/user
      //Leaving it here for the moment
      description
        "Organization container";
      leaf 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 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";
      }
    }
    //License module can be extended here when organization is 
    //present...
  }   
<CODE ENDS>
} ### User Module

<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;
  }
  organization
    "IETF IVY(Network Inventory YANG) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/ivy/about>
     WG List:  <mailto:inventory-yang@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 {
    when "derived-from-or-self(../ietf-almo:almo-class, "+
         " 'ietf-almo-entitlements:entitlement')";
    description
      "entitlement attributes related to user";

    container user {
      //NEED to determine how the model will consume 
      //organization/service/user. Leaving it here for the moment
      description 
      "user container";
      leaf almo-class {
        type leafref {
          path "/ietf-almo:almos/ietf-almo:almo/ietf-almo:almo-class";
        }
        must "derived-from-or-self(current(), "+
             " 'ietf-almo-user:user')";
        description
          "User class 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
          "User 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 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>Jan Lindblad has provided invaluable insights, experience and validation of the design.</t>

<t>This document was created by meaningful contributions from Josh Suhr, Eric Vyncke, Yannis Viniotis, Nagendra Kumar Nainar, Yenu Gobena, and Dhiren Tailor.</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-common {
    prefix ietf-almo-common;
  }
  import ietf-almo {
    prefix ietf-almo;
  }
  import ietf-almo-assets {
    prefix ietf-almo-asset;
  }
  import ietf-network-inventory {
    prefix ni;
  }
  organization
    "IETF IVY(Network Inventory YANG) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/ivy/about>
     WG List:  <mailto:inventory-yang@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>
} Module ietf-almo-example-mapping-openconfig-platform, includes the mapping between openconfig-platform and ietf-almo-assets, augmenting asset identity:

<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 IVY(Network Inventory YANG) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/ivy/about>
     WG List:  <mailto:inventory-yang@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>
} openconfig-platform.yang is not included in the section for simplicity of the output. 
]]></artwork></figure>

<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>almo0(config)#almos almo 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 DMALMO, 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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
/g+NR3RrVgQCAA==

-->

</rfc>

