github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/examples/iamuum/access_group_member/main.go (about)

     1  package main
     2  
     3  import (
     4  	"flag"
     5  	"log"
     6  	"os"
     7  
     8  	"github.com/IBM-Cloud/bluemix-go/models"
     9  	"github.com/IBM-Cloud/bluemix-go/utils"
    10  
    11  	"github.com/IBM-Cloud/bluemix-go/api/account/accountv1"
    12  	"github.com/IBM-Cloud/bluemix-go/api/account/accountv2"
    13  	"github.com/IBM-Cloud/bluemix-go/api/iam/iamv1"
    14  	"github.com/IBM-Cloud/bluemix-go/api/iamuum/iamuumv2"
    15  	"github.com/IBM-Cloud/bluemix-go/api/mccp/mccpv2"
    16  	"github.com/IBM-Cloud/bluemix-go/session"
    17  	"github.com/IBM-Cloud/bluemix-go/trace"
    18  )
    19  
    20  func main() {
    21  	var org string
    22  	flag.StringVar(&org, "org", "", "Bluemix Organization")
    23  
    24  	var accessGroup string
    25  	flag.StringVar(&accessGroup, "accessGroup", "", "Bluemix access group name")
    26  
    27  	var user string
    28  	flag.StringVar(&user, "user", "", "IBM-id or email id of the user to be added")
    29  
    30  	var serviceID string
    31  	flag.StringVar(&serviceID, "serviceID", "", "Bluemix service id name")
    32  
    33  	flag.Parse()
    34  	if org == "" || accessGroup == "" || user == "" || serviceID == "" {
    35  		flag.Usage()
    36  		os.Exit(1)
    37  	}
    38  
    39  	trace.Logger = trace.NewLogger("true")
    40  	sess, err := session.New()
    41  	if err != nil {
    42  		log.Fatal(err)
    43  	}
    44  
    45  	client, err := mccpv2.New(sess)
    46  
    47  	if err != nil {
    48  		log.Fatal(err)
    49  	}
    50  	orgAPI := client.Organizations()
    51  	myorg, err := orgAPI.FindByName(org, sess.Config.Region)
    52  
    53  	if err != nil {
    54  		log.Fatal(err)
    55  	}
    56  
    57  	accClient, err := accountv2.New(sess)
    58  	if err != nil {
    59  		log.Fatal(err)
    60  	}
    61  	accountAPI := accClient.Accounts()
    62  	myAccount, err := accountAPI.FindByOrg(myorg.GUID, sess.Config.Region)
    63  	if err != nil {
    64  		log.Fatal(err)
    65  	}
    66  
    67  	iamuumClient, err := iamuumv2.New(sess)
    68  	if err != nil {
    69  		log.Fatal(err)
    70  	}
    71  	accessGroupAPI := iamuumClient.AccessGroup()
    72  
    73  	data := models.AccessGroupV2{
    74  		AccessGroup: models.AccessGroup{
    75  			Name: accessGroup,
    76  		},
    77  	}
    78  	agID, err := accessGroupAPI.Create(data, myAccount.GUID)
    79  	if err != nil {
    80  		log.Fatal(err)
    81  	}
    82  	log.Println(agID)
    83  
    84  	regionAPI := client.Regions()
    85  	region, err := regionAPI.FindRegionByName(sess.Config.Region)
    86  	if err != nil {
    87  		log.Fatal(err)
    88  	}
    89  
    90  	iamClient, err := iamv1.New(sess)
    91  	if err != nil {
    92  		log.Fatal(err)
    93  	}
    94  	serviceIdAPI := iamClient.ServiceIds()
    95  
    96  	boundTo := utils.GenerateBoundToCRN(*region, myAccount.GUID).String()
    97  
    98  	serviceData := models.ServiceID{
    99  		Name:    serviceID,
   100  		BoundTo: boundTo,
   101  	}
   102  	sID, err := serviceIdAPI.Create(serviceData)
   103  	if err != nil {
   104  		log.Fatal(err)
   105  	}
   106  	log.Println(sID)
   107  
   108  	accClient1, err := accountv1.New(sess)
   109  	if err != nil {
   110  		log.Fatal(err)
   111  	}
   112  	accountAPIV1 := accClient1.Accounts()
   113  	//Get list of users under account
   114  	userres, err := accountAPIV1.InviteAccountUser(myAccount.GUID, user)
   115  	if err != nil {
   116  		log.Fatal(err)
   117  	}
   118  	log.Println(userres)
   119  
   120  	userDetails, err := accountAPIV1.FindAccountUserByUserId(myAccount.GUID, user)
   121  	if err != nil {
   122  		log.Fatal(err)
   123  	}
   124  
   125  	accessGroupMemAPI := iamuumClient.AccessGroupMember()
   126  
   127  	var members []models.AccessGroupMemberV2
   128  
   129  	grpmem1 := models.AccessGroupMemberV2{
   130  		ID:   userDetails.IbmUniqueId,
   131  		Type: iamuumv2.AccessGroupMemberUser,
   132  	}
   133  
   134  	members = append(members, grpmem1)
   135  
   136  	grpmem2 := models.AccessGroupMemberV2{
   137  		ID:   sID.IAMID,
   138  		Type: iamuumv2.AccessGroupMemberService,
   139  	}
   140  
   141  	members = append(members, grpmem2)
   142  
   143  	addRequest := iamuumv2.AddGroupMemberRequestV2{
   144  		Members: members,
   145  	}
   146  
   147  	resp, err := accessGroupMemAPI.Add(agID.ID, addRequest)
   148  	if err != nil {
   149  		log.Fatal(err)
   150  	}
   151  
   152  	err = accessGroupMemAPI.Remove(agID.ID, resp.Members[0].ID)
   153  	if err != nil {
   154  		log.Fatal(err)
   155  	}
   156  
   157  	err = accessGroupMemAPI.Remove(agID.ID, resp.Members[1].ID)
   158  	if err != nil {
   159  		log.Fatal(err)
   160  	}
   161  
   162  	err = accessGroupAPI.Delete(agID.ID, false)
   163  	if err != nil {
   164  		log.Fatal(err)
   165  	}
   166  
   167  	err = accountAPIV1.DeleteAccountUser(myAccount.GUID, userDetails.Id)
   168  	if err != nil {
   169  		log.Fatal(err)
   170  	}
   171  
   172  }