diff --git a/kqueen/config/demo.py b/kqueen/config/demo.py index e2a00cca..89a26a5a 100644 --- a/kqueen/config/demo.py +++ b/kqueen/config/demo.py @@ -10,9 +10,9 @@ class Config(BaseConfig): # App secret - set this to random string >= 16 chars # SECRET_KEY = 'secret' - # Jenkins engine settings - JENKINS_API_URL = 'https://ci.mcp.mirantis.net' - JENKINS_PROVISION_JOB_NAME = 'deploy_aws_k8s_kqueen_job' + # Set up this to enable Jenkins provisioner: + JENKINS_API_URL = '' + JENKINS_PROVISION_JOB_NAME = '' JENKINS_PROVISION_JOB_CTX = {} JENKINS_DEPROVISION_JOB_NAME = 'deploy-stack-cleanup' JENKINS_DEPROVISION_JOB_CTX = { @@ -33,16 +33,3 @@ class Config(BaseConfig): # Creds for Kqueen Read-only user LDAP_DN = 'cn=admin,dc=example,dc=org' LDAP_PASSWORD = 'heslo123' - - # Images for Kubespray (available images that can be provided are listed in the link below) - # https://github.com/kubernetes-incubator/kubespray/blob/master/roles/download/defaults/main.yml - HYPERKUBE_IMAGE_REPO = 'docker-prod-local.docker.mirantis.net/mirantis/kubernetes/hyperkube-amd64' - HYPERKUBE_IMAGE_TAG = 'v1.9.8-4' - CALICO_CNI_IMAGE_REPO = 'docker-prod-local.docker.mirantis.net/mirantis/projectcalico/calico/cni' - CALICO_CNI_IMAGE_TAG = 'v1.11.6' - CALICOCTL_IMAGE_REPO = 'docker-prod-local.docker.mirantis.net/mirantis/projectcalico/calico/ctl' - CALICOCTL_IMAGE_TAG = 'v1.6.4' - CALICO_NODE_IMAGE_REPO = 'docker-prod-local.docker.mirantis.net/mirantis/projectcalico/calico/node' - CALICO_NODE_IMAGE_TAG = 'v2.6.10' - POD_INFRA_IMAGE_REPO = 'docker-prod-local.docker.mirantis.net/mirantis/kubernetes/pause-amd64' - POD_INFRA_IMAGE_TAG = 'v1.10.4-4' diff --git a/kqueen/config/demo_mirantis.py b/kqueen/config/demo_mirantis.py new file mode 100644 index 00000000..393baa60 --- /dev/null +++ b/kqueen/config/demo_mirantis.py @@ -0,0 +1,50 @@ +from .base import BaseConfig + + +class Config(BaseConfig): + DEBUG = False + LOG_CONFIG = 'kqueen/utils/logger_config.yml' + + KQUEEN_HOST = '0.0.0.0' + + # App secret - set this to random string >= 16 chars + # SECRET_KEY = 'secret' + + # Jenkins engine settings + JENKINS_API_URL = 'https://ci.mcp.mirantis.net' + JENKINS_PROVISION_JOB_NAME = 'deploy_aws_k8s_kqueen_job' + JENKINS_PROVISION_JOB_CTX = {} + JENKINS_DEPROVISION_JOB_NAME = 'deploy-stack-cleanup' + JENKINS_DEPROVISION_JOB_CTX = { + 'STACK_TYPE': 'aws' + } + JENKINS_PARAMETER_MAP = { + 'cluster_name': 'STACK_NAME', + 'cluster_uuid': 'KQUEEN_BUILD_ID' + } + JENKINS_USERNAME = None + JENKINS_PASSWORD = None + + # Enabled AUTH modules + AUTH_MODULES = 'local,ldap' + + # Ldap config + LDAP_URI = 'ldap://127.0.0.1' + # Creds for Kqueen Read-only user + LDAP_DN = 'cn=admin,dc=example,dc=org' + LDAP_PASSWORD = 'heslo123' + + # Images for Kubespray (available images that can be provided are listed in the link below) + # https://github.com/kubernetes-incubator/kubespray/blob/master/roles/download/defaults/main.yml + HYPERKUBE_IMAGE_REPO = 'docker-prod-local.docker.mirantis.net/mirantis/kubernetes/hyperkube-amd64' + HYPERKUBE_IMAGE_TAG = 'v1.9.8-4' + CALICO_CNI_IMAGE_REPO = 'docker-prod-local.docker.mirantis.net/mirantis/projectcalico/calico/cni' + CALICO_CNI_IMAGE_TAG = 'v1.11.6' + CALICOCTL_IMAGE_REPO = 'docker-prod-local.docker.mirantis.net/mirantis/projectcalico/calico/ctl' + CALICOCTL_IMAGE_TAG = 'v1.6.4' + CALICO_NODE_IMAGE_REPO = 'docker-prod-local.docker.mirantis.net/mirantis/projectcalico/calico/node' + CALICO_NODE_IMAGE_TAG = 'v2.6.10' + POD_INFRA_IMAGE_REPO = 'docker-prod-local.docker.mirantis.net/mirantis/kubernetes/pause-amd64' + POD_INFRA_IMAGE_TAG = 'v1.10.4-4' + + KS_DEFAULT_NAMESERVERS = "172.18.80.136, 1.1.1.1" diff --git a/kqueen/engines/openstack_kubespray.py b/kqueen/engines/openstack_kubespray.py index 4a06534f..b07a6eb0 100644 --- a/kqueen/engines/openstack_kubespray.py +++ b/kqueen/engines/openstack_kubespray.py @@ -12,7 +12,6 @@ import shlex import shutil import subprocess -import sys import time import yaml import uuid @@ -236,6 +235,9 @@ def _run_provisioning(self): self.cluster.state = config.CLUSTER_ERROR_STATE logger.exception("Failed to provision cluster: %s" % e) self.cluster.metadata['status_message'] = getattr(e, 'details', repr(e)) + if getattr(self.ks, 'ansible_log'): + self.cluster.metadata['status_message'] += "\n More details can be found " \ + "at {}".format(self.ks.ansible_log) finally: self.cluster.save() @@ -569,19 +571,19 @@ def _run_ansible(self, inventory="hosts.json", playbook="cluster.yml"): "--extra-vars", "docker_dns_servers_strict=no", ] env = self._construct_env() - # TODO(sskripnick) Maybe collect out/err from pipe and log them - # separately. - pipe = subprocess.Popen( - args, - stdin=subprocess.DEVNULL, - stdout=sys.stdout, - stderr=sys.stderr, - cwd=self.kubespray_path, - env=env, - ) - pipe.wait() - if pipe.returncode: - logger.warning("Non zero exit status from ansible (%s)" % pipe.returncode) + self.ansible_log = os.path.join(self._get_cluster_path(), "ansible_log.txt") + with open(self.ansible_log, "a+") as log_file: + pipe = subprocess.Popen( + args, + stdin=subprocess.DEVNULL, + stdout=log_file, + stderr=subprocess.STDOUT, + cwd=self.kubespray_path, + env=env, + ) + pipe.wait() + if pipe.returncode: + logger.warning("Non zero exit status from ansible (%s)" % pipe.returncode) def _get_kubeconfig(self, ip): cat_kubeconf = "sudo cat /etc/kubernetes/admin.conf"