Exemplo n.º 1
0
def update_pool(
        client,
        pool_id,
        json_file=None,
        start_task_command_line=None,  # pylint:disable=too-many-arguments
        certificate_references=None,
        application_package_references=None,
        metadata=None,
        start_task_run_elevated=None,
        start_task_environment_settings=None,
        start_task_wait_for_success=None,
        start_task_max_task_retry_count=None):
    def action():
        client.update_properties(pool_id=pool_id,
                                 pool_update_properties_parameter=param)
        return client.get(pool_id)

    if json_file:
        with open(json_file) as f:
            json_obj = json.load(f)
            param = None
            try:
                param = client._deserialize('PoolUpdatePropertiesParameter',
                                            json_obj)  # pylint: disable=protected-access
            except DeserializationError:
                pass
            if not param:
                raise ValueError(
                    "JSON file '{}' is not in correct format.".format(
                        json_file))

            if param.certificate_references is None:
                param.certificate_references = []
            if param.metadata is None:
                param.metadata = []
            if param.application_package_references is None:
                param.application_package_references = []
    else:
        if certificate_references is None:
            certificate_references = []
        if metadata is None:
            metadata = []
        if application_package_references is None:
            application_package_references = []
        param = PoolUpdatePropertiesParameter(certificate_references,
                                              application_package_references,
                                              metadata)

        if start_task_command_line:
            param.start_task = StartTask(
                start_task_command_line,
                environment_settings=start_task_environment_settings,
                run_elevated=start_task_run_elevated,
                wait_for_success=start_task_wait_for_success,
                max_task_retry_count=start_task_max_task_retry_count)
    return _handle_batch_exception(action)
Exemplo n.º 2
0
def update_pool(client,
                pool_id,
                json_file=None,
                start_task_command_line=None,
                certificate_references=None,
                application_package_references=None,
                metadata=None,
                start_task_environment_settings=None,
                start_task_wait_for_success=None,
                start_task_max_task_retry_count=None):
    if json_file:
        with open(json_file) as f:
            json_obj = json.load(f)
            param = None
            try:
                param = PoolUpdatePropertiesParameter.from_dict(json_obj)
            except DeserializationError:
                pass
            if not param:
                raise ValueError(
                    "JSON file '{}' is not in correct format.".format(
                        json_file))

            if param.certificate_references is None:
                param.certificate_references = []
            if param.metadata is None:
                param.metadata = []
            if param.application_package_references is None:
                param.application_package_references = []
    else:
        if certificate_references is None:
            certificate_references = []
        if metadata is None:
            metadata = []
        if application_package_references is None:
            application_package_references = []
        param = PoolUpdatePropertiesParameter(certificate_references,
                                              application_package_references,
                                              metadata)

        if start_task_command_line:
            param.start_task = StartTask(
                start_task_command_line,
                environment_settings=start_task_environment_settings,
                wait_for_success=start_task_wait_for_success,
                max_task_retry_count=start_task_max_task_retry_count)
    client.update_properties(pool_id=pool_id,
                             pool_update_properties_parameter=param)
    return client.get(pool_id)
Exemplo n.º 3
0
def create_pool(client, account_name=None, account_endpoint=None,  # pylint:disable=too-many-arguments, too-many-locals
                template=None, parameters=None, json_file=None,
                id=None, vm_size=None, target_dedicated=None, auto_scale_formula=None,  # pylint: disable=redefined-builtin
                enable_inter_node_communication=False, os_family=None, image=None,
                node_agent_sku_id=None, resize_timeout=None, start_task_command_line=None,
                start_task_resource_files=None, start_task_wait_for_success=False,
                certificate_references=None, application_package_references=None, metadata=None):
    # pylint: disable=too-many-branches, too-many-statements
    if template or json_file:
        if template:
            logger.warning('You are using an experimental feature {Pool Template}.')
            expanded_pool_object = template_utils.expand_template(template, parameters)
            if 'pool' not in expanded_pool_object:
                raise ValueError('Missing pool element in the template.')
            if 'properties' not in expanded_pool_object['pool']:
                raise ValueError('Missing pool properties element in the template.')
            # bulid up the jsonFile object to hand to the batch service.
            json_obj = expanded_pool_object['pool']['properties']
        else:
            with open(json_file) as f:
                json_obj = json.load(f)
            # validate the json file
            pool = client._deserialize('PoolAddParameter', json_obj)  # pylint:disable=protected-access
            if pool is None:
                raise ValueError("JSON file '{}' is not in correct format.".format(json_file))

        # Handle package manangement
        if 'packageReferences' in json_obj:
            logger.warning('You are using an experimental feature {Package Management}.')
            pool_os_flavor = pool_utils.get_pool_target_os_type(json_obj)
            cmds = [template_utils.process_pool_package_references(json_obj)]
            # Update the start up command
            json_obj['startTask'] = template_utils.construct_setup_task(
                json_obj.get('startTask'), cmds, pool_os_flavor)

        # Handle any special post-processing steps.
        # - Resource Files
        # - etc
        file_utils = FileUtils(None, account_name, None, account_endpoint)
        json_obj = template_utils.post_processing(json_obj, file_utils)

        # Batch Shipyard integration
        if 'clientExtensions' in json_obj and 'dockerOptions' in json_obj['clientExtensions']:
            logger.warning('You are using an experimental feature {Batch Shipyard}.')
            # batchShipyardUtils.createPool(json_obj, options, cli)
            # return

        # We deal all NCJ work with pool, now convert back to original type
        pool = client._deserialize('PoolAddParameter', json_obj)  # pylint: disable=protected-access

    else:
        if not id:
            raise ValueError('Need either template, json_file, or id')

        pool = PoolAddParameter(id, vm_size=vm_size)
        if auto_scale_formula:
            pool.auto_scale_formula = auto_scale_formula
            pool.enable_auto_scale = True
        else:
            pool.target_dedicated = target_dedicated
            pool.enable_auto_scale = False

        pool.enable_inter_node_communication = enable_inter_node_communication

        if os_family:
            pool.cloud_service_configuration = CloudServiceConfiguration(os_family)
        else:
            if image:
                version = 'latest'
                try:
                    publisher, offer, sku = image.split(':', 2)
                except ValueError:
                    message = ("Incorrect format for VM image URN. Should be in the format: \n"
                               "'publisher:offer:sku[:version]'")
                    raise ValueError(message)
                try:
                    sku, version = sku.split(':', 1)
                except ValueError:
                    pass
                pool.virtual_machine_configuration = VirtualMachineConfiguration(
                    ImageReference(publisher, offer, sku, version),
                    node_agent_sku_id)

        if start_task_command_line:
            pool.start_task = StartTask(start_task_command_line)
            pool.start_task.wait_for_success = start_task_wait_for_success
            pool.start_task.resource_files = start_task_resource_files
        if resize_timeout:
            pool.resize_timeout = resize_timeout

        if metadata:
            pool.metadata = metadata
        if certificate_references:
            pool.certificate_references = certificate_references
        if application_package_references:
            pool.application_package_references = application_package_references

    add_option = PoolAddOptions()
    job_utils._handle_batch_exception(lambda: client.pool.add(pool, add_option))  # pylint: disable=protected-access