Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit cced164

Browse files
authored
Add resource provider traits API for placement (gophercloud#1899)
1 parent 83f764e commit cced164

File tree

7 files changed

+105
-2
lines changed

7 files changed

+105
-2
lines changed

acceptance/openstack/placement/v1/resourceproviders_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,28 @@ func TestResourceProviderInventories(t *testing.T) {
9595

9696
tools.PrintResource(t, usage)
9797
}
98+
99+
func TestResourceProviderTraits(t *testing.T) {
100+
clients.RequireAdmin(t)
101+
102+
client, err := clients.NewPlacementV1Client()
103+
th.AssertNoErr(t, err)
104+
105+
// first create new resource provider
106+
name := tools.RandomString("TESTACC-", 8)
107+
t.Logf("Attempting to create resource provider: %s", name)
108+
109+
createOpts := resourceproviders.CreateOpts{
110+
Name: name,
111+
}
112+
113+
client.Microversion = "1.20"
114+
resourceProvider, err := resourceproviders.Create(client, createOpts).Extract()
115+
th.AssertNoErr(t, err)
116+
117+
// now get the traits for the newly created resource provider
118+
usage, err := resourceproviders.GetTraits(client, resourceProvider.UUID).Extract()
119+
th.AssertNoErr(t, err)
120+
121+
tools.PrintResource(t, usage)
122+
}

openstack/placement/v1/resourceproviders/doc.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,12 @@ Example to get resource providers inventories
4343
panic(err)
4444
}
4545
46+
Example to get resource providers traits
47+
48+
rp, err := resourceproviders.GetTraits(placementClient, resourceProviderID).Extract()
49+
if err != nil {
50+
panic(err)
51+
}
52+
4653
*/
4754
package resourceproviders

openstack/placement/v1/resourceproviders/requests.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,8 @@ func GetInventories(client *gophercloud.ServiceClient, resourceProviderID string
112112
_, r.Err = client.Get(getResourceProviderInventoriesURL(client, resourceProviderID), &r.Body, nil)
113113
return
114114
}
115+
116+
func GetTraits(client *gophercloud.ServiceClient, resourceProviderID string) (r GetTraitsResult) {
117+
_, r.Err = client.Get(getResourceProviderTraitsURL(client, resourceProviderID), &r.Body, nil)
118+
return
119+
}

openstack/placement/v1/resourceproviders/results.go

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,12 @@ type ResourceProviderInventories struct {
5252
Inventories map[string]Inventory `json:"inventories"`
5353
}
5454

55-
// resourceProviderResult is the resposne of a base ResourceProvider result.
55+
type ResourceProviderTraits struct {
56+
ResourceProviderGeneration int `json:"resource_provider_generation"`
57+
Traits []string `json:"traits"`
58+
}
59+
60+
// resourceProviderResult is the response of a base ResourceProvider result.
5661
type resourceProviderResult struct {
5762
gophercloud.Result
5863
}
@@ -104,7 +109,7 @@ func (r GetUsagesResult) Extract() (*ResourceProviderUsage, error) {
104109
return &s, err
105110
}
106111

107-
// GetInventoriesResult is the response of a Get usage operations. Call its Extract method
112+
// GetInventoriesResult is the response of a Get inventories operations. Call its Extract method
108113
// to interpret it as a ResourceProviderInventories.
109114
type GetInventoriesResult struct {
110115
gophercloud.Result
@@ -116,3 +121,16 @@ func (r GetInventoriesResult) Extract() (*ResourceProviderInventories, error) {
116121
err := r.ExtractInto(&s)
117122
return &s, err
118123
}
124+
125+
// GetTraitsResult is the response of a Get traits operations. Call its Extract method
126+
// to interpret it as a ResourceProviderTraits.
127+
type GetTraitsResult struct {
128+
gophercloud.Result
129+
}
130+
131+
// Extract interprets a GetTraitsResult as a ResourceProviderTraits.
132+
func (r GetTraitsResult) Extract() (*ResourceProviderTraits, error) {
133+
var s ResourceProviderTraits
134+
err := r.ExtractInto(&s)
135+
return &s, err
136+
}

openstack/placement/v1/resourceproviders/testing/fixtures.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,16 @@ const InventoriesBody = `
105105
}
106106
`
107107

108+
const TraitsBody = `
109+
{
110+
"resource_provider_generation": 1,
111+
"traits": [
112+
"CUSTOM_HW_FPGA_CLASS1",
113+
"CUSTOM_HW_FPGA_CLASS3"
114+
]
115+
}
116+
`
117+
108118
var ExpectedResourceProvider1 = resourceproviders.ResourceProvider{
109119
Generation: 1,
110120
UUID: "99c09379-6e52-4ef8-9a95-b9ce6f68452e",
@@ -177,6 +187,14 @@ var ExpectedInventories = resourceproviders.ResourceProviderInventories{
177187
},
178188
}
179189

190+
var ExpectedTraits = resourceproviders.ResourceProviderTraits{
191+
ResourceProviderGeneration: 1,
192+
Traits: []string{
193+
"CUSTOM_HW_FPGA_CLASS1",
194+
"CUSTOM_HW_FPGA_CLASS3",
195+
},
196+
}
197+
180198
func HandleResourceProviderList(t *testing.T) {
181199
th.Mux.HandleFunc("/resource_providers",
182200
func(w http.ResponseWriter, r *http.Request) {
@@ -231,3 +249,18 @@ func HandleResourceProviderGetInventories(t *testing.T) {
231249
fmt.Fprintf(w, InventoriesBody)
232250
})
233251
}
252+
253+
func HandleResourceProviderGetTraits(t *testing.T) {
254+
traitsTestUrl := fmt.Sprintf("/resource_providers/%s/traits", ResourceProviderTestID)
255+
256+
th.Mux.HandleFunc(traitsTestUrl,
257+
func(w http.ResponseWriter, r *http.Request) {
258+
th.TestMethod(t, r, "GET")
259+
th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
260+
261+
w.Header().Add("Content-Type", "application/json")
262+
w.WriteHeader(http.StatusOK)
263+
264+
fmt.Fprintf(w, TraitsBody)
265+
})
266+
}

openstack/placement/v1/resourceproviders/testing/requests_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,14 @@ func TestGetResourceProvidersInventories(t *testing.T) {
7777
th.AssertNoErr(t, err)
7878
th.AssertDeepEquals(t, ExpectedInventories, *actual)
7979
}
80+
81+
func TestGetResourceProvidersTraits(t *testing.T) {
82+
th.SetupHTTP()
83+
defer th.TeardownHTTP()
84+
85+
HandleResourceProviderGetTraits(t)
86+
87+
actual, err := resourceproviders.GetTraits(fake.ServiceClient(), ResourceProviderTestID).Extract()
88+
th.AssertNoErr(t, err)
89+
th.AssertDeepEquals(t, ExpectedTraits, *actual)
90+
}

openstack/placement/v1/resourceproviders/urls.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,7 @@ func getResourceProviderUsagesURL(client *gophercloud.ServiceClient, resourcePro
1717
func getResourceProviderInventoriesURL(client *gophercloud.ServiceClient, resourceProviderID string) string {
1818
return client.ServiceURL(apiName, resourceProviderID, "inventories")
1919
}
20+
21+
func getResourceProviderTraitsURL(client *gophercloud.ServiceClient, resourceProviderID string) string {
22+
return client.ServiceURL(apiName, resourceProviderID, "traits")
23+
}

0 commit comments

Comments
 (0)