diff --git a/benchmarking/locust/common/ateapi_pb2.py b/benchmarking/locust/common/ateapi_pb2.py index 576745cc7..ccc332b67 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\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"]\n\x10\x45xternalSnapshot\x12\x14\n\x0csnapshot_uri\x18\x01 \x01(\t\x12\x33\n\rcontent_scope\x18\x02 \x01(\x0e\x32\x1c.ateapi.SnapshotContentScope\"\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\"\xd5\x01\n\x05\x41\x63tor\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12)\n\x0e\x61\x63tor_template\x18\x04 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12)\n\x0fworker_selector\x18\x05 \x01(\x0b\x32\x10.ateapi.Selector\x12%\n\nsource_tag\x18\x06 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12#\n\x06status\x18\x07 \x01(\x0b\x32\x13.ateapi.ActorStatus\"]\n\x0c\x45gressPolicy\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12!\n\x05rules\x18\x02 \x03(\x0b\x32\x12.ateapi.EgressRule\"\x82\x01\n\nEgressRule\x12\'\n\thostnames\x18\x01 \x01(\x0b\x32\x14.ateapi.HostnameRule\x12&\n\tip_blocks\x18\x02 \x01(\x0b\x32\x13.ateapi.IPBlockRule\x12#\n\x03\x61ll\x18\x03 \x01(\x0b\x32\x16.google.protobuf.Empty\"L\n\x0cHostnameRule\x12\x10\n\x08patterns\x18\x01 \x03(\t\x12*\n\x07\x65\x66\x66\x65\x63ts\x18\x02 \x01(\x0b\x32\x19.ateapi.EgressRuleEffects\"\x1c\n\x0bIPBlockRule\x12\r\n\x05\x63idrs\x18\x01 \x03(\t\"U\n\x11\x45gressRuleEffects\x12@\n\x15inject_static_headers\x18\x01 \x03(\x0b\x32!.ateapi.CredentialHeaderInjection\"S\n\x19\x43redentialHeaderInjection\x12\x0e\n\x06header\x18\x01 \x01(\t\x12\x0e\n\x06prefix\x18\x02 \x01(\t\x12\x16\n\x0e\x63redential_uri\x18\x03 \x01(\t\"\xf1\x02\n\x0b\x41\x63torStatus\x12!\n\x05state\x18\x01 \x01(\x0e\x32\x12.ateapi.ActorState\x12\x33\n\x11worker_assignment\x18\x02 \x01(\x0b\x32\x18.ateapi.WorkerAssignment\x12!\n\x19in_progress_snapshot_name\x18\x03 \x01(\t\x12\x33\n\x11\x65xternal_snapshot\x18\x04 \x01(\x0b\x32\x18.ateapi.ExternalSnapshot\x12\x36\n\x13local_snapshot_info\x18\x05 \x01(\x0b\x32\x19.ateapi.LocalSnapshotInfo\x12-\n\ractor_volumes\x18\x07 \x03(\x0b\x32\x16.ateapi.ExternalVolume\x12\'\n\x1fin_progress_local_snapshot_name\x18\x08 \x01(\t\x12\"\n\x1a\x63urrent_actor_template_uid\x18\x0b \x01(\t\"\xa7\x01\n\x10WorkerAssignment\x12!\n\x06worker\x18\x06 \x01(\x0b\x32\x11.ateapi.ObjectRef\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\"\x8f\x01\n\tTagStatus\x12*\n\x08snapshot\x18\x01 \x01(\x0b\x32\x18.ateapi.ExternalSnapshot\x12\x1a\n\x12\x61\x63tor_template_uid\x18\x02 \x01(\t\x12 \n\x18in_progress_snapshot_uri\x18\x03 \x01(\t\x12\x18\n\x10source_actor_uid\x18\x04 \x01(\t\"\x9e\x01\n\x03Tag\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12!\n\x06status\x18\x02 \x01(\x0b\x32\x11.ateapi.TagStatus\x12\x1f\n\x05scope\x18\x03 \x01(\x0e\x32\x10.ateapi.TagScope\x12\'\n\x0csource_actor\x18\x04 \x01(\x0b\x32\x11.ateapi.ObjectRef\"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\"\xe3\x02\n\rActorTemplate\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12)\n\x0fworker_selector\x18\x02 \x01(\x0b\x32\x10.ateapi.Selector\x12%\n\ncontainers\x18\x03 \x03(\x0b\x32\x11.ateapi.Container\x12\x1f\n\x07volumes\x18\x04 \x03(\x0b\x32\x0e.ateapi.Volume\x12\x31\n\x10snapshots_config\x18\x05 \x01(\x0b\x32\x17.ateapi.SnapshotsConfig\x12-\n\x0esandbox_config\x18\x06 \x01(\x0b\x32\x15.ateapi.SandboxConfig\x12$\n\tresources\x18\x07 \x01(\x0b\x32\x11.ateapi.Resources\x12+\n\x06status\x18\x08 \x01(\x0b\x32\x1b.ateapi.ActorTemplateStatus\"+\n\tResources\x12\x1e\n\x06limits\x18\x01 \x03(\x0b\x32\x0e.ateapi.Limits\"(\n\x06Limits\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08quantity\x18\x02 \x01(\t\"\x9d\x01\n\x14GoldenSnapshotStatus\x12\x31\n\x0fgolden_snapshot\x18\x01 \x01(\x0b\x32\x18.ateapi.ExternalSnapshot\x12;\n\x17take_golden_snapshot_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x15\n\rerror_message\x18\x03 \x01(\t\"S\n\x13\x41\x63torTemplateStatus\x12<\n\x16golden_snapshot_status\x18\x01 \x01(\x0b\x32\x1c.ateapi.GoldenSnapshotStatus\"Q\n\rSandboxConfig\x12+\n\rsandbox_class\x18\x01 \x01(\x0e\x32\x14.ateapi.SandboxClass\x12\x13\n\x0b\x63onfig_name\x18\x02 \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\"\x92\x02\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\x12\x31\n\x10security_context\x18\x08 \x01(\x0b\x32\x17.ateapi.SecurityContext\x12$\n\tresources\x18\t \x01(\x0b\x32\x11.ateapi.Resources\"=\n\x0fSecurityContext\x12*\n\x0c\x63\x61pabilities\x18\x01 \x01(\x0b\x32\x14.ateapi.Capabilities\")\n\x0c\x43\x61pabilities\x12\x0b\n\x03\x61\x64\x64\x18\x01 \x03(\t\x12\x0c\n\x04\x64rop\x18\x02 \x03(\t\"%\n\x06\x45nvVar\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"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\"\xec\x01\n\x06Volume\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x33\n\x0b\x64urable_dir\x18\x02 \x01(\x0b\x32\x1e.ateapi.DurableDirVolumeSource\x12@\n\x18\x65xternal_volume_template\x18\x03 \x01(\x0b\x32\x1e.ateapi.ExternalVolumeTemplate\x12\x33\n\x0bsystem_info\x18\x05 \x01(\x0b\x32\x1e.ateapi.SystemInfoVolumeSource\x12(\n\x05image\x18\x06 \x01(\x0b\x32\x19.ateapi.ImageVolumeSource\"&\n\x11ImageVolumeSource\x12\x11\n\treference\x18\x01 \x01(\t\"\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\"L\n\x16SystemInfoVolumeSource\x12\x32\n\x0c\x64\x61ta_sources\x18\x01 \x03(\x0b\x32\x1c.ateapi.SystemInfoDataSource\"\x84\x01\n\x14SystemInfoDataSource\x12\x37\n\x0e\x61\x63tor_metadata\x18\x01 \x01(\x0b\x32\x1f.ateapi.ActorMetadataDataSource\x12\x33\n\x0ctrust_bundle\x18\x02 \x01(\x0b\x32\x1d.ateapi.TrustBundleDataSource\"C\n\x17\x41\x63torMetadataDataSource\x12(\n\x05items\x18\x01 \x03(\x0b\x32\x19.ateapi.ActorMetadataItem\"L\n\x11\x41\x63torMetadataItem\x12)\n\x05\x66ield\x18\x01 \x01(\x0e\x32\x1a.ateapi.ActorMetadataField\x12\x0c\n\x04path\x18\x02 \x01(\t\"3\n\x15TrustBundleDataSource\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"/\n\x0bVolumeMount\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x12\n\nmount_path\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\"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\"3\n\x0fGetActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"2\n\x12\x43reateActorRequest\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\"2\n\x12UpdateActorRequest\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\"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\"I\n\x12\x44\x65leteActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x11\n\tany_state\x18\x02 \x01(\x08\"?\n\x1bGetActorEgressPolicyRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"o\n\x1e\x43reateActorEgressPolicyRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12+\n\regress_policy\x18\x02 \x01(\x0b\x32\x14.ateapi.EgressPolicy\"o\n\x1eUpdateActorEgressPolicyRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12+\n\regress_policy\x18\x02 \x01(\x0b\x32\x14.ateapi.EgressPolicy\"B\n\x1e\x44\x65leteActorEgressPolicyRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"/\n\rGetTagRequest\x12\x1e\n\x03tag\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"J\n\x0fListTagsRequest\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\"F\n\x10ListTagsResponse\x12\x19\n\x04tags\x18\x01 \x03(\x0b\x32\x0b.ateapi.Tag\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\",\n\x10\x43reateTagRequest\x12\x18\n\x03tag\x18\x01 \x01(\x0b\x32\x0b.ateapi.Tag\",\n\x10UpdateTagRequest\x12\x18\n\x03tag\x18\x01 \x01(\x0b\x32\x0b.ateapi.Tag\"2\n\x10\x44\x65leteTagRequest\x12\x1e\n\x03tag\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"-\n\rDeleteOptions\x12\x0f\n\x07version\x18\x01 \x01(\x03\x12\x0b\n\x03uid\x18\x02 \x01(\t\"m\n!ListWorkerActorAssignmentsRequest\x12!\n\x06worker\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"q\n\"ListWorkerActorAssignmentsResponse\x12\x32\n\x11\x61\x63tor_assignments\x18\x01 \x03(\x0b\x32\x17.ateapi.ActorAssignment\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\";\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\"5\n\x10GetWorkerRequest\x12!\n\x06worker\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"5\n\x13\x43reateWorkerRequest\x12\x1e\n\x06worker\x18\x01 \x01(\x0b\x32\x0e.ateapi.Worker\"5\n\x13UpdateWorkerRequest\x12\x1e\n\x06worker\x18\x01 \x01(\x0b\x32\x0e.ateapi.Worker\"`\n\x13\x44\x65leteWorkerRequest\x12!\n\x06worker\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12&\n\x07options\x18\x02 \x01(\x0b\x32\x15.ateapi.DeleteOptions\"7\n\x12\x44rainWorkerRequest\x12!\n\x06worker\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"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\"\xc6\x02\n\x06Worker\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12\x18\n\x10worker_namespace\x18\x02 \x01(\t\x12\x13\n\x0bworker_pool\x18\x03 \x01(\t\x12\x12\n\nworker_pod\x18\x04 \x01(\t\x12\x16\n\x0eworker_pod_uid\x18\x05 \x01(\t\x12\x11\n\tnode_name\x18\x06 \x01(\t\x12\n\n\x02ip\x18\x07 \x01(\t\x12\x15\n\rsandbox_class\x18\x08 \x01(\t\x12*\n\x06labels\x18\t \x03(\x0b\x32\x1a.ateapi.Worker.LabelsEntry\x12$\n\x06status\x18\x0b \x01(\x0b\x32\x14.ateapi.WorkerStatus\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x89\x01\n\x0cWorkerStatus\x12\"\n\x05state\x18\x01 \x01(\x0e\x32\x13.ateapi.WorkerState\x12)\n\x08\x63\x61pacity\x18\x02 \x01(\x0b\x32\x17.ateapi.WorkerResources\x12*\n\tallocated\x18\x03 \x01(\x0b\x32\x17.ateapi.WorkerResources\"G\n\x0fWorkerResources\x12$\n\tresources\x18\x01 \x01(\x0b\x32\x11.ateapi.Resources\x12\x0e\n\x06\x61\x63tors\x18\x02 \x01(\x05\"\xc7\x01\n\x0f\x41\x63torAssignment\x12*\n\x08metadata\x18\x06 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12 \n\x05\x61\x63tor\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x11\n\tactor_uid\x18\x03 \x01(\t\x12-\n\x12\x61\x63tor_template_ref\x18\x04 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12$\n\tresources\x18\x05 \x01(\x0b\x32\x11.ateapi.Resources\"h\n\x18SetWorkerCapacityRequest\x12!\n\x06worker\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12)\n\x08\x63\x61pacity\x18\x02 \x01(\x0b\x32\x17.ateapi.WorkerResources\";\n\x19SetWorkerCapacityResponse\x12\x1e\n\x06worker\x18\x01 \x01(\x0b\x32\x0e.ateapi.Worker\"[\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\"\xa7\x01\n\x0fMintCertRequest\x12!\n\x06worker\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12#\n\x1b\x63\x65rtificate_signing_request\x18\x02 \x01(\x0c\x12\x1a\n\x12\x65xpected_actor_uid\x18\x03 \x01(\t\x12\x30\n\x07purpose\x18\x04 \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*V\n\x08TagScope\x12\x19\n\x15TAG_SCOPE_UNSPECIFIED\x10\x00\x12\x16\n\x12TAG_SCOPE_ATESPACE\x10\x01\x12\x17\n\x13TAG_SCOPE_PUBLISHED\x10\x02*\xf7\x01\n\nActorState\x12\x1b\n\x17\x41\x43TOR_STATE_UNSPECIFIED\x10\x00\x12\x18\n\x14\x41\x43TOR_STATE_RESUMING\x10\x01\x12\x17\n\x13\x41\x43TOR_STATE_RUNNING\x10\x02\x12\x1a\n\x16\x41\x43TOR_STATE_SUSPENDING\x10\x03\x12\x19\n\x15\x41\x43TOR_STATE_SUSPENDED\x10\x04\x12\x17\n\x13\x41\x43TOR_STATE_PAUSING\x10\x05\x12\x16\n\x12\x41\x43TOR_STATE_PAUSED\x10\x06\x12\x17\n\x13\x41\x43TOR_STATE_CRASHED\x10\x07\x12\x18\n\x14\x41\x43TOR_STATE_DELETING\x10\x08*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*\x9a\x01\n\x12\x41\x63torMetadataField\x12$\n ACTOR_METADATA_FIELD_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x41\x43TOR_METADATA_FIELD_NAME\x10\x01\x12!\n\x1d\x41\x43TOR_METADATA_FIELD_ATESPACE\x10\x02\x12\x1c\n\x18\x41\x43TOR_METADATA_FIELD_UID\x10\x03*_\n\x0bWorkerState\x12\x1c\n\x18WORKER_STATE_UNSPECIFIED\x10\x00\x12\x17\n\x13WORKER_STATE_ACTIVE\x10\x01\x12\x19\n\x15WORKER_STATE_DRAINING\x10\x02*k\n\x17\x41\x63torCertificatePurpose\x12)\n%ACTOR_CERTIFICATE_PURPOSE_UNSPECIFIED\x10\x00\x12%\n!ACTOR_CERTIFICATE_PURPOSE_ATUNNEL\x10\x01\x32\xf3\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\x12S\n\x14GetActorEgressPolicy\x12#.ateapi.GetActorEgressPolicyRequest\x1a\x14.ateapi.EgressPolicy\"\x00\x12Y\n\x17\x43reateActorEgressPolicy\x12&.ateapi.CreateActorEgressPolicyRequest\x1a\x14.ateapi.EgressPolicy\"\x00\x12Y\n\x17UpdateActorEgressPolicy\x12&.ateapi.UpdateActorEgressPolicyRequest\x1a\x14.ateapi.EgressPolicy\"\x00\x12Y\n\x17\x44\x65leteActorEgressPolicy\x12&.ateapi.DeleteActorEgressPolicyRequest\x1a\x14.ateapi.EgressPolicy\"\x00\x12\x34\n\tCreateTag\x12\x18.ateapi.CreateTagRequest\x1a\x0b.ateapi.Tag\"\x00\x12.\n\x06GetTag\x12\x15.ateapi.GetTagRequest\x1a\x0b.ateapi.Tag\"\x00\x12?\n\x08ListTags\x12\x17.ateapi.ListTagsRequest\x1a\x18.ateapi.ListTagsResponse\"\x00\x12\x34\n\tUpdateTag\x12\x18.ateapi.UpdateTagRequest\x1a\x0b.ateapi.Tag\"\x00\x12\x34\n\tDeleteTag\x12\x18.ateapi.DeleteTagRequest\x1a\x0b.ateapi.Tag\"\x00\x12H\n\x0bListWorkers\x12\x1a.ateapi.ListWorkersRequest\x1a\x1b.ateapi.ListWorkersResponse\"\x00\x12\x37\n\tGetWorker\x12\x18.ateapi.GetWorkerRequest\x1a\x0e.ateapi.Worker\"\x00\x12=\n\x0c\x43reateWorker\x12\x1b.ateapi.CreateWorkerRequest\x1a\x0e.ateapi.Worker\"\x00\x12=\n\x0cUpdateWorker\x12\x1b.ateapi.UpdateWorkerRequest\x1a\x0e.ateapi.Worker\"\x00\x12=\n\x0c\x44\x65leteWorker\x12\x1b.ateapi.DeleteWorkerRequest\x1a\x0e.ateapi.Worker\"\x00\x12;\n\x0b\x44rainWorker\x12\x1a.ateapi.DrainWorkerRequest\x1a\x0e.ateapi.Worker\"\x00\x12u\n\x1aListWorkerActorAssignments\x12).ateapi.ListWorkerActorAssignmentsRequest\x1a*.ateapi.ListWorkerActorAssignmentsResponse\"\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\x12]\n\x12ListActorTemplates\x12!.ateapi.ListActorTemplatesRequest\x1a\".ateapi.ListActorTemplatesResponse\"\x00\x12R\n\x13\x44\x65leteActorTemplate\x12\".ateapi.DeleteActorTemplateRequest\x1a\x15.ateapi.ActorTemplate\"\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.MintCertResponse2i\n\rWorkerService\x12X\n\x11SetWorkerCapacity\x12 .ateapi.SetWorkerCapacityRequest\x1a!.ateapi.SetWorkerCapacityResponseB9Z7github.com/agent-substrate/substrate/pkg/proto/ateapipbb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x61teapi.proto\x12\x06\x61teapi\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"]\n\x10\x45xternalSnapshot\x12\x14\n\x0csnapshot_uri\x18\x01 \x01(\t\x12\x33\n\rcontent_scope\x18\x02 \x01(\x0e\x32\x1c.ateapi.SnapshotContentScope\"\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\"\xd5\x01\n\x05\x41\x63tor\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12)\n\x0e\x61\x63tor_template\x18\x04 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12)\n\x0fworker_selector\x18\x05 \x01(\x0b\x32\x10.ateapi.Selector\x12%\n\nsource_tag\x18\x06 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12#\n\x06status\x18\x07 \x01(\x0b\x32\x13.ateapi.ActorStatus\"]\n\x0c\x45gressPolicy\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12!\n\x05rules\x18\x02 \x03(\x0b\x32\x12.ateapi.EgressRule\"\x82\x01\n\nEgressRule\x12\'\n\thostnames\x18\x01 \x01(\x0b\x32\x14.ateapi.HostnameRule\x12&\n\tip_blocks\x18\x02 \x01(\x0b\x32\x13.ateapi.IPBlockRule\x12#\n\x03\x61ll\x18\x03 \x01(\x0b\x32\x16.google.protobuf.Empty\"L\n\x0cHostnameRule\x12\x10\n\x08patterns\x18\x01 \x03(\t\x12*\n\x07\x65\x66\x66\x65\x63ts\x18\x02 \x01(\x0b\x32\x19.ateapi.EgressRuleEffects\"\x1c\n\x0bIPBlockRule\x12\r\n\x05\x63idrs\x18\x01 \x03(\t\"U\n\x11\x45gressRuleEffects\x12@\n\x15inject_static_headers\x18\x01 \x03(\x0b\x32!.ateapi.CredentialHeaderInjection\"S\n\x19\x43redentialHeaderInjection\x12\x0e\n\x06header\x18\x01 \x01(\t\x12\x0e\n\x06prefix\x18\x02 \x01(\t\x12\x16\n\x0e\x63redential_uri\x18\x03 \x01(\t\"\xf1\x02\n\x0b\x41\x63torStatus\x12!\n\x05state\x18\x01 \x01(\x0e\x32\x12.ateapi.ActorState\x12\x33\n\x11worker_assignment\x18\x02 \x01(\x0b\x32\x18.ateapi.WorkerAssignment\x12!\n\x19in_progress_snapshot_name\x18\x03 \x01(\t\x12\x33\n\x11\x65xternal_snapshot\x18\x04 \x01(\x0b\x32\x18.ateapi.ExternalSnapshot\x12\x36\n\x13local_snapshot_info\x18\x05 \x01(\x0b\x32\x19.ateapi.LocalSnapshotInfo\x12-\n\ractor_volumes\x18\x07 \x03(\x0b\x32\x16.ateapi.ExternalVolume\x12\'\n\x1fin_progress_local_snapshot_name\x18\x08 \x01(\t\x12\"\n\x1a\x63urrent_actor_template_uid\x18\x0b \x01(\t\"\xa7\x01\n\x10WorkerAssignment\x12!\n\x06worker\x18\x06 \x01(\x0b\x32\x11.ateapi.ObjectRef\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\"\x87\x01\n\tTagStatus\x12*\n\x08snapshot\x18\x01 \x01(\x0b\x32\x18.ateapi.ExternalSnapshot\x12\x1a\n\x12\x61\x63tor_template_uid\x18\x02 \x01(\t\x12\x18\n\x10storage_location\x18\x03 \x01(\t\x12\x18\n\x10source_actor_uid\x18\x04 \x01(\t\"\x9e\x01\n\x03Tag\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12!\n\x06status\x18\x02 \x01(\x0b\x32\x11.ateapi.TagStatus\x12\x1f\n\x05scope\x18\x03 \x01(\x0e\x32\x10.ateapi.TagScope\x12\'\n\x0csource_actor\x18\x04 \x01(\x0b\x32\x11.ateapi.ObjectRef\"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\"\xe3\x02\n\rActorTemplate\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12)\n\x0fworker_selector\x18\x02 \x01(\x0b\x32\x10.ateapi.Selector\x12%\n\ncontainers\x18\x03 \x03(\x0b\x32\x11.ateapi.Container\x12\x1f\n\x07volumes\x18\x04 \x03(\x0b\x32\x0e.ateapi.Volume\x12\x31\n\x10snapshots_config\x18\x05 \x01(\x0b\x32\x17.ateapi.SnapshotsConfig\x12-\n\x0esandbox_config\x18\x06 \x01(\x0b\x32\x15.ateapi.SandboxConfig\x12$\n\tresources\x18\x07 \x01(\x0b\x32\x11.ateapi.Resources\x12+\n\x06status\x18\x08 \x01(\x0b\x32\x1b.ateapi.ActorTemplateStatus\"+\n\tResources\x12\x1e\n\x06limits\x18\x01 \x03(\x0b\x32\x0e.ateapi.Limits\"(\n\x06Limits\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08quantity\x18\x02 \x01(\t\"\x9d\x01\n\x14GoldenSnapshotStatus\x12\x31\n\x0fgolden_snapshot\x18\x01 \x01(\x0b\x32\x18.ateapi.ExternalSnapshot\x12;\n\x17take_golden_snapshot_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x15\n\rerror_message\x18\x03 \x01(\t\"S\n\x13\x41\x63torTemplateStatus\x12<\n\x16golden_snapshot_status\x18\x01 \x01(\x0b\x32\x1c.ateapi.GoldenSnapshotStatus\"Q\n\rSandboxConfig\x12+\n\rsandbox_class\x18\x01 \x01(\x0e\x32\x14.ateapi.SandboxClass\x12\x13\n\x0b\x63onfig_name\x18\x02 \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\"\x92\x02\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\x12\x31\n\x10security_context\x18\x08 \x01(\x0b\x32\x17.ateapi.SecurityContext\x12$\n\tresources\x18\t \x01(\x0b\x32\x11.ateapi.Resources\"=\n\x0fSecurityContext\x12*\n\x0c\x63\x61pabilities\x18\x01 \x01(\x0b\x32\x14.ateapi.Capabilities\")\n\x0c\x43\x61pabilities\x12\x0b\n\x03\x61\x64\x64\x18\x01 \x03(\t\x12\x0c\n\x04\x64rop\x18\x02 \x03(\t\"%\n\x06\x45nvVar\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"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\"\xec\x01\n\x06Volume\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x33\n\x0b\x64urable_dir\x18\x02 \x01(\x0b\x32\x1e.ateapi.DurableDirVolumeSource\x12@\n\x18\x65xternal_volume_template\x18\x03 \x01(\x0b\x32\x1e.ateapi.ExternalVolumeTemplate\x12\x33\n\x0bsystem_info\x18\x05 \x01(\x0b\x32\x1e.ateapi.SystemInfoVolumeSource\x12(\n\x05image\x18\x06 \x01(\x0b\x32\x19.ateapi.ImageVolumeSource\"&\n\x11ImageVolumeSource\x12\x11\n\treference\x18\x01 \x01(\t\"\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\"L\n\x16SystemInfoVolumeSource\x12\x32\n\x0c\x64\x61ta_sources\x18\x01 \x03(\x0b\x32\x1c.ateapi.SystemInfoDataSource\"\x84\x01\n\x14SystemInfoDataSource\x12\x37\n\x0e\x61\x63tor_metadata\x18\x01 \x01(\x0b\x32\x1f.ateapi.ActorMetadataDataSource\x12\x33\n\x0ctrust_bundle\x18\x02 \x01(\x0b\x32\x1d.ateapi.TrustBundleDataSource\"C\n\x17\x41\x63torMetadataDataSource\x12(\n\x05items\x18\x01 \x03(\x0b\x32\x19.ateapi.ActorMetadataItem\"L\n\x11\x41\x63torMetadataItem\x12)\n\x05\x66ield\x18\x01 \x01(\x0e\x32\x1a.ateapi.ActorMetadataField\x12\x0c\n\x04path\x18\x02 \x01(\t\"3\n\x15TrustBundleDataSource\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"/\n\x0bVolumeMount\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x12\n\nmount_path\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\"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\"3\n\x0fGetActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"2\n\x12\x43reateActorRequest\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\"2\n\x12UpdateActorRequest\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\"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\"I\n\x12\x44\x65leteActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x11\n\tany_state\x18\x02 \x01(\x08\"?\n\x1bGetActorEgressPolicyRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"o\n\x1e\x43reateActorEgressPolicyRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12+\n\regress_policy\x18\x02 \x01(\x0b\x32\x14.ateapi.EgressPolicy\"o\n\x1eUpdateActorEgressPolicyRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12+\n\regress_policy\x18\x02 \x01(\x0b\x32\x14.ateapi.EgressPolicy\"B\n\x1e\x44\x65leteActorEgressPolicyRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"/\n\rGetTagRequest\x12\x1e\n\x03tag\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"J\n\x0fListTagsRequest\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\"F\n\x10ListTagsResponse\x12\x19\n\x04tags\x18\x01 \x03(\x0b\x32\x0b.ateapi.Tag\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\",\n\x10\x43reateTagRequest\x12\x18\n\x03tag\x18\x01 \x01(\x0b\x32\x0b.ateapi.Tag\",\n\x10UpdateTagRequest\x12\x18\n\x03tag\x18\x01 \x01(\x0b\x32\x0b.ateapi.Tag\"2\n\x10\x44\x65leteTagRequest\x12\x1e\n\x03tag\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"-\n\rDeleteOptions\x12\x0f\n\x07version\x18\x01 \x01(\x03\x12\x0b\n\x03uid\x18\x02 \x01(\t\"m\n!ListWorkerActorAssignmentsRequest\x12!\n\x06worker\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"q\n\"ListWorkerActorAssignmentsResponse\x12\x32\n\x11\x61\x63tor_assignments\x18\x01 \x03(\x0b\x32\x17.ateapi.ActorAssignment\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\";\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\"5\n\x10GetWorkerRequest\x12!\n\x06worker\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"5\n\x13\x43reateWorkerRequest\x12\x1e\n\x06worker\x18\x01 \x01(\x0b\x32\x0e.ateapi.Worker\"5\n\x13UpdateWorkerRequest\x12\x1e\n\x06worker\x18\x01 \x01(\x0b\x32\x0e.ateapi.Worker\"`\n\x13\x44\x65leteWorkerRequest\x12!\n\x06worker\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12&\n\x07options\x18\x02 \x01(\x0b\x32\x15.ateapi.DeleteOptions\"7\n\x12\x44rainWorkerRequest\x12!\n\x06worker\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"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\"\xc6\x02\n\x06Worker\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12\x18\n\x10worker_namespace\x18\x02 \x01(\t\x12\x13\n\x0bworker_pool\x18\x03 \x01(\t\x12\x12\n\nworker_pod\x18\x04 \x01(\t\x12\x16\n\x0eworker_pod_uid\x18\x05 \x01(\t\x12\x11\n\tnode_name\x18\x06 \x01(\t\x12\n\n\x02ip\x18\x07 \x01(\t\x12\x15\n\rsandbox_class\x18\x08 \x01(\t\x12*\n\x06labels\x18\t \x03(\x0b\x32\x1a.ateapi.Worker.LabelsEntry\x12$\n\x06status\x18\x0b \x01(\x0b\x32\x14.ateapi.WorkerStatus\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x89\x01\n\x0cWorkerStatus\x12\"\n\x05state\x18\x01 \x01(\x0e\x32\x13.ateapi.WorkerState\x12)\n\x08\x63\x61pacity\x18\x02 \x01(\x0b\x32\x17.ateapi.WorkerResources\x12*\n\tallocated\x18\x03 \x01(\x0b\x32\x17.ateapi.WorkerResources\"G\n\x0fWorkerResources\x12$\n\tresources\x18\x01 \x01(\x0b\x32\x11.ateapi.Resources\x12\x0e\n\x06\x61\x63tors\x18\x02 \x01(\x05\"\xc7\x01\n\x0f\x41\x63torAssignment\x12*\n\x08metadata\x18\x06 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12 \n\x05\x61\x63tor\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x11\n\tactor_uid\x18\x03 \x01(\t\x12-\n\x12\x61\x63tor_template_ref\x18\x04 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12$\n\tresources\x18\x05 \x01(\x0b\x32\x11.ateapi.Resources\"h\n\x18SetWorkerCapacityRequest\x12!\n\x06worker\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12)\n\x08\x63\x61pacity\x18\x02 \x01(\x0b\x32\x17.ateapi.WorkerResources\";\n\x19SetWorkerCapacityResponse\x12\x1e\n\x06worker\x18\x01 \x01(\x0b\x32\x0e.ateapi.Worker\"[\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\"\xa7\x01\n\x0fMintCertRequest\x12!\n\x06worker\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12#\n\x1b\x63\x65rtificate_signing_request\x18\x02 \x01(\x0c\x12\x1a\n\x12\x65xpected_actor_uid\x18\x03 \x01(\t\x12\x30\n\x07purpose\x18\x04 \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*V\n\x08TagScope\x12\x19\n\x15TAG_SCOPE_UNSPECIFIED\x10\x00\x12\x16\n\x12TAG_SCOPE_ATESPACE\x10\x01\x12\x17\n\x13TAG_SCOPE_PUBLISHED\x10\x02*\xf7\x01\n\nActorState\x12\x1b\n\x17\x41\x43TOR_STATE_UNSPECIFIED\x10\x00\x12\x18\n\x14\x41\x43TOR_STATE_RESUMING\x10\x01\x12\x17\n\x13\x41\x43TOR_STATE_RUNNING\x10\x02\x12\x1a\n\x16\x41\x43TOR_STATE_SUSPENDING\x10\x03\x12\x19\n\x15\x41\x43TOR_STATE_SUSPENDED\x10\x04\x12\x17\n\x13\x41\x43TOR_STATE_PAUSING\x10\x05\x12\x16\n\x12\x41\x43TOR_STATE_PAUSED\x10\x06\x12\x17\n\x13\x41\x43TOR_STATE_CRASHED\x10\x07\x12\x18\n\x14\x41\x43TOR_STATE_DELETING\x10\x08*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*\x9a\x01\n\x12\x41\x63torMetadataField\x12$\n ACTOR_METADATA_FIELD_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x41\x43TOR_METADATA_FIELD_NAME\x10\x01\x12!\n\x1d\x41\x43TOR_METADATA_FIELD_ATESPACE\x10\x02\x12\x1c\n\x18\x41\x43TOR_METADATA_FIELD_UID\x10\x03*_\n\x0bWorkerState\x12\x1c\n\x18WORKER_STATE_UNSPECIFIED\x10\x00\x12\x17\n\x13WORKER_STATE_ACTIVE\x10\x01\x12\x19\n\x15WORKER_STATE_DRAINING\x10\x02*k\n\x17\x41\x63torCertificatePurpose\x12)\n%ACTOR_CERTIFICATE_PURPOSE_UNSPECIFIED\x10\x00\x12%\n!ACTOR_CERTIFICATE_PURPOSE_ATUNNEL\x10\x01\x32\xf3\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\x12S\n\x14GetActorEgressPolicy\x12#.ateapi.GetActorEgressPolicyRequest\x1a\x14.ateapi.EgressPolicy\"\x00\x12Y\n\x17\x43reateActorEgressPolicy\x12&.ateapi.CreateActorEgressPolicyRequest\x1a\x14.ateapi.EgressPolicy\"\x00\x12Y\n\x17UpdateActorEgressPolicy\x12&.ateapi.UpdateActorEgressPolicyRequest\x1a\x14.ateapi.EgressPolicy\"\x00\x12Y\n\x17\x44\x65leteActorEgressPolicy\x12&.ateapi.DeleteActorEgressPolicyRequest\x1a\x14.ateapi.EgressPolicy\"\x00\x12\x34\n\tCreateTag\x12\x18.ateapi.CreateTagRequest\x1a\x0b.ateapi.Tag\"\x00\x12.\n\x06GetTag\x12\x15.ateapi.GetTagRequest\x1a\x0b.ateapi.Tag\"\x00\x12?\n\x08ListTags\x12\x17.ateapi.ListTagsRequest\x1a\x18.ateapi.ListTagsResponse\"\x00\x12\x34\n\tUpdateTag\x12\x18.ateapi.UpdateTagRequest\x1a\x0b.ateapi.Tag\"\x00\x12\x34\n\tDeleteTag\x12\x18.ateapi.DeleteTagRequest\x1a\x0b.ateapi.Tag\"\x00\x12H\n\x0bListWorkers\x12\x1a.ateapi.ListWorkersRequest\x1a\x1b.ateapi.ListWorkersResponse\"\x00\x12\x37\n\tGetWorker\x12\x18.ateapi.GetWorkerRequest\x1a\x0e.ateapi.Worker\"\x00\x12=\n\x0c\x43reateWorker\x12\x1b.ateapi.CreateWorkerRequest\x1a\x0e.ateapi.Worker\"\x00\x12=\n\x0cUpdateWorker\x12\x1b.ateapi.UpdateWorkerRequest\x1a\x0e.ateapi.Worker\"\x00\x12=\n\x0c\x44\x65leteWorker\x12\x1b.ateapi.DeleteWorkerRequest\x1a\x0e.ateapi.Worker\"\x00\x12;\n\x0b\x44rainWorker\x12\x1a.ateapi.DrainWorkerRequest\x1a\x0e.ateapi.Worker\"\x00\x12u\n\x1aListWorkerActorAssignments\x12).ateapi.ListWorkerActorAssignmentsRequest\x1a*.ateapi.ListWorkerActorAssignmentsResponse\"\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\x12]\n\x12ListActorTemplates\x12!.ateapi.ListActorTemplatesRequest\x1a\".ateapi.ListActorTemplatesResponse\"\x00\x12R\n\x13\x44\x65leteActorTemplate\x12\".ateapi.DeleteActorTemplateRequest\x1a\x15.ateapi.ActorTemplate\"\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.MintCertResponse2i\n\rWorkerService\x12X\n\x11SetWorkerCapacity\x12 .ateapi.SetWorkerCapacityRequest\x1a!.ateapi.SetWorkerCapacityResponseB9Z7github.com/agent-substrate/substrate/pkg/proto/ateapipbb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -54,22 +54,22 @@ _globals['_EXTERNALVOLUME_VOLUMECONTEXTENTRY']._serialized_options = b'8\001' _globals['_WORKER_LABELSENTRY']._loaded_options = None _globals['_WORKER_LABELSENTRY']._serialized_options = b'8\001' - _globals['_SNAPSHOTCONTENTSCOPE']._serialized_start=9237 - _globals['_SNAPSHOTCONTENTSCOPE']._serialized_end=9365 - _globals['_TAGSCOPE']._serialized_start=9367 - _globals['_TAGSCOPE']._serialized_end=9453 - _globals['_ACTORSTATE']._serialized_start=9456 - _globals['_ACTORSTATE']._serialized_end=9703 - _globals['_SANDBOXCLASS']._serialized_start=9705 - _globals['_SANDBOXCLASS']._serialized_end=9803 - _globals['_RESUMESOURCE']._serialized_start=9805 - _globals['_RESUMESOURCE']._serialized_end=9905 - _globals['_ACTORMETADATAFIELD']._serialized_start=9908 - _globals['_ACTORMETADATAFIELD']._serialized_end=10062 - _globals['_WORKERSTATE']._serialized_start=10064 - _globals['_WORKERSTATE']._serialized_end=10159 - _globals['_ACTORCERTIFICATEPURPOSE']._serialized_start=10161 - _globals['_ACTORCERTIFICATEPURPOSE']._serialized_end=10268 + _globals['_SNAPSHOTCONTENTSCOPE']._serialized_start=9229 + _globals['_SNAPSHOTCONTENTSCOPE']._serialized_end=9357 + _globals['_TAGSCOPE']._serialized_start=9359 + _globals['_TAGSCOPE']._serialized_end=9445 + _globals['_ACTORSTATE']._serialized_start=9448 + _globals['_ACTORSTATE']._serialized_end=9695 + _globals['_SANDBOXCLASS']._serialized_start=9697 + _globals['_SANDBOXCLASS']._serialized_end=9795 + _globals['_RESUMESOURCE']._serialized_start=9797 + _globals['_RESUMESOURCE']._serialized_end=9897 + _globals['_ACTORMETADATAFIELD']._serialized_start=9900 + _globals['_ACTORMETADATAFIELD']._serialized_end=10054 + _globals['_WORKERSTATE']._serialized_start=10056 + _globals['_WORKERSTATE']._serialized_end=10151 + _globals['_ACTORCERTIFICATEPURPOSE']._serialized_start=10153 + _globals['_ACTORCERTIFICATEPURPOSE']._serialized_end=10260 _globals['_EXTERNALSNAPSHOT']._serialized_start=86 _globals['_EXTERNALSNAPSHOT']._serialized_end=179 _globals['_LOCALSNAPSHOTINFO']._serialized_start=182 @@ -105,171 +105,171 @@ _globals['_WORKERASSIGNMENT']._serialized_start=2068 _globals['_WORKERASSIGNMENT']._serialized_end=2235 _globals['_TAGSTATUS']._serialized_start=2238 - _globals['_TAGSTATUS']._serialized_end=2381 - _globals['_TAG']._serialized_start=2384 - _globals['_TAG']._serialized_end=2542 - _globals['_ATESPACE']._serialized_start=2544 - _globals['_ATESPACE']._serialized_end=2598 - _globals['_OBJECTREF']._serialized_start=2600 - _globals['_OBJECTREF']._serialized_end=2643 - _globals['_ACTORTEMPLATE']._serialized_start=2646 - _globals['_ACTORTEMPLATE']._serialized_end=3001 - _globals['_RESOURCES']._serialized_start=3003 - _globals['_RESOURCES']._serialized_end=3046 - _globals['_LIMITS']._serialized_start=3048 - _globals['_LIMITS']._serialized_end=3088 - _globals['_GOLDENSNAPSHOTSTATUS']._serialized_start=3091 - _globals['_GOLDENSNAPSHOTSTATUS']._serialized_end=3248 - _globals['_ACTORTEMPLATESTATUS']._serialized_start=3250 - _globals['_ACTORTEMPLATESTATUS']._serialized_end=3333 - _globals['_SANDBOXCONFIG']._serialized_start=3335 - _globals['_SANDBOXCONFIG']._serialized_end=3416 - _globals['_SNAPSHOTSCONFIG']._serialized_start=3419 - _globals['_SNAPSHOTSCONFIG']._serialized_end=3602 - _globals['_ONRESUMECONFIG']._serialized_start=3604 - _globals['_ONRESUMECONFIG']._serialized_end=3661 - _globals['_CONTAINER']._serialized_start=3664 - _globals['_CONTAINER']._serialized_end=3938 - _globals['_SECURITYCONTEXT']._serialized_start=3940 - _globals['_SECURITYCONTEXT']._serialized_end=4001 - _globals['_CAPABILITIES']._serialized_start=4003 - _globals['_CAPABILITIES']._serialized_end=4044 - _globals['_ENVVAR']._serialized_start=4046 - _globals['_ENVVAR']._serialized_end=4083 - _globals['_CONTAINERREADYZ']._serialized_start=4085 - _globals['_CONTAINERREADYZ']._serialized_end=4168 - _globals['_HTTPGETACTION']._serialized_start=4170 - _globals['_HTTPGETACTION']._serialized_end=4213 - _globals['_VOLUME']._serialized_start=4216 - _globals['_VOLUME']._serialized_end=4452 - _globals['_IMAGEVOLUMESOURCE']._serialized_start=4454 - _globals['_IMAGEVOLUMESOURCE']._serialized_end=4492 - _globals['_DURABLEDIRVOLUMESOURCE']._serialized_start=4494 - _globals['_DURABLEDIRVOLUMESOURCE']._serialized_end=4518 - _globals['_EXTERNALVOLUMETEMPLATE']._serialized_start=4520 - _globals['_EXTERNALVOLUMETEMPLATE']._serialized_end=4590 - _globals['_SYSTEMINFOVOLUMESOURCE']._serialized_start=4592 - _globals['_SYSTEMINFOVOLUMESOURCE']._serialized_end=4668 - _globals['_SYSTEMINFODATASOURCE']._serialized_start=4671 - _globals['_SYSTEMINFODATASOURCE']._serialized_end=4803 - _globals['_ACTORMETADATADATASOURCE']._serialized_start=4805 - _globals['_ACTORMETADATADATASOURCE']._serialized_end=4872 - _globals['_ACTORMETADATAITEM']._serialized_start=4874 - _globals['_ACTORMETADATAITEM']._serialized_end=4950 - _globals['_TRUSTBUNDLEDATASOURCE']._serialized_start=4952 - _globals['_TRUSTBUNDLEDATASOURCE']._serialized_end=5003 - _globals['_VOLUMEMOUNT']._serialized_start=5005 - _globals['_VOLUMEMOUNT']._serialized_end=5052 - _globals['_CREATEATESPACEREQUEST']._serialized_start=5054 - _globals['_CREATEATESPACEREQUEST']._serialized_end=5113 - _globals['_GETATESPACEREQUEST']._serialized_start=5115 - _globals['_GETATESPACEREQUEST']._serialized_end=5172 - _globals['_LISTATESPACESREQUEST']._serialized_start=5174 - _globals['_LISTATESPACESREQUEST']._serialized_end=5235 - _globals['_LISTATESPACESRESPONSE']._serialized_start=5237 - _globals['_LISTATESPACESRESPONSE']._serialized_end=5322 - _globals['_DELETEATESPACEREQUEST']._serialized_start=5324 - _globals['_DELETEATESPACEREQUEST']._serialized_end=5384 - _globals['_CREATEACTORTEMPLATEREQUEST']._serialized_start=5386 - _globals['_CREATEACTORTEMPLATEREQUEST']._serialized_end=5461 - _globals['_GETACTORTEMPLATEREQUEST']._serialized_start=5463 - _globals['_GETACTORTEMPLATEREQUEST']._serialized_end=5531 - _globals['_LISTACTORTEMPLATESREQUEST']._serialized_start=5533 - _globals['_LISTACTORTEMPLATESREQUEST']._serialized_end=5617 - _globals['_LISTACTORTEMPLATESRESPONSE']._serialized_start=5619 - _globals['_LISTACTORTEMPLATESRESPONSE']._serialized_end=5720 - _globals['_DELETEACTORTEMPLATEREQUEST']._serialized_start=5722 - _globals['_DELETEACTORTEMPLATEREQUEST']._serialized_end=5793 - _globals['_GETACTORREQUEST']._serialized_start=5795 - _globals['_GETACTORREQUEST']._serialized_end=5846 - _globals['_CREATEACTORREQUEST']._serialized_start=5848 - _globals['_CREATEACTORREQUEST']._serialized_end=5898 - _globals['_UPDATEACTORREQUEST']._serialized_start=5900 - _globals['_UPDATEACTORREQUEST']._serialized_end=5950 - _globals['_SUSPENDACTORREQUEST']._serialized_start=5952 - _globals['_SUSPENDACTORREQUEST']._serialized_end=6007 - _globals['_SUSPENDACTORRESPONSE']._serialized_start=6009 - _globals['_SUSPENDACTORRESPONSE']._serialized_end=6061 - _globals['_PAUSEACTORREQUEST']._serialized_start=6063 - _globals['_PAUSEACTORREQUEST']._serialized_end=6116 - _globals['_PAUSEACTORRESPONSE']._serialized_start=6118 - _globals['_PAUSEACTORRESPONSE']._serialized_end=6168 - _globals['_RESUMEACTORREQUEST']._serialized_start=6170 - _globals['_RESUMEACTORREQUEST']._serialized_end=6238 - _globals['_RESUMEACTORRESPONSE']._serialized_start=6240 - _globals['_RESUMEACTORRESPONSE']._serialized_end=6308 - _globals['_DELETEACTORREQUEST']._serialized_start=6310 - _globals['_DELETEACTORREQUEST']._serialized_end=6383 - _globals['_GETACTOREGRESSPOLICYREQUEST']._serialized_start=6385 - _globals['_GETACTOREGRESSPOLICYREQUEST']._serialized_end=6448 - _globals['_CREATEACTOREGRESSPOLICYREQUEST']._serialized_start=6450 - _globals['_CREATEACTOREGRESSPOLICYREQUEST']._serialized_end=6561 - _globals['_UPDATEACTOREGRESSPOLICYREQUEST']._serialized_start=6563 - _globals['_UPDATEACTOREGRESSPOLICYREQUEST']._serialized_end=6674 - _globals['_DELETEACTOREGRESSPOLICYREQUEST']._serialized_start=6676 - _globals['_DELETEACTOREGRESSPOLICYREQUEST']._serialized_end=6742 - _globals['_GETTAGREQUEST']._serialized_start=6744 - _globals['_GETTAGREQUEST']._serialized_end=6791 - _globals['_LISTTAGSREQUEST']._serialized_start=6793 - _globals['_LISTTAGSREQUEST']._serialized_end=6867 - _globals['_LISTTAGSRESPONSE']._serialized_start=6869 - _globals['_LISTTAGSRESPONSE']._serialized_end=6939 - _globals['_CREATETAGREQUEST']._serialized_start=6941 - _globals['_CREATETAGREQUEST']._serialized_end=6985 - _globals['_UPDATETAGREQUEST']._serialized_start=6987 - _globals['_UPDATETAGREQUEST']._serialized_end=7031 - _globals['_DELETETAGREQUEST']._serialized_start=7033 - _globals['_DELETETAGREQUEST']._serialized_end=7083 - _globals['_DELETEOPTIONS']._serialized_start=7085 - _globals['_DELETEOPTIONS']._serialized_end=7130 - _globals['_LISTWORKERACTORASSIGNMENTSREQUEST']._serialized_start=7132 - _globals['_LISTWORKERACTORASSIGNMENTSREQUEST']._serialized_end=7241 - _globals['_LISTWORKERACTORASSIGNMENTSRESPONSE']._serialized_start=7243 - _globals['_LISTWORKERACTORASSIGNMENTSRESPONSE']._serialized_end=7356 - _globals['_LISTWORKERSREQUEST']._serialized_start=7358 - _globals['_LISTWORKERSREQUEST']._serialized_end=7417 - _globals['_LISTWORKERSRESPONSE']._serialized_start=7419 - _globals['_LISTWORKERSRESPONSE']._serialized_end=7498 - _globals['_GETWORKERREQUEST']._serialized_start=7500 - _globals['_GETWORKERREQUEST']._serialized_end=7553 - _globals['_CREATEWORKERREQUEST']._serialized_start=7555 - _globals['_CREATEWORKERREQUEST']._serialized_end=7608 - _globals['_UPDATEWORKERREQUEST']._serialized_start=7610 - _globals['_UPDATEWORKERREQUEST']._serialized_end=7663 - _globals['_DELETEWORKERREQUEST']._serialized_start=7665 - _globals['_DELETEWORKERREQUEST']._serialized_end=7761 - _globals['_DRAINWORKERREQUEST']._serialized_start=7763 - _globals['_DRAINWORKERREQUEST']._serialized_end=7818 - _globals['_LISTACTORSREQUEST']._serialized_start=7820 - _globals['_LISTACTORSREQUEST']._serialized_end=7896 - _globals['_LISTACTORSRESPONSE']._serialized_start=7898 - _globals['_LISTACTORSRESPONSE']._serialized_end=7974 - _globals['_WORKER']._serialized_start=7977 - _globals['_WORKER']._serialized_end=8303 - _globals['_WORKER_LABELSENTRY']._serialized_start=8258 - _globals['_WORKER_LABELSENTRY']._serialized_end=8303 - _globals['_WORKERSTATUS']._serialized_start=8306 - _globals['_WORKERSTATUS']._serialized_end=8443 - _globals['_WORKERRESOURCES']._serialized_start=8445 - _globals['_WORKERRESOURCES']._serialized_end=8516 - _globals['_ACTORASSIGNMENT']._serialized_start=8519 - _globals['_ACTORASSIGNMENT']._serialized_end=8718 - _globals['_SETWORKERCAPACITYREQUEST']._serialized_start=8720 - _globals['_SETWORKERCAPACITYREQUEST']._serialized_end=8824 - _globals['_SETWORKERCAPACITYRESPONSE']._serialized_start=8826 - _globals['_SETWORKERCAPACITYRESPONSE']._serialized_end=8885 - _globals['_MINTJWTREQUEST']._serialized_start=8887 - _globals['_MINTJWTREQUEST']._serialized_end=8978 - _globals['_MINTJWTRESPONSE']._serialized_start=8980 - _globals['_MINTJWTRESPONSE']._serialized_end=9016 - _globals['_MINTCERTREQUEST']._serialized_start=9019 - _globals['_MINTCERTREQUEST']._serialized_end=9186 - _globals['_MINTCERTRESPONSE']._serialized_start=9188 - _globals['_MINTCERTRESPONSE']._serialized_end=9234 - _globals['_CONTROL']._serialized_start=10271 - _globals['_CONTROL']._serialized_end=12562 - _globals['_ACTORIDENTITY']._serialized_start=12565 - _globals['_ACTORIDENTITY']._serialized_end=12703 - _globals['_WORKERSERVICE']._serialized_start=12705 - _globals['_WORKERSERVICE']._serialized_end=12810 + _globals['_TAGSTATUS']._serialized_end=2373 + _globals['_TAG']._serialized_start=2376 + _globals['_TAG']._serialized_end=2534 + _globals['_ATESPACE']._serialized_start=2536 + _globals['_ATESPACE']._serialized_end=2590 + _globals['_OBJECTREF']._serialized_start=2592 + _globals['_OBJECTREF']._serialized_end=2635 + _globals['_ACTORTEMPLATE']._serialized_start=2638 + _globals['_ACTORTEMPLATE']._serialized_end=2993 + _globals['_RESOURCES']._serialized_start=2995 + _globals['_RESOURCES']._serialized_end=3038 + _globals['_LIMITS']._serialized_start=3040 + _globals['_LIMITS']._serialized_end=3080 + _globals['_GOLDENSNAPSHOTSTATUS']._serialized_start=3083 + _globals['_GOLDENSNAPSHOTSTATUS']._serialized_end=3240 + _globals['_ACTORTEMPLATESTATUS']._serialized_start=3242 + _globals['_ACTORTEMPLATESTATUS']._serialized_end=3325 + _globals['_SANDBOXCONFIG']._serialized_start=3327 + _globals['_SANDBOXCONFIG']._serialized_end=3408 + _globals['_SNAPSHOTSCONFIG']._serialized_start=3411 + _globals['_SNAPSHOTSCONFIG']._serialized_end=3594 + _globals['_ONRESUMECONFIG']._serialized_start=3596 + _globals['_ONRESUMECONFIG']._serialized_end=3653 + _globals['_CONTAINER']._serialized_start=3656 + _globals['_CONTAINER']._serialized_end=3930 + _globals['_SECURITYCONTEXT']._serialized_start=3932 + _globals['_SECURITYCONTEXT']._serialized_end=3993 + _globals['_CAPABILITIES']._serialized_start=3995 + _globals['_CAPABILITIES']._serialized_end=4036 + _globals['_ENVVAR']._serialized_start=4038 + _globals['_ENVVAR']._serialized_end=4075 + _globals['_CONTAINERREADYZ']._serialized_start=4077 + _globals['_CONTAINERREADYZ']._serialized_end=4160 + _globals['_HTTPGETACTION']._serialized_start=4162 + _globals['_HTTPGETACTION']._serialized_end=4205 + _globals['_VOLUME']._serialized_start=4208 + _globals['_VOLUME']._serialized_end=4444 + _globals['_IMAGEVOLUMESOURCE']._serialized_start=4446 + _globals['_IMAGEVOLUMESOURCE']._serialized_end=4484 + _globals['_DURABLEDIRVOLUMESOURCE']._serialized_start=4486 + _globals['_DURABLEDIRVOLUMESOURCE']._serialized_end=4510 + _globals['_EXTERNALVOLUMETEMPLATE']._serialized_start=4512 + _globals['_EXTERNALVOLUMETEMPLATE']._serialized_end=4582 + _globals['_SYSTEMINFOVOLUMESOURCE']._serialized_start=4584 + _globals['_SYSTEMINFOVOLUMESOURCE']._serialized_end=4660 + _globals['_SYSTEMINFODATASOURCE']._serialized_start=4663 + _globals['_SYSTEMINFODATASOURCE']._serialized_end=4795 + _globals['_ACTORMETADATADATASOURCE']._serialized_start=4797 + _globals['_ACTORMETADATADATASOURCE']._serialized_end=4864 + _globals['_ACTORMETADATAITEM']._serialized_start=4866 + _globals['_ACTORMETADATAITEM']._serialized_end=4942 + _globals['_TRUSTBUNDLEDATASOURCE']._serialized_start=4944 + _globals['_TRUSTBUNDLEDATASOURCE']._serialized_end=4995 + _globals['_VOLUMEMOUNT']._serialized_start=4997 + _globals['_VOLUMEMOUNT']._serialized_end=5044 + _globals['_CREATEATESPACEREQUEST']._serialized_start=5046 + _globals['_CREATEATESPACEREQUEST']._serialized_end=5105 + _globals['_GETATESPACEREQUEST']._serialized_start=5107 + _globals['_GETATESPACEREQUEST']._serialized_end=5164 + _globals['_LISTATESPACESREQUEST']._serialized_start=5166 + _globals['_LISTATESPACESREQUEST']._serialized_end=5227 + _globals['_LISTATESPACESRESPONSE']._serialized_start=5229 + _globals['_LISTATESPACESRESPONSE']._serialized_end=5314 + _globals['_DELETEATESPACEREQUEST']._serialized_start=5316 + _globals['_DELETEATESPACEREQUEST']._serialized_end=5376 + _globals['_CREATEACTORTEMPLATEREQUEST']._serialized_start=5378 + _globals['_CREATEACTORTEMPLATEREQUEST']._serialized_end=5453 + _globals['_GETACTORTEMPLATEREQUEST']._serialized_start=5455 + _globals['_GETACTORTEMPLATEREQUEST']._serialized_end=5523 + _globals['_LISTACTORTEMPLATESREQUEST']._serialized_start=5525 + _globals['_LISTACTORTEMPLATESREQUEST']._serialized_end=5609 + _globals['_LISTACTORTEMPLATESRESPONSE']._serialized_start=5611 + _globals['_LISTACTORTEMPLATESRESPONSE']._serialized_end=5712 + _globals['_DELETEACTORTEMPLATEREQUEST']._serialized_start=5714 + _globals['_DELETEACTORTEMPLATEREQUEST']._serialized_end=5785 + _globals['_GETACTORREQUEST']._serialized_start=5787 + _globals['_GETACTORREQUEST']._serialized_end=5838 + _globals['_CREATEACTORREQUEST']._serialized_start=5840 + _globals['_CREATEACTORREQUEST']._serialized_end=5890 + _globals['_UPDATEACTORREQUEST']._serialized_start=5892 + _globals['_UPDATEACTORREQUEST']._serialized_end=5942 + _globals['_SUSPENDACTORREQUEST']._serialized_start=5944 + _globals['_SUSPENDACTORREQUEST']._serialized_end=5999 + _globals['_SUSPENDACTORRESPONSE']._serialized_start=6001 + _globals['_SUSPENDACTORRESPONSE']._serialized_end=6053 + _globals['_PAUSEACTORREQUEST']._serialized_start=6055 + _globals['_PAUSEACTORREQUEST']._serialized_end=6108 + _globals['_PAUSEACTORRESPONSE']._serialized_start=6110 + _globals['_PAUSEACTORRESPONSE']._serialized_end=6160 + _globals['_RESUMEACTORREQUEST']._serialized_start=6162 + _globals['_RESUMEACTORREQUEST']._serialized_end=6230 + _globals['_RESUMEACTORRESPONSE']._serialized_start=6232 + _globals['_RESUMEACTORRESPONSE']._serialized_end=6300 + _globals['_DELETEACTORREQUEST']._serialized_start=6302 + _globals['_DELETEACTORREQUEST']._serialized_end=6375 + _globals['_GETACTOREGRESSPOLICYREQUEST']._serialized_start=6377 + _globals['_GETACTOREGRESSPOLICYREQUEST']._serialized_end=6440 + _globals['_CREATEACTOREGRESSPOLICYREQUEST']._serialized_start=6442 + _globals['_CREATEACTOREGRESSPOLICYREQUEST']._serialized_end=6553 + _globals['_UPDATEACTOREGRESSPOLICYREQUEST']._serialized_start=6555 + _globals['_UPDATEACTOREGRESSPOLICYREQUEST']._serialized_end=6666 + _globals['_DELETEACTOREGRESSPOLICYREQUEST']._serialized_start=6668 + _globals['_DELETEACTOREGRESSPOLICYREQUEST']._serialized_end=6734 + _globals['_GETTAGREQUEST']._serialized_start=6736 + _globals['_GETTAGREQUEST']._serialized_end=6783 + _globals['_LISTTAGSREQUEST']._serialized_start=6785 + _globals['_LISTTAGSREQUEST']._serialized_end=6859 + _globals['_LISTTAGSRESPONSE']._serialized_start=6861 + _globals['_LISTTAGSRESPONSE']._serialized_end=6931 + _globals['_CREATETAGREQUEST']._serialized_start=6933 + _globals['_CREATETAGREQUEST']._serialized_end=6977 + _globals['_UPDATETAGREQUEST']._serialized_start=6979 + _globals['_UPDATETAGREQUEST']._serialized_end=7023 + _globals['_DELETETAGREQUEST']._serialized_start=7025 + _globals['_DELETETAGREQUEST']._serialized_end=7075 + _globals['_DELETEOPTIONS']._serialized_start=7077 + _globals['_DELETEOPTIONS']._serialized_end=7122 + _globals['_LISTWORKERACTORASSIGNMENTSREQUEST']._serialized_start=7124 + _globals['_LISTWORKERACTORASSIGNMENTSREQUEST']._serialized_end=7233 + _globals['_LISTWORKERACTORASSIGNMENTSRESPONSE']._serialized_start=7235 + _globals['_LISTWORKERACTORASSIGNMENTSRESPONSE']._serialized_end=7348 + _globals['_LISTWORKERSREQUEST']._serialized_start=7350 + _globals['_LISTWORKERSREQUEST']._serialized_end=7409 + _globals['_LISTWORKERSRESPONSE']._serialized_start=7411 + _globals['_LISTWORKERSRESPONSE']._serialized_end=7490 + _globals['_GETWORKERREQUEST']._serialized_start=7492 + _globals['_GETWORKERREQUEST']._serialized_end=7545 + _globals['_CREATEWORKERREQUEST']._serialized_start=7547 + _globals['_CREATEWORKERREQUEST']._serialized_end=7600 + _globals['_UPDATEWORKERREQUEST']._serialized_start=7602 + _globals['_UPDATEWORKERREQUEST']._serialized_end=7655 + _globals['_DELETEWORKERREQUEST']._serialized_start=7657 + _globals['_DELETEWORKERREQUEST']._serialized_end=7753 + _globals['_DRAINWORKERREQUEST']._serialized_start=7755 + _globals['_DRAINWORKERREQUEST']._serialized_end=7810 + _globals['_LISTACTORSREQUEST']._serialized_start=7812 + _globals['_LISTACTORSREQUEST']._serialized_end=7888 + _globals['_LISTACTORSRESPONSE']._serialized_start=7890 + _globals['_LISTACTORSRESPONSE']._serialized_end=7966 + _globals['_WORKER']._serialized_start=7969 + _globals['_WORKER']._serialized_end=8295 + _globals['_WORKER_LABELSENTRY']._serialized_start=8250 + _globals['_WORKER_LABELSENTRY']._serialized_end=8295 + _globals['_WORKERSTATUS']._serialized_start=8298 + _globals['_WORKERSTATUS']._serialized_end=8435 + _globals['_WORKERRESOURCES']._serialized_start=8437 + _globals['_WORKERRESOURCES']._serialized_end=8508 + _globals['_ACTORASSIGNMENT']._serialized_start=8511 + _globals['_ACTORASSIGNMENT']._serialized_end=8710 + _globals['_SETWORKERCAPACITYREQUEST']._serialized_start=8712 + _globals['_SETWORKERCAPACITYREQUEST']._serialized_end=8816 + _globals['_SETWORKERCAPACITYRESPONSE']._serialized_start=8818 + _globals['_SETWORKERCAPACITYRESPONSE']._serialized_end=8877 + _globals['_MINTJWTREQUEST']._serialized_start=8879 + _globals['_MINTJWTREQUEST']._serialized_end=8970 + _globals['_MINTJWTRESPONSE']._serialized_start=8972 + _globals['_MINTJWTRESPONSE']._serialized_end=9008 + _globals['_MINTCERTREQUEST']._serialized_start=9011 + _globals['_MINTCERTREQUEST']._serialized_end=9178 + _globals['_MINTCERTRESPONSE']._serialized_start=9180 + _globals['_MINTCERTRESPONSE']._serialized_end=9226 + _globals['_CONTROL']._serialized_start=10263 + _globals['_CONTROL']._serialized_end=12554 + _globals['_ACTORIDENTITY']._serialized_start=12557 + _globals['_ACTORIDENTITY']._serialized_end=12695 + _globals['_WORKERSERVICE']._serialized_start=12697 + _globals['_WORKERSERVICE']._serialized_end=12802 # @@protoc_insertion_point(module_scope) diff --git a/cmd/ateapi/internal/controlapi/functionaltest/actor_test.go b/cmd/ateapi/internal/controlapi/functionaltest/actor_test.go index 3a323a8c4..4e8a4d4d0 100644 --- a/cmd/ateapi/internal/controlapi/functionaltest/actor_test.go +++ b/cmd/ateapi/internal/controlapi/functionaltest/actor_test.go @@ -356,7 +356,7 @@ func TestCreateActor_PendingTag(t *testing.T) { // Simulates a tag creation that failed in while writing the snapshot to // external storage. pending := seedTag(t, tc, "pending-source", "pending", func(tag *ateapipb.Tag) { - tag.Status.InProgressSnapshotUri = tag.GetStatus().GetSnapshot().GetSnapshotUri() + tag.Status.StorageLocation = testStorageLocation tag.Status.Snapshot = nil tag.Status.ActorTemplateUid = tmpl.GetMetadata().GetUid() }) @@ -371,15 +371,17 @@ func TestCreateActor_PendingTag(t *testing.T) { assertGrpcError(t, err, codes.FailedPrecondition, "source Tag is still being created or failed creation") // Finishing the tag creation, so now the tag is qualified to be a tag source. - snapshotURI := pending.GetStatus().GetInProgressSnapshotUri() + snapshotURI, err := resources.NewTagSnapshotURI(pending.GetStatus().GetStorageLocation(), pending.GetMetadata().GetAtespace(), pending.GetMetadata().GetUid()) + if err != nil { + t.Fatalf("NewTagSnapshotURI: %v", err) + } if _, err := tc.persistence.UpdateTag(ctx, resources.TagRefFromTag(pending), store.PreconditionFrom(pending), func(toUpdate *ateapipb.Tag) error { toUpdate.Status.Snapshot = &ateapipb.ExternalSnapshot{ - SnapshotUri: snapshotURI, + SnapshotUri: snapshotURI.String(), ContentScope: ateapipb.SnapshotContentScope_SNAPSHOT_CONTENT_SCOPE_FULL, } - toUpdate.Status.InProgressSnapshotUri = "" return nil }); err != nil { t.Fatalf("finalizing the tag: %v", err) @@ -396,7 +398,7 @@ func TestCreateActor_PendingTag(t *testing.T) { } // The clone points at the tag's snapshot, under the tag's own prefix: the // tag still owns those objects. - if got := clone.GetStatus().GetExternalSnapshot().GetSnapshotUri(); got != snapshotURI { + if got := clone.GetStatus().GetExternalSnapshot().GetSnapshotUri(); got != snapshotURI.String() { t.Errorf("clone external snapshot = %q, want the tag's %q", got, snapshotURI) } } @@ -1375,7 +1377,7 @@ func TestActorLifecycle_WithExternalVolumes(t *testing.T) { }, } createTemplateWithVolumes(t, tc, ns, volumes, mounts) - createWorkerPod(t, tc, ns, "worker-1", "node1", "pool1") + workerName := createWorkerPod(t, tc, ns, "worker-1", "node1", "pool1") // 1. CreateActor createResp, err := tc.client.CreateActor(context.Background(), &ateapipb.CreateActorRequest{ @@ -1423,6 +1425,7 @@ func TestActorLifecycle_WithExternalVolumes(t *testing.T) { } // 4. ResumeActor from paused + waitForWorkerAvailable(t, tc, workerName) resumeResp2, err := tc.client.ResumeActor(context.Background(), &ateapipb.ResumeActorRequest{ Actor: &ateapipb.ObjectRef{Atespace: testAtespace, Name: "actor-vol-lc"}, }) @@ -2213,6 +2216,7 @@ func TestSuspendActor(t *testing.T) { Snapshot: &ateapipb.ExternalSnapshot{SnapshotUri: tagSnapshotURI, ContentScope: sourceActor.GetStatus().GetExternalSnapshot().GetContentScope()}, ActorTemplateUid: tmpl.GetMetadata().GetUid(), SourceActorUid: sourceActor.GetMetadata().GetUid(), + StorageLocation: tmpl.GetSnapshotsConfig().GetStorageLocation(), }, } stored, err := tc.client.GetTag(context.Background(), &ateapipb.GetTagRequest{Tag: tagRef}) diff --git a/cmd/ateapi/internal/controlapi/functionaltest/tag_test.go b/cmd/ateapi/internal/controlapi/functionaltest/tag_test.go index 6ed0e65d7..8f9be6ed3 100644 --- a/cmd/ateapi/internal/controlapi/functionaltest/tag_test.go +++ b/cmd/ateapi/internal/controlapi/functionaltest/tag_test.go @@ -53,24 +53,38 @@ func seedTag(t *testing.T, tc *testContext, actorName, tagName string, opts ...f if err != nil { t.Fatalf("recording the actor's external snapshot: %v", err) } - // The tag owns its own copy, under the tag prefix rather than the actor's. - tagSnapshotURI, err := resources.NewTagSnapshotURI(testStorageLocation, testAtespace, tagName) - if err != nil { - t.Fatalf("NewTagSnapshotURI: %v", err) - } tag := &ateapipb.Tag{ Metadata: &ateapipb.ResourceMetadata{Atespace: testAtespace, Name: tagName}, Scope: ateapipb.TagScope_TAG_SCOPE_ATESPACE, SourceActor: resources.ActorRefFromActor(actor).ToObjectRef(), Status: &ateapipb.TagStatus{ - Snapshot: &ateapipb.ExternalSnapshot{SnapshotUri: tagSnapshotURI.String(), ContentScope: actor.GetStatus().GetExternalSnapshot().GetContentScope()}, - SourceActorUid: actor.GetMetadata().GetUid(), + Snapshot: &ateapipb.ExternalSnapshot{ContentScope: actor.GetStatus().GetExternalSnapshot().GetContentScope()}, + StorageLocation: testStorageLocation, + SourceActorUid: actor.GetMetadata().GetUid(), }, } for _, opt := range opts { opt(tag) } - return storetest.MustCreateTag(t, ctx, tc.persistence, tag) + snapshot := tag.Status.Snapshot + tag.Status.Snapshot = nil + tag = storetest.MustCreateTag(t, ctx, tc.persistence, tag) + if snapshot == nil { + return tag + } + uri, err := resources.NewTagSnapshotURI(testStorageLocation, testAtespace, tag.GetMetadata().GetUid()) + if err != nil { + t.Fatalf("NewTagSnapshotURI: %v", err) + } + snapshot.SnapshotUri = uri.String() + tag, err = tc.persistence.UpdateTag(ctx, resources.TagRefFromTag(tag), store.PreconditionFrom(tag), func(toUpdate *ateapipb.Tag) error { + toUpdate.Status.Snapshot = snapshot + return nil + }) + if err != nil { + t.Fatalf("finalizing tag: %v", err) + } + return tag } // TestCreateTag_ReusedTagName tests that a tag does not move diff --git a/cmd/ateapi/internal/controlapi/tag.go b/cmd/ateapi/internal/controlapi/tag.go index aa77059d6..23f647efe 100644 --- a/cmd/ateapi/internal/controlapi/tag.go +++ b/cmd/ateapi/internal/controlapi/tag.go @@ -299,20 +299,12 @@ func (s *RPCService) releaseTagSnapshot(ctx context.Context, tag *ateapipb.Tag) return nil } atespace, name := tag.GetMetadata().GetAtespace(), tag.GetMetadata().GetName() - for _, snapshotURI := range []string{ - tag.GetStatus().GetSnapshot().GetSnapshotUri(), - tag.GetStatus().GetInProgressSnapshotUri(), - } { - if snapshotURI == "" { - continue - } - uri, err := resources.ParseSnapshotURI(snapshotURI) - if err != nil { - return fmt.Errorf("while parsing the external snapshot %q of tag %s/%s: %w", snapshotURI, atespace, name, err) - } - if err := objectstore.DeletePrefix(ctx, s.objectStore, uri.Prefix()); err != nil { - return fmt.Errorf("while releasing the external snapshot %q of tag %s/%s: %w", snapshotURI, atespace, name, err) - } + uri, err := resources.NewTagSnapshotURI(tag.GetStatus().GetStorageLocation(), atespace, tag.GetMetadata().GetUid()) + if err != nil { + return fmt.Errorf("while resolving the external snapshot of tag %s/%s: %w", atespace, name, err) + } + if err := objectstore.DeletePrefix(ctx, s.objectStore, uri.Prefix()); err != nil { + return fmt.Errorf("while releasing the external snapshot %q of tag %s/%s: %w", uri, atespace, name, err) } return nil } diff --git a/cmd/ateapi/internal/controlapi/tag_test.go b/cmd/ateapi/internal/controlapi/tag_test.go index d3361ca70..69c6ad52d 100644 --- a/cmd/ateapi/internal/controlapi/tag_test.go +++ b/cmd/ateapi/internal/controlapi/tag_test.go @@ -814,7 +814,7 @@ func newTestTag(t *testing.T, name string, actor *ateapipb.Actor) *ateapipb.Tag func newPendingTestTag(t *testing.T, name string, actor *ateapipb.Actor) *ateapipb.Tag { t.Helper() tag := newTestTag(t, name, actor) - tag.Status.InProgressSnapshotUri = tag.GetStatus().GetSnapshot().GetSnapshotUri() + tag.Status.StorageLocation = testStorageLocation tag.Status.Snapshot = nil return tag } @@ -944,19 +944,16 @@ func TestUpdateTag_ConcurrentUpdate(t *testing.T) { // finish the job. func TestDeleteTag_ReleasesExternalSnapshot(t *testing.T) { ctx := context.Background() - persistence, cleanup := storetest.SetupTestStore(t) - t.Cleanup(cleanup) - - actor := newTestSuspendedActor(t, ctx, persistence, testAtespace, "actor-1") - tag := storetest.MustCreateTag(t, ctx, persistence, newTestTag(t, "v1", actor)) - tagRef := resources.TagRefFromTag(tag) - - objects := objectstoretest.New() - uri, err := resources.ParseSnapshotURI(tag.GetStatus().GetSnapshot().GetSnapshotUri()) + persistence := newTestPersistence(t) + template := seedSubstrateTemplate(t, ctx, persistence, "sub-tmpl") + w, objects := newFinalizeWorkflow(persistence) + actor, _ := seedTagSource(t, ctx, persistence, objects, template, "actor-1", "manifest.json", "memory.zst") + tag, err := w.TagActorSnapshot(ctx, tagToCreate(resources.ActorRefFromActor(actor), "v1")) if err != nil { - t.Fatalf("ParseSnapshotURI: %v", err) + t.Fatalf("TagActorSnapshot: %v", err) } - objects.PutSnapshot(t, uri, "manifest.json", "memory.zst") + tagRef := resources.TagRefFromTag(tag) + uri := mustReservedTagSnapshotURI(t, tag) svc := &RPCService{impl: newServiceImpl(persistence, nil), objectStore: objects} // A delete that cannot reach object storage must not drop the row: it is @@ -998,14 +995,29 @@ func TestDeleteTag_ReleasesPendingSnapshot(t *testing.T) { tagRef := resources.TagRefFromTag(tag) objects := objectstoretest.New() - uri, err := resources.ParseSnapshotURI(tag.GetStatus().GetInProgressSnapshotUri()) + uri, err := resources.NewTagSnapshotURI(tag.GetStatus().GetStorageLocation(), tag.GetMetadata().GetAtespace(), tag.GetMetadata().GetUid()) if err != nil { - t.Fatalf("ParseSnapshotURI: %v", err) + t.Fatalf("NewTagSnapshotURI: %v", err) } // What a copy that died halfway through left behind. objects.PutSnapshot(t, uri, "manifest.json") svc := &RPCService{impl: newServiceImpl(persistence, nil), objectStore: objects} + // Cleanup must work without the source actor or its template. + mustUpdateActorStatus(t, ctx, persistence, actor, func(s *ateapipb.ActorStatus) { + s.State = ateapipb.ActorState_ACTOR_STATE_DELETING + }) + if _, err := persistence.DeleteActor(ctx, resources.ActorRefFromActor(actor)); err != nil { + t.Fatalf("DeleteActor: %v", err) + } + objects.OnDelete = func(string, string) error { return errObjectStore } + if _, err := svc.DeleteTag(ctx, &ateapipb.DeleteTagRequest{Tag: tagRef.ToObjectRef()}); !errors.Is(err, errObjectStore) { + t.Fatalf("DeleteTag = %v, want an error wrapping %v", err, errObjectStore) + } + if _, err := persistence.GetTag(ctx, tagRef); err != nil { + t.Fatalf("GetTag after failed cleanup: %v", err) + } + objects.OnDelete = nil if _, err := svc.DeleteTag(ctx, &ateapipb.DeleteTagRequest{Tag: tagRef.ToObjectRef()}); err != nil { t.Fatalf("DeleteTag: %v", err) } diff --git a/cmd/ateapi/internal/controlapi/workflow_tag.go b/cmd/ateapi/internal/controlapi/workflow_tag.go index d27b9071e..880ea9c46 100644 --- a/cmd/ateapi/internal/controlapi/workflow_tag.go +++ b/cmd/ateapi/internal/controlapi/workflow_tag.go @@ -33,10 +33,9 @@ import ( // or deleting the actor does not garbage collect the tag's snapshot. // // The tag is built in 3 phases: -// 1. Record intent: in status.in_progress_snapshot_uri -// 2. Write snapshot to the remote storage indicated in status.in_progress_snapshot_uri -// 3. Finalize: clear status.in_progress_snapshot_uri and write the final -// snapshot object to the tag. +// 1. Reserve the tag and record its storage location. +// 2. Copy the snapshot under the reserved tag's UID. +// 3. Finalize: write the completed snapshot object to the tag. // // The tag captures whichever snapshot the actor holds when the workflow runs. // An actor keeps no snapshot history, so a suspend that lands first moves what @@ -76,10 +75,14 @@ func (w *ActorWorkflow) TagActorSnapshot(ctx context.Context, tag *ateapipb.Tag) if err != nil { return nil, err } - if err := w.ensureTagSnapshotCopied(leaseCtx, reserved, snapshot); err != nil { + dst, err := resources.NewTagSnapshotURI(reserved.GetStatus().GetStorageLocation(), tagRef.Atespace, reserved.GetMetadata().GetUid()) + if err != nil { + return nil, fmt.Errorf("while building the snapshot URI for tag %s: %w", tagRef, err) + } + if err := w.ensureTagSnapshotCopied(leaseCtx, reserved, snapshot, dst); err != nil { return nil, err } - return w.ensureTagFinalized(leaseCtx, reserved, snapshot) + return w.ensureTagFinalized(leaseCtx, reserved, snapshot, dst) } // loadActorForTag fetches the actor to tag and its template, and checks that @@ -115,8 +118,7 @@ func (w *ActorWorkflow) loadActorForTag(ctx context.Context, actorRef resources. return actor, actorTemplate, nil } -// ensureTagReserved takes the tag's name and sets status.in_progress_snapshot_uri -// to express the intent to create a new tag. +// ensureTagReserved takes the tag's name and records the storage location. // // A name already taken is AlreadyExists, whether the tag holding it is finished // or was left pending by a create that died. Resuming a pending row would mean @@ -127,9 +129,9 @@ func (w *ActorWorkflow) ensureTagReserved(ctx context.Context, tagRef resources. ctx, done := stepSpan(ctx, "ReserveTag") defer func() { err = done(err) }() - dst, err := resources.NewTagSnapshotURI(actorTemplate.GetSnapshotsConfig().GetStorageLocation(), tagRef.Atespace, resources.NewSnapshotName()) - if err != nil { - return nil, fmt.Errorf("while building the snapshot URI for tag %s: %w", tagRef, err) + location := actorTemplate.GetSnapshotsConfig().GetStorageLocation() + if err := resources.ValidateSnapshotLocation(location); err != nil { + return nil, fmt.Errorf("invalid storage location for tag %s: %w", tagRef, err) } tagToCreate := &ateapipb.Tag{ Metadata: &ateapipb.ResourceMetadata{Atespace: tagRef.Atespace, Name: tagRef.Name}, @@ -141,9 +143,9 @@ func (w *ActorWorkflow) ensureTagReserved(ctx context.Context, tagRef resources. // and a tag that claimed the new template would hand clones the old template's // memory under the new one's identity, past the data-only downgrade a resume of // the actor itself would take. - ActorTemplateUid: actor.GetStatus().GetCurrentActorTemplateUid(), - InProgressSnapshotUri: dst.String(), - SourceActorUid: actor.GetMetadata().GetUid(), + ActorTemplateUid: actor.GetStatus().GetCurrentActorTemplateUid(), + StorageLocation: location, + SourceActorUid: actor.GetMetadata().GetUid(), }, } @@ -160,10 +162,9 @@ func (w *ActorWorkflow) ensureTagReserved(ctx context.Context, tagRef resources. } // ensureTagSnapshotCopied copies the actor's external snapshot to the tag's own -// prefix, the one the reserved row names. That prefix is freshly minted, so it -// is empty by construction and the copy never blends with objects some other -// attempt left. -func (w *ActorWorkflow) ensureTagSnapshotCopied(ctx context.Context, tag *ateapipb.Tag, snapshot *ateapipb.ExternalSnapshot) (err error) { +// prefix, derived from the reserved row's freshly minted UID. The prefix is +// empty by construction, so the copy never blends with another attempt's objects. +func (w *ActorWorkflow) ensureTagSnapshotCopied(ctx context.Context, tag *ateapipb.Tag, snapshot *ateapipb.ExternalSnapshot, dst resources.SnapshotURI) (err error) { ctx, done := stepSpan(ctx, "CopyTagSnapshot") defer func() { err = done(err) }() @@ -176,33 +177,26 @@ func (w *ActorWorkflow) ensureTagSnapshotCopied(ctx context.Context, tag *ateapi if err != nil { return fmt.Errorf("while parsing the external snapshot %q of the source actor: %w", snapshot.GetSnapshotUri(), err) } - dst, err := resources.ParseSnapshotURI(tag.GetStatus().GetInProgressSnapshotUri()) - if err != nil { - return fmt.Errorf("while parsing the in-progress snapshot %q of tag %s: %w", tag.GetStatus().GetInProgressSnapshotUri(), tagRef, err) - } if err := objectstore.CopyPrefix(ctx, w.objectStore, src.Prefix(), dst.Prefix()); err != nil { return fmt.Errorf("while copying the external snapshot for tag %s: %w", tagRef, err) } return nil } -// ensureTagFinalized publishes the copy: it sets status.snapshot to the URI the -// row already names and clears status.in_progress_snapshot_uri. Until this -// lands the tag is pending — visible, unusable, and naming exactly the objects -// an unfinished create stranded, so deleting it collects them. -func (w *ActorWorkflow) ensureTagFinalized(ctx context.Context, tag *ateapipb.Tag, snapshot *ateapipb.ExternalSnapshot) (_ *ateapipb.Tag, err error) { +// ensureTagFinalized publishes the copy by setting status.snapshot. Until this +// lands the tag is pending and unusable; deleting it collects any partial copy. +func (w *ActorWorkflow) ensureTagFinalized(ctx context.Context, tag *ateapipb.Tag, snapshot *ateapipb.ExternalSnapshot, dst resources.SnapshotURI) (_ *ateapipb.Tag, err error) { ctx, done := stepSpan(ctx, "FinalizeTag") defer func() { err = done(err) }() tagRef := resources.TagRefFromTag(tag) // The copy is byte-identical to the source, so it carries the same content. finalSnapshot := &ateapipb.ExternalSnapshot{ - SnapshotUri: tag.GetStatus().GetInProgressSnapshotUri(), + SnapshotUri: dst.String(), ContentScope: snapshot.GetContentScope(), } stored, err := w.store.UpdateTag(ctx, tagRef, store.PreconditionFrom(tag), func(toUpdate *ateapipb.Tag) error { toUpdate.Status.Snapshot = finalSnapshot - toUpdate.Status.InProgressSnapshotUri = "" return nil }) if err != nil { diff --git a/cmd/ateapi/internal/controlapi/workflow_tag_test.go b/cmd/ateapi/internal/controlapi/workflow_tag_test.go index 0677f94b9..3e239860b 100644 --- a/cmd/ateapi/internal/controlapi/workflow_tag_test.go +++ b/cmd/ateapi/internal/controlapi/workflow_tag_test.go @@ -91,8 +91,8 @@ func TestTagActorSnapshot(t *testing.T) { if tagSnapshot == "" || tagSnapshot == actorSnapshot.String() { t.Fatalf("tag snapshot uri = %q, want a copy of its own rather than the actor's %q", tagSnapshot, actorSnapshot) } - if got := tag.GetStatus().GetInProgressSnapshotUri(); got != "" { - t.Errorf("in-progress snapshot uri = %q, want cleared once the tag is finished", got) + if want := mustReservedTagSnapshotURI(t, tag).String(); tagSnapshot != want { + t.Errorf("tag snapshot uri = %q, want UID-based URI %q", tagSnapshot, want) } if got, want := tag.GetStatus().GetSourceActorUid(), actor.GetMetadata().GetUid(); got != want { t.Errorf("source actor uid = %q, want %q", got, want) @@ -251,11 +251,8 @@ func TestTagActorSnapshot_RecreateAfterCopyFailure(t *testing.T) { if got := pending.GetStatus().GetSnapshot().GetSnapshotUri(); got != "" { t.Errorf("snapshot uri after the failure = %q, want unset: the copy never finished", got) } - stranded := pending.GetStatus().GetInProgressSnapshotUri() - if stranded == "" { - t.Fatal("in-progress snapshot uri after the failure is empty, want the prefix the copy stranded") - } - strandedURI := mustParseSnapshotURI(t, stranded) + strandedURI := mustReservedTagSnapshotURI(t, pending) + stranded := strandedURI.String() if diff := cmp.Diff([]string{"manifest.json"}, objects.Snapshot(t, strandedURI)); diff != "" { t.Errorf("the stranded partial copy mismatch (-want +got):\n%s", diff) } @@ -270,7 +267,7 @@ func TestTagActorSnapshot_RecreateAfterCopyFailure(t *testing.T) { if err != nil { t.Fatalf("GetTag after the refused create: %v", err) } - if got := stillPending.GetStatus().GetInProgressSnapshotUri(); got != stranded { + if got := mustReservedTagSnapshotURI(t, stillPending).String(); got != stranded { t.Errorf("in-progress snapshot uri after the refused create = %q, want the prefix the row already named, %q", got, stranded) } if diff := cmp.Diff([]string{"manifest.json"}, objects.Snapshot(t, strandedURI)); diff != "" { @@ -294,8 +291,8 @@ func TestTagActorSnapshot_RecreateAfterCopyFailure(t *testing.T) { if recreated == "" || recreated == stranded { t.Fatalf("snapshot uri after the delete = %q, want a fresh prefix rather than the stranded %q", recreated, stranded) } - if got := tag.GetStatus().GetInProgressSnapshotUri(); got != "" { - t.Errorf("in-progress snapshot uri after the delete = %q, want cleared", got) + if want := mustReservedTagSnapshotURI(t, tag).String(); recreated != want { + t.Errorf("recreated tag snapshot uri = %q, want UID-based URI %q", recreated, want) } if diff := cmp.Diff([]string{"manifest.json", "memory.zst"}, objects.Snapshot(t, mustParseSnapshotURI(t, recreated))); diff != "" { t.Errorf("the tag's external snapshot after the delete mismatch (-want +got):\n%s", diff) @@ -333,7 +330,7 @@ func TestTagActorSnapshot_RacesDelete(t *testing.T) { t.Errorf("GetTag during the copy: %v", err) return } - pendingURI = reserved.GetStatus().GetInProgressSnapshotUri() + pendingURI = mustReservedTagSnapshotURI(t, reserved).String() _, deleteErr = svc.DeleteTag(ctx, &ateapipb.DeleteTagRequest{Tag: tagRef.ToObjectRef()}) }) return nil @@ -393,7 +390,7 @@ func TestTagActorSnapshot_NameTakenByAnotherActor(t *testing.T) { if err != nil { t.Fatalf("GetTag: %v", err) } - strandedURI := mustParseSnapshotURI(t, pending.GetStatus().GetInProgressSnapshotUri()) + strandedURI := mustReservedTagSnapshotURI(t, pending) // The second actor asks for the same name, with object storage healthy: it // must not inherit the first actor's prefix. @@ -417,3 +414,12 @@ func TestTagActorSnapshot_NameTakenByAnotherActor(t *testing.T) { t.Errorf("the second actor's external snapshot mismatch (-want +got):\n%s", diff) } } + +func mustReservedTagSnapshotURI(t *testing.T, tag *ateapipb.Tag) resources.SnapshotURI { + t.Helper() + uri, err := resources.NewTagSnapshotURI(tag.GetStatus().GetStorageLocation(), tag.GetMetadata().GetAtespace(), tag.GetMetadata().GetUid()) + if err != nil { + t.Fatalf("NewTagSnapshotURI: %v", err) + } + return uri +} diff --git a/cmd/ateapi/internal/controlapi/zz_generated.validation.go b/cmd/ateapi/internal/controlapi/zz_generated.validation.go index 79ec6b449..9858e1ffa 100644 --- a/cmd/ateapi/internal/controlapi/zz_generated.validation.go +++ b/cmd/ateapi/internal/controlapi/zz_generated.validation.go @@ -6251,7 +6251,7 @@ func Validate_TagStatus( } // field ateapipb.TagStatus.ActorTemplateUid has no validation - // field ateapipb.TagStatus.InProgressSnapshotUri has no validation + // field ateapipb.TagStatus.StorageLocation has no validation // field ateapipb.TagStatus.SourceActorUid has no validation return errs } diff --git a/cmd/ateapi/internal/store/atepg/atepg.go b/cmd/ateapi/internal/store/atepg/atepg.go index fabede86d..a30ccef29 100644 --- a/cmd/ateapi/internal/store/atepg/atepg.go +++ b/cmd/ateapi/internal/store/atepg/atepg.go @@ -1157,8 +1157,8 @@ func validateUpdateTagMutation(storedTag, mutatedTag *ateapipb.Tag) error { if stored, mutated := storedTag.GetStatus().GetSnapshot(), mutatedTag.GetStatus().GetSnapshot(); stored != nil && !proto.Equal(stored, mutated) { return fmt.Errorf("status.snapshot is immutable once set: mutation changed it from %s to %s", stored, mutated) } - if stored, mutated := storedTag.GetStatus().GetInProgressSnapshotUri(), mutatedTag.GetStatus().GetInProgressSnapshotUri(); stored != mutated && mutated != "" { - return fmt.Errorf("status.in_progress_snapshot_uri may only be cleared: mutation changed it from %q to %q", stored, mutated) + if stored, mutated := storedTag.GetStatus().GetStorageLocation(), mutatedTag.GetStatus().GetStorageLocation(); stored != mutated { + return fmt.Errorf("status.storage_location is immutable: mutation changed it from %q to %q", stored, mutated) } if stored, mutated := storedTag.GetStatus().GetActorTemplateUid(), mutatedTag.GetStatus().GetActorTemplateUid(); stored != mutated { return fmt.Errorf("status.actor_template_uid is immutable: mutation changed it from %q to %q", stored, mutated) diff --git a/cmd/ateapi/internal/store/atepg/atepg_test.go b/cmd/ateapi/internal/store/atepg/atepg_test.go index a783be83b..d2ed62399 100644 --- a/cmd/ateapi/internal/store/atepg/atepg_test.go +++ b/cmd/ateapi/internal/store/atepg/atepg_test.go @@ -676,8 +676,8 @@ func TestCreateTag_TagForeignKeyErrors(t *testing.T) { _, err := s.CreateTag(ctx, &ateapipb.Tag{ Metadata: &ateapipb.ResourceMetadata{Atespace: "gone", Name: "latest"}, Status: &ateapipb.TagStatus{ - InProgressSnapshotUri: "gs://bucket/atespaces/gone/tags/latest", - SourceActorUid: actor.GetMetadata().GetUid(), + StorageLocation: "gs://bucket", + SourceActorUid: actor.GetMetadata().GetUid(), }, }) if !errors.Is(err, store.ErrFailedPrecondition) { diff --git a/cmd/ateapi/internal/store/storecontract/contract.go b/cmd/ateapi/internal/store/storecontract/contract.go index 99f47125e..65066a2aa 100644 --- a/cmd/ateapi/internal/store/storecontract/contract.go +++ b/cmd/ateapi/internal/store/storecontract/contract.go @@ -998,16 +998,16 @@ func newTestSuspendedActor(atespace, name string) *ateapipb.Actor { // newTestInProgressTag builds the row CreateTag reserves for a // tag of actor: ATESPACE-scoped, with no snapshot yet and the destination of -// the copy still to come recorded in status.in_progress_snapshot_uri. +// the copy still to come derived from status.storage_location and its UID. func newTestInProgressTag(name string, actor *ateapipb.Actor) *ateapipb.Tag { atespace := actor.GetMetadata().GetAtespace() return &ateapipb.Tag{ Metadata: &ateapipb.ResourceMetadata{Atespace: atespace, Name: name}, Scope: ateapipb.TagScope_TAG_SCOPE_ATESPACE, Status: &ateapipb.TagStatus{ - ActorTemplateUid: "template-uid", - InProgressSnapshotUri: testTagSnapshotURI("gs://private", atespace, name), - SourceActorUid: actor.GetMetadata().GetUid(), + ActorTemplateUid: "template-uid", + StorageLocation: "gs://private", + SourceActorUid: actor.GetMetadata().GetUid(), }, } } @@ -1062,18 +1062,17 @@ func runTagContractTests(t *testing.T, setup func(t *testing.T) store.Interface) t.Errorf("missing GetTag = %v, want ErrNotFound", err) } - // Finalize: naming the snapshot and clearing the in-progress URI - // together is the one transition status.snapshot is allowed. + // Finalize: publishing the copy is the one transition status.snapshot allows. ready, err := s.UpdateTag(ctx, resources.TagRef{Atespace: "team-a", Name: "production"}, store.PreconditionFrom(tag), finalizeTag) if err != nil { t.Fatalf("finalizing tag failed: %v", err) } - // Check if the pending URI was promoted to the Snapshot field. - if ready.GetStatus().GetSnapshot().GetSnapshotUri() != tag.GetStatus().GetInProgressSnapshotUri() { - t.Errorf("finalized tag snapshot uri = %q, want the reserved %q", ready.GetStatus().GetSnapshot().GetSnapshotUri(), tag.GetStatus().GetInProgressSnapshotUri()) + wantURI := testTagSnapshotURI(tag.GetStatus().GetStorageLocation(), "team-a", tag.GetMetadata().GetUid()) + if got := ready.GetStatus().GetSnapshot().GetSnapshotUri(); got != wantURI { + t.Errorf("finalized tag snapshot uri = %q, want %q", got, wantURI) } - if ready.GetStatus().GetInProgressSnapshotUri() != "" { - t.Errorf("finalized tag in-progress uri = %q, want it cleared", ready.GetStatus().GetInProgressSnapshotUri()) + if got := ready.GetStatus().GetStorageLocation(); got != tag.GetStatus().GetStorageLocation() { + t.Errorf("finalized tag storage location = %q, want unchanged", got) } updated, err := s.UpdateTag(ctx, resources.TagRef{Atespace: "team-a", Name: "production"}, store.PreconditionFrom(ready), func(toUpdate *ateapipb.Tag) error { @@ -1134,11 +1133,15 @@ func runTagContractTests(t *testing.T, setup func(t *testing.T) store.Interface) }, }, { - name: "reopening the in-progress snapshot uri", + name: "storage location", mutate: func(toUpdate *ateapipb.Tag) { - toUpdate.Status.InProgressSnapshotUri = testTagSnapshotURI("gs://private", "team-a", "again") + toUpdate.Status.StorageLocation = "gs://elsewhere" }, }, + { + name: "clearing the storage location", + mutate: func(toUpdate *ateapipb.Tag) { toUpdate.Status.StorageLocation = "" }, + }, { name: "actor template uid", mutate: func(toUpdate *ateapipb.Tag) { toUpdate.Status.ActorTemplateUid = "other-template-uid" }, @@ -1280,14 +1283,12 @@ func runTagContractTests(t *testing.T, setup func(t *testing.T) store.Interface) } // finalizeTag mutates a reserved tag the way the tag workflow's second -// transaction does: it names the copy that landed and clears the in-progress -// URI, in one update. +// transaction does: it names the copy that landed under the tag UID. func finalizeTag(toUpdate *ateapipb.Tag) error { toUpdate.Status.Snapshot = &ateapipb.ExternalSnapshot{ - SnapshotUri: toUpdate.GetStatus().GetInProgressSnapshotUri(), + SnapshotUri: testTagSnapshotURI(toUpdate.GetStatus().GetStorageLocation(), toUpdate.GetMetadata().GetAtespace(), toUpdate.GetMetadata().GetUid()), ContentScope: ateapipb.SnapshotContentScope_SNAPSHOT_CONTENT_SCOPE_FULL, } - toUpdate.Status.InProgressSnapshotUri = "" return nil } diff --git a/cmd/kubectl-ate/internal/printer/printer_test.go b/cmd/kubectl-ate/internal/printer/printer_test.go index 0d99e0395..7031af43d 100644 --- a/cmd/kubectl-ate/internal/printer/printer_test.go +++ b/cmd/kubectl-ate/internal/printer/printer_test.go @@ -489,7 +489,7 @@ func TestPrintTagsTo_Table(t *testing.T) { }, Scope: ateapipb.TagScope_TAG_SCOPE_ATESPACE, Status: &ateapipb.TagStatus{ - InProgressSnapshotUri: "gs://private/atespaces/team-a/tags/9f1c", + StorageLocation: "gs://private", }, }, } diff --git a/docs/api-guide.md b/docs/api-guide.md index 5a5b6fa98..051ecf76f 100644 --- a/docs/api-guide.md +++ b/docs/api-guide.md @@ -327,16 +327,16 @@ snapshotsConfig: ``` /atespaces//actors//snapshots/ -/atespaces//tags/ +/atespaces//tags/ ``` The objects of a snapshot (its manifest, memory image, durable-data tar) are named below it. So for the template above, a snapshot of an actor in atespace `team-a` is stored at `gs://my-bucket/secret-agent/atespaces/team-a/actors/3f8b…/snapshots/f47ac10b-…`, and the template's golden snapshot — the golden actor lives in the reserved `ate-golden` atespace — under `gs://my-bucket/secret-agent/atespaces/ate-golden/actors//snapshots/`. -An actor takes a series of snapshots over its life, so it gets a prefix of its own and each snapshot sits below it. A tag holds exactly one, so the tag's prefix *is* its snapshot's. The actor level is keyed on the UID rather than the name, so an actor recreated under a name that was used before never inherits its predecessor's objects. +An actor takes a series of snapshots over its life, so it gets a prefix of its own and each snapshot sits below it. A tag holds exactly one, so the tag's prefix *is* its snapshot's. Both owners are keyed on their UID, so recreating an actor or tag under the same name never inherits its predecessor's objects. A pending tag records its base location in `status.storageLocation`; together with its atespace and UID, this identifies any partial copy to collect if creation fails. An owner is collected by deleting everything under its prefix, and it can delete nothing else. That is what makes a borrowed snapshot safe: an actor created from a tag points at a URI under `tags/`, which its own prefix does not cover. See [Snapshot lifetime](#snapshot-lifetime). -An `Actor` reports its current snapshot in the server-managed `status.externalSnapshot`, a `Tag` in `status.snapshot`, and an `ActorTemplate` its golden one in `status.goldenSnapshotStatus.goldenSnapshot` — each an `ExternalSnapshot` carrying `snapshotUri` and the `contentScope` it captured. The URI is recorded when the snapshot is written, not recomputed on read, so the layout can change in future versions without stranding existing snapshots. All three are server-owned: do not send them on input, and parse a URI only against the scheme above. +An `Actor` reports its current snapshot in the server-managed `status.externalSnapshot`, a `Tag` in `status.snapshot`, and an `ActorTemplate` its golden one in `status.goldenSnapshotStatus.goldenSnapshot` — each an `ExternalSnapshot` carrying `snapshotUri` and the `contentScope` it captured. The URI is recorded when the snapshot is written. All three are server-owned: do not send them on input, and parse a URI only against the scheme above. An `ActorTemplate` belongs to one atespace, but one `storageLocation` still holds snapshots for many atespaces: the golden actor lives in the reserved `ate-golden` atespace, and a `PUBLISHED` snapshot may be cloned from other atespaces. The `` level exists so that access can be granted per tenant: an object-storage policy can only condition on an **object-name prefix**, and cannot read the identity recorded inside a snapshot's manifest. Binding a per-atespace grant on GCS looks like: diff --git a/internal/e2e/suites/demo/demo_test.go b/internal/e2e/suites/demo/demo_test.go index c5e6e5dc2..784aa23c8 100644 --- a/internal/e2e/suites/demo/demo_test.go +++ b/internal/e2e/suites/demo/demo_test.go @@ -152,8 +152,12 @@ func TestActorSnapshotLifecycle(t *testing.T) { if got := tagToUpdate.GetStatus().GetSnapshot().GetSnapshotUri(); got == "" || got == snapshotURI { t.Fatalf("Tag %s snapshot uri = %q, want a copy of its own", tagRef.GetName(), got) } - if got := tagToUpdate.GetStatus().GetInProgressSnapshotUri(); got != "" { - t.Fatalf("Tag %s in-progress snapshot uri = %q, want it cleared", tagRef.GetName(), got) + wantTagURI, err := resources.NewTagSnapshotURI(tagToUpdate.GetStatus().GetStorageLocation(), tagToUpdate.GetMetadata().GetAtespace(), tagToUpdate.GetMetadata().GetUid()) + if err != nil { + t.Fatalf("NewTagSnapshotURI: %v", err) + } + if got := tagToUpdate.GetStatus().GetSnapshot().GetSnapshotUri(); got != wantTagURI.String() { + t.Errorf("tag snapshot URI = %q, want UID-based URI %q", got, wantTagURI) } listed, err := clients.SubstrateAPI.ListTags(ctx, &ateapipb.ListTagsRequest{Atespace: demoAtespace}) if err != nil { diff --git a/internal/resources/snapshot.go b/internal/resources/snapshot.go index 6c53a16da..c9b553e0e 100644 --- a/internal/resources/snapshot.go +++ b/internal/resources/snapshot.go @@ -60,9 +60,7 @@ func (p StoragePrefix) String() string { return p.uri } type SnapshotOwner struct { kind string atespace string - // id distinguishes one owner from every other of its kind: an Actor's UID, - // which no later Actor reuses, or, for a tag, the name of the single - // snapshot it owns. + // id is the owning Actor's or Tag's UID, which no later resource reuses. id string } @@ -73,12 +71,10 @@ func ActorSnapshotOwner(atespace, actorUID string) SnapshotOwner { return SnapshotOwner{kind: actorsOwnerKind, atespace: atespace, id: actorUID} } -// TagSnapshotOwner returns the owner of the one snapshot a Tag holds. A tag -// never takes a second snapshot, so its prefix is that snapshot's prefix, and -// the name is minted fresh rather than derived from the tag: a recreated tag -// cannot compute its way onto the objects its predecessor left. -func TagSnapshotOwner(atespace, snapshotName string) SnapshotOwner { - return SnapshotOwner{kind: tagsOwnerKind, atespace: atespace, id: snapshotName} +// TagSnapshotOwner returns the owner of the one snapshot a Tag holds. It is +// keyed on the UID so a recreated tag never inherits its predecessor's objects. +func TagSnapshotOwner(atespace, tagUID string) SnapshotOwner { + return SnapshotOwner{kind: tagsOwnerKind, atespace: atespace, id: tagUID} } // IsZero reports whether o is the zero SnapshotOwner. @@ -129,7 +125,7 @@ func (o SnapshotOwner) Prefix(location string) (StoragePrefix, error) { // gs://bucket/root location // gs://bucket/root/atespaces/team-a/actors/ an Actor's prefix // gs://bucket/root/atespaces/team-a/actors//snapshots/ one of its snapshots -// gs://bucket/root/atespaces/team-a/tags/ a tag's prefix, and +// gs://bucket/root/atespaces/team-a/tags/ a tag's prefix, and // its only snapshot type SnapshotURI struct { uri string @@ -160,13 +156,13 @@ func NewActorSnapshotURI(location, atespace, actorUID, name string) (SnapshotURI // NewTagSnapshotURI returns the URI of the snapshot a Tag owns, stored under // an ActorTemplate's snapshotsConfig.location. The tag's prefix and its // snapshot's are the same: a tag holds exactly one snapshot. -func NewTagSnapshotURI(location, atespace, name string) (SnapshotURI, error) { - owner := TagSnapshotOwner(atespace, name) +func NewTagSnapshotURI(location, atespace, tagUID string) (SnapshotURI, error) { + owner := TagSnapshotOwner(atespace, tagUID) prefix, err := owner.Prefix(location) if err != nil { return SnapshotURI{}, err } - return SnapshotURI{uri: prefix.String(), location: location, owner: owner, ownerPrefix: prefix.String(), name: name}, nil + return SnapshotURI{uri: prefix.String(), location: location, owner: owner, ownerPrefix: prefix.String(), name: tagUID}, nil } // ParseSnapshotURI parses a given snapshot URI. @@ -184,7 +180,7 @@ func ParseSnapshotURI(uri string) (SnapshotURI, error) { case n >= 6 && segments[n-6] == atespacesPathSegment && segments[n-4] == actorsOwnerKind && segments[n-2] == snapshotsPathSegment: u.Path = strings.Join(segments[:n-6], "/") return NewActorSnapshotURI(u.String(), segments[n-5], segments[n-3], segments[n-1]) - // /root/atespaces/team-a/tags/ + // /root/atespaces/team-a/tags/ // n-4 n-3 n-2 n-1 case n >= 4 && segments[n-4] == atespacesPathSegment && segments[n-2] == tagsOwnerKind: u.Path = strings.Join(segments[:n-4], "/") diff --git a/internal/resources/snapshot_test.go b/internal/resources/snapshot_test.go index e8e777a7b..195ef8da9 100644 --- a/internal/resources/snapshot_test.go +++ b/internal/resources/snapshot_test.go @@ -164,7 +164,7 @@ func TestNewTagSnapshotURI(t *testing.T) { name string location string atespace string - snapshot string + tagUID string want string wantErr bool }{ @@ -172,66 +172,66 @@ func TestNewTagSnapshotURI(t *testing.T) { name: "no trailing slash", location: "gs://bucket/root", atespace: "team-a", - snapshot: "snap-1", - want: "gs://bucket/root/atespaces/team-a/tags/snap-1", + tagUID: "tag-uid-1", + want: "gs://bucket/root/atespaces/team-a/tags/tag-uid-1", }, { name: "trailing slash", location: "gs://bucket/root/", atespace: "team-a", - snapshot: "snap-1", - want: "gs://bucket/root/atespaces/team-a/tags/snap-1", + tagUID: "tag-uid-1", + want: "gs://bucket/root/atespaces/team-a/tags/tag-uid-1", }, { name: "bucket only", location: "gs://bucket", atespace: "team-a", - snapshot: "snap-1", - want: "gs://bucket/atespaces/team-a/tags/snap-1", + tagUID: "tag-uid-1", + want: "gs://bucket/atespaces/team-a/tags/tag-uid-1", }, { name: "empty location", location: "", atespace: "team-a", - snapshot: "snap-1", + tagUID: "tag-uid-1", wantErr: true, }, { name: "invalid atespace", location: "gs://bucket/root", atespace: "Team_A", - snapshot: "snap-1", + tagUID: "tag-uid-1", wantErr: true, }, { - name: "invalid snapshot name", + name: "invalid tag UID", location: "gs://bucket/root", atespace: "team-a", - snapshot: "2026-08-05T10:04:05Z", + tagUID: "2026-08-05T10:04:05Z", wantErr: true, }, { - name: "empty snapshot name", + name: "empty tag UID", location: "gs://bucket/root", atespace: "team-a", - snapshot: "", + tagUID: "", wantErr: true, }, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { - got, err := NewTagSnapshotURI(tc.location, tc.atespace, tc.snapshot) + got, err := NewTagSnapshotURI(tc.location, tc.atespace, tc.tagUID) if (err != nil) != tc.wantErr { - t.Fatalf("NewTagSnapshotURI(%q, %q, %q) error = %v, wantErr %t", tc.location, tc.atespace, tc.snapshot, err, tc.wantErr) + t.Fatalf("NewTagSnapshotURI(%q, %q, %q) error = %v, wantErr %t", tc.location, tc.atespace, tc.tagUID, err, tc.wantErr) } if got.String() != tc.want { - t.Errorf("NewTagSnapshotURI(%q, %q, %q) = %q, want %q", tc.location, tc.atespace, tc.snapshot, got, tc.want) + t.Errorf("NewTagSnapshotURI(%q, %q, %q) = %q, want %q", tc.location, tc.atespace, tc.tagUID, got, tc.want) } if got.OwnerPrefix().String() != got.String() { - t.Errorf("NewTagSnapshotURI(%q, %q, %q).OwnerPrefix() = %q, want the snapshot's own prefix %q", tc.location, tc.atespace, tc.snapshot, got.OwnerPrefix(), got) + t.Errorf("NewTagSnapshotURI(%q, %q, %q).OwnerPrefix() = %q, want the snapshot's own prefix %q", tc.location, tc.atespace, tc.tagUID, got.OwnerPrefix(), got) } if tc.wantErr && !got.IsZero() { - t.Errorf("NewTagSnapshotURI(%q, %q, %q) returned %q alongside an error, want the zero value", tc.location, tc.atespace, tc.snapshot, got) + t.Errorf("NewTagSnapshotURI(%q, %q, %q) returned %q alongside an error, want the zero value", tc.location, tc.atespace, tc.tagUID, got) } }) } diff --git a/pkg/proto/ateapipb/ateapi.pb.go b/pkg/proto/ateapipb/ateapi.pb.go index 54359ee6d..7184c3d57 100644 --- a/pkg/proto/ateapipb/ateapi.pb.go +++ b/pkg/proto/ateapipb/ateapi.pb.go @@ -1755,11 +1755,11 @@ type TagStatus struct { // UID of the ActorTemplate the snapshot was taken under. Actors can only be // seeded from a tag under the same template. ActorTemplateUid string `protobuf:"bytes,2,opt,name=actor_template_uid,json=actorTemplateUid,proto3" json:"actor_template_uid,omitempty"` - // in_progress_snapshot_uri is where CreateTag is copying the tag's own - // snapshot to. It is minted before a single object is written and cleared - // once snapshot is set, so a tag left with it set names exactly the objects - // its unfinished create stranded, and deleting the tag collects them. - InProgressSnapshotUri string `protobuf:"bytes,3,opt,name=in_progress_snapshot_uri,json=inProgressSnapshotUri,proto3" json:"in_progress_snapshot_uri,omitempty"` + // Immutable base storage location captured when the tag is reserved. Its + // snapshot lives at /atespaces//tags/. + // Retained independently of the source actor and template so deleting an + // unfinished tag can collect any partial copy after those resources are gone. + StorageLocation string `protobuf:"bytes,3,opt,name=storage_location,json=storageLocation,proto3" json:"storage_location,omitempty"` // source_actor_uid is the UID of the Actor this tag's snapshot was copied // from. SourceActorUid string `protobuf:"bytes,4,opt,name=source_actor_uid,json=sourceActorUid,proto3" json:"source_actor_uid,omitempty"` @@ -1811,9 +1811,9 @@ func (x *TagStatus) GetActorTemplateUid() string { return "" } -func (x *TagStatus) GetInProgressSnapshotUri() string { +func (x *TagStatus) GetStorageLocation() string { if x != nil { - return x.InProgressSnapshotUri + return x.StorageLocation } return "" } @@ -6841,11 +6841,11 @@ const file_ateapi_proto_rawDesc = "" + "\n" + "worker_pod\x18\x03 \x01(\tR\tworkerPod\x12$\n" + "\x0eworker_pod_uid\x18\x04 \x01(\tR\fworkerPodUid\x12\"\n" + - "\rworker_pod_ip\x18\x05 \x01(\tR\vworkerPodIp\"\xd2\x01\n" + + "\rworker_pod_ip\x18\x05 \x01(\tR\vworkerPodIp\"\xc4\x01\n" + "\tTagStatus\x124\n" + "\bsnapshot\x18\x01 \x01(\v2\x18.ateapi.ExternalSnapshotR\bsnapshot\x12,\n" + - "\x12actor_template_uid\x18\x02 \x01(\tR\x10actorTemplateUid\x127\n" + - "\x18in_progress_snapshot_uri\x18\x03 \x01(\tR\x15inProgressSnapshotUri\x12(\n" + + "\x12actor_template_uid\x18\x02 \x01(\tR\x10actorTemplateUid\x12)\n" + + "\x10storage_location\x18\x03 \x01(\tR\x0fstorageLocation\x12(\n" + "\x10source_actor_uid\x18\x04 \x01(\tR\x0esourceActorUid\"\xc4\x01\n" + "\x03Tag\x124\n" + "\bmetadata\x18\x01 \x01(\v2\x18.ateapi.ResourceMetadataR\bmetadata\x12)\n" + diff --git a/pkg/proto/ateapipb/ateapi.proto b/pkg/proto/ateapipb/ateapi.proto index f6bd35105..f68c02267 100644 --- a/pkg/proto/ateapipb/ateapi.proto +++ b/pkg/proto/ateapipb/ateapi.proto @@ -645,11 +645,11 @@ message TagStatus { // seeded from a tag under the same template. string actor_template_uid = 2; - // in_progress_snapshot_uri is where CreateTag is copying the tag's own - // snapshot to. It is minted before a single object is written and cleared - // once snapshot is set, so a tag left with it set names exactly the objects - // its unfinished create stranded, and deleting the tag collects them. - string in_progress_snapshot_uri = 3; + // Immutable base storage location captured when the tag is reserved. Its + // snapshot lives at /atespaces//tags/. + // Retained independently of the source actor and template so deleting an + // unfinished tag can collect any partial copy after those resources are gone. + string storage_location = 3; // source_actor_uid is the UID of the Actor this tag's snapshot was copied // from.