Skip to content

Commit 6fcf666

Browse files
Fixes #3, fixes #5, fixes #6, fixes #9
1 parent 874c652 commit 6fcf666

26 files changed

+512
-55
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ fmt:
1313
gofmt -w $(GOFMT_FILES)
1414

1515
test:
16-
go test -v
16+
TF_ORACLE_ENV=test go test -v
1717

1818
test_acceptance:
1919
TF_ACC=1 go test -v

README.md

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ Find the appropriate binary for [your platform here](https://github.com/oracle/t
2525
Create `~/.terraformrc` that specifies the path to the `baremetal` provider.
2626
```
2727
providers {
28-
baremetal = "<path_to_provider_binary>"
28+
baremetal = "<path_to_provider_binary/terraform-provider-baremetal>"
2929
}
3030
```
3131

3232
#### Windows
3333
Create `%APPDATA%/terraform.rc` that specifies the path to the `baremetal` provider.
3434
```
3535
providers {
36-
baremetal = "<path_to_provider_binary>"
36+
baremetal = "<path_to_provider_binary/terraform-provider-baremetal>"
3737
}
3838
```
3939
### Export credentials
@@ -81,17 +81,8 @@ https://github.com/oracle/terraform-provider-baremetal/issues
8181
or meet us in the OBMCS forums
8282
https://community.oracle.com/community/cloud_computing/bare-metal
8383

84-
## Known bugs
85-
### Key passphrase
86-
The private key you use for API access must have a passphrase to work with Terraform. You can add a passphrase to your existing key with `ssh-keygen -p -f <private key>`.
87-
88-
If you don't want to apply a passphrase to the version of the key you don't use with Terraform you can copy the key first -
89-
```
90-
cp <private key> <private key>.pass
91-
ssh-keygen -p -f <private key>.pass
92-
```
93-
### DB Systems timeout
94-
DB Systems can take up to an hour to provision. Terraform times out after 5 minutes. Ensure the DB System is the last resource you provision in a configuration.
84+
## Known serious bugs
85+
None
9586

9687
#### About the provider
9788
This provider was written on behalf of Oracle by [MustWin.](http://mustwin.com/)

circle.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
machine:
22
pre:
3-
- sudo curl -O https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz
4-
- sudo tar -xvf go1.6.3.linux-amd64.tar.gz
3+
- sudo curl -O https://storage.googleapis.com/golang/go1.7.5.linux-amd64.tar.gz
4+
- sudo tar -xvf go1.7.5.linux-amd64.tar.gz
55
- sudo rm -fr /usr/local/go
66
- sudo mv go /usr/local/go
77
environment:

core/instance_datasource_crud.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func (s *InstanceDatasourceCrud) SetData() {
5656
"compartment_id": v.CompartmentID,
5757
"display_name": v.DisplayName,
5858
"id": v.ID,
59-
"image": v.Image,
59+
"image": v.ImageID,
6060
"metadata": v.Metadata,
6161
"region": v.Region,
6262
"shape": v.Shape,

core/instance_resource_crud.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func (s *InstanceResourceCrud) SetData() {
9090
s.D.Set("availability_domain", s.Resource.AvailabilityDomain)
9191
s.D.Set("compartment_id", s.Resource.CompartmentID)
9292
s.D.Set("display_name", s.Resource.DisplayName)
93-
s.D.Set("image", s.Resource.Image)
93+
s.D.Set("image", s.Resource.ImageID)
9494
s.D.Set("metadata", s.Resource.Metadata)
9595
s.D.Set("region", s.Resource.Region)
9696
s.D.Set("shape", s.Resource.Shape)

core/security_list_resource_crud.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
package core
44

55
import (
6-
"github.com/MustWin/baremetal-sdk-go"
6+
"time"
7+
"fmt"
78

9+
"github.com/MustWin/baremetal-sdk-go"
810
"github.com/MustWin/terraform-Oracle-BareMetal-Provider/crud"
911
)
1012

@@ -33,6 +35,11 @@ func (s *SecurityListResourceCrud) DeletedTarget() []string {
3335
return []string{baremetal.ResourceTerminated}
3436
}
3537

38+
func (s *SecurityListResourceCrud) ExtraWaitPostDelete() time.Duration {
39+
fmt.Println("=====================================")
40+
return time.Duration(0 * time.Second)
41+
}
42+
3643
func (s *SecurityListResourceCrud) State() string {
3744
return s.Res.State
3845
}

core/subnet_resource_crud.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
package core
44

55
import (
6-
"github.com/MustWin/baremetal-sdk-go"
6+
"time"
7+
"fmt"
78

9+
"github.com/MustWin/baremetal-sdk-go"
810
"github.com/MustWin/terraform-Oracle-BareMetal-Provider/crud"
911
)
1012

@@ -33,6 +35,11 @@ func (s *SubnetResourceCrud) DeletedTarget() []string {
3335
return []string{baremetal.ResourceTerminated}
3436
}
3537

38+
func (s *SubnetResourceCrud) ExtraWaitPostDelete() time.Duration {
39+
fmt.Println("=====================================")
40+
return time.Duration(10 * time.Second)
41+
}
42+
3643
func (s *SubnetResourceCrud) Create() (e error) {
3744
availabilityDomain := s.D.Get("availability_domain").(string)
3845
cidrBlock := s.D.Get("cidr_block").(string)

core_instance_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func (s *ResourceCoreInstanceTestSuite) SetupTest() {
6464
CompartmentID: "compartment_id",
6565
DisplayName: "display_name",
6666
ID: "id",
67-
Image: "imageid",
67+
ImageID: "imageid",
6868
Metadata: map[string]string{
6969
"ssh_authorized_keys": "mypublickey",
7070
},
@@ -86,7 +86,7 @@ func (s *ResourceCoreInstanceTestSuite) SetupTest() {
8686
"LaunchInstance",
8787
s.Res.AvailabilityDomain,
8888
s.Res.CompartmentID,
89-
s.Res.Image,
89+
s.Res.ImageID,
9090
s.Res.Shape,
9191
"subnetid",
9292
opts).Return(s.Res, nil)
@@ -106,7 +106,7 @@ func (s *ResourceCoreInstanceTestSuite) TestCreateResourceCoreInstance() {
106106
resource.TestCheckResourceAttr(s.ResourceName, "compartment_id", s.Res.CompartmentID),
107107
resource.TestCheckResourceAttr(s.ResourceName, "display_name", s.Res.DisplayName),
108108
resource.TestCheckResourceAttr(s.ResourceName, "id", s.Res.ID),
109-
resource.TestCheckResourceAttr(s.ResourceName, "image", s.Res.Image),
109+
resource.TestCheckResourceAttr(s.ResourceName, "image", s.Res.ImageID),
110110
resource.TestCheckResourceAttr(s.ResourceName, "state", s.Res.State),
111111
resource.TestCheckResourceAttr(s.ResourceName, "time_created", s.Res.TimeCreated.String()),
112112
),
@@ -139,7 +139,7 @@ func (s *ResourceCoreInstanceTestSuite) TestCreateResourceCoreInstanceWithoutDis
139139
"LaunchInstance",
140140
s.Res.AvailabilityDomain,
141141
s.Res.CompartmentID,
142-
s.Res.Image,
142+
s.Res.ImageID,
143143
s.Res.Shape,
144144
"subnetid",
145145
opts).Return(s.Res, nil)
@@ -180,7 +180,7 @@ func (s ResourceCoreInstanceTestSuite) TestUpdateInstanceDisplayName() {
180180
CompartmentID: "compartment_id",
181181
DisplayName: "new_display_name",
182182
ID: "id",
183-
Image: "imageid",
183+
ImageID: "imageid",
184184
Metadata: map[string]string{
185185
"ssh_authorized_keys": "mypublickey",
186186
},
@@ -237,7 +237,7 @@ func (s ResourceCoreInstanceTestSuite) TestUpdateAvailabilityDomainForcesNewInst
237237
CompartmentID: "compartment_id",
238238
DisplayName: "display_name",
239239
ID: "new_id",
240-
Image: "imageid",
240+
ImageID: "imageid",
241241
Metadata: map[string]string{
242242
"ssh_authorized_keys": "mypublickey",
243243
},
@@ -256,7 +256,7 @@ func (s ResourceCoreInstanceTestSuite) TestUpdateAvailabilityDomainForcesNewInst
256256
"LaunchInstance",
257257
res.AvailabilityDomain,
258258
res.CompartmentID,
259-
res.Image,
259+
res.ImageID,
260260
res.Shape,
261261
"subnetid",
262262
opts).Return(res, nil)

core_security_list_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/hashicorp/terraform/terraform"
1414

1515
"github.com/stretchr/testify/suite"
16+
"github.com/MustWin/terraform-Oracle-BareMetal-Provider/crud"
1617
)
1718

1819
type ResourceCoreSecurityListTestSuite struct {
@@ -24,9 +25,14 @@ type ResourceCoreSecurityListTestSuite struct {
2425
Config string
2526
ResourceName string
2627
Res *baremetal.SecurityList
28+
DeletingRes *baremetal.SecurityList
2729
DeletedRes *baremetal.SecurityList
2830
}
2931

32+
func extraWait(ew crud.ExtraWaitPostDelete) {
33+
return
34+
}
35+
3036
func (s *ResourceCoreSecurityListTestSuite) SetupTest() {
3137
s.Client = &mocks.BareMetalClient{}
3238

@@ -98,6 +104,11 @@ func (s *ResourceCoreSecurityListTestSuite) SetupTest() {
98104
s.Res.ETag = "etag"
99105
s.Res.RequestID = "opcrequestid"
100106

107+
108+
deletingRes := *s.Res
109+
s.DeletingRes = &deletingRes
110+
s.DeletingRes.State = baremetal.ResourceTerminating
111+
101112
deletedRes := *s.Res
102113
s.DeletedRes = &deletedRes
103114
s.DeletedRes.State = baremetal.ResourceTerminated
@@ -216,6 +227,7 @@ func (s ResourceCoreSecurityListTestSuite) TestUpdateSecurityList() {
216227

217228
func (s *ResourceCoreSecurityListTestSuite) TestDeleteSecurityList() {
218229
s.Client.On("GetSecurityList", "id").Return(s.Res, nil).Times(2)
230+
s.Client.On("GetSecurityList", "id").Return(s.DeletingRes, nil).Times(2)
219231
s.Client.On("GetSecurityList", "id").Return(s.DeletedRes, nil)
220232

221233
resource.UnitTest(s.T(), resource.TestCase{

crud/helpers.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,14 @@ package crud
44

55
import (
66
"time"
7-
7+
"log"
88
"strings"
99

1010
"github.com/MustWin/terraform-Oracle-BareMetal-Provider/client"
1111
"github.com/hashicorp/terraform/helper/resource"
1212
"github.com/hashicorp/terraform/helper/schema"
1313

14-
// "fmt"
15-
"fmt"
14+
"os"
1615
)
1716

1817
const FiveMinutes time.Duration = 5 * time.Minute
@@ -28,7 +27,7 @@ func (s *BaseCrud) VoidState() {
2827

2928
func handleMissingResourceError(sync ResourceVoider, err *error) {
3029
if err != nil && strings.Contains((*err).Error(), "does not exist") {
31-
fmt.Println("Object does not exist, voiding and nullifying error")
30+
log.Println("Object does not exist, voiding and nullifying error")
3231
sync.VoidState()
3332
*err = nil
3433
}
@@ -77,13 +76,21 @@ func DeleteResource(sync ResourceDeleter) (e error) {
7776
return
7877
}
7978

79+
ew, waitOK := sync.(ExtraWaitPostDelete)
80+
8081
stateful, ok := sync.(StatefullyDeletedResource)
8182
if ok {
8283
pending := stateful.DeletedPending()
8384
target := stateful.DeletedTarget()
8485
e = waitForStateRefresh(stateful, pending, target)
8586
}
8687

88+
if waitOK {
89+
if os.Getenv("TF_ORACLE_ENV") != "test" {
90+
time.Sleep(ew.ExtraWaitPostDelete())
91+
}
92+
}
93+
8794
if e == nil {
8895
sync.VoidState()
8996
} else {
@@ -103,11 +110,15 @@ func stateRefreshFunc(sync StatefulResource) resource.StateRefreshFunc {
103110
}
104111

105112
func waitForStateRefresh(sync StatefulResource, pending, target []string) (e error) {
113+
timeout := FiveMinutes
114+
if customTimeouter, ok := sync.(CustomTimeouter); ok {
115+
timeout = customTimeouter.CustomTimeout()
116+
}
106117
stateConf := &resource.StateChangeConf{
107118
Pending: pending,
108119
Target: target,
109120
Refresh: stateRefreshFunc(sync),
110-
Timeout: FiveMinutes,
121+
Timeout: timeout,
111122
}
112123

113124
if _, e = stateConf.WaitForState(); e != nil {

0 commit comments

Comments
 (0)