def setup(self): scout = Scout("forge", __version__) scout_res = scout.report() print self.terminal.bold("== Checking Kubernetes Setup ==") print checks = (("kubectl", "version", "--short"), ("kubectl", "get", "service", "kubernetes", "--namespace", "default")) for cmd in checks: e = sh.run(*cmd) if e.result is ERROR: print raise CLIError( self.terminal.red("== Kubernetes Check Failed ==") + "\n\nPlease make sure kubectl is installed/configured correctly." ) registry = "registry.hub.docker.com" repo = None user = os.environ.get("USER", "") password = None json_key = None @task() def validate(): dr = Docker(registry, repo, user, password) dr.validate() print print self.terminal.bold("== Setting up Docker ==") while True: print registry = self.prompt("Docker registry", registry) user = self.prompt("Docker user", user) repo = self.prompt("Docker organization", user) if user == "_json_key": json_key, password = self.prompt("Path to json key", json_key, loader=file_contents) else: password = self.prompt("Docker password", echo=False) print e = validate.run( task_include=lambda x: x.task.name in ('pull', 'push', 'tag')) if e.result is ERROR: print print self.terminal.red("-- please try again --") continue else: break print config = renders("SETUP_TEMPLATE", SETUP_TEMPLATE, docker="%s/%s" % (registry, repo), user=user, password=base64.encodestring(password).replace( "\n", "\n ")) config_file = "forge.yaml" print self.terminal.bold("== Writing config to %s ==" % config_file) with open(config_file, "write") as fd: fd.write(config) print print config.strip() print print self.terminal.bold("== Done ==")
def setup(self): with task.verbose(True): scout = Scout("forge", __version__) scout_res = scout.report() task.echo(self.terminal.bold("== Checking Kubernetes Setup ==")) task.echo() checks = (("kubectl", "version", "--short"), ("kubectl", "get", "service", "kubernetes", "--namespace", "default")) for cmd in checks: e = sh.run(*cmd) if e.result is ERROR: task.echo() task.echo(self.terminal.bold_red("== Kubernetes Check Failed ==")) task.echo() task.echo() task.echo(self.terminal.bold("Please make sure kubectl is installed/configured correctly.")) raise TaskError("") regtype = "generic" prompts = { ("generic", "url"): ("Docker registry url", "registry.hub.docker.com"), ("generic", "user"): ("Docker user", None), ("generic", "namespace"): ("Docker namespace/organization (enter username again for standard accounts)", None), ("generic", "password"): ("Docker password", None), ("gcr", "key"): ["Path to json key, leave unspecified to use gcloud auth", None] } @task() def validate(): c = yaml.dump({"registry": regvalues}) task.echo(c) conf = config.load("setup", c) dr = get_docker(conf.registry) dr.validate() task.echo() task.echo(self.terminal.bold("== Setting up Docker ==")) while True: task.echo() types = OrderedDict((("ecr", config.ECR), ("gcr", config.GCR), ("generic", config.DOCKER))) regtype = self.prompt("Registry type (one of %s)" % ", ".join(types.keys()), regtype) if regtype not in types: task.echo() task.echo( self.terminal.red("%s is not a valid choice, please choose one of %s" % (regtype, ", ".join(types.keys()))) ) task.echo() regtype = "generic" continue reg = types[regtype] regvalues = OrderedDict((("type", reg.fields["type"].type.value),)) for f in reg.fields.values(): if f.name in ("type", "verify"): continue prompt, default = prompts.get((regtype, f.name), (f.name, None)) if (regtype, f.name) == ("gcr", "key"): key, value = self.prompt(prompt, default, optional=True, loader=file_contents) prompts[(regtype, f.name)][1] = key else: if f.name in ("password",): if regvalues["user"] is not None: value = self.prompt(prompt, default, echo=False) else: value = None else: value = self.prompt(prompt, default, optional=not f.required) if f.name in ("password", "key"): if value: regvalues[f.name] = base64.encodestring(value) else: regvalues[f.name] = value task.echo() e = validate.run() if e.result is ERROR: task.echo() task.echo(self.terminal.red("-- please try again --")) e.recover() continue else: break task.echo() config_content = renders("SETUP_TEMPLATE", SETUP_TEMPLATE, yaml=yaml.dump({"registry": regvalues}, allow_unicode=True, default_flow_style=False)) config_file = "forge.yaml" task.echo(self.terminal.bold("== Writing config to %s ==" % config_file)) with open(config_file, "write") as fd: fd.write(config_content) task.echo() task.echo(config_content.strip()) task.echo() task.echo(self.terminal.bold("== Done =="))