Files

105 lines
3.5 KiB
Python

# -*- coding: utf-8 -*- #
# Copyright 2025 Google LLC. All Rights Reserved.
#
# 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.
"""Create a single tenant HSM instance."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.cloudkms import base as cloudkms_base
from googlecloudsdk.calliope import base
from googlecloudsdk.calliope import exceptions
from googlecloudsdk.command_lib.kms import resource_args
@base.DefaultUniverseOnly
class Create(base.Command):
r"""Create a single tenant HSM instance.
## EXAMPLES
The following command creates a single tenant HSM instance
within the location `us-central1` with a total approver count of 3:
$ {command} --location=us-central1 \
--total-approver-count=3
The following command creates a single tenant HSM instance within the location
`us-central1` with a total approver count of 3, and the single tenant HSM
instance ID `my_stchi`:
$ {command} --location=us-central1 \
--total-approver-count=3 \
--single-tenant-hsm-instance-id=my_stchi
"""
@staticmethod
def Args(parser):
resource_args.AddKmsLocationResourceArgForKMS(parser, True, '--location')
parser.add_argument(
'--total-approver-count',
type=int,
required=True,
help=(
'The total number of approvers. This is the N value used for M of N'
' quorum auth. Must be greater than or equal to 3 and less than or'
' equal to 16.'
),
)
parser.add_argument(
'--single-tenant-hsm-instance-id',
type=str,
required=False,
help=(
'Specify an ID for the single tenant HSM instance. It must be'
' unique within a location and match the regular expression'
' `[a-zA-Z0-9_-]{1,63}`.'
),
)
def CreateRequest(self, args):
messages = cloudkms_base.GetMessagesModule()
location_ref = args.CONCEPTS.location.Parse()
parent = location_ref.RelativeName()
if args.total_approver_count < 3 or args.total_approver_count > 16:
raise exceptions.BadArgumentException(
'--total-approver-count',
'The total approver count must be between 3 and 16.',
)
stchi_id = (
args.single_tenant_hsm_instance_id
if args.single_tenant_hsm_instance_id
else None
)
return (
messages.CloudkmsProjectsLocationsSingleTenantHsmInstancesCreateRequest(
parent=parent,
singleTenantHsmInstanceId=stchi_id,
singleTenantHsmInstance=messages.SingleTenantHsmInstance(
quorumAuth=messages.QuorumAuth(
totalApproverCount=int(args.total_approver_count),
),
),
)
)
def Run(self, args):
"""Create a single tenant HSM instance."""
client = cloudkms_base.GetClientInstance()
return client.projects_locations_singleTenantHsmInstances.Create(
self.CreateRequest(args)
)