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