279 lines
9.0 KiB
Python
279 lines
9.0 KiB
Python
# -*- coding: utf-8 -*- #
|
|
# Copyright 2019 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.
|
|
"""gcloud dns policy create command."""
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import unicode_literals
|
|
|
|
from googlecloudsdk.api_lib.dns import util
|
|
from googlecloudsdk.api_lib.util import apis
|
|
from googlecloudsdk.calliope import base
|
|
from googlecloudsdk.calliope import exceptions
|
|
from googlecloudsdk.command_lib.dns import flags
|
|
from googlecloudsdk.command_lib.dns import resource_args
|
|
from googlecloudsdk.command_lib.dns import util as command_util
|
|
from googlecloudsdk.core import log
|
|
|
|
|
|
def _AddArgsCommon(parser):
|
|
flags.GetPolicyDescriptionArg(required=True).AddToParser(parser)
|
|
flags.GetPolicyNetworksArg(required=True).AddToParser(parser)
|
|
flags.GetPolicyInboundForwardingArg().AddToParser(parser)
|
|
flags.GetPolicyAltNameServersArg().AddToParser(parser)
|
|
flags.GetPolicyLoggingArg().AddToParser(parser)
|
|
flags.GetPolicyPrivateAltNameServersArg().AddToParser(parser)
|
|
flags.GetEnableDns64AllQueriesArg().AddToParser(parser)
|
|
|
|
|
|
@base.UniverseCompatible
|
|
@base.ReleaseTracks(base.ReleaseTrack.GA)
|
|
class CreateGA(base.UpdateCommand):
|
|
r"""Creates a new Cloud DNS policy.
|
|
|
|
This command creates a new Cloud DNS policy.
|
|
|
|
## EXAMPLES
|
|
|
|
To create a new policy with minimal arguments, run:
|
|
|
|
$ {command} mypolicy \
|
|
--description='My new policy test policy 5' \
|
|
--networks=''
|
|
|
|
To create a new policy with all optional arguments, run:
|
|
|
|
$ {command} mypolicy \
|
|
--description='My new policy test policy 5' \
|
|
--networks=network1,network2 \
|
|
--alternative-name-servers=192.168.1.1,192.168.1.2 \
|
|
--enable-inbound-forwarding \
|
|
--enable-logging \
|
|
--enable-dns64-all-queries
|
|
"""
|
|
|
|
@staticmethod
|
|
def Args(parser):
|
|
resource_args.AddPolicyResourceArg(
|
|
parser, verb='to create', api_version='v1')
|
|
_AddArgsCommon(parser)
|
|
parser.display_info.AddFormat('json')
|
|
|
|
def Run(self, args):
|
|
api_version = util.GetApiFromTrack(self.ReleaseTrack())
|
|
client = util.GetApiClient(api_version)
|
|
messages = apis.GetMessagesModule('dns', api_version)
|
|
|
|
# Get Policy
|
|
policy_ref = args.CONCEPTS.policy.Parse()
|
|
policy_name = policy_ref.Name()
|
|
|
|
policy = messages.Policy(
|
|
name=policy_name,
|
|
enableLogging=False,
|
|
enableInboundForwarding=False,
|
|
)
|
|
|
|
if args.IsSpecified('networks'):
|
|
if args.networks == ['']:
|
|
args.networks = []
|
|
policy.networks = command_util.ParsePolicyNetworks(
|
|
args.networks, policy_ref.project, api_version)
|
|
else:
|
|
raise exceptions.RequiredArgumentException('--networks', ("""
|
|
A list of networks must be
|
|
provided.'
|
|
NOTE: You can provide an empty value ("") for policies that
|
|
have NO network binding.
|
|
"""))
|
|
|
|
if args.IsSpecified('alternative_name_servers') or args.IsSpecified(
|
|
'private_alternative_name_servers'):
|
|
if args.alternative_name_servers == ['']:
|
|
args.alternative_name_servers = []
|
|
if args.private_alternative_name_servers == ['']:
|
|
args.private_alternative_name_servers = []
|
|
policy.alternativeNameServerConfig = command_util.ParseAltNameServers(
|
|
version=api_version,
|
|
server_list=args.alternative_name_servers,
|
|
private_server_list=args.private_alternative_name_servers)
|
|
|
|
if args.IsSpecified('enable_inbound_forwarding'):
|
|
policy.enableInboundForwarding = args.enable_inbound_forwarding
|
|
|
|
if args.IsSpecified('enable_logging'):
|
|
policy.enableLogging = args.enable_logging
|
|
|
|
if args.IsSpecified('enable_dns64_all_queries'):
|
|
policy.dns64Config = messages.PolicyDns64Config(
|
|
scope=messages.PolicyDns64ConfigScope(
|
|
allQueries=args.enable_dns64_all_queries
|
|
)
|
|
)
|
|
else:
|
|
policy.dns64Config = messages.PolicyDns64Config(
|
|
scope=messages.PolicyDns64ConfigScope(allQueries=False)
|
|
)
|
|
|
|
if args.IsSpecified('description'):
|
|
policy.description = args.description
|
|
|
|
create_request = messages.DnsPoliciesCreateRequest(
|
|
policy=policy, project=policy_ref.project)
|
|
|
|
result = client.policies.Create(create_request)
|
|
|
|
log.CreatedResource(policy_ref, kind='Policy')
|
|
|
|
return result
|
|
|
|
|
|
@base.UniverseCompatible
|
|
@base.ReleaseTracks(base.ReleaseTrack.BETA)
|
|
class CreateBeta(CreateGA):
|
|
r"""Creates a new Cloud DNS policy.
|
|
|
|
This command creates a new Cloud DNS policy.
|
|
|
|
## EXAMPLES
|
|
|
|
To create a new policy with minimal arguments, run:
|
|
|
|
$ {command} mypolicy \
|
|
--description='My new policy test policy 5' \
|
|
--networks=''
|
|
|
|
To create a new policy with all optional arguments, run:
|
|
|
|
$ {command} mypolicy \
|
|
--description='My new policy test policy 5' \
|
|
--networks=network1,network2 \
|
|
--alternative-name-servers=192.168.1.1,192.168.1.2 \
|
|
--private-alternative-name-servers=100.64.0.1 \
|
|
--enable-inbound-forwarding \
|
|
--enable-logging \
|
|
--enable-dns64-all-queries
|
|
"""
|
|
|
|
@staticmethod
|
|
def Args(parser):
|
|
resource_args.AddPolicyResourceArg(
|
|
parser, verb='to create', api_version='v1beta2')
|
|
_AddArgsCommon(parser)
|
|
parser.display_info.AddFormat('json')
|
|
|
|
def Run(self, args):
|
|
api_version = util.GetApiFromTrack(self.ReleaseTrack())
|
|
client = util.GetApiClient(api_version)
|
|
messages = apis.GetMessagesModule('dns', api_version)
|
|
|
|
# Get Policy
|
|
policy_ref = args.CONCEPTS.policy.Parse()
|
|
policy_name = policy_ref.Name()
|
|
|
|
policy = messages.Policy(
|
|
name=policy_name,
|
|
enableLogging=False,
|
|
enableInboundForwarding=False,
|
|
)
|
|
|
|
if args.IsSpecified('networks'):
|
|
if args.networks == ['']:
|
|
args.networks = []
|
|
policy.networks = command_util.ParsePolicyNetworks(
|
|
args.networks, policy_ref.project, api_version)
|
|
else:
|
|
raise exceptions.RequiredArgumentException('--networks', ("""
|
|
A list of networks must be
|
|
provided.'
|
|
NOTE: You can provide an empty value ("") for policies that
|
|
have NO network binding.
|
|
"""))
|
|
|
|
if args.IsSpecified('alternative_name_servers') or args.IsSpecified(
|
|
'private_alternative_name_servers'):
|
|
if args.alternative_name_servers == ['']:
|
|
args.alternative_name_servers = []
|
|
if args.private_alternative_name_servers == ['']:
|
|
args.private_alternative_name_servers = []
|
|
policy.alternativeNameServerConfig = command_util.BetaParseAltNameServers(
|
|
version=api_version,
|
|
server_list=args.alternative_name_servers,
|
|
private_server_list=args.private_alternative_name_servers)
|
|
|
|
if args.IsSpecified('enable_inbound_forwarding'):
|
|
policy.enableInboundForwarding = args.enable_inbound_forwarding
|
|
|
|
if args.IsSpecified('enable_logging'):
|
|
policy.enableLogging = args.enable_logging
|
|
|
|
if args.IsSpecified('enable_dns64_all_queries'):
|
|
policy.dns64Config = messages.PolicyDns64Config(
|
|
scope=messages.PolicyDns64ConfigScope(
|
|
allQueries=args.enable_dns64_all_queries
|
|
)
|
|
)
|
|
else:
|
|
policy.dns64Config = messages.PolicyDns64Config(
|
|
scope=messages.PolicyDns64ConfigScope(allQueries=False)
|
|
)
|
|
|
|
if args.IsSpecified('description'):
|
|
policy.description = args.description
|
|
|
|
create_request = messages.DnsPoliciesCreateRequest(
|
|
policy=policy, project=policy_ref.project)
|
|
|
|
result = client.policies.Create(create_request)
|
|
|
|
log.CreatedResource(policy_ref, kind='Policy')
|
|
|
|
return result
|
|
|
|
|
|
@base.UniverseCompatible
|
|
@base.ReleaseTracks(base.ReleaseTrack.ALPHA)
|
|
class CreateAlpha(CreateBeta):
|
|
r"""Creates a new Cloud DNS policy.
|
|
|
|
This command creates a new Cloud DNS policy.
|
|
|
|
## EXAMPLES
|
|
|
|
To create a new policy with minimal arguments, run:
|
|
|
|
$ {command} mypolicy \
|
|
--description='My new policy test policy 5' \
|
|
--networks=''
|
|
|
|
To create a new policy with all optional arguments, run:
|
|
|
|
$ {command} mypolicy \
|
|
--description='My new policy test policy 5' \
|
|
--networks=network1,network2 \
|
|
--alternative-name-servers=192.168.1.1,192.168.1.2 \
|
|
--private-alternative-name-servers=100.64.0.1 \
|
|
--enable-inbound-forwarding \
|
|
--enable-logging \
|
|
--enable-dns64-all-queries
|
|
"""
|
|
|
|
@staticmethod
|
|
def Args(parser):
|
|
resource_args.AddPolicyResourceArg(
|
|
parser, verb='to create', api_version='v1alpha2')
|
|
_AddArgsCommon(parser)
|
|
parser.display_info.AddFormat('json')
|