def _create_key_files(check_oci): utils.log("Setting environment variables") if OCICONFIG_VAR in os.environ: utils.run_command( "echo \"$OCICONFIG_VAR\" | openssl enc -base64 -d -A > " + VolumeProvisionerSystemTestInterface.TMP_OCICONFIG, ".") utils.run_command( "chmod 600 " + VolumeProvisionerSystemTestInterface.TMP_OCICONFIG, ".") if KUBECONFIG_VAR in os.environ: utils.run_command( "echo \"$KUBECONFIG_VAR\" | openssl enc -base64 -d -A > " + utils.TMP_KUBECONFIG, ".") if check_oci: oci_config_file = VolumeProvisionerSystemTestInterface( )._get_oci_config_file() with open(oci_config_file, 'r') as stream: try: cnf = yaml.load(stream) with open( VolumeProvisionerSystemTestInterface. TMP_OCI_API_KEY_FILE, 'w') as stream: stream.write(cnf['auth']['key']) except yaml.YAMLError as err: utils.log( "Error. Failed to parse oci config file %s. Error: %s " % (oci_config_file, err)) utils.finish_with_exit_code(1)
def _check_env(check_oci): if check_oci: if OCICONFIG not in os.environ and OCICONFIG_VAR not in os.environ: utils.log( "Error. Can't find either OCICONFIG or OCICONFIG_VAR in the environment." ) utils.finish_with_exit_code(1)
def _handle_args(): parser = argparse.ArgumentParser(description='Description of your program') parser.add_argument('--setup', help='Setup the provisioner on the cluster', action='store_true', default=False) parser.add_argument('--no-test', help='Dont run the tests on the test cluster', action='store_true', default=False) parser.add_argument( '--check-oci', help= 'Check with OCI that the volumes have been created/destroyed (requires --setup)', action='store_true', default=False) parser.add_argument('--teardown', help='Teardown the provisioner on the cluster', action='store_true', default=False) args = vars(parser.parse_args()) if args['check_oci'] and not args['setup']: utils.log( "If --check-oci is specified, then --setup also needs to be set.") utils.finish_with_exit_code(1) return args
def _get_json_doc(response): decoder = json.JSONDecoder() try: doc = decoder.decode(response) except (ValueError, UnicodeError) as _: utils.log('Invalid JSON in response: %s' % str(response)) utils.finish_with_exit_code(1) return doc
def _get_region(): nodes_json = utils.kubectl("get nodes -o json", log_stdout=False) nodes = json.loads(nodes_json) for node in nodes['items']: return node['metadata']['labels'][ 'failure-domain.beta.kubernetes.io/zone'] utils.log("Region lookup failed") utils.finish_with_exit_code(1)
def _get_oci_config(self): config = dict(oci.config.DEFAULT_CONFIG) oci_config_file = self._get_oci_config_file() with open(oci_config_file, 'r') as stream: try: cnf = yaml.load(stream) config["user"] = cnf['auth']['user'] config["tenancy"] = cnf['auth']['tenancy'] config["fingerprint"] = cnf['auth']['fingerprint'] config["key_file"] = self.TMP_OCI_API_KEY_FILE config["region"] = cnf['auth']['region'] return config except yaml.YAMLError: utils.log("Error. Failed to parse oci config file " + oci_config_file) utils.finish_with_exit_code(1)
def _main(): utils.reset_debug_file() args = _handle_args() _check_env(args['check_oci']) _create_key_files(args['check_oci']) def _destroy_key_files_atexit(): _destroy_key_files(args['check_oci']) atexit.register(_destroy_key_files_atexit) test_id = str(uuid.uuid4())[:8] canaryMetrics = CanaryMetrics(metrics_file=os.environ.get(METRICS_FILE)) if args['teardown']: def _teardown_atexit(): utils.log("Tearing down the volume provisioner", as_banner=True) # BlockSystemTests(test_id, args['setup']).cleanup() FSSSystemTests(test_id, args['setup']).cleanup() # BackupVolumeSystemTest(test_id, args['setup']).cleanup() atexit.register(_teardown_atexit) if not args['no_test']: BlockSystemTests(test_id=test_id, setup=args['setup'], check_oci=args['check_oci'], canaryMetrics=canaryMetrics).run() FSSSystemTests(subnet_ocid=os.environ.get(SUBNET_OCID), test_id=test_id, setup=args['setup'], check_oci=args['check_oci'], canaryMetrics=canaryMetrics).run() BackupVolumeSystemTest(test_id=test_id, setup=args['setup'], check_oci=args['check_oci'], canaryMetrics=canaryMetrics).run() canaryMetrics.finish_canary_metrics() utils.finish_with_exit_code(0)
def _checkTestSuccess(self): '''Check whether any tests failed or not''' if not self._testSuccess: utils.finish_with_exit_code(1)