Exemple #1
0
 def start(self):
     result = {"raw": {}, "summary": {}}
     pre_deploy_execution_start.send(self.__class__, execution=self)
     cluster = Cluster.objects.get(id=self.project.id)
     hostname = Setting.objects.get(key='local_hostname')
     domain_suffix = Setting.objects.get(key="domain_suffix")
     extra_vars = {
         "cluster_name": cluster.name,
         "local_hostname": hostname.value,
         "domain_suffix": domain_suffix.value
     }
     ignore_errors = False
     try:
         if self.operation == "install":
             cluster.change_status(Cluster.CLUSTER_STATUS_INSTALLING)
             result = self.on_install(extra_vars)
             cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
         elif self.operation == 'uninstall':
             cluster.change_status(Cluster.CLUSTER_STATUS_DELETING)
             result = self.on_uninstall(extra_vars)
             cluster.change_status(Cluster.CLUSTER_STATUS_READY)
         elif self.operation == 'bigip-config':
             ignore_errors = True
             result = self.on_f5_config(extra_vars)
     except Exception as e:
         print('Unexpect error occur: {}'.format(e))
         if not ignore_errors:
             cluster.change_status(Cluster.CLUSTER_STATUS_ERROR)
         logger.error(e, exc_info=True)
         result['summary'] = {'error': 'Unexpect error occur: {}'.format(e)}
     post_deploy_execution_start.send(self.__class__, execution=self, result=result, ignore_errors=ignore_errors)
     return result
Exemple #2
0
 def start(self):
     result = {"raw": {}, "summary": {}}
     pre_deploy_execution_start.send(self.__class__, execution=self)
     cluster = Cluster.objects.get(id=self.project.id)
     hostname = Setting.objects.get(key='local_hostname')
     extra_vars = {
         "cluster_name": cluster.name,
         "local_hostname": hostname.value
     }
     try:
         if self.operation == "install":
             cluster.change_status(Cluster.CLUSTER_STATUS_INSTALLING)
             result = self.on_install(extra_vars)
             cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
         elif self.operation == 'uninstall':
             cluster.change_status(Cluster.CLUSTER_STATUS_DELETING)
             result = self.on_uninstall(extra_vars)
             cluster.change_status(Cluster.CLUSTER_STATUS_READY)
         elif self.operation == 'bigip-config':
             cluster.change_status(Cluster.CLUSTER_STATUS_INSTALLING)
             result = self.on_f5_config(extra_vars)
             cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
     except Exception as e:
         cluster.change_status(Cluster.CLUSTER_STATUS_ERROR)
         result['summary'] = {'error': 'Unexpect error occur: {}'.format(e)}
     post_deploy_execution_start.send(self.__class__,
                                      execution=self,
                                      result=result)
     return result
Exemple #3
0
    def start(self):
        result = {"raw": {}, "summary": {}}
        pre_deploy_execution_start.send(self.__class__, execution=self)
        cluster = self.get_cluster()
        hostname = Setting.objects.get(key='local_hostname')
        domain_suffix = Setting.objects.get(key="domain_suffix")
        extra_vars = {
            "cluster_name": cluster.name,
            "local_hostname": hostname.value,
            "domain_suffix": domain_suffix.value,
            "APP_DOMAIN": "apps.{}.{}".format(cluster.name,
                                              domain_suffix.value)
        }

        extra_vars.update(cluster.configs)
        ignore_errors = False
        try:
            if self.operation == "install":
                cluster.change_status(Cluster.CLUSTER_STATUS_INSTALLING)
                result = self.on_install(extra_vars)
                cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
            elif self.operation == 'uninstall':
                cluster.change_status(Cluster.CLUSTER_STATUS_DELETING)
                result = self.on_uninstall(extra_vars)
                cluster.change_status(Cluster.CLUSTER_STATUS_READY)
            elif self.operation == 'bigip-config':
                ignore_errors = True
                result = self.on_f5_config(extra_vars)
            elif self.operation == 'upgrade':
                cluster.change_status(Cluster.CLUSTER_STATUS_UPGRADING)
                package_name = self.params.get('package', None)
                package = Package.objects.get(name=package_name)
                extra_vars.update(package.meta.get('vars'))
                result = self.on_upgrade(extra_vars)
                cluster.upgrade_package(package_name)
                cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
            elif self.operation == 'scale':
                ignore_errors = True
                cluster.change_status(Cluster.CLUSTER_DEPLOY_TYPE_SCALING)
                result = self.on_scaling(extra_vars)
                cluster.exit_new_node()
                cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
            elif self.operation == 'restore':
                cluster.change_status(Cluster.CLUSTER_STATUS_RESTORING)
                cluster_backup_id = self.params.get('clusterBackupId', None)
                result = self.on_restore(extra_vars, cluster_backup_id)
                cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)

        except Exception as e:
            print('Unexpect error occur: {}'.format(e))
            if not ignore_errors:
                cluster.change_status(Cluster.CLUSTER_STATUS_ERROR)
            logger.error(e, exc_info=True)
            result['summary'] = {'error': 'Unexpect error occur: {}'.format(e)}
        post_deploy_execution_start.send(self.__class__,
                                         execution=self,
                                         result=result,
                                         ignore_errors=ignore_errors)
        return result
Exemple #4
0
 def start(self):
     result = {"raw": {}, "summary": {}}
     pre_deploy_execution_start.send(self.__class__, execution=self)
     cluster = Cluster.objects.filter(id=self.project.id).first()
     hostname = Setting.objects.get(key='local_hostname')
     cluster.status = Cluster.status = Cluster.CLUSTER_STATUS_INSTALLING
     cluster.save()
     template = None
     extra_vars = {
         "cluster_name": cluster.name,
         "local_hostname": hostname.value
     }
     for temp in cluster.package.meta.get('templates', []):
         if temp['name'] == cluster.template:
             template = temp
     try:
         for opt in template.get('operations', []):
             if opt['name'] == self.operation:
                 status_set = self.operation['status_change']
                 playbooks = []
                 cluster_playbooks = opt.get('playbooks', [])
                 playbooks.extend(cluster_playbooks)
                 total_palybook = len(playbooks)
                 current = 0
                 cluster.status = status_set['on']
                 cluster.save()
                 for playbook_name in playbooks:
                     print("\n>>> Start run {} ".format(playbook_name))
                     self.current_play = playbook_name
                     self.save()
                     playbook = self.project.playbook_set.get(
                         name=playbook_name)
                     _result = playbook.execute(extra_vars=extra_vars)
                     result["summary"].update(_result["summary"])
                     if not _result.get('summary', {}).get(
                             'success', False):
                         cluster.status = status_set['failed']
                         cluster.save()
                         break
                     current = current + 1
                     self.progress = current / total_palybook * 100
                     self.save()
         cluster.status = cluster.status_set['succeed']
         cluster.save()
     except Exception as e:
         logger.error(e, exc_info=True)
         cluster.status = Cluster.CLUSTER_STATUS_ERROR
         cluster.save()
         result['summary'] = {'error': 'Unexpect error occur: {}'.format(e)}
     post_deploy_execution_start.send(self.__class__,
                                      execution=self,
                                      result=result)
     return result
Exemple #5
0
    def start(self):
        result = {"raw": {}, "summary": {}}
        pre_deploy_execution_start.send(self.__class__, execution=self)
        cluster = self.get_cluster()
        settings = Setting.get_settings()
        extra_vars = {
            "cluster_name": cluster.name,
        }
        extra_vars.update(settings)
        extra_vars.update(cluster.configs)
        ignore_errors = False
        return_running = False

        if self.operation == "install":
            logger.info(
                msg="cluster: {} exec: {} ".format(cluster, self.operation))
            cluster.change_status(Cluster.CLUSTER_STATUS_INSTALLING)
            result = self.on_install(extra_vars)
            cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
        elif self.operation == 'uninstall':
            logger.info(
                msg="cluster: {} exec: {} ".format(cluster, self.operation))
            cluster.change_status(Cluster.CLUSTER_STATUS_DELETING)
            result = self.on_uninstall(extra_vars)
            cluster_monitor = ClusterMonitor(cluster)
            cluster_monitor.delete_cluster_redis_data()
            cluster.change_status(Cluster.CLUSTER_STATUS_READY)
        elif self.operation == 'bigip-config':
            logger.info(
                msg="cluster: {} exec: {} ".format(cluster, self.operation))
            ignore_errors = True
            result = self.on_f5_config(extra_vars)
        elif self.operation == 'upgrade':
            logger.info(
                msg="cluster: {} exec: {} ".format(cluster, self.operation))
            cluster.change_status(Cluster.CLUSTER_STATUS_UPGRADING)
            package_name = self.params.get('package', None)
            package = Package.objects.get(name=package_name)
            extra_vars.update(package.meta.get('vars'))
            result = self.on_upgrade(extra_vars)
            cluster.upgrade_package(package_name)
            cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
        elif self.operation == 'scale':
            logger.info(
                msg="cluster: {} exec: {} ".format(cluster, self.operation))
            ignore_errors = True
            return_running = True
            cluster.change_status(Cluster.CLUSTER_DEPLOY_TYPE_SCALING)
            result = self.on_scaling(extra_vars)
            cluster.exit_new_node()
            cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
        elif self.operation == 'add-worker':
            logger.info(
                msg="cluster: {} exec: {} ".format(cluster, self.operation))
            ignore_errors = True
            return_running = True
            cluster.change_status(Cluster.CLUSTER_DEPLOY_TYPE_SCALING)
            result = self.on_add_worker(extra_vars)
            cluster.exit_new_node()
            cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
        elif self.operation == 'remove-worker':
            logger.info(
                msg="cluster: {} exec: {} ".format(cluster, self.operation))
            ignore_errors = True
            return_running = True
            cluster.change_status(Cluster.CLUSTER_DEPLOY_TYPE_SCALING)
            result = self.on_remove_worker(extra_vars)
            if not result.get('summary', {}).get('success', False):
                cluster.exit_new_node()
            else:
                node_name = self.params.get('node', None)
                cluster.change_to()
                node = Node.objects.get(name=node_name)
                node.delete()
                cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
        elif self.operation == 'restore':
            logger.info(
                msg="cluster: {} exec: {} ".format(cluster, self.operation))
            cluster.change_status(Cluster.CLUSTER_STATUS_RESTORING)
            cluster_backup_id = self.params.get('clusterBackupId', None)
            result = self.on_restore(extra_vars, cluster_backup_id)
            cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
        elif self.operation == 'backup':
            logger.info(
                msg="cluster: {} exec: {} ".format(cluster, self.operation))
            cluster.change_status(Cluster.CLUSTER_STATUS_BACKUP)
            cluster_storage_id = self.params.get('backupStorageId', None)
            result = self.on_backup(extra_vars)
            self.on_upload_backup_file(cluster_storage_id)
            cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
        if not result.get('summary', {}).get('success', False):
            if not ignore_errors:
                cluster.change_status(Cluster.CLUSTER_STATUS_ERROR)
            if return_running:
                cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
            logger.error(msg=":cluster {} exec {} error".format(
                cluster, self.operation),
                         exc_info=True)
        post_deploy_execution_start.send(self.__class__,
                                         execution=self,
                                         result=result,
                                         ignore_errors=ignore_errors)
        return result
Exemple #6
0
 def start(self):
     result = {"raw": {}, "summary": {}}
     pre_deploy_execution_start.send(self.__class__, execution=self)
     cluster = self.get_cluster()
     settings = Setting.get_db_settings()
     extra_vars = {
         "cluster_name": cluster.name,
         "cluster_domain": cluster.cluster_doamin_suffix
     }
     extra_vars.update(settings)
     extra_vars.update(cluster.configs)
     ignore_errors = False
     return_running = False
     message_client = MessageClient()
     message = {
         "item_id": cluster.item_id,
         "title": self.get_operation_name(),
         "content": "",
         "level": "INFO",
         "type": "SYSTEM"
     }
     try:
         if self.operation == "install":
             logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
             cluster.change_status(Cluster.CLUSTER_STATUS_INSTALLING)
             result = self.on_install(extra_vars)
             cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
         elif self.operation == 'uninstall':
             logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
             cluster.change_status(Cluster.CLUSTER_STATUS_DELETING)
             result = self.on_uninstall(extra_vars)
             cluster.change_status(Cluster.CLUSTER_STATUS_READY)
             kubeops_api.cluster_monitor.delete_cluster_redis_data(cluster.name)
         elif self.operation == 'bigip-config':
             logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
             ignore_errors = True
             result = self.on_f5_config(extra_vars)
         elif self.operation == 'upgrade':
             logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
             cluster.change_status(Cluster.CLUSTER_STATUS_UPGRADING)
             package_name = self.params.get('package', None)
             package = Package.objects.get(name=package_name)
             extra_vars.update(package.meta.get('vars'))
             result = self.on_upgrade(extra_vars)
             if result.get('summary', {}).get('success', False):
                 cluster.upgrade_package(package_name)
             cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
         elif self.operation == 'scale':
             logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
             ignore_errors = True
             return_running = True
             cluster.change_status(Cluster.CLUSTER_DEPLOY_TYPE_SCALING)
             result = self.on_scaling(extra_vars)
             cluster.exit_new_node()
             cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
         elif self.operation == 'add-worker':
             logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
             ignore_errors = True
             return_running = True
             cluster.change_status(Cluster.CLUSTER_DEPLOY_TYPE_SCALING)
             result = self.on_add_worker(extra_vars)
             cluster.exit_new_node()
             cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
         elif self.operation == 'remove-worker':
             logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
             ignore_errors = True
             return_running = True
             cluster.change_status(Cluster.CLUSTER_DEPLOY_TYPE_SCALING)
             result = self.on_remove_worker(extra_vars)
             if not result.get('summary', {}).get('success', False):
                 cluster.exit_new_node()
             else:
                 node_name = self.params.get('node', None)
                 cluster.change_to()
                 node = Node.objects.get(name=node_name)
                 node.delete()
                 cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
         elif self.operation == 'restore':
             logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
             cluster.change_status(Cluster.CLUSTER_STATUS_RESTORING)
             cluster_backup_id = self.params.get('clusterBackupId', None)
             result = self.on_restore(extra_vars, cluster_backup_id)
             cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
         elif self.operation == 'backup':
             logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
             cluster.change_status(Cluster.CLUSTER_STATUS_BACKUP)
             cluster_storage_id = self.params.get('backupStorageId', None)
             result = self.on_backup(extra_vars)
             self.on_upload_backup_file(cluster_storage_id)
             cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
         if not result.get('summary', {}).get('success', False):
             message['content'] = self.get_content(False)
             message['level'] = 'WARNING'
             if not ignore_errors:
                 cluster.change_status(Cluster.CLUSTER_STATUS_ERROR)
             if return_running:
                 cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
             logger.error(msg=":cluster {} exec {} error".format(cluster, self.operation), exc_info=True)
         else:
             message['content'] = self.get_content(True)
         message_client.insert_message(message)
     except Exception as e:
         logger.error(msg=":cluster {} exec {} error".format(cluster, self.operation), exc_info=True)
         cluster.change_status(Cluster.CLUSTER_STATUS_ERROR)
         message['content'] = self.get_content(False)
         message['level'] = 'WARNING'
         message_client.insert_message(message)
     post_deploy_execution_start.send(self.__class__, execution=self, result=result, ignore_errors=ignore_errors)
     return result
Exemple #7
0
    def start(self):
        result = {"raw": {}, "summary": {}}
        pre_deploy_execution_start.send(self.__class__, execution=self)
        cluster = self.get_cluster()
        hostname = Setting.objects.get(key='local_hostname')
        dns = DNS.objects.first()
        extra_vars = {
            "cluster_name": cluster.name,
            "local_hostname": hostname.value,
            "domain_suffix": cluster.cluster_doamin_suffix,
            "dns1": dns.dns1,
            "dns2": dns.dns2,
        }

        extra_vars.update(cluster.configs)
        ignore_errors = False
        return_running = False

        try:
            if self.operation == "install":
                logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
                cluster.change_status(Cluster.CLUSTER_STATUS_INSTALLING)
                result = self.on_install(extra_vars)
                cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
            elif self.operation == 'uninstall':
                logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
                cluster.change_status(Cluster.CLUSTER_STATUS_DELETING)
                result = self.on_uninstall(extra_vars)
                cluster.change_status(Cluster.CLUSTER_STATUS_READY)
            elif self.operation == 'bigip-config':
                logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
                ignore_errors = True
                result = self.on_f5_config(extra_vars)
            elif self.operation == 'upgrade':
                logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
                cluster.change_status(Cluster.CLUSTER_STATUS_UPGRADING)
                package_name = self.params.get('package', None)
                package = Package.objects.get(name=package_name)
                extra_vars.update(package.meta.get('vars'))
                result = self.on_upgrade(extra_vars)
                cluster.upgrade_package(package_name)
                cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
            elif self.operation == 'scale':
                logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
                ignore_errors = True
                return_running = True
                cluster.change_status(Cluster.CLUSTER_DEPLOY_TYPE_SCALING)
                result = self.on_scaling(extra_vars)
                cluster.exit_new_node()
                cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
            elif self.operation == 'add-worker':
                logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
                ignore_errors = True
                return_running = True
                cluster.change_status(Cluster.CLUSTER_DEPLOY_TYPE_ADDING)
                result = self.on_add_worker(extra_vars)
                cluster.exit_new_node()
                cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
            elif self.operation == 'restore':
                logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
                cluster.change_status(Cluster.CLUSTER_STATUS_RESTORING)
                cluster_backup_id = self.params.get('clusterBackupId', None)
                result = self.on_restore(extra_vars, cluster_backup_id)
                cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
            elif self.operation == 'backup':
                logger.info(msg="cluster: {} exec: {} ".format(cluster, self.operation))
                cluster.change_status(Cluster.CLUSTER_STATUS_BACKUP)
                cluster_storage_id = self.params.get('backupStorageId', None)
                result = self.on_backup(extra_vars)
                self.on_upload_backup_file(cluster_storage_id)
                cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)


        except Exception as e:
            if not ignore_errors:
                cluster.change_status(Cluster.CLUSTER_STATUS_ERROR)
            if return_running:
                cluster.change_status(Cluster.CLUSTER_STATUS_RUNNING)
            logger.error(msg=":cluster {} exec {} error".format(cluster, self.operation), exc_info=True)
            result['summary'] = {'error': 'Unexpect error occur: {}'.format(e)}
        post_deploy_execution_start.send(self.__class__, execution=self, result=result, ignore_errors=ignore_errors)
        return result