Skip to content

Commit 51519b7

Browse files
authored
#160 adds support for PAR (#161)
* #160 adds support for PAR
1 parent 0956f56 commit 51519b7

13 files changed

+584
-14
lines changed

client/bare_metal_client.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,4 +189,9 @@ type BareMetalClient interface {
189189
UpdateVolumeBackup(id string, opts *baremetal.IfMatchDisplayNameOptions) (vol *baremetal.VolumeBackup, e error)
190190

191191
UploadAPIKey(userID, key string, opts *baremetal.RetryTokenOptions) (apiKey *baremetal.APIKey, e error)
192+
193+
CreatePreauthenticatedRequest(namespace baremetal.Namespace, bucketName string, parDetails *baremetal.CreatePreauthenticatedRequestDetails) (par *baremetal.PreauthenticatedRequest, e error)
194+
DeletePreauthenticatedRequest(namespace baremetal.Namespace, bucketName string, parId string, options *baremetal.ClientRequestOptions) (e error)
195+
GetPreauthenticatedRequest(namespace baremetal.Namespace, bucketName string, parId string, options *baremetal.ClientRequestOptions) (par *baremetal.PreauthenticatedRequestSummary, e error)
196+
ListPreauthenticatedRequests(namespace baremetal.Namespace, bucketName string, options *baremetal.ListPreauthenticatedRequestOptions) (parList *baremetal.ListPreauthenticatedRequests, e error)
192197
}

client/mocks/bare_metal_client.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3658,5 +3658,75 @@ func (_m *BareMetalClient) UploadAPIKey(userID string, key string, opts *baremet
36583658

36593659
return r0, r1
36603660
}
3661+
func (_m *BareMetalClient) CreatePreauthenticatedRequest(namespace baremetal.Namespace, bucketName string, parDetails *baremetal.CreatePreauthenticatedRequestDetails) (*baremetal.PreauthenticatedRequest, error){
3662+
ret := _m.Called(namespace, bucketName, parDetails)
3663+
3664+
var r0 *baremetal.PreauthenticatedRequest
3665+
if rf, ok := ret.Get(0).(func(baremetal.Namespace, string, *baremetal.CreatePreauthenticatedRequestDetails) *baremetal.PreauthenticatedRequest); ok {
3666+
r0 = rf(namespace, bucketName, parDetails)
3667+
} else {
3668+
if ret.Get(0) != nil {
3669+
r0 = ret.Get(0).(*baremetal.PreauthenticatedRequest)
3670+
}
3671+
}
3672+
3673+
var r1 error
3674+
if rf, ok := ret.Get(0).(func(baremetal.Namespace, string, *baremetal.CreatePreauthenticatedRequestDetails) error); ok {
3675+
r1 = rf(namespace, bucketName, parDetails)
3676+
} else {
3677+
r1 = ret.Error(1)
3678+
}
3679+
3680+
return r0, r1
3681+
3682+
}
3683+
func (_m *BareMetalClient) DeletePreauthenticatedRequest(namespace baremetal.Namespace, bucketName string, parId string, options *baremetal.ClientRequestOptions) error {
3684+
ret := _m.Called(namespace, bucketName, parId, options)
3685+
var r1 error
3686+
if rf, ok := ret.Get(0).(func(baremetal.Namespace, string, string, *baremetal.ClientRequestOptions) error); ok {
3687+
r1 = rf(namespace, bucketName, parId, options)
3688+
} else {
3689+
r1 = ret.Error(0)
3690+
}
3691+
return r1
3692+
}
3693+
3694+
func (_m *BareMetalClient) GetPreauthenticatedRequest(namespace baremetal.Namespace, bucketName string, parId string, options *baremetal.ClientRequestOptions) (*baremetal.PreauthenticatedRequestSummary, error) {
3695+
ret := _m.Called(namespace, bucketName, parId, options)
3696+
3697+
var r0 *baremetal.PreauthenticatedRequestSummary
3698+
if rf, ok := ret.Get(0).(func(baremetal.Namespace, string, string, *baremetal.ClientRequestOptions) *baremetal.PreauthenticatedRequestSummary); ok {
3699+
r0 = rf(namespace, bucketName, parId, options)
3700+
} else {
3701+
r0 = ret.Get(0).(*baremetal.PreauthenticatedRequestSummary)
3702+
}
3703+
3704+
var r1 error
3705+
if rf, ok := ret.Get(1).(func(baremetal.Namespace, string, string, *baremetal.ClientRequestOptions) error); ok {
3706+
r1 = rf(namespace, bucketName, parId, options)
3707+
} else {
3708+
r1 = ret.Error(1)
3709+
}
3710+
return r0, r1
3711+
3712+
}
3713+
func (_m *BareMetalClient) ListPreauthenticatedRequests(namespace baremetal.Namespace, bucketName string, options *baremetal.ListPreauthenticatedRequestOptions) (parList *baremetal.ListPreauthenticatedRequests, e error) {
3714+
ret := _m.Called(namespace, bucketName, options)
3715+
3716+
var r0 *baremetal.ListPreauthenticatedRequests
3717+
if rf, ok := ret.Get(0).(func(baremetal.Namespace, string, *baremetal.ListPreauthenticatedRequestOptions) *baremetal.ListPreauthenticatedRequests); ok {
3718+
r0 = rf(namespace, bucketName, options)
3719+
} else {
3720+
r0 = ret.Get(0).(*baremetal.ListPreauthenticatedRequests)
3721+
}
3722+
3723+
var r1 error
3724+
if rf, ok := ret.Get(0).(func(baremetal.Namespace, string, *baremetal.ListPreauthenticatedRequestOptions) error); ok {
3725+
r1 = rf(namespace, bucketName, options)
3726+
} else {
3727+
r1 = ret.Error(1)
3728+
}
3729+
return r0, r1
3730+
}
36613731

36623732
var _ client.BareMetalClient = (*BareMetalClient)(nil)
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# ___ ____ _ ____ _ _____
2+
# / _ \| _ \ / \ / ___| | | ____|
3+
# | | | | |_) | / _ \| | | | | _|
4+
# | |_| | _ < / ___ | |___| |___| |___
5+
# \___/|_| \_/_/ \_\____|_____|_____|
6+
7+
## PAR(preauthenticated requests) management.
8+
## This example creates two preauthenticated requests, one on a bucket and the second on an object
9+
## Export the environmental variables used for configuration.
10+
## Provide the script with an object and bucket present in your namespace
11+
12+
variable "tenancy_ocid" {}
13+
variable "user_ocid" {}
14+
variable "fingerprint" {}
15+
variable "private_key_path" {}
16+
variable "compartment_ocid" {}
17+
variable "namespace_name" {}
18+
19+
variable "bucket_name" {}
20+
variable "object_name" {}
21+
22+
provider "baremetal" {
23+
region = "us-phoenix-1"
24+
alias = "phx"
25+
tenancy_ocid = "${var.tenancy_ocid}"
26+
user_ocid = "${var.user_ocid}"
27+
fingerprint = "${var.fingerprint}"
28+
private_key_path = "${var.private_key_path}"
29+
}
30+
31+
32+
resource "baremetal_objectstorage_preauthrequest" "parOnBucket" {
33+
namespace = "${var.namespace_name}"
34+
bucket = "${var.bucket_name}"
35+
name = "parOnBucket"
36+
access_type = "AnyObjectWrite" //Other configurations accepted are ObjectWrite, ObjectReadWrite
37+
time_expires = "2019-11-10T23:00:00Z"
38+
}
39+
40+
resource "baremetal_objectstorage_preauthrequest" "parOnObject" {
41+
namespace = "${var.namespace_name}"
42+
bucket = "${var.bucket_name}"
43+
object = "${var.object_name}"
44+
name = "parOnObject"
45+
access_type = "ObjectRead" //Other configurations accepted are ObjectWrite, ObjectReadWrite
46+
time_expires = "2019-11-10T23:00:00Z"
47+
}

helpers_objectstorage.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,47 @@ var objectSchema = map[string]*schema.Schema{
7272
Optional: true,
7373
},
7474
}
75+
76+
var preauthenticatedRequestSchema = map[string]*schema.Schema{
77+
"id": {
78+
Type: schema.TypeString,
79+
Optional:true,
80+
Computed:true,
81+
},
82+
"namespace": {
83+
Type: schema.TypeString,
84+
Required: true,
85+
Computed: false,
86+
},
87+
"name": {
88+
Type: schema.TypeString,
89+
Required: true,
90+
Computed: false,
91+
},
92+
"bucket": {
93+
Type: schema.TypeString,
94+
Required: true,
95+
Computed: false,
96+
},
97+
"object": {
98+
Type: schema.TypeString,
99+
Optional: true,
100+
Computed: false,
101+
},
102+
"access_type": {
103+
Type: schema.TypeString,
104+
Computed: false,
105+
Default: baremetal.ObjectRead,
106+
Optional: true,
107+
ValidateFunc: validation.StringInSlice([]string{
108+
string(baremetal.PARAnyObjectWrite),
109+
string(baremetal.PARObjectRead),
110+
string(baremetal.PARObjectReadWrite),
111+
string(baremetal.ObjectRead)}, true),
112+
},
113+
"time_expires": {
114+
Type: schema.TypeString,
115+
Computed: false,
116+
Required: true,
117+
},
118+
}

provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ func resourcesMap() map[string]*schema.Resource {
183183
"baremetal_load_balancer_listener": LoadBalancerListenerResource(),
184184
"baremetal_objectstorage_bucket": BucketResource(),
185185
"baremetal_objectstorage_object": ObjectResource(),
186+
"baremetal_objectstorage_preauthrequest": PreauthenticatedRequestResource(),
186187
}
187188
}
188189

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
// Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
2+
3+
package main
4+
5+
import (
6+
"github.com/MustWin/baremetal-sdk-go"
7+
"github.com/hashicorp/terraform/helper/schema"
8+
9+
"github.com/oracle/terraform-provider-baremetal/client"
10+
"github.com/oracle/terraform-provider-baremetal/crud"
11+
"github.com/pkg/errors"
12+
"time"
13+
)
14+
15+
type PreauthenticatedRequestResourceCrud struct {
16+
crud.BaseCrud
17+
Id string
18+
Namespace string
19+
BucketName string
20+
ObjectName string
21+
AccessURI string
22+
AccessType baremetal.PARAccessType
23+
TimeExpires baremetal.Time
24+
TimeCreated baremetal.Time
25+
}
26+
27+
func PreauthenticatedRequestResource() *schema.Resource {
28+
return &schema.Resource{
29+
Importer: &schema.ResourceImporter{
30+
State: schema.ImportStatePassthrough,
31+
},
32+
Timeouts: crud.DefaultTimeout,
33+
Create: createPreauthenticatedRequest,
34+
Read: readPreauthenticatedRequest,
35+
Update: updatePreauthenticatedRequest,
36+
Delete: deletePreauthenticatedRequest,
37+
Schema: preauthenticatedRequestSchema,
38+
}
39+
}
40+
41+
func createPreauthenticatedRequest(d *schema.ResourceData, m interface{}) (e error) {
42+
sync := &PreauthenticatedRequestResourceCrud{}
43+
sync.D = d
44+
sync.Client = m.(client.BareMetalClient)
45+
return crud.CreateResource(d, sync)
46+
}
47+
48+
func readPreauthenticatedRequest(d *schema.ResourceData, m interface{}) (e error) {
49+
sync := &PreauthenticatedRequestResourceCrud{}
50+
sync.D = d
51+
sync.Client = m.(client.BareMetalClient)
52+
return crud.ReadResource(sync)
53+
}
54+
55+
func updatePreauthenticatedRequest(d *schema.ResourceData, m interface{}) (e error) {
56+
sync := &PreauthenticatedRequestResourceCrud{}
57+
sync.D = d
58+
sync.Client = m.(client.BareMetalClient)
59+
return crud.UpdateResource(d, sync)
60+
}
61+
62+
func deletePreauthenticatedRequest(d *schema.ResourceData, m interface{}) (e error) {
63+
sync := &PreauthenticatedRequestResourceCrud{}
64+
sync.D = d
65+
sync.Client = m.(client.BareMetalClient)
66+
return crud.DeleteResource(d, sync)
67+
}
68+
69+
func (s *PreauthenticatedRequestResourceCrud) ID() string {
70+
return s.Id
71+
}
72+
73+
func (s *PreauthenticatedRequestResourceCrud) SetData() {
74+
s.D.Set("namespace", s.Namespace)
75+
s.D.Set("bucket", s.BucketName)
76+
s.D.Set("object", s.ObjectName)
77+
s.D.Set("time_expires", s.TimeExpires.Format(time.RFC3339))
78+
s.D.Set("access_type", s.AccessType)
79+
s.D.Set("id", s.ID)
80+
}
81+
82+
func (s *PreauthenticatedRequestResourceCrud) Create() (e error) {
83+
namespace := s.D.Get("namespace").(string)
84+
bucket := s.D.Get("bucket").(string)
85+
name := s.D.Get("name").(string)
86+
accessType := s.D.Get("access_type").(string)
87+
t, _ := time.Parse(time.RFC3339, s.D.Get("time_expires").(string))
88+
details := &baremetal.CreatePreauthenticatedRequestDetails{
89+
Name: name,
90+
TimeExpires: baremetal.Time{Time: t},
91+
AccessType: baremetal.PARAccessType(accessType),
92+
}
93+
94+
object := s.D.Get("object").(string)
95+
if object, ok := s.D.GetOk("object"); ok {
96+
details.ObjectName = object.(string)
97+
}
98+
99+
var res *baremetal.PreauthenticatedRequest
100+
res, e = s.Client.CreatePreauthenticatedRequest(baremetal.Namespace(namespace), bucket, details)
101+
102+
if e != nil {
103+
return
104+
}
105+
106+
s.AccessURI = res.AccessURI
107+
s.Id = res.ID
108+
s.TimeCreated = res.TimeCreated
109+
s.TimeExpires = res.TimeExpires
110+
s.AccessType = res.AccessType
111+
s.Namespace = namespace
112+
s.BucketName = bucket
113+
s.ObjectName = object
114+
return
115+
}
116+
117+
func (s *PreauthenticatedRequestResourceCrud) Get() (e error) {
118+
namespace := s.D.Get("namespace").(string)
119+
bucket := s.D.Get("bucket").(string)
120+
parId := s.D.Get("id").(string)
121+
122+
var res *baremetal.PreauthenticatedRequestSummary
123+
res, e = s.Client.GetPreauthenticatedRequest(baremetal.Namespace(namespace), bucket, parId,
124+
&baremetal.ClientRequestOptions{})
125+
126+
if e != nil {
127+
return
128+
}
129+
130+
s.Id = res.ID
131+
s.AccessURI = ""
132+
s.TimeCreated = res.TimeCreated
133+
s.TimeExpires = res.TimeExpires
134+
s.AccessType = res.AccessType
135+
s.Namespace = namespace
136+
s.BucketName = bucket
137+
s.ObjectName = res.ObjectName
138+
139+
return
140+
}
141+
142+
func (s *PreauthenticatedRequestResourceCrud) Update() (e error) {
143+
e = errors.New("Update operation is not supported for PreauthenticatedRequest. Create a new " +
144+
"PreauthenticatedRequest if you need to make modifications ")
145+
return
146+
}
147+
148+
func (s *PreauthenticatedRequestResourceCrud) Delete() (e error) {
149+
namespace := s.D.Get("namespace").(string)
150+
bucket := s.D.Get("bucket").(string)
151+
parId := s.D.Get("id").(string)
152+
opts := &baremetal.ClientRequestOptions{}
153+
154+
return s.Client.DeletePreauthenticatedRequest(baremetal.Namespace(namespace), bucket, parId, opts)
155+
}

0 commit comments

Comments
 (0)