github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/examples/mccp/app/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "log" 7 "os" 8 "time" 9 10 "github.com/IBM-Cloud/bluemix-go/api/mccp/mccpv2" 11 "github.com/IBM-Cloud/bluemix-go/helpers" 12 "github.com/IBM-Cloud/bluemix-go/session" 13 "github.com/IBM-Cloud/bluemix-go/trace" 14 ) 15 16 func main() { 17 18 var path string 19 flag.StringVar(&path, "path", "", "Bluemix path for application") 20 21 var org string 22 flag.StringVar(&org, "org", "", "Bluemix Organization") 23 24 var name string 25 flag.StringVar(&name, "name", "", "Bluemix app name") 26 27 var space string 28 flag.StringVar(&space, "space", "", "Bluemix Space") 29 30 var diego bool 31 flag.BoolVar(&diego, "diego", false, "Bluemix Diego") 32 33 var dockerImage string 34 flag.StringVar(&dockerImage, "docker", "", "Docker image") 35 36 var sharedDomain string 37 flag.StringVar(&sharedDomain, "shared_domain", "mybluemix.net", "Bluemix shared domain") 38 39 var timeout time.Duration 40 flag.DurationVar(&timeout, "timeout", 120*time.Second, "Maximum time to wait for application to start") 41 42 var routeName string 43 flag.StringVar(&routeName, "route", "", "Bluemix app route") 44 45 var buildpack string 46 flag.StringVar(&buildpack, "buildpack", "https://github.com/cloudfoundry/nodejs-buildpack.git", "Bluemix buildpack") 47 48 var newBuildPack string 49 flag.StringVar(&newBuildPack, "new_buildpack", "", "Bluemix buildpack") 50 51 var serviceOffering string 52 flag.StringVar(&serviceOffering, "so", "cleardb", "Bluemix Service Offering") 53 54 var servicePlan string 55 flag.StringVar(&servicePlan, "plan", "cb5", "Bluemix Service Plan") 56 57 var instance int 58 flag.IntVar(&instance, "instance", 2, "Bluemix App Instance") 59 60 var serviceInstanceName string 61 flag.StringVar(&serviceInstanceName, "svcname", "myservice", "Bluemix service instance name for the cloudantnosqldb offering") 62 63 var memory int 64 flag.IntVar(&memory, "memory", 128, "Bluemix app memory") 65 66 var diskQuota int 67 flag.IntVar(&diskQuota, "diskQuota", 512, "Bluemix app diskquota") 68 69 var clean bool 70 flag.BoolVar(&clean, "clean", false, "If set to true it will delete the application") 71 72 flag.Parse() 73 74 if name == "" || space == "" || org == "" || path == "" || routeName == "" { 75 flag.Usage() 76 os.Exit(1) 77 } 78 79 trace.Logger = trace.NewLogger("true") 80 81 sess, err := session.New() 82 if err != nil { 83 log.Fatal(err) 84 } 85 86 client, err := mccpv2.New(sess) 87 88 if err != nil { 89 log.Fatal(err) 90 } 91 region := sess.Config.Region 92 orgAPI := client.Organizations() 93 myorg, err := orgAPI.FindByName(org, region) 94 95 if err != nil { 96 log.Fatal(err) 97 } 98 99 spaceAPI := client.Spaces() 100 myspace, err := spaceAPI.FindByNameInOrg(myorg.GUID, space, region) 101 102 if err != nil { 103 log.Fatal(err) 104 } 105 log.Println(myorg.GUID, myspace.GUID) 106 107 serviceOfferingAPI := client.ServiceOfferings() 108 myserviceOff, err := serviceOfferingAPI.FindByLabel(serviceOffering) 109 if err != nil { 110 log.Fatal(err) 111 } 112 servicePlanAPI := client.ServicePlans() 113 plan, err := servicePlanAPI.FindPlanInServiceOffering(myserviceOff.GUID, servicePlan) 114 if err != nil { 115 log.Fatal(err) 116 } 117 118 serviceInstanceAPI := client.ServiceInstances() 119 myService, err := serviceInstanceAPI.Create(mccpv2.ServiceInstanceCreateRequest{ 120 Name: serviceInstanceName, 121 PlanGUID: plan.GUID, 122 SpaceGUID: myspace.GUID, 123 }) 124 if err != nil { 125 log.Fatal(err) 126 } 127 128 appAPI := client.Apps() 129 _, err = appAPI.FindByName(myspace.GUID, name) 130 131 if err == nil { 132 log.Fatal(err) 133 } 134 135 var appPayload = mccpv2.AppRequest{ 136 Name: helpers.String(name), 137 SpaceGUID: helpers.String(myspace.GUID), 138 BuildPack: helpers.String(buildpack), 139 Instances: instance, 140 Memory: memory, 141 DiskQuota: diskQuota, 142 Diego: diego, 143 HealthCheckTimeout: 10, 144 //DockerImage: helpers.String(dockerImage), 145 } 146 147 newapp, err := appAPI.Create(appPayload) 148 if err != nil { 149 log.Fatal(err) 150 } 151 152 sharedDomainAPI := client.SharedDomains() 153 domain, err := sharedDomainAPI.FindByName(sharedDomain) 154 fmt.Println(domain) 155 if err != nil { 156 log.Fatal(err) 157 } 158 159 routeAPI := client.Routes() 160 route, err := routeAPI.Find(routeName, domain.GUID) 161 fmt.Println(route) 162 if err != nil { 163 log.Fatal(err) 164 } 165 166 if len(route) == 0 { 167 req := mccpv2.RouteRequest{ 168 Host: routeName, 169 DomainGUID: domain.GUID, 170 SpaceGUID: myspace.GUID, 171 } 172 newroute, err := routeAPI.Create(req) 173 fmt.Println(newroute) 174 if err != nil { 175 log.Fatal(err) 176 } 177 bindRoute, err := appAPI.BindRoute(newapp.Metadata.GUID, newroute.Metadata.GUID) 178 fmt.Println(bindRoute) 179 if err != nil { 180 log.Fatal(err) 181 } 182 183 } else { 184 bindRoute, err := appAPI.BindRoute(newapp.Metadata.GUID, route[0].GUID) 185 fmt.Println(bindRoute) 186 if err != nil { 187 log.Fatal(err) 188 } 189 190 } 191 if dockerImage == "" { 192 uploadResponse, err := appAPI.Upload(newapp.Metadata.GUID, path) 193 if err != nil { 194 log.Fatal(err) 195 } 196 log.Println(uploadResponse) 197 } 198 199 appState, err := appAPI.Start(newapp.Metadata.GUID, timeout) 200 if err != nil { 201 log.Fatal(err) 202 } 203 if appState.PackageState != mccpv2.AppStagedState { 204 log.Fatalf("Application couldn't be staged, current status is %s", appState.PackageState) 205 } 206 if appState.InstanceState != mccpv2.AppRunningState { 207 log.Fatalf("Application is not yet running, current status is %s", appState.InstanceState) 208 } 209 210 sbAPI := client.ServiceBindings() 211 212 sb, err := sbAPI.Create(mccpv2.ServiceBindingRequest{ 213 ServiceInstanceGUID: myService.Metadata.GUID, 214 AppGUID: newapp.Metadata.GUID, 215 }) 216 217 if err != nil { 218 log.Fatal(err) 219 } 220 sbFields, err := sbAPI.Get(sb.Metadata.GUID) 221 if err != nil { 222 log.Fatal(err) 223 } 224 log.Println(*sbFields) 225 226 apps, err := appAPI.Get(newapp.Metadata.GUID) 227 fmt.Println(apps) 228 if err != nil { 229 log.Fatal(err) 230 } 231 232 //Update name, buildpack 233 appPayload.Name = helpers.String("testappupdate") 234 appPayload.SpaceGUID = helpers.String(myspace.GUID) 235 appPayload.BuildPack = helpers.String(newBuildPack) 236 237 updateapp, err := appAPI.Update(newapp.Metadata.GUID, appPayload) 238 fmt.Println(updateapp) 239 if err != nil { 240 log.Fatal(err) 241 } 242 243 appInstances, err := appAPI.Instances(updateapp.Metadata.GUID) 244 fmt.Println(appInstances) 245 if err != nil { 246 log.Fatal(err) 247 } 248 249 if clean { 250 err := appAPI.DeleteServiceBindings(updateapp.Metadata.GUID, sb.Metadata.GUID) 251 if err != nil { 252 log.Fatal(err) 253 } 254 err = appAPI.Delete(updateapp.Metadata.GUID, true, true) 255 if err != nil { 256 log.Fatal(err) 257 } 258 } 259 260 }