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")
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")