stx-puppet/puppet-manifests/src/modules/platform/files/change_kube_apiserver_param...

72 lines
2.8 KiB
Python

#
# Copyright (c) 2020 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
# This script edits a file containing a kubernetes cluster configmap.
# It currently adds/removes certain kube-apiserver startup parameters.
# If the script is run without a particular kube-apiserver parameter
# passed in as an argument, the existing kube-apiserver parameter will
# be removed.
import argparse
import ruamel.yaml as yaml
configmap_file = '/tmp/cluster_configmap.yaml'
parser = argparse.ArgumentParser()
parser.add_argument("--configmap_file")
parser.add_argument("--oidc_issuer_url")
parser.add_argument("--oidc_client_id")
parser.add_argument("--oidc_username_claim")
parser.add_argument("--oidc_groups_claim")
args = parser.parse_args()
if args.configmap_file:
configmap_file = args.configmap_file
with open(configmap_file, 'r') as dest:
configmap = yaml.load(dest, Loader=yaml.RoundTripLoader)
# cluster config is a single string, so we need to parse the string
# in order to modify it correctly
cluster_config = yaml.load(configmap['data']['ClusterConfiguration'],
Loader=yaml.RoundTripLoader)
if args.oidc_issuer_url:
cluster_config['apiServer']['extraArgs']['oidc-issuer-url'] = \
args.oidc_issuer_url
else:
if 'oidc-issuer-url' in cluster_config['apiServer']['extraArgs']:
del cluster_config['apiServer']['extraArgs']['oidc-issuer-url']
if args.oidc_client_id:
cluster_config['apiServer']['extraArgs']['oidc-client-id'] = \
args.oidc_client_id
else:
if 'oidc-client-id' in cluster_config['apiServer']['extraArgs']:
del cluster_config['apiServer']['extraArgs']['oidc-client-id']
if args.oidc_username_claim:
cluster_config['apiServer']['extraArgs']['oidc-username-claim'] = \
args.oidc_username_claim
else:
if 'oidc-username-claim' in cluster_config['apiServer']['extraArgs']:
del cluster_config['apiServer']['extraArgs']['oidc-username-claim']
if args.oidc_groups_claim:
cluster_config['apiServer']['extraArgs']['oidc-groups-claim'] = \
args.oidc_groups_claim
else:
if 'oidc-groups-claim' in cluster_config['apiServer']['extraArgs']:
del cluster_config['apiServer']['extraArgs']['oidc-groups-claim']
cluster_config_string = yaml.dump(cluster_config, Dumper=yaml.RoundTripDumper,
default_flow_style=False)
# use yaml.scalarstring.PreservedScalarString to make sure the yaml is
# constructed with proper formatting and tabbing
cluster_config_string = yaml.scalarstring.PreservedScalarString(
cluster_config_string)
configmap['data']['ClusterConfiguration'] = cluster_config_string
with open(configmap_file, 'w') as dest:
yaml.dump(configmap, dest, Dumper=yaml.RoundTripDumper,
default_flow_style=False)