github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/workflow/v2/workflow.go (about)

     1  package v2
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/gophercloud/gophercloud"
     9  	"github.com/gophercloud/gophercloud/internal/acceptance/tools"
    10  	"github.com/gophercloud/gophercloud/openstack/workflow/v2/workflows"
    11  	th "github.com/gophercloud/gophercloud/testhelper"
    12  )
    13  
    14  // GetEchoWorkflowDefinition returns a simple workflow definition that does nothing except a simple "echo" command.
    15  func GetEchoWorkflowDefinition(workflowName string) string {
    16  	return fmt.Sprintf(`---
    17  version: '2.0'
    18  
    19  %s:
    20    description: Simple workflow example
    21    type: direct
    22    tags:
    23      - tag1
    24      - tag2
    25  
    26    input:
    27      - msg
    28  
    29    tasks:
    30      test:
    31        action: std.echo output="<%% $.msg %%>"`, workflowName)
    32  }
    33  
    34  // CreateWorkflow creates a workflow on Mistral API.
    35  // The created workflow is a dummy workflow that performs a simple echo.
    36  func CreateWorkflow(t *testing.T, client *gophercloud.ServiceClient) (*workflows.Workflow, error) {
    37  	workflowName := tools.RandomString("workflow_echo_", 5)
    38  
    39  	definition := GetEchoWorkflowDefinition(workflowName)
    40  
    41  	t.Logf("Attempting to create workflow: %s", workflowName)
    42  
    43  	opts := &workflows.CreateOpts{
    44  		Namespace:  "some-namespace",
    45  		Scope:      "private",
    46  		Definition: strings.NewReader(definition),
    47  	}
    48  	workflowList, err := workflows.Create(client, opts).Extract()
    49  	if err != nil {
    50  		return nil, err
    51  	}
    52  	th.AssertEquals(t, 1, len(workflowList))
    53  
    54  	workflow := workflowList[0]
    55  
    56  	t.Logf("Workflow created: %s", workflowName)
    57  
    58  	th.AssertEquals(t, workflowName, workflow.Name)
    59  
    60  	return &workflow, nil
    61  }
    62  
    63  // DeleteWorkflow deletes the given workflow.
    64  func DeleteWorkflow(t *testing.T, client *gophercloud.ServiceClient, workflow *workflows.Workflow) {
    65  	err := workflows.Delete(client, workflow.ID).ExtractErr()
    66  	if err != nil {
    67  		t.Fatalf("Unable to delete workflows %s: %v", workflow.Name, err)
    68  	}
    69  
    70  	t.Logf("Deleted workflow: %s", workflow.Name)
    71  }
    72  
    73  // GetWorkflow gets a workflow.
    74  func GetWorkflow(t *testing.T, client *gophercloud.ServiceClient, id string) (*workflows.Workflow, error) {
    75  	workflow, err := workflows.Get(client, id).Extract()
    76  	if err != nil {
    77  		t.Fatalf("Unable to get workflow %s: %v", id, err)
    78  	}
    79  	t.Logf("Workflow get: %s", workflow.Name)
    80  	return workflow, err
    81  }
    82  
    83  // ListWorkflows lists the workflows.
    84  func ListWorkflows(t *testing.T, client *gophercloud.ServiceClient, opts workflows.ListOptsBuilder) ([]workflows.Workflow, error) {
    85  	allPages, err := workflows.List(client, opts).AllPages()
    86  	if err != nil {
    87  		t.Fatalf("Unable to list workflows: %v", err)
    88  	}
    89  	workflowsList, err := workflows.ExtractWorkflows(allPages)
    90  	if err != nil {
    91  		t.Fatalf("Unable to extract workflows: %v", err)
    92  	}
    93  	t.Logf("Workflows list find, length: %d", len(workflowsList))
    94  	return workflowsList, err
    95  }