pulumi-gcp 7.31.0a1720850808__py3-none-any.whl → 7.32.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pulumi_gcp/__init__.py +51 -0
- pulumi_gcp/alloydb/cluster.py +0 -24
- pulumi_gcp/applicationintegration/auth_config.py +2 -2
- pulumi_gcp/bigquery/_inputs.py +0 -12
- pulumi_gcp/bigquery/dataset.py +0 -28
- pulumi_gcp/bigquery/dataset_access.py +0 -28
- pulumi_gcp/bigquery/outputs.py +0 -24
- pulumi_gcp/bigquery/reservation_assignment.py +48 -30
- pulumi_gcp/bigtable/authorized_view.py +104 -0
- pulumi_gcp/certificateauthority/certificate_template.py +2 -2
- pulumi_gcp/certificatemanager/_inputs.py +33 -0
- pulumi_gcp/certificatemanager/outputs.py +36 -0
- pulumi_gcp/certificatemanager/trust_config.py +107 -0
- pulumi_gcp/compute/_inputs.py +3 -6
- pulumi_gcp/compute/ca_external_account_key.py +2 -2
- pulumi_gcp/compute/get_health_check.py +11 -1
- pulumi_gcp/compute/global_address.py +16 -4
- pulumi_gcp/compute/global_forwarding_rule.py +2 -4
- pulumi_gcp/compute/health_check.py +124 -0
- pulumi_gcp/compute/instance.py +14 -14
- pulumi_gcp/compute/instance_group_membership.py +2 -2
- pulumi_gcp/compute/outputs.py +4 -8
- pulumi_gcp/compute/region_network_endpoint.py +2 -2
- pulumi_gcp/compute/region_network_endpoint_group.py +2 -2
- pulumi_gcp/compute/subnetwork.py +2 -2
- pulumi_gcp/compute/target_instance.py +2 -2
- pulumi_gcp/config/__init__.pyi +4 -0
- pulumi_gcp/config/vars.py +8 -0
- pulumi_gcp/container/_inputs.py +3 -3
- pulumi_gcp/container/outputs.py +4 -4
- pulumi_gcp/containeranalysis/note.py +2 -2
- pulumi_gcp/dataloss/_inputs.py +3 -0
- pulumi_gcp/dataloss/outputs.py +2 -0
- pulumi_gcp/dataloss/prevention_job_trigger.py +90 -0
- pulumi_gcp/dataplex/_inputs.py +56 -0
- pulumi_gcp/dataplex/datascan.py +12 -0
- pulumi_gcp/dataplex/outputs.py +52 -0
- pulumi_gcp/filestore/backup.py +2 -2
- pulumi_gcp/filestore/instance.py +2 -2
- pulumi_gcp/filestore/snapshot.py +2 -2
- pulumi_gcp/gkehub/__init__.py +1 -0
- pulumi_gcp/gkehub/_inputs.py +20 -0
- pulumi_gcp/gkehub/get_membership_binding.py +222 -0
- pulumi_gcp/gkehub/outputs.py +31 -0
- pulumi_gcp/iap/client.py +7 -7
- pulumi_gcp/kms/__init__.py +2 -0
- pulumi_gcp/kms/_inputs.py +40 -0
- pulumi_gcp/kms/crypto_key.py +110 -7
- pulumi_gcp/kms/get_crypto_keys.py +143 -0
- pulumi_gcp/kms/get_key_rings.py +119 -0
- pulumi_gcp/kms/get_kms_crypto_key.py +11 -1
- pulumi_gcp/kms/outputs.py +382 -0
- pulumi_gcp/logging/_inputs.py +12 -12
- pulumi_gcp/logging/folder_bucket_config.py +6 -6
- pulumi_gcp/logging/organization_bucket_config.py +6 -6
- pulumi_gcp/logging/outputs.py +8 -8
- pulumi_gcp/logging/project_bucket_config.py +6 -6
- pulumi_gcp/looker/instance.py +2 -2
- pulumi_gcp/monitoring/custom_service.py +2 -2
- pulumi_gcp/monitoring/generic_service.py +2 -2
- pulumi_gcp/monitoring/notification_channel.py +2 -2
- pulumi_gcp/monitoring/slo.py +2 -2
- pulumi_gcp/netapp/storage_pool.py +132 -53
- pulumi_gcp/netapp/volume.py +60 -4
- pulumi_gcp/networksecurity/address_group.py +85 -1
- pulumi_gcp/networksecurity/firewall_endpoint.py +2 -2
- pulumi_gcp/networksecurity/firewall_endpoint_association.py +2 -2
- pulumi_gcp/networksecurity/security_profile_group.py +2 -2
- pulumi_gcp/orgpolicy/_inputs.py +40 -10
- pulumi_gcp/orgpolicy/outputs.py +28 -8
- pulumi_gcp/orgpolicy/policy.py +52 -35
- pulumi_gcp/privilegedaccessmanager/entitlement.py +4 -0
- pulumi_gcp/provider.py +40 -0
- pulumi_gcp/pubsub/_inputs.py +3 -3
- pulumi_gcp/pubsub/outputs.py +4 -4
- pulumi_gcp/pulumi-plugin.json +1 -1
- pulumi_gcp/securesourcemanager/__init__.py +5 -0
- pulumi_gcp/securesourcemanager/_inputs.py +284 -0
- pulumi_gcp/securesourcemanager/get_repository_iam_policy.py +177 -0
- pulumi_gcp/securesourcemanager/outputs.py +202 -0
- pulumi_gcp/securesourcemanager/repository.py +715 -0
- pulumi_gcp/securesourcemanager/repository_iam_binding.py +804 -0
- pulumi_gcp/securesourcemanager/repository_iam_member.py +804 -0
- pulumi_gcp/securesourcemanager/repository_iam_policy.py +643 -0
- pulumi_gcp/securitycenter/__init__.py +2 -0
- pulumi_gcp/securitycenter/_inputs.py +186 -0
- pulumi_gcp/securitycenter/outputs.py +118 -0
- pulumi_gcp/securitycenter/project_notification_config.py +518 -0
- pulumi_gcp/securitycenter/v2_organization_notification_config.py +576 -0
- pulumi_gcp/securityposture/posture_deployment.py +0 -78
- pulumi_gcp/servicenetworking/vpc_service_controls.py +2 -2
- pulumi_gcp/siteverification/__init__.py +8 -0
- pulumi_gcp/siteverification/get_token.py +221 -0
- pulumi_gcp/vertex/_inputs.py +21 -1
- pulumi_gcp/vertex/ai_feature_online_store_featureview.py +222 -0
- pulumi_gcp/vertex/outputs.py +15 -1
- pulumi_gcp/workstations/_inputs.py +33 -1
- pulumi_gcp/workstations/outputs.py +23 -1
- pulumi_gcp/workstations/workstation_config.py +18 -0
- {pulumi_gcp-7.31.0a1720850808.dist-info → pulumi_gcp-7.32.0.dist-info}/METADATA +1 -1
- {pulumi_gcp-7.31.0a1720850808.dist-info → pulumi_gcp-7.32.0.dist-info}/RECORD +103 -91
- {pulumi_gcp-7.31.0a1720850808.dist-info → pulumi_gcp-7.32.0.dist-info}/WHEEL +0 -0
- {pulumi_gcp-7.31.0a1720850808.dist-info → pulumi_gcp-7.32.0.dist-info}/top_level.txt +0 -0
pulumi_gcp/kms/outputs.py
CHANGED
@@ -18,6 +18,7 @@ from . import outputs
|
|
18
18
|
__all__ = [
|
19
19
|
'CryptoKeyIAMBindingCondition',
|
20
20
|
'CryptoKeyIAMMemberCondition',
|
21
|
+
'CryptoKeyKeyAccessJustificationsPolicy',
|
21
22
|
'CryptoKeyPrimary',
|
22
23
|
'CryptoKeyVersionAttestation',
|
23
24
|
'CryptoKeyVersionAttestationCertChains',
|
@@ -30,9 +31,15 @@ __all__ = [
|
|
30
31
|
'KeyRingIAMMemberCondition',
|
31
32
|
'KeyRingImportJobAttestation',
|
32
33
|
'KeyRingImportJobPublicKey',
|
34
|
+
'GetCryptoKeysKeyResult',
|
35
|
+
'GetCryptoKeysKeyKeyAccessJustificationsPolicyResult',
|
36
|
+
'GetCryptoKeysKeyPrimaryResult',
|
37
|
+
'GetCryptoKeysKeyVersionTemplateResult',
|
38
|
+
'GetKMSCryptoKeyKeyAccessJustificationsPolicyResult',
|
33
39
|
'GetKMSCryptoKeyPrimaryResult',
|
34
40
|
'GetKMSCryptoKeyVersionPublicKeyResult',
|
35
41
|
'GetKMSCryptoKeyVersionTemplateResult',
|
42
|
+
'GetKeyRingsKeyRingResult',
|
36
43
|
]
|
37
44
|
|
38
45
|
@pulumi.output_type
|
@@ -133,6 +140,46 @@ class CryptoKeyIAMMemberCondition(dict):
|
|
133
140
|
return pulumi.get(self, "description")
|
134
141
|
|
135
142
|
|
143
|
+
@pulumi.output_type
|
144
|
+
class CryptoKeyKeyAccessJustificationsPolicy(dict):
|
145
|
+
@staticmethod
|
146
|
+
def __key_warning(key: str):
|
147
|
+
suggest = None
|
148
|
+
if key == "allowedAccessReasons":
|
149
|
+
suggest = "allowed_access_reasons"
|
150
|
+
|
151
|
+
if suggest:
|
152
|
+
pulumi.log.warn(f"Key '{key}' not found in CryptoKeyKeyAccessJustificationsPolicy. Access the value via the '{suggest}' property getter instead.")
|
153
|
+
|
154
|
+
def __getitem__(self, key: str) -> Any:
|
155
|
+
CryptoKeyKeyAccessJustificationsPolicy.__key_warning(key)
|
156
|
+
return super().__getitem__(key)
|
157
|
+
|
158
|
+
def get(self, key: str, default = None) -> Any:
|
159
|
+
CryptoKeyKeyAccessJustificationsPolicy.__key_warning(key)
|
160
|
+
return super().get(key, default)
|
161
|
+
|
162
|
+
def __init__(__self__, *,
|
163
|
+
allowed_access_reasons: Optional[Sequence[str]] = None):
|
164
|
+
"""
|
165
|
+
:param Sequence[str] allowed_access_reasons: The list of allowed reasons for access to this CryptoKey. Zero allowed
|
166
|
+
access reasons means all encrypt, decrypt, and sign operations for
|
167
|
+
this CryptoKey will fail.
|
168
|
+
"""
|
169
|
+
if allowed_access_reasons is not None:
|
170
|
+
pulumi.set(__self__, "allowed_access_reasons", allowed_access_reasons)
|
171
|
+
|
172
|
+
@property
|
173
|
+
@pulumi.getter(name="allowedAccessReasons")
|
174
|
+
def allowed_access_reasons(self) -> Optional[Sequence[str]]:
|
175
|
+
"""
|
176
|
+
The list of allowed reasons for access to this CryptoKey. Zero allowed
|
177
|
+
access reasons means all encrypt, decrypt, and sign operations for
|
178
|
+
this CryptoKey will fail.
|
179
|
+
"""
|
180
|
+
return pulumi.get(self, "allowed_access_reasons")
|
181
|
+
|
182
|
+
|
136
183
|
@pulumi.output_type
|
137
184
|
class CryptoKeyPrimary(dict):
|
138
185
|
def __init__(__self__, *,
|
@@ -860,6 +907,322 @@ class KeyRingImportJobPublicKey(dict):
|
|
860
907
|
return pulumi.get(self, "pem")
|
861
908
|
|
862
909
|
|
910
|
+
@pulumi.output_type
|
911
|
+
class GetCryptoKeysKeyResult(dict):
|
912
|
+
def __init__(__self__, *,
|
913
|
+
crypto_key_backend: str,
|
914
|
+
destroy_scheduled_duration: str,
|
915
|
+
effective_labels: Mapping[str, str],
|
916
|
+
id: str,
|
917
|
+
import_only: bool,
|
918
|
+
key_access_justifications_policies: Sequence['outputs.GetCryptoKeysKeyKeyAccessJustificationsPolicyResult'],
|
919
|
+
labels: Mapping[str, str],
|
920
|
+
primaries: Sequence['outputs.GetCryptoKeysKeyPrimaryResult'],
|
921
|
+
pulumi_labels: Mapping[str, str],
|
922
|
+
purpose: str,
|
923
|
+
rotation_period: str,
|
924
|
+
skip_initial_version_creation: bool,
|
925
|
+
version_templates: Sequence['outputs.GetCryptoKeysKeyVersionTemplateResult'],
|
926
|
+
key_ring: Optional[str] = None,
|
927
|
+
name: Optional[str] = None):
|
928
|
+
"""
|
929
|
+
:param str crypto_key_backend: The resource name of the backend environment associated with all CryptoKeyVersions within this CryptoKey.
|
930
|
+
The resource name is in the format "projects/*/locations/*/ekmConnections/*" and only applies to "EXTERNAL_VPC" keys.
|
931
|
+
:param str destroy_scheduled_duration: The period of time that versions of this key spend in the DESTROY_SCHEDULED state before transitioning to DESTROYED.
|
932
|
+
If not specified at creation time, the default duration is 30 days.
|
933
|
+
:param bool import_only: Whether this key may contain imported versions only.
|
934
|
+
:param Sequence['GetCryptoKeysKeyKeyAccessJustificationsPolicyArgs'] key_access_justifications_policies: The policy used for Key Access Justifications Policy Enforcement. If this
|
935
|
+
field is present and this key is enrolled in Key Access Justifications
|
936
|
+
Policy Enforcement, the policy will be evaluated in encrypt, decrypt, and
|
937
|
+
sign operations, and the operation will fail if rejected by the policy. The
|
938
|
+
policy is defined by specifying zero or more allowed justification codes.
|
939
|
+
https://cloud.google.com/assured-workloads/key-access-justifications/docs/justification-codes
|
940
|
+
By default, this field is absent, and all justification codes are allowed.
|
941
|
+
This field is currently in beta and is subject to change.
|
942
|
+
:param Mapping[str, str] labels: Labels with user-defined metadata to apply to this resource.
|
943
|
+
|
944
|
+
|
945
|
+
**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
|
946
|
+
Please refer to the field 'effective_labels' for all of the labels present on the resource.
|
947
|
+
:param Sequence['GetCryptoKeysKeyPrimaryArgs'] primaries: A copy of the primary CryptoKeyVersion that will be used by cryptoKeys.encrypt when this CryptoKey is given in EncryptRequest.name.
|
948
|
+
Keys with purpose ENCRYPT_DECRYPT may have a primary. For other keys, this field will be unset.
|
949
|
+
:param Mapping[str, str] pulumi_labels: The combination of labels configured directly on the resource
|
950
|
+
and default labels configured on the provider.
|
951
|
+
:param str purpose: The immutable purpose of this CryptoKey. See the
|
952
|
+
[purpose reference](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys#CryptoKeyPurpose)
|
953
|
+
for possible inputs.
|
954
|
+
Default value is "ENCRYPT_DECRYPT".
|
955
|
+
:param str rotation_period: Every time this period passes, generate a new CryptoKeyVersion and set it as the primary.
|
956
|
+
The first rotation will take place after the specified period. The rotation period has
|
957
|
+
the format of a decimal number with up to 9 fractional digits, followed by the
|
958
|
+
letter 's' (seconds). It must be greater than a day (ie, 86400).
|
959
|
+
:param bool skip_initial_version_creation: If set to true, the request will create a CryptoKey without any CryptoKeyVersions.
|
960
|
+
You must use the 'google_kms_crypto_key_version' resource to create a new CryptoKeyVersion
|
961
|
+
or 'google_kms_key_ring_import_job' resource to import the CryptoKeyVersion.
|
962
|
+
:param Sequence['GetCryptoKeysKeyVersionTemplateArgs'] version_templates: A template describing settings for new crypto key versions.
|
963
|
+
:param str key_ring: The key ring that the keys belongs to. Format: 'projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}'.,
|
964
|
+
:param str name: The resource name for the CryptoKey.
|
965
|
+
"""
|
966
|
+
pulumi.set(__self__, "crypto_key_backend", crypto_key_backend)
|
967
|
+
pulumi.set(__self__, "destroy_scheduled_duration", destroy_scheduled_duration)
|
968
|
+
pulumi.set(__self__, "effective_labels", effective_labels)
|
969
|
+
pulumi.set(__self__, "id", id)
|
970
|
+
pulumi.set(__self__, "import_only", import_only)
|
971
|
+
pulumi.set(__self__, "key_access_justifications_policies", key_access_justifications_policies)
|
972
|
+
pulumi.set(__self__, "labels", labels)
|
973
|
+
pulumi.set(__self__, "primaries", primaries)
|
974
|
+
pulumi.set(__self__, "pulumi_labels", pulumi_labels)
|
975
|
+
pulumi.set(__self__, "purpose", purpose)
|
976
|
+
pulumi.set(__self__, "rotation_period", rotation_period)
|
977
|
+
pulumi.set(__self__, "skip_initial_version_creation", skip_initial_version_creation)
|
978
|
+
pulumi.set(__self__, "version_templates", version_templates)
|
979
|
+
if key_ring is not None:
|
980
|
+
pulumi.set(__self__, "key_ring", key_ring)
|
981
|
+
if name is not None:
|
982
|
+
pulumi.set(__self__, "name", name)
|
983
|
+
|
984
|
+
@property
|
985
|
+
@pulumi.getter(name="cryptoKeyBackend")
|
986
|
+
def crypto_key_backend(self) -> str:
|
987
|
+
"""
|
988
|
+
The resource name of the backend environment associated with all CryptoKeyVersions within this CryptoKey.
|
989
|
+
The resource name is in the format "projects/*/locations/*/ekmConnections/*" and only applies to "EXTERNAL_VPC" keys.
|
990
|
+
"""
|
991
|
+
return pulumi.get(self, "crypto_key_backend")
|
992
|
+
|
993
|
+
@property
|
994
|
+
@pulumi.getter(name="destroyScheduledDuration")
|
995
|
+
def destroy_scheduled_duration(self) -> str:
|
996
|
+
"""
|
997
|
+
The period of time that versions of this key spend in the DESTROY_SCHEDULED state before transitioning to DESTROYED.
|
998
|
+
If not specified at creation time, the default duration is 30 days.
|
999
|
+
"""
|
1000
|
+
return pulumi.get(self, "destroy_scheduled_duration")
|
1001
|
+
|
1002
|
+
@property
|
1003
|
+
@pulumi.getter(name="effectiveLabels")
|
1004
|
+
def effective_labels(self) -> Mapping[str, str]:
|
1005
|
+
return pulumi.get(self, "effective_labels")
|
1006
|
+
|
1007
|
+
@property
|
1008
|
+
@pulumi.getter
|
1009
|
+
def id(self) -> str:
|
1010
|
+
return pulumi.get(self, "id")
|
1011
|
+
|
1012
|
+
@property
|
1013
|
+
@pulumi.getter(name="importOnly")
|
1014
|
+
def import_only(self) -> bool:
|
1015
|
+
"""
|
1016
|
+
Whether this key may contain imported versions only.
|
1017
|
+
"""
|
1018
|
+
return pulumi.get(self, "import_only")
|
1019
|
+
|
1020
|
+
@property
|
1021
|
+
@pulumi.getter(name="keyAccessJustificationsPolicies")
|
1022
|
+
def key_access_justifications_policies(self) -> Sequence['outputs.GetCryptoKeysKeyKeyAccessJustificationsPolicyResult']:
|
1023
|
+
"""
|
1024
|
+
The policy used for Key Access Justifications Policy Enforcement. If this
|
1025
|
+
field is present and this key is enrolled in Key Access Justifications
|
1026
|
+
Policy Enforcement, the policy will be evaluated in encrypt, decrypt, and
|
1027
|
+
sign operations, and the operation will fail if rejected by the policy. The
|
1028
|
+
policy is defined by specifying zero or more allowed justification codes.
|
1029
|
+
https://cloud.google.com/assured-workloads/key-access-justifications/docs/justification-codes
|
1030
|
+
By default, this field is absent, and all justification codes are allowed.
|
1031
|
+
This field is currently in beta and is subject to change.
|
1032
|
+
"""
|
1033
|
+
return pulumi.get(self, "key_access_justifications_policies")
|
1034
|
+
|
1035
|
+
@property
|
1036
|
+
@pulumi.getter
|
1037
|
+
def labels(self) -> Mapping[str, str]:
|
1038
|
+
"""
|
1039
|
+
Labels with user-defined metadata to apply to this resource.
|
1040
|
+
|
1041
|
+
|
1042
|
+
**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
|
1043
|
+
Please refer to the field 'effective_labels' for all of the labels present on the resource.
|
1044
|
+
"""
|
1045
|
+
return pulumi.get(self, "labels")
|
1046
|
+
|
1047
|
+
@property
|
1048
|
+
@pulumi.getter
|
1049
|
+
def primaries(self) -> Sequence['outputs.GetCryptoKeysKeyPrimaryResult']:
|
1050
|
+
"""
|
1051
|
+
A copy of the primary CryptoKeyVersion that will be used by cryptoKeys.encrypt when this CryptoKey is given in EncryptRequest.name.
|
1052
|
+
Keys with purpose ENCRYPT_DECRYPT may have a primary. For other keys, this field will be unset.
|
1053
|
+
"""
|
1054
|
+
return pulumi.get(self, "primaries")
|
1055
|
+
|
1056
|
+
@property
|
1057
|
+
@pulumi.getter(name="pulumiLabels")
|
1058
|
+
def pulumi_labels(self) -> Mapping[str, str]:
|
1059
|
+
"""
|
1060
|
+
The combination of labels configured directly on the resource
|
1061
|
+
and default labels configured on the provider.
|
1062
|
+
"""
|
1063
|
+
return pulumi.get(self, "pulumi_labels")
|
1064
|
+
|
1065
|
+
@property
|
1066
|
+
@pulumi.getter
|
1067
|
+
def purpose(self) -> str:
|
1068
|
+
"""
|
1069
|
+
The immutable purpose of this CryptoKey. See the
|
1070
|
+
[purpose reference](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys#CryptoKeyPurpose)
|
1071
|
+
for possible inputs.
|
1072
|
+
Default value is "ENCRYPT_DECRYPT".
|
1073
|
+
"""
|
1074
|
+
return pulumi.get(self, "purpose")
|
1075
|
+
|
1076
|
+
@property
|
1077
|
+
@pulumi.getter(name="rotationPeriod")
|
1078
|
+
def rotation_period(self) -> str:
|
1079
|
+
"""
|
1080
|
+
Every time this period passes, generate a new CryptoKeyVersion and set it as the primary.
|
1081
|
+
The first rotation will take place after the specified period. The rotation period has
|
1082
|
+
the format of a decimal number with up to 9 fractional digits, followed by the
|
1083
|
+
letter 's' (seconds). It must be greater than a day (ie, 86400).
|
1084
|
+
"""
|
1085
|
+
return pulumi.get(self, "rotation_period")
|
1086
|
+
|
1087
|
+
@property
|
1088
|
+
@pulumi.getter(name="skipInitialVersionCreation")
|
1089
|
+
def skip_initial_version_creation(self) -> bool:
|
1090
|
+
"""
|
1091
|
+
If set to true, the request will create a CryptoKey without any CryptoKeyVersions.
|
1092
|
+
You must use the 'google_kms_crypto_key_version' resource to create a new CryptoKeyVersion
|
1093
|
+
or 'google_kms_key_ring_import_job' resource to import the CryptoKeyVersion.
|
1094
|
+
"""
|
1095
|
+
return pulumi.get(self, "skip_initial_version_creation")
|
1096
|
+
|
1097
|
+
@property
|
1098
|
+
@pulumi.getter(name="versionTemplates")
|
1099
|
+
def version_templates(self) -> Sequence['outputs.GetCryptoKeysKeyVersionTemplateResult']:
|
1100
|
+
"""
|
1101
|
+
A template describing settings for new crypto key versions.
|
1102
|
+
"""
|
1103
|
+
return pulumi.get(self, "version_templates")
|
1104
|
+
|
1105
|
+
@property
|
1106
|
+
@pulumi.getter(name="keyRing")
|
1107
|
+
def key_ring(self) -> Optional[str]:
|
1108
|
+
"""
|
1109
|
+
The key ring that the keys belongs to. Format: 'projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}'.,
|
1110
|
+
"""
|
1111
|
+
return pulumi.get(self, "key_ring")
|
1112
|
+
|
1113
|
+
@property
|
1114
|
+
@pulumi.getter
|
1115
|
+
def name(self) -> Optional[str]:
|
1116
|
+
"""
|
1117
|
+
The resource name for the CryptoKey.
|
1118
|
+
"""
|
1119
|
+
return pulumi.get(self, "name")
|
1120
|
+
|
1121
|
+
|
1122
|
+
@pulumi.output_type
|
1123
|
+
class GetCryptoKeysKeyKeyAccessJustificationsPolicyResult(dict):
|
1124
|
+
def __init__(__self__, *,
|
1125
|
+
allowed_access_reasons: Sequence[str]):
|
1126
|
+
"""
|
1127
|
+
:param Sequence[str] allowed_access_reasons: The list of allowed reasons for access to this CryptoKey. Zero allowed
|
1128
|
+
access reasons means all encrypt, decrypt, and sign operations for
|
1129
|
+
this CryptoKey will fail.
|
1130
|
+
"""
|
1131
|
+
pulumi.set(__self__, "allowed_access_reasons", allowed_access_reasons)
|
1132
|
+
|
1133
|
+
@property
|
1134
|
+
@pulumi.getter(name="allowedAccessReasons")
|
1135
|
+
def allowed_access_reasons(self) -> Sequence[str]:
|
1136
|
+
"""
|
1137
|
+
The list of allowed reasons for access to this CryptoKey. Zero allowed
|
1138
|
+
access reasons means all encrypt, decrypt, and sign operations for
|
1139
|
+
this CryptoKey will fail.
|
1140
|
+
"""
|
1141
|
+
return pulumi.get(self, "allowed_access_reasons")
|
1142
|
+
|
1143
|
+
|
1144
|
+
@pulumi.output_type
|
1145
|
+
class GetCryptoKeysKeyPrimaryResult(dict):
|
1146
|
+
def __init__(__self__, *,
|
1147
|
+
name: str,
|
1148
|
+
state: str):
|
1149
|
+
"""
|
1150
|
+
:param str name: The resource name for this CryptoKeyVersion.
|
1151
|
+
:param str state: The current state of the CryptoKeyVersion.
|
1152
|
+
"""
|
1153
|
+
pulumi.set(__self__, "name", name)
|
1154
|
+
pulumi.set(__self__, "state", state)
|
1155
|
+
|
1156
|
+
@property
|
1157
|
+
@pulumi.getter
|
1158
|
+
def name(self) -> str:
|
1159
|
+
"""
|
1160
|
+
The resource name for this CryptoKeyVersion.
|
1161
|
+
"""
|
1162
|
+
return pulumi.get(self, "name")
|
1163
|
+
|
1164
|
+
@property
|
1165
|
+
@pulumi.getter
|
1166
|
+
def state(self) -> str:
|
1167
|
+
"""
|
1168
|
+
The current state of the CryptoKeyVersion.
|
1169
|
+
"""
|
1170
|
+
return pulumi.get(self, "state")
|
1171
|
+
|
1172
|
+
|
1173
|
+
@pulumi.output_type
|
1174
|
+
class GetCryptoKeysKeyVersionTemplateResult(dict):
|
1175
|
+
def __init__(__self__, *,
|
1176
|
+
algorithm: str,
|
1177
|
+
protection_level: str):
|
1178
|
+
"""
|
1179
|
+
:param str algorithm: The algorithm to use when creating a version based on this template.
|
1180
|
+
See the [algorithm reference](https://cloud.google.com/kms/docs/reference/rest/v1/CryptoKeyVersionAlgorithm) for possible inputs.
|
1181
|
+
:param str protection_level: The protection level to use when creating a version based on this template. Possible values include "SOFTWARE", "HSM", "EXTERNAL", "EXTERNAL_VPC". Defaults to "SOFTWARE".
|
1182
|
+
"""
|
1183
|
+
pulumi.set(__self__, "algorithm", algorithm)
|
1184
|
+
pulumi.set(__self__, "protection_level", protection_level)
|
1185
|
+
|
1186
|
+
@property
|
1187
|
+
@pulumi.getter
|
1188
|
+
def algorithm(self) -> str:
|
1189
|
+
"""
|
1190
|
+
The algorithm to use when creating a version based on this template.
|
1191
|
+
See the [algorithm reference](https://cloud.google.com/kms/docs/reference/rest/v1/CryptoKeyVersionAlgorithm) for possible inputs.
|
1192
|
+
"""
|
1193
|
+
return pulumi.get(self, "algorithm")
|
1194
|
+
|
1195
|
+
@property
|
1196
|
+
@pulumi.getter(name="protectionLevel")
|
1197
|
+
def protection_level(self) -> str:
|
1198
|
+
"""
|
1199
|
+
The protection level to use when creating a version based on this template. Possible values include "SOFTWARE", "HSM", "EXTERNAL", "EXTERNAL_VPC". Defaults to "SOFTWARE".
|
1200
|
+
"""
|
1201
|
+
return pulumi.get(self, "protection_level")
|
1202
|
+
|
1203
|
+
|
1204
|
+
@pulumi.output_type
|
1205
|
+
class GetKMSCryptoKeyKeyAccessJustificationsPolicyResult(dict):
|
1206
|
+
def __init__(__self__, *,
|
1207
|
+
allowed_access_reasons: Sequence[str]):
|
1208
|
+
"""
|
1209
|
+
:param Sequence[str] allowed_access_reasons: The list of allowed reasons for access to this CryptoKey. Zero allowed
|
1210
|
+
access reasons means all encrypt, decrypt, and sign operations for
|
1211
|
+
this CryptoKey will fail.
|
1212
|
+
"""
|
1213
|
+
pulumi.set(__self__, "allowed_access_reasons", allowed_access_reasons)
|
1214
|
+
|
1215
|
+
@property
|
1216
|
+
@pulumi.getter(name="allowedAccessReasons")
|
1217
|
+
def allowed_access_reasons(self) -> Sequence[str]:
|
1218
|
+
"""
|
1219
|
+
The list of allowed reasons for access to this CryptoKey. Zero allowed
|
1220
|
+
access reasons means all encrypt, decrypt, and sign operations for
|
1221
|
+
this CryptoKey will fail.
|
1222
|
+
"""
|
1223
|
+
return pulumi.get(self, "allowed_access_reasons")
|
1224
|
+
|
1225
|
+
|
863
1226
|
@pulumi.output_type
|
864
1227
|
class GetKMSCryptoKeyPrimaryResult(dict):
|
865
1228
|
def __init__(__self__, *,
|
@@ -951,3 +1314,22 @@ class GetKMSCryptoKeyVersionTemplateResult(dict):
|
|
951
1314
|
return pulumi.get(self, "protection_level")
|
952
1315
|
|
953
1316
|
|
1317
|
+
@pulumi.output_type
|
1318
|
+
class GetKeyRingsKeyRingResult(dict):
|
1319
|
+
def __init__(__self__, *,
|
1320
|
+
id: str,
|
1321
|
+
name: str):
|
1322
|
+
pulumi.set(__self__, "id", id)
|
1323
|
+
pulumi.set(__self__, "name", name)
|
1324
|
+
|
1325
|
+
@property
|
1326
|
+
@pulumi.getter
|
1327
|
+
def id(self) -> str:
|
1328
|
+
return pulumi.get(self, "id")
|
1329
|
+
|
1330
|
+
@property
|
1331
|
+
@pulumi.getter
|
1332
|
+
def name(self) -> str:
|
1333
|
+
return pulumi.get(self, "name")
|
1334
|
+
|
1335
|
+
|
pulumi_gcp/logging/_inputs.py
CHANGED
@@ -201,7 +201,7 @@ if not MYPY:
|
|
201
201
|
field_path: pulumi.Input[str]
|
202
202
|
"""
|
203
203
|
The LogEntry field path to index.
|
204
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
204
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
205
205
|
"""
|
206
206
|
type: pulumi.Input[str]
|
207
207
|
"""
|
@@ -217,7 +217,7 @@ class BillingAccountBucketConfigIndexConfigArgs:
|
|
217
217
|
type: pulumi.Input[str]):
|
218
218
|
"""
|
219
219
|
:param pulumi.Input[str] field_path: The LogEntry field path to index.
|
220
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
220
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
221
221
|
:param pulumi.Input[str] type: The type of data in this index. Allowed types include `INDEX_TYPE_UNSPECIFIED`, `INDEX_TYPE_STRING` and `INDEX_TYPE_INTEGER`.
|
222
222
|
"""
|
223
223
|
pulumi.set(__self__, "field_path", field_path)
|
@@ -228,7 +228,7 @@ class BillingAccountBucketConfigIndexConfigArgs:
|
|
228
228
|
def field_path(self) -> pulumi.Input[str]:
|
229
229
|
"""
|
230
230
|
The LogEntry field path to index.
|
231
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
231
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
232
232
|
"""
|
233
233
|
return pulumi.get(self, "field_path")
|
234
234
|
|
@@ -514,7 +514,7 @@ if not MYPY:
|
|
514
514
|
field_path: pulumi.Input[str]
|
515
515
|
"""
|
516
516
|
The LogEntry field path to index.
|
517
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
517
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
518
518
|
"""
|
519
519
|
type: pulumi.Input[str]
|
520
520
|
"""
|
@@ -530,7 +530,7 @@ class FolderBucketConfigIndexConfigArgs:
|
|
530
530
|
type: pulumi.Input[str]):
|
531
531
|
"""
|
532
532
|
:param pulumi.Input[str] field_path: The LogEntry field path to index.
|
533
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
533
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
534
534
|
:param pulumi.Input[str] type: The type of data in this index. Allowed types include `INDEX_TYPE_UNSPECIFIED`, `INDEX_TYPE_STRING` and `INDEX_TYPE_INTEGER`.
|
535
535
|
"""
|
536
536
|
pulumi.set(__self__, "field_path", field_path)
|
@@ -541,7 +541,7 @@ class FolderBucketConfigIndexConfigArgs:
|
|
541
541
|
def field_path(self) -> pulumi.Input[str]:
|
542
542
|
"""
|
543
543
|
The LogEntry field path to index.
|
544
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
544
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
545
545
|
"""
|
546
546
|
return pulumi.get(self, "field_path")
|
547
547
|
|
@@ -1482,7 +1482,7 @@ if not MYPY:
|
|
1482
1482
|
field_path: pulumi.Input[str]
|
1483
1483
|
"""
|
1484
1484
|
The LogEntry field path to index.
|
1485
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
1485
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
1486
1486
|
"""
|
1487
1487
|
type: pulumi.Input[str]
|
1488
1488
|
"""
|
@@ -1498,7 +1498,7 @@ class OrganizationBucketConfigIndexConfigArgs:
|
|
1498
1498
|
type: pulumi.Input[str]):
|
1499
1499
|
"""
|
1500
1500
|
:param pulumi.Input[str] field_path: The LogEntry field path to index.
|
1501
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
1501
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
1502
1502
|
:param pulumi.Input[str] type: The type of data in this index. Allowed types include `INDEX_TYPE_UNSPECIFIED`, `INDEX_TYPE_STRING` and `INDEX_TYPE_INTEGER`.
|
1503
1503
|
"""
|
1504
1504
|
pulumi.set(__self__, "field_path", field_path)
|
@@ -1509,7 +1509,7 @@ class OrganizationBucketConfigIndexConfigArgs:
|
|
1509
1509
|
def field_path(self) -> pulumi.Input[str]:
|
1510
1510
|
"""
|
1511
1511
|
The LogEntry field path to index.
|
1512
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
1512
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
1513
1513
|
"""
|
1514
1514
|
return pulumi.get(self, "field_path")
|
1515
1515
|
|
@@ -1795,7 +1795,7 @@ if not MYPY:
|
|
1795
1795
|
field_path: pulumi.Input[str]
|
1796
1796
|
"""
|
1797
1797
|
The LogEntry field path to index.
|
1798
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
1798
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
1799
1799
|
"""
|
1800
1800
|
type: pulumi.Input[str]
|
1801
1801
|
"""
|
@@ -1811,7 +1811,7 @@ class ProjectBucketConfigIndexConfigArgs:
|
|
1811
1811
|
type: pulumi.Input[str]):
|
1812
1812
|
"""
|
1813
1813
|
:param pulumi.Input[str] field_path: The LogEntry field path to index.
|
1814
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
1814
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
1815
1815
|
:param pulumi.Input[str] type: The type of data in this index. Allowed types include `INDEX_TYPE_UNSPECIFIED`, `INDEX_TYPE_STRING` and `INDEX_TYPE_INTEGER`.
|
1816
1816
|
"""
|
1817
1817
|
pulumi.set(__self__, "field_path", field_path)
|
@@ -1822,7 +1822,7 @@ class ProjectBucketConfigIndexConfigArgs:
|
|
1822
1822
|
def field_path(self) -> pulumi.Input[str]:
|
1823
1823
|
"""
|
1824
1824
|
The LogEntry field path to index.
|
1825
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
1825
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
1826
1826
|
"""
|
1827
1827
|
return pulumi.get(self, "field_path")
|
1828
1828
|
|
@@ -329,10 +329,10 @@ class FolderBucketConfig(pulumi.CustomResource):
|
|
329
329
|
location="global",
|
330
330
|
retention_days=30,
|
331
331
|
bucket_id="_Default",
|
332
|
-
index_configs={
|
333
|
-
"
|
332
|
+
index_configs=[{
|
333
|
+
"fieldPath": "jsonPayload.request.status",
|
334
334
|
"type": "INDEX_TYPE_STRING",
|
335
|
-
})
|
335
|
+
}])
|
336
336
|
```
|
337
337
|
|
338
338
|
## Import
|
@@ -386,10 +386,10 @@ class FolderBucketConfig(pulumi.CustomResource):
|
|
386
386
|
location="global",
|
387
387
|
retention_days=30,
|
388
388
|
bucket_id="_Default",
|
389
|
-
index_configs={
|
390
|
-
"
|
389
|
+
index_configs=[{
|
390
|
+
"fieldPath": "jsonPayload.request.status",
|
391
391
|
"type": "INDEX_TYPE_STRING",
|
392
|
-
})
|
392
|
+
}])
|
393
393
|
```
|
394
394
|
|
395
395
|
## Import
|
@@ -327,10 +327,10 @@ class OrganizationBucketConfig(pulumi.CustomResource):
|
|
327
327
|
location="global",
|
328
328
|
retention_days=30,
|
329
329
|
bucket_id="_Default",
|
330
|
-
index_configs={
|
331
|
-
"
|
330
|
+
index_configs=[{
|
331
|
+
"fieldPath": "jsonPayload.request.status",
|
332
332
|
"type": "INDEX_TYPE_STRING",
|
333
|
-
})
|
333
|
+
}])
|
334
334
|
```
|
335
335
|
|
336
336
|
## Import
|
@@ -382,10 +382,10 @@ class OrganizationBucketConfig(pulumi.CustomResource):
|
|
382
382
|
location="global",
|
383
383
|
retention_days=30,
|
384
384
|
bucket_id="_Default",
|
385
|
-
index_configs={
|
386
|
-
"
|
385
|
+
index_configs=[{
|
386
|
+
"fieldPath": "jsonPayload.request.status",
|
387
387
|
"type": "INDEX_TYPE_STRING",
|
388
|
-
})
|
388
|
+
}])
|
389
389
|
```
|
390
390
|
|
391
391
|
## Import
|
pulumi_gcp/logging/outputs.py
CHANGED
@@ -168,7 +168,7 @@ class BillingAccountBucketConfigIndexConfig(dict):
|
|
168
168
|
type: str):
|
169
169
|
"""
|
170
170
|
:param str field_path: The LogEntry field path to index.
|
171
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
171
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
172
172
|
:param str type: The type of data in this index. Allowed types include `INDEX_TYPE_UNSPECIFIED`, `INDEX_TYPE_STRING` and `INDEX_TYPE_INTEGER`.
|
173
173
|
"""
|
174
174
|
pulumi.set(__self__, "field_path", field_path)
|
@@ -179,7 +179,7 @@ class BillingAccountBucketConfigIndexConfig(dict):
|
|
179
179
|
def field_path(self) -> str:
|
180
180
|
"""
|
181
181
|
The LogEntry field path to index.
|
182
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
182
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
183
183
|
"""
|
184
184
|
return pulumi.get(self, "field_path")
|
185
185
|
|
@@ -411,7 +411,7 @@ class FolderBucketConfigIndexConfig(dict):
|
|
411
411
|
type: str):
|
412
412
|
"""
|
413
413
|
:param str field_path: The LogEntry field path to index.
|
414
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
414
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
415
415
|
:param str type: The type of data in this index. Allowed types include `INDEX_TYPE_UNSPECIFIED`, `INDEX_TYPE_STRING` and `INDEX_TYPE_INTEGER`.
|
416
416
|
"""
|
417
417
|
pulumi.set(__self__, "field_path", field_path)
|
@@ -422,7 +422,7 @@ class FolderBucketConfigIndexConfig(dict):
|
|
422
422
|
def field_path(self) -> str:
|
423
423
|
"""
|
424
424
|
The LogEntry field path to index.
|
425
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
425
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
426
426
|
"""
|
427
427
|
return pulumi.get(self, "field_path")
|
428
428
|
|
@@ -1157,7 +1157,7 @@ class OrganizationBucketConfigIndexConfig(dict):
|
|
1157
1157
|
type: str):
|
1158
1158
|
"""
|
1159
1159
|
:param str field_path: The LogEntry field path to index.
|
1160
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
1160
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
1161
1161
|
:param str type: The type of data in this index. Allowed types include `INDEX_TYPE_UNSPECIFIED`, `INDEX_TYPE_STRING` and `INDEX_TYPE_INTEGER`.
|
1162
1162
|
"""
|
1163
1163
|
pulumi.set(__self__, "field_path", field_path)
|
@@ -1168,7 +1168,7 @@ class OrganizationBucketConfigIndexConfig(dict):
|
|
1168
1168
|
def field_path(self) -> str:
|
1169
1169
|
"""
|
1170
1170
|
The LogEntry field path to index.
|
1171
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
1171
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
1172
1172
|
"""
|
1173
1173
|
return pulumi.get(self, "field_path")
|
1174
1174
|
|
@@ -1400,7 +1400,7 @@ class ProjectBucketConfigIndexConfig(dict):
|
|
1400
1400
|
type: str):
|
1401
1401
|
"""
|
1402
1402
|
:param str field_path: The LogEntry field path to index.
|
1403
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
1403
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
1404
1404
|
:param str type: The type of data in this index. Allowed types include `INDEX_TYPE_UNSPECIFIED`, `INDEX_TYPE_STRING` and `INDEX_TYPE_INTEGER`.
|
1405
1405
|
"""
|
1406
1406
|
pulumi.set(__self__, "field_path", field_path)
|
@@ -1411,7 +1411,7 @@ class ProjectBucketConfigIndexConfig(dict):
|
|
1411
1411
|
def field_path(self) -> str:
|
1412
1412
|
"""
|
1413
1413
|
The LogEntry field path to index.
|
1414
|
-
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See indexing documentation for details.
|
1414
|
+
Note that some paths are automatically indexed, and other paths are not eligible for indexing. See [indexing documentation](https://cloud.google.com/logging/docs/analyze/custom-index) for details.
|
1415
1415
|
"""
|
1416
1416
|
return pulumi.get(self, "field_path")
|
1417
1417
|
|