... specified by O-RAN Working Group 4 - Open Fronthaul

YANG: https://gerrit.o-ran-sc.org/r/gitweb?p=scp/oam/modeling.git;a=blob;f=data-model/yang/published/o-ran/ru-fh/o-ran-software-management@2019-07-03.yang;h=e9f344856950cdbcd289d9c362fe9593085e7ea8;hb=refs/heads/master

UML:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' Copyright 2020 highstreet technologies GmbH
' Licensed under the Apache License, Version 2.0 (the "License"); 
' you may not use this file except in compliance with the License. 
' You may obtain a copy of the License at 
' 
' http://www.apache.org/licenses/LICENSE-2.0 
' 
' Unless required by applicable law or agreed to in writing, software 
' distributed under the License is distributed on an "AS IS" BASIS, 
' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
' See the License for the specific language governing permissions and 
' limitations under the License. 
'

@startuml

' Diagram 
title 
  Software Inventory
end title

hide empty fields 
hide empty methods 
hide <<case>> circle
hide <<augment>> circle
hide <<choice>> circle
hide <<leafref>> stereotype
hide <<leafref>> circle

package "inet:ietf-inet-types" as inet_ietf_inet_types { 
} 
package "hw:ietf-hardware" as hw_ietf_hardware { 
} 
package "o-ran-hw:o-ran-hardware" as o_ran_hw_o_ran_hardware { 
} 
package "o-ran-fm:o-ran-file-management" as o_ran_fm_o_ran_file_management { 
} 
note top of o_ran_swm_o_ran_software_management : <b>Namespace: </b> urn:o-ran:software-management:1.0 \n<b>Prefix: </b> o-ran-swm \n<b>Organization : </b>\nO-RAN Alliance \n<b>Contact : </b>\nwww.o-ran.org \n<b>Revision : </b> 2019-07-03 \n
package "o-ran-swm:o-ran-software-management" as o_ran_swm_o_ran_software_management { 
inet_ietf_inet_types +-- o_ran_swm_o_ran_software_management
hw_ietf_hardware +-- o_ran_swm_o_ran_software_management
o_ran_hw_o_ran_hardware +-- o_ran_swm_o_ran_software_management
o_ran_fm_o_ran_file_management +-- o_ran_swm_o_ran_software_management
class "o-ran-software-management" as o_ran_software_management << (M, #33CCFF) module>> 
class "slot-group" as o_ran_software_management_I_slot_group_grouping <<(G,Lime) grouping>> 
class "software-slot" as o_ran_software_management_I_slot_group_I_software_slot << (L, #FF7700) list>> 
o_ran_software_management_I_slot_group_grouping *-- "2..N" o_ran_software_management_I_slot_group_I_software_slot 
o_ran_software_management_I_slot_group_I_software_slot : +name : string  {key} 
o_ran_software_management_I_slot_group_I_software_slot : status : enumeration : {VALID,INVALID,EMPTY,}   {mandatory} {Config : false}
o_ran_software_management_I_slot_group_I_software_slot : active : boolean   {Config : false}
note bottom of o_ran_software_management_I_slot_group_I_software_slot
<b>Must</b> (active):
../status = 'VALID'

end note 
o_ran_software_management_I_slot_group_I_software_slot : running : boolean   {Config : false}
note bottom of o_ran_software_management_I_slot_group_I_software_slot
<b>Must</b> (running):
../status = 'VALID'

end note 
o_ran_software_management_I_slot_group_I_software_slot : access : enumeration : {READ_ONLY,READ_WRITE,}   = READ_WRITE  {Config : false}
o_ran_software_management_I_slot_group_I_software_slot : product-code : leafref : /hw:hardware/hw:component/o-ran-hw:product-code   {Config : false}
o_ran_software_management_I_slot_group_I_software_slot : vendor-code : string {length = 1..2}   {Config : false}
o_ran_software_management_I_slot_group_I_software_slot : build-id : string   {Config : false}
o_ran_software_management_I_slot_group_I_software_slot : build-name : string   {Config : false}
o_ran_software_management_I_slot_group_I_software_slot : build-version : string  
class "files" as o_ran_software_management_I_slot_group_I_software_slot_I_files << (L, #FF7700) list>> 
o_ran_software_management_I_slot_group_I_software_slot *-- "0..N" o_ran_software_management_I_slot_group_I_software_slot_I_files 
note bottom of o_ran_software_management_I_slot_group_I_software_slot_I_files
<b>Config = </b>false
end note 
o_ran_software_management_I_slot_group_I_software_slot_I_files : +name : string  {key} 
o_ran_software_management_I_slot_group_I_software_slot_I_files : version : string  
o_ran_software_management_I_slot_group_I_software_slot_I_files : local-path : string   {mandatory}
o_ran_software_management_I_slot_group_I_software_slot_I_files : integrity : enumeration : {OK,NOK,}   {Config : false}
class "download-input" as o_ran_software_management_I_download_input_grouping <<(G,Lime) grouping>> 
o_ran_software_management_I_download_input_grouping : remote-file-path : inet:uri   {mandatory}
o_ran_software_management_I_download_input_grouping : o-ran-fm:credential-information {uses} 
class "download-output" as o_ran_software_management_I_download_output_grouping <<(G,Lime) grouping>> 
o_ran_software_management_I_download_output_grouping : status : enumeration : {STARTED,FAILED,}   {mandatory}
o_ran_software_management_I_download_output_grouping : error-message : string  
note bottom of o_ran_software_management_I_download_output_grouping
<b>When</b> (error-message):
../status = 'FAILED'

end note 
o_ran_software_management_I_download_output_grouping : notification-timeout : int32   = 30  {seconds}
class "install-input" as o_ran_software_management_I_install_input_grouping <<(G,Lime) grouping>> 
o_ran_software_management_I_install_input_grouping : slot-name : leafref : /software-inventory/software-slot/name   {mandatory}
note bottom of o_ran_software_management_I_install_input_grouping
<b>Must</b> (slot-name):
/software-inventory/software-slot[name = current()][active = 'false' and running = 'false']

end note 
o_ran_software_management_I_install_input_grouping : file-names []: string 
class "install-output" as o_ran_software_management_I_install_output_grouping <<(G,Lime) grouping>> 
o_ran_software_management_I_install_output_grouping : status : enumeration : {STARTED,FAILED,}   {mandatory}
o_ran_software_management_I_install_output_grouping : error-message : string  
note bottom of o_ran_software_management_I_install_output_grouping
<b>When</b> (error-message):
../status = 'FAILED'

end note 
class "activate-input" as o_ran_software_management_I_activate_input_grouping <<(G,Lime) grouping>> 
o_ran_software_management_I_activate_input_grouping : slot-name : leafref : /software-inventory/software-slot/name   {mandatory}
note bottom of o_ran_software_management_I_activate_input_grouping
<b>Must</b> (slot-name):
/software-inventory/software-slot[name = current()][status = 'VALID']

end note 
class "activate-output" as o_ran_software_management_I_activate_output_grouping <<(G,Lime) grouping>> 
o_ran_software_management_I_activate_output_grouping : status : enumeration : {STARTED,FAILED,}   {mandatory}
o_ran_software_management_I_activate_output_grouping : error-message : string  
note bottom of o_ran_software_management_I_activate_output_grouping
<b>When</b> (error-message):
../status = 'FAILED'

end note 
o_ran_software_management_I_activate_output_grouping : notification-timeout : int32   = 30  {seconds}
class "download-notification" as o_ran_software_management_I_download_notification_grouping <<(G,Lime) grouping>> 
o_ran_software_management_I_download_notification_grouping : file-name : string   {mandatory}
o_ran_software_management_I_download_notification_grouping : status : enumeration : {COMPLETED,AUTHENTICATION_ERROR,PROTOCOL_ERROR,...}  
o_ran_software_management_I_download_notification_grouping : error-message : string  
note bottom of o_ran_software_management_I_download_notification_grouping
<b>When</b> (error-message):
../status != 'COMPLETED'

end note 
class "install-notification" as o_ran_software_management_I_install_notification_grouping <<(G,Lime) grouping>> 
o_ran_software_management_I_install_notification_grouping : slot-name : leafref : /software-inventory/software-slot/name  
o_ran_software_management_I_install_notification_grouping : status : enumeration : {COMPLETED,FILE_ERROR,INTEGRITY_ERROR,...}  
o_ran_software_management_I_install_notification_grouping : error-message : string  
note bottom of o_ran_software_management_I_install_notification_grouping
<b>When</b> (error-message):
../status != 'COMPLETED'

end note 
class "activation-notification" as o_ran_software_management_I_activation_notification_grouping <<(G,Lime) grouping>> 
o_ran_software_management_I_activation_notification_grouping : slot-name : leafref : /software-inventory/software-slot/name  
o_ran_software_management_I_activation_notification_grouping : status : enumeration : {COMPLETED,APPLICATION_ERROR,}  
o_ran_software_management_I_activation_notification_grouping : return-code : uint8  
o_ran_software_management_I_activation_notification_grouping : error-message : string  
note bottom of o_ran_software_management_I_activation_notification_grouping
<b>When</b> (error-message):
../status != 'COMPLETED'

end note 
class "software-inventory" as  o_ran_software_management_I_software_inventory <<container>> 
o_ran_software_management *-- "1" o_ran_software_management_I_software_inventory 
note bottom of o_ran_software_management_I_software_inventory
<b>Config = </b>false
end note 
o_ran_software_management_I_software_inventory : slot-group {uses} 
o_ran_software_management : software-download( in: download_input out: download_output)
o_ran_software_management : software-install( in: install_input out: install_output)
o_ran_software_management : software-activate( in: activate_input out: activate_output)
class "download-event" as o_ran_software_management_I_download_event << (N,#00D1B2) notification>> 
o_ran_software_management -- o_ran_software_management_I_download_event : notification 
o_ran_software_management_I_download_event : download-notification {uses} 
class "install-event" as o_ran_software_management_I_install_event << (N,#00D1B2) notification>> 
o_ran_software_management -- o_ran_software_management_I_install_event : notification 
o_ran_software_management_I_install_event : install-notification {uses} 
class "activation-event" as o_ran_software_management_I_activation_event << (N,#00D1B2) notification>> 
o_ran_software_management -- o_ran_software_management_I_activation_event : notification 
o_ran_software_management_I_activation_event : activation-notification {uses} 
} 

o_ran_software_management_I_software_inventory --> o_ran_software_management_I_slot_group_grouping : uses 
o_ran_software_management --> o_ran_software_management_I_download_input_grouping : uses 
o_ran_software_management --> o_ran_software_management_I_download_output_grouping : uses 
o_ran_software_management --> o_ran_software_management_I_install_input_grouping : uses 
o_ran_software_management --> o_ran_software_management_I_install_output_grouping : uses 
o_ran_software_management --> o_ran_software_management_I_activate_input_grouping : uses 
o_ran_software_management --> o_ran_software_management_I_activate_output_grouping : uses 
o_ran_software_management_I_download_event --> o_ran_software_management_I_download_notification_grouping : uses 
o_ran_software_management_I_install_event --> o_ran_software_management_I_install_notification_grouping : uses 
o_ran_software_management_I_activation_event --> o_ran_software_management_I_activation_notification_grouping : uses 

' End Diagram
' Format
header
  <b><font color=#8888ff>License</font></b>
  <b><font color=#8888ff>Apache 2.0</font></b>
end header

right footer 
  Thanks to plantUml! 
  2020-06-17 | onap.org | o-ran-sc.org
end footer

skinparam backgroundColor #fefefe

skinparam backgroundColor #fefefe
'skinparam handwritten true
skinparam roundcorner 15

skinparam database  {
    BorderColor #444444
    BackgroundColor #ffffdd
    FontColor #444444
}

skinparam sequence {
  MessageAlign left
  ArrowColor #2277dd
  ArrowFontColor #444444
  ArrowThickness 2
  ActorBorderColor #444444
  LifeLineBorderColor #444444
  LifeLineBackgroundColor #eeeeee
  LifeLineBackgroundColor #eeeeee
 
  BoxBorderColor #444444
    
  GroupBorderColor #444444
  GroupBackgroundColor #eeeeee
  
  ParticipantBorderColor #444444
  ParticipantBackgroundColor #ffffdd
  ParticipantFontColor #444444
    
  ActorBackgroundColor #ffffdd
  'ActorFontColor DeepSkyBlue
  'ActorFontSize 17
  'ActorFontName Aapex
}

@enduml