github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/openstack/identity/v3/agency/requests.go (about) 1 package agency 2 3 import ( 4 "github.com/opentelekomcloud/gophertelekomcloud" 5 "github.com/opentelekomcloud/gophertelekomcloud/pagination" 6 ) 7 8 type CreateOpts struct { 9 Name string `json:"name" required:"true"` 10 DomainID string `json:"domain_id" required:"true"` 11 DelegatedDomain string `json:"trust_domain_name" required:"true"` 12 Description string `json:"description,omitempty"` 13 } 14 15 type CreateOptsBuilder interface { 16 ToAgencyCreateMap() (map[string]interface{}, error) 17 } 18 19 func (opts CreateOpts) ToAgencyCreateMap() (map[string]interface{}, error) { 20 return golangsdk.BuildRequestBody(opts, "agency") 21 } 22 23 func Create(c *golangsdk.ServiceClient, opts CreateOptsBuilder) (r CreateResult) { 24 b, err := opts.ToAgencyCreateMap() 25 if err != nil { 26 r.Err = err 27 return 28 } 29 30 _, r.Err = c.Post(rootURL(c), b, &r.Body, nil) 31 return 32 } 33 34 type UpdateOpts struct { 35 DelegatedDomain string `json:"trust_domain_name,omitempty"` 36 Description string `json:"description,omitempty"` 37 } 38 39 type UpdateOptsBuilder interface { 40 ToAgencyUpdateMap() (map[string]interface{}, error) 41 } 42 43 func (opts UpdateOpts) ToAgencyUpdateMap() (map[string]interface{}, error) { 44 return golangsdk.BuildRequestBody(opts, "agency") 45 } 46 47 func Update(c *golangsdk.ServiceClient, id string, opts UpdateOptsBuilder) (r UpdateResult) { 48 b, err := opts.ToAgencyUpdateMap() 49 if err != nil { 50 r.Err = err 51 return 52 } 53 54 reqOpt := &golangsdk.RequestOpts{OkCodes: []int{200}} 55 _, r.Err = c.Put(resourceURL(c, id), b, &r.Body, reqOpt) 56 return 57 } 58 59 func Get(c *golangsdk.ServiceClient, id string) (r GetResult) { 60 _, r.Err = c.Get(resourceURL(c, id), &r.Body, nil) 61 return 62 } 63 64 func Delete(c *golangsdk.ServiceClient, id string) (r ErrResult) { 65 _, r.Err = c.Delete(resourceURL(c, id), nil) 66 return 67 } 68 69 func AttachRoleByProject(c *golangsdk.ServiceClient, agencyID, projectID, roleID string) (r ErrResult) { 70 reqOpt := &golangsdk.RequestOpts{OkCodes: []int{204}} 71 _, r.Err = c.Put(roleURL(c, "projects", projectID, agencyID, roleID), nil, nil, reqOpt) 72 return 73 } 74 75 func AttachRoleByDomain(c *golangsdk.ServiceClient, agencyID, domainID, roleID string) (r ErrResult) { 76 reqOpt := &golangsdk.RequestOpts{OkCodes: []int{204}} 77 _, r.Err = c.Put(roleURL(c, "domains", domainID, agencyID, roleID), nil, nil, reqOpt) 78 return 79 } 80 81 func DetachRoleByProject(c *golangsdk.ServiceClient, agencyID, projectID, roleID string) (r ErrResult) { 82 reqOpt := &golangsdk.RequestOpts{OkCodes: []int{204}} 83 _, r.Err = c.Delete(roleURL(c, "projects", projectID, agencyID, roleID), reqOpt) 84 return 85 } 86 87 func DetachRoleByDomain(c *golangsdk.ServiceClient, agencyID, domainID, roleID string) (r ErrResult) { 88 reqOpt := &golangsdk.RequestOpts{OkCodes: []int{204}} 89 _, r.Err = c.Delete(roleURL(c, "domains", domainID, agencyID, roleID), reqOpt) 90 return 91 } 92 93 func ListRolesAttachedOnProject(c *golangsdk.ServiceClient, agencyID, projectID string) (r ListRolesResult) { 94 _, r.Err = c.Get(listRolesURL(c, "projects", projectID, agencyID), &r.Body, nil) 95 return 96 } 97 98 func ListRolesAttachedOnDomain(c *golangsdk.ServiceClient, agencyID, domainID string) (r ListRolesResult) { 99 _, r.Err = c.Get(listRolesURL(c, "domains", domainID, agencyID), &r.Body, nil) 100 return 101 } 102 103 type ListOptsBuilder interface { 104 ToAgencyListQuery() (string, error) 105 } 106 107 type ListOpts struct { 108 DomainID string `q:"domain_id"` 109 Name string `q:"name"` 110 TrustDomainID string `q:"trust_domain_id"` 111 } 112 113 func (opts ListOpts) ToAgencyListQuery() (string, error) { 114 q, err := golangsdk.BuildQueryString(opts) 115 if err != nil { 116 return "", err 117 } 118 return q.String(), nil 119 } 120 121 func List(client *golangsdk.ServiceClient, opts ListOptsBuilder) pagination.Pager { 122 url := rootURL(client) 123 if opts != nil { 124 q, err := opts.ToAgencyListQuery() 125 if err != nil { 126 return pagination.Pager{Err: err} 127 } 128 url += q 129 } 130 pager := pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page { 131 return AgenciesPage{SinglePageBase: pagination.SinglePageBase(r)} 132 }) 133 pager.Headers = map[string]string{"Content-Type": "application/json"} 134 return pager 135 }