Example #1
0
    def setup_management(_type, instance_id, deployment_id, user_id=None):
        import ansible.runner
        s3db = current.s3db
        db = current.db

        # get all servers associated
        stable = s3db.setup_server
        servers = db(stable.deployment_id == deployment_id).select(
            stable.role, stable.host_ip, orderby=stable.role)

        # get deployment

        dtable = s3db.setup_deployment
        deployment = db(dtable.id == deployment_id).select(
            dtable.private_key, dtable.remote_user, limitby=(0, 1)).first()
        private_key = os.path.join(current.request.folder, "uploads",
                                   deployment.private_key)

        hosts = [server.host_ip for server in servers]
        inventory = ansible.inventory.Inventory(hosts)

        tasks = []
        runner = ansible.runner.Runner

        itable = s3db.setup_instance
        instance = db(itable.id == instance_id).select(itable.type,
                                                       limitby=(0, 1)).first()
        instance_types = ["prod", "test", "demo"]

        if _type == "clean":

            host_ip = servers[0].host_ip

            arguments = [
                dict(module_name="service",
                     module_args={
                         "name": "uwsgi",
                         "status": "stop",
                     },
                     remote_user=deployment.remote_user,
                     private_key_file=private_key,
                     pattern=host_ip,
                     inventory=inventory,
                     sudo=True),
                dict(module_name="command",
                     module_args="clean %s" %
                     instance_types[instance.type - 1],
                     remote_user=deployment.remote_user,
                     private_key_file=private_key,
                     pattern=host_ip,
                     inventory=inventory,
                     sudo=True),
                dict(module_name="command",
                     module_args="clean_eden %s" %
                     instance_types[instance.type - 1],
                     remote_user=deployment.remote_user,
                     private_key_file=private_key,
                     pattern=servers[0].host_ip,
                     inventory=inventory,
                     sudo=True),
                dict(module_name="service",
                     module_args={
                         "name": "uwsgi",
                         "status": "start",
                     },
                     remote_user=deployment.remote_user,
                     private_key_file=private_key,
                     pattern=host_ip,
                     inventory=inventory,
                     sudo=True),
            ]

            if len(servers) > 1:
                host_ip = servers[2].host_ip
                arguments[0]["pattern"] = host_ip
                arguments[2]["pattern"] = host_ip
                arguments[3]["pattern"] = host_ip

            for argument in arguments:
                tasks.append(runner(**argument))

            # run the tasks
            for task in tasks:
                response = task.run()
                if response["dark"]:
                    raise Exception("Error contacting the server")

        elif _type == "eden":
            argument = dict(module_name="command",
                            module_args="pull %s" %
                            [instance_types[instance.type - 1]],
                            remote_user=deployment.remote_user,
                            private_key_file=private_key,
                            pattern=servers[0].host_ip,
                            inventory=inventory,
                            sudo=True)

            if len(servers) > 1:
                argument["pattern"] = servers[2].host_ip

            task = runner(**argument)
            response = task.run()
            if response["dark"]:
                raise Exception("Error contacting the server")
Example #2
0
    def setup_management(_type, instance_id, deployment_id, user_id=None):
        import ansible.runner
        s3db = current.s3db
        db = current.db

        # get all servers associated
        stable = s3db.setup_server
        servers = db(stable.deployment_id == deployment_id).select(stable.role,
                                                                   stable.host_ip,
                                                                   orderby=stable.role
                                                                   )

        # get deployment

        dtable = s3db.setup_deployment
        deployment = db(dtable.id == deployment_id).select(dtable.private_key,
                                                           dtable.remote_user,
                                                           limitby=(0, 1)).first()
        private_key = os.path.join(current.request.folder, "uploads", deployment.private_key)

        hosts = [server.host_ip for server in servers]
        inventory = ansible.inventory.Inventory(hosts)

        tasks = []
        runner = ansible.runner.Runner

        itable = s3db.setup_instance
        instance = db(itable.id == instance_id).select(itable.type,
                                                       limitby=(0, 1)).first()
        instance_types = ["prod", "test", "demo"]

        if _type == "clean":

            host_ip = servers[0].host_ip

            arguments = [dict(module_name = "service",
                              module_args={"name": "uwsgi",
                                           "status": "stop",
                                           },
                              remote_user=deployment.remote_user,
                              private_key_file=private_key,
                              pattern=host_ip,
                              inventory=inventory,
                              sudo=True
                              ),
                          dict(module_name = "command",
                              module_args="clean %s" % instance_types[instance.type - 1],
                              remote_user=deployment.remote_user,
                              private_key_file=private_key,
                              pattern=host_ip,
                              inventory=inventory,
                              sudo=True
                              ),
                          dict(module_name = "command",
                              module_args="clean_eden %s" % instance_types[instance.type - 1],
                              remote_user=deployment.remote_user,
                              private_key_file=private_key,
                              pattern=servers[0].host_ip,
                              inventory=inventory,
                              sudo=True
                              ),
                          dict(module_name = "service",
                              module_args={"name": "uwsgi",
                                           "status": "start",
                                           },
                              remote_user=deployment.remote_user,
                              private_key_file=private_key,
                              pattern=host_ip,
                              inventory=inventory,
                              sudo=True
                              ),
                          ]

            if len(servers) > 1:
                host_ip = servers[2].host_ip
                arguments[0]["pattern"] = host_ip
                arguments[2]["pattern"] = host_ip
                arguments[3]["pattern"] = host_ip

            for argument in arguments:
                tasks.append(runner(**argument))

            # run the tasks
            for task in tasks:
                response = task.run()
                if response["dark"]:
                    raise Exception("Error contacting the server")

        elif _type == "eden":
            argument = dict(module_name="command",
                            module_args="pull %s" % [instance_types[instance.type - 1]],
                            remote_user=deployment.remote_user,
                            private_key_file=private_key,
                            pattern=servers[0].host_ip,
                            inventory=inventory,
                            sudo=True
                            )

            if len(servers) > 1:
                argument["pattern"] = servers[2].host_ip

            task = runner(**argument)
            response = task.run()
            if response["dark"]:
                raise Exception("Error contacting the server")