diff --git a/arista/workspace.v1/services.gen.proto b/arista/workspace.v1/services.gen.proto index 3b51deed..97c36147 100644 --- a/arista/workspace.v1/services.gen.proto +++ b/arista/workspace.v1/services.gen.proto @@ -680,3 +680,227 @@ service WorkspaceConfigService { rpc GetAllBatched (WorkspaceConfigBatchedStreamRequest) returns (stream WorkspaceConfigBatchedStreamResponse); rpc SubscribeBatched (WorkspaceConfigBatchedStreamRequest) returns (stream WorkspaceConfigBatchedStreamResponse); } + +message WorkspaceSyncConfigRequest { + // Key uniquely identifies a WorkspaceSyncConfig instance to retrieve. + // This value must be populated. + WorkspaceSyncKey key = 1; + + // Time indicates the time for which you are interested in the data. + // If no time is given, the server will use the time at which it makes the request. + google.protobuf.Timestamp time = 2; +}; + +message WorkspaceSyncConfigResponse { + // Value is the value requested. + // This structure will be fully-populated as it exists in the datastore. If + // optional fields were not given at creation, these fields will be empty or + // set to default values. + WorkspaceSyncConfig value = 1; + + // Time carries the (UTC) timestamp of the last-modification of the + // WorkspaceSyncConfig instance in this response. + google.protobuf.Timestamp time = 2; +}; + +message WorkspaceSyncConfigSomeRequest { + repeated WorkspaceSyncKey keys = 1; + + // Time indicates the time for which you are interested in the data. + // If no time is given, the server will use the time at which it makes the request. + google.protobuf.Timestamp time = 2; +}; + +message WorkspaceSyncConfigSomeResponse { + // Value is the value requested. + // This structure will be fully-populated as it exists in the datastore. If + // optional fields were not given at creation, these fields will be empty or + // set to default values. + WorkspaceSyncConfig value = 1; + + // Error is an optional field. + // It should be filled when there is an error in the GetSome process. + google.protobuf.StringValue error = 2; + google.protobuf.Timestamp time = 3; +}; + +message WorkspaceSyncConfigStreamRequest { + // PartialEqFilter provides a way to server-side filter a GetAll/Subscribe. + // This requires all provided fields to be equal to the response. + // + // While transparent to users, this field also allows services to optimize internal + // subscriptions if filter(s) are sufficiently specific. + repeated WorkspaceSyncConfig partial_eq_filter = 1; + + // TimeRange allows limiting response data to within a specified time window. + // If this field is populated, at least one of the two time fields are required. + // + // For GetAll, the fields start and end can be used as follows: + // + // * end: Returns the state of each WorkspaceSyncConfig at end. + // * Each WorkspaceSyncConfig response is fully-specified (all fields set). + // * start: Returns the state of each WorkspaceSyncConfig at start, followed by updates until now. + // * Each WorkspaceSyncConfig response at start is fully-specified, but updates may be partial. + // * start and end: Returns the state of each WorkspaceSyncConfig at start, followed by updates + // until end. + // * Each WorkspaceSyncConfig response at start is fully-specified, but updates until end may + // be partial. + // + // This field is not allowed in the Subscribe RPC. + arista.time.TimeBounds time = 3; +}; + +message WorkspaceSyncConfigStreamResponse { + // Value is a value deemed relevant to the initiating request. + // This structure will always have its key-field populated. Which other fields are + // populated, and why, depends on the value of Operation and what triggered this notification. + WorkspaceSyncConfig value = 1; + + // Time holds the timestamp of this WorkspaceSyncConfig's last modification. + google.protobuf.Timestamp time = 2; + + // Operation indicates how the WorkspaceSyncConfig value in this response should be considered. + // Under non-subscribe requests, this value should always be INITIAL. In a subscription, + // once all initial data is streamed and the client begins to receive modification updates, + // you should not see INITIAL again. + arista.subscriptions.Operation type = 3; +}; + +message WorkspaceSyncConfigBatchedStreamRequest { + // PartialEqFilter provides a way to server-side filter a GetAll/Subscribe. + // This requires all provided fields to be equal to the response. + // + // While transparent to users, this field also allows services to optimize internal + // subscriptions if filter(s) are sufficiently specific. + repeated WorkspaceSyncConfig partial_eq_filter = 1; + + // TimeRange allows limiting response data to within a specified time window. + // If this field is populated, at least one of the two time fields are required. + // + // For GetAll, the fields start and end can be used as follows: + // + // * end: Returns the state of each WorkspaceSyncConfig at end. + // * Each WorkspaceSyncConfig response is fully-specified (all fields set). + // * start: Returns the state of each WorkspaceSyncConfig at start, followed by updates until now. + // * Each WorkspaceSyncConfig response at start is fully-specified, but updates may be partial. + // * start and end: Returns the state of each WorkspaceSyncConfig at start, followed by updates + // until end. + // * Each WorkspaceSyncConfig response at start is fully-specified, but updates until end may + // be partial. + // + // This field is not allowed in the Subscribe RPC. + arista.time.TimeBounds time = 3; + + // MaxMessages limits the maximum number of messages that can be contained in one batch. + // MaxMessages is required to be at least 1. + // The maximum number of messages in a batch is min(max_messages, INTERNAL_BATCH_LIMIT) + // INTERNAL_BATCH_LIMIT is set based on the maximum message size. + google.protobuf.UInt32Value max_messages = 4; +}; + +message WorkspaceSyncConfigBatchedStreamResponse { + // Values are the values deemed relevant to the initiating request. + // The length of this structure is guaranteed to be between (inclusive) 1 and + // min(req.max_messages, INTERNAL_BATCH_LIMIT). + repeated WorkspaceSyncConfigStreamResponse responses = 1; +}; + +message WorkspaceSyncConfigSetRequest { + // WorkspaceSyncConfig carries the value to set into the datastore. + // See the documentation on the WorkspaceSyncConfig struct for which fields are required. + WorkspaceSyncConfig value = 1; +}; + +message WorkspaceSyncConfigSetResponse { + // Value carries all the values given in the WorkspaceSyncConfigSetRequest as well + // as any server-generated values. + WorkspaceSyncConfig value = 1; + + // Time indicates the (UTC) timestamp at which the system recognizes the + // creation. The only guarantees made about this timestamp are: + // + // - it is after the time the request was received + // - a time-ranged query with StartTime==CreatedAt will include this instance. + // + google.protobuf.Timestamp time = 2; +}; + +message WorkspaceSyncConfigSetSomeRequest { + // value contains a list of WorkspaceSyncConfig values to write. + // It is possible to provide more values than can fit within either: + // - the maxiumum send size of the client + // - the maximum receive size of the server + // If this error occurs you must reduce the number of values sent. + // See gRPC "maximum message size" documentation for more information. + repeated WorkspaceSyncConfig values = 1; +}; + +message WorkspaceSyncConfigSetSomeResponse { + WorkspaceSyncKey key = 1; + string error = 2; +}; + +message WorkspaceSyncConfigDeleteRequest { + // Key indicates which WorkspaceSyncConfig instance to remove. + // This field must always be set. + WorkspaceSyncKey key = 1; +}; + +message WorkspaceSyncConfigDeleteResponse { + // Key echoes back the key of the deleted WorkspaceSyncConfig instance. + WorkspaceSyncKey key = 1; + + // Time indicates the (UTC) timestamp at which the system recognizes the + // deletion. The only guarantees made about this timestamp are: + // + // - it is after the time the request was received + // - a time-ranged query with StartTime==DeletedAt will not include this instance. + // + google.protobuf.Timestamp time = 2; +}; + +message WorkspaceSyncConfigDeleteSomeRequest { + // key contains a list of WorkspaceSyncConfig keys to delete + repeated WorkspaceSyncKey keys = 1; +}; + +// WorkspaceSyncConfigDeleteSomeResponse is only sent when there is an error. +message WorkspaceSyncConfigDeleteSomeResponse { + WorkspaceSyncKey key = 1; + string error = 2; +}; + +message WorkspaceSyncConfigDeleteAllRequest { + // PartialEqFilter provides a way to server-side filter a DeleteAll. + // This requires all provided fields to be equal to the response. + // A filtered DeleteAll will use GetAll with filter to find things to delete. + repeated WorkspaceSyncConfig partial_eq_filter = 1; +}; + +message WorkspaceSyncConfigDeleteAllResponse { + // This describes the class of delete error. + // A DeleteAllResponse is only sent when there is an error. + fmp.DeleteError type = 1; + // This indicates the error message from the delete failure. + google.protobuf.StringValue error = 2; + // This is the key of the WorkspaceSyncConfig instance that failed to be deleted. + WorkspaceSyncKey key = 3; + // Time indicates the (UTC) timestamp when the key was being deleted. + google.protobuf.Timestamp time = 4; +}; + +service WorkspaceSyncConfigService { + rpc GetOne (WorkspaceSyncConfigRequest) returns (WorkspaceSyncConfigResponse); + rpc GetSome (WorkspaceSyncConfigSomeRequest) returns (stream WorkspaceSyncConfigSomeResponse); + rpc GetAll (WorkspaceSyncConfigStreamRequest) returns (stream WorkspaceSyncConfigStreamResponse); + rpc Subscribe (WorkspaceSyncConfigStreamRequest) returns (stream WorkspaceSyncConfigStreamResponse); + rpc GetMeta (WorkspaceSyncConfigStreamRequest) returns (MetaResponse); + rpc SubscribeMeta (WorkspaceSyncConfigStreamRequest) returns (stream MetaResponse); + rpc Set (WorkspaceSyncConfigSetRequest) returns (WorkspaceSyncConfigSetResponse); + rpc SetSome (WorkspaceSyncConfigSetSomeRequest) returns (stream WorkspaceSyncConfigSetSomeResponse); + rpc Delete (WorkspaceSyncConfigDeleteRequest) returns (WorkspaceSyncConfigDeleteResponse); + rpc DeleteSome (WorkspaceSyncConfigDeleteSomeRequest) returns (stream WorkspaceSyncConfigDeleteSomeResponse); + rpc DeleteAll (WorkspaceSyncConfigDeleteAllRequest) returns (stream WorkspaceSyncConfigDeleteAllResponse); + rpc GetAllBatched (WorkspaceSyncConfigBatchedStreamRequest) returns (stream WorkspaceSyncConfigBatchedStreamResponse); + rpc SubscribeBatched (WorkspaceSyncConfigBatchedStreamRequest) returns (stream WorkspaceSyncConfigBatchedStreamResponse); +} diff --git a/arista/workspace.v1/services.gen.swagger.json b/arista/workspace.v1/services.gen.swagger.json index 00483f7f..ddc203b6 100644 --- a/arista/workspace.v1/services.gen.swagger.json +++ b/arista/workspace.v1/services.gen.swagger.json @@ -20,6 +20,9 @@ }, { "name": "WorkspaceConfigService" + }, + { + "name": "WorkspaceSyncConfigService" } ], "schemes": [ @@ -1380,13 +1383,614 @@ "type": "object", "properties": { "result": { - "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamResponse" + "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamResponse" + }, + "error": { + "$ref": "#/definitions/google.rpc.Status" + } + }, + "title": "Stream result of arista.workspace.v1.WorkspaceConfigStreamResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/google.rpc.Status" + } + } + }, + "parameters": [ + { + "name": "time.start", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "time.end", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + } + ], + "tags": [ + "WorkspaceConfigService" + ] + }, + "delete": { + "operationId": "WorkspaceConfigService_DeleteAll", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigDeleteAllResponse" + }, + "error": { + "$ref": "#/definitions/google.rpc.Status" + } + }, + "title": "Stream result of arista.workspace.v1.WorkspaceConfigDeleteAllResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/google.rpc.Status" + } + } + }, + "tags": [ + "WorkspaceConfigService" + ] + }, + "post": { + "operationId": "WorkspaceConfigService_GetAll2", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamResponse" + }, + "error": { + "$ref": "#/definitions/google.rpc.Status" + } + }, + "title": "Stream result of arista.workspace.v1.WorkspaceConfigStreamResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/google.rpc.Status" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamRequest" + } + } + ], + "tags": [ + "WorkspaceConfigService" + ] + } + }, + "/api/resources/workspace/v1/WorkspaceConfig/deletesome": { + "post": { + "operationId": "WorkspaceConfigService_DeleteSome", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigDeleteSomeResponse" + }, + "error": { + "$ref": "#/definitions/google.rpc.Status" + } + }, + "title": "Stream result of arista.workspace.v1.WorkspaceConfigDeleteSomeResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/google.rpc.Status" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigDeleteSomeRequest" + } + } + ], + "tags": [ + "WorkspaceConfigService" + ] + } + }, + "/api/resources/workspace/v1/WorkspaceConfig/getsome": { + "post": { + "operationId": "WorkspaceConfigService_GetSome", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigSomeResponse" + }, + "error": { + "$ref": "#/definitions/google.rpc.Status" + } + }, + "title": "Stream result of arista.workspace.v1.WorkspaceConfigSomeResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/google.rpc.Status" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigSomeRequest" + } + } + ], + "tags": [ + "WorkspaceConfigService" + ] + } + }, + "/api/resources/workspace/v1/WorkspaceConfig/metadata": { + "get": { + "operationId": "WorkspaceConfigService_GetMeta", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/arista.workspace.v1.MetaResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/google.rpc.Status" + } + } + }, + "parameters": [ + { + "name": "time.start", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "time.end", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + } + ], + "tags": [ + "WorkspaceConfigService" + ] + }, + "post": { + "operationId": "WorkspaceConfigService_GetMeta2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/arista.workspace.v1.MetaResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/google.rpc.Status" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamRequest" + } + } + ], + "tags": [ + "WorkspaceConfigService" + ] + } + }, + "/api/resources/workspace/v1/WorkspaceConfig/some": { + "post": { + "operationId": "WorkspaceConfigService_SetSome", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigSetSomeResponse" + }, + "error": { + "$ref": "#/definitions/google.rpc.Status" + } + }, + "title": "Stream result of arista.workspace.v1.WorkspaceConfigSetSomeResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/google.rpc.Status" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigSetSomeRequest" + } + } + ], + "tags": [ + "WorkspaceConfigService" + ] + } + }, + "/api/resources/workspace/v1/WorkspaceConfig/watch": { + "get": { + "operationId": "WorkspaceConfigService_Subscribe", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamResponse" + }, + "error": { + "$ref": "#/definitions/google.rpc.Status" + } + }, + "title": "Stream result of arista.workspace.v1.WorkspaceConfigStreamResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/google.rpc.Status" + } + } + }, + "parameters": [ + { + "name": "time.start", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "time.end", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + } + ], + "tags": [ + "WorkspaceConfigService" + ] + }, + "post": { + "operationId": "WorkspaceConfigService_Subscribe2", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamResponse" + }, + "error": { + "$ref": "#/definitions/google.rpc.Status" + } + }, + "title": "Stream result of arista.workspace.v1.WorkspaceConfigStreamResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/google.rpc.Status" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamRequest" + } + } + ], + "tags": [ + "WorkspaceConfigService" + ] + } + }, + "/api/resources/workspace/v1/WorkspaceConfig/watchmetadata": { + "get": { + "operationId": "WorkspaceConfigService_SubscribeMeta", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/arista.workspace.v1.MetaResponse" + }, + "error": { + "$ref": "#/definitions/google.rpc.Status" + } + }, + "title": "Stream result of arista.workspace.v1.MetaResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/google.rpc.Status" + } + } + }, + "parameters": [ + { + "name": "time.start", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "time.end", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + } + ], + "tags": [ + "WorkspaceConfigService" + ] + }, + "post": { + "operationId": "WorkspaceConfigService_SubscribeMeta2", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/arista.workspace.v1.MetaResponse" + }, + "error": { + "$ref": "#/definitions/google.rpc.Status" + } + }, + "title": "Stream result of arista.workspace.v1.MetaResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/google.rpc.Status" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamRequest" + } + } + ], + "tags": [ + "WorkspaceConfigService" + ] + } + }, + "/api/resources/workspace/v1/WorkspaceSyncConfig": { + "get": { + "operationId": "WorkspaceSyncConfigService_GetOne", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/google.rpc.Status" + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "description": "workspace_id is the ID of the workspace.", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "key.syncOperation", + "description": "sync_operation is type of sync operation to be performed on devices.\n\n - SYNC_OPERATION_UNSPECIFIED: SYNC_OPERATION_UNSPECIFIED indicates unspecified sync operation.\n - SYNC_OPERATION_CONFIG: SYNC_OPERATION_CONFIG indicates config sync operation.", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "SYNC_OPERATION_UNSPECIFIED", + "SYNC_OPERATION_CONFIG" + ], + "default": "SYNC_OPERATION_UNSPECIFIED" + }, + { + "name": "time", + "description": "Time indicates the time for which you are interested in the data.\nIf no time is given, the server will use the time at which it makes the request.", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + } + ], + "tags": [ + "WorkspaceSyncConfigService" + ] + }, + "delete": { + "operationId": "WorkspaceSyncConfigService_Delete", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigDeleteResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/google.rpc.Status" + } + } + }, + "parameters": [ + { + "name": "key.workspaceId", + "description": "workspace_id is the ID of the workspace.", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "key.syncOperation", + "description": "sync_operation is type of sync operation to be performed on devices.\n\n - SYNC_OPERATION_UNSPECIFIED: SYNC_OPERATION_UNSPECIFIED indicates unspecified sync operation.\n - SYNC_OPERATION_CONFIG: SYNC_OPERATION_CONFIG indicates config sync operation.", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "SYNC_OPERATION_UNSPECIFIED", + "SYNC_OPERATION_CONFIG" + ], + "default": "SYNC_OPERATION_UNSPECIFIED" + } + ], + "tags": [ + "WorkspaceSyncConfigService" + ] + }, + "post": { + "operationId": "WorkspaceSyncConfigService_Set", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigSetResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/google.rpc.Status" + } + } + }, + "parameters": [ + { + "name": "value", + "description": "WorkspaceSyncConfig carries the value to set into the datastore.\nSee the documentation on the WorkspaceSyncConfig struct for which fields are required.", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfig" + } + } + ], + "tags": [ + "WorkspaceSyncConfigService" + ] + } + }, + "/api/resources/workspace/v1/WorkspaceSyncConfig/all": { + "get": { + "operationId": "WorkspaceSyncConfigService_GetAll", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigStreamResponse" }, "error": { "$ref": "#/definitions/google.rpc.Status" } }, - "title": "Stream result of arista.workspace.v1.WorkspaceConfigStreamResponse" + "title": "Stream result of arista.workspace.v1.WorkspaceSyncConfigStreamResponse" } }, "default": { @@ -1413,11 +2017,11 @@ } ], "tags": [ - "WorkspaceConfigService" + "WorkspaceSyncConfigService" ] }, "delete": { - "operationId": "WorkspaceConfigService_DeleteAll", + "operationId": "WorkspaceSyncConfigService_DeleteAll", "responses": { "200": { "description": "A successful response.(streaming responses)", @@ -1425,13 +2029,13 @@ "type": "object", "properties": { "result": { - "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigDeleteAllResponse" + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigDeleteAllResponse" }, "error": { "$ref": "#/definitions/google.rpc.Status" } }, - "title": "Stream result of arista.workspace.v1.WorkspaceConfigDeleteAllResponse" + "title": "Stream result of arista.workspace.v1.WorkspaceSyncConfigDeleteAllResponse" } }, "default": { @@ -1442,11 +2046,11 @@ } }, "tags": [ - "WorkspaceConfigService" + "WorkspaceSyncConfigService" ] }, "post": { - "operationId": "WorkspaceConfigService_GetAll2", + "operationId": "WorkspaceSyncConfigService_GetAll2", "responses": { "200": { "description": "A successful response.(streaming responses)", @@ -1454,13 +2058,13 @@ "type": "object", "properties": { "result": { - "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamResponse" + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigStreamResponse" }, "error": { "$ref": "#/definitions/google.rpc.Status" } }, - "title": "Stream result of arista.workspace.v1.WorkspaceConfigStreamResponse" + "title": "Stream result of arista.workspace.v1.WorkspaceSyncConfigStreamResponse" } }, "default": { @@ -1476,18 +2080,18 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamRequest" + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigStreamRequest" } } ], "tags": [ - "WorkspaceConfigService" + "WorkspaceSyncConfigService" ] } }, - "/api/resources/workspace/v1/WorkspaceConfig/deletesome": { + "/api/resources/workspace/v1/WorkspaceSyncConfig/deletesome": { "post": { - "operationId": "WorkspaceConfigService_DeleteSome", + "operationId": "WorkspaceSyncConfigService_DeleteSome", "responses": { "200": { "description": "A successful response.(streaming responses)", @@ -1495,13 +2099,13 @@ "type": "object", "properties": { "result": { - "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigDeleteSomeResponse" + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigDeleteSomeResponse" }, "error": { "$ref": "#/definitions/google.rpc.Status" } }, - "title": "Stream result of arista.workspace.v1.WorkspaceConfigDeleteSomeResponse" + "title": "Stream result of arista.workspace.v1.WorkspaceSyncConfigDeleteSomeResponse" } }, "default": { @@ -1517,18 +2121,18 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigDeleteSomeRequest" + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigDeleteSomeRequest" } } ], "tags": [ - "WorkspaceConfigService" + "WorkspaceSyncConfigService" ] } }, - "/api/resources/workspace/v1/WorkspaceConfig/getsome": { + "/api/resources/workspace/v1/WorkspaceSyncConfig/getsome": { "post": { - "operationId": "WorkspaceConfigService_GetSome", + "operationId": "WorkspaceSyncConfigService_GetSome", "responses": { "200": { "description": "A successful response.(streaming responses)", @@ -1536,13 +2140,13 @@ "type": "object", "properties": { "result": { - "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigSomeResponse" + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigSomeResponse" }, "error": { "$ref": "#/definitions/google.rpc.Status" } }, - "title": "Stream result of arista.workspace.v1.WorkspaceConfigSomeResponse" + "title": "Stream result of arista.workspace.v1.WorkspaceSyncConfigSomeResponse" } }, "default": { @@ -1558,18 +2162,18 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigSomeRequest" + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigSomeRequest" } } ], "tags": [ - "WorkspaceConfigService" + "WorkspaceSyncConfigService" ] } }, - "/api/resources/workspace/v1/WorkspaceConfig/metadata": { + "/api/resources/workspace/v1/WorkspaceSyncConfig/metadata": { "get": { - "operationId": "WorkspaceConfigService_GetMeta", + "operationId": "WorkspaceSyncConfigService_GetMeta", "responses": { "200": { "description": "A successful response.", @@ -1601,11 +2205,11 @@ } ], "tags": [ - "WorkspaceConfigService" + "WorkspaceSyncConfigService" ] }, "post": { - "operationId": "WorkspaceConfigService_GetMeta2", + "operationId": "WorkspaceSyncConfigService_GetMeta2", "responses": { "200": { "description": "A successful response.", @@ -1626,18 +2230,18 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamRequest" + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigStreamRequest" } } ], "tags": [ - "WorkspaceConfigService" + "WorkspaceSyncConfigService" ] } }, - "/api/resources/workspace/v1/WorkspaceConfig/some": { + "/api/resources/workspace/v1/WorkspaceSyncConfig/some": { "post": { - "operationId": "WorkspaceConfigService_SetSome", + "operationId": "WorkspaceSyncConfigService_SetSome", "responses": { "200": { "description": "A successful response.(streaming responses)", @@ -1645,13 +2249,13 @@ "type": "object", "properties": { "result": { - "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigSetSomeResponse" + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigSetSomeResponse" }, "error": { "$ref": "#/definitions/google.rpc.Status" } }, - "title": "Stream result of arista.workspace.v1.WorkspaceConfigSetSomeResponse" + "title": "Stream result of arista.workspace.v1.WorkspaceSyncConfigSetSomeResponse" } }, "default": { @@ -1667,18 +2271,18 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigSetSomeRequest" + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigSetSomeRequest" } } ], "tags": [ - "WorkspaceConfigService" + "WorkspaceSyncConfigService" ] } }, - "/api/resources/workspace/v1/WorkspaceConfig/watch": { + "/api/resources/workspace/v1/WorkspaceSyncConfig/watch": { "get": { - "operationId": "WorkspaceConfigService_Subscribe", + "operationId": "WorkspaceSyncConfigService_Subscribe", "responses": { "200": { "description": "A successful response.(streaming responses)", @@ -1686,13 +2290,13 @@ "type": "object", "properties": { "result": { - "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamResponse" + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigStreamResponse" }, "error": { "$ref": "#/definitions/google.rpc.Status" } }, - "title": "Stream result of arista.workspace.v1.WorkspaceConfigStreamResponse" + "title": "Stream result of arista.workspace.v1.WorkspaceSyncConfigStreamResponse" } }, "default": { @@ -1719,11 +2323,11 @@ } ], "tags": [ - "WorkspaceConfigService" + "WorkspaceSyncConfigService" ] }, "post": { - "operationId": "WorkspaceConfigService_Subscribe2", + "operationId": "WorkspaceSyncConfigService_Subscribe2", "responses": { "200": { "description": "A successful response.(streaming responses)", @@ -1731,13 +2335,13 @@ "type": "object", "properties": { "result": { - "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamResponse" + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigStreamResponse" }, "error": { "$ref": "#/definitions/google.rpc.Status" } }, - "title": "Stream result of arista.workspace.v1.WorkspaceConfigStreamResponse" + "title": "Stream result of arista.workspace.v1.WorkspaceSyncConfigStreamResponse" } }, "default": { @@ -1753,18 +2357,18 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamRequest" + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigStreamRequest" } } ], "tags": [ - "WorkspaceConfigService" + "WorkspaceSyncConfigService" ] } }, - "/api/resources/workspace/v1/WorkspaceConfig/watchmetadata": { + "/api/resources/workspace/v1/WorkspaceSyncConfig/watchmetadata": { "get": { - "operationId": "WorkspaceConfigService_SubscribeMeta", + "operationId": "WorkspaceSyncConfigService_SubscribeMeta", "responses": { "200": { "description": "A successful response.(streaming responses)", @@ -1805,11 +2409,11 @@ } ], "tags": [ - "WorkspaceConfigService" + "WorkspaceSyncConfigService" ] }, "post": { - "operationId": "WorkspaceConfigService_SubscribeMeta2", + "operationId": "WorkspaceSyncConfigService_SubscribeMeta2", "responses": { "200": { "description": "A successful response.(streaming responses)", @@ -1839,12 +2443,12 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/arista.workspace.v1.WorkspaceConfigStreamRequest" + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigStreamRequest" } } ], "tags": [ - "WorkspaceConfigService" + "WorkspaceSyncConfigService" ] } } @@ -2077,10 +2681,11 @@ "ERROR_CODE_EOS_SUPPORT_REMOVED", "ERROR_CODE_PHYSICAL_DEVICE_EOS_INCOMPATIBLE", "ERROR_CODE_TA_EMBEDDEDEXT_INCOMPATIBLE", - "ERROR_CODE_DEVICE_EOS_2GB_INCOMPATIBLE" + "ERROR_CODE_DEVICE_EOS_2GB_INCOMPATIBLE", + "ERROR_CODE_EOS_EXTENSION_VERSION_INCOMPATIBLE" ], "default": "ERROR_CODE_UNSPECIFIED", - "description": "ErrorCode indicates errors produced during image validations.\n\n - ERROR_CODE_UNSPECIFIED: ERROR_CODE_UNSPECIFIED indicates error code is unspecified.\n - ERROR_CODE_SUPPORT_NOT_INTRODUCED: ERROR_CODE_SUPPORT_NOT_INTRODUCED represents case where the given EOS version does\nnot support the SKU.\nDeprecated - use ERROR_CODE_EOS_SUPPORT_NOT_INTRODUCED\n - ERROR_CODE_SUPPORT_REMOVED: ERROR_CODE_SUPPORT_REMOVED represents case where the given EOS version no longer\nsupports the SKU.\nDeprecated - use ERROR_CODE_EOS_SUPPORT_REMOVED\n - ERROR_CODE_DEVICE_UNREACHABLE: ERROR_CODE_DEVICE_UNREACHABLE represents the case where the device\nis unreachable during a compliance computation.\n - ERROR_CODE_VALIDATION_FAILED: ERROR_CODE_VALIDATION_FAILED represents case where the validations checks\nfailed.\n - ERROR_CODE_GET_PROPOSED_IMAGE_INFO_FAILED: ERROR_CODE_GET_PROPOSED_IMAGE_INFO_FAILED represents case where we are\nunable to get proposed image information for a device.\n - ERROR_CODE_GET_RUNNING_IMAGE_INFO_FROM_ACTIVE_SUPERVISOR_FAILED: ERROR_CODE_GET_RUNNING_IMAGE_INFO_FROM_ACTIVE_SUPERVISOR_FAILED represents case where we\nfail to get running image information from an active supervisor.\n - ERROR_CODE_GET_RUNNING_IMAGE_INFO_FROM_PEER_SUPERVISOR_FAILED: ERROR_CODE_GET_RUNNING_IMAGE_INFO_FROM_PEER_SUPERVISOR_FAILED represents case when we\nfail to get information from peer supervisor.\n - ERROR_CODE_EOS_TA_ARCHITECTURE_INCOMPATIBLE: ERROR_CODE_EOS_TA_ARCHITECTURE_INCOMPATIBLE represents the case where EOS architecture and\nTerminAttr architecture are incompatible.\n - ERROR_CODE_TA_CV_INCOMPATIBLE: ERROR_CODE_TA_CV_INCOMPATIBLE represents the case where TerminAttr is incompatible with\nCloudVision; i.e., the TerminAttr version is below CloudVision's minimum supported version.\n - ERROR_CODE_EOS_CV_INCOMPATIBLE: ERROR_CODE_EOS_CV_INCOMPATIBLE represents the case where the EOS version is incompatible with\nCloudVision; i.e., the EOS version is outside of CloudVision's supported range of versions.\n - ERROR_CODE_EOS_SUPPORT_NOT_INTRODUCED: ERROR_CODE_EOS_SUPPORT_NOT_INTRODUCED represents the case where the given EOS version does\nnot support the SKU.\n - ERROR_CODE_EOS_SUPPORT_REMOVED: ERROR_CODE_EOS_SUPPORT_REMOVED represents the case where the given EOS version no longer\nsupports the SKU.\n - ERROR_CODE_PHYSICAL_DEVICE_EOS_INCOMPATIBLE: ERROR_CODE_PHYSICAL_DEVICE_EOS_INCOMPATIBLE represents the case where the physical device\ndoes not support the given EOS type.\n - ERROR_CODE_TA_EMBEDDEDEXT_INCOMPATIBLE: ERROR_CODE_TA_EMBEDDEDEXT_INCOMPATIBLE represents the case where the extension TerminAttr\nversion is lower than the embedded TerminAttr version in SWI.\n - ERROR_CODE_DEVICE_EOS_2GB_INCOMPATIBLE: ERROR_CODE_DEVICE_EOS_2GB_INCOMPATIBLE represents the case where a 2GB-device is incompatible\nwith a non-2GB EOS or a non-2GB device is incompatible with a 2GB-EOS." + "description": "ErrorCode indicates errors produced during image validations.\n\n - ERROR_CODE_UNSPECIFIED: ERROR_CODE_UNSPECIFIED indicates error code is unspecified.\n - ERROR_CODE_SUPPORT_NOT_INTRODUCED: ERROR_CODE_SUPPORT_NOT_INTRODUCED represents case where the given EOS version does\nnot support the SKU.\nDeprecated - use ERROR_CODE_EOS_SUPPORT_NOT_INTRODUCED\n - ERROR_CODE_SUPPORT_REMOVED: ERROR_CODE_SUPPORT_REMOVED represents case where the given EOS version no longer\nsupports the SKU.\nDeprecated - use ERROR_CODE_EOS_SUPPORT_REMOVED\n - ERROR_CODE_DEVICE_UNREACHABLE: ERROR_CODE_DEVICE_UNREACHABLE represents the case where the device\nis unreachable during a compliance computation.\n - ERROR_CODE_VALIDATION_FAILED: ERROR_CODE_VALIDATION_FAILED represents case where the validations checks\nfailed.\n - ERROR_CODE_GET_PROPOSED_IMAGE_INFO_FAILED: ERROR_CODE_GET_PROPOSED_IMAGE_INFO_FAILED represents case where we are\nunable to get proposed image information for a device.\n - ERROR_CODE_GET_RUNNING_IMAGE_INFO_FROM_ACTIVE_SUPERVISOR_FAILED: ERROR_CODE_GET_RUNNING_IMAGE_INFO_FROM_ACTIVE_SUPERVISOR_FAILED represents case where we\nfail to get running image information from an active supervisor.\n - ERROR_CODE_GET_RUNNING_IMAGE_INFO_FROM_PEER_SUPERVISOR_FAILED: ERROR_CODE_GET_RUNNING_IMAGE_INFO_FROM_PEER_SUPERVISOR_FAILED represents case when we\nfail to get information from peer supervisor.\n - ERROR_CODE_EOS_TA_ARCHITECTURE_INCOMPATIBLE: ERROR_CODE_EOS_TA_ARCHITECTURE_INCOMPATIBLE represents the case where EOS architecture and\nTerminAttr architecture are incompatible.\n - ERROR_CODE_TA_CV_INCOMPATIBLE: ERROR_CODE_TA_CV_INCOMPATIBLE represents the case where TerminAttr is incompatible with\nCloudVision; i.e., the TerminAttr version is below CloudVision's minimum supported version.\n - ERROR_CODE_EOS_CV_INCOMPATIBLE: ERROR_CODE_EOS_CV_INCOMPATIBLE represents the case where the EOS version is incompatible with\nCloudVision; i.e., the EOS version is outside of CloudVision's supported range of versions.\n - ERROR_CODE_EOS_SUPPORT_NOT_INTRODUCED: ERROR_CODE_EOS_SUPPORT_NOT_INTRODUCED represents the case where the given EOS version does\nnot support the SKU.\n - ERROR_CODE_EOS_SUPPORT_REMOVED: ERROR_CODE_EOS_SUPPORT_REMOVED represents the case where the given EOS version no longer\nsupports the SKU.\n - ERROR_CODE_PHYSICAL_DEVICE_EOS_INCOMPATIBLE: ERROR_CODE_PHYSICAL_DEVICE_EOS_INCOMPATIBLE represents the case where the physical device\ndoes not support the given EOS type.\n - ERROR_CODE_TA_EMBEDDEDEXT_INCOMPATIBLE: ERROR_CODE_TA_EMBEDDEDEXT_INCOMPATIBLE represents the case where the extension TerminAttr\nversion is lower than the embedded TerminAttr version in SWI.\n - ERROR_CODE_DEVICE_EOS_2GB_INCOMPATIBLE: ERROR_CODE_DEVICE_EOS_2GB_INCOMPATIBLE represents the case where a 2GB-device is incompatible\nwith a non-2GB EOS or a non-2GB device is incompatible with a 2GB-EOS.\n - ERROR_CODE_EOS_EXTENSION_VERSION_INCOMPATIBLE: ERROR_CODE_EOS_EXTENSION_VERSION_INCOMPATIBLE represents the case where the given extension\nversion doesn't support the given EOS version." }, "arista.imagestatus.v1.Extension": { "type": "object", @@ -2560,6 +3165,35 @@ "default": "BUILD_STATE_UNSPECIFIED", "description": "BuildState enumerates the set of states that a BuildStage can be in during a\nworkspace build cycle.\n\n - BUILD_STATE_UNSPECIFIED: BUILD_STATE_UNSPECIFIED indicates unspecified build state.\n - BUILD_STATE_IN_PROGRESS: BUILD_STATE_IN_PROGRESS indicates that the BuildStage was started but has\nnot yet completed.\n - BUILD_STATE_CANCELED: BUILD_STATE_CANCELED indicates that the BuildStage was started but then\nstopped before completion.\n - BUILD_STATE_SUCCESS: BUILD_STATE_SUCCESS indicates that the BuildStage was started and ran to\ncompletion successfully.\n - BUILD_STATE_FAIL: BUILD_STATE_FAIL indicates that the BuildStage was started and ran to\ncompletion unsuccessfully.\n - BUILD_STATE_SKIPPED: BUILD_STATE_SKIPPED indicates that the BuildStage was not run." }, + "arista.workspace.v1.ConfigSyncResult": { + "type": "object", + "properties": { + "summary": { + "$ref": "#/definitions/arista.configstatus.v1.ConfigSummary", + "description": "summary is a summary of the changes to the running config." + }, + "errors": { + "$ref": "#/definitions/arista.configstatus.v1.ConfigErrors", + "description": "errors are any errors detected during sync." + }, + "configSources": { + "$ref": "#/definitions/arista.configstatus.v1.ConfigSources", + "description": "config_sources identify the entities that generated the designed config." + } + }, + "description": "ConfigSyncResult holds the result of config sync operation." + }, + "arista.workspace.v1.ConfigSyncSkipCause": { + "type": "string", + "enum": [ + "CONFIG_SYNC_SKIP_CAUSE_UNSPECIFIED", + "CONFIG_SYNC_SKIP_CAUSE_INACTIVE", + "CONFIG_SYNC_SKIP_CAUSE_PRE_PROVISIONED", + "CONFIG_SYNC_SKIP_CAUSE_IN_COMPLIANCE" + ], + "default": "CONFIG_SYNC_SKIP_CAUSE_UNSPECIFIED", + "description": "ConfigSyncSkipCause enumerates the set of reasons a device can skip config sync.\n\n - CONFIG_SYNC_SKIP_CAUSE_UNSPECIFIED: CONFIG_SYNC_SKIP_CAUSE_UNSPECIFIED indicates that config sync skip cause is\nunspecified.\n - CONFIG_SYNC_SKIP_CAUSE_INACTIVE: CONFIG_SYNC_SKIP_CAUSE_INACTIVE indicates that config sync is skipped because\ndevice is not streaming.\n - CONFIG_SYNC_SKIP_CAUSE_PRE_PROVISIONED: CONFIG_SYNC_SKIP_CAUSE_PRE_PROVISIONED indicates that config sync is skipped\nbecause device is pre-provisioned.\n - CONFIG_SYNC_SKIP_CAUSE_IN_COMPLIANCE: CONFIG_SYNC_SKIP_CAUSE_IN_COMPLIANCE indicates that config sync is skipped\nbecause device is in compliance." + }, "arista.workspace.v1.ConfigValidationResult": { "type": "object", "properties": { @@ -2842,6 +3476,15 @@ }, "description": "Responses is a collection of responses for completed requests." }, + "arista.workspace.v1.SyncOperation": { + "type": "string", + "enum": [ + "SYNC_OPERATION_UNSPECIFIED", + "SYNC_OPERATION_CONFIG" + ], + "default": "SYNC_OPERATION_UNSPECIFIED", + "description": "SyncOperation enumerates sync operations.\n\n - SYNC_OPERATION_UNSPECIFIED: SYNC_OPERATION_UNSPECIFIED indicates unspecified sync operation.\n - SYNC_OPERATION_CONFIG: SYNC_OPERATION_CONFIG indicates config sync operation." + }, "arista.workspace.v1.TemplateError": { "type": "object", "properties": { @@ -3042,6 +3685,14 @@ "authzStatus": { "$ref": "#/definitions/arista.workspace.v1.DeviceAuthzStatus", "description": "authz_status is the status of provision permission for the device." + }, + "configSyncResult": { + "$ref": "#/definitions/arista.workspace.v1.ConfigSyncResult", + "description": "config_sync_result is the result of the config sync." + }, + "configSyncSkipCause": { + "$ref": "#/definitions/arista.workspace.v1.ConfigSyncSkipCause", + "description": "config_sync_skip_cause is the reason for skipping the config sync." } }, "description": "WorkspaceBuildDetails holds the details for a build of a device in a workspace." @@ -3598,6 +4249,235 @@ } } }, + "arista.workspace.v1.WorkspaceSyncConfig": { + "type": "object", + "properties": { + "key": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncKey", + "description": "key uniquely identifies sync operations to be performed in workspace." + }, + "deviceIds": { + "$ref": "#/definitions/fmp.RepeatedString", + "description": "device_ids is the list of device Ids to be synced in the workspace." + } + }, + "description": "WorkspaceSyncConfig holds the list of devices to be synced in workspace." + }, + "arista.workspace.v1.WorkspaceSyncConfigBatchedStreamResponse": { + "type": "object", + "properties": { + "responses": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfigStreamResponse" + }, + "description": "Values are the values deemed relevant to the initiating request.\nThe length of this structure is guaranteed to be between (inclusive) 1 and \nmin(req.max_messages, INTERNAL_BATCH_LIMIT)." + } + } + }, + "arista.workspace.v1.WorkspaceSyncConfigDeleteAllResponse": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/fmp.DeleteError", + "description": "This describes the class of delete error.\nA DeleteAllResponse is only sent when there is an error." + }, + "error": { + "type": "string", + "description": "This indicates the error message from the delete failure." + }, + "key": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncKey", + "description": "This is the key of the WorkspaceSyncConfig instance that failed to be deleted." + }, + "time": { + "type": "string", + "format": "date-time", + "description": "Time indicates the (UTC) timestamp when the key was being deleted." + } + } + }, + "arista.workspace.v1.WorkspaceSyncConfigDeleteResponse": { + "type": "object", + "properties": { + "key": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncKey", + "description": "Key echoes back the key of the deleted WorkspaceSyncConfig instance." + }, + "time": { + "type": "string", + "format": "date-time", + "description": "- it is after the time the request was received\n - a time-ranged query with StartTime==DeletedAt will not include this instance.", + "title": "Time indicates the (UTC) timestamp at which the system recognizes the\ndeletion. The only guarantees made about this timestamp are:" + } + } + }, + "arista.workspace.v1.WorkspaceSyncConfigDeleteSomeRequest": { + "type": "object", + "properties": { + "keys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncKey" + }, + "title": "key contains a list of WorkspaceSyncConfig keys to delete" + } + } + }, + "arista.workspace.v1.WorkspaceSyncConfigDeleteSomeResponse": { + "type": "object", + "properties": { + "key": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncKey" + }, + "error": { + "type": "string" + } + }, + "description": "WorkspaceSyncConfigDeleteSomeResponse is only sent when there is an error." + }, + "arista.workspace.v1.WorkspaceSyncConfigResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfig", + "description": "Value is the value requested.\nThis structure will be fully-populated as it exists in the datastore. If\noptional fields were not given at creation, these fields will be empty or\nset to default values." + }, + "time": { + "type": "string", + "format": "date-time", + "description": "Time carries the (UTC) timestamp of the last-modification of the\nWorkspaceSyncConfig instance in this response." + } + } + }, + "arista.workspace.v1.WorkspaceSyncConfigSetResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfig", + "description": "Value carries all the values given in the WorkspaceSyncConfigSetRequest as well\nas any server-generated values." + }, + "time": { + "type": "string", + "format": "date-time", + "description": "- it is after the time the request was received\n - a time-ranged query with StartTime==CreatedAt will include this instance.", + "title": "Time indicates the (UTC) timestamp at which the system recognizes the\ncreation. The only guarantees made about this timestamp are:" + } + } + }, + "arista.workspace.v1.WorkspaceSyncConfigSetSomeRequest": { + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfig" + }, + "description": "value contains a list of WorkspaceSyncConfig values to write.\nIt is possible to provide more values than can fit within either:\n - the maxiumum send size of the client\n - the maximum receive size of the server\nIf this error occurs you must reduce the number of values sent.\nSee gRPC \"maximum message size\" documentation for more information." + } + } + }, + "arista.workspace.v1.WorkspaceSyncConfigSetSomeResponse": { + "type": "object", + "properties": { + "key": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncKey" + }, + "error": { + "type": "string" + } + } + }, + "arista.workspace.v1.WorkspaceSyncConfigSomeRequest": { + "type": "object", + "properties": { + "keys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncKey" + } + }, + "time": { + "type": "string", + "format": "date-time", + "description": "Time indicates the time for which you are interested in the data.\nIf no time is given, the server will use the time at which it makes the request." + } + } + }, + "arista.workspace.v1.WorkspaceSyncConfigSomeResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfig", + "description": "Value is the value requested.\nThis structure will be fully-populated as it exists in the datastore. If\noptional fields were not given at creation, these fields will be empty or\nset to default values." + }, + "error": { + "type": "string", + "description": "Error is an optional field.\nIt should be filled when there is an error in the GetSome process." + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "arista.workspace.v1.WorkspaceSyncConfigStreamRequest": { + "type": "object", + "properties": { + "partialEqFilter": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfig" + }, + "description": "PartialEqFilter provides a way to server-side filter a GetAll/Subscribe.\nThis requires all provided fields to be equal to the response.\n\nWhile transparent to users, this field also allows services to optimize internal\nsubscriptions if filter(s) are sufficiently specific." + }, + "time": { + "$ref": "#/definitions/arista.time.TimeBounds", + "description": "TimeRange allows limiting response data to within a specified time window.\nIf this field is populated, at least one of the two time fields are required.\n\nFor GetAll, the fields start and end can be used as follows:\n\n * end: Returns the state of each WorkspaceSyncConfig at end.\n * Each WorkspaceSyncConfig response is fully-specified (all fields set).\n * start: Returns the state of each WorkspaceSyncConfig at start, followed by updates until now.\n * Each WorkspaceSyncConfig response at start is fully-specified, but updates may be partial.\n * start and end: Returns the state of each WorkspaceSyncConfig at start, followed by updates\n until end.\n * Each WorkspaceSyncConfig response at start is fully-specified, but updates until end may\n be partial.\n\nThis field is not allowed in the Subscribe RPC." + } + } + }, + "arista.workspace.v1.WorkspaceSyncConfigStreamResponse": { + "type": "object", + "properties": { + "value": { + "$ref": "#/definitions/arista.workspace.v1.WorkspaceSyncConfig", + "description": "Value is a value deemed relevant to the initiating request.\nThis structure will always have its key-field populated. Which other fields are\npopulated, and why, depends on the value of Operation and what triggered this notification." + }, + "time": { + "type": "string", + "format": "date-time", + "description": "Time holds the timestamp of this WorkspaceSyncConfig's last modification." + }, + "type": { + "$ref": "#/definitions/arista.subscriptions.Operation", + "description": "Operation indicates how the WorkspaceSyncConfig value in this response should be considered.\nUnder non-subscribe requests, this value should always be INITIAL. In a subscription,\nonce all initial data is streamed and the client begins to receive modification updates,\nyou should not see INITIAL again." + } + } + }, + "arista.workspace.v1.WorkspaceSyncKey": { + "type": "object", + "properties": { + "workspaceId": { + "type": "string", + "description": "workspace_id is the ID of the workspace." + }, + "syncOperation": { + "$ref": "#/definitions/arista.workspace.v1.SyncOperation", + "description": "sync_operation is type of sync operation to be performed on devices." + } + }, + "description": "WorkspaceSyncKey uniquely identifies sync operations to be performed\nin a workspace.", + "required": [ + "workspaceId", + "syncOperation" + ] + }, "fmp.DeleteError": { "type": "string", "enum": [ diff --git a/arista/workspace.v1/workspace-changelog.yaml b/arista/workspace.v1/workspace-changelog.yaml index bcee4e9f..ea938f4f 100644 --- a/arista/workspace.v1/workspace-changelog.yaml +++ b/arista/workspace.v1/workspace-changelog.yaml @@ -7,6 +7,10 @@ # New entries go on top. Changes: + - date: 2024-07-29 + description: Add device sync config + version: 1.3.5 + cvaas: true - date: 2024-07-22 description: Add infos (arista.imagestatus.v1.ImageInfos) to ImageValidationResult version: 1.3.4 diff --git a/arista/workspace.v1/workspace.proto b/arista/workspace.v1/workspace.proto index 087fb0bc..0a414503 100644 --- a/arista/workspace.v1/workspace.proto +++ b/arista/workspace.v1/workspace.proto @@ -340,6 +340,17 @@ message ImageValidationResult { arista.imagestatus.v1.ImageInfos infos = 5; } +// ConfigSyncResult holds the result of config sync operation. +message ConfigSyncResult { + // summary is a summary of the changes to the running config. + arista.configstatus.v1.ConfigSummary summary = 1; + // errors are any errors detected during sync. + arista.configstatus.v1.ConfigErrors errors = 2; + // config_sources identify the entities that generated the designed config. + arista.configstatus.v1.ConfigSources config_sources = 3; + } + + // BuildStageState holds the state per build stage. message BuildStageState { // values is a map from build stage to build state. @@ -443,6 +454,10 @@ message WorkspaceBuildDetails { BuildStageState build_stage_state = 10; // authz_status is the status of provision permission for the device. DeviceAuthzStatus authz_status = 11; + // config_sync_result is the result of the config sync. + ConfigSyncResult config_sync_result = 12; + // config_sync_skip_cause is the reason for skipping the config sync. + ConfigSyncSkipCause config_sync_skip_cause = 13; } // ConfigValidationSkipCause enumerates the set of reasons a device can skip the config @@ -484,3 +499,46 @@ enum ImageValidationSkipCause { // skipped because the device has no proposed software changes in the workspace. IMAGE_VALIDATION_SKIP_CAUSE_NO_PROPOSED_SOFTWARE = 4; } + +// ConfigSyncSkipCause enumerates the set of reasons a device can skip config sync. +enum ConfigSyncSkipCause { + // CONFIG_SYNC_SKIP_CAUSE_UNSPECIFIED indicates that config sync skip cause is + // unspecified. + CONFIG_SYNC_SKIP_CAUSE_UNSPECIFIED = 0; + // CONFIG_SYNC_SKIP_CAUSE_INACTIVE indicates that config sync is skipped because + // device is not streaming. + CONFIG_SYNC_SKIP_CAUSE_INACTIVE = 1; + // CONFIG_SYNC_SKIP_CAUSE_PRE_PROVISIONED indicates that config sync is skipped + // because device is pre-provisioned. + CONFIG_SYNC_SKIP_CAUSE_PRE_PROVISIONED = 2; + // CONFIG_SYNC_SKIP_CAUSE_IN_COMPLIANCE indicates that config sync is skipped + // because device is in compliance. + CONFIG_SYNC_SKIP_CAUSE_IN_COMPLIANCE = 3; + } + +// WorkspaceSyncKey uniquely identifies sync operations to be performed +// in a workspace. +message WorkspaceSyncKey { + option (fmp.model_key) = true; + // workspace_id is the ID of the workspace. + google.protobuf.StringValue workspace_id = 1; + // sync_operation is type of sync operation to be performed on devices. + SyncOperation sync_operation = 2; +} + +// WorkspaceSyncConfig holds the list of devices to be synced in workspace. +message WorkspaceSyncConfig { + option (fmp.model) = "rw"; + // key uniquely identifies sync operations to be performed in workspace. + WorkspaceSyncKey key = 1; + // device_ids is the list of device Ids to be synced in the workspace. + fmp.RepeatedString device_ids = 2; +} + +// SyncOperation enumerates sync operations. +enum SyncOperation { + // SYNC_OPERATION_UNSPECIFIED indicates unspecified sync operation. + SYNC_OPERATION_UNSPECIFIED = 0; + // SYNC_OPERATION_CONFIG indicates config sync operation. + SYNC_OPERATION_CONFIG = 1; + }