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

Commit

Permalink
docs(samples): Add filtered listing samples (#209)
Browse files Browse the repository at this point in the history
* docs(samples): Add filtered listing samples

* remove unused import

* remove unused import

* ci: opt in to use multiple projects

Co-authored-by: Miroslava Sotakova <mirka@google.com>
Co-authored-by: Anthonios Partheniou <partheniou@google.com>
  • Loading branch information
3 people committed Nov 8, 2021
1 parent c80eeec commit 316de2d
Show file tree
Hide file tree
Showing 4 changed files with 168 additions and 3 deletions.
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

0 comments on commit 316de2d

Please sign in to comment.