Skip to content
This repository has been archived by the owner on Sep 5, 2023. It is now read-only.

docs(samples): Add filtered listing samples #209

Merged
merged 7 commits into from Nov 8, 2021
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
47 changes: 47 additions & 0 deletions samples/snippets/list_secret_versions_with_filter.py
@@ -0,0 +1,47 @@
#!/usr/bin/env python

# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
"""
command line application and sample code for listing secret versions of a
secret.
"""


# [START secretmanager_list_secret_versions_with_filter]
def list_secret_versions_with_filter(project_id, secret_id, filter_str="state:ENABLED"):
"""
List all secret versions in the given secret and their metadata.

Args:
project_id: Parent project id
secret_id: Parent secret id
filter_str: Secret version filter, constructing according to
https://cloud.google.com/secret-manager/docs/filtering
"""

# Import the Secret Manager client library.
from google.cloud import secretmanager

# Create the Secret Manager client.
client = secretmanager.SecretManagerServiceClient()

# Build the resource name of the parent secret.
parent = client.secret_path(project_id, secret_id)

# List all secret versions.
for version in client.list_secret_versions(request={"parent": parent, "filter": filter_str}):
print("Found secret version: {}".format(version.name))


# [END secretmanager_list_secret_versions_with_filter]
45 changes: 45 additions & 0 deletions samples/snippets/list_secrets_with_filter.py
@@ -0,0 +1,45 @@
#!/usr/bin/env python

# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
"""
command line application and sample code for listing secrets in a project.
"""


# [START secretmanager_list_secrets_with_filter]
def list_secrets_with_filter(project_id, filter_str):
"""
List all secrets in the given project.

Args:
project_id: Parent project id
filter_str: Secret filter, constructing according to
https://cloud.google.com/secret-manager/docs/filtering
"""

# Import the Secret Manager client library.
from google.cloud import secretmanager

# Create the Secret Manager client.
client = secretmanager.SecretManagerServiceClient()

# Build the resource name of the parent project.
parent = f"projects/{project_id}"

# List all secrets.
for secret in client.list_secrets(request={"parent": parent, "filter": filter_str}):
print("Found secret: {}".format(secret.name))


# [END secretmanager_list_secrets_with_filter]
38 changes: 38 additions & 0 deletions samples/snippets/noxfile_config.py
@@ -0,0 +1,38 @@
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Default TEST_CONFIG_OVERRIDE for python repos.

# You can copy this file into your directory, then it will be inported from
# the noxfile.py.

# The source of truth:
# https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/noxfile_config.py

TEST_CONFIG_OVERRIDE = {
# You can opt out from the test for specific Python versions.
"ignored_versions": ["2.7"],
# Old samples are opted out of enforcing Python type hints
# All new samples should feature them
"enforce_type_hints": False,
# An envvar key for determining the project id to use. Change it
# to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a
# build specific Cloud project. You can also use your own string
# to use your own Cloud project.
# "gcloud_project_env": "GOOGLE_CLOUD_PROJECT",
"gcloud_project_env": "BUILD_SPECIFIC_GCLOUD_PROJECT",
# A dictionary you want to inject into your test. Don't put any
# secrets here. These values will override predefined values.
"envs": {},
}
41 changes: 38 additions & 3 deletions samples/snippets/snippets_test.py
Expand Up @@ -36,7 +36,9 @@
from iam_grant_access import iam_grant_access
from iam_revoke_access import iam_revoke_access
from list_secret_versions import list_secret_versions
from list_secret_versions_with_filter import list_secret_versions_with_filter
from list_secrets import list_secrets
from list_secrets_with_filter import list_secrets_with_filter
from quickstart import quickstart
from update_secret import update_secret
from update_secret_with_etag import update_secret_with_etag
Expand Down Expand Up @@ -219,21 +221,54 @@ def test_iam_revoke_access(client, secret, iam_user):

def test_list_secret_versions(capsys, secret_version, another_secret_version):
project_id, secret_id, version_id, _ = secret_version
version_1 = get_secret_version(project_id, secret_id, version_id)
_, _, another_version_id, _ = another_secret_version
version_2 = get_secret_version(project_id, secret_id, another_version_id)
list_secret_versions(project_id, secret_id)

out, _ = capsys.readouterr()
assert secret_id in out
assert version_id in out
assert another_version_id in out
assert "Found secret version: {}".format(version_1.name) in out
assert "Found secret version: {}".format(version_2.name) in out


def test_list_secret_versions_with_filter(capsys, secret_version, another_secret_version):
project_id, secret_id, version_id, _ = secret_version
enabled = get_secret_version(project_id, secret_id, version_id)
_, _, another_version_id, _ = another_secret_version
disabled = disable_secret_version(project_id, secret_id, another_version_id)
assert disabled.state == secretmanager.SecretVersion.State.DISABLED
list_secret_versions_with_filter(project_id, secret_id, "state:ENABLED")

out, _ = capsys.readouterr()
assert secret_id in out
assert "Found secret version: {}".format(enabled.name) in out
assert "Found secret version: {}".format(disabled.name) not in out


def test_list_secrets(capsys, secret):
project_id, secret_id, _ = secret
secret = get_secret(project_id, secret_id)
list_secrets(project_id)

out, _ = capsys.readouterr()
assert secret_id in out
assert "Found secret: {}".format(secret.name) in out


def test_list_secrets_with_filter(capsys, secret):
project_id, secret_id, _ = secret
unlabeled = get_secret(project_id, secret_id)
list_secrets_with_filter(project_id, "labels.secretmanager:rocks")

out, _ = capsys.readouterr()
assert "Found secret: {}".format(unlabeled.name) not in out

labeled = update_secret(project_id, secret_id)
assert labeled.labels["secretmanager"] == "rocks"
list_secrets_with_filter(project_id, "labels.secretmanager:rocks")

out, _ = capsys.readouterr()
assert "Found secret: {}".format(labeled.name) in out


def test_update_secret(secret):
Expand Down