131 lines
4.4 KiB
Python
131 lines
4.4 KiB
Python
# -*- coding: utf-8 -*- #
|
|
# Copyright 2023 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.
|
|
"""Common flags for service-extensions resources."""
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import unicode_literals
|
|
|
|
import textwrap
|
|
|
|
from googlecloudsdk.calliope import arg_parsers
|
|
from googlecloudsdk.calliope.concepts import concepts
|
|
from googlecloudsdk.command_lib.service_extensions import util
|
|
from googlecloudsdk.command_lib.util.apis import yaml_data
|
|
from googlecloudsdk.command_lib.util.concepts import concept_parsers
|
|
from googlecloudsdk.command_lib.util.concepts import presentation_specs
|
|
|
|
|
|
def AddWasmPluginResource(parser, api_version, message):
|
|
wasm_plugin_data = yaml_data.ResourceYAMLData.FromPath(
|
|
'service_extensions.wasmPlugin'
|
|
)
|
|
concept_parsers.ConceptParser(
|
|
[
|
|
presentation_specs.ResourcePresentationSpec(
|
|
'wasm_plugin',
|
|
concepts.ResourceSpec.FromYaml(
|
|
wasm_plugin_data.GetData(),
|
|
api_version=api_version,
|
|
),
|
|
message,
|
|
required=True,
|
|
)
|
|
],
|
|
).AddToParser(parser)
|
|
|
|
|
|
def AddDescriptionFlag(parser):
|
|
parser.add_argument(
|
|
'--description',
|
|
help='A human-readable description of the resource.')
|
|
|
|
|
|
def AddLogConfigFlag(parser, api_version):
|
|
parser.add_argument(
|
|
'--log-config',
|
|
action='append',
|
|
type=util.LogConfig(api_version),
|
|
required=False,
|
|
metavar='LOG_CONFIG',
|
|
help=textwrap.dedent("""\
|
|
Logging options for the activity performed by this plugin.
|
|
The following options can be set:
|
|
* `enable`: whether to enable logging. If `log-config` flag is set,
|
|
`enable` option is required.
|
|
|
|
* `sample-rate`: configures the sampling rate of activity logs, where
|
|
`1.0` means all logged activity is reported and `0.0` means no
|
|
activity is reported. The default value is `1.0`, and the value of
|
|
the field must be in range `0` to `1` (inclusive).
|
|
|
|
* `min-log-level`: specifies the lowest level of the logs that
|
|
should be exported to Cloud Logging. The default value is `INFO`.
|
|
|
|
Example usage:
|
|
`--log-config=enable=True,sample-rate=0.5,min-log-level=INFO
|
|
--log_config=enable=False`
|
|
"""),
|
|
)
|
|
|
|
|
|
def AddVersionFlag(parser, version_message):
|
|
parser.add_argument('--main-version', help=version_message)
|
|
|
|
|
|
def AddImageFlag(parser):
|
|
parser.add_argument(
|
|
'--image',
|
|
help=textwrap.dedent("""\
|
|
URI of the container image containing the plugin's Wasm module,
|
|
stored in the Artifact Registry."""),
|
|
)
|
|
|
|
|
|
def AddPluginConfigFlag(parser):
|
|
"""Adds flags defining plugin config."""
|
|
plugin_config_group = parser.add_group(
|
|
mutex=True,
|
|
required=False,
|
|
help="""Configuration for the plugin, provided at runtime by the
|
|
`on_configure` function (Rust Proxy-Wasm SDK) or the
|
|
`onConfigure` method (C++ Proxy-Wasm SDK).""",
|
|
)
|
|
plugin_config_group.add_argument(
|
|
'--plugin-config',
|
|
required=False,
|
|
help="""Plugin runtime configuration in the textual format."""
|
|
)
|
|
plugin_config_group.add_argument(
|
|
'--plugin-config-file',
|
|
required=False,
|
|
type=arg_parsers.FileContents(binary=True),
|
|
help="""Path to a local file containing the plugin runtime
|
|
configuration."""
|
|
)
|
|
plugin_config_group.add_argument(
|
|
'--plugin-config-uri',
|
|
required=False,
|
|
help="""URI of the container image containing the plugin's runtime
|
|
configuration, stored in the Artifact Registry."""
|
|
)
|
|
|
|
|
|
def AddWasmPluginVersionArgs(parser, version_message):
|
|
wasm_plugin_version_group = parser.add_group(mutex=False, required=False)
|
|
AddVersionFlag(wasm_plugin_version_group, version_message)
|
|
AddImageFlag(wasm_plugin_version_group)
|
|
AddPluginConfigFlag(wasm_plugin_version_group)
|