From 3c92d4286590221271b1bca0f379035b1e69ff84 Mon Sep 17 00:00:00 2001
From: Alexandre Alves <alexandre.alves@suse.com>
Date: Tue, 7 May 2024 13:25:12 +0100
Subject: [PATCH] change logic to get operator version from custom CRD included
 in elemental-operator + change min operator version for feature gating to
 1.6.2 + bump version

---
 package.json                              |  2 +-
 pkg/elemental/config/elemental-types.js   |  1 +
 pkg/elemental/package.json                |  2 +-
 pkg/elemental/types.js                    |  1 +
 pkg/elemental/utils/feature-versioning.ts | 15 +++++++--------
 5 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/package.json b/package.json
index bb5a11c..4109554 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "elemental-ui",
   "description": "Elemental UI extension",
-  "version": "1.3.1-rc5",
+  "version": "1.3.1-rc6",
   "private": false,
   "engines": {
     "node": ">=12"
diff --git a/pkg/elemental/config/elemental-types.js b/pkg/elemental/config/elemental-types.js
index 50787f4..8445962 100644
--- a/pkg/elemental/config/elemental-types.js
+++ b/pkg/elemental/config/elemental-types.js
@@ -10,6 +10,7 @@ export const ELEMENTAL_SCHEMA_IDS = {
   MACHINE_INV_SELECTOR:           'elemental.cattle.io.machineinventoryselector',
   MACHINE_INV_SELECTOR_TEMPLATES: 'elemental.cattle.io.machineinventoryselectortemplate',
   SEED_IMAGE:                     'elemental.cattle.io.seedimage',
+  METADATA:                       'elemental.cattle.io.metadata',
 };
 
 export const KIND = { MACHINE_INV_SELECTOR_TEMPLATES: 'MachineInventorySelectorTemplate' };
diff --git a/pkg/elemental/package.json b/pkg/elemental/package.json
index f4e2bc3..f5302b4 100644
--- a/pkg/elemental/package.json
+++ b/pkg/elemental/package.json
@@ -1,7 +1,7 @@
 {
   "name": "elemental",
   "description": "OS Management extension",
-  "version": "1.3.1-rc5",
+  "version": "1.3.1-rc6",
   "private": false,
   "rancher": {
     "annotations": {
diff --git a/pkg/elemental/types.js b/pkg/elemental/types.js
index 3b583d5..1b15985 100644
--- a/pkg/elemental/types.js
+++ b/pkg/elemental/types.js
@@ -19,4 +19,5 @@ export const ELEMENTAL_SCHEMAS = {
   MANAGED_OS_VERSIONS:            'elemental.cattle.io.managedosversions',
   MACHINE_INV_SELECTOR:           'elemental.cattle.io.machineinventoryselectors',
   MACHINE_INV_SELECTOR_TEMPLATES: 'elemental.cattle.io.machineinventoryselectortemplates',
+  METADATA:                       'elemental.cattle.io.metadata',
 };
diff --git a/pkg/elemental/utils/feature-versioning.ts b/pkg/elemental/utils/feature-versioning.ts
index 475650b..94dc168 100644
--- a/pkg/elemental/utils/feature-versioning.ts
+++ b/pkg/elemental/utils/feature-versioning.ts
@@ -1,7 +1,6 @@
 import semver from 'semver';
 
 import { _CREATE, _VIEW } from '@shell/config/query-params';
-import { WORKLOAD_TYPES } from '@shell/config/types';
 import { ELEMENTAL_SCHEMA_IDS } from '../config/elemental-types';
 import { ELEMENTAL_TYPES } from '../types';
 
@@ -20,19 +19,19 @@ const FEATURES_GATING:FeaturesGatingConfig[] = [
   {
     area:               ELEMENTAL_SCHEMA_IDS.MACHINE_REGISTRATIONS,
     mode:               [_CREATE],
-    minOperatorVersion: '1.6.0',
+    minOperatorVersion: '1.6.2',
     features:           [MACH_REG_CONFIG_DEFAULTS]
   },
   {
     area:               ELEMENTAL_TYPES.DASHBOARD,
     mode:               [_VIEW],
-    minOperatorVersion: '1.6.0',
+    minOperatorVersion: '1.6.2',
     features:           [BUILD_MEDIA_RAW_SUPPORT]
   },
   {
     area:               ELEMENTAL_SCHEMA_IDS.MACHINE_REGISTRATIONS,
     mode:               [_VIEW],
-    minOperatorVersion: '1.6.0',
+    minOperatorVersion: '1.6.2',
     features:           [BUILD_MEDIA_RAW_SUPPORT]
   }
 ];
@@ -43,11 +42,11 @@ const FEATURES_GATING:FeaturesGatingConfig[] = [
  * @returns Promise<string | void>
  */
 export async function getOperatorVersion(store: any): Promise<string | void> {
-  // needed to check operator version installed (on the deployment)
-  if (store.getters['management/canList'](WORKLOAD_TYPES.DEPLOYMENT)) {
-    const elementalOperatorDeployment = await store.dispatch('management/find', { type: WORKLOAD_TYPES.DEPLOYMENT, id: 'cattle-elemental-system/elemental-operator' });
+  // needed to check operator version installed (on a custom CRD called metadata, which is installed/created from elemental-operator)
+  if (store.getters['management/canList'](ELEMENTAL_SCHEMA_IDS.METADATA)) {
+    const elementalOperatorMetadata = await store.dispatch('management/find', { type: ELEMENTAL_SCHEMA_IDS.METADATA, id: 'cattle-elemental-system/elemental-operator' });
 
-    return elementalOperatorDeployment?.metadata?.labels?.['app.kubernetes.io/version'] || '0.1.0';
+    return elementalOperatorMetadata?.spec?.appVersion || '0.1.0';
   }
 
   return '0.1.0';