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  }