def Run(self, args):
        dataproc = dp.Dataproc(self.ReleaseTrack())

        template = util.ParseWorkflowTemplates(args.template, dataproc)

        workflow_template = dataproc.GetRegionsWorkflowTemplate(
            template, args.version)

        cluster_name = template.workflowTemplatesId

        compute_resources = compute_helpers.GetComputeResources(
            self.ReleaseTrack(), cluster_name)
        use_accelerators = self.ReleaseTrack() == base.ReleaseTrack.BETA
        use_auto_delete_ttl = self.ReleaseTrack() == base.ReleaseTrack.BETA
        use_min_cpu_platform = self.ReleaseTrack() == base.ReleaseTrack.BETA

        cluster_config = clusters.GetClusterConfig(
            args, dataproc, template.projectsId, compute_resources,
            use_accelerators, use_auto_delete_ttl, use_min_cpu_platform)

        labels = labels_util.ParseCreateArgs(
            args, dataproc.messages.ManagedCluster.LabelsValue)

        managed_cluster = dataproc.messages.ManagedCluster(
            clusterName=cluster_name, config=cluster_config, labels=labels)

        workflow_template.placement = dataproc.messages.WorkflowTemplatePlacement(
            managedCluster=managed_cluster)

        response = dataproc.client.projects_regions_workflowTemplates.Update(
            workflow_template)
        return response
Beispiel #2
0
  def Run(self, args):
    dataproc = dp.Dataproc(self.ReleaseTrack())

    template = util.ParseWorkflowTemplates(args.template, dataproc)

    workflow_template = dataproc.GetRegionsWorkflowTemplate(
        template, args.version)

    jobs = workflow_template.jobs

    job_removed = False
    new_jobs = []
    for ordered_job in jobs:
      if ordered_job.stepId != args.step_id:
        new_jobs.append(ordered_job)
      else:
        console_io.PromptContinue(
            message=('The job [{0}] will be removed from workflow template '
                     '[{1}].').format(args.step_id, workflow_template.id),
            cancel_on_no=True)
        job_removed = True

    if not job_removed:
      log.error('Step id [{0}] is not found in workflow template [{1}].'.format(
          args.step_id, workflow_template.id))
      return  # do not update workflow template if job is not removed.

    workflow_template.jobs = new_jobs
    response = dataproc.client.projects_regions_workflowTemplates.Update(
        workflow_template)
    return response
Beispiel #3
0
    def Run(self, args):
        dataproc = dp.Dataproc(self.ReleaseTrack())
        msgs = dataproc.messages
        template = util.ParseWorkflowTemplates(args.template, dataproc)

        instantiate_request = dataproc.messages.InstantiateWorkflowTemplateRequest(
        )
        instantiate_request.instanceId = uuid.uuid4().hex  # request UUID
        if args.parameters:
            instantiate_request.parameters = encoding.DictToMessage(
                args.parameters,
                msgs.InstantiateWorkflowTemplateRequest.ParametersValue)

        request = msgs.DataprocProjectsRegionsWorkflowTemplatesInstantiateRequest(
            instantiateWorkflowTemplateRequest=instantiate_request,
            name=template.RelativeName())

        operation = dataproc.client.projects_regions_workflowTemplates.Instantiate(
            request)
        if args. async:
            log.status.Print(
                'Instantiating [{0}] with operation [{1}].'.format(
                    template.Name(), operation.name))
            return

        operation = util.WaitForWorkflowTemplateOperation(
            dataproc, operation, timeout_s=args.timeout)
        return operation
    def Run(self, args):
        dataproc = dp.Dataproc(self.ReleaseTrack())
        messages = dataproc.messages

        template = util.ParseWorkflowTemplates(args.template, dataproc)

        workflow_template = dataproc.GetRegionsWorkflowTemplate(
            template, args.version)

        # load workflow template from YAML or JSON file
        local_workflow_yaml = workflow_templates.ParseYamlOrJsonToWorkflowTemplate(
            args.config_file, messages.WorkflowTemplate)

        if local_workflow_yaml.id != workflow_template.id:
            raise exceptions.WorkflowTemplateError(
                'Workflow template ID [{0}] in YAML or JSON file does not match the '
                'workflow template ID [{1}] in Dataproc.'.format(
                    local_workflow_yaml.id, workflow_template.id))

        if local_workflow_yaml.name != workflow_template.name:
            raise exceptions.WorkflowTemplateError(
                'Workflow template name [{0}] in YAML or JSON file does not match '
                'the workflow template name [{1}] in Dataproc.'.format(
                    local_workflow_yaml.name, workflow_template.name))

        # update version fields in local yaml workflow template
        local_workflow_yaml.version = workflow_template.version

        response = dataproc.client.projects_regions_workflowTemplates.Update(
            local_workflow_yaml)
        return response
Beispiel #5
0
    def Run(self, args):
        dataproc = dp.Dataproc(self.ReleaseTrack())

        template = util.ParseWorkflowTemplates(args.template, dataproc)

        workflow_template = dataproc.GetRegionsWorkflowTemplate(
            template, args.version)

        return workflow_template
Beispiel #6
0
    def Run(self, args):
        dataproc = dp.Dataproc(self.ReleaseTrack())
        msgs = dataproc.messages

        template = util.ParseWorkflowTemplates(args.template, dataproc)
        request = msgs.DataprocProjectsRegionsWorkflowTemplatesGetIamPolicyRequest(
            resource=template.RelativeName())

        return dataproc.client.projects_regions_workflowTemplates.GetIamPolicy(
            request)
Beispiel #7
0
    def Run(self, args):
        dataproc = dp.Dataproc(self.ReleaseTrack())
        msgs = dataproc.messages

        policy = iam_util.ParsePolicyFile(args.policy_file, msgs.Policy)
        set_iam_policy_request = msgs.SetIamPolicyRequest(policy=policy)

        template = util.ParseWorkflowTemplates(args.template, dataproc)
        request = msgs.DataprocProjectsRegionsWorkflowTemplatesSetIamPolicyRequest(
            resource=template.RelativeName(),
            setIamPolicyRequest=set_iam_policy_request)

        return dataproc.client.projects_regions_workflowTemplates.SetIamPolicy(
            request)
Beispiel #8
0
def AddJobToWorkflowTemplate(args, dataproc, ordered_job):
    """Add an ordered job to the workflow template."""
    template = util.ParseWorkflowTemplates(args.workflow_template, dataproc)

    workflow_template = dataproc.GetRegionsWorkflowTemplate(
        template, args.version)

    jobs = workflow_template.jobs if workflow_template.jobs is not None else []
    jobs.append(ordered_job)

    workflow_template.jobs = jobs

    response = dataproc.client.projects_regions_workflowTemplates.Update(
        workflow_template)
    return response
Beispiel #9
0
    def Run(self, args):
        dataproc = dp.Dataproc(self.ReleaseTrack())
        messages = dataproc.messages

        template = util.ParseWorkflowTemplates(args.template, dataproc)

        request = messages.DataprocProjectsRegionsWorkflowTemplatesDeleteRequest(
            name=template.RelativeName())

        console_io.PromptContinue(
            message="The workflow template '[{0}]' will be deleted.".format(
                template.Name()),
            cancel_on_no=True)

        dataproc.client.projects_regions_workflowTemplates.Delete(request)
Beispiel #10
0
  def Run(self, args):
    dataproc = dp.Dataproc(self.ReleaseTrack())
    messages = dataproc.messages

    template_ref = util.ParseWorkflowTemplates(args.template, dataproc)
    regions_ref = util.ParseRegion(dataproc)

    workflow_template = messages.WorkflowTemplate(
        id=args.template, name=template_ref.RelativeName(),
        labels=labels_util.ParseCreateArgs(
            args, messages.WorkflowTemplate.LabelsValue))

    request = messages.DataprocProjectsRegionsWorkflowTemplatesCreateRequest(
        parent=regions_ref.RelativeName(), workflowTemplate=workflow_template)

    template = dataproc.client.projects_regions_workflowTemplates.Create(
        request)
    return template
  def Run(self, args):
    dataproc = dp.Dataproc(self.ReleaseTrack())

    template = util.ParseWorkflowTemplates(args.template, dataproc)

    workflow_template = dataproc.GetRegionsWorkflowTemplate(
        template, args.version)

    labels = labels_util.Diff(additions=args.cluster_labels).Apply(
        dataproc.messages.ClusterSelector.ClusterLabelsValue)

    cluster_selector = dataproc.messages.ClusterSelector(
        clusterLabels=labels, zone=properties.VALUES.compute.zone.GetOrFail())

    workflow_template.placement = dataproc.messages.WorkflowTemplatePlacement(
        clusterSelector=cluster_selector)

    response = dataproc.client.projects_regions_workflowTemplates.Update(
        workflow_template)
    return response
Beispiel #12
0
  def Run(self, args):
    dataproc = dp.Dataproc(self.ReleaseTrack())
    msgs = dataproc.messages
    template = util.ParseWorkflowTemplates(args.template, dataproc)

    instantiate_request = dataproc.messages.InstantiateWorkflowTemplateRequest()

    request = msgs.DataprocProjectsRegionsWorkflowTemplatesInstantiateRequest(
        instantiateWorkflowTemplateRequest=instantiate_request,
        name=template.RelativeName())

    operation = dataproc.client.projects_regions_workflowTemplates.Instantiate(
        request)
    if args.async:
      log.status.Print('Running [{0}].'.format(template.Name()))
      return

    operation = util.WaitForWorkflowTemplateOperation(
        dataproc, operation, timeout_s=args.timeout)
    return operation
Beispiel #13
0
  def Run(self, args):
    # TODO (b/68774667): deprecate Run command in favor of Instantiate command.
    dataproc = dp.Dataproc(self.ReleaseTrack())
    msgs = dataproc.messages
    template = util.ParseWorkflowTemplates(args.template, dataproc)

    instantiate_request = dataproc.messages.InstantiateWorkflowTemplateRequest()
    instantiate_request.instanceId = uuid.uuid4().hex  # request UUID

    request = msgs.DataprocProjectsRegionsWorkflowTemplatesInstantiateRequest(
        instantiateWorkflowTemplateRequest=instantiate_request,
        name=template.RelativeName())

    operation = dataproc.client.projects_regions_workflowTemplates.Instantiate(
        request)
    if args.async:
      log.status.Print('Running [{0}].'.format(template.Name()))
      return

    operation = util.WaitForWorkflowTemplateOperation(
        dataproc, operation, timeout_s=args.timeout)
    return operation