示例#1
0
SCHEMA = s.Message(
    api_config=s.Message(url=s.Value(converter=c.ToJsonString),
                         login=s.Value(converter=c.EnumConverter('LOGIN')),
                         secure=s.Value('security_level',
                                        converter=c.EnumConverter('SECURE')),
                         auth_fail_action=s.Value(
                             converter=c.EnumConverter('AUTH_FAIL_ACTION')),
                         script=s.Value(converter=c.ToJsonString)),
    api_version=s.Value('runtime_api_version', converter=c.ToJsonString),
    auto_id_policy=s.Value('beta_settings',
                           lambda val: {'auto_id_policy': val}),
    automatic_scaling=s.Message(
        converter=c.ConvertAutomaticScaling,
        cool_down_period_sec=s.Value('cool_down_period',
                                     converter=c.SecondsToDuration),
        cpu_utilization=s.Message(target_utilization=s.Value(),
                                  aggregation_window_length_sec=s.Value(
                                      'aggregation_window_length',
                                      converter=c.SecondsToDuration)),
        max_instances=s.Value('max_instances'),
        min_instances=s.Value('min_instances'),
        target_cpu_utilization=s.Value('target_cpu_utilization'),
        target_throughput_utilization=s.Value('target_throughput_utilization'),
        max_num_instances=s.Value('max_total_instances'),
        min_pending_latency=s.Value(converter=c.LatencyToDuration),
        min_idle_instances=s.Value(converter=c.StringToInt(
            handle_automatic=True)),
        max_idle_instances=s.Value(converter=c.StringToInt(
            handle_automatic=True)),
        max_pending_latency=s.Value(converter=c.LatencyToDuration),
        max_concurrent_requests=s.Value(converter=c.StringToInt()),
        min_num_instances=s.Value('min_total_instances'),
        target_network_sent_bytes_per_sec=s.Value('target_sent_bytes_per_sec'),
        target_network_sent_packets_per_sec=s.Value(
            'target_sent_packets_per_sec'),
        target_network_received_bytes_per_sec=s.Value(
            'target_received_bytes_per_sec'),
        target_network_received_packets_per_sec=s.Value(
            'target_received_packets_per_sec'),
        target_disk_write_bytes_per_sec=s.Value('target_write_bytes_per_sec'),
        target_disk_write_ops_per_sec=s.Value('target_write_ops_per_sec'),
        target_disk_read_bytes_per_sec=s.Value('target_read_bytes_per_sec'),
        target_disk_read_ops_per_sec=s.Value('target_read_ops_per_sec'),
        target_request_count_per_sec=s.Value(
            'target_request_count_per_second'),
        target_concurrent_requests=s.Value(),
        custom_metrics=s.RepeatedField(element=s.Message(
            metric_name=s.Value(converter=c.ToJsonString),
            target_type=s.Value(converter=c.ToJsonString),
            target_utilization=s.Value('target_utilization'),
            single_instance_assignment=s.Value('single_instance_assignment'),
            filter=s.Value(converter=c.ToJsonString))),
    ),
    basic_scaling=s.Message(
        idle_timeout=s.Value(converter=c.IdleTimeoutToDuration),
        max_instances=s.Value(converter=c.StringToInt())),
    beta_settings=s.Map(),
    default_expiration=s.Value(converter=c.ExpirationToDuration),
    endpoints_api_service=s.Message(
        name=s.Value(),
        rollout_strategy=s.Value(
            converter=c.ConvertEndpointsRolloutStrategyToEnum),
        config_id=s.Value(),
        trace_sampling=s.Value('disable_trace_sampling', converter=c.Not),
    ),
    entrypoint=s.Value(converter=c.ConvertEntrypoint),
    env=s.Value(),
    env_variables=s.Map(),
    error_handlers=s.RepeatedField(element=s.Message(
        error_code=s.Value(converter=c.EnumConverter('ERROR_CODE')),
        file=s.Value('static_file', converter=c.ToJsonString),
        mime_type=s.Value(converter=c.ToJsonString))),
    # Restructure the handler after it's complete, since this is more
    # complicated than a simple rename.
    handlers=s.RepeatedField(element=s.Message(
        converter=c.ConvertUrlHandler,
        auth_fail_action=s.Value(
            converter=c.EnumConverter('AUTH_FAIL_ACTION')),
        static_dir=s.Value(converter=c.ToJsonString),
        secure=s.Value('security_level', converter=c.EnumConverter('SECURE')),
        redirect_http_response_code=s.Value(
            converter=c.EnumConverter('REDIRECT_HTTP_RESPONSE_CODE')),
        http_headers=s.Map(),
        url=s.Value('url_regex'),
        expiration=s.Value(converter=c.ExpirationToDuration),
        static_files=s.Value('path', converter=c.ToJsonString),
        script=s.Value('script_path', converter=c.ToJsonString),
        upload=s.Value('upload_path_regex', converter=c.ToJsonString),
        api_endpoint=s.Value(),
        application_readable=s.Value(),
        position=s.Value(),
        login=s.Value(converter=c.EnumConverter('LOGIN')),
        mime_type=s.Value(converter=c.ToJsonString),
        require_matching_file=s.Value())),
    health_check=s.Message(check_interval_sec=s.Value(
        'check_interval', converter=c.SecondsToDuration),
                           timeout_sec=s.Value('timeout',
                                               converter=c.SecondsToDuration),
                           healthy_threshold=s.Value(),
                           enable_health_check=s.Value('disable_health_check',
                                                       converter=c.Not),
                           unhealthy_threshold=s.Value(),
                           host=s.Value(converter=c.ToJsonString),
                           restart_threshold=s.Value()),
    liveness_check=s.Message(
        check_interval_sec=s.Value('check_interval',
                                   converter=c.SecondsToDuration),
        timeout_sec=s.Value('timeout', converter=c.SecondsToDuration),
        initial_delay_sec=s.Value('initial_delay',
                                  converter=c.SecondsToDuration),
        success_threshold=s.Value(),
        failure_threshold=s.Value(),
        path=s.Value(),
        host=s.Value(converter=c.ToJsonString)),
    readiness_check=s.Message(
        check_interval_sec=s.Value('check_interval',
                                   converter=c.SecondsToDuration),
        timeout_sec=s.Value('timeout', converter=c.SecondsToDuration),
        app_start_timeout_sec=s.Value('app_start_timeout',
                                      converter=c.SecondsToDuration),
        success_threshold=s.Value(),
        failure_threshold=s.Value(),
        path=s.Value(),
        host=s.Value(converter=c.ToJsonString)),
    inbound_services=s.RepeatedField(element=s.Value(
        converter=c.EnumConverter('INBOUND_SERVICE'))),
    instance_class=s.Value(converter=c.ToJsonString),
    libraries=s.RepeatedField(
        element=s.Message(version=s.Value(converter=c.ToJsonString),
                          name=s.Value(converter=c.ToJsonString))),
    main=s.Value('runtime_main_executable_path', converter=c.ToJsonString),
    manual_scaling=s.Message(instances=s.Value(converter=c.StringToInt())),
    network=s.Message(instance_tag=s.Value(converter=c.ToJsonString),
                      name=s.Value(converter=c.ToJsonString),
                      subnetwork_name=s.Value(converter=c.ToJsonString),
                      forwarded_ports=s.RepeatedField(element=s.Value(
                          converter=c.ToJsonString)),
                      session_affinity=s.Value()),
    vpc_access_connector=s.Message(name=s.Value(converter=c.ToJsonString), ),
    zones=s.RepeatedField(element=s.Value(converter=c.ToJsonString)),
    nobuild_files=s.Value('nobuild_files_regex', converter=c.ToJsonString),
    resources=s.Message(
        memory_gb=s.Value(),
        disk_size_gb=s.Value('disk_gb'),
        cpu=s.Value(),
        volumes=s.RepeatedField(
            element=s.Message(name=s.Value(converter=c.ToJsonString),
                              volume_type=s.Value(converter=c.ToJsonString),
                              size_gb=s.Value()))),
    runtime=s.Value(converter=c.ToJsonString),
    runtime_channel=s.Value(converter=c.ToJsonString),
    standard_websocket=s.Value('enable_standard_websocket'),
    threadsafe=s.Value(),
    version=s.Value('id', converter=c.ToJsonString),
    vm=s.Value(),
    vm_settings=s.Map('beta_settings'))
class _Collector(object):
    """Manages a PluginResult in a thread-safe context."""
    def __init__(self):
        self.result = PluginResult()
        self.lock = threading.Lock()


_LOG_FUNCS = {
    'info': logging.info,
    'error': logging.error,
    'warn': logging.warn,
    'debug': logging.debug
}

# A section consisting only of scripts.
_EXEC_SECTION = schema.Message(python=schema.Value(converter=str))

_RUNTIME_SCHEMA = schema.Message(name=schema.Value(converter=str),
                                 description=schema.Value(converter=str),
                                 author=schema.Value(converter=str),
                                 api_version=schema.Value(converter=str),
                                 generate_configs=schema.Message(
                                     python=schema.Value(converter=str),
                                     files_to_copy=schema.RepeatedField(
                                         element=schema.Value(converter=str)),
                                 ),
                                 detect=_EXEC_SECTION,
                                 collect_data=_EXEC_SECTION,
                                 prebuild=_EXEC_SECTION,
                                 postbuild=_EXEC_SECTION)