# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: test_platform/phosphorus/prejob.proto
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()


from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
from chromite.api.gen_sdk.test_platform.phosphorus import common_pb2 as test__platform_dot_phosphorus_dot_common__pb2
from chromite.api.gen_sdk.test_platform import request_pb2 as test__platform_dot_request__pb2


DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%test_platform/phosphorus/prejob.proto\x12\x18test_platform.phosphorus\x1a\x1fgoogle/protobuf/timestamp.proto\x1a%test_platform/phosphorus/common.proto\x1a\x1btest_platform/request.proto\"\xb9\x08\n\rPrejobRequest\x12\x30\n\x06\x63onfig\x18\x01 \x01(\x0b\x32 .test_platform.phosphorus.Config\x12\x14\n\x0c\x64ut_hostname\x18\x02 \x01(\t\x12\x62\n\x14provisionable_labels\x18\x03 \x03(\x0b\x32@.test_platform.phosphorus.PrejobRequest.ProvisionableLabelsEntryB\x02\x18\x01\x12q\n\x1c\x64\x65sired_provisionable_labels\x18\x04 \x03(\x0b\x32G.test_platform.phosphorus.PrejobRequest.DesiredProvisionableLabelsEntryB\x02\x18\x01\x12O\n\x15software_dependencies\x18\x08 \x03(\x0b\x32\x30.test_platform.Request.Params.SoftwareDependency\x12o\n\x1d\x65xisting_provisionable_labels\x18\x05 \x03(\x0b\x32H.test_platform.phosphorus.PrejobRequest.ExistingProvisionableLabelsEntry\x12,\n\x08\x64\x65\x61\x64line\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07use_tls\x18\x07 \x01(\x08\x12R\n\x11\x61\x64\x64tional_targets\x18\t \x03(\x0b\x32\x37.test_platform.phosphorus.PrejobRequest.ProvisionTarget\x12\x17\n\x0fupdate_firmware\x18\n \x01(\x08\x12!\n\x19provision_googler_ssh_key\x18\x0b \x01(\x08\x1a:\n\x18ProvisionableLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x41\n\x1f\x44\x65siredProvisionableLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x42\n ExistingProvisionableLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\xb4\x01\n\x0fProvisionTarget\x12\x14\n\x0c\x64ut_hostname\x18\x01 \x01(\t\x12O\n\x15software_dependencies\x18\x02 \x03(\x0b\x32\x30.test_platform.Request.Params.SoftwareDependency\x12\x17\n\x0fupdate_firmware\x18\x03 \x01(\x08\x12!\n\x19provision_googler_ssh_key\x18\x04 \x01(\x08\"\xa6\x01\n\x0ePrejobResponse\x12=\n\x05state\x18\x01 \x01(\x0e\x32..test_platform.phosphorus.PrejobResponse.State\"U\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\r\n\tSUCCEEDED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x12\r\n\tTIMED_OUT\x10\x03\x12\x0b\n\x07\x41\x42ORTED\x10\x04\x42\x44ZBgo.chromium.org/chromiumos/infra/proto/go/test_platform/phosphorusb\x06proto3')

_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'test_platform.phosphorus.prejob_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:

  DESCRIPTOR._options = None
  DESCRIPTOR._serialized_options = b'ZBgo.chromium.org/chromiumos/infra/proto/go/test_platform/phosphorus'
  _PREJOBREQUEST_PROVISIONABLELABELSENTRY._options = None
  _PREJOBREQUEST_PROVISIONABLELABELSENTRY._serialized_options = b'8\001'
  _PREJOBREQUEST_DESIREDPROVISIONABLELABELSENTRY._options = None
  _PREJOBREQUEST_DESIREDPROVISIONABLELABELSENTRY._serialized_options = b'8\001'
  _PREJOBREQUEST_EXISTINGPROVISIONABLELABELSENTRY._options = None
  _PREJOBREQUEST_EXISTINGPROVISIONABLELABELSENTRY._serialized_options = b'8\001'
  _PREJOBREQUEST.fields_by_name['provisionable_labels']._options = None
  _PREJOBREQUEST.fields_by_name['provisionable_labels']._serialized_options = b'\030\001'
  _PREJOBREQUEST.fields_by_name['desired_provisionable_labels']._options = None
  _PREJOBREQUEST.fields_by_name['desired_provisionable_labels']._serialized_options = b'\030\001'
  _globals['_PREJOBREQUEST']._serialized_start=169
  _globals['_PREJOBREQUEST']._serialized_end=1250
  _globals['_PREJOBREQUEST_PROVISIONABLELABELSENTRY']._serialized_start=874
  _globals['_PREJOBREQUEST_PROVISIONABLELABELSENTRY']._serialized_end=932
  _globals['_PREJOBREQUEST_DESIREDPROVISIONABLELABELSENTRY']._serialized_start=934
  _globals['_PREJOBREQUEST_DESIREDPROVISIONABLELABELSENTRY']._serialized_end=999
  _globals['_PREJOBREQUEST_EXISTINGPROVISIONABLELABELSENTRY']._serialized_start=1001
  _globals['_PREJOBREQUEST_EXISTINGPROVISIONABLELABELSENTRY']._serialized_end=1067
  _globals['_PREJOBREQUEST_PROVISIONTARGET']._serialized_start=1070
  _globals['_PREJOBREQUEST_PROVISIONTARGET']._serialized_end=1250
  _globals['_PREJOBRESPONSE']._serialized_start=1253
  _globals['_PREJOBRESPONSE']._serialized_end=1419
  _globals['_PREJOBRESPONSE_STATE']._serialized_start=1334
  _globals['_PREJOBRESPONSE_STATE']._serialized_end=1419
# @@protoc_insertion_point(module_scope)
