Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Promoted (most of) the supported cloud identity resources to GA #4211

Merged
merged 14 commits into from
Nov 11, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 4 additions & 82 deletions products/cloudidentity/api.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
name: CloudIdentity
display_name: Cloud Identity
versions:
- !ruby/object:Api::Product::Version
name: ga
base_url: https://cloudidentity.googleapis.com/v1/
- !ruby/object:Api::Product::Version
name: beta
base_url: https://cloudidentity.googleapis.com/v1beta1/
Expand Down Expand Up @@ -113,88 +116,6 @@ objects:
Must not contain more than one entry. Must contain the entry
'cloudidentity.googleapis.com/groups.discussion_forum': '' if the Group is a Google Group or
'system/groups/external': '' if the Group is an external-identity-mapped group.
# TODO (mbang): The full API doesn't seem to be implemented yet
# - !ruby/object:Api::Type::Array
# name: 'additionalGroupKeys'
# input: true
# description: |
# Additional entity key aliases for a Group.
# item_type: !ruby/object:Api::Type::NestedObject
# properties:
# - !ruby/object:Api::Type::String
# name: 'id'
# required: true
# description: |
# The ID of the entity.

# For Google-managed entities, the id must be the email address of an existing
# group or user.

# For external-identity-mapped entities, the id must be a string conforming
# to the Identity Source's requirements.

# Must be unique within a namespace.
# - !ruby/object:Api::Type::String
# name: 'namespace'
# description: |
# The namespace in which the entity exists.

# If not specified, the EntityKey represents a Google-managed entity
# such as a Google user or a Google Group.

# If specified, the EntityKey represents an external-identity-mapped group.
# The namespace must correspond to an identity source created in Admin Console
# and must be in the form of `identitysources/{identity_source_id}.
# - !ruby/object:Api::Type::NestedObject
# name: 'dynamicGroupMetadata'
# input: true
# description: |
# Dynamic group metadata like queries and status.
# properties:
# - !ruby/object:Api::Type::Array
# name: 'queries'
# required: true
# description: |
# Memberships will be the union of all queries. Only one entry with USER resource is currently supported.
# item_type: !ruby/object:Api::Type::NestedObject
# properties:
# - !ruby/object:Api::Type::Enum
# name: 'resourceType'
# description: |
# Resources supported for dynamic groups.
# default_value: :USER
# values:
# - :USER
# - !ruby/object:Api::Type::String
# name: 'query'
# description: |
# Query that determines the memberships of the dynamic group.

# Examples: All users with at least one organizations.department of engineering.

# user.organizations.exists(org, org.department=='engineering')

# All users with at least one location that has area of foo and building_id of bar.

# user.locations.exists(loc, loc.area=='foo' && loc.building_id=='bar')
# - !ruby/object:Api::Type::NestedObject
# name: 'DynamicGroupStatus'
# output: true
# description: |
# Status of the dynamic group.
# properties:
# - !ruby/object:Api::Type::String
# name: 'status'
# description: |
# Status of the dynamic group.
# - !ruby/object:Api::Type::String
# name: 'statusTime'
# description: |
# The latest time at which the dynamic group is guaranteed to be in the given status.
# For example, if status is: UP_TO_DATE - The latest time at which this dynamic group
# was confirmed to be up to date. UPDATING_MEMBERSHIPS - The time at which dynamic group was created.

# A timestamp in RFC3339 UTC "Zulu" format, accurate to nanoseconds. Example: "2014-10-02T15:01:23.045123456Z".
- !ruby/object:Api::Resource
name: 'GroupMembership'
base_url: '{{group}}/memberships'
Expand Down Expand Up @@ -222,6 +143,7 @@ objects:
input: true
description: |
EntityKey of the member.
min_version: beta
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How does exactly_one_of work when one field is beta and one isn't?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like exactly_one_of is converted directly into terraform, but using get_property_schema_path and array.compact, which seems to be eliminating the beta field from the resulting golang code.

In other words, in GA, the go code ends up with a "exactly one of" constraint that doesn't include beta fields - in this case meaning it only contains one property, at least one of which much be specified, which I believe is the correct behavior.

exactly_one_of:
- member_key
- preferred_member_key
Expand Down
13 changes: 0 additions & 13 deletions products/cloudidentity/terraform.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,22 +28,11 @@ overrides: !ruby/object:Overrides::ResourceOverrides
- !ruby/object:Provider::Terraform::Examples
name: "cloud_identity_groups_basic"
primary_resource_id: "cloud_identity_group_basic"
min_version: beta
vars:
id_group: "my-identity-group"
test_env_vars:
org_domain: :ORG_DOMAIN
cust_id: :CUST_ID
### The full API doesn't seem to be implemented yet
# - !ruby/object:Provider::Terraform::Examples
# name: "cloud_identity_groups_full"
# primary_resource_id: "cloud_identity_group_full"
# min_version: beta
# vars:
# id_group: "my-identity-group"
# test_env_vars:
# org_domain: :ORG_DOMAIN
# cust_id: :CUST_ID
custom_code: !ruby/object:Provider::Terraform::CustomCode
post_create: templates/terraform/post_create/set_computed_name.erb
custom_import: templates/terraform/custom_import/set_id_name_with_slashes.go.erb
Expand All @@ -62,7 +51,6 @@ overrides: !ruby/object:Overrides::ResourceOverrides
- !ruby/object:Provider::Terraform::Examples
name: "cloud_identity_group_membership"
primary_resource_id: "cloud_identity_group_membership_basic"
min_version: beta
vars:
id_group: "my-identity-group"
test_env_vars:
Expand All @@ -71,7 +59,6 @@ overrides: !ruby/object:Overrides::ResourceOverrides
- !ruby/object:Provider::Terraform::Examples
name: "cloud_identity_group_membership_user"
primary_resource_id: "cloud_identity_group_membership_basic"
min_version: beta
vars:
id_group: "my-identity-group"
test_env_vars:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
resource "google_cloud_identity_group" "group" {
provider = google-beta
display_name = "<%= ctx[:vars]['id_group'] %>"

parent = "customers/<%= ctx[:test_env_vars]['cust_id'] %>"
Expand All @@ -14,7 +13,6 @@ resource "google_cloud_identity_group" "group" {
}

resource "google_cloud_identity_group" "child-group" {
provider = google-beta
display_name = "<%= ctx[:vars]['id_group'] %>-child"

parent = "customers/<%= ctx[:test_env_vars]['cust_id'] %>"
Expand All @@ -29,10 +27,9 @@ resource "google_cloud_identity_group" "child-group" {
}

resource "google_cloud_identity_group_membership" "<%= ctx[:primary_resource_id] %>" {
provider = google-beta
group = google_cloud_identity_group.group.id

member_key {
preferred_member_key {
id = google_cloud_identity_group.child-group.group_key[0].id
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
resource "google_cloud_identity_group" "group" {
provider = google-beta
display_name = "<%= ctx[:vars]['id_group'] %>"

parent = "customers/<%= ctx[:test_env_vars]['cust_id'] %>"
Expand All @@ -14,10 +13,9 @@ resource "google_cloud_identity_group" "group" {
}

resource "google_cloud_identity_group_membership" "cloud_identity_group_membership_basic" {
provider = google-beta
group = google_cloud_identity_group.group.id

member_key {
preferred_member_key {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is the name changing here?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

member_key is only supported in the beta API. This test is being run against the GA API; member_key usage is instead handled by handwritten tests in third_party/terraform/tests/resource_cloud_identity_group_membership_test.go.erb

id = "<%= ctx[:test_env_vars]['identity_user'] %>@<%= ctx[:test_env_vars]['org_domain'] %>"
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
resource "google_cloud_identity_group" "<%= ctx[:primary_resource_id] %>" {
provider = google-beta
display_name = "<%= ctx[:vars]['id_group'] %>"

parent = "customers/<%= ctx[:test_env_vars]['cust_id'] %>"
Expand Down
26 changes: 0 additions & 26 deletions templates/terraform/examples/cloud_identity_groups_full.tf.erb

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
<% autogen_exception -%>
package google

<% unless version == 'ga' -%>
import (
"fmt"
"time"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
<% unless version == 'ga' -%>
cloudidentity "google.golang.org/api/cloudidentity/v1beta1"
<% else -%>
"google.golang.org/api/cloudidentity/v1"
<% end -%>
)

func dataSourceGoogleCloudIdentityGroupMemberships() *schema.Resource {
Expand Down Expand Up @@ -51,7 +54,9 @@ func dataSourceGoogleCloudIdentityGroupMembershipsRead(d *schema.ResourceData, m
result = append(result, map[string]interface{}{
"name": member.Name,
"roles": flattenCloudIdentityGroupMembershipsRoles(member.Roles),
<% unless version == 'ga' -%>
"member_key": flattenCloudIdentityGroupsEntityKey(member.MemberKey),
<% end -%>
"preferred_member_key": flattenCloudIdentityGroupsEntityKey(member.PreferredMemberKey),
})
}
Expand Down Expand Up @@ -79,4 +84,3 @@ func flattenCloudIdentityGroupMembershipsRoles(roles []*cloudidentity.Membership
}
return transformed
}
<% end -%>
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
<% autogen_exception -%>
package google

<% unless version == 'ga' -%>
import (
"fmt"
"time"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
<% unless version == 'ga' -%>
cloudidentity "google.golang.org/api/cloudidentity/v1beta1"
<% else -%>
"google.golang.org/api/cloudidentity/v1"
<% end -%>
)

func dataSourceGoogleCloudIdentityGroups() *schema.Resource {
Expand Down Expand Up @@ -79,4 +82,3 @@ func flattenCloudIdentityGroupsEntityKey(entityKey *cloudidentity.EntityKey) []i
}
return []interface{}{transformed}
}
<% end -%>
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<% autogen_exception -%>
package google

<% unless version == 'ga' -%>
import (
"context"
"fmt"
Expand Down Expand Up @@ -50,7 +49,11 @@ func testSweepCloudIdentityGroup(region string) error {
},
}

<% unless version == 'ga' -%>
listTemplate := "https://cloudidentity.googleapis.com/v1beta1/groups?parent={{parent}}"
<% else -%>
listTemplate := "https://cloudidentity.googleapis.com/v1/groups?parent={{parent}}"
<% end -%>
listUrl, err := replaceVars(d, config, listTemplate)
if err != nil {
log.Printf("[INFO][SWEEPER_LOG] error preparing sweeper list url: %s", err)
Expand Down Expand Up @@ -88,7 +91,11 @@ func testSweepCloudIdentityGroup(region string) error {
continue
}

<% unless version == 'ga' -%>
deleteTemplate := "https://cloudidentity.googleapis.com/v1beta1/{{name}}"
<% else -%>
deleteTemplate := "https://cloudidentity.googleapis.com/v1/{{name}}"
<% end -%>
deleteUrl, err := replaceVars(d, config, deleteTemplate)
if err != nil {
log.Printf("[INFO][SWEEPER_LOG] error preparing delete url: %s", err)
Expand All @@ -111,4 +118,3 @@ func testSweepCloudIdentityGroup(region string) error {

return nil
}
<% end -%>
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<% autogen_exception -%>
package google

<% unless version == 'ga' -%>
import (
"testing"

Expand All @@ -21,7 +19,7 @@ func TestAccDataSourceCloudIdentityGroupMemberships_basic(t *testing.T) {

vcrTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProvidersOiCS,
Providers: testAccProviders,
Steps: []resource.TestStep{
{
Config: testAccCloudIdentityGroupMembershipConfig(context),
Expand All @@ -42,10 +40,7 @@ func testAccCloudIdentityGroupMembershipConfig(context map[string]interface{}) s
return testAccCloudIdentityGroupMembership_cloudIdentityGroupMembershipUserExample(context) + Nprintf(`
data "google_cloud_identity_group_memberships" "members" {
provider = google-beta

group = google_cloud_identity_group_membership.cloud_identity_group_membership_basic.group
}
`, context)
}
<% end -%>
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<% autogen_exception -%>
package google

<% unless version == 'ga' -%>
import (
"regexp"
"testing"
Expand All @@ -19,7 +17,7 @@ func TestAccDataSourceCloudIdentityGroups_basic(t *testing.T) {

vcrTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProvidersOiCS,
Providers: testAccProviders,
Steps: []resource.TestStep{
{
Config: testAccCloudIdentityGroupConfig(context),
Expand All @@ -38,10 +36,7 @@ func testAccCloudIdentityGroupConfig(context map[string]interface{}) string {
return testAccCloudIdentityGroup_cloudIdentityGroupsBasicExample(context) + Nprintf(`
data "google_cloud_identity_groups" "groups" {
provider = google-beta

parent = google_cloud_identity_group.cloud_identity_group_basic.parent
}
`, context)
}
<% end -%>
Loading