Example #1
0
def resize_and_redeploy(esh_driver, esh_instance, core_identity_id):
    """
    Use this function to kick off the async task when you ONLY want to deploy
    (No add fixed, No add floating)
    """
    from service.tasks.driver import deploy_init_to, deploy_script
    from service.tasks.driver import wait_for, complete_resize
    from service.deploy import deploy_test
    touch_script = deploy_test()
    core_identity = CoreIdentity.objects.get(id=core_identity_id)

    task_one = wait_for.s(esh_driver.__class__, esh_driver.provider,
                          esh_driver.identity, esh_instance.id,
                          "verify_resize")
    task_two = deploy_script.si(esh_driver.__class__, esh_driver.provider,
                                esh_driver.identity, esh_instance.id,
                                touch_script)
    task_three = complete_resize.si(esh_driver.__class__, esh_driver.provider,
                                    esh_driver.identity, esh_instance.id,
                                    core_identity.provider.id,
                                    core_identity.id, core_identity.created_by)
    task_four = deploy_init_to.si(esh_driver.__class__,
                                  esh_driver.provider,
                                  esh_driver.identity,
                                  esh_instance.id,
                                  redeploy=True)
    #Link em all together!
    task_one.link(task_two)
    task_two.link(task_three)
    task_three.link(task_four)
    return task_one
Example #2
0
def restore_ip_chain(esh_driver, esh_instance, redeploy=False):
    """
    Returns: a task, chained together
    task chain: wait_for("active") --> AddFixed --> AddFloating
    --> reDeploy
    start with: task.apply_async()
    """
    from service.tasks.driver import \
            wait_for, add_fixed_ip, add_floating_ip, deploy_init_to
    init_task = wait_for.s(
            esh_driver.__class__, esh_driver.provider,
            esh_driver.identity, esh_instance.id, ["active",],
            no_tasks=True)
    #Step 1: Add fixed
    fixed_ip_task = add_fixed_ip.si(
            esh_driver.__class__, esh_driver.provider,
            esh_driver.identity, esh_instance.id)
    init_task.link(fixed_ip_task)
    #Add float and re-deploy OR just add floating IP...
    if redeploy:
        deploy_task = deploy_init_to.si(esh_driver.__class__, esh_driver.provider,
                     esh_driver.identity, esh_instance.id,
                     redeploy=True)
        fixed_ip_task.link(deploy_task)
    else:
        logger.info("Skip deployment, Add floating IP only")
        floating_ip_task = add_floating_ip.si(esh_driver.__class__, esh_driver.provider,
                          esh_driver.identity,
                          esh_instance.id)
        fixed_ip_task.link(floating_ip_task)
    return init_task
Example #3
0
def resize_and_redeploy(esh_driver, esh_instance, core_identity_id):
    """
    Use this function to kick off the async task when you ONLY want to deploy
    (No add fixed, No add floating)
    """
    from service.tasks.driver import deploy_init_to, deploy_script
    from service.tasks.driver import wait_for, complete_resize
    from service.deploy import deploy_test
    touch_script = deploy_test()
    core_identity = CoreIdentity.objects.get(id=core_identity_id)

    task_one = wait_for.s(
            esh_driver.__class__, esh_driver.provider,
            esh_driver.identity, esh_instance.id, "verify_resize")
    task_two = deploy_script.si(
            esh_driver.__class__, esh_driver.provider,
            esh_driver.identity, esh_instance.id, touch_script)
    task_three = complete_resize.si(
            esh_driver.__class__, esh_driver.provider,
            esh_driver.identity, esh_instance.id,
            core_identity.provider.id, core_identity.id, core_identity.created_by)
    task_four = deploy_init_to.si(
            esh_driver.__class__, esh_driver.provider,
            esh_driver.identity, esh_instance.id,
            redeploy=True)
    #Link em all together!
    task_one.link(task_two)
    task_two.link(task_three)
    task_three.link(task_four)
    return task_one
Example #4
0
def restore_ip_chain(esh_driver, esh_instance, redeploy=False):
    """
    Returns: a task, chained together
    task chain: wait_for("active") --> AddFixed --> AddFloating
    --> reDeploy
    start with: task.apply_async()
    """
    from service.tasks.driver import \
            wait_for, add_fixed_ip, add_floating_ip, deploy_init_to
    init_task = wait_for.s(esh_driver.__class__,
                           esh_driver.provider,
                           esh_driver.identity,
                           esh_instance.id, [
                               "active",
                           ],
                           no_tasks=True)
    #Step 1: Add fixed
    fixed_ip_task = add_fixed_ip.si(esh_driver.__class__, esh_driver.provider,
                                    esh_driver.identity, esh_instance.id)
    init_task.link(fixed_ip_task)
    #Add float and re-deploy OR just add floating IP...
    if redeploy:
        deploy_task = deploy_init_to.si(esh_driver.__class__,
                                        esh_driver.provider,
                                        esh_driver.identity,
                                        esh_instance.id,
                                        redeploy=True)
        fixed_ip_task.link(deploy_task)
    else:
        logger.info("Skip deployment, Add floating IP only")
        floating_ip_task = add_floating_ip.si(esh_driver.__class__,
                                              esh_driver.provider,
                                              esh_driver.identity,
                                              esh_instance.id)
        fixed_ip_task.link(floating_ip_task)
    return init_task
Example #5
0
def start_machine_imaging(machine_request, delay=False):
    """
    Builds up a machine imaging task using core.models.machine_request
    delay - If true, wait until task is completed before returning
    """
    machine_request.status = "imaging"
    machine_request.save()
    instance_id = machine_request.instance.provider_alias

    (orig_managerCls, orig_creds, dest_managerCls, dest_creds) = machine_request.prepare_manager()
    imaging_args = machine_request.get_imaging_args()
    admin_driver = machine_request.new_admin_driver()
    admin_ident = machine_request.new_admin_identity()

    imaging_error_task = machine_request_error.s(machine_request.id)

    init_task = None

    if dest_managerCls and dest_creds != orig_creds:
        # Task 1 = Migrate Task
        migrate_task = migrate_instance_task.si(
            orig_managerCls, orig_creds, dest_managerCls, dest_creds, **imaging_args
        )
        if not init_task:
            init_task = migrate_task
        else:
            init_task.link(migrate_task)
    else:
        # Task 1 = Imaging Task
        image_task = machine_imaging_task.si(orig_managerCls, orig_creds, imaging_args)
        if not init_task:
            init_task = image_task
        else:
            init_task.link(image_task)
    # Task 2 = Process the machine request
    # (Save tags, name, description, metadata, etc.)
    process_task = process_request.s(machine_request.id)
    process_task.link_error(imaging_error_task)

    if dest_managerCls and dest_creds != orig_creds:
        migrate_task.link(process_task)
        migrate_task.link_error(imaging_error_task)
    else:
        image_task.link(process_task)
        image_task.link_error(imaging_error_task)
    # Task 3 = Validate the new image by launching an instance
    validate_task = validate_new_image.s(machine_request.id)
    process_task.link(validate_task)
    # Task 4 = Wait for new instance to be 'active'
    wait_for_task = wait_for.s(
        admin_driver.__class__, admin_driver.provider, admin_driver.identity, "active", return_id=True
    )
    validate_task.link(wait_for_task)
    validate_task.link_error(imaging_error_task)

    # Task 5 = Terminate the new instance on completion
    destroy_task = destroy_instance.s(admin_ident.id)
    wait_for_task.link(destroy_task)
    wait_for_task.link_error(imaging_error_task)
    # Task 6 - Finally, email the user that their image is ready!
    email_task = imaging_complete.s(machine_request.id)
    destroy_task.link_error(imaging_error_task)
    destroy_task.link(email_task)

    # Start the task.
    async = init_task.apply_async()
    if delay:
        async.get()
    return async
Example #6
0
def start_machine_imaging(machine_request, delay=False):
    """
    Builds up a machine imaging task using core.models.machine_request
    delay - If true, wait until task is completed before returning
    """
    machine_request.status = 'imaging'
    machine_request.save()
    instance_id = machine_request.instance.provider_alias

    (orig_managerCls, orig_creds, dest_managerCls,
     dest_creds) = machine_request.prepare_manager()
    imaging_args = machine_request.get_imaging_args()
    admin_driver = machine_request.new_admin_driver()
    admin_ident = machine_request.new_admin_identity()

    imaging_error_task = machine_request_error.s(machine_request.id)

    init_task = None

    if dest_managerCls and dest_creds != orig_creds:
        #Task 1 = Migrate Task
        migrate_task = migrate_instance_task.si(orig_managerCls, orig_creds,
                                                dest_managerCls, dest_creds,
                                                **imaging_args)
        if not init_task:
            init_task = migrate_task
        else:
            init_task.link(migrate_task)
    else:
        #Task 1 = Imaging Task
        image_task = machine_imaging_task.si(orig_managerCls, orig_creds,
                                             imaging_args)
        if not init_task:
            init_task = image_task
        else:
            init_task.link(image_task)
    #Task 2 = Process the machine request
    # (Save tags, name, description, metadata, etc.)
    process_task = process_request.s(machine_request.id)
    process_task.link_error(imaging_error_task)

    if dest_managerCls and dest_creds != orig_creds:
        migrate_task.link(process_task)
        migrate_task.link_error(imaging_error_task)
    else:
        image_task.link(process_task)
        image_task.link_error(imaging_error_task)
    #Task 3 = Validate the new image by launching an instance
    validate_task = validate_new_image.s(machine_request.id)
    process_task.link(validate_task)
    #Task 4 = Wait for new instance to be 'active'
    wait_for_task = wait_for.s(admin_driver.__class__,
                               admin_driver.provider,
                               admin_driver.identity,
                               "active",
                               return_id=True)
    validate_task.link(wait_for_task)
    validate_task.link_error(imaging_error_task)

    #Task 5 = Terminate the new instance on completion
    destroy_task = destroy_instance.s(admin_ident.id)
    wait_for_task.link(destroy_task)
    wait_for_task.link_error(imaging_error_task)
    #Task 6 - Finally, email the user that their image is ready!
    email_task = imaging_complete.s(machine_request.id)
    destroy_task.link_error(imaging_error_task)
    destroy_task.link(email_task)

    # Start the task.
    async = init_task.apply_async()
    if delay:
        async .get()
    return async