github.com/IBM-Cloud/bluemix-go@v0.0.0-20240314082800-4e02a69b84b2/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 }