Skip to content

Commit

Permalink
Merge pull request hashicorp#340 from deliveroo/allow-updating-data
Browse files Browse the repository at this point in the history
Allow updating `data` on `vault_database_secret_backend_connection`
  • Loading branch information
Becca Petrin authored Mar 29, 2019
2 parents ae2d1a1 + 0c7be48 commit b7a7c6d
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 8 deletions.
8 changes: 7 additions & 1 deletion vault/resource_database_secret_backend_connection.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ func databaseSecretBackendConnectionResource() *schema.Resource {
"data": {
Type: schema.TypeMap,
Optional: true,
Description: "A map of sensitive data to pass to the endpoint. Usefule for templated connection strings.",
Description: "A map of sensitive data to pass to the endpoint. Useful for templated connection strings.",
Sensitive: true,
},

Expand Down Expand Up @@ -609,6 +609,12 @@ func databaseSecretBackendConnectionUpdate(d *schema.ResourceData, meta interfac
data["allowed_roles"] = strings.Join(roles, ",")
}

if m, ok := d.GetOkExists("data"); ok {
for k, v := range m.(map[string]interface{}) {
data[k] = v.(string)
}
}

log.Printf("[DEBUG] Writing connection config to %q", path)
_, err = client.Logical().Write(path, data)

Expand Down
30 changes: 23 additions & 7 deletions vault/resource_database_secret_backend_connection_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,13 +155,14 @@ func TestAccDatabaseSecretBackendConnection_mysql(t *testing.T) {
}
backend := acctest.RandomWithPrefix("tf-test-db")
name := acctest.RandomWithPrefix("db")
password := acctest.RandomWithPrefix("password")
resource.Test(t, resource.TestCase{
Providers: testProviders,
PreCheck: func() { testAccPreCheck(t) },
CheckDestroy: testAccDatabaseSecretBackendConnectionCheckDestroy,
Steps: []resource.TestStep{
{
Config: testAccDatabaseSecretBackendConnectionConfig_mysql(name, backend, connURL),
Config: testAccDatabaseSecretBackendConnectionConfig_mysql(name, backend, connURL, password),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "name", name),
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "backend", backend),
Expand All @@ -173,6 +174,8 @@ func TestAccDatabaseSecretBackendConnection_mysql(t *testing.T) {
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "mysql.0.max_open_connections", "2"),
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "mysql.0.max_idle_connections", "0"),
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "mysql.0.max_connection_lifetime", "0"),
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "data.%", "1"),
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "data.password", password),
),
},
{
Expand Down Expand Up @@ -231,13 +234,14 @@ func TestAccDatabaseSecretBackendConnectionUpdate_mysql(t *testing.T) {
}
backend := acctest.RandomWithPrefix("tf-test-db")
name := acctest.RandomWithPrefix("db")
password := acctest.RandomWithPrefix("password")
resource.Test(t, resource.TestCase{
Providers: testProviders,
PreCheck: func() { testAccPreCheck(t) },
CheckDestroy: testAccDatabaseSecretBackendConnectionCheckDestroy,
Steps: []resource.TestStep{
{
Config: testAccDatabaseSecretBackendConnectionConfigUpdate_mysql(name, backend, connURL, 0),
Config: testAccDatabaseSecretBackendConnectionConfigUpdate_mysql(name, backend, connURL, password, 0),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "name", name),
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "backend", backend),
Expand All @@ -248,10 +252,12 @@ func TestAccDatabaseSecretBackendConnectionUpdate_mysql(t *testing.T) {
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "mysql.0.connection_url", connURL),
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "mysql.0.max_open_connections", "2"),
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "mysql.0.max_connection_lifetime", "0"),
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "data.%", "1"),
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "data.password", password),
),
},
{
Config: testAccDatabaseSecretBackendConnectionConfigUpdate_mysql(name, backend, connURL, 10),
Config: testAccDatabaseSecretBackendConnectionConfigUpdate_mysql(name, backend, connURL, password, 10),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "name", name),
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "backend", backend),
Expand All @@ -262,6 +268,8 @@ func TestAccDatabaseSecretBackendConnectionUpdate_mysql(t *testing.T) {
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "mysql.0.connection_url", connURL),
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "mysql.0.max_open_connections", "2"),
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "mysql.0.max_connection_lifetime", "10"),
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "data.%", "1"),
resource.TestCheckResourceAttr("vault_database_secret_backend_connection.test", "data.password", password),
),
},
},
Expand Down Expand Up @@ -377,7 +385,7 @@ resource "vault_database_secret_backend_connection" "test" {
`, path, name, connURL)
}

func testAccDatabaseSecretBackendConnectionConfig_mysql(name, path, connURL string) string {
func testAccDatabaseSecretBackendConnectionConfig_mysql(name, path, connURL, password string) string {
return fmt.Sprintf(`
resource "vault_mount" "db" {
path = "%s"
Expand All @@ -392,11 +400,15 @@ resource "vault_database_secret_backend_connection" "test" {
mysql {
connection_url = "%s"
}
data = {
password = "%s"
}
}
`, path, name, connURL)
`, path, name, connURL, password)
}

func testAccDatabaseSecretBackendConnectionConfigUpdate_mysql(name, path, connURL string, connLifetime int) string {
func testAccDatabaseSecretBackendConnectionConfigUpdate_mysql(name, path, connURL, password string, connLifetime int) string {
return fmt.Sprintf(`
resource "vault_mount" "db" {
path = "%s"
Expand All @@ -412,8 +424,12 @@ resource "vault_database_secret_backend_connection" "test" {
connection_url = "%s"
max_connection_lifetime = "%d"
}
data = {
password = "%s"
}
}
`, path, name, connURL, connLifetime)
`, path, name, connURL, connLifetime, password)
}

func testAccDatabaseSecretBackendConnectionConfig_mysql_rds(name, path, connURL string) string {
Expand Down

0 comments on commit b7a7c6d

Please sign in to comment.