N°8515 - Move ContainerApplication under SoftwareInstance

This commit is contained in:
v-dumas
2025-12-24 13:49:22 +01:00
parent e283f0180a
commit 856a63b934
4 changed files with 164 additions and 117 deletions

View File

@@ -21,4 +21,16 @@
<ContainerType alias="ContainerType" id="7">
<name>Nomad</name>
</ContainerType>
<ContainerType alias="ContainerType" id="8">
<name>OpenShift</name>
</ContainerType>
<ContainerImageType alias="ContainerImageType" id="1">
<name>Docker Hardened Image</name>
</ContainerImageType>
<ContainerImageType alias="ContainerImageType" id="2">
<name>Docker Official Image</name>
</ContainerImageType>
<ContainerImageType alias="ContainerImageType" id="3">
<name>Verified Publisher</name>
</ContainerImageType>
</Set>

View File

@@ -13,16 +13,16 @@
<attribute id="version"/>
</attributes>
<complementary_attributes>
<attribute id="vendor"/>
<attribute id="type"/>
<attribute id="publisher"/>
<attribute id="image"/>
</complementary_attributes>
</naming>
<reconciliation>
<attributes>
<attribute id="image_url"/>
<attribute id="image"/>
<attribute id="name"/>
<attribute id="version"/>
<attribute id="vendor"/>
<attribute id="publisher"/>
</attributes>
</reconciliation>
<style>
@@ -31,7 +31,8 @@
<uniqueness_rules>
<rule id="no_duplicate">
<attributes>
<attribute id="image_url"/>
<attribute id="publisher"/>
<attribute id="image"/>
</attributes>
<filter><![CDATA[]]></filter>
<disabled>false</disabled>
@@ -45,8 +46,8 @@
<default_value/>
<is_null_allowed>false</is_null_allowed>
</field>
<field id="vendor" xsi:type="AttributeString">
<sql>vendor</sql>
<field id="publisher" xsi:type="AttributeString">
<sql>publisher</sql>
<default_value/>
<is_null_allowed>false</is_null_allowed>
</field>
@@ -55,6 +56,11 @@
<default_value/>
<is_null_allowed>false</is_null_allowed>
</field>
<field id="description" xsi:type="AttributeText">
<sql>description</sql>
<default_value/>
<is_null_allowed>true</is_null_allowed>
</field>
<field id="type_id" xsi:type="AttributeExternalKey">
<sql>containerimagetype_id</sql>
<target_class>ContainerImageType</target_class>
@@ -70,10 +76,10 @@
<on_target_delete>DEL_MANUAL</on_target_delete>
<tracking_level>all</tracking_level>
</field>
<field id="image_url" xsi:type="AttributeURL">
<sql>image_url</sql>
<field id="image" xsi:type="AttributeString">
<sql>image</sql>
<default_value/>
<is_null_allowed>true</is_null_allowed>
<is_null_allowed>false</is_null_allowed>
<target/>
<tracking_level>all</tracking_level>
</field>
@@ -96,9 +102,12 @@
<item id="version">
<rank>20</rank>
</item>
<item id="vendor">
<item id="publisher">
<rank>30</rank>
</item>
<item id="image">
<rank>40</rank>
</item>
</items>
</list>
<search>
@@ -106,15 +115,18 @@
<item id="name">
<rank>10</rank>
</item>
<item id="org_id">
<item id="version">
<rank>20</rank>
</item>
<item id="business_criticity">
<item id="publisher">
<rank>30</rank>
</item>
<item id="move2production">
<item id="image">
<rank>40</rank>
</item>
<item id="type_id">
<rank>50</rank>
</item>
</items>
</search>
<details>
@@ -126,17 +138,11 @@
<item id="name">
<rank>10</rank>
</item>
<item id="org_id">
<item id="version">
<rank>20</rank>
</item>
<item id="business_criticity">
<rank>30</rank>
</item>
<item id="move2production">
<rank>40</rank>
</item>
<item id="description">
<rank>50</rank>
<rank>30</rank>
</item>
</items>
<rank>10</rank>
@@ -148,16 +154,16 @@
<items>
<item id="fieldset:ContainerImage:moreinfo">
<items>
<item id="image_url">
<item id="publisher">
<rank>10</rank>
</item>
<item id="software_id">
<item id="image">
<rank>20</rank>
</item>
<item id="containerapplication_id">
<item id="type_id">
<rank>30</rank>
</item>
<item id="containervirtualhost_id">
<item id="software_id">
<rank>40</rank>
</item>
</items>
@@ -166,28 +172,22 @@
</items>
<rank>20</rank>
</item>
<item id="contacts_list">
<rank>30</rank>
</item>
<item id="documents_list">
<rank>40</rank>
</item>
<item id="applicationsolution_list">
<item id="containerapplications_list">
<rank>50</rank>
</item>
</items>
</details>
<default_search>
<items>
<item id="friendlyname">
<rank>10</rank>
</item>
<item id="org_id">
<rank>20</rank>
</item>
<item id="containerapplication_id">
<item id="publisher">
<rank>30</rank>
</item>
<item id="image">
<rank>40</rank>
</item>
<item id="type_id">
<rank>50</rank>
</item>
</items>
</default_search>
</presentation>
@@ -195,15 +195,22 @@
<relation id="impacts">
<neighbours>
<neighbour id="containerapplication">
<attribute>containerapplication_id</attribute>
<attribute>containerapplications_list</attribute>
<direction>both</direction>
</neighbour>
</neighbours>
</relation>
</relations>
</class>
<class id="SoftwareInstance" _delta="must_exist">
<fields>
<field id="system_id" _delta="must_exist" xsi:type="AttributeExternalKey">
<filter _delta="redefine">SELECT FunctionalCI WHERE finalclass IN ('Server','VirtualMachine','PC', 'ContainerVirtualHost')</filter>
</field>
</fields>
</class>
<class id="ContainerApplication" _delta="define">
<parent>FunctionalCI</parent>
<parent>SoftwareInstance</parent>
<properties>
<category>bizmodel,searchable</category>
<abstract>false</abstract>
@@ -220,8 +227,7 @@
<attributes>
<attribute id="name"/>
<attribute id="org_id"/>
<attribute id="organization_name"/>
<attribute id="finalclass"/>
<attribute id="finalclass"/>
</attributes>
</reconciliation>
<fields_semantic>
@@ -230,11 +236,12 @@
<style>
<icon>images/icons8-application-container.svg</icon>
</style>
<obsolescence>
<condition>status='obsolete'</condition>
</obsolescence>
</properties>
<fields>
<field id="descriptor" xsi:type="AttributeBlob">
<sql>descriptor</sql>
<is_null_allowed>true</is_null_allowed>
</field>
<field id="containervirtualhost_id" xsi:type="AttributeExternalKey">
<sql>containervirtualhost_id</sql>
<filter/>
@@ -251,46 +258,25 @@
<ext_key_to_remote>containerimage_id</ext_key_to_remote>
<duplicates/>
</field>
<field id="status" xsi:type="AttributeEnum">
<sql>status</sql>
<values>
<value id="implementation">
<code>implementation</code>
<rank>10</rank>
<style>
<main_color>$ibo-lifecycle-inactive-state-primary-color</main_color>
<complementary_color>$ibo-lifecycle-inactive-state-secondary-color</complementary_color>
<decoration_classes/>
</style>
</value>
<value id="production">
<code>production</code>
<rank>20</rank>
<style>
<main_color>$ibo-lifecycle-active-state-primary-color</main_color>
<complementary_color>$ibo-lifecycle-active-state-secondary-color</complementary_color>
<decoration_classes/>
</style>
</value>
<value id="obsolete">
<code>obsolete</code>
<rank>30</rank>
<style>
<main_color>$ibo-lifecycle-frozen-state-primary-color</main_color>
<complementary_color>$ibo-lifecycle-frozen-state-secondary-color</complementary_color>
<decoration_classes/>
</style>
</value>
</values>
<sort_type/>
<default_value>implementation</default_value>
<is_null_allowed>false</is_null_allowed>
<display_style/>
<dependencies/>
<tracking_level>all</tracking_level>
</field>
</fields>
<methods/>
<methods>
<method id="EvtComputeSystemId">
<static>false</static>
<access>public</access>
<type>EventListener</type>
<code><![CDATA[ public function EvtComputeSystemId(?Combodo\iTop\Service\Events\EventData $oEventData = null)
{
$this->Set('system_id', $this->Get('containervirtualhost_id'));
}]]></code>
</method>
</methods>
<event_listeners>
<event_listener id="EVENT_DB_BEFORE_WRITE">
<event>EVENT_DB_BEFORE_WRITE</event>
<callback>EvtComputeSystemId</callback>
<rank>0</rank>
</event_listener>
</event_listeners>
<presentation>
<list>
<items>
@@ -361,28 +347,31 @@
<item id="containervirtualhost_id">
<rank>10</rank>
</item>
<item id="descriptor">
<rank>10</rank>
</item>
</items>
<rank>10</rank>
</item>
</items>
<rank>20</rank>
</item>
<item id="contacts_list">
<item id="containerimages_list">
<rank>30</rank>
</item>
<item id="documents_list">
<item id="contacts_list">
<rank>40</rank>
</item>
<item id="applicationsolution_list">
<item id="documents_list">
<rank>50</rank>
</item>
<item id="providercontracts_list">
<item id="applicationsolution_list">
<rank>60</rank>
</item>
<item id="services_list">
<item id="providercontracts_list">
<rank>70</rank>
</item>
<item id="containerimages_list">
<item id="services_list">
<rank>80</rank>
</item>
</items>
@@ -1078,7 +1067,7 @@
</presentation>
</class>
<class id="Cloud" _delta="define">
<parent>VirtualHost</parent>
<parent>VirtualDevice</parent>
<properties>
<category>bizmodel,searchable</category>
<abstract>false</abstract>
@@ -1223,9 +1212,6 @@
<item id="providercontracts_list">
<rank>50</rank>
</item>
<item id="virtualmachine_list">
<rank>60</rank>
</item>
<item id="containerhosts_list">
<rank>70</rank>
</item>

View File

@@ -9,18 +9,26 @@
Dict::Add('EN US', 'English', 'English', array(
// Class Container Image
'Class:ContainerImage/Name' => '%1$s',
'Class:ContainerImage/ComplementaryName' => '%1$s',
'Class:ContainerImage/Name' => '%1$s %2$s',
'Class:ContainerImage/ComplementaryName' => '%1$s - %2$s',
'Class:ContainerImage' => 'Container Image',
'Class:ContainerImage+' => 'Image of a piece of software ready to be launched as a container',
'Class:ContainerImage/Attribute:name' => 'Name',
'Class:ContainerImage/Attribute:name+' => '',
'Class:ContainerImage/Attribute:version' => 'Version',
'Class:ContainerImage/Attribute:version+' => '',
'Class:ContainerImage/Attribute:description' => 'Description',
'Class:ContainerImage/Attribute:description+' => '',
'Class:ContainerImage/Attribute:publisher' => 'Publisher',
'Class:ContainerImage/Attribute:publisher+' => 'Publisher of the image. Eg. php, nginx, ...',
'Class:ContainerImage/Attribute:image' => 'Image',
'Class:ContainerImage/Attribute:image+' => 'Detailed information to retrieve the image on the appropriate hosting platform',
'Class:ContainerImage/Attribute:type_id' => 'Type',
'Class:ContainerImage/Attribute:type_id+' => 'Type d\image',
'Class:ContainerImage/Attribute:software_id' => 'Software',
'Class:ContainerImage/Attribute:software_id+' => '',
'Class:ContainerImage/Attribute:image_url' => 'Image URL',
'Class:ContainerImage/Attribute:image_url+' => '',
'Class:ContainerImage/Attribute:containerapplication_id' => 'Containerized Application',
'Class:ContainerImage/Attribute:containerapplication_id+' => 'Application to which this image contributes',
'Class:ContainerImage/Attribute:containervirtualhost_id' => 'Container Host',
'Class:ContainerImage/Attribute:containervirtualhost_id+' => 'Platform on which the application is deployed',
'Class:ContainerImage/Attribute:containerapplications_list' => 'Containerized Applications',
'Class:ContainerImage/Attribute:containerapplications_list+' => 'Applications to which this image contributes',
'ContainerImage:baseinfo' => 'General information',
'ContainerImage:moreinfo' => 'Container specifics',
@@ -29,8 +37,8 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:ContainerApplication/ComplementaryName' => '%1$s',
'Class:ContainerApplication' => 'Containerized Application',
'Class:ContainerApplication+' => 'Application deployed on a container environment',
'Class:ContainerApplication/Attribute:status' => 'Status',
'Class:ContainerApplication/Attribute:status+' => 'Status of the application',
'Class:ContainerApplication/Attribute:descriptor' => 'Deployment file',
'Class:ContainerApplication/Attribute:descriptor+' => 'File describing how to deploy the application on the container platform (e.g., Docker Compose, Helm Chart, etc.)',
'Class:ContainerApplication/Attribute:containervirtualhost_id' => 'Container Host',
'Class:ContainerApplication/Attribute:containervirtualhost_id+' => 'Container Platform on which the application is running',
'Class:ContainerApplication/Attribute:containertype_id' => 'Container type',
@@ -40,6 +48,17 @@ Dict::Add('EN US', 'English', 'English', array(
'ContainerApplication:baseinfo' => 'General information',
'ContainerApplication:moreinfo' => 'Container specifics',
// Class: lnkContainerApplicationToImage
'Class:lnkContainerApplicationToImage' => 'Link Container Application / Image',
'Class:lnkContainerApplicationToImage+' => '',
'Class:lnkContainerApplicationToImage/Name' => '%1$s / %2$s',
'Class:lnkContainerApplicationToImage/Name+' => '',
'Class:lnkContainerApplicationToImage/Attribute:containerapplication_id' => 'Containerized Application',
'Class:lnkContainerApplicationToImage/Attribute:containerapplication_id+' => 'Application which uses this image',
'Class:lnkContainerApplicationToImage/Attribute:containerimage_id' => 'Container Image',
'Class:lnkContainerApplicationToImage/Attribute:containerimage_id+' => 'Software image used to build the containerized application',
// Class Container Virtual Host
'Class:ContainerVirtualHost/Name' => '%1$s',
'Class:ContainerVirtualHost/ComplementaryName' => '',
@@ -87,6 +106,12 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:ContainerType' => 'Container Type',
'Class:ContainerType+' => 'Technology used to deliver containerization',
// Class Container Type
'Class:ContainerImageType/Name' => '%1$s',
'Class:ContainerImageType/ComplementaryName' => '',
'Class:ContainerImageType' => 'Container Image Type',
'Class:ContainerImageType+' => 'Typology of container images',
// Class Cloud
'Class:Cloud/Name' => '%1$s',
'Class:Cloud/ComplementaryName' => '%1$s-%2$s',

View File

@@ -9,18 +9,26 @@
Dict::Add('FR FR', 'French', 'Français', array(
// Class Container Image
'Class:ContainerImage/Name' => '%1$s',
'Class:ContainerImage/ComplementaryName' => '%1$s',
'Class:ContainerImage/Name' => '%1$s %2$s',
'Class:ContainerImage/ComplementaryName' => '%1$s - %2$s',
'Class:ContainerImage' => 'Image pour conteneur',
'Class:ContainerImage+' => 'Image d\'un logiciel, constituant d\'une application conteneurisée',
'Class:ContainerImage/Attribute:name' => 'Nom',
'Class:ContainerImage/Attribute:name+' => '',
'Class:ContainerImage/Attribute:version' => 'Version',
'Class:ContainerImage/Attribute:version+' => '',
'Class:ContainerImage/Attribute:description' => 'Description',
'Class:ContainerImage/Attribute:description+' => '',
'Class:ContainerImage/Attribute:publisher' => 'Editeur',
'Class:ContainerImage/Attribute:publisher+' => 'Fournisseur de l\image',
'Class:ContainerImage/Attribute:image' => 'Image',
'Class:ContainerImage/Attribute:image+' => 'Détail permettant de récupérer l\'image sur la plateforme d\'hébergement appropriée',
'Class:ContainerImage/Attribute:type_id' => 'Type',
'Class:ContainerImage/Attribute:type_id+' => 'Type d\image',
'Class:ContainerImage/Attribute:software_id' => 'Logiciel',
'Class:ContainerImage/Attribute:software_id+' => '',
'Class:ContainerImage/Attribute:image_url' => 'URL de l\'image',
'Class:ContainerImage/Attribute:image_url+' => '',
'Class:ContainerImage/Attribute:containerapplication_id' => 'Application conteneurisée',
'Class:ContainerImage/Attribute:containerapplication_id+' => 'L\'application à laquelle cette image contribue',
'Class:ContainerImage/Attribute:containervirtualhost_id' => 'Plateforme de l\'application',
'Class:ContainerImage/Attribute:containervirtualhost_id+' => 'Plateforme où cette image est déployée en conteneur',
'Class:ContainerImage/Attribute:containerapplications_list' => 'Applications conteneurisées',
'Class:ContainerImage/Attribute:containerapplications_list+' => 'Les applications qui utilisent cette image',
'ContainerImage:baseinfo' => 'Informations générales',
'ContainerImage:moreinfo' => 'Spécificités de la conteneurisation',
@@ -29,17 +37,27 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:ContainerApplication/ComplementaryName' => '%1$s',
'Class:ContainerApplication' => 'Application conteneurisée',
'Class:ContainerApplication+' => 'Application déployée sur une plateforme de conteneurisation',
'Class:ContainerApplication/Attribute:status' => 'État',
'Class:ContainerApplication/Attribute:status+' => 'État de l\'application',
'Class:ContainerApplication/Attribute:descriptor' => 'Fichier de déploiement',
'Class:ContainerApplication/Attribute:descriptor+' => 'Fichier décrivant la manière de déployer l\'application sur la plateforme de conteneurisation (par exemple, Docker Compose, Helm Chart, etc.)',
'Class:ContainerApplication/Attribute:containervirtualhost_id' => 'Hôte',
'Class:ContainerApplication/Attribute:containervirtualhost_id+' => 'Plateforme de conteneurisation sur laquelle cette application est déployée',
'Class:ContainerApplication/Attribute:containertype_id' => 'Type de conteneur',
'Class:ContainerApplication/Attribute:containertype_id+' => '',
'Class:ContainerApplication/Attribute:containertype_id+' => 'Typologie de plateforme de conteneurisation',
'Class:ContainerApplication/Attribute:containerimages_list' => 'Images',
'Class:ContainerApplication/Attribute:containerimages_list+' => 'Images des conteneurs constitutifs de cette application',
'ContainerApplication:baseinfo' => 'Informations générales',
'ContainerApplication:moreinfo' => 'Spécificités de la conteneurisation',
// Class: lnkContainerApplicationToImage
'Class:lnkContainerApplicationToImage' => 'Lien Application / Image pour conteneur',
'Class:lnkContainerApplicationToImage+' => '',
'Class:lnkContainerApplicationToImage/Name' => '%1$s / %2$s',
'Class:lnkContainerApplicationToImage/Name+' => '',
'Class:lnkContainerApplicationToImage/Attribute:containerapplication_id' => 'Application conteneurisée',
'Class:lnkContainerApplicationToImage/Attribute:containerapplication_id+' => 'Application qui utilise cette image',
'Class:lnkContainerApplicationToImage/Attribute:containerimage_id' => 'Image pour conteneur',
'Class:lnkContainerApplicationToImage/Attribute:containerimage_id+' => 'Une image qui contribue à l\'application',
// Class Container Virtual Host
'Class:ContainerVirtualHost/Name' => '%1$s',
'Class:ContainerVirtualHost/ComplementaryName' => '',
@@ -87,6 +105,12 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:ContainerType' => 'Type de conteneurisation',
'Class:ContainerType+' => 'Technologie de conteneurisation',
// Class Container Image Type
'Class:ContainerImageType/Name' => '%1$s',
'Class:ContainerImageType/ComplementaryName' => '',
'Class:ContainerImageType' => 'Type d\'image',
'Class:ContainerImageType+' => 'Typologie d\'images pour container',
// Class Cloud
'Class:Cloud/Name' => '%1$s',
'Class:Cloud/ComplementaryName' => '%1$s-%2$s',