Пример #1
0
    def update_minikube_in_hosts(self):
        self.get_minikube_ip()

        name = "Update minikube.local to /etc/hosts"
        cmd = "sed -i -e $'s/.*minikube.*/{0}\tminikube.local registry.minikube.local elasticsearch.minikube.local kibana.minikube.local  kafka.minikube.local rest.kafka.minikube.local grafana.minikube.local flink.minikube.local neo4j.minikube.local/' /etc/hosts".format(
            self.settings.master_ip)
        Static.msg(name, '.')
        Cmd.local_sudo_prompt_run(name, cmd)
Пример #2
0
    def add_minikube_to_hosts(self):
        self.get_minikube_ip()

        name = "Add minikube.local to /etc/hosts"
        cmd = "bash -c \"echo $'{0}\tminikube.local registry.minikube.local elasticsearch.minikube.local kibana.minikube.local kafka.minikube.local rest.kafka.minikube.local grafana.minikube.local flink.minikube.local neo4j.minikube.local' >> /etc/hosts\"".format(
            self.settings.master_ip)
        Static.msg(name, '.')
        Cmd.local_sudo_prompt_run(name, cmd)
Пример #3
0
    def taint_add_to_master_noschedule(self):

        name = "Add Taint Master. No Schedule"
        master_node = self.get_master_node()
        cmd = "kubectl taint nodes {0} node-role.kubernetes.io/master=:NoSchedule".format(
            master_node)
        Static.msg(name, master_node)
        Cmd.local_run_long(name, cmd)
Пример #4
0
 def registry_port_forward_enable(self):
     name = "Enable PortForward to Registy"
     cmd = "kubectl port-forward --namespace kube-system {0} 5000:5000 & echo $$! > {1}/port-forward.pid".format(
         self.settings.folder_user_populated, self.get_registry_pod())
     master_node = Cmd.local_run_get_out(name, cmd)
     Static.msg(name, master_node)
     Static.msg(">", cmd)
     return master_node
Пример #5
0
 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)
Пример #6
0
    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)
Пример #7
0
    def taint_remove_from_master(self):

        name = "Remove Taint Master"
        master_node = self.get_master_node()
        cmd = "kubectl taint nodes {0} node-role.kubernetes.io/master-".format(
            master_node)
        Static.msg(name, master_node)
        try:
            Cmd.local_run_long(name, cmd)
        except:
            pass
Пример #8
0
    def get_ingress_ips(self):
        name = "Get Ingress IPs"
        if self.get_context() == "minikube":
            cmd = "minikube ip"
            self.settings.ingress_ips.append(self.settings.master_ip)
        else:
            self.settings.ingress_ips = self.get_ig_ips(
                self.settings.cluster.ingress_instance_group)

        Static.msg(name, self.settings.ingress_ips)
        return self.settings.ingress_ips
Пример #9
0
    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)
Пример #10
0
 def validate_cluster(self):
     name = "VALIDATE CLUSTER"
     task = "Validate Provisioned Cluster"
     cmd = "kops validate cluster --name={0} --state={1} -v={2} 2>&1".format(
         self.settings.provision.domain,
         self.settings.provision.s3_store,
         self.settings.provision.kops_verbosity
     )
     print cmd
     Cmd.local_run_long_until_success(name, cmd)
     Static.msg("Provisioning of Kubernetes Cluster", "VERIFIED")
Пример #11
0
    def local_run_long_until_success(name, cmd):
        attempt = 1
        while attempt < 101:
            try:
                if attempt > 1:
                    Static.msg("RETRYING", "VALIDATE in 15s")
                    time.sleep(15)

                Cmd.local_run_long(name, cmd)
                return
            except:
                attempt += 1
Пример #12
0
    def registry_port_forward_disable(self):
        name = "Disable PortForward to Registy"

        cmd1 = "kill $(shell cat {0}/port-forward.pid) || true".format(
            self.settings.folder_user_populated)
        cmd1_out = Cmd.local_run_get_out(name, cmd1)
        cmd2 = "rm -f {0}/port-forward.pid".format(
            self.settings.folder_user_populated)
        cmd2_out = Cmd.local_run_get_out(name, cmd2)

        Static.msg(name, master_node)
        Static.msg(">", cmd)
        return master_node
Пример #13
0
 def use_context(self):
     name = "Kubectl Use Context"
     cmd = None
     context = None
     if self.settings.provision.cloud != "minikube":
         cmd = "kubectl config use-context {0}".format(
             self.settings.provision.domain)
         context = self.settings.provision.domain
     else:
         cmd = "kubectl config use-context minikube"
         context = "minikube"
     Static.msg(name, context)
     Cmd.local_run_long(name, cmd)
     print
Пример #14
0
    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)
Пример #15
0
    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()
Пример #16
0
    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()
Пример #17
0
    def local_run_long_until_ready(name, cmd):
        result = False
        while not result:
            proc1 = subprocess.Popen(cmd,
                                     stdout=subprocess.PIPE,
                                     stderr=subprocess.PIPE,
                                     shell=True,
                                     preexec_fn=os.setsid)
            proc1.wait()

            for line in iter(proc1.stdout.readline, ''):
                if not "ready: true" in line:
                    Static.msg("Waiting for", name.upper())
                    time.sleep(10)
                    continue

            Static.msg("Success for", name.upper())
            return
Пример #18
0
    def install(self, element):
        name = "INSTALL CHART"

        task = "Populate Chart Values"
        Static.msg(name, task)
        self.localtemplate.generate_template_element(element)


        # name autoassigned, replace to use same name, unsafe in prod, good for testing
        cmd = "helm upgrade --install --debug --namespace {1} --values={2} {0} {3}".format(
            element.release,
            element.name,
            self.localtemplate.path_populated,
            element.chart
        )

        print cmd
        Static.msg(name, "{0}".format(element.chart))
        Cmd.local_run_long(name, cmd)
Пример #19
0
    def get_master_ip(self):
        name = "Get Master IP"
        if self.get_context() == "minikube":
            cmd = "minikube ip"
            self.settings.master_ip = Cmd.local_run_get_out(name, cmd)
        else:
            cmd = "kubectl get nodes | grep master | sed 's/ .*//'"
            master_node = Cmd.local_run_get_out(name, cmd)
            ip_list = master_node.split(
                '-'
            )  # highly dependant on hostname not being changed from amazon default. find better way fast (example: 'ip-172-32-56-155.ec2.internal')
            self.settings.master_ip = '{0}.{1}.{2}.{3}'.format(
                ip_list[1],
                ip_list[2],
                ip_list[3],
                ip_list[4].split('.')[0],
            )

        Static.msg(name, self.settings.master_ip)
        return self.settings.master_ip
Пример #20
0
    def initialize_new_clusterfile(self):

        clusterfile_src = os.path.join(self.folder_app_clusters,
                                       self.args.init[0])
        clusterfile_dst = os.path.join(self.folder_user_clusters,
                                       self.args.init[1])

        if os.path.isfile(clusterfile_dst):
            print "DESTINATION FILE {0} ALREADY EXISTS".format(clusterfile_dst)

        if not os.path.isfile(clusterfile_src):
            print "SOURCE FILE {0} NOT FOUND".format(clusterfile_src)

        Static.msg("Initializing New Clusterfile", clusterfile_dst)

        Cmd.local_run_get_out(
            "INITIATED CLUSTERFILE {0}".format(clusterfile_src),
            "cp {0} {1}".format(clusterfile_src, clusterfile_dst))

        self.settings.clusterfile = clusterfile_dst
        self.save_settings_file()
Пример #21
0
    def add_instance_group(self, name):
        single_ig = Struct(**list(filter(lambda d: d['name'] in [name], self.settings.provision.instance_groups))[0])
        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)
Пример #22
0
 def get_nodes(self):
     name = "Get Nodes"
     cmd = "kubectl get nodes --show-labels -o wide"
     Static.msg(name, self.settings.provision.domain)
     Cmd.local_run_long(name, cmd)
     print
Пример #23
0
 def get_registry_pod(self):
     name = "Get Registry Pod"
     cmd = "kubectl get pods --namespace kube-system -l k8s-app=kube-registry-upstream -o template --template '{{range .items}}{{.metadata.name}} {{.status.phase}}{{\"\\n\"}}{{end}}'"
     master_node = Cmd.local_run_get_out(name, cmd).split(' ')[0]
     Static.msg(name, master_node)
     return master_node
Пример #24
0
 def get_context(self):
     name = "kubectl config current-context"
     cmd = "kubectl config current-context"
     self.settings.current_context = Cmd.local_run_get_out(name, cmd)
     Static.msg(name, self.settings.current_context)
     return self.settings.current_context
Пример #25
0
    def apply(self, component_item):

        cmd = "kubectl apply -f {0}/{1}".format(
            self.settings.folder_user_populated, component_item.template)
        Static.msg("Adding Component", component_item.name)
        Cmd.local_run_long(component_item.name, cmd)
Пример #26
0
 def wait_until_kube_system_ready(self):
     name = "Wait Until Kube-System Ready"
     cmd = "kubectl get pods -n kube-system -o=yaml | grep 'ready: true'"
     Static.msg(name, "")
     Cmd.local_run_long_until_ready(name, cmd)
Пример #27
0
 def get_all_on_namespace(self, name):
     cmd = "kubectl get pods,svc,ing --namespace={0}".format(name)
     Static.msg("Displaying status of namespace", name)
     Cmd.local_run_long("Get Namespace Details", cmd)
Пример #28
0
 def get_ing(self):
     name = "Get Ingress"
     cmd = "kubectl get ing --all-namespaces"
     Static.msg(name, self.settings.provision.domain)
     Cmd.local_run_long(name, cmd)
     print
Пример #29
0
 def get_svc(self):
     name = "Get Services"
     cmd = "kubectl get svc --all-namespaces"
     Static.msg(name, self.settings.provision.domain)
     Cmd.local_run_long(name, cmd)
     print
Пример #30
0
 def get_pods(self):
     name = "Get Pods (sorted by nodeName)"
     cmd = 'kubectl get pods --all-namespaces -o wide --sort-by="{.spec.nodeName}"'
     Static.msg(name, self.settings.provision.domain)
     Cmd.local_run_long(name, cmd)
     print