diff --git a/benchmarking/locust/common/ateapi_pb2.py b/benchmarking/locust/common/ateapi_pb2.py index 69d060859f..60e8164a4d 100644 --- a/benchmarking/locust/common/ateapi_pb2.py +++ b/benchmarking/locust/common/ateapi_pb2.py @@ -40,7 +40,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x61teapi.proto\x12\x06\x61teapi\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"Q\n\x11LocalSnapshotInfo\x12\x15\n\rsnapshot_name\x18\x01 \x01(\t\x12%\n\x1dnode_vms_with_local_snapshots\x18\x02 \x03(\t\"w\n\x08Selector\x12\x37\n\x0cmatch_labels\x18\x01 \x03(\x0b\x32!.ateapi.Selector.MatchLabelsEntry\x1a\x32\n\x10MatchLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb2\x01\n\x10ResourceMetadata\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0b\n\x03uid\x18\x03 \x01(\t\x12\x0f\n\x07version\x18\x04 \x01(\x03\x12/\n\x0b\x63reate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0bupdate_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xe3\x01\n\x0e\x45xternalVolume\x12\x13\n\x0bvolume_name\x18\x01 \x01(\t\x12\x19\n\x11storage_volume_id\x18\x02 \x01(\t\x12\x13\n\x0bvolume_type\x18\x03 \x01(\t\x12-\n\x06status\x18\x04 \x01(\x0e\x32\x1d.ateapi.ExternalVolume.Status\"]\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x12\n\x0eSTATUS_PENDING\x10\x01\x12\x12\n\x0eSTATUS_CREATED\x10\x02\x12\x13\n\x0fSTATUS_DELETING\x10\x03\"\xd3\x05\n\x05\x41\x63tor\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12 \n\x18\x61\x63tor_template_namespace\x18\x02 \x01(\t\x12\x1b\n\x13\x61\x63tor_template_name\x18\x03 \x01(\t\x12$\n\x06status\x18\x04 \x01(\x0e\x32\x14.ateapi.Actor.Status\x12\x33\n\x11worker_assignment\x18\x05 \x01(\x0b\x32\x18.ateapi.WorkerAssignment\x12!\n\x19in_progress_snapshot_name\x18\x06 \x01(\t\x12)\n\x0fworker_selector\x18\x07 \x01(\x0b\x32\x10.ateapi.Selector\x12*\n\x0flatest_snapshot\x18\x08 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x36\n\x13local_snapshot_info\x18\t \x01(\x0b\x32\x19.ateapi.LocalSnapshotInfo\x12\x31\n)in_progress_snapshot_source_actor_version\x18\n \x01(\x03\x12-\n\ractor_volumes\x18\x0b \x03(\x0b\x32\x16.ateapi.ExternalVolume\x12\'\n\x1fin_progress_local_snapshot_name\x18\x0c \x01(\t\"\xc6\x01\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x13\n\x0fSTATUS_RESUMING\x10\x01\x12\x12\n\x0eSTATUS_RUNNING\x10\x02\x12\x15\n\x11STATUS_SUSPENDING\x10\x03\x12\x14\n\x10STATUS_SUSPENDED\x10\x04\x12\x12\n\x0eSTATUS_PAUSING\x10\x05\x12\x11\n\rSTATUS_PAUSED\x10\x06\x12\x12\n\x0eSTATUS_CRASHED\x10\x07\x12\x13\n\x0fSTATUS_DELETING\x10\x08\"\x84\x01\n\x10WorkerAssignment\x12\x18\n\x10worker_namespace\x18\x01 \x01(\t\x12\x13\n\x0bworker_pool\x18\x02 \x01(\t\x12\x12\n\nworker_pod\x18\x03 \x01(\t\x12\x16\n\x0eworker_pod_uid\x18\x04 \x01(\t\x12\x15\n\rworker_pod_ip\x18\x05 \x01(\t\"\xc2\x02\n\rActorSnapshot\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12\'\n\x0csource_actor\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x18\n\x10source_actor_uid\x18\x03 \x01(\t\x12\x1c\n\x14source_actor_version\x18\x04 \x01(\x03\x12 \n\x18\x61\x63tor_template_namespace\x18\x05 \x01(\t\x12\x1b\n\x13\x61\x63tor_template_name\x18\x06 \x01(\t\x12\x1a\n\x12\x61\x63tor_template_uid\x18\x07 \x01(\t\x12\x33\n\rcontent_scope\x18\x08 \x01(\x0e\x32\x1c.ateapi.SnapshotContentScope\x12\x14\n\x0csnapshot_uri\x18\t \x01(\t\"\x91\x01\n\x10\x41\x63torSnapshotTag\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12#\n\x08snapshot\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12,\n\x05scope\x18\x03 \x01(\x0e\x32\x1d.ateapi.ActorSnapshotTagScope\"6\n\x08\x41tespace\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\"+\n\tObjectRef\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"h\n\x10\x41\x63torSnapshotRef\x12%\n\x08snapshot\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRefH\x00\x12 \n\x03tag\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRefH\x00\x42\x0b\n\treference\";\n\x15\x43reateAtespaceRequest\x12\"\n\x08\x61tespace\x18\x01 \x01(\x0b\x32\x10.ateapi.Atespace\"9\n\x12GetAtespaceRequest\x12#\n\x08\x61tespace\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"=\n\x14ListAtespacesRequest\x12\x11\n\tpage_size\x18\x01 \x01(\x05\x12\x12\n\npage_token\x18\x02 \x01(\t\"U\n\x15ListAtespacesResponse\x12#\n\tatespaces\x18\x01 \x03(\x0b\x32\x10.ateapi.Atespace\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"<\n\x15\x44\x65leteAtespaceRequest\x12#\n\x08\x61tespace\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"3\n\x0fGetActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"e\n\x12\x43reateActorRequest\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\x12\x31\n\x0fsource_snapshot\x18\x02 \x01(\x0b\x32\x18.ateapi.ActorSnapshotRef\"c\n\x12UpdateActorRequest\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\x12/\n\x0bupdate_mask\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.FieldMask\"7\n\x13SuspendActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"4\n\x14SuspendActorResponse\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\"5\n\x11PauseActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"2\n\x12PauseActorResponse\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\"D\n\x12ResumeActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x0c\n\x04\x62oot\x18\x02 \x01(\x08\"D\n\x13ResumeActorResponse\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\x12\x0f\n\x07resumed\x18\x02 \x01(\x08\"6\n\x12\x44\x65leteActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"E\n\x17GetActorSnapshotRequest\x12*\n\x08snapshot\x18\x01 \x01(\x0b\x32\x18.ateapi.ActorSnapshotRef\"T\n\x19ListActorSnapshotsRequest\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"_\n\x1aListActorSnapshotsResponse\x12(\n\tsnapshots\x18\x01 \x03(\x0b\x32\x15.ateapi.ActorSnapshot\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"l\n\x17TagActorSnapshotRequest\x12*\n\x08snapshot\x18\x01 \x01(\x0b\x32\x18.ateapi.ActorSnapshotRef\x12%\n\x03tag\x18\x02 \x01(\x0b\x32\x18.ateapi.ActorSnapshotTag\"w\n\x1dUpdateActorSnapshotTagRequest\x12%\n\x03tag\x18\x01 \x01(\x0b\x32\x18.ateapi.ActorSnapshotTag\x12/\n\x0bupdate_mask\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.FieldMask\"?\n\x1d\x44\x65leteActorSnapshotTagRequest\x12\x1e\n\x03tag\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\";\n\x12ListWorkersRequest\x12\x11\n\tpage_size\x18\x01 \x01(\x05\x12\x12\n\npage_token\x18\x02 \x01(\t\"O\n\x13ListWorkersResponse\x12\x1f\n\x07workers\x18\x01 \x03(\x0b\x32\x0e.ateapi.Worker\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"L\n\x11ListActorsRequest\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"L\n\x12ListActorsResponse\x12\x1d\n\x06\x61\x63tors\x18\x01 \x03(\x0b\x32\r.ateapi.Actor\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\x98\x03\n\x06Worker\x12\x18\n\x10worker_namespace\x18\x01 \x01(\t\x12\x13\n\x0bworker_pool\x18\x02 \x01(\t\x12\x12\n\nworker_pod\x18\x03 \x01(\t\x12&\n\nassignment\x18\x04 \x01(\x0b\x32\x12.ateapi.Assignment\x12\n\n\x02ip\x18\x05 \x01(\t\x12\x0f\n\x07version\x18\x06 \x01(\x03\x12\x16\n\x0eworker_pod_uid\x18\x07 \x01(\t\x12\x11\n\tnode_name\x18\x08 \x01(\t\x12\x15\n\rsandbox_class\x18\t \x01(\t\x12*\n\x06labels\x18\n \x03(\x0b\x32\x1a.ateapi.Worker.LabelsEntry\x12#\n\x05state\x18\x0b \x01(\x0e\x32\x14.ateapi.Worker.State\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"D\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x10\n\x0cSTATE_ACTIVE\x10\x01\x12\x12\n\x0eSTATE_DRAINING\x10\x02\"g\n\nAssignment\x12\x37\n\x0e\x61\x63tor_template\x18\x01 \x01(\x0b\x32\x1f.ateapi.KubeNamespacedObjectRef\x12 \n\x05\x61\x63tor\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRef\":\n\x17KubeNamespacedObjectRef\x12\x11\n\tnamespace\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x13\n\x11\x44\x65\x62ugClearRequest\"\x14\n\x12\x44\x65\x62ugClearResponse\"[\n\x0eMintJWTRequest\x12\x10\n\x08\x61udience\x18\x01 \x03(\t\x12\x10\n\x08\x61tespace\x18\x02 \x01(\t\x12\x12\n\nactor_name\x18\x03 \x01(\t\x12\x11\n\tactor_uid\x18\x04 \x01(\t\"$\n\x0fMintJWTResponse\x12\x11\n\tactor_jwt\x18\x01 \x01(\t\"o\n\x0fMintCertRequest\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x12\n\nactor_name\x18\x02 \x01(\t\x12\x11\n\tactor_uid\x18\x03 \x01(\t\x12#\n\x1b\x63\x65rtificate_signing_request\x18\x04 \x01(\x0c\".\n\x10MintCertResponse\x12\x1a\n\x12\x61\x63tor_certificates\x18\x01 \x03(\x0c*\x80\x01\n\x14SnapshotContentScope\x12&\n\"SNAPSHOT_CONTENT_SCOPE_UNSPECIFIED\x10\x00\x12\x1f\n\x1bSNAPSHOT_CONTENT_SCOPE_FULL\x10\x01\x12\x1f\n\x1bSNAPSHOT_CONTENT_SCOPE_DATA\x10\x02*f\n\x15\x41\x63torSnapshotTagScope\x12%\n!ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE\x10\x00\x12&\n\"ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED\x10\x01\x32\xb3\n\n\x07\x43ontrol\x12\x34\n\x08GetActor\x12\x17.ateapi.GetActorRequest\x1a\r.ateapi.Actor\"\x00\x12:\n\x0b\x43reateActor\x12\x1a.ateapi.CreateActorRequest\x1a\r.ateapi.Actor\"\x00\x12:\n\x0bUpdateActor\x12\x1a.ateapi.UpdateActorRequest\x1a\r.ateapi.Actor\"\x00\x12K\n\x0cSuspendActor\x12\x1b.ateapi.SuspendActorRequest\x1a\x1c.ateapi.SuspendActorResponse\"\x00\x12\x45\n\nPauseActor\x12\x19.ateapi.PauseActorRequest\x1a\x1a.ateapi.PauseActorResponse\"\x00\x12H\n\x0bResumeActor\x12\x1a.ateapi.ResumeActorRequest\x1a\x1b.ateapi.ResumeActorResponse\"\x00\x12:\n\x0b\x44\x65leteActor\x12\x1a.ateapi.DeleteActorRequest\x1a\r.ateapi.Actor\"\x00\x12L\n\x10GetActorSnapshot\x12\x1f.ateapi.GetActorSnapshotRequest\x1a\x15.ateapi.ActorSnapshot\"\x00\x12]\n\x12ListActorSnapshots\x12!.ateapi.ListActorSnapshotsRequest\x1a\".ateapi.ListActorSnapshotsResponse\"\x00\x12O\n\x10TagActorSnapshot\x12\x1f.ateapi.TagActorSnapshotRequest\x1a\x18.ateapi.ActorSnapshotTag\"\x00\x12[\n\x16UpdateActorSnapshotTag\x12%.ateapi.UpdateActorSnapshotTagRequest\x1a\x18.ateapi.ActorSnapshotTag\"\x00\x12[\n\x16\x44\x65leteActorSnapshotTag\x12%.ateapi.DeleteActorSnapshotTagRequest\x1a\x18.ateapi.ActorSnapshotTag\"\x00\x12H\n\x0bListWorkers\x12\x1a.ateapi.ListWorkersRequest\x1a\x1b.ateapi.ListWorkersResponse\"\x00\x12\x45\n\nListActors\x12\x19.ateapi.ListActorsRequest\x1a\x1a.ateapi.ListActorsResponse\"\x00\x12\x43\n\x0e\x43reateAtespace\x12\x1d.ateapi.CreateAtespaceRequest\x1a\x10.ateapi.Atespace\"\x00\x12=\n\x0bGetAtespace\x12\x1a.ateapi.GetAtespaceRequest\x1a\x10.ateapi.Atespace\"\x00\x12N\n\rListAtespaces\x12\x1c.ateapi.ListAtespacesRequest\x1a\x1d.ateapi.ListAtespacesResponse\"\x00\x12\x43\n\x0e\x44\x65leteAtespace\x12\x1d.ateapi.DeleteAtespaceRequest\x1a\x10.ateapi.Atespace\"\x00\x32N\n\x05\x44\x65\x62ug\x12\x45\n\nDebugClear\x12\x19.ateapi.DebugClearRequest\x1a\x1a.ateapi.DebugClearResponse\"\x00\x32\x8a\x01\n\rActorIdentity\x12:\n\x07MintJWT\x12\x16.ateapi.MintJWTRequest\x1a\x17.ateapi.MintJWTResponse\x12=\n\x08MintCert\x12\x17.ateapi.MintCertRequest\x1a\x18.ateapi.MintCertResponseB9Z7github.com/agent-substrate/substrate/pkg/proto/ateapipbb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x61teapi.proto\x12\x06\x61teapi\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x86\x01\n\x11LocalSnapshotInfo\x12\x15\n\rsnapshot_name\x18\x01 \x01(\t\x12%\n\x1dnode_vms_with_local_snapshots\x18\x02 \x03(\t\x12\x33\n\rcontent_scope\x18\x03 \x01(\x0e\x32\x1c.ateapi.SnapshotContentScope\"w\n\x08Selector\x12\x37\n\x0cmatch_labels\x18\x01 \x03(\x0b\x32!.ateapi.Selector.MatchLabelsEntry\x1a\x32\n\x10MatchLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb2\x01\n\x10ResourceMetadata\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0b\n\x03uid\x18\x03 \x01(\t\x12\x0f\n\x07version\x18\x04 \x01(\x03\x12/\n\x0b\x63reate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0bupdate_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xdc\x02\n\x0e\x45xternalVolume\x12\x13\n\x0bvolume_name\x18\x01 \x01(\t\x12\x19\n\x11storage_volume_id\x18\x02 \x01(\t\x12\x13\n\x0bvolume_type\x18\x03 \x01(\t\x12-\n\x06status\x18\x04 \x01(\x0e\x32\x1d.ateapi.ExternalVolume.Status\x12\x41\n\x0evolume_context\x18\x05 \x03(\x0b\x32).ateapi.ExternalVolume.VolumeContextEntry\x1a\x34\n\x12VolumeContextEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"]\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x12\n\x0eSTATUS_PENDING\x10\x01\x12\x12\n\x0eSTATUS_CREATED\x10\x02\x12\x13\n\x0fSTATUS_DELETING\x10\x03\"\x86\x06\n\x05\x41\x63tor\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12 \n\x18\x61\x63tor_template_namespace\x18\x02 \x01(\t\x12\x1b\n\x13\x61\x63tor_template_name\x18\x03 \x01(\t\x12\x31\n\x16\x61\x63tor_template_version\x18\r \x01(\x0b\x32\x11.ateapi.ObjectRef\x12$\n\x06status\x18\x04 \x01(\x0e\x32\x14.ateapi.Actor.Status\x12\x33\n\x11worker_assignment\x18\x05 \x01(\x0b\x32\x18.ateapi.WorkerAssignment\x12!\n\x19in_progress_snapshot_name\x18\x06 \x01(\t\x12)\n\x0fworker_selector\x18\x07 \x01(\x0b\x32\x10.ateapi.Selector\x12*\n\x0flatest_snapshot\x18\x08 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x36\n\x13local_snapshot_info\x18\t \x01(\x0b\x32\x19.ateapi.LocalSnapshotInfo\x12\x31\n)in_progress_snapshot_source_actor_version\x18\n \x01(\x03\x12-\n\ractor_volumes\x18\x0b \x03(\x0b\x32\x16.ateapi.ExternalVolume\x12\'\n\x1fin_progress_local_snapshot_name\x18\x0c \x01(\t\"\xc6\x01\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x13\n\x0fSTATUS_RESUMING\x10\x01\x12\x12\n\x0eSTATUS_RUNNING\x10\x02\x12\x15\n\x11STATUS_SUSPENDING\x10\x03\x12\x14\n\x10STATUS_SUSPENDED\x10\x04\x12\x12\n\x0eSTATUS_PAUSING\x10\x05\x12\x11\n\rSTATUS_PAUSED\x10\x06\x12\x12\n\x0eSTATUS_CRASHED\x10\x07\x12\x13\n\x0fSTATUS_DELETING\x10\x08\"\x84\x01\n\x10WorkerAssignment\x12\x18\n\x10worker_namespace\x18\x01 \x01(\t\x12\x13\n\x0bworker_pool\x18\x02 \x01(\t\x12\x12\n\nworker_pod\x18\x03 \x01(\t\x12\x16\n\x0eworker_pod_uid\x18\x04 \x01(\t\x12\x15\n\rworker_pod_ip\x18\x05 \x01(\t\"\xf5\x02\n\rActorSnapshot\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12\'\n\x0csource_actor\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x18\n\x10source_actor_uid\x18\x03 \x01(\t\x12\x1c\n\x14source_actor_version\x18\x04 \x01(\x03\x12 \n\x18\x61\x63tor_template_namespace\x18\x05 \x01(\t\x12\x1b\n\x13\x61\x63tor_template_name\x18\x06 \x01(\t\x12\x1a\n\x12\x61\x63tor_template_uid\x18\x07 \x01(\t\x12\x33\n\rcontent_scope\x18\x08 \x01(\x0e\x32\x1c.ateapi.SnapshotContentScope\x12\x14\n\x0csnapshot_uri\x18\t \x01(\t\x12\x31\n\x16\x61\x63tor_template_version\x18\n \x01(\x0b\x32\x11.ateapi.ObjectRef\"\x91\x01\n\x10\x41\x63torSnapshotTag\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12#\n\x08snapshot\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12,\n\x05scope\x18\x03 \x01(\x0e\x32\x1d.ateapi.ActorSnapshotTagScope\"6\n\x08\x41tespace\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\"+\n\tObjectRef\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"h\n\x10\x41\x63torSnapshotRef\x12%\n\x08snapshot\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRefH\x00\x12 \n\x03tag\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRefH\x00\x42\x0b\n\treference\"\x81\x01\n\x10\x41\x63torTemplateRef\x12\x33\n\x16\x61\x63tor_template_version\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRefH\x00\x12+\n\x0e\x61\x63tor_template\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRefH\x00\x42\x0b\n\treference\"q\n\rActorTemplate\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12\x34\n\x19\x64\x65\x66\x61ult_version_on_create\x18\x03 \x01(\x0b\x32\x11.ateapi.ObjectRef\"\xa0\x03\n\x14\x41\x63torTemplateVersion\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12)\n\x0e\x61\x63tor_template\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12)\n\x0fworker_selector\x18\x03 \x01(\x0b\x32\x10.ateapi.Selector\x12%\n\ncontainers\x18\x04 \x03(\x0b\x32\x11.ateapi.Container\x12\x1f\n\x07volumes\x18\x05 \x03(\x0b\x32\x0e.ateapi.Volume\x12\x31\n\x10snapshots_config\x18\x06 \x01(\x0b\x32\x17.ateapi.SnapshotsConfig\x12-\n\x0esandbox_config\x18\x07 \x01(\x0b\x32\x15.ateapi.SandboxConfig\x12*\n\x0fgolden_snapshot\x18\x08 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x30\n\x05phase\x18\t \x01(\x0b\x32!.ateapi.ActorTemplateVersionPhase\"\xf7\x01\n\x19\x41\x63torTemplateVersionPhase\x12\x36\n\x05phase\x18\x01 \x01(\x0e\x32\'.ateapi.ActorTemplateVersionPhase.Phase\x12\x0f\n\x07message\x18\x02 \x01(\t\"\x90\x01\n\x05Phase\x12\x15\n\x11PHASE_UNSPECIFIED\x10\x00\x12\x11\n\rPHASE_INITIAL\x10\x01\x12\x1d\n\x19PHASE_RESUME_GOLDEN_ACTOR\x10\x02\x12\x1b\n\x17PHASE_WAIT_GOLDEN_ACTOR\x10\x03\x12\x0f\n\x0bPHASE_READY\x10\x04\x12\x10\n\x0cPHASE_FAILED\x10\x05\"\x95\x01\n\rSandboxConfig\x12+\n\rsandbox_class\x18\x01 \x01(\x0e\x32\x14.ateapi.SandboxClass\x12\x13\n\x0b\x63onfig_name\x18\x02 \x01(\t\x12-\n\x0esandbox_assets\x18\x03 \x01(\x0b\x32\x15.ateapi.SandboxAssets\x12\x13\n\x0bpause_image\x18\x04 \x01(\t\"\xb7\x01\n\x0fSnapshotsConfig\x12.\n\x08on_pause\x18\x01 \x01(\x0e\x32\x1c.ateapi.SnapshotContentScope\x12/\n\ton_commit\x18\x02 \x01(\x0e\x32\x1c.ateapi.SnapshotContentScope\x12)\n\ton_resume\x18\x03 \x01(\x0b\x32\x16.ateapi.OnResumeConfig\x12\x18\n\x10storage_location\x18\x04 \x01(\t\"9\n\x0eOnResumeConfig\x12\'\n\tfrom_data\x18\x01 \x01(\x0e\x32\x14.ateapi.ResumeSource\"\xb9\x01\n\tContainer\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05image\x18\x02 \x01(\t\x12\x0f\n\x07\x63ommand\x18\x03 \x03(\t\x12\x0c\n\x04\x61rgs\x18\x04 \x03(\t\x12\x1b\n\x03\x65nv\x18\x05 \x03(\x0b\x32\x0e.ateapi.EnvVar\x12\'\n\x06readyz\x18\x06 \x01(\x0b\x32\x17.ateapi.ContainerReadyz\x12*\n\rvolume_mounts\x18\x07 \x03(\x0b\x32\x13.ateapi.VolumeMount\"1\n\x06\x45nvVar\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x05value\x18\x02 \x01(\tH\x00\x42\x08\n\x06source\"S\n\x0f\x43ontainerReadyz\x12\'\n\x08http_get\x18\x01 \x01(\x0b\x32\x15.ateapi.HTTPGetAction\x12\x17\n\x0ftimeout_seconds\x18\x02 \x01(\x05\"+\n\rHTTPGetAction\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\"\x9b\x01\n\x06Volume\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x35\n\x0b\x64urable_dir\x18\x02 \x01(\x0b\x32\x1e.ateapi.DurableDirVolumeSourceH\x00\x12\x42\n\x18\x65xternal_volume_template\x18\x03 \x01(\x0b\x32\x1e.ateapi.ExternalVolumeTemplateH\x00\x42\x08\n\x06source\"\x18\n\x16\x44urableDirVolumeSource\"F\n\x16\x45xternalVolumeTemplate\x12\x10\n\x08\x63\x61pacity\x18\x01 \x01(\t\x12\x1a\n\x12storage_class_name\x18\x02 \x01(\t\"/\n\x0bVolumeMount\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x12\n\nmount_path\x18\x02 \x01(\t\"\xb2\x01\n\rSandboxAssets\x12+\n\rsandbox_class\x18\x01 \x01(\x0e\x32\x14.ateapi.SandboxClass\x12\x31\n\x06\x61ssets\x18\x02 \x03(\x0b\x32!.ateapi.SandboxAssets.AssetsEntry\x1a\x41\n\x0b\x41ssetsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.ateapi.ArchAssets:\x02\x38\x01\"{\n\nArchAssets\x12,\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x1d.ateapi.ArchAssets.FilesEntry\x1a?\n\nFilesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.ateapi.AssetFile:\x02\x38\x01\"(\n\tAssetFile\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x0e\n\x06sha256\x18\x02 \x01(\t\";\n\x15\x43reateAtespaceRequest\x12\"\n\x08\x61tespace\x18\x01 \x01(\x0b\x32\x10.ateapi.Atespace\"9\n\x12GetAtespaceRequest\x12#\n\x08\x61tespace\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"=\n\x14ListAtespacesRequest\x12\x11\n\tpage_size\x18\x01 \x01(\x05\x12\x12\n\npage_token\x18\x02 \x01(\t\"U\n\x15ListAtespacesResponse\x12#\n\tatespaces\x18\x01 \x03(\x0b\x32\x10.ateapi.Atespace\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"<\n\x15\x44\x65leteAtespaceRequest\x12#\n\x08\x61tespace\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"K\n\x1a\x43reateActorTemplateRequest\x12-\n\x0e\x61\x63tor_template\x18\x01 \x01(\x0b\x32\x15.ateapi.ActorTemplate\"D\n\x17GetActorTemplateRequest\x12)\n\x0e\x61\x63tor_template\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"|\n\x1aUpdateActorTemplateRequest\x12-\n\x0e\x61\x63tor_template\x18\x01 \x01(\x0b\x32\x15.ateapi.ActorTemplate\x12/\n\x0bupdate_mask\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.FieldMask\"T\n\x19ListActorTemplatesRequest\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"e\n\x1aListActorTemplatesResponse\x12.\n\x0f\x61\x63tor_templates\x18\x01 \x03(\x0b\x32\x15.ateapi.ActorTemplate\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"G\n\x1a\x44\x65leteActorTemplateRequest\x12)\n\x0e\x61\x63tor_template\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"a\n!CreateActorTemplateVersionRequest\x12<\n\x16\x61\x63tor_template_version\x18\x01 \x01(\x0b\x32\x1c.ateapi.ActorTemplateVersion\"S\n\x1eGetActorTemplateVersionRequest\x12\x31\n\x16\x61\x63tor_template_version\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"\x86\x01\n ListActorTemplateVersionsRequest\x12)\n\x0e\x61\x63tor_template\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x10\n\x08\x61tespace\x18\x02 \x01(\t\x12\x11\n\tpage_size\x18\x03 \x01(\x05\x12\x12\n\npage_token\x18\x04 \x01(\t\"{\n!ListActorTemplateVersionsResponse\x12=\n\x17\x61\x63tor_template_versions\x18\x01 \x03(\x0b\x32\x1c.ateapi.ActorTemplateVersion\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"V\n!DeleteActorTemplateVersionRequest\x12\x31\n\x16\x61\x63tor_template_version\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"3\n\x0fGetActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"e\n\x12\x43reateActorRequest\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\x12\x31\n\x0fsource_snapshot\x18\x02 \x01(\x0b\x32\x18.ateapi.ActorSnapshotRef\"c\n\x12UpdateActorRequest\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\x12/\n\x0bupdate_mask\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.FieldMask\"7\n\x13SuspendActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"4\n\x14SuspendActorResponse\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\"5\n\x11PauseActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"2\n\x12PauseActorResponse\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\"D\n\x12ResumeActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x0c\n\x04\x62oot\x18\x02 \x01(\x08\"D\n\x13ResumeActorResponse\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\x12\x0f\n\x07resumed\x18\x02 \x01(\x08\"6\n\x12\x44\x65leteActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"E\n\x17GetActorSnapshotRequest\x12*\n\x08snapshot\x18\x01 \x01(\x0b\x32\x18.ateapi.ActorSnapshotRef\"T\n\x19ListActorSnapshotsRequest\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"_\n\x1aListActorSnapshotsResponse\x12(\n\tsnapshots\x18\x01 \x03(\x0b\x32\x15.ateapi.ActorSnapshot\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"l\n\x17TagActorSnapshotRequest\x12*\n\x08snapshot\x18\x01 \x01(\x0b\x32\x18.ateapi.ActorSnapshotRef\x12%\n\x03tag\x18\x02 \x01(\x0b\x32\x18.ateapi.ActorSnapshotTag\"w\n\x1dUpdateActorSnapshotTagRequest\x12%\n\x03tag\x18\x01 \x01(\x0b\x32\x18.ateapi.ActorSnapshotTag\x12/\n\x0bupdate_mask\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.FieldMask\"?\n\x1d\x44\x65leteActorSnapshotTagRequest\x12\x1e\n\x03tag\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\";\n\x12ListWorkersRequest\x12\x11\n\tpage_size\x18\x01 \x01(\x05\x12\x12\n\npage_token\x18\x02 \x01(\t\"O\n\x13ListWorkersResponse\x12\x1f\n\x07workers\x18\x01 \x03(\x0b\x32\x0e.ateapi.Worker\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"L\n\x11ListActorsRequest\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"L\n\x12ListActorsResponse\x12\x1d\n\x06\x61\x63tors\x18\x01 \x03(\x0b\x32\r.ateapi.Actor\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\x98\x03\n\x06Worker\x12\x18\n\x10worker_namespace\x18\x01 \x01(\t\x12\x13\n\x0bworker_pool\x18\x02 \x01(\t\x12\x12\n\nworker_pod\x18\x03 \x01(\t\x12&\n\nassignment\x18\x04 \x01(\x0b\x32\x12.ateapi.Assignment\x12\n\n\x02ip\x18\x05 \x01(\t\x12\x0f\n\x07version\x18\x06 \x01(\x03\x12\x16\n\x0eworker_pod_uid\x18\x07 \x01(\t\x12\x11\n\tnode_name\x18\x08 \x01(\t\x12\x15\n\rsandbox_class\x18\t \x01(\t\x12*\n\x06labels\x18\n \x03(\x0b\x32\x1a.ateapi.Worker.LabelsEntry\x12#\n\x05state\x18\x0b \x01(\x0e\x32\x14.ateapi.Worker.State\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"D\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x10\n\x0cSTATE_ACTIVE\x10\x01\x12\x12\n\x0eSTATE_DRAINING\x10\x02\"z\n\nAssignment\x12\x37\n\x0e\x61\x63tor_template\x18\x01 \x01(\x0b\x32\x1f.ateapi.KubeNamespacedObjectRef\x12 \n\x05\x61\x63tor\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x11\n\tactor_uid\x18\x03 \x01(\t\":\n\x17KubeNamespacedObjectRef\x12\x11\n\tnamespace\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x13\n\x11\x44\x65\x62ugClearRequest\"\x14\n\x12\x44\x65\x62ugClearResponse\"[\n\x0eMintJWTRequest\x12\x10\n\x08\x61udience\x18\x01 \x03(\t\x12\x10\n\x08\x61tespace\x18\x02 \x01(\t\x12\x12\n\nactor_name\x18\x03 \x01(\t\x12\x11\n\tactor_uid\x18\x04 \x01(\t\"$\n\x0fMintJWTResponse\x12\x11\n\tactor_jwt\x18\x01 \x01(\t\"\xca\x01\n\x0fMintCertRequest\x12\x18\n\x10worker_namespace\x18\x01 \x01(\t\x12\x12\n\nworker_pod\x18\x02 \x01(\t\x12\x16\n\x0eworker_pod_uid\x18\x03 \x01(\t\x12#\n\x1b\x63\x65rtificate_signing_request\x18\x04 \x01(\x0c\x12\x1a\n\x12\x65xpected_actor_uid\x18\x05 \x01(\t\x12\x30\n\x07purpose\x18\x06 \x01(\x0e\x32\x1f.ateapi.ActorCertificatePurpose\".\n\x10MintCertResponse\x12\x1a\n\x12\x61\x63tor_certificates\x18\x01 \x03(\x0c*\x80\x01\n\x14SnapshotContentScope\x12&\n\"SNAPSHOT_CONTENT_SCOPE_UNSPECIFIED\x10\x00\x12\x1f\n\x1bSNAPSHOT_CONTENT_SCOPE_FULL\x10\x01\x12\x1f\n\x1bSNAPSHOT_CONTENT_SCOPE_DATA\x10\x02*\x90\x01\n\x15\x41\x63torSnapshotTagScope\x12(\n$ACTOR_SNAPSHOT_TAG_SCOPE_UNSPECIFIED\x10\x00\x12%\n!ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE\x10\x01\x12&\n\"ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED\x10\x02*b\n\x0cSandboxClass\x12\x1d\n\x19SANDBOX_CLASS_UNSPECIFIED\x10\x00\x12\x18\n\x14SANDBOX_CLASS_GVISOR\x10\x01\x12\x19\n\x15SANDBOX_CLASS_MICROVM\x10\x02*d\n\x0cResumeSource\x12\x1d\n\x19RESUME_SOURCE_UNSPECIFIED\x10\x00\x12\x1b\n\x17RESUME_SOURCE_COLD_BOOT\x10\x01\x12\x18\n\x14RESUME_SOURCE_GOLDEN\x10\x02*k\n\x17\x41\x63torCertificatePurpose\x12)\n%ACTOR_CERTIFICATE_PURPOSE_UNSPECIFIED\x10\x00\x12%\n!ACTOR_CERTIFICATE_PURPOSE_ATUNNEL\x10\x01\x32\x85\x11\n\x07\x43ontrol\x12\x34\n\x08GetActor\x12\x17.ateapi.GetActorRequest\x1a\r.ateapi.Actor\"\x00\x12:\n\x0b\x43reateActor\x12\x1a.ateapi.CreateActorRequest\x1a\r.ateapi.Actor\"\x00\x12:\n\x0bUpdateActor\x12\x1a.ateapi.UpdateActorRequest\x1a\r.ateapi.Actor\"\x00\x12K\n\x0cSuspendActor\x12\x1b.ateapi.SuspendActorRequest\x1a\x1c.ateapi.SuspendActorResponse\"\x00\x12\x45\n\nPauseActor\x12\x19.ateapi.PauseActorRequest\x1a\x1a.ateapi.PauseActorResponse\"\x00\x12H\n\x0bResumeActor\x12\x1a.ateapi.ResumeActorRequest\x1a\x1b.ateapi.ResumeActorResponse\"\x00\x12:\n\x0b\x44\x65leteActor\x12\x1a.ateapi.DeleteActorRequest\x1a\r.ateapi.Actor\"\x00\x12L\n\x10GetActorSnapshot\x12\x1f.ateapi.GetActorSnapshotRequest\x1a\x15.ateapi.ActorSnapshot\"\x00\x12]\n\x12ListActorSnapshots\x12!.ateapi.ListActorSnapshotsRequest\x1a\".ateapi.ListActorSnapshotsResponse\"\x00\x12O\n\x10TagActorSnapshot\x12\x1f.ateapi.TagActorSnapshotRequest\x1a\x18.ateapi.ActorSnapshotTag\"\x00\x12[\n\x16UpdateActorSnapshotTag\x12%.ateapi.UpdateActorSnapshotTagRequest\x1a\x18.ateapi.ActorSnapshotTag\"\x00\x12[\n\x16\x44\x65leteActorSnapshotTag\x12%.ateapi.DeleteActorSnapshotTagRequest\x1a\x18.ateapi.ActorSnapshotTag\"\x00\x12H\n\x0bListWorkers\x12\x1a.ateapi.ListWorkersRequest\x1a\x1b.ateapi.ListWorkersResponse\"\x00\x12\x45\n\nListActors\x12\x19.ateapi.ListActorsRequest\x1a\x1a.ateapi.ListActorsResponse\"\x00\x12\x43\n\x0e\x43reateAtespace\x12\x1d.ateapi.CreateAtespaceRequest\x1a\x10.ateapi.Atespace\"\x00\x12=\n\x0bGetAtespace\x12\x1a.ateapi.GetAtespaceRequest\x1a\x10.ateapi.Atespace\"\x00\x12N\n\rListAtespaces\x12\x1c.ateapi.ListAtespacesRequest\x1a\x1d.ateapi.ListAtespacesResponse\"\x00\x12\x43\n\x0e\x44\x65leteAtespace\x12\x1d.ateapi.DeleteAtespaceRequest\x1a\x10.ateapi.Atespace\"\x00\x12R\n\x13\x43reateActorTemplate\x12\".ateapi.CreateActorTemplateRequest\x1a\x15.ateapi.ActorTemplate\"\x00\x12L\n\x10GetActorTemplate\x12\x1f.ateapi.GetActorTemplateRequest\x1a\x15.ateapi.ActorTemplate\"\x00\x12R\n\x13UpdateActorTemplate\x12\".ateapi.UpdateActorTemplateRequest\x1a\x15.ateapi.ActorTemplate\"\x00\x12]\n\x12ListActorTemplates\x12!.ateapi.ListActorTemplatesRequest\x1a\".ateapi.ListActorTemplatesResponse\"\x00\x12R\n\x13\x44\x65leteActorTemplate\x12\".ateapi.DeleteActorTemplateRequest\x1a\x15.ateapi.ActorTemplate\"\x00\x12g\n\x1a\x43reateActorTemplateVersion\x12).ateapi.CreateActorTemplateVersionRequest\x1a\x1c.ateapi.ActorTemplateVersion\"\x00\x12\x61\n\x17GetActorTemplateVersion\x12&.ateapi.GetActorTemplateVersionRequest\x1a\x1c.ateapi.ActorTemplateVersion\"\x00\x12r\n\x19ListActorTemplateVersions\x12(.ateapi.ListActorTemplateVersionsRequest\x1a).ateapi.ListActorTemplateVersionsResponse\"\x00\x12g\n\x1a\x44\x65leteActorTemplateVersion\x12).ateapi.DeleteActorTemplateVersionRequest\x1a\x1c.ateapi.ActorTemplateVersion\"\x00\x32N\n\x05\x44\x65\x62ug\x12\x45\n\nDebugClear\x12\x19.ateapi.DebugClearRequest\x1a\x1a.ateapi.DebugClearResponse\"\x00\x32\x8a\x01\n\rActorIdentity\x12:\n\x07MintJWT\x12\x16.ateapi.MintJWTRequest\x1a\x17.ateapi.MintJWTResponse\x12=\n\x08MintCert\x12\x17.ateapi.MintCertRequest\x1a\x18.ateapi.MintCertResponseB9Z7github.com/agent-substrate/substrate/pkg/proto/ateapipbb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -50,116 +50,194 @@ _globals['DESCRIPTOR']._serialized_options = b'Z7github.com/agent-substrate/substrate/pkg/proto/ateapipb' _globals['_SELECTOR_MATCHLABELSENTRY']._loaded_options = None _globals['_SELECTOR_MATCHLABELSENTRY']._serialized_options = b'8\001' + _globals['_EXTERNALVOLUME_VOLUMECONTEXTENTRY']._loaded_options = None + _globals['_EXTERNALVOLUME_VOLUMECONTEXTENTRY']._serialized_options = b'8\001' + _globals['_SANDBOXASSETS_ASSETSENTRY']._loaded_options = None + _globals['_SANDBOXASSETS_ASSETSENTRY']._serialized_options = b'8\001' + _globals['_ARCHASSETS_FILESENTRY']._loaded_options = None + _globals['_ARCHASSETS_FILESENTRY']._serialized_options = b'8\001' _globals['_WORKER_LABELSENTRY']._loaded_options = None _globals['_WORKER_LABELSENTRY']._serialized_options = b'8\001' - _globals['_SNAPSHOTCONTENTSCOPE']._serialized_start=5010 - _globals['_SNAPSHOTCONTENTSCOPE']._serialized_end=5138 - _globals['_ACTORSNAPSHOTTAGSCOPE']._serialized_start=5140 - _globals['_ACTORSNAPSHOTTAGSCOPE']._serialized_end=5242 - _globals['_LOCALSNAPSHOTINFO']._serialized_start=91 - _globals['_LOCALSNAPSHOTINFO']._serialized_end=172 - _globals['_SELECTOR']._serialized_start=174 - _globals['_SELECTOR']._serialized_end=293 - _globals['_SELECTOR_MATCHLABELSENTRY']._serialized_start=243 - _globals['_SELECTOR_MATCHLABELSENTRY']._serialized_end=293 - _globals['_RESOURCEMETADATA']._serialized_start=296 - _globals['_RESOURCEMETADATA']._serialized_end=474 - _globals['_EXTERNALVOLUME']._serialized_start=477 - _globals['_EXTERNALVOLUME']._serialized_end=704 - _globals['_EXTERNALVOLUME_STATUS']._serialized_start=611 - _globals['_EXTERNALVOLUME_STATUS']._serialized_end=704 - _globals['_ACTOR']._serialized_start=707 - _globals['_ACTOR']._serialized_end=1430 - _globals['_ACTOR_STATUS']._serialized_start=1232 - _globals['_ACTOR_STATUS']._serialized_end=1430 - _globals['_WORKERASSIGNMENT']._serialized_start=1433 - _globals['_WORKERASSIGNMENT']._serialized_end=1565 - _globals['_ACTORSNAPSHOT']._serialized_start=1568 - _globals['_ACTORSNAPSHOT']._serialized_end=1890 - _globals['_ACTORSNAPSHOTTAG']._serialized_start=1893 - _globals['_ACTORSNAPSHOTTAG']._serialized_end=2038 - _globals['_ATESPACE']._serialized_start=2040 - _globals['_ATESPACE']._serialized_end=2094 - _globals['_OBJECTREF']._serialized_start=2096 - _globals['_OBJECTREF']._serialized_end=2139 - _globals['_ACTORSNAPSHOTREF']._serialized_start=2141 - _globals['_ACTORSNAPSHOTREF']._serialized_end=2245 - _globals['_CREATEATESPACEREQUEST']._serialized_start=2247 - _globals['_CREATEATESPACEREQUEST']._serialized_end=2306 - _globals['_GETATESPACEREQUEST']._serialized_start=2308 - _globals['_GETATESPACEREQUEST']._serialized_end=2365 - _globals['_LISTATESPACESREQUEST']._serialized_start=2367 - _globals['_LISTATESPACESREQUEST']._serialized_end=2428 - _globals['_LISTATESPACESRESPONSE']._serialized_start=2430 - _globals['_LISTATESPACESRESPONSE']._serialized_end=2515 - _globals['_DELETEATESPACEREQUEST']._serialized_start=2517 - _globals['_DELETEATESPACEREQUEST']._serialized_end=2577 - _globals['_GETACTORREQUEST']._serialized_start=2579 - _globals['_GETACTORREQUEST']._serialized_end=2630 - _globals['_CREATEACTORREQUEST']._serialized_start=2632 - _globals['_CREATEACTORREQUEST']._serialized_end=2733 - _globals['_UPDATEACTORREQUEST']._serialized_start=2735 - _globals['_UPDATEACTORREQUEST']._serialized_end=2834 - _globals['_SUSPENDACTORREQUEST']._serialized_start=2836 - _globals['_SUSPENDACTORREQUEST']._serialized_end=2891 - _globals['_SUSPENDACTORRESPONSE']._serialized_start=2893 - _globals['_SUSPENDACTORRESPONSE']._serialized_end=2945 - _globals['_PAUSEACTORREQUEST']._serialized_start=2947 - _globals['_PAUSEACTORREQUEST']._serialized_end=3000 - _globals['_PAUSEACTORRESPONSE']._serialized_start=3002 - _globals['_PAUSEACTORRESPONSE']._serialized_end=3052 - _globals['_RESUMEACTORREQUEST']._serialized_start=3054 - _globals['_RESUMEACTORREQUEST']._serialized_end=3122 - _globals['_RESUMEACTORRESPONSE']._serialized_start=3124 - _globals['_RESUMEACTORRESPONSE']._serialized_end=3192 - _globals['_DELETEACTORREQUEST']._serialized_start=3194 - _globals['_DELETEACTORREQUEST']._serialized_end=3248 - _globals['_GETACTORSNAPSHOTREQUEST']._serialized_start=3250 - _globals['_GETACTORSNAPSHOTREQUEST']._serialized_end=3319 - _globals['_LISTACTORSNAPSHOTSREQUEST']._serialized_start=3321 - _globals['_LISTACTORSNAPSHOTSREQUEST']._serialized_end=3405 - _globals['_LISTACTORSNAPSHOTSRESPONSE']._serialized_start=3407 - _globals['_LISTACTORSNAPSHOTSRESPONSE']._serialized_end=3502 - _globals['_TAGACTORSNAPSHOTREQUEST']._serialized_start=3504 - _globals['_TAGACTORSNAPSHOTREQUEST']._serialized_end=3612 - _globals['_UPDATEACTORSNAPSHOTTAGREQUEST']._serialized_start=3614 - _globals['_UPDATEACTORSNAPSHOTTAGREQUEST']._serialized_end=3733 - _globals['_DELETEACTORSNAPSHOTTAGREQUEST']._serialized_start=3735 - _globals['_DELETEACTORSNAPSHOTTAGREQUEST']._serialized_end=3798 - _globals['_LISTWORKERSREQUEST']._serialized_start=3800 - _globals['_LISTWORKERSREQUEST']._serialized_end=3859 - _globals['_LISTWORKERSRESPONSE']._serialized_start=3861 - _globals['_LISTWORKERSRESPONSE']._serialized_end=3940 - _globals['_LISTACTORSREQUEST']._serialized_start=3942 - _globals['_LISTACTORSREQUEST']._serialized_end=4018 - _globals['_LISTACTORSRESPONSE']._serialized_start=4020 - _globals['_LISTACTORSRESPONSE']._serialized_end=4096 - _globals['_WORKER']._serialized_start=4099 - _globals['_WORKER']._serialized_end=4507 - _globals['_WORKER_LABELSENTRY']._serialized_start=4392 - _globals['_WORKER_LABELSENTRY']._serialized_end=4437 - _globals['_WORKER_STATE']._serialized_start=4439 - _globals['_WORKER_STATE']._serialized_end=4507 - _globals['_ASSIGNMENT']._serialized_start=4509 - _globals['_ASSIGNMENT']._serialized_end=4612 - _globals['_KUBENAMESPACEDOBJECTREF']._serialized_start=4614 - _globals['_KUBENAMESPACEDOBJECTREF']._serialized_end=4672 - _globals['_DEBUGCLEARREQUEST']._serialized_start=4674 - _globals['_DEBUGCLEARREQUEST']._serialized_end=4693 - _globals['_DEBUGCLEARRESPONSE']._serialized_start=4695 - _globals['_DEBUGCLEARRESPONSE']._serialized_end=4715 - _globals['_MINTJWTREQUEST']._serialized_start=4717 - _globals['_MINTJWTREQUEST']._serialized_end=4808 - _globals['_MINTJWTRESPONSE']._serialized_start=4810 - _globals['_MINTJWTRESPONSE']._serialized_end=4846 - _globals['_MINTCERTREQUEST']._serialized_start=4848 - _globals['_MINTCERTREQUEST']._serialized_end=4959 - _globals['_MINTCERTRESPONSE']._serialized_start=4961 - _globals['_MINTCERTRESPONSE']._serialized_end=5007 - _globals['_CONTROL']._serialized_start=5245 - _globals['_CONTROL']._serialized_end=6576 - _globals['_DEBUG']._serialized_start=6578 - _globals['_DEBUG']._serialized_end=6656 - _globals['_ACTORIDENTITY']._serialized_start=6659 - _globals['_ACTORIDENTITY']._serialized_end=6797 + _globals['_SNAPSHOTCONTENTSCOPE']._serialized_start=8802 + _globals['_SNAPSHOTCONTENTSCOPE']._serialized_end=8930 + _globals['_ACTORSNAPSHOTTAGSCOPE']._serialized_start=8933 + _globals['_ACTORSNAPSHOTTAGSCOPE']._serialized_end=9077 + _globals['_SANDBOXCLASS']._serialized_start=9079 + _globals['_SANDBOXCLASS']._serialized_end=9177 + _globals['_RESUMESOURCE']._serialized_start=9179 + _globals['_RESUMESOURCE']._serialized_end=9279 + _globals['_ACTORCERTIFICATEPURPOSE']._serialized_start=9281 + _globals['_ACTORCERTIFICATEPURPOSE']._serialized_end=9388 + _globals['_LOCALSNAPSHOTINFO']._serialized_start=92 + _globals['_LOCALSNAPSHOTINFO']._serialized_end=226 + _globals['_SELECTOR']._serialized_start=228 + _globals['_SELECTOR']._serialized_end=347 + _globals['_SELECTOR_MATCHLABELSENTRY']._serialized_start=297 + _globals['_SELECTOR_MATCHLABELSENTRY']._serialized_end=347 + _globals['_RESOURCEMETADATA']._serialized_start=350 + _globals['_RESOURCEMETADATA']._serialized_end=528 + _globals['_EXTERNALVOLUME']._serialized_start=531 + _globals['_EXTERNALVOLUME']._serialized_end=879 + _globals['_EXTERNALVOLUME_VOLUMECONTEXTENTRY']._serialized_start=732 + _globals['_EXTERNALVOLUME_VOLUMECONTEXTENTRY']._serialized_end=784 + _globals['_EXTERNALVOLUME_STATUS']._serialized_start=786 + _globals['_EXTERNALVOLUME_STATUS']._serialized_end=879 + _globals['_ACTOR']._serialized_start=882 + _globals['_ACTOR']._serialized_end=1656 + _globals['_ACTOR_STATUS']._serialized_start=1458 + _globals['_ACTOR_STATUS']._serialized_end=1656 + _globals['_WORKERASSIGNMENT']._serialized_start=1659 + _globals['_WORKERASSIGNMENT']._serialized_end=1791 + _globals['_ACTORSNAPSHOT']._serialized_start=1794 + _globals['_ACTORSNAPSHOT']._serialized_end=2167 + _globals['_ACTORSNAPSHOTTAG']._serialized_start=2170 + _globals['_ACTORSNAPSHOTTAG']._serialized_end=2315 + _globals['_ATESPACE']._serialized_start=2317 + _globals['_ATESPACE']._serialized_end=2371 + _globals['_OBJECTREF']._serialized_start=2373 + _globals['_OBJECTREF']._serialized_end=2416 + _globals['_ACTORSNAPSHOTREF']._serialized_start=2418 + _globals['_ACTORSNAPSHOTREF']._serialized_end=2522 + _globals['_ACTORTEMPLATEREF']._serialized_start=2525 + _globals['_ACTORTEMPLATEREF']._serialized_end=2654 + _globals['_ACTORTEMPLATE']._serialized_start=2656 + _globals['_ACTORTEMPLATE']._serialized_end=2769 + _globals['_ACTORTEMPLATEVERSION']._serialized_start=2772 + _globals['_ACTORTEMPLATEVERSION']._serialized_end=3188 + _globals['_ACTORTEMPLATEVERSIONPHASE']._serialized_start=3191 + _globals['_ACTORTEMPLATEVERSIONPHASE']._serialized_end=3438 + _globals['_ACTORTEMPLATEVERSIONPHASE_PHASE']._serialized_start=3294 + _globals['_ACTORTEMPLATEVERSIONPHASE_PHASE']._serialized_end=3438 + _globals['_SANDBOXCONFIG']._serialized_start=3441 + _globals['_SANDBOXCONFIG']._serialized_end=3590 + _globals['_SNAPSHOTSCONFIG']._serialized_start=3593 + _globals['_SNAPSHOTSCONFIG']._serialized_end=3776 + _globals['_ONRESUMECONFIG']._serialized_start=3778 + _globals['_ONRESUMECONFIG']._serialized_end=3835 + _globals['_CONTAINER']._serialized_start=3838 + _globals['_CONTAINER']._serialized_end=4023 + _globals['_ENVVAR']._serialized_start=4025 + _globals['_ENVVAR']._serialized_end=4074 + _globals['_CONTAINERREADYZ']._serialized_start=4076 + _globals['_CONTAINERREADYZ']._serialized_end=4159 + _globals['_HTTPGETACTION']._serialized_start=4161 + _globals['_HTTPGETACTION']._serialized_end=4204 + _globals['_VOLUME']._serialized_start=4207 + _globals['_VOLUME']._serialized_end=4362 + _globals['_DURABLEDIRVOLUMESOURCE']._serialized_start=4364 + _globals['_DURABLEDIRVOLUMESOURCE']._serialized_end=4388 + _globals['_EXTERNALVOLUMETEMPLATE']._serialized_start=4390 + _globals['_EXTERNALVOLUMETEMPLATE']._serialized_end=4460 + _globals['_VOLUMEMOUNT']._serialized_start=4462 + _globals['_VOLUMEMOUNT']._serialized_end=4509 + _globals['_SANDBOXASSETS']._serialized_start=4512 + _globals['_SANDBOXASSETS']._serialized_end=4690 + _globals['_SANDBOXASSETS_ASSETSENTRY']._serialized_start=4625 + _globals['_SANDBOXASSETS_ASSETSENTRY']._serialized_end=4690 + _globals['_ARCHASSETS']._serialized_start=4692 + _globals['_ARCHASSETS']._serialized_end=4815 + _globals['_ARCHASSETS_FILESENTRY']._serialized_start=4752 + _globals['_ARCHASSETS_FILESENTRY']._serialized_end=4815 + _globals['_ASSETFILE']._serialized_start=4817 + _globals['_ASSETFILE']._serialized_end=4857 + _globals['_CREATEATESPACEREQUEST']._serialized_start=4859 + _globals['_CREATEATESPACEREQUEST']._serialized_end=4918 + _globals['_GETATESPACEREQUEST']._serialized_start=4920 + _globals['_GETATESPACEREQUEST']._serialized_end=4977 + _globals['_LISTATESPACESREQUEST']._serialized_start=4979 + _globals['_LISTATESPACESREQUEST']._serialized_end=5040 + _globals['_LISTATESPACESRESPONSE']._serialized_start=5042 + _globals['_LISTATESPACESRESPONSE']._serialized_end=5127 + _globals['_DELETEATESPACEREQUEST']._serialized_start=5129 + _globals['_DELETEATESPACEREQUEST']._serialized_end=5189 + _globals['_CREATEACTORTEMPLATEREQUEST']._serialized_start=5191 + _globals['_CREATEACTORTEMPLATEREQUEST']._serialized_end=5266 + _globals['_GETACTORTEMPLATEREQUEST']._serialized_start=5268 + _globals['_GETACTORTEMPLATEREQUEST']._serialized_end=5336 + _globals['_UPDATEACTORTEMPLATEREQUEST']._serialized_start=5338 + _globals['_UPDATEACTORTEMPLATEREQUEST']._serialized_end=5462 + _globals['_LISTACTORTEMPLATESREQUEST']._serialized_start=5464 + _globals['_LISTACTORTEMPLATESREQUEST']._serialized_end=5548 + _globals['_LISTACTORTEMPLATESRESPONSE']._serialized_start=5550 + _globals['_LISTACTORTEMPLATESRESPONSE']._serialized_end=5651 + _globals['_DELETEACTORTEMPLATEREQUEST']._serialized_start=5653 + _globals['_DELETEACTORTEMPLATEREQUEST']._serialized_end=5724 + _globals['_CREATEACTORTEMPLATEVERSIONREQUEST']._serialized_start=5726 + _globals['_CREATEACTORTEMPLATEVERSIONREQUEST']._serialized_end=5823 + _globals['_GETACTORTEMPLATEVERSIONREQUEST']._serialized_start=5825 + _globals['_GETACTORTEMPLATEVERSIONREQUEST']._serialized_end=5908 + _globals['_LISTACTORTEMPLATEVERSIONSREQUEST']._serialized_start=5911 + _globals['_LISTACTORTEMPLATEVERSIONSREQUEST']._serialized_end=6045 + _globals['_LISTACTORTEMPLATEVERSIONSRESPONSE']._serialized_start=6047 + _globals['_LISTACTORTEMPLATEVERSIONSRESPONSE']._serialized_end=6170 + _globals['_DELETEACTORTEMPLATEVERSIONREQUEST']._serialized_start=6172 + _globals['_DELETEACTORTEMPLATEVERSIONREQUEST']._serialized_end=6258 + _globals['_GETACTORREQUEST']._serialized_start=6260 + _globals['_GETACTORREQUEST']._serialized_end=6311 + _globals['_CREATEACTORREQUEST']._serialized_start=6313 + _globals['_CREATEACTORREQUEST']._serialized_end=6414 + _globals['_UPDATEACTORREQUEST']._serialized_start=6416 + _globals['_UPDATEACTORREQUEST']._serialized_end=6515 + _globals['_SUSPENDACTORREQUEST']._serialized_start=6517 + _globals['_SUSPENDACTORREQUEST']._serialized_end=6572 + _globals['_SUSPENDACTORRESPONSE']._serialized_start=6574 + _globals['_SUSPENDACTORRESPONSE']._serialized_end=6626 + _globals['_PAUSEACTORREQUEST']._serialized_start=6628 + _globals['_PAUSEACTORREQUEST']._serialized_end=6681 + _globals['_PAUSEACTORRESPONSE']._serialized_start=6683 + _globals['_PAUSEACTORRESPONSE']._serialized_end=6733 + _globals['_RESUMEACTORREQUEST']._serialized_start=6735 + _globals['_RESUMEACTORREQUEST']._serialized_end=6803 + _globals['_RESUMEACTORRESPONSE']._serialized_start=6805 + _globals['_RESUMEACTORRESPONSE']._serialized_end=6873 + _globals['_DELETEACTORREQUEST']._serialized_start=6875 + _globals['_DELETEACTORREQUEST']._serialized_end=6929 + _globals['_GETACTORSNAPSHOTREQUEST']._serialized_start=6931 + _globals['_GETACTORSNAPSHOTREQUEST']._serialized_end=7000 + _globals['_LISTACTORSNAPSHOTSREQUEST']._serialized_start=7002 + _globals['_LISTACTORSNAPSHOTSREQUEST']._serialized_end=7086 + _globals['_LISTACTORSNAPSHOTSRESPONSE']._serialized_start=7088 + _globals['_LISTACTORSNAPSHOTSRESPONSE']._serialized_end=7183 + _globals['_TAGACTORSNAPSHOTREQUEST']._serialized_start=7185 + _globals['_TAGACTORSNAPSHOTREQUEST']._serialized_end=7293 + _globals['_UPDATEACTORSNAPSHOTTAGREQUEST']._serialized_start=7295 + _globals['_UPDATEACTORSNAPSHOTTAGREQUEST']._serialized_end=7414 + _globals['_DELETEACTORSNAPSHOTTAGREQUEST']._serialized_start=7416 + _globals['_DELETEACTORSNAPSHOTTAGREQUEST']._serialized_end=7479 + _globals['_LISTWORKERSREQUEST']._serialized_start=7481 + _globals['_LISTWORKERSREQUEST']._serialized_end=7540 + _globals['_LISTWORKERSRESPONSE']._serialized_start=7542 + _globals['_LISTWORKERSRESPONSE']._serialized_end=7621 + _globals['_LISTACTORSREQUEST']._serialized_start=7623 + _globals['_LISTACTORSREQUEST']._serialized_end=7699 + _globals['_LISTACTORSRESPONSE']._serialized_start=7701 + _globals['_LISTACTORSRESPONSE']._serialized_end=7777 + _globals['_WORKER']._serialized_start=7780 + _globals['_WORKER']._serialized_end=8188 + _globals['_WORKER_LABELSENTRY']._serialized_start=8073 + _globals['_WORKER_LABELSENTRY']._serialized_end=8118 + _globals['_WORKER_STATE']._serialized_start=8120 + _globals['_WORKER_STATE']._serialized_end=8188 + _globals['_ASSIGNMENT']._serialized_start=8190 + _globals['_ASSIGNMENT']._serialized_end=8312 + _globals['_KUBENAMESPACEDOBJECTREF']._serialized_start=8314 + _globals['_KUBENAMESPACEDOBJECTREF']._serialized_end=8372 + _globals['_DEBUGCLEARREQUEST']._serialized_start=8374 + _globals['_DEBUGCLEARREQUEST']._serialized_end=8393 + _globals['_DEBUGCLEARRESPONSE']._serialized_start=8395 + _globals['_DEBUGCLEARRESPONSE']._serialized_end=8415 + _globals['_MINTJWTREQUEST']._serialized_start=8417 + _globals['_MINTJWTREQUEST']._serialized_end=8508 + _globals['_MINTJWTRESPONSE']._serialized_start=8510 + _globals['_MINTJWTRESPONSE']._serialized_end=8546 + _globals['_MINTCERTREQUEST']._serialized_start=8549 + _globals['_MINTCERTREQUEST']._serialized_end=8751 + _globals['_MINTCERTRESPONSE']._serialized_start=8753 + _globals['_MINTCERTRESPONSE']._serialized_end=8799 + _globals['_CONTROL']._serialized_start=9391 + _globals['_CONTROL']._serialized_end=11572 + _globals['_DEBUG']._serialized_start=11574 + _globals['_DEBUG']._serialized_end=11652 + _globals['_ACTORIDENTITY']._serialized_start=11655 + _globals['_ACTORIDENTITY']._serialized_end=11793 # @@protoc_insertion_point(module_scope) diff --git a/benchmarking/locust/common/ateapi_pb2_grpc.py b/benchmarking/locust/common/ateapi_pb2_grpc.py index 5959773969..efaba37cfe 100644 --- a/benchmarking/locust/common/ateapi_pb2_grpc.py +++ b/benchmarking/locust/common/ateapi_pb2_grpc.py @@ -139,6 +139,51 @@ def __init__(self, channel): request_serializer=ateapi__pb2.DeleteAtespaceRequest.SerializeToString, response_deserializer=ateapi__pb2.Atespace.FromString, _registered_method=True) + self.CreateActorTemplate = channel.unary_unary( + '/ateapi.Control/CreateActorTemplate', + request_serializer=ateapi__pb2.CreateActorTemplateRequest.SerializeToString, + response_deserializer=ateapi__pb2.ActorTemplate.FromString, + _registered_method=True) + self.GetActorTemplate = channel.unary_unary( + '/ateapi.Control/GetActorTemplate', + request_serializer=ateapi__pb2.GetActorTemplateRequest.SerializeToString, + response_deserializer=ateapi__pb2.ActorTemplate.FromString, + _registered_method=True) + self.UpdateActorTemplate = channel.unary_unary( + '/ateapi.Control/UpdateActorTemplate', + request_serializer=ateapi__pb2.UpdateActorTemplateRequest.SerializeToString, + response_deserializer=ateapi__pb2.ActorTemplate.FromString, + _registered_method=True) + self.ListActorTemplates = channel.unary_unary( + '/ateapi.Control/ListActorTemplates', + request_serializer=ateapi__pb2.ListActorTemplatesRequest.SerializeToString, + response_deserializer=ateapi__pb2.ListActorTemplatesResponse.FromString, + _registered_method=True) + self.DeleteActorTemplate = channel.unary_unary( + '/ateapi.Control/DeleteActorTemplate', + request_serializer=ateapi__pb2.DeleteActorTemplateRequest.SerializeToString, + response_deserializer=ateapi__pb2.ActorTemplate.FromString, + _registered_method=True) + self.CreateActorTemplateVersion = channel.unary_unary( + '/ateapi.Control/CreateActorTemplateVersion', + request_serializer=ateapi__pb2.CreateActorTemplateVersionRequest.SerializeToString, + response_deserializer=ateapi__pb2.ActorTemplateVersion.FromString, + _registered_method=True) + self.GetActorTemplateVersion = channel.unary_unary( + '/ateapi.Control/GetActorTemplateVersion', + request_serializer=ateapi__pb2.GetActorTemplateVersionRequest.SerializeToString, + response_deserializer=ateapi__pb2.ActorTemplateVersion.FromString, + _registered_method=True) + self.ListActorTemplateVersions = channel.unary_unary( + '/ateapi.Control/ListActorTemplateVersions', + request_serializer=ateapi__pb2.ListActorTemplateVersionsRequest.SerializeToString, + response_deserializer=ateapi__pb2.ListActorTemplateVersionsResponse.FromString, + _registered_method=True) + self.DeleteActorTemplateVersion = channel.unary_unary( + '/ateapi.Control/DeleteActorTemplateVersion', + request_serializer=ateapi__pb2.DeleteActorTemplateVersionRequest.SerializeToString, + response_deserializer=ateapi__pb2.ActorTemplateVersion.FromString, + _registered_method=True) class ControlServicer: @@ -167,7 +212,9 @@ def UpdateActor(self, request, context): raise NotImplementedError('Method not implemented!') def SuspendActor(self, request, context): - """Suspend a given actor to a new snapshot. + """Suspend a given actor to a new snapshot. A running actor is checkpointed + on its worker; a paused actor's node-local snapshot is uploaded, narrowed + to the template's commit scope where required (Full capture, Data commit). """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') @@ -273,6 +320,72 @@ def DeleteAtespace(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def CreateActorTemplate(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetActorTemplate(self, request, context): + """Get an ActorTemplate by name. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateActorTemplate(self, request, context): + """Update mutable fields on an existing ActorTemplate. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListActorTemplates(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteActorTemplate(self, request, context): + """Delete an ActorTemplate. Rejects (FailedPrecondition) while any of its + ActorTemplateVersions exist. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateActorTemplateVersion(self, request, context): + """Create a new ActorTemplateVersion under an existing ActorTemplate + (FailedPrecondition if the parent does not exist). + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetActorTemplateVersion(self, request, context): + """Get an ActorTemplateVersion by name. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListActorTemplateVersions(self, request, context): + """List ActorTemplateVersions, optionally filtered to one ActorTemplate. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteActorTemplateVersion(self, request, context): + """Delete an ActorTemplateVersion together with its golden actor and golden + snapshot in the reserved ate-golden atespace. Rejects (FailedPrecondition) + while the version is its parent's default_version_on_create or while any + Actor pins it. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_ControlServicer_to_server(servicer, server): rpc_method_handlers = { @@ -366,6 +479,51 @@ def add_ControlServicer_to_server(servicer, server): request_deserializer=ateapi__pb2.DeleteAtespaceRequest.FromString, response_serializer=ateapi__pb2.Atespace.SerializeToString, ), + 'CreateActorTemplate': grpc.unary_unary_rpc_method_handler( + servicer.CreateActorTemplate, + request_deserializer=ateapi__pb2.CreateActorTemplateRequest.FromString, + response_serializer=ateapi__pb2.ActorTemplate.SerializeToString, + ), + 'GetActorTemplate': grpc.unary_unary_rpc_method_handler( + servicer.GetActorTemplate, + request_deserializer=ateapi__pb2.GetActorTemplateRequest.FromString, + response_serializer=ateapi__pb2.ActorTemplate.SerializeToString, + ), + 'UpdateActorTemplate': grpc.unary_unary_rpc_method_handler( + servicer.UpdateActorTemplate, + request_deserializer=ateapi__pb2.UpdateActorTemplateRequest.FromString, + response_serializer=ateapi__pb2.ActorTemplate.SerializeToString, + ), + 'ListActorTemplates': grpc.unary_unary_rpc_method_handler( + servicer.ListActorTemplates, + request_deserializer=ateapi__pb2.ListActorTemplatesRequest.FromString, + response_serializer=ateapi__pb2.ListActorTemplatesResponse.SerializeToString, + ), + 'DeleteActorTemplate': grpc.unary_unary_rpc_method_handler( + servicer.DeleteActorTemplate, + request_deserializer=ateapi__pb2.DeleteActorTemplateRequest.FromString, + response_serializer=ateapi__pb2.ActorTemplate.SerializeToString, + ), + 'CreateActorTemplateVersion': grpc.unary_unary_rpc_method_handler( + servicer.CreateActorTemplateVersion, + request_deserializer=ateapi__pb2.CreateActorTemplateVersionRequest.FromString, + response_serializer=ateapi__pb2.ActorTemplateVersion.SerializeToString, + ), + 'GetActorTemplateVersion': grpc.unary_unary_rpc_method_handler( + servicer.GetActorTemplateVersion, + request_deserializer=ateapi__pb2.GetActorTemplateVersionRequest.FromString, + response_serializer=ateapi__pb2.ActorTemplateVersion.SerializeToString, + ), + 'ListActorTemplateVersions': grpc.unary_unary_rpc_method_handler( + servicer.ListActorTemplateVersions, + request_deserializer=ateapi__pb2.ListActorTemplateVersionsRequest.FromString, + response_serializer=ateapi__pb2.ListActorTemplateVersionsResponse.SerializeToString, + ), + 'DeleteActorTemplateVersion': grpc.unary_unary_rpc_method_handler( + servicer.DeleteActorTemplateVersion, + request_deserializer=ateapi__pb2.DeleteActorTemplateVersionRequest.FromString, + response_serializer=ateapi__pb2.ActorTemplateVersion.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'ateapi.Control', rpc_method_handlers) @@ -864,6 +1022,249 @@ def DeleteAtespace(request, metadata, _registered_method=True) + @staticmethod + def CreateActorTemplate(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ateapi.Control/CreateActorTemplate', + ateapi__pb2.CreateActorTemplateRequest.SerializeToString, + ateapi__pb2.ActorTemplate.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetActorTemplate(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ateapi.Control/GetActorTemplate', + ateapi__pb2.GetActorTemplateRequest.SerializeToString, + ateapi__pb2.ActorTemplate.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def UpdateActorTemplate(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ateapi.Control/UpdateActorTemplate', + ateapi__pb2.UpdateActorTemplateRequest.SerializeToString, + ateapi__pb2.ActorTemplate.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ListActorTemplates(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ateapi.Control/ListActorTemplates', + ateapi__pb2.ListActorTemplatesRequest.SerializeToString, + ateapi__pb2.ListActorTemplatesResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def DeleteActorTemplate(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ateapi.Control/DeleteActorTemplate', + ateapi__pb2.DeleteActorTemplateRequest.SerializeToString, + ateapi__pb2.ActorTemplate.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def CreateActorTemplateVersion(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ateapi.Control/CreateActorTemplateVersion', + ateapi__pb2.CreateActorTemplateVersionRequest.SerializeToString, + ateapi__pb2.ActorTemplateVersion.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def GetActorTemplateVersion(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ateapi.Control/GetActorTemplateVersion', + ateapi__pb2.GetActorTemplateVersionRequest.SerializeToString, + ateapi__pb2.ActorTemplateVersion.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def ListActorTemplateVersions(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ateapi.Control/ListActorTemplateVersions', + ateapi__pb2.ListActorTemplateVersionsRequest.SerializeToString, + ateapi__pb2.ListActorTemplateVersionsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def DeleteActorTemplateVersion(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ateapi.Control/DeleteActorTemplateVersion', + ateapi__pb2.DeleteActorTemplateVersionRequest.SerializeToString, + ateapi__pb2.ActorTemplateVersion.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + class DebugStub: """Debug is the RPC interface for administrative and debugging operations @@ -947,20 +1348,10 @@ def DebugClear(request, class ActorIdentityStub: """ActorIdentity allows substrate workloads to exchange their infrastructure-level credentials (k8s service account token, etc.) for a - substrate actor-level credential. A given substrate actor might migrate + substrate actor-level credential. A given substrate actor might migrate between many different physical workers over the course of its lifecycle, whereas the actor credential's identity will be stable for the life of the actor. - - This service requires authentication. You can authenticate with a Kubernetes - service account token in an `Authorization: Bearer` header, or you can - authenticate with a Kubernetes service account certificate as an mTLS - certificate. (Kubernetes service account certificates do not currently exist - upstream, but we will provide a polyfill based on Pod Certificates). - - The broker will check that the service credentials you authenticated with - belong to a Pod that is currently mapped to the requested actor in the - actor database. """ def __init__(self, channel): @@ -984,20 +1375,10 @@ def __init__(self, channel): class ActorIdentityServicer: """ActorIdentity allows substrate workloads to exchange their infrastructure-level credentials (k8s service account token, etc.) for a - substrate actor-level credential. A given substrate actor might migrate + substrate actor-level credential. A given substrate actor might migrate between many different physical workers over the course of its lifecycle, whereas the actor credential's identity will be stable for the life of the actor. - - This service requires authentication. You can authenticate with a Kubernetes - service account token in an `Authorization: Bearer` header, or you can - authenticate with a Kubernetes service account certificate as an mTLS - certificate. (Kubernetes service account certificates do not currently exist - upstream, but we will provide a polyfill based on Pod Certificates). - - The broker will check that the service credentials you authenticated with - belong to a Pod that is currently mapped to the requested actor in the - actor database. """ def MintJWT(self, request, context): @@ -1017,10 +1398,9 @@ def MintCert(self, request, context): it on the actor's behalf, authenticating with its own client certificate rather than a bearer token. - Authorization is decided on that client certificate: it must identify the - atelet running on the same node as the worker Pod that currently hosts the - requested actor, and the actor must still be running. Any other caller is - rejected with PERMISSION_DENIED. + Authorization is decided on that client certificate and the worker + identity attested by atelet. Ateapi verifies that the worker is assigned to + the actor and that the actor points back to that exact worker before signing. The certificate in the response is the actor's identity, not the atelet's. """ @@ -1052,20 +1432,10 @@ def add_ActorIdentityServicer_to_server(servicer, server): class ActorIdentity: """ActorIdentity allows substrate workloads to exchange their infrastructure-level credentials (k8s service account token, etc.) for a - substrate actor-level credential. A given substrate actor might migrate + substrate actor-level credential. A given substrate actor might migrate between many different physical workers over the course of its lifecycle, whereas the actor credential's identity will be stable for the life of the actor. - - This service requires authentication. You can authenticate with a Kubernetes - service account token in an `Authorization: Bearer` header, or you can - authenticate with a Kubernetes service account certificate as an mTLS - certificate. (Kubernetes service account certificates do not currently exist - upstream, but we will provide a polyfill based on Pod Certificates). - - The broker will check that the service credentials you authenticated with - belong to a Pod that is currently mapped to the requested actor in the - actor database. """ @staticmethod diff --git a/cmd/ateapi/internal/controlapi/actor_snapshot.go b/cmd/ateapi/internal/controlapi/actor_snapshot.go index ada2a2bdbd..44021171dc 100644 --- a/cmd/ateapi/internal/controlapi/actor_snapshot.go +++ b/cmd/ateapi/internal/controlapi/actor_snapshot.go @@ -19,6 +19,7 @@ import ( "errors" "fmt" "slices" + "strings" "github.com/agent-substrate/substrate/cmd/ateapi/internal/store" "github.com/agent-substrate/substrate/internal/fieldmask" @@ -30,6 +31,8 @@ import ( ) // actorSnapshotTagScopes lists the scopes a client may set on an ActorSnapshotTag. +// ACTOR_SNAPSHOT_TAG_SCOPE_UNSPECIFIED is deliberately absent: scope is required +// on the wire, not defaulted. See validateActorSnapshotTagScope. var actorSnapshotTagScopes = []ateapipb.ActorSnapshotTagScope{ ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE, ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED, @@ -161,9 +164,7 @@ func validateUpdateActorSnapshotTagRequest(req *ateapipb.UpdateActorSnapshotTagR errs = append(errs, fieldmask.Validate(req.GetUpdateMask(), actorSnapshotTagMutableFields, field.NewPath("update_mask"))...) - if scope, p := tag.GetScope(), tagPath.Child("scope"); validateActorSnapshotTagScope(scope) != nil { - errs = append(errs, field.NotSupported(p, scope.String(), actorSnapshotTagScopeNames)) - } + errs = append(errs, validateActorSnapshotTagScope(tag.GetScope(), tagPath.Child("scope"))...) return errs } @@ -267,12 +268,19 @@ func validateActorSnapshotTag(tag *ateapipb.ActorSnapshotTag, name string) error if errs := resources.ValidateObjectRef(&ateapipb.ObjectRef{Atespace: tag.GetMetadata().GetAtespace(), Name: tag.GetMetadata().GetName()}, p.Child("metadata")); len(errs) > 0 { return status.Error(codes.InvalidArgument, errs.ToAggregate().Error()) } - return validateActorSnapshotTagScope(tag.GetScope()) + if errs := validateActorSnapshotTagScope(tag.GetScope(), p.Child("scope")); len(errs) > 0 { + return status.Error(codes.InvalidArgument, errs.ToAggregate().Error()) + } + return nil } -func validateActorSnapshotTagScope(scope ateapipb.ActorSnapshotTagScope) error { - if slices.Contains(actorSnapshotTagScopes, scope) { - return nil +// validateActorSnapshotTagScope checks that scope is one a client may set. +func validateActorSnapshotTagScope(scope ateapipb.ActorSnapshotTagScope, p *field.Path) field.ErrorList { + switch { + case scope == ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_UNSPECIFIED: + return field.ErrorList{field.Required(p, "must be one of: "+strings.Join(actorSnapshotTagScopeNames, ", "))} + case !slices.Contains(actorSnapshotTagScopes, scope): + return field.ErrorList{field.NotSupported(p, scope.String(), actorSnapshotTagScopeNames)} } - return status.Error(codes.InvalidArgument, "invalid ActorSnapshot tag scope") + return nil } diff --git a/cmd/ateapi/internal/controlapi/actor_snapshot_test.go b/cmd/ateapi/internal/controlapi/actor_snapshot_test.go index fe1c608960..8aec880e21 100644 --- a/cmd/ateapi/internal/controlapi/actor_snapshot_test.go +++ b/cmd/ateapi/internal/controlapi/actor_snapshot_test.go @@ -202,7 +202,6 @@ func TestValidateUpdateActorSnapshotTagRequest(t *testing.T) { wantError: field.ErrorList{field.NotSupported(field.NewPath("update_mask"), "snapshot", mutableFields)}, }, { - // The zero value is ATESPACE, so leaving scope unset unpublishes the tag. name: "unset tag.scope", req: &ateapipb.UpdateActorSnapshotTagRequest{ Tag: &ateapipb.ActorSnapshotTag{ @@ -210,6 +209,28 @@ func TestValidateUpdateActorSnapshotTagRequest(t *testing.T) { }, UpdateMask: &fieldmaskpb.FieldMask{Paths: []string{"scope"}}, }, + wantError: field.ErrorList{field.Required(field.NewPath("tag", "scope"), "")}, + }, + { + name: "explicit tag.scope UNSPECIFIED", + req: &ateapipb.UpdateActorSnapshotTagRequest{ + Tag: &ateapipb.ActorSnapshotTag{ + Metadata: &ateapipb.ResourceMetadata{Atespace: "ns1", Name: "tag1"}, + Scope: ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_UNSPECIFIED, + }, + UpdateMask: &fieldmaskpb.FieldMask{Paths: []string{"scope"}}, + }, + wantError: field.ErrorList{field.Required(field.NewPath("tag", "scope"), "")}, + }, + { + name: "tag.scope ATESPACE explicitly unpublishes", + req: &ateapipb.UpdateActorSnapshotTagRequest{ + Tag: &ateapipb.ActorSnapshotTag{ + Metadata: &ateapipb.ResourceMetadata{Atespace: "ns1", Name: "tag1"}, + Scope: ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE, + }, + UpdateMask: &fieldmaskpb.FieldMask{Paths: []string{"scope"}}, + }, wantError: nil, }, { @@ -240,18 +261,18 @@ func TestUpdateActorSnapshotTag_FieldMasks(t *testing.T) { want *ateapipb.ActorSnapshotTag }{ { - name: "mask sets scope", - stored: &ateapipb.ActorSnapshotTag{}, + name: "mask publishes an atespace-scoped tag", + stored: &ateapipb.ActorSnapshotTag{Scope: ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE}, req: &ateapipb.ActorSnapshotTag{Scope: ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED}, maskPaths: []string{"scope"}, want: &ateapipb.ActorSnapshotTag{Scope: ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED}, }, { - name: "mask clears scope left unset on request, resetting to the zero value", + name: "mask unpublishes a published tag", stored: &ateapipb.ActorSnapshotTag{Scope: ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED}, - req: &ateapipb.ActorSnapshotTag{}, + req: &ateapipb.ActorSnapshotTag{Scope: ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE}, maskPaths: []string{"scope"}, - want: &ateapipb.ActorSnapshotTag{}, + want: &ateapipb.ActorSnapshotTag{Scope: ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE}, }, } for _, tt := range tests { @@ -280,6 +301,59 @@ func TestUpdateActorSnapshotTag_FieldMasks(t *testing.T) { } } +// TestUpdateActorSnapshotTag_UnsetScopeDoesNotUnpublish checks that masking +// scope without populating it is rejected. +func TestUpdateActorSnapshotTag_UnsetScopeDoesNotUnpublish(t *testing.T) { + ctx := context.Background() + svc, stored := serviceWithActorSnapshotTag(t, &ateapipb.ActorSnapshotTag{ + Metadata: &ateapipb.ResourceMetadata{Atespace: testAtespace, Name: "tag1"}, + Scope: ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED, + }) + + _, err := svc.UpdateActorSnapshotTag(ctx, &ateapipb.UpdateActorSnapshotTagRequest{ + Tag: &ateapipb.ActorSnapshotTag{ + Metadata: &ateapipb.ResourceMetadata{Atespace: testAtespace, Name: "tag1"}, + }, + UpdateMask: &fieldmaskpb.FieldMask{Paths: []string{"scope"}}, + }) + if code := status.Code(err); code != codes.InvalidArgument { + t.Errorf("UpdateActorSnapshotTag error = %v (code %v), want code InvalidArgument", err, code) + } + + _, current, err := svc.persistence.GetActorSnapshotByTag(ctx, testAtespace, "tag1") + if err != nil { + t.Fatalf("GetActorSnapshotByTag: %v", err) + } + if got, want := current.GetScope(), ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED; got != want { + t.Errorf("stored scope = %v, want %v: the rejected update must not have unpublished the tag", got, want) + } + if got, want := current.GetMetadata().GetVersion(), stored.GetMetadata().GetVersion(); got != want { + t.Errorf("stored version = %d, want %d: the rejected update must not have written", got, want) + } +} + +// TestTagActorSnapshot_RejectsUnsetScope checks that scope is required at +// creation. +func TestTagActorSnapshot_RejectsUnsetScope(t *testing.T) { + ctx := context.Background() + svc, stored := serviceWithActorSnapshotTag(t, &ateapipb.ActorSnapshotTag{ + Metadata: &ateapipb.ResourceMetadata{Atespace: testAtespace, Name: "tag1"}, + Scope: ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE, + }) + + _, err := svc.TagActorSnapshot(ctx, &ateapipb.TagActorSnapshotRequest{ + Snapshot: &ateapipb.ActorSnapshotRef{ + Reference: &ateapipb.ActorSnapshotRef_Snapshot{Snapshot: stored.GetSnapshot()}, + }, + Tag: &ateapipb.ActorSnapshotTag{ + Metadata: &ateapipb.ResourceMetadata{Atespace: testAtespace, Name: "tag2"}, + }, + }) + if code := status.Code(err); code != codes.InvalidArgument { + t.Errorf("TagActorSnapshot error = %v (code %v), want code InvalidArgument", err, code) + } +} + // serviceWithActorSnapshotTag seeds an ActorSnapshot and a tag pointing at it // in a miniredis-backed store, and returns a Service over it. func serviceWithActorSnapshotTag(t *testing.T, tag *ateapipb.ActorSnapshotTag) (*Service, *ateapipb.ActorSnapshotTag) { diff --git a/cmd/kubectl-ate/internal/cmd/actor_snapshots.go b/cmd/kubectl-ate/internal/cmd/actor_snapshots.go index 7f6a8e8345..a89f673885 100644 --- a/cmd/kubectl-ate/internal/cmd/actor_snapshots.go +++ b/cmd/kubectl-ate/internal/cmd/actor_snapshots.go @@ -187,7 +187,7 @@ func parseActorSnapshotTagScope(value string) (ateapipb.ActorSnapshotTagScope, e case "published": return ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED, nil default: - return 0, fmt.Errorf("invalid scope %q; must be atespace or published", value) + return ateapipb.ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_UNSPECIFIED, fmt.Errorf("invalid scope %q; must be atespace or published", value) } } diff --git a/pkg/proto/ateapipb/ateapi.pb.go b/pkg/proto/ateapipb/ateapi.pb.go index 7131130916..0874075240 100644 --- a/pkg/proto/ateapipb/ateapi.pb.go +++ b/pkg/proto/ateapipb/ateapi.pb.go @@ -92,22 +92,26 @@ func (SnapshotContentScope) EnumDescriptor() ([]byte, []int) { type ActorSnapshotTagScope int32 const ( + // Not set and rejected wherever a client supplies a scope + ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_UNSPECIFIED ActorSnapshotTagScope = 0 // May initialize Actors only in the tag's owning Atespace. - ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE ActorSnapshotTagScope = 0 + ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE ActorSnapshotTagScope = 1 // Published for use by Actors in any Atespace. The tag remains addressed // through its owning Atespace. - ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED ActorSnapshotTagScope = 1 + ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED ActorSnapshotTagScope = 2 ) // Enum value maps for ActorSnapshotTagScope. var ( ActorSnapshotTagScope_name = map[int32]string{ - 0: "ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE", - 1: "ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED", + 0: "ACTOR_SNAPSHOT_TAG_SCOPE_UNSPECIFIED", + 1: "ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE", + 2: "ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED", } ActorSnapshotTagScope_value = map[string]int32{ - "ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE": 0, - "ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED": 1, + "ACTOR_SNAPSHOT_TAG_SCOPE_UNSPECIFIED": 0, + "ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE": 1, + "ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED": 2, } ) @@ -1218,7 +1222,7 @@ func (x *ActorSnapshotTag) GetScope() ActorSnapshotTagScope { if x != nil { return x.Scope } - return ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE + return ActorSnapshotTagScope_ACTOR_SNAPSHOT_TAG_SCOPE_UNSPECIFIED } // Atespace is the isolation boundary an Actor is created into. Global-scoped: @@ -5418,10 +5422,11 @@ const file_ateapi_proto_rawDesc = "" + "\x14SnapshotContentScope\x12&\n" + "\"SNAPSHOT_CONTENT_SCOPE_UNSPECIFIED\x10\x00\x12\x1f\n" + "\x1bSNAPSHOT_CONTENT_SCOPE_FULL\x10\x01\x12\x1f\n" + - "\x1bSNAPSHOT_CONTENT_SCOPE_DATA\x10\x02*f\n" + - "\x15ActorSnapshotTagScope\x12%\n" + - "!ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE\x10\x00\x12&\n" + - "\"ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED\x10\x01*b\n" + + "\x1bSNAPSHOT_CONTENT_SCOPE_DATA\x10\x02*\x90\x01\n" + + "\x15ActorSnapshotTagScope\x12(\n" + + "$ACTOR_SNAPSHOT_TAG_SCOPE_UNSPECIFIED\x10\x00\x12%\n" + + "!ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE\x10\x01\x12&\n" + + "\"ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED\x10\x02*b\n" + "\fSandboxClass\x12\x1d\n" + "\x19SANDBOX_CLASS_UNSPECIFIED\x10\x00\x12\x18\n" + "\x14SANDBOX_CLASS_GVISOR\x10\x01\x12\x19\n" + diff --git a/pkg/proto/ateapipb/ateapi.proto b/pkg/proto/ateapipb/ateapi.proto index edaa0b5000..9d5741c486 100644 --- a/pkg/proto/ateapipb/ateapi.proto +++ b/pkg/proto/ateapipb/ateapi.proto @@ -132,11 +132,13 @@ enum SnapshotContentScope { } enum ActorSnapshotTagScope { + // Not set and rejected wherever a client supplies a scope + ACTOR_SNAPSHOT_TAG_SCOPE_UNSPECIFIED = 0; // May initialize Actors only in the tag's owning Atespace. - ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE = 0; + ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE = 1; // Published for use by Actors in any Atespace. The tag remains addressed // through its owning Atespace. - ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED = 1; + ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED = 2; } // Selector matches worker pools by label.