github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/schematics/workspace.go (about)

     1  package schematics
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/IBM-Cloud/bluemix-go/client"
     7  )
     8  
     9  type WorkspaceConfig struct {
    10  	ID                 string             `json:"id"`
    11  	Name               string             `json:"name"`
    12  	Type               []string           `json:"type"`
    13  	Description        string             `json:"description"`
    14  	ResourceGroup      string             `json:"resource_group"`
    15  	Location           string             `json:"location"`
    16  	Tags               []string           `json:"tags"`
    17  	CreatedAt          string             `json:"created_at"`
    18  	CreatedBy          string             `json:"created_by"`
    19  	Status             string             `json:"status"`
    20  	WorkspaceStatusMsg StatusMsgInfo      `json:"workspace_status_msg"`
    21  	WorkspaceStatus    StatusInfo         `json:"workspace_status"`
    22  	TemplateRepo       RepoInfo           `json:"template_repo"`
    23  	TemplateData       []TemplateDataInfo `json:"template_data"`
    24  	RuntimeData        []RuntimeDataInfo  `json:"runtime_data"`
    25  	SharedData         SharedDataInfo     `json:"shared_data"`
    26  	UpdatedAt          string             `json:"updated_at"`
    27  	LastHealthCheckAt  string             `json:"last_health_check_at"`
    28  	CatalogRef         CatalogInfo        `json:"catalog_ref"`
    29  	CRN                string             `json:"crn"`
    30  }
    31  
    32  type StatusMsgInfo struct {
    33  	StatusCode string `json:"status_code"`
    34  	StatusMsg  string `json:"status_msg"`
    35  }
    36  type StatusInfo struct {
    37  	Frozen     bool   `json:"frozen"`
    38  	FrozenAt   string `json:"status_msg"`
    39  	LockedBy   string `json:"locked_by"`
    40  	FrozenBy   string `json:"frozen_by"`
    41  	Locked     bool   `json:"locked"`
    42  	LockedTime string `json:"locked_time"`
    43  }
    44  
    45  type TemplateDataInfo struct {
    46  	Env                 []EnvValues     `json:"env_values"`
    47  	Folder              string          `json:"folder"`
    48  	TemplateID          string          `json:"id"`
    49  	Type                string          `json:"type"`
    50  	Locked              bool            `json:"locked"`
    51  	UninstallScriptName string          `json:"uninstall_script_name"`
    52  	Values              string          `json:"values"`
    53  	ValuesMetadata      interface{}     `json:"values_metadata"`
    54  	ValuesURL           string          `json:"values_url"`
    55  	Variablestore       []Variablestore `json:"variablestore"`
    56  }
    57  
    58  type RuntimeDataInfo struct {
    59  	EngineCmd     string                `json:"engine_cmd"`
    60  	EngineName    string                `json:"engine_name"`
    61  	TemplateID    string                `json:"id"`
    62  	EngineVersion string                `json:"engine_version"`
    63  	LogStoreURL   string                `json:"log_store_url"`
    64  	OutputValues  map[string]string     `json:"output_values"`
    65  	StateStoreURL string                `json:"state_store_url"`
    66  	Resources     [][]map[string]string `json:"resources"`
    67  }
    68  type RepoInfo struct {
    69  	Branch  string `json:"branch"`
    70  	Release string `json:"release"`
    71  	RepoURL string `json:"repo_url"`
    72  	URL     string `json:"url"`
    73  }
    74  type SharedDataInfo struct {
    75  	ClusterID       string              `json:"cluster_id"`
    76  	ClusterName     string              `json:"cluster_name"`
    77  	EntitlementKeys []map[string]string `json:"entitlement_keys"`
    78  	Namespace       string              `json:"namespace"`
    79  	Region          string              `json:"region"`
    80  	ResourceGroupID string              `json:"resource_group_id"`
    81  }
    82  
    83  type EnvValues struct {
    84  	Hidden bool   `json:"hidden"`
    85  	Name   string `json:"name"`
    86  	// Secure bool   `json:"secure"`
    87  	Value string `json:"value"`
    88  }
    89  type OutputResponse struct {
    90  	Folder     string                    `json:"folder"`
    91  	TemplateID string                    `json:"id"`
    92  	Type       string                    `json:"type"`
    93  	Output     []map[string]OutputValues `json:"output_values"`
    94  }
    95  
    96  type OutputValues struct {
    97  	Sensitive bool        `json:"sensitive"`
    98  	Value     interface{} `json:"value"`
    99  	Type      interface{} `json:"type"`
   100  }
   101  
   102  type CreateWorkspaceConfig struct {
   103  	Name            string             `json:"name"`
   104  	Type            []string           `json:"type"`
   105  	Description     string             `json:"description"`
   106  	Tags            []string           `json:"tags"`
   107  	WorkspaceStatus StatusInfo         `json:"workspace_status"`
   108  	TemplateRepo    RepoInfo           `json:"template_repo"`
   109  	TemplateRef     string             `json:"template_ref"`
   110  	TemplateData    []TemplateDataInfo `json:"template_data"`
   111  }
   112  
   113  type Payload struct {
   114  	Name            string          `json:"name"`
   115  	Type            []string        `json:"type"`
   116  	Description     string          `json:"description"`
   117  	Tags            []string        `json:"tags"`
   118  	TemplateRef     string          `json:"template_ref"`
   119  	TemplateRepo    TemplateRepo    `json:"template_repo"`
   120  	WorkspaceStatus WorkspaceStatus `json:"workspace_status"`
   121  	TemplateData    []TemplateData  `json:"template_data"`
   122  }
   123  type TemplateRepo struct {
   124  	URL string `json:"url"`
   125  }
   126  type WorkspaceStatus struct {
   127  	Frozen bool `json:"frozen"`
   128  }
   129  type Variablestore struct {
   130  	Name        string `json:"name"`
   131  	Secure      bool   `json:"secure,omitempty"`
   132  	Value       string `json:"value"`
   133  	Description string `json:"description,omitempty"`
   134  }
   135  type TemplateData struct {
   136  	Folder        string          `json:"folder"`
   137  	Type          string          `json:"type"`
   138  	Variablestore []Variablestore `json:"variablestore"`
   139  }
   140  
   141  type CatalogInfo struct {
   142  	ItemID          string `json:"item_id"`
   143  	ItemName        string `json:"item_name"`
   144  	ItemURL         string `json:"item_url"`
   145  	ItemReadmeURL   string `json:"item_readme_url"`
   146  	ItemIconURL     string `json:"item_icon_url"`
   147  	OfferingVersion string `json:"offering_version"`
   148  }
   149  type workspace struct {
   150  	client *client.Client
   151  }
   152  
   153  type Workspaces interface {
   154  	GetWorkspaceByID(WorskpaceID string) (WorkspaceConfig, error)
   155  	GetOutputValues(WorskpaceID string) ([]OutputResponse, error)
   156  	GetStateStore(WorskpaceID, TemplateID string) (interface{}, error)
   157  	CreateWorkspace(createReq Payload) (WorkspaceConfig, error)
   158  }
   159  
   160  func newWorkspaceAPI(c *client.Client) Workspaces {
   161  	return &workspace{
   162  		client: c,
   163  	}
   164  }
   165  
   166  func (r *workspace) GetWorkspaceByID(WorskpaceID string) (WorkspaceConfig, error) {
   167  	var successV WorkspaceConfig
   168  	_, err := r.client.Get(fmt.Sprintf("/v1/workspaces/%s", WorskpaceID), &successV)
   169  	return successV, err
   170  }
   171  func (r *workspace) GetStateStore(WorskpaceID, TemplateID string) (interface{}, error) {
   172  	var successV interface{}
   173  	_, err := r.client.Get(fmt.Sprintf("/v1/workspaces/%s/runtime_data/%s/state_store", WorskpaceID, TemplateID), &successV)
   174  	return successV, err
   175  }
   176  func (r *workspace) GetOutputValues(WorskpaceID string) ([]OutputResponse, error) {
   177  	outputs := []OutputResponse{}
   178  	_, err := r.client.Get(fmt.Sprintf("/v1/workspaces/%s/output_values", WorskpaceID), &outputs)
   179  	if err != nil {
   180  		return nil, err
   181  	}
   182  	return outputs, err
   183  }
   184  func (r *workspace) CreateWorkspace(createReq Payload) (WorkspaceConfig, error) {
   185  	var successV WorkspaceConfig
   186  	_, err := r.client.Post("/v1/workspaces", createReq, &successV)
   187  	return successV, err
   188  }