github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/examples/resource/controller/service-alias/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "log" 7 "os" 8 9 "github.com/IBM-Cloud/bluemix-go/crn" 10 "github.com/IBM-Cloud/bluemix-go/models" 11 "github.com/IBM-Cloud/bluemix-go/utils" 12 13 "github.com/IBM-Cloud/bluemix-go/api/mccp/mccpv2" 14 "github.com/IBM-Cloud/bluemix-go/api/resource/resourcev1/catalog" 15 "github.com/IBM-Cloud/bluemix-go/api/resource/resourcev1/controller" 16 "github.com/IBM-Cloud/bluemix-go/api/resource/resourcev1/management" 17 "github.com/IBM-Cloud/bluemix-go/session" 18 "github.com/IBM-Cloud/bluemix-go/trace" 19 ) 20 21 func main() { 22 23 var name string 24 flag.StringVar(&name, "name", "", "Name of the service-instance") 25 26 var servicename string 27 flag.StringVar(&servicename, "service", "", "Name of the service offering") 28 29 var serviceplan string 30 flag.StringVar(&serviceplan, "plan", "", "Name of the service plan") 31 32 var resourcegrp string 33 flag.StringVar(&resourcegrp, "resource-group", "", "Name of the resource group") 34 35 var location string 36 flag.StringVar(&location, "location", "", "location or region to deploy") 37 38 var alias string 39 flag.StringVar(&alias, "alias", "", "Name of the service alias") 40 41 var org string 42 flag.StringVar(&org, "org", "", "Organization") 43 44 var space string 45 flag.StringVar(&space, "space", "", "Space") 46 47 flag.Parse() 48 49 fmt.Println(name, ":", servicename, ":", serviceplan, ":", location) 50 51 if name == "" || servicename == "" || serviceplan == "" || location == "" || alias == "" || org == "" || space == "" { 52 flag.Usage() 53 os.Exit(1) 54 } 55 56 trace.Logger = trace.NewLogger("true") 57 sess, err := session.New() 58 if err != nil { 59 log.Fatal(err) 60 } 61 62 catalogClient, err := catalog.New(sess) 63 64 if err != nil { 65 log.Fatal(err) 66 } 67 resCatalogAPI := catalogClient.ResourceCatalog() 68 69 service, err := resCatalogAPI.FindByName(servicename, true) 70 if err != nil { 71 log.Fatal(err) 72 } 73 74 servicePlanID, err := resCatalogAPI.GetServicePlanID(service[0], serviceplan) 75 if err != nil { 76 log.Fatal(err) 77 } 78 79 if servicePlanID == "" { 80 _, err := resCatalogAPI.GetServicePlan(serviceplan) 81 if err != nil { 82 log.Fatal(err) 83 } 84 servicePlanID = serviceplan 85 } 86 87 deployments, err := resCatalogAPI.ListDeployments(servicePlanID) 88 if err != nil { 89 log.Fatal(err) 90 } 91 92 if len(deployments) == 0 { 93 94 log.Printf("No deployment found for service plan : %s", serviceplan) 95 os.Exit(1) 96 } 97 98 supportedDeployments := []models.ServiceDeployment{} 99 supportedLocations := make(map[string]bool) 100 for _, d := range deployments { 101 if d.Metadata.RCCompatible { 102 deploymentLocation := d.Metadata.Deployment.Location 103 supportedLocations[deploymentLocation] = true 104 if deploymentLocation == location { 105 supportedDeployments = append(supportedDeployments, d) 106 } 107 } 108 } 109 110 if len(supportedDeployments) == 0 { 111 locationList := make([]string, 0, len(supportedLocations)) 112 for l := range supportedLocations { 113 locationList = append(locationList, l) 114 } 115 log.Printf("No deployment found for service plan %s at location %s.\nValid location(s) are: %q.\nUse service instance example if the service is a Cloud Foundry service.", serviceplan, location, locationList) 116 os.Exit(1) 117 } 118 119 managementClient, err := management.New(sess) 120 if err != nil { 121 log.Fatal(err) 122 } 123 124 var resourceGroupID string 125 resGrpAPI := managementClient.ResourceGroup() 126 127 if resourcegrp == "" { 128 129 resourceGroupQuery := management.ResourceGroupQuery{ 130 Default: true, 131 } 132 133 grpList, err := resGrpAPI.List(&resourceGroupQuery) 134 135 if err != nil { 136 log.Fatal(err) 137 } 138 resourceGroupID = grpList[0].ID 139 140 } else { 141 grp, err := resGrpAPI.FindByName(nil, resourcegrp) 142 if err != nil { 143 log.Fatal(err) 144 } 145 resourceGroupID = grp[0].ID 146 } 147 148 controllerClient, err := controller.New(sess) 149 150 if err != nil { 151 log.Fatal(err) 152 } 153 154 resServiceInstanceAPI := controllerClient.ResourceServiceInstance() 155 156 var serviceInstancePayload = controller.CreateServiceInstanceRequest{ 157 Name: name, 158 ServicePlanID: servicePlanID, 159 ResourceGroupID: resourceGroupID, 160 TargetCrn: supportedDeployments[0].CatalogCRN, 161 } 162 163 serviceInstance, err := resServiceInstanceAPI.CreateInstance(serviceInstancePayload) 164 165 if err != nil { 166 log.Fatal(err) 167 } 168 169 log.Println("Resoure service Instance Details :", serviceInstance) 170 171 serviceInstance, err = resServiceInstanceAPI.GetInstance(serviceInstance.ID) 172 if err != nil { 173 log.Fatal(err) 174 } 175 176 log.Println("Resoure service Instance Details :", serviceInstance) 177 178 aliasrsp, err := resCatalogAPI.GetDeploymentAlias(serviceInstance.ServicePlanID, serviceInstance.RegionID, sess.Config.Region) 179 180 if err != nil { 181 log.Fatal(err) 182 } 183 if aliasrsp == nil { 184 log.Fatalf("Cannot create alias for service instance: %s in region %s", serviceInstance.ID, sess.Config.Region) 185 186 } 187 188 sess, err = session.New() 189 if err != nil { 190 log.Fatal(err) 191 } 192 193 mccpClient, err := mccpv2.New(sess) 194 195 orgAPI := mccpClient.Organizations() 196 197 orgrsp, err := orgAPI.FindByName(org, "") 198 if err != nil { 199 log.Fatal(err) 200 } 201 202 spaceAPI := mccpClient.Spaces() 203 204 spacersp, err := spaceAPI.FindByNameInOrg(orgrsp.GUID, space, "") 205 if err != nil { 206 log.Fatal(err) 207 } 208 209 regionAPI := mccpClient.Regions() 210 211 region, err := regionAPI.FindRegionByName(sess.Config.Region) 212 if err != nil { 213 log.Fatal(err) 214 } 215 216 var crn crn.CRN 217 crn = utils.GenerateSpaceCRN(*region, orgrsp.GUID, spacersp.GUID) 218 219 serviceAliasAPI := controllerClient.ResourceServiceAlias() 220 createServiceAlias := controller.CreateServiceAliasParams{ 221 Name: alias, 222 ServiceInstanceID: serviceInstance.ID, 223 ScopeCRN: crn, 224 } 225 aliasresp, err := serviceAliasAPI.CreateAlias(createServiceAlias) 226 if err != nil { 227 log.Fatal(err) 228 } 229 230 log.Println(aliasresp) 231 232 err = serviceAliasAPI.DeleteAlias(aliasresp.ID) 233 234 if err != nil { 235 log.Fatal(err) 236 } 237 238 err = resServiceInstanceAPI.DeleteInstance(serviceInstance.ID, true) 239 240 if err != nil { 241 log.Fatal(err) 242 } 243 }