1+ #!/usr/bin/env python3
2+
3+ # *****************************************************************************
4+ # Copyright (c) 2024 IBM Corporation and other Contributors.
5+ #
6+ # All rights reserved. This program and the accompanying materials
7+ # are made available under the terms of the Eclipse Public License v1.0
8+ # which accompanies this distribution, and is available at
9+ # http://www.eclipse.org/legal/epl-v10.html
10+ #
11+ # *****************************************************************************
12+
13+ from mas .devops .pre_install import applyPreInstallMASRBAC
14+ from kubernetes import client , config
15+ from kubernetes .config .config_exception import ConfigException
16+ from openshift .dynamic import DynamicClient
17+ import sys
18+ import argparse
19+ import logging
20+ import urllib3
21+ urllib3 .disable_warnings ()
22+
23+
24+ if __name__ == "__main__" :
25+ parser = argparse .ArgumentParser (description = 'Apply Pre-Install MAS RBAC' )
26+
27+ parser .add_argument ("--mas-instance-id" , required = True , help = "MAS Instance ID" )
28+ parser .add_argument ("--mas-version" , required = True , help = "MAS Version (e.g., 9.2)" )
29+ parser .add_argument ("--admin-mode" , required = False , default = "namespaced" ,
30+ choices = ["cluster" , "namespaced" , "minimal" ],
31+ help = "Admin mode: cluster, namespaced, or minimal" )
32+ parser .add_argument ("--selected-apps" , required = False , default = "core" ,
33+ help = "Comma-separated list of apps (e.g., core,manage,iot)" )
34+ parser .add_argument ("--rbac-root-dir" , required = False , default = "/opt/app-root/rbac" ,
35+ help = "Root directory containing RBAC manifests" )
36+ parser .add_argument ("--log-level" , required = False ,
37+ choices = ["DEBUG" , "INFO" , "WARNING" , "ERROR" , "CRITICAL" ],
38+ default = "INFO" )
39+
40+ args = parser .parse_args ()
41+
42+ # Setup logging
43+ log_level = getattr (logging , args .log_level )
44+ logger = logging .getLogger ()
45+ logger .setLevel (log_level )
46+
47+ ch = logging .StreamHandler ()
48+ ch .setLevel (log_level )
49+ chFormatter = logging .Formatter (
50+ "%(asctime)-25s %(name)-50s %(levelname)-8s %(message)s"
51+ )
52+ ch .setFormatter (chFormatter )
53+ logger .addHandler (ch )
54+
55+ mas_instance_id = args .mas_instance_id
56+ mas_version = "." .join (args .mas_version .split ("." )[:2 ])
57+ admin_mode = args .admin_mode
58+ selected_apps_str = args .selected_apps
59+ rbac_root_dir = args .rbac_root_dir
60+
61+ # Parse selected apps
62+ selected_apps = None
63+ if selected_apps_str :
64+ selected_apps = [app .strip () for app in selected_apps_str .split (',' ) if app .strip ()]
65+
66+ logger .info ("Configuration:" )
67+ logger .info ("--------------" )
68+ logger .info (f"mas_instance_id: { mas_instance_id } " )
69+ logger .info (f"mas_version: { mas_version } " )
70+ logger .info (f"admin_mode: { admin_mode } " )
71+ logger .info (f"selected_apps: { selected_apps } " )
72+ logger .info (f"rbac_root_dir: { rbac_root_dir } " )
73+ logger .info (f"log_level: { log_level } " )
74+ logger .info ("" )
75+
76+ try :
77+ # Try to load in-cluster configuration
78+ config .load_incluster_config ()
79+ logger .debug ("Loaded in-cluster configuration" )
80+ except ConfigException :
81+ # If that fails, fall back to kubeconfig file
82+ config .load_kube_config ()
83+ logger .debug ("Loaded kubeconfig file" )
84+
85+ try :
86+ dynClient = DynamicClient (client .api_client .ApiClient ())
87+ applyPreInstallMASRBAC (
88+ dynClient = dynClient ,
89+ masVersion = mas_version ,
90+ masInstanceId = mas_instance_id ,
91+ adminMode = admin_mode ,
92+ selectedApps = selected_apps ,
93+ rbacRootDir = rbac_root_dir
94+ )
95+ logger .info ("Pre-Install MAS RBAC applied successfully" )
96+ sys .exit (0 )
97+ except Exception as e :
98+ logger .error (f"Error applying Pre-Install MAS RBAC: { e } " )
99+ import traceback
100+ traceback .print_exc ()
101+ sys .exit (1 )
0 commit comments