def destroy(self): Static.figletcyber("DESTROY CLUSTER") if self.settings.provision.cloud == "aws": self.kops.destroy_cluster() elif self.settings.provision.cloud == "minikube": self.minikube.delete() else: Static.msg_bold("No such provisioner specified in config", self.settings.provision.cloud) raise SystemExit(32)
def kubectl_install_elements(self, stage): name = "ELEMENTS" Static.figletcyber('{0} {1}'.format(name, stage.upper())) self.CmdKubectl.get_master_ip() self.CmdKubectl.get_ingress_ips() for element in self.settings.elements[stage]: self.create_stage(element)
def mini_hostname(self): Static.figletcyber("HOSTNAME") if self.minikube.is_minikube_in_hosts(): # replace, exists self.minikube.update_minikube_in_hosts() else: # append, new self.minikube.add_minikube_to_hosts() Static.msg("/etc/hosts entry for minikube.local updated to", self.settings.master_ip)
def destroy_cluster(self): name = "DESTROY CLUSTER" Static.figletcyber(name) cmd = "kops delete cluster --state={0} {1} --yes".format( self.settings.provision.s3_store, self.settings.provision.domain ) Static.msg(name, "KOPS: aws") Cmd.local_run_realtime_continue_on_fail(name, cmd)
def check_alive(self): Static.figletcyber("STATUS") # not implemented if self.settings.provision.cloud == "aws": pass elif self.settings.provision.cloud == "minikube": pass else: Static.msg_bold("No such provisioner specified in config", self.settings.provision.cloud) raise SystemExit(32)
def add_instance_group(self, ig): name = "ADD INSTANCE GROUP" Static.figletcyber(name) cmd = "kops create ig {0} --state={1} {2}".format( ig.name, self.settings.provision.s3_store, self.settings.provision.domain ) Static.msg(name, "KOPS: aws") Cmd.local_run_long(name, cmd)
def start(self): Static.figletcyber("PROVISIONING") if self.settings.provision.cloud == "aws": self.kops.create_cluster() self.kops.update_settings() self.kops.provision_cluster() elif self.settings.provision.cloud == "minikube": self.minikube.config_vm_virtualbox() self.minikube.start() self.minikube.confirm_started() else: Static.msg_bold("No such provisioner specified in config", self.settings.provision.cloud) raise SystemExit(32)
def create_cluster(self): name = "CREATE CLUSTER" Static.figletcyber(name) cmd = "kops create cluster --zones {0} --vpc {1} --dns-zone={2} --state={3} {4}".format( self.settings.aws_zone, self.settings.provision.vpc_id, self.settings.provision.dnszone_id, self.settings.provision.s3_store, self.settings.provision.domain ) print cmd Static.msg(name, "KOPS: aws") Cmd.local_run_long(name, cmd)
def update_cluster(self): name = "UPDATE CLUSTER" Static.figletcyber(name) task = "Rolling Update CLuster" cmd = "kops rolling-update cluster {0} --state={1} --yes -v={2} 2>&1".format( self.settings.provision.domain, self.settings.provision.s3_store, self.settings.provision.kops_verbosity ) Static.msg(name, task) print cmd Cmd.local_run_long(name, cmd) self.validate_cluster()
def provision_cluster(self): name = "PROVISION CLUSTER" Static.figletcyber(name) task = "Provision in Cloud" cmd = "kops update cluster {0} --state={1} --yes -v={2} 2>&1".format( self.settings.provision.domain, self.settings.provision.s3_store, self.settings.provision.kops_verbosity ) Static.msg(name, task) print cmd Cmd.local_run_long(name, cmd) self.validate_cluster()
def main(args=None): description = colored( "Madcore CLI {0} - (c) 2016-2018 Madcore Ltd <https://madcore.ai>". format(get_version()), 'white', attrs=['bold']) parser = MyParser(prog="./madcore.py", description=description) group = parser.add_mutually_exclusive_group() group.add_argument('-p', '--provision', dest="provision", metavar=('CLUSTERFILE'), help='provision based on <cllusterfile>', action='store') group.add_argument('-c', '--clusterfile', dest="clusterfile", metavar=('CLUSTERFILE'), help='set default clusterfile to input <clusterfile>', action='store') group.add_argument( '-i', '--init', dest="init", metavar=('SOURCE_CLUSTERFILE', 'NEW_CLUSTERFILE'), nargs=2, help= 'initialize new yaml clusterfile using existing from template folder', action='store') group.add_argument('--destroy', help='destroy infrastructure', action='store_true') group.add_argument('--kops-update', help='kops update', action='store_true') group.add_argument('--kops-validate', help='kopds validate', action='store_true') group.add_argument('--kubectl-use-context', help='kubectl use context', action='store_true') group.add_argument('--mini-hostname', help='set minikube hostname (will sudo)', action='store_true') group.add_argument('--get-attr', dest="attr", help='get atribute', action='store') group.add_argument('--install-core', help='install core of Madcore', action='store_true') group.add_argument('--install-elk', help='install elk', action='store_true') group.add_argument('--install-neo4j', help='install neo4j', action='store_true') group.add_argument('--install-kafka', help='install apache kafka', action='store_true') group.add_argument('--install-flink', help='install apache flink', action='store_true') group.add_argument('--install-scrapy', help='install scrapy cluster', action='store_true') group.add_argument('--install-scrapyrc', help='install scrapy rc cluster', action='store_true') group.add_argument('--install-tron', help='install tron network', action='store_true') group.add_argument('--install-storm', help='install storm', action='store_true') group.add_argument('--install-keycloak', help='install keycloak', action='store_true') group.add_argument('--install-cert-manager', help='install cert manager', action='store_true') group.add_argument('--install-postgresql', help='install postgresql', action='store_true') args = parser.parse_args() if not args.attr: print print description print args = parser.parse_args() sett = settings.Settings(args) if args.provision: sett.set_clusterfile() sett.save_settings_file() sett.load_clusterfile() prov = provision.Provision(sett) prov.start() return elif args.clusterfile: # switch happens in settings sett.set_clusterfile() sett.save_settings_file() sett.load_clusterfile() kc = cmdkubectl.CmdKubectl(sett) kc.use_context() return elif args.init: sett.initialize_new_clusterfile() kc = cmdkubectl.CmdKubectl(sett) kc.get_context() return # settings for the sett.set_clusterfile() sett.save_settings_file() sett.load_clusterfile() sett.set_zone() if args.destroy: prov = provision.Provision(sett) prov.destroy() elif args.kops_update: kops = cmdkops.CmdKops(sett) kops.update_settings() elif args.kops_validate: kops = cmdkops.CmdKops(sett) kops.validate_cluster() elif args.install_core: el = elements.Elements(sett) el.install_elements("core") elif args.install_elk: el = elements.Elements(sett) el.install_elements("elk") elif args.install_neo4j: el = elements.Elements(sett) el.install_elements("neo4j") elif args.install_kafka: el = elements.Elements(sett) el.install_elements("kafka") elif args.install_flink: el = elements.Elements(sett) el.install_elements("flink") elif args.install_scrapy: el = elements.Elements(sett) el.install_elements("scrapy") elif args.install_scrapyrc: el = elements.Elements(sett) el.install_elements("scrapyrc") elif args.install_storm: el = elements.Elements(sett) el.install_elements("storm") elif args.install_tron: el = elements.Elements(sett) el.install_elements("tron") elif args.install_keycloak: el = elements.Elements(sett) el.install_elements("keycloak") elif args.install_cert_manager: el = elements.Elements(sett) el.install_elements("certmanager") elif args.install_postgresql: el = elements.Elements(sett) el.install_elements("postgresql") elif args.kubectl_use_context: kc = cmdkubectl.CmdKubectl(sett) kc.use_context() elif args.mini_hostname: prov = provision.Provision(sett) prov.mini_hostname() elif args.attr: if args.attr == "domain": sys.stdout.write(settings.provision.domain) else: Static.figletcyber("STATUS") kc = cmdkubectl.CmdKubectl(sett) kc.get_nodes() kc.get_pods() kc.get_svc() kc.get_ing()
def update_settings(self): name = "UPDATE KOPS SETTINGS" Static.figletcyber(name) # CLUSTER ==== task = "Get Kops Cluster settings" cmd = "kops get cluster -oyaml --state={0} > {1}/remote.{2}".format( self.settings.provision.s3_store, self.settings.folder_user_populated, self.file_local_cluster) Static.msg(name, task) Cmd.local_run_long(name, cmd) task = "Render Cluster Template" Static.msg(name, task) self.localtemplate.generate_template(self.file_local_cluster) task = "Update Kops Clusters settings" cmd = "kops replace -f {0}/{1} --state={2}".format( self.settings.folder_user_populated, self.file_local_cluster, self.settings.provision.s3_store ) Static.msg(name, task) Cmd.local_run_long(name, cmd) # MASTER ==== task = "Get Kops Master settings" cmd = "kops get ig --name={0} master-{1} -oyaml --state={2} > {3}/remote.{4}".format( self.settings.provision.domain, self.settings.aws_zone, self.settings.provision.s3_store, self.settings.folder_user_populated, self.file_local_master) Static.msg(name, task) Cmd.local_run_long(name, cmd) task = "Render Master Template" Static.msg(name, task) self.localtemplate.generate_template(self.file_local_master) task = "Update Kops Master settings" cmd = "kops replace -f {0}/{1} --state={2}".format( self.settings.folder_user_populated, self.file_local_master, self.settings.provision.s3_store ) Static.msg(name, task) Cmd.local_run_long(name, cmd) # INSTANCE_GROUPS ==== for ig in self.settings.provision.instance_groups: single_ig = Struct(**ig) populated_ig_file = self.get_ig_filename(single_ig.name) task = "Get Kops Instance Group {0} settings".format(single_ig.name) cmd = "kops get ig --name={0} nodes -oyaml --state={1} > {2}/remote.{3}".format( self.settings.provision.domain, self.settings.provision.s3_store, self.settings.folder_user_populated, populated_ig_file) Static.msg(name, task) Cmd.local_run_long(name, cmd) task = "Render Instance Group {0} Template".format(single_ig.name) Static.msg(name, task) self.localtemplate.generate_template_node(self.file_local_nodes, populated_ig_file, single_ig) task = "Update Kops Instance Group {0} settings".format(single_ig.name) cmd = "kops replace -f {0}/{1} --state={2} --force".format( self.settings.folder_user_populated, populated_ig_file, self.settings.provision.s3_store ) Static.msg(name, task) Cmd.local_run_long(name, cmd) print