diff --git a/openappstack/__main__.py b/openappstack/__main__.py index d3a742a993e53ff8df754feb339fe6580c979902..3d653cad7a7131cbcfe17a3bf82fd7cdcf971212 100755 --- a/openappstack/__main__.py +++ b/openappstack/__main__.py @@ -231,7 +231,6 @@ def main(): # pylint: disable=too-many-statements,too-many-branches,too-many-lo info_parser = subparsers.add_parser( 'info', help=("Show information about a cluster")) - info_parser.set_defaults(func=info) info_parser.add_argument( '--ip-address', @@ -239,6 +238,11 @@ def main(): # pylint: disable=too-many-statements,too-many-branches,too-many-lo help=('Only output the IP address of the machine') ) + secrets_parser = subparsers.add_parser( + 'secrets', + help=("Show OAS cluster secrets")) + secrets_parser.set_defaults(func=secrets) + args = parser.parse_args() loglevel = logging.DEBUG if args.verbose else logging.INFO init_logging(log, loglevel) @@ -275,6 +279,16 @@ def info(clus, args): clus.print_info(args) +def secrets(clus, args): + """ + Dumps cluster secrets and then exits + + :param cluster.Cluster clus: cluster to show information about + """ + clus.load_data() + clus.dump_secrets(args) + + def create(clus, args): # pylint: disable=too-many-branches """ Parses arguments for the 'create' subcommand @@ -399,15 +413,15 @@ def test(clus, args): if 'taiko' in run_test: taiko_path = os.path.join(os.path.dirname(__file__), '..', 'test', - 'taiko') + 'taiko') # Run from the taiko directory so taiko automatically loads all the # necessary files os.chdir(taiko_path) clus.load_data() - command = [] + command = ['/bin/echo', 'hi'] if args.observe: command.append('--observe') - for tag in args.brows: + for tag in args.browser_args: log.info(command) command.append('-t {tag}'.format(tag=tag)) if args.browser_args: @@ -421,8 +435,10 @@ def test(clus, args): log.info('Running taiko command %s', command) taiko = Popen(command, stdout=PIPE) - # output = taiko.communicate()[0] + output = taiko.communicate()[0] return_code = (taiko.returncode) + print(return_code) + print(output) sys.exit(return_code) def create_domain_records(domain, droplet_ip, subdomain=None): diff --git a/openappstack/cluster.py b/openappstack/cluster.py index 3a15b99debf3abfc422fc65bb69c8163702c3ea1..fc4d474ee2656477e89a484a594ef095416bb9cb 100644 --- a/openappstack/cluster.py +++ b/openappstack/cluster.py @@ -257,76 +257,50 @@ KUBECONFIG={secret_dir}/kube_config_cluster.yml """Path where all the passwords for cluster admins are saved""" return os.path.join(self.cluster_dir, 'secrets') - def write_behave_config(self, config_path): + def dump_secrets(self, args): """ - Write behave config file for the cluster. - - :param str config_path: Configuration is written to config_path (e.g. - /home/you/openappstack/test/behave.ini). If config_path already - exists, the program is aborted. + Shows all OAS cluster secrets. """ - if os.path.isfile(config_path): - log.error('%s file already exists, not overwriting ' - 'file! Remove the file if you want to run behave. ' - 'Program will exit now', config_path) - sys.exit(2) - - grafana_admin_password = self.get_password_from_kubernetes( - 'kube-prometheus-stack-grafana', - 'admin-password', - 'oas') - - rocketchat_admin_password = self.get_password_from_kubernetes( - 'oas-rocketchat-variables', - 'rocketchat_admin_password', - 'flux-system') - - nextcloud_admin_password = self.get_password_from_kubernetes( - 'nc-nextcloud', - 'nextcloud-password', - 'oas-apps') - - wordpress_admin_password = self.get_password_from_kubernetes( - 'oas-wordpress-variables', - 'wordpress_admin_password', - 'flux-system') - - behave_config = configparser.ConfigParser() - behave_config['behave'] = {} - behave_config['behave']['format'] = 'rerun' - behave_config['behave']['outfiles'] = 'rerun_failing.features' - behave_config['behave']['show_skipped'] = 'false' - - behave_config['behave.userdata'] = {} - - behave_config['behave.userdata']['nextcloud.url'] = \ - 'https://files.{}'.format(self.domain) - behave_config['behave.userdata']['nextcloud.username'] = 'admin' - behave_config['behave.userdata']['nextcloud.password'] = \ - nextcloud_admin_password - behave_config['behave.userdata']['onlyoffice.url'] = \ - 'https://office.{}/welcome'.format(self.domain) - - behave_config['behave.userdata']['rocketchat.url'] = \ - 'https://chat.{}'.format(self.domain) - behave_config['behave.userdata']['rocketchat.username'] = 'admin' - behave_config['behave.userdata']['rocketchat.password'] = \ - rocketchat_admin_password - - behave_config['behave.userdata']['wordpress.url'] = \ - 'https://www.{}/wp-login.php'.format(self.domain) - behave_config['behave.userdata']['wordpress.username'] = 'admin' - behave_config['behave.userdata']['wordpress.password'] = \ - wordpress_admin_password - - behave_config['behave.userdata']['grafana.url'] = \ - 'https://grafana.{}'.format(self.domain) - behave_config['behave.userdata']['grafana.username'] = 'admin' - behave_config['behave.userdata']['grafana.password'] = \ - grafana_admin_password - - with open(config_path, 'w') as config_file: - behave_config.write(config_file) + + all_secrets = { + 'flux-system': { + 'oas-kube-prometheus-stack-variables': ['grafana_admin_password'], + 'oas-nextcloud-variables': [ + 'nextcloud_mariadb_password', + 'nextcloud_mariadb_root_password', + 'nextcloud_password', + 'onlyoffice_jwt_secret', + 'onlyoffice_postgresql_password', + 'onlyoffice_rabbitmq_password'], + 'oas-rocketchat-variables': [ + 'rocketchat_admin_password', + 'mongodb_root_password', + 'mongodb_password' ], + 'oas-single-sign-on-variables': [ + 'userbackend_admin_username', + 'userbackend_admin_password', + 'userbackend_postgres_password', + 'hydra_system_secret' ], + 'oas-wordpress-variables': [ + 'wordpress_admin_password', + 'wordpress_mariadb_password', + 'wordpress_mariadb_root_password' ] + } + + } + + for namespace in all_secrets: + sec = all_secrets[namespace] + for name in sec.items(): + app = name[0] + app_secrets = sec[app] + for app_secret in app_secrets: + secret = self.get_password_from_kubernetes( + app, + app_secret, + namespace) + # print(namespace, app, app_secret, secret ) + print(app_secret + '=' + secret ) def get_password_from_kubernetes(self, secret, key, namespace): """