github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/examples/resource/controller/service-instance/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "log" 6 "os" 7 8 bluemix "github.com/IBM-Cloud/bluemix-go" 9 "github.com/IBM-Cloud/bluemix-go/api/resource/resourcev1/catalog" 10 "github.com/IBM-Cloud/bluemix-go/api/resource/resourcev1/controller" 11 "github.com/IBM-Cloud/bluemix-go/api/resource/resourcev1/management" 12 "github.com/IBM-Cloud/bluemix-go/models" 13 "github.com/IBM-Cloud/bluemix-go/session" 14 "github.com/IBM-Cloud/bluemix-go/trace" 15 ) 16 17 func main() { 18 19 var name string 20 flag.StringVar(&name, "name", "", "Name of the service-instance") 21 22 var servicename string 23 flag.StringVar(&servicename, "service", "", "Name of the service offering") 24 25 var serviceplan string 26 flag.StringVar(&serviceplan, "plan", "", "Name of the service plan") 27 28 var resourcegrp string 29 flag.StringVar(&resourcegrp, "resource-group", "", "Name of the resource group") 30 31 var location string 32 flag.StringVar(&location, "location", "", "location or region to deploy") 33 34 flag.Parse() 35 36 if name == "" || servicename == "" || serviceplan == "" || location == "" { 37 flag.Usage() 38 os.Exit(1) 39 } 40 41 trace.Logger = trace.NewLogger("true") 42 sess, err := session.New(&bluemix.Config{Debug: true}) 43 if err != nil { 44 log.Fatal(err) 45 } 46 47 catalogClient, err := catalog.New(sess) 48 49 if err != nil { 50 log.Fatal(err) 51 } 52 resCatalogAPI := catalogClient.ResourceCatalog() 53 54 service, err := resCatalogAPI.FindByName(servicename, true) 55 if err != nil { 56 log.Fatal(err) 57 } 58 59 servicePlanID, err := resCatalogAPI.GetServicePlanID(service[0], serviceplan) 60 if err != nil { 61 log.Fatal(err) 62 } 63 if servicePlanID == "" { 64 _, err := resCatalogAPI.GetServicePlan(serviceplan) 65 if err != nil { 66 log.Fatal(err) 67 } 68 servicePlanID = serviceplan 69 } 70 deployments, err := resCatalogAPI.ListDeployments(servicePlanID) 71 if err != nil { 72 log.Fatal(err) 73 } 74 75 if len(deployments) == 0 { 76 77 log.Printf("No deployment found for service plan : %s", serviceplan) 78 os.Exit(1) 79 } 80 81 supportedDeployments := []models.ServiceDeployment{} 82 supportedLocations := make(map[string]bool) 83 for _, d := range deployments { 84 if d.Metadata.RCCompatible { 85 deploymentLocation := d.Metadata.Deployment.Location 86 supportedLocations[deploymentLocation] = true 87 if deploymentLocation == location { 88 supportedDeployments = append(supportedDeployments, d) 89 } 90 } 91 } 92 93 if len(supportedDeployments) == 0 { 94 locationList := make([]string, 0, len(supportedLocations)) 95 for l := range supportedLocations { 96 locationList = append(locationList, l) 97 } 98 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) 99 os.Exit(1) 100 } 101 102 managementClient, err := management.New(sess) 103 if err != nil { 104 log.Fatal(err) 105 } 106 107 var resourceGroupID string 108 resGrpAPI := managementClient.ResourceGroup() 109 110 if resourcegrp == "" { 111 112 resourceGroupQuery := management.ResourceGroupQuery{ 113 Default: true, 114 } 115 116 grpList, err := resGrpAPI.List(&resourceGroupQuery) 117 118 if err != nil { 119 log.Fatal(err) 120 } 121 resourceGroupID = grpList[0].ID 122 123 } else { 124 grp, err := resGrpAPI.FindByName(nil, resourcegrp) 125 if err != nil { 126 log.Fatal(err) 127 } 128 resourceGroupID = grp[0].ID 129 } 130 131 controllerClient, err := controller.New(sess) 132 133 if err != nil { 134 log.Fatal(err) 135 } 136 137 resServiceInstanceAPI := controllerClient.ResourceServiceInstance() 138 139 var serviceInstancePayload = controller.CreateServiceInstanceRequest{ 140 Name: name, 141 ServicePlanID: servicePlanID, 142 ResourceGroupID: resourceGroupID, 143 TargetCrn: supportedDeployments[0].CatalogCRN, 144 } 145 146 serviceInstance, err := resServiceInstanceAPI.CreateInstance(serviceInstancePayload) 147 148 if err != nil { 149 log.Fatal(err) 150 } 151 152 log.Println("Resoure service Instance Details :", serviceInstance) 153 154 serviceInstance, err = resServiceInstanceAPI.GetInstance(serviceInstance.ID) 155 if err != nil { 156 log.Fatal(err) 157 } 158 159 log.Println("Resoure service Instance Details :", serviceInstance) 160 161 serviceInstanceUpdatePayload := controller.UpdateServiceInstanceRequest{ 162 Name: "update-service", 163 ServicePlanID: servicePlanID, 164 } 165 166 serviceInstance, err = resServiceInstanceAPI.UpdateInstance(serviceInstance.ID, serviceInstanceUpdatePayload) 167 168 if err != nil { 169 log.Fatal(err) 170 } 171 172 log.Println("Resoure service Instance Details after update :", serviceInstance) 173 174 err = resServiceInstanceAPI.DeleteInstance(serviceInstance.ID, true) 175 176 if err != nil { 177 log.Fatal(err) 178 } 179 180 }