github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/mccp/mccpv2/private_domain.go (about) 1 package mccpv2 2 3 import ( 4 "fmt" 5 6 "github.com/IBM-Cloud/bluemix-go/bmxerror" 7 "github.com/IBM-Cloud/bluemix-go/client" 8 "github.com/IBM-Cloud/bluemix-go/rest" 9 ) 10 11 //ErrCodePrivateDomainDoesnotExist ... 12 var ErrCodePrivateDomainDoesnotExist = "PrivateDomainDoesnotExist" 13 14 //PrivateDomainRequest ... 15 type PrivateDomainRequest struct { 16 Name string `json:"name,omitempty"` 17 OrgGUID string `json:"owning_organization_guid,omitempty"` 18 } 19 20 //PrivateDomaineMetadata ... 21 type PrivateDomainMetadata struct { 22 GUID string `json:"guid"` 23 URL string `json:"url"` 24 } 25 26 //PrivateDomainEntity ... 27 type PrivateDomainEntity struct { 28 Name string `json:"name"` 29 OwningOrganizationGUID string `json:"owning_organization_guid"` 30 OwningOrganizationURL string `json:"owning_organization_url"` 31 SharedOrganizationURL string `json:"shared_organizations_url"` 32 } 33 34 //PrivateDomainResource ... 35 type PrivateDomainResource struct { 36 Resource 37 Entity PrivateDomainEntity 38 } 39 40 //PrivateDomainFields ... 41 type PrivateDomainFields struct { 42 Metadata PrivateDomainMetadata 43 Entity PrivateDomainEntity 44 } 45 46 //ToFields .. 47 func (resource PrivateDomainResource) ToFields() PrivateDomain { 48 entity := resource.Entity 49 50 return PrivateDomain{ 51 GUID: resource.Metadata.GUID, 52 Name: entity.Name, 53 OwningOrganizationGUID: entity.OwningOrganizationGUID, 54 OwningOrganizationURL: entity.OwningOrganizationURL, 55 SharedOrganizationURL: entity.OwningOrganizationURL, 56 } 57 } 58 59 //PrivateDomain model 60 type PrivateDomain struct { 61 GUID string 62 Name string 63 OwningOrganizationGUID string 64 OwningOrganizationURL string 65 SharedOrganizationURL string 66 } 67 68 //PrivateDomains ... 69 type PrivateDomains interface { 70 FindByNameInOrg(orgGUID, domainName string) (*PrivateDomain, error) 71 FindByName(domainName string) (*PrivateDomain, error) 72 Create(req PrivateDomainRequest, opts ...bool) (*PrivateDomainFields, error) 73 Get(privateDomainGUID string) (*PrivateDomainFields, error) 74 Delete(privateDomainGUID string, opts ...bool) error 75 } 76 77 type privateDomain struct { 78 client *client.Client 79 } 80 81 func newPrivateDomainAPI(c *client.Client) PrivateDomains { 82 return &privateDomain{ 83 client: c, 84 } 85 } 86 87 func (d *privateDomain) FindByNameInOrg(orgGUID, domainName string) (*PrivateDomain, error) { 88 rawURL := fmt.Sprintf("/v2/organizations/%s/private_domains", orgGUID) 89 req := rest.GetRequest(rawURL).Query("q", "name:"+domainName) 90 httpReq, err := req.Build() 91 if err != nil { 92 return nil, err 93 } 94 path := httpReq.URL.String() 95 domain, err := listPrivateDomainWithPath(d.client, path) 96 if err != nil { 97 return nil, err 98 } 99 if len(domain) == 0 { 100 return nil, bmxerror.New(ErrCodePrivateDomainDoesnotExist, fmt.Sprintf("Private Domain: %q doesn't exist", domainName)) 101 } 102 return &domain[0], nil 103 } 104 105 func (d *privateDomain) FindByName(domainName string) (*PrivateDomain, error) { 106 rawURL := fmt.Sprintf("/v2/private_domains") 107 req := rest.GetRequest(rawURL).Query("q", "name:"+domainName) 108 httpReq, err := req.Build() 109 if err != nil { 110 return nil, err 111 } 112 path := httpReq.URL.String() 113 domain, err := listPrivateDomainWithPath(d.client, path) 114 if err != nil { 115 return nil, err 116 } 117 if len(domain) == 0 { 118 return nil, bmxerror.New(ErrCodePrivateDomainDoesnotExist, fmt.Sprintf("Private Domain: %q doesn't exist", domainName)) 119 } 120 return &domain[0], nil 121 } 122 123 func listPrivateDomainWithPath(c *client.Client, path string) ([]PrivateDomain, error) { 124 var privateDomain []PrivateDomain 125 _, err := c.GetPaginated(path, NewCCPaginatedResources(PrivateDomainResource{}), func(resource interface{}) bool { 126 if privateDomainResource, ok := resource.(PrivateDomainResource); ok { 127 privateDomain = append(privateDomain, privateDomainResource.ToFields()) 128 return true 129 } 130 return false 131 }) 132 return privateDomain, err 133 } 134 135 /* opts is list of boolean parametes 136 opts[0] - async - Will run the create request in a background job. Recommended: 'true'. Default to 'true'. 137 */ 138 func (d *privateDomain) Create(req PrivateDomainRequest, opts ...bool) (*PrivateDomainFields, error) { 139 async := true 140 if len(opts) > 0 { 141 async = opts[0] 142 } 143 rawURL := fmt.Sprintf("/v2/private_domains?async=%t", async) 144 privateDomainFields := PrivateDomainFields{} 145 _, err := d.client.Post(rawURL, req, &privateDomainFields) 146 if err != nil { 147 return nil, err 148 } 149 return &privateDomainFields, nil 150 } 151 152 func (d *privateDomain) Get(privateDomainGUID string) (*PrivateDomainFields, error) { 153 rawURL := fmt.Sprintf("/v2/private_domains/%s", privateDomainGUID) 154 privateDomainFields := PrivateDomainFields{} 155 _, err := d.client.Get(rawURL, &privateDomainFields, nil) 156 if err != nil { 157 return nil, err 158 } 159 return &privateDomainFields, nil 160 } 161 162 // opts is list of boolean parametes 163 // opts[0] - async - Will run the delete request in a background job. Recommended: 'true'. Default to 'true'. 164 165 func (d *privateDomain) Delete(privateDomainGUID string, opts ...bool) error { 166 async := true 167 if len(opts) > 0 { 168 async = opts[0] 169 } 170 rawURL := fmt.Sprintf("/v2/private_domains/%s?async=%t", privateDomainGUID, async) 171 _, err := d.client.Delete(rawURL) 172 return err 173 }