From fa21f7920ac08be486b87fc77b531be7d85e3473 Mon Sep 17 00:00:00 2001 From: The Magician Date: Mon, 12 Oct 2020 15:43:19 -0700 Subject: [PATCH] allow setting a project on oslogin ssh key (#4085) (#2583) Signed-off-by: Modular Magician --- .changelog/4085.txt | 3 ++ .../resource_os_login_ssh_public_key.go | 14 ++++++ ..._os_login_ssh_public_key_generated_test.go | 44 ++++++++++++++++++- .../r/os_login_ssh_public_key.html.markdown | 22 ++++++++++ 4 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 .changelog/4085.txt diff --git a/.changelog/4085.txt b/.changelog/4085.txt new file mode 100644 index 0000000000..0bdb03f639 --- /dev/null +++ b/.changelog/4085.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +oslogin: added ability to set a `project` on `google_os_login_ssh_public_key` +``` diff --git a/google-beta/resource_os_login_ssh_public_key.go b/google-beta/resource_os_login_ssh_public_key.go index 6a4827cb56..ec194eac90 100644 --- a/google-beta/resource_os_login_ssh_public_key.go +++ b/google-beta/resource_os_login_ssh_public_key.go @@ -59,6 +59,12 @@ func resourceOSLoginSSHPublicKey() *schema.Resource { Optional: true, Description: `An expiration time in microseconds since epoch.`, }, + "project": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: `The project ID of the Google Cloud Platform project.`, + }, "fingerprint": { Type: schema.TypeString, Computed: true, @@ -102,6 +108,14 @@ func resourceOSLoginSSHPublicKeyCreate(d *schema.ResourceData, meta interface{}) billingProject = bp } + // Don't use `getProject()` because we only want to set the project in the URL + // if the user set it explicitly on the resource. + if p, ok := d.GetOk("project"); ok { + url, err = addQueryParams(url, map[string]string{"projectId": p.(string)}) + if err != nil { + return err + } + } res, err := sendRequestWithTimeout(config, "POST", billingProject, url, userAgent, obj, d.Timeout(schema.TimeoutCreate)) if err != nil { return fmt.Errorf("Error creating SSHPublicKey: %s", err) diff --git a/google-beta/resource_os_login_ssh_public_key_generated_test.go b/google-beta/resource_os_login_ssh_public_key_generated_test.go index 94941ad4df..c1df26d5cd 100644 --- a/google-beta/resource_os_login_ssh_public_key_generated_test.go +++ b/google-beta/resource_os_login_ssh_public_key_generated_test.go @@ -45,7 +45,7 @@ func TestAccOSLoginSSHPublicKey_osLoginSshKeyProvidedUserExample(t *testing.T) { ResourceName: "google_os_login_ssh_public_key.cache", ImportState: true, ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"user"}, + ImportStateVerifyIgnore: []string{"user", "project"}, }, }, }) @@ -63,6 +63,48 @@ resource "google_os_login_ssh_public_key" "cache" { `, context) } +func TestAccOSLoginSSHPublicKey_osLoginSshKeyWithProjectExample(t *testing.T) { + t.Parallel() + + context := map[string]interface{}{ + "project": getTestProjectFromEnv(), + "random_suffix": randString(t, 10), + } + + vcrTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + ExternalProviders: map[string]resource.ExternalProvider{ + "random": {}, + }, + CheckDestroy: testAccCheckOSLoginSSHPublicKeyDestroyProducer(t), + Steps: []resource.TestStep{ + { + Config: testAccOSLoginSSHPublicKey_osLoginSshKeyWithProjectExample(context), + }, + { + ResourceName: "google_os_login_ssh_public_key.cache", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"user", "project"}, + }, + }, + }) +} + +func testAccOSLoginSSHPublicKey_osLoginSshKeyWithProjectExample(context map[string]interface{}) string { + return Nprintf(` +data "google_client_openid_userinfo" "me" { +} + +resource "google_os_login_ssh_public_key" "cache" { + user = data.google_client_openid_userinfo.me.email + key = file("test-fixtures/ssh_rsa.pub") + project = "%{project}" +} +`, context) +} + func testAccCheckOSLoginSSHPublicKeyDestroyProducer(t *testing.T) func(s *terraform.State) error { return func(s *terraform.State) error { for name, rs := range s.RootModule().Resources { diff --git a/website/docs/r/os_login_ssh_public_key.html.markdown b/website/docs/r/os_login_ssh_public_key.html.markdown index 35e445356a..4590d6165a 100644 --- a/website/docs/r/os_login_ssh_public_key.html.markdown +++ b/website/docs/r/os_login_ssh_public_key.html.markdown @@ -48,6 +48,24 @@ resource "google_os_login_ssh_public_key" "cache" { key = file("path/to/id_rsa.pub") } ``` + +## Example Usage - Os Login Ssh Key With Project + + +```hcl +data "google_client_openid_userinfo" "me" { +} + +resource "google_os_login_ssh_public_key" "cache" { + user = data.google_client_openid_userinfo.me.email + key = file("path/to/id_rsa.pub") + project = "my-project-name" +} +``` ## Argument Reference @@ -70,6 +88,10 @@ The following arguments are supported: (Optional) An expiration time in microseconds since epoch. +* `project` - + (Optional) + The project ID of the Google Cloud Platform project. + ## Attributes Reference