import { k8sListResource, k8sPatch, K8sResourceCommon, k8sGet } from '@openshift-console/dynamic-plugin-sdk'; export type ProjectOperatorConfig = { apiVersion: string; kind: string; name: string; namespace: string; }; export const DEFAULT_OPERATOR_CONFIG: ProjectOperatorConfig = { apiVersion: 'projectpause.openshift.io/v1alpha1', kind: 'ProjectPauseConfig', name: 'project-pause-operator-config', namespace: 'openshift-operators', }; export const getOperatorStatus = async (namespace: string): Promise => { try { const response = await k8sGet({ model: { apiVersion: DEFAULT_OPERATOR_CONFIG.apiVersion, kind: DEFAULT_OPERATOR_CONFIG.kind, plural: 'projectpauseconfigs', }, name: DEFAULT_OPERATOR_CONFIG.name, namespace: DEFAULT_OPERATOR_CONFIG.namespace, }); return response?.status?.ready === true; } catch (error) { console.error('Failed to get operator status:', error); return false; } }; export const pauseProject = async ( namespace: string, isPaused: boolean, ): Promise => { const patch = [ { op: 'add', path: '/metadata/annotations/project-pause-operator.openshift.io~1paused', value: isPaused ? 'true' : 'false', }, ]; await k8sPatch({ model: { apiVersion: 'v1', kind: 'Namespace', plural: 'namespaces', }, resource: { metadata: { name: namespace } } as K8sResourceCommon, data: patch, }); }; export const getProjectPauseState = async ( namespace: string, ): Promise<{ isPaused: boolean; isOperatorReady: boolean }> => { try { const [namespaceResource, operatorReady] = await Promise.all([ k8sGet({ model: { apiVersion: 'v1', kind: 'Namespace', plural: 'namespaces', }, name: namespace, }), getOperatorStatus(namespace), ]); const isPaused = namespaceResource?.metadata?.annotations?.['project-pause-operator.openshift.io/paused'] === 'true'; return { isPaused, isOperatorReady: operatorReady, }; } catch (error) { console.error('Failed to get project pause state:', error); return { isPaused: false, isOperatorReady: false, }; } };