-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
implemented service_key [Finished #138564873]
- Loading branch information
Showing
5 changed files
with
337 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
package cloudfoundry | ||
|
||
import ( | ||
"fmt" | ||
|
||
"github.com/hashicorp/terraform/helper/schema" | ||
"github.com/terraform-providers/terraform-provider-cf/cloudfoundry/cfapi" | ||
) | ||
|
||
func resourceServiceKey() *schema.Resource { | ||
|
||
return &schema.Resource{ | ||
|
||
Create: resourceServiceKeyCreate, | ||
Read: resourceServiceKeyRead, | ||
Delete: resourceServiceKeyDelete, | ||
|
||
Schema: map[string]*schema.Schema{ | ||
|
||
"name": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Required: true, | ||
ForceNew: true, | ||
}, | ||
"service_instance": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Required: true, | ||
ForceNew: true, | ||
}, | ||
"params": &schema.Schema{ | ||
Type: schema.TypeMap, | ||
Optional: true, | ||
ForceNew: true, | ||
}, | ||
"credentials": &schema.Schema{ | ||
Type: schema.TypeMap, | ||
Computed: true, | ||
}, | ||
}, | ||
} | ||
} | ||
|
||
func resourceServiceKeyCreate(d *schema.ResourceData, meta interface{}) (err error) { | ||
|
||
session := meta.(*cfapi.Session) | ||
if session == nil { | ||
return fmt.Errorf("client is nil") | ||
} | ||
|
||
name := d.Get("name").(string) | ||
serviceInstance := d.Get("service_instance").(string) | ||
params := d.Get("params").(map[string]interface{}) | ||
|
||
sm := session.ServiceManager() | ||
var serviceKey cfapi.CCServiceKey | ||
|
||
if serviceKey, err = sm.CreateServiceKey(name, serviceInstance, params); err != nil { | ||
return | ||
} | ||
session.Log.DebugMessage("Created Service Key: %# v", serviceKey) | ||
|
||
d.Set("credentials", serviceKey.Credentials) | ||
d.SetId(serviceKey.ID) | ||
return | ||
} | ||
|
||
func resourceServiceKeyRead(d *schema.ResourceData, meta interface{}) (err error) { | ||
|
||
session := meta.(*cfapi.Session) | ||
if session == nil { | ||
return fmt.Errorf("client is nil") | ||
} | ||
session.Log.DebugMessage("Reading Service Key with ID: %s", d.Id()) | ||
|
||
sm := session.ServiceManager() | ||
var serviceKey cfapi.CCServiceKey | ||
|
||
serviceKey, err = sm.ReadServiceKey(d.Id()) | ||
if err != nil { | ||
return | ||
} | ||
d.Set("name", serviceKey.Name) | ||
d.Set("service_instance", serviceKey.ServiceGUID) | ||
d.Set("credentials", serviceKey.Credentials) | ||
|
||
session.Log.DebugMessage("Read Service Instance : %# v", serviceKey) | ||
return | ||
} | ||
|
||
func resourceServiceKeyDelete(d *schema.ResourceData, meta interface{}) (err error) { | ||
|
||
session := meta.(*cfapi.Session) | ||
if session == nil { | ||
return fmt.Errorf("client is nil") | ||
} | ||
session.Log.DebugMessage("Reading Service Key with ID: %s", d.Id()) | ||
|
||
err = session.ServiceManager().DeleteServiceKey(d.Id()) | ||
return | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
package cloudfoundry | ||
|
||
import ( | ||
"fmt" | ||
"testing" | ||
|
||
"code.cloudfoundry.org/cli/cf/errors" | ||
|
||
"github.com/hashicorp/terraform/helper/resource" | ||
"github.com/hashicorp/terraform/terraform" | ||
"github.com/terraform-providers/terraform-provider-cf/cloudfoundry/cfapi" | ||
) | ||
|
||
const serviceKeyResource = ` | ||
data "cf_org" "org" { | ||
name = "pcfdev-org" | ||
} | ||
data "cf_space" "space" { | ||
name = "pcfdev-space" | ||
org = "${data.cf_org.org.id}" | ||
} | ||
data "cf_service" "mysql" { | ||
name = "p-mysql" | ||
} | ||
resource "cf_service_instance" "mysql" { | ||
name = "mysql" | ||
space = "${data.cf_space.space.id}" | ||
servicePlan = "${data.cf_service.mysql.service_plans["512mb"]}" | ||
} | ||
resource "cf_service_key" "mysql-key" { | ||
name = "mysql-key" | ||
service_instance = "${cf_service_instance.mysql.id}" | ||
params { | ||
"key1" = "aaaa" | ||
"key2" = "bbbb" | ||
} | ||
} | ||
` | ||
|
||
func TestAccServiceKey_normal(t *testing.T) { | ||
|
||
ref := "cf_service_key.mysql-key" | ||
|
||
resource.Test(t, | ||
resource.TestCase{ | ||
PreCheck: func() { testAccPreCheck(t) }, | ||
Providers: testAccProviders, | ||
CheckDestroy: testAccCheckServiceKeyDestroyed("mysql-key", "cf_service_instance.mysql"), | ||
Steps: []resource.TestStep{ | ||
|
||
resource.TestStep{ | ||
Config: serviceKeyResource, | ||
Check: resource.ComposeTestCheckFunc( | ||
testAccCheckServiceKeyExists(ref), | ||
resource.TestCheckResourceAttr( | ||
ref, "name", "mysql-key"), | ||
), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func testAccCheckServiceKeyExists(resource string) resource.TestCheckFunc { | ||
|
||
return func(s *terraform.State) (err error) { | ||
|
||
session := testAccProvider.Meta().(*cfapi.Session) | ||
|
||
rs, ok := s.RootModule().Resources[resource] | ||
if !ok { | ||
return fmt.Errorf("service instance '%s' not found in terraform state", resource) | ||
} | ||
|
||
session.Log.DebugMessage( | ||
"terraform state for resource '%s': %# v", | ||
resource, rs) | ||
|
||
id := rs.Primary.ID | ||
attributes := rs.Primary.Attributes | ||
|
||
var serviceKey cfapi.CCServiceKey | ||
|
||
sm := session.ServiceManager() | ||
if serviceKey, err = sm.ReadServiceKey(id); err != nil { | ||
return | ||
} | ||
session.Log.DebugMessage( | ||
"retrieved service instance for resource '%s' with id '%s': %# v", | ||
resource, id, serviceKey) | ||
|
||
if err = assertEquals(attributes, "name", serviceKey.Name); err != nil { | ||
return err | ||
} | ||
err = assertMapEquals("credentials", attributes, serviceKey.Credentials) | ||
return | ||
} | ||
} | ||
|
||
func testAccCheckServiceKeyDestroyed(name, serviceInstance string) resource.TestCheckFunc { | ||
|
||
return func(s *terraform.State) error { | ||
|
||
session := testAccProvider.Meta().(*cfapi.Session) | ||
|
||
rs, ok := s.RootModule().Resources[serviceInstance] | ||
if !ok { | ||
return fmt.Errorf("service instance '%s' not found in terraform state", spaceResource) | ||
} | ||
|
||
session.Log.DebugMessage("checking ServiceKey is Destroyed %s", name) | ||
|
||
if _, err := session.ServiceManager().FindServiceKey(name, rs.Primary.ID); err != nil { | ||
switch err.(type) { | ||
case *errors.ModelNotFoundError: | ||
return nil | ||
|
||
default: | ||
return err | ||
} | ||
} | ||
return fmt.Errorf("service instance with name '%s' still exists in cloud foundry", name) | ||
} | ||
} |
Oops, something went wrong.