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 6 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]
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