From 16fe82cac56d7e46ee8fc28ea97455e3deb9f9c4 Mon Sep 17 00:00:00 2001 From: Stefan Majer Date: Fri, 4 Sep 2026 13:44:53 +0200 Subject: [PATCH 01/21] First vm protos --- proto/Makefile | 2 +- proto/buf.gen.yaml | 12 +-- proto/fits/api/v1/project.proto | 1 - proto/fits/api/v1/tenant.proto | 1 - proto/fits/api/vm/v1/os.proto | 14 +++ proto/fits/api/vm/v1/vm.proto | 146 ++++++++++++++++++++++++++++++++ 6 files changed, 167 insertions(+), 9 deletions(-) create mode 100644 proto/fits/api/vm/v1/os.proto create mode 100644 proto/fits/api/vm/v1/vm.proto diff --git a/proto/Makefile b/proto/Makefile index 93484a5..9ff2c69 100644 --- a/proto/Makefile +++ b/proto/Makefile @@ -1,5 +1,5 @@ MAKEFLAGS += --no-print-directory -BUF_VERSION := 1.69.0 +BUF_VERSION := 1.72.0 _buf: docker run --rm \ diff --git a/proto/buf.gen.yaml b/proto/buf.gen.yaml index 6b863e2..20e73ec 100644 --- a/proto/buf.gen.yaml +++ b/proto/buf.gen.yaml @@ -13,21 +13,21 @@ managed: value: github.com/fi-ts/api/go plugins: # go - - remote: buf.build/protocolbuffers/go:v1.36.11 + - remote: buf.build/protocolbuffers/go:v1.36.12 out: ../go opt: paths=source_relative - - remote: buf.build/connectrpc/go:v1.19.2 + - remote: buf.build/connectrpc/go:v1.20.0 out: ../go opt: paths=source_relative,simple # python - - remote: buf.build/protocolbuffers/python:v34.1 + - remote: buf.build/protocolbuffers/python:v36.1 out: ../python - - remote: buf.build/protocolbuffers/pyi:v34.1 + - remote: buf.build/protocolbuffers/pyi:v36.1 out: ../python - - remote: buf.build/connectrpc/python:v0.8.1 + - remote: buf.build/connectrpc/python:v0.10.1 out: ../python # js - - remote: buf.build/bufbuild/es:v2.12.0 + - remote: buf.build/bufbuild/es:v2.14.0 include_imports: true out: ../js opt: target=ts diff --git a/proto/fits/api/v1/project.proto b/proto/fits/api/v1/project.proto index a4a2871..f67bcce 100644 --- a/proto/fits/api/v1/project.proto +++ b/proto/fits/api/v1/project.proto @@ -5,7 +5,6 @@ package fits.api.v1; import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; -import "google/protobuf/timestamp.proto"; // ProjectService provides project management operations. service ProjectService { diff --git a/proto/fits/api/v1/tenant.proto b/proto/fits/api/v1/tenant.proto index 2edade7..70ee137 100644 --- a/proto/fits/api/v1/tenant.proto +++ b/proto/fits/api/v1/tenant.proto @@ -5,7 +5,6 @@ package fits.api.v1; import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; -import "google/protobuf/timestamp.proto"; // TenantService provides tenant management operations. service TenantService { diff --git a/proto/fits/api/vm/v1/os.proto b/proto/fits/api/vm/v1/os.proto new file mode 100644 index 0000000..6d314db --- /dev/null +++ b/proto/fits/api/vm/v1/os.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; + +package fits.api.vm.v1; + +import "buf/validate/validate.proto"; + +// TODO matthias define get list service + +// Os is the definition of a potential OS of a VM instance +// TODO create a dedicated service +message Os { + // Uuid of this os + string uuid = 1 [(buf.validate.field).string.uuid = true]; +} diff --git a/proto/fits/api/vm/v1/vm.proto b/proto/fits/api/vm/v1/vm.proto new file mode 100644 index 0000000..c4124b7 --- /dev/null +++ b/proto/fits/api/vm/v1/vm.proto @@ -0,0 +1,146 @@ +syntax = "proto3"; + +package fits.api.vm.v1; + +import "buf/validate/validate.proto"; +import "fits/api/v1/common.proto"; +import "fits/api/v1/predefined_rules.proto"; + +// VMService provides VM address management operations. +service VMService { + // Returns the VM address with the specified VM. + rpc Get(VMServiceGetRequest) returns (VMServiceGetResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; + option (fits.api.v1.auditing) = AUDITING_EXCLUDED; + } + // Creates a new VM address. + rpc Create(VMServiceCreateRequest) returns (VMServiceCreateResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.auditing) = AUDITING_INCLUDED; + } + // Updates an VM address. + rpc Update(VMServiceUpdateRequest) returns (VMServiceUpdateResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.auditing) = AUDITING_INCLUDED; + } + // Returns the list of all VM addresses. + rpc List(VMServiceListRequest) returns (VMServiceListResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; + option (fits.api.v1.auditing) = AUDITING_EXCLUDED; + } + // Deletes an VM address. + rpc Delete(VMServiceDeleteRequest) returns (VMServiceDeleteResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.auditing) = AUDITING_INCLUDED; + } +} + +// VM Instance Messages +message VMInstance { + // Uuid of this vm + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // Meta for this vm + fits.api.v1.Meta meta = 2; + // Name of this vm + string name = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; + // Project where this vm address belongs to + string project = 4 [(buf.validate.field).string.uuid = true]; +} + +// Service messages + +// VMServiceGetRequest TODO +message VMServiceGetRequest { + // Uuid of this vm + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // Project where this vm address belongs to + string project = 2 [(buf.validate.field).string.uuid = true]; +} + +// VMServiceGetResponse TODO +message VMServiceGetResponse { + // The vm + VMInstance vm = 1; +} + +// VMServiceCreateRequest TODO +message VMServiceCreateRequest { + // Project of the vm + string project = 1 [(buf.validate.field).string.uuid = true]; + // Name of the vm + optional string name = 2 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; + // Number of CPUs of this vm + uint32 cpu = 3; + // Ram of the vm in GB + uint32 ram = 4; + // OS Uuid of the OS to install in the vm instance + string os_uuid = 5 [(buf.validate.field).string.uuid = true]; + // VLAN Uuid of the VLAN to install in the vm instance into + string vlan_uuid = 6 [(buf.validate.field).string.uuid = true]; + // Location Uuid of the datacenter location to install in the vm instance + string location_uuid = 7 [(buf.validate.field).string.uuid = true]; + // Contact Uuid of who is the responsible contact of the vm instance + string contact_uuid = 8 [(buf.validate.field).string.uuid = true]; + // List of disks for this vm + repeated Disk disks = 9; + // Disks []DiskInputModel + // RequestedBy *string // TODO is inherited from the token making the create request -> stored in meta.createdBy + + // AccountingKey *string + // Availability VMInstanceLinuxCreateInputModelAvailability + // Backup bool + // Billable bool + // BillingStartDate *openapi_types.Date + // Contract bool + // ContractNumber *string + // Encrypted bool + // LdapUuid openapi_types.UUID + // OrderNumber string + // Serviceclass VMInstanceLinuxCreateInputModelServiceclass + // Storageclass VMInstanceLinuxCreateInputModelStorageclass + // TechnicalKey *string + // TenantUuid *string // TODO Defined with the projectUUID + // TransactionNumber *string +} + +// Disk +message Disk { + // AutoExtend if set to true the disk grows automatically + bool auto_extend = 1; + // Size if the disk in GB + optional uint64 size_in_gb = 2; // TODO discuss how this could be optional + // DriveLetter where this disk should be assigned + optional string drive_letter = 3; + // Label of the disk + string label = 4; + // MountPoint where this disk should be mounted + optional string mount_point = 5; // TODO this requires a Filesystem on the disk ? +} + +// VMServiceCreateResponse TODO +message VMServiceCreateResponse {} + +// VMServiceUpdateRequest TODO +message VMServiceUpdateRequest {} + +// VMServiceUpdateResponse TODO +message VMServiceUpdateResponse {} + +// VMServiceListRequest TODO +message VMServiceListRequest {} + +// VMServiceListResponse TODO +message VMServiceListResponse {} + +// VMServiceDeleteRequest TODO +message VMServiceDeleteRequest {} + +// VMServiceDeleteResponse TODO +message VMServiceDeleteResponse {} From 8960783606a41da68b1b10df0e2f4073a3ac4150 Mon Sep 17 00:00:00 2001 From: Stefan Majer Date: Fri, 4 Sep 2026 14:42:34 +0200 Subject: [PATCH 02/21] Fix client generation --- doc/index.html | 523 +++++++++++ generate/generate.go | 29 +- generate/go_client.tpl | 10 +- go/client/client.go | 26 + go/fits/api/v1/common.pb.go | 2 +- go/fits/api/v1/health.pb.go | 2 +- go/fits/api/v1/ip.pb.go | 2 +- go/fits/api/v1/method.pb.go | 2 +- go/fits/api/v1/predefined_rules.pb.go | 2 +- go/fits/api/v1/project.pb.go | 5 +- go/fits/api/v1/tenant.pb.go | 5 +- go/fits/api/v1/token.pb.go | 2 +- go/fits/api/v1/version.pb.go | 2 +- go/fits/api/vm/v1/os.pb.go | 127 +++ go/fits/api/vm/v1/vm.pb.go | 832 ++++++++++++++++++ go/fits/api/vm/v1/vmv1connect/vm.connect.go | 250 ++++++ go/permissions/servicepermissions.go | 28 + go/tests/mock_clients.go | 124 --- go/tests/mocks/client/Apivmv1.go | 83 ++ go/tests/mocks/client/Client.go | 46 + .../api/vm/v1/vmv1connect/VMServiceClient.go | 379 ++++++++ .../api/vm/v1/vmv1connect/VMServiceHandler.go | 379 ++++++++ js/buf/validate/validate_pb.ts | 2 +- js/fits/api/v1/common_pb.js | 2 +- js/fits/api/v1/common_pb.ts | 2 +- js/fits/api/v1/health_pb.js | 2 +- js/fits/api/v1/health_pb.ts | 2 +- js/fits/api/v1/ip_pb.js | 2 +- js/fits/api/v1/ip_pb.ts | 2 +- js/fits/api/v1/method_pb.js | 2 +- js/fits/api/v1/method_pb.ts | 2 +- js/fits/api/v1/predefined_rules_pb.js | 2 +- js/fits/api/v1/predefined_rules_pb.ts | 2 +- js/fits/api/v1/project_pb.js | 5 +- js/fits/api/v1/project_pb.ts | 5 +- js/fits/api/v1/tenant_pb.js | 5 +- js/fits/api/v1/tenant_pb.ts | 5 +- js/fits/api/v1/token_pb.js | 2 +- js/fits/api/v1/token_pb.ts | 2 +- js/fits/api/v1/version_pb.js | 2 +- js/fits/api/v1/version_pb.ts | 2 +- js/fits/api/vm/v1/os_pb.d.ts | 25 + js/fits/api/vm/v1/os_pb.js | 14 + js/fits/api/vm/v1/os_pb.ts | 37 + js/fits/api/vm/v1/vm_pb.d.ts | 361 ++++++++ js/fits/api/vm/v1/vm_pb.js | 77 ++ js/fits/api/vm/v1/vm_pb.ts | 431 +++++++++ proto/fits/api/vm/v1/vm.proto | 20 +- python/fits/api/v1/common_pb2.py | 4 +- python/fits/api/v1/health_connect.py | 15 +- python/fits/api/v1/health_pb2.py | 4 +- python/fits/api/v1/ip_connect.py | 15 +- python/fits/api/v1/ip_pb2.py | 4 +- python/fits/api/v1/method_connect.py | 15 +- python/fits/api/v1/method_pb2.py | 4 +- python/fits/api/v1/predefined_rules_pb2.py | 4 +- python/fits/api/v1/project_connect.py | 15 +- python/fits/api/v1/project_pb2.py | 55 +- python/fits/api/v1/project_pb2.pyi | 1 - python/fits/api/v1/tenant_connect.py | 15 +- python/fits/api/v1/tenant_pb2.py | 55 +- python/fits/api/v1/tenant_pb2.pyi | 1 - python/fits/api/v1/token_connect.py | 15 +- python/fits/api/v1/token_pb2.py | 4 +- python/fits/api/v1/version_connect.py | 15 +- python/fits/api/v1/version_pb2.py | 4 +- python/fits/api/vm/__init__.py | 0 python/fits/api/vm/v1/__init__.py | 0 python/fits/api/vm/v1/os_pb2.py | 40 + python/fits/api/vm/v1/os_pb2.pyi | 12 + python/fits/api/vm/v1/vm_connect.py | 391 ++++++++ python/fits/api/vm/v1/vm_pb2.py | 104 +++ python/fits/api/vm/v1/vm_pb2.pyi | 108 +++ 73 files changed, 4505 insertions(+), 270 deletions(-) create mode 100644 go/fits/api/vm/v1/os.pb.go create mode 100644 go/fits/api/vm/v1/vm.pb.go create mode 100644 go/fits/api/vm/v1/vmv1connect/vm.connect.go delete mode 100755 go/tests/mock_clients.go create mode 100644 go/tests/mocks/client/Apivmv1.go create mode 100644 go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceClient.go create mode 100644 go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceHandler.go create mode 100644 js/fits/api/vm/v1/os_pb.d.ts create mode 100644 js/fits/api/vm/v1/os_pb.js create mode 100644 js/fits/api/vm/v1/os_pb.ts create mode 100644 js/fits/api/vm/v1/vm_pb.d.ts create mode 100644 js/fits/api/vm/v1/vm_pb.js create mode 100644 js/fits/api/vm/v1/vm_pb.ts create mode 100644 python/fits/api/vm/__init__.py create mode 100644 python/fits/api/vm/v1/__init__.py create mode 100644 python/fits/api/vm/v1/os_pb2.py create mode 100644 python/fits/api/vm/v1/os_pb2.pyi create mode 100644 python/fits/api/vm/v1/vm_connect.py create mode 100644 python/fits/api/vm/v1/vm_pb2.py create mode 100644 python/fits/api/vm/v1/vm_pb2.pyi diff --git a/doc/index.html b/doc/index.html index 870898c..9dc88af 100644 --- a/doc/index.html +++ b/doc/index.html @@ -732,6 +732,84 @@

Table of Contents

+ +
  • + fits/api/vm/v1/os.proto +
      + +
    • + MOs +
    • + + + + +
    +
  • + + +
  • + fits/api/vm/v1/vm.proto + +
  • +
  • Scalar Value Types
  • @@ -4246,6 +4324,451 @@

    VersionService

    + +
    +

    fits/api/vm/v1/os.proto

    Top +
    +

    + + +

    Os

    +

    Os is the definition of a potential OS of a VM instance

    TODO create a dedicated service

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    uuidstring

    Uuid of this os

    + + + + + + + + + + + + + +
    +

    fits/api/vm/v1/vm.proto

    Top +
    +

    + + +

    Disk

    +

    Disk

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    auto_extendbool

    AutoExtend if set to true the disk grows automatically

    size_in_gbuint64optional

    Size if the disk in GB + +TODO discuss how this could be optional

    drive_letterstringoptional

    DriveLetter where this disk should be assigned

    labelstring

    Label of the disk

    mount_pointstringoptional

    MountPoint where this disk should be mounted + +TODO this requires a Filesystem on the disk ?

    + + + + + +

    VMInstance

    +

    VM Instance Messages

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    uuidstring

    Uuid of this vm

    metafits.api.v1.Meta

    Meta for this vm

    namestring

    Name of this vm

    projectstring

    Project where this vm address belongs to

    + + + + + +

    VMServiceCreateRequest

    +

    VMServiceCreateRequest TODO

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    projectstring

    Project of the vm

    namestringoptional

    Name of the vm

    cpuuint32

    Number of CPUs of this vm

    ramuint32

    Ram of the vm in GB

    os_uuidstring

    OS Uuid of the OS to install in the vm instance

    vlan_uuidstring

    VLAN Uuid of the VLAN to install in the vm instance into

    location_uuidstring

    Location Uuid of the datacenter location to install in the vm instance

    contact_uuidstring

    Contact Uuid of who is the responsible contact of the vm instance

    disksDiskrepeated

    List of disks for this vm + +Disks []DiskInputModel +RequestedBy *string // TODO is inherited from the token making the create request -> stored in meta.createdBy

    + + + + + +

    VMServiceCreateResponse

    +

    VMServiceCreateResponse TODO

    + + + + + +

    VMServiceDeleteRequest

    +

    VMServiceDeleteRequest TODO

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    projectstring

    Project of the vm

    + + + + + +

    VMServiceDeleteResponse

    +

    VMServiceDeleteResponse TODO

    + + + + + +

    VMServiceGetRequest

    +

    VMServiceGetRequest TODO

    + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    uuidstring

    Uuid of this vm

    projectstring

    Project where this vm address belongs to

    + + + + + +

    VMServiceGetResponse

    +

    VMServiceGetResponse TODO

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    vmVMInstance

    The vm

    + + + + + +

    VMServiceListRequest

    +

    VMServiceListRequest TODO

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    projectstring

    Project of the vm

    + + + + + +

    VMServiceListResponse

    +

    VMServiceListResponse TODO

    + + + + + +

    VMServiceUpdateRequest

    +

    VMServiceUpdateRequest TODO

    + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    projectstring

    Project of the vm

    update_metafits.api.v1.UpdateMeta

    UpdateMeta contains the timestamp and strategy to be used in this update request.

    + + + + + +

    VMServiceUpdateResponse

    +

    VMServiceUpdateResponse TODO

    + + + + + + + + + + + +

    VMService

    +

    VMService provides VM address management operations.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Method NameRequest TypeResponse TypeDescription
    GetVMServiceGetRequestVMServiceGetResponse

    Returns the VM address with the specified VM.

    CreateVMServiceCreateRequestVMServiceCreateResponse

    Creates a new VM address.

    UpdateVMServiceUpdateRequestVMServiceUpdateResponse

    Updates an VM address.

    ListVMServiceListRequestVMServiceListResponse

    Returns the list of all VM addresses.

    DeleteVMServiceDeleteRequestVMServiceDeleteResponse

    Deletes an VM address.

    + + +

    Scalar Value Types

    diff --git a/generate/generate.go b/generate/generate.go index ec342e3..b5db5b8 100644 --- a/generate/generate.go +++ b/generate/generate.go @@ -38,8 +38,9 @@ var ( ) type api struct { - Name string - Services []struct { + Name string + ConnectName string + Services []struct { Name string FileName string } @@ -71,15 +72,15 @@ func main() { panic(err) } - err = writeTemplate("../go/tests/mock_clients.go", mockClientTpl, svcs) - if err != nil { - panic(err) - } + // err = writeTemplate("../go/tests/mock_clients.go", mockClientTpl, svcs) + // if err != nil { + // panic(err) + // } - err = writePythonTemplate("../python/fits/client/client.py", pythonClientTpl, svcs) - if err != nil { - panic(err) - } + // err = writePythonTemplate("../python/fits/client/client.py", pythonClientTpl, svcs) + // if err != nil { + // panic(err) + // } } func servicePermissions(root string) (*permissions.ServicePermissions, error) { @@ -242,11 +243,15 @@ func svcs(root string) (map[string]api, error) { _, name, _ := strings.Cut(*fd.Package, "fits.") name = strings.ReplaceAll(name, ".", "") + segs := strings.Split(*fd.Package, ".") + connectName := strings.Join(segs[len(segs)-2:], "") + a, ok := result[name] if !ok { a = api{ - Name: name, - Path: path.Dir(strings.TrimPrefix(filename, root)), + Name: name, + ConnectName: connectName, + Path: path.Dir(strings.TrimPrefix(filename, root)), } } for _, serviceDesc := range fd.GetService() { diff --git a/generate/go_client.tpl b/generate/go_client.tpl index 7da715a..565695e 100644 --- a/generate/go_client.tpl +++ b/generate/go_client.tpl @@ -6,7 +6,7 @@ import ( compress "github.com/klauspost/connect-compress/v2" {{ range $name, $api := . -}} - "github.com/fi-ts/api/go{{ $api.Path }}/{{ $api.Name }}connect" + "github.com/fi-ts/api/go{{ $api.Path }}/{{ $api.ConnectName }}connect" {{ end }} ) @@ -24,13 +24,13 @@ type ( {{ range $name, $api := . -}} {{ $name | title }} interface { {{ range $svc := $api.Services -}} - {{ $svc.Name | trimSuffix "Service" }}() {{ $name }}connect.{{ $svc.Name }}Client + {{ $svc.Name | trimSuffix "Service" }}() {{ $api.ConnectName }}connect.{{ $svc.Name }}Client {{ end }} } {{ $name }} struct { {{ range $svc := $api.Services -}} - {{ $svc.Name | lower }} {{ $name }}connect.{{ $svc.Name }}Client + {{ $svc.Name | lower }} {{ $api.ConnectName }}connect.{{ $svc.Name }}Client {{ end }} } @@ -70,7 +70,7 @@ func New(config *DialConfig) (Client, error) { func (c *client) {{ $name | title }}() {{ $name | title }} { a := &{{ $name }}{ {{ range $svc := $api.Services -}} - {{ $svc.Name | lower }}: {{ $name }}connect.New{{ $svc.Name }}Client( + {{ $svc.Name | lower }}: {{ $api.ConnectName }}connect.New{{ $svc.Name }}Client( c.config.HttpClient(), c.config.BaseURL, connect.WithInterceptors(c.interceptors...), @@ -82,7 +82,7 @@ func (c *client) {{ $name | title }}() {{ $name | title }} { } {{ range $svc := $api.Services -}} -func (c *{{ $name }} ) {{ $svc.Name | trimSuffix "Service" }}() {{ $name }}connect.{{ $svc.Name }}Client { +func (c *{{ $name }} ) {{ $svc.Name | trimSuffix "Service" }}() {{ $api.ConnectName }}connect.{{ $svc.Name }}Client { return c.{{ $svc.Name | lower }} } {{ end }} diff --git a/go/client/client.go b/go/client/client.go index 6ba98ae..44dd914 100755 --- a/go/client/client.go +++ b/go/client/client.go @@ -6,11 +6,13 @@ import ( compress "github.com/klauspost/connect-compress/v2" "github.com/fi-ts/api/go/fits/api/v1/apiv1connect" + "github.com/fi-ts/api/go/fits/api/vm/v1/vmv1connect" ) type ( Client interface { Apiv1() Apiv1 + Apivmv1() Apivmv1 } client struct { config *DialConfig @@ -36,6 +38,14 @@ type ( tokenservice apiv1connect.TokenServiceClient versionservice apiv1connect.VersionServiceClient } + + Apivmv1 interface { + VM() vmv1connect.VMServiceClient + } + + apivmv1 struct { + vmservice vmv1connect.VMServiceClient + } ) func New(config *DialConfig) (Client, error) { @@ -136,3 +146,19 @@ func (c *apiv1) Token() apiv1connect.TokenServiceClient { func (c *apiv1) Version() apiv1connect.VersionServiceClient { return c.versionservice } + +func (c *client) Apivmv1() Apivmv1 { + a := &apivmv1{ + vmservice: vmv1connect.NewVMServiceClient( + c.config.HttpClient(), + c.config.BaseURL, + connect.WithInterceptors(c.interceptors...), + compress.WithAll(compress.LevelBalanced), + ), + } + return a +} + +func (c *apivmv1) VM() vmv1connect.VMServiceClient { + return c.vmservice +} diff --git a/go/fits/api/v1/common.pb.go b/go/fits/api/v1/common.pb.go index ffc347b..f1bbfde 100644 --- a/go/fits/api/v1/common.pb.go +++ b/go/fits/api/v1/common.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.11 +// protoc-gen-go v1.36.12 // protoc (unknown) // source: fits/api/v1/common.proto diff --git a/go/fits/api/v1/health.pb.go b/go/fits/api/v1/health.pb.go index 87a5ece..5aca16a 100644 --- a/go/fits/api/v1/health.pb.go +++ b/go/fits/api/v1/health.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.11 +// protoc-gen-go v1.36.12 // protoc (unknown) // source: fits/api/v1/health.proto diff --git a/go/fits/api/v1/ip.pb.go b/go/fits/api/v1/ip.pb.go index 7d28619..0e4ff9e 100644 --- a/go/fits/api/v1/ip.pb.go +++ b/go/fits/api/v1/ip.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.11 +// protoc-gen-go v1.36.12 // protoc (unknown) // source: fits/api/v1/ip.proto diff --git a/go/fits/api/v1/method.pb.go b/go/fits/api/v1/method.pb.go index fce8496..8738ef8 100644 --- a/go/fits/api/v1/method.pb.go +++ b/go/fits/api/v1/method.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.11 +// protoc-gen-go v1.36.12 // protoc (unknown) // source: fits/api/v1/method.proto diff --git a/go/fits/api/v1/predefined_rules.pb.go b/go/fits/api/v1/predefined_rules.pb.go index 3c63cc1..534ebe2 100644 --- a/go/fits/api/v1/predefined_rules.pb.go +++ b/go/fits/api/v1/predefined_rules.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.11 +// protoc-gen-go v1.36.12 // protoc (unknown) // source: fits/api/v1/predefined_rules.proto diff --git a/go/fits/api/v1/project.pb.go b/go/fits/api/v1/project.pb.go index 9cd1631..6cccd2e 100644 --- a/go/fits/api/v1/project.pb.go +++ b/go/fits/api/v1/project.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.11 +// protoc-gen-go v1.36.12 // protoc (unknown) // source: fits/api/v1/project.proto @@ -10,7 +10,6 @@ import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - _ "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" unsafe "unsafe" @@ -688,7 +687,7 @@ var File_fits_api_v1_project_proto protoreflect.FileDescriptor const file_fits_api_v1_project_proto_rawDesc = "" + "\n" + - "\x19fits/api/v1/project.proto\x12\vfits.api.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xdf\x01\n" + + "\x19fits/api/v1/project.proto\x12\vfits.api.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xdf\x01\n" + "\aProject\x12\x12\n" + "\x04uuid\x18\x01 \x01(\tR\x04uuid\x12%\n" + "\x04meta\x18\x02 \x01(\v2\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n" + diff --git a/go/fits/api/v1/tenant.pb.go b/go/fits/api/v1/tenant.pb.go index ca6fc80..333d4fb 100644 --- a/go/fits/api/v1/tenant.pb.go +++ b/go/fits/api/v1/tenant.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.11 +// protoc-gen-go v1.36.12 // protoc (unknown) // source: fits/api/v1/tenant.proto @@ -10,7 +10,6 @@ import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - _ "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" unsafe "unsafe" @@ -695,7 +694,7 @@ var File_fits_api_v1_tenant_proto protoreflect.FileDescriptor const file_fits_api_v1_tenant_proto_rawDesc = "" + "\n" + - "\x18fits/api/v1/tenant.proto\x12\vfits.api.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xe9\x01\n" + + "\x18fits/api/v1/tenant.proto\x12\vfits.api.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xe9\x01\n" + "\x06Tenant\x12\x14\n" + "\x05login\x18\x01 \x01(\tR\x05login\x12%\n" + "\x04meta\x18\x02 \x01(\v2\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n" + diff --git a/go/fits/api/v1/token.pb.go b/go/fits/api/v1/token.pb.go index 7aa98f5..64e5f07 100644 --- a/go/fits/api/v1/token.pb.go +++ b/go/fits/api/v1/token.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.11 +// protoc-gen-go v1.36.12 // protoc (unknown) // source: fits/api/v1/token.proto diff --git a/go/fits/api/v1/version.pb.go b/go/fits/api/v1/version.pb.go index c857651..673e159 100644 --- a/go/fits/api/v1/version.pb.go +++ b/go/fits/api/v1/version.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.11 +// protoc-gen-go v1.36.12 // protoc (unknown) // source: fits/api/v1/version.proto diff --git a/go/fits/api/vm/v1/os.pb.go b/go/fits/api/vm/v1/os.pb.go new file mode 100644 index 0000000..8d17e32 --- /dev/null +++ b/go/fits/api/vm/v1/os.pb.go @@ -0,0 +1,127 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.12 +// protoc (unknown) +// source: fits/api/vm/v1/os.proto + +package vmv1 + +import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Os is the definition of a potential OS of a VM instance +// TODO create a dedicated service +type Os struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Uuid of this os + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Os) Reset() { + *x = Os{} + mi := &file_fits_api_vm_v1_os_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Os) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Os) ProtoMessage() {} + +func (x *Os) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_os_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Os.ProtoReflect.Descriptor instead. +func (*Os) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_os_proto_rawDescGZIP(), []int{0} +} + +func (x *Os) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +var File_fits_api_vm_v1_os_proto protoreflect.FileDescriptor + +const file_fits_api_vm_v1_os_proto_rawDesc = "" + + "\n" + + "\x17fits/api/vm/v1/os.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\"\"\n" + + "\x02Os\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuidB\xa5\x01\n" + + "\x12com.fits.api.vm.v1B\aOsProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" + +var ( + file_fits_api_vm_v1_os_proto_rawDescOnce sync.Once + file_fits_api_vm_v1_os_proto_rawDescData []byte +) + +func file_fits_api_vm_v1_os_proto_rawDescGZIP() []byte { + file_fits_api_vm_v1_os_proto_rawDescOnce.Do(func() { + file_fits_api_vm_v1_os_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_os_proto_rawDesc), len(file_fits_api_vm_v1_os_proto_rawDesc))) + }) + return file_fits_api_vm_v1_os_proto_rawDescData +} + +var file_fits_api_vm_v1_os_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_fits_api_vm_v1_os_proto_goTypes = []any{ + (*Os)(nil), // 0: fits.api.vm.v1.Os +} +var file_fits_api_vm_v1_os_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_fits_api_vm_v1_os_proto_init() } +func file_fits_api_vm_v1_os_proto_init() { + if File_fits_api_vm_v1_os_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_os_proto_rawDesc), len(file_fits_api_vm_v1_os_proto_rawDesc)), + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_fits_api_vm_v1_os_proto_goTypes, + DependencyIndexes: file_fits_api_vm_v1_os_proto_depIdxs, + MessageInfos: file_fits_api_vm_v1_os_proto_msgTypes, + }.Build() + File_fits_api_vm_v1_os_proto = out.File + file_fits_api_vm_v1_os_proto_goTypes = nil + file_fits_api_vm_v1_os_proto_depIdxs = nil +} diff --git a/go/fits/api/vm/v1/vm.pb.go b/go/fits/api/vm/v1/vm.pb.go new file mode 100644 index 0000000..855ea2d --- /dev/null +++ b/go/fits/api/vm/v1/vm.pb.go @@ -0,0 +1,832 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.12 +// protoc (unknown) +// source: fits/api/vm/v1/vm.proto + +package vmv1 + +import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" + v1 "github.com/fi-ts/api/go/fits/api/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// VM Instance Messages +type VMInstance struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Uuid of this vm + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Meta for this vm + Meta *v1.Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` + // Name of this vm + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + // Project where this vm address belongs to + Project string `protobuf:"bytes,4,opt,name=project,proto3" json:"project,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMInstance) Reset() { + *x = VMInstance{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMInstance) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMInstance) ProtoMessage() {} + +func (x *VMInstance) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMInstance.ProtoReflect.Descriptor instead. +func (*VMInstance) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{0} +} + +func (x *VMInstance) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *VMInstance) GetMeta() *v1.Meta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *VMInstance) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *VMInstance) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +// VMServiceGetRequest TODO +type VMServiceGetRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Uuid of this vm + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Project where this vm address belongs to + Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceGetRequest) Reset() { + *x = VMServiceGetRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceGetRequest) ProtoMessage() {} + +func (x *VMServiceGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceGetRequest.ProtoReflect.Descriptor instead. +func (*VMServiceGetRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{1} +} + +func (x *VMServiceGetRequest) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *VMServiceGetRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +// VMServiceGetResponse TODO +type VMServiceGetResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The vm + Vm *VMInstance `protobuf:"bytes,1,opt,name=vm,proto3" json:"vm,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceGetResponse) Reset() { + *x = VMServiceGetResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceGetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceGetResponse) ProtoMessage() {} + +func (x *VMServiceGetResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceGetResponse.ProtoReflect.Descriptor instead. +func (*VMServiceGetResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{2} +} + +func (x *VMServiceGetResponse) GetVm() *VMInstance { + if x != nil { + return x.Vm + } + return nil +} + +// VMServiceCreateRequest TODO +type VMServiceCreateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Project of the vm + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + // Name of the vm + Name *string `protobuf:"bytes,2,opt,name=name,proto3,oneof" json:"name,omitempty"` + // Number of CPUs of this vm + Cpu uint32 `protobuf:"varint,3,opt,name=cpu,proto3" json:"cpu,omitempty"` + // Ram of the vm in GB + Ram uint32 `protobuf:"varint,4,opt,name=ram,proto3" json:"ram,omitempty"` + // OS Uuid of the OS to install in the vm instance + OsUuid string `protobuf:"bytes,5,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` + // VLAN Uuid of the VLAN to install in the vm instance into + VlanUuid string `protobuf:"bytes,6,opt,name=vlan_uuid,json=vlanUuid,proto3" json:"vlan_uuid,omitempty"` + // Location Uuid of the datacenter location to install in the vm instance + LocationUuid string `protobuf:"bytes,7,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` + // Contact Uuid of who is the responsible contact of the vm instance + ContactUuid string `protobuf:"bytes,8,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` + // List of disks for this vm + Disks []*Disk `protobuf:"bytes,9,rep,name=disks,proto3" json:"disks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceCreateRequest) Reset() { + *x = VMServiceCreateRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceCreateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceCreateRequest) ProtoMessage() {} + +func (x *VMServiceCreateRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceCreateRequest.ProtoReflect.Descriptor instead. +func (*VMServiceCreateRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{3} +} + +func (x *VMServiceCreateRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *VMServiceCreateRequest) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *VMServiceCreateRequest) GetCpu() uint32 { + if x != nil { + return x.Cpu + } + return 0 +} + +func (x *VMServiceCreateRequest) GetRam() uint32 { + if x != nil { + return x.Ram + } + return 0 +} + +func (x *VMServiceCreateRequest) GetOsUuid() string { + if x != nil { + return x.OsUuid + } + return "" +} + +func (x *VMServiceCreateRequest) GetVlanUuid() string { + if x != nil { + return x.VlanUuid + } + return "" +} + +func (x *VMServiceCreateRequest) GetLocationUuid() string { + if x != nil { + return x.LocationUuid + } + return "" +} + +func (x *VMServiceCreateRequest) GetContactUuid() string { + if x != nil { + return x.ContactUuid + } + return "" +} + +func (x *VMServiceCreateRequest) GetDisks() []*Disk { + if x != nil { + return x.Disks + } + return nil +} + +// Disk +type Disk struct { + state protoimpl.MessageState `protogen:"open.v1"` + // AutoExtend if set to true the disk grows automatically + AutoExtend bool `protobuf:"varint,1,opt,name=auto_extend,json=autoExtend,proto3" json:"auto_extend,omitempty"` + // Size if the disk in GB + SizeInGb *uint64 `protobuf:"varint,2,opt,name=size_in_gb,json=sizeInGb,proto3,oneof" json:"size_in_gb,omitempty"` // TODO discuss how this could be optional + // DriveLetter where this disk should be assigned + DriveLetter *string `protobuf:"bytes,3,opt,name=drive_letter,json=driveLetter,proto3,oneof" json:"drive_letter,omitempty"` + // Label of the disk + Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"` + // MountPoint where this disk should be mounted + MountPoint *string `protobuf:"bytes,5,opt,name=mount_point,json=mountPoint,proto3,oneof" json:"mount_point,omitempty"` // TODO this requires a Filesystem on the disk ? + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Disk) Reset() { + *x = Disk{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Disk) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Disk) ProtoMessage() {} + +func (x *Disk) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Disk.ProtoReflect.Descriptor instead. +func (*Disk) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{4} +} + +func (x *Disk) GetAutoExtend() bool { + if x != nil { + return x.AutoExtend + } + return false +} + +func (x *Disk) GetSizeInGb() uint64 { + if x != nil && x.SizeInGb != nil { + return *x.SizeInGb + } + return 0 +} + +func (x *Disk) GetDriveLetter() string { + if x != nil && x.DriveLetter != nil { + return *x.DriveLetter + } + return "" +} + +func (x *Disk) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +func (x *Disk) GetMountPoint() string { + if x != nil && x.MountPoint != nil { + return *x.MountPoint + } + return "" +} + +// VMServiceCreateResponse TODO +type VMServiceCreateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceCreateResponse) Reset() { + *x = VMServiceCreateResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceCreateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceCreateResponse) ProtoMessage() {} + +func (x *VMServiceCreateResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceCreateResponse.ProtoReflect.Descriptor instead. +func (*VMServiceCreateResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{5} +} + +// VMServiceUpdateRequest TODO +type VMServiceUpdateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Project of the vm + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + // UpdateMeta contains the timestamp and strategy to be used in this update request. + UpdateMeta *v1.UpdateMeta `protobuf:"bytes,2,opt,name=update_meta,json=updateMeta,proto3" json:"update_meta,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceUpdateRequest) Reset() { + *x = VMServiceUpdateRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceUpdateRequest) ProtoMessage() {} + +func (x *VMServiceUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceUpdateRequest.ProtoReflect.Descriptor instead. +func (*VMServiceUpdateRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{6} +} + +func (x *VMServiceUpdateRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *VMServiceUpdateRequest) GetUpdateMeta() *v1.UpdateMeta { + if x != nil { + return x.UpdateMeta + } + return nil +} + +// VMServiceUpdateResponse TODO +type VMServiceUpdateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceUpdateResponse) Reset() { + *x = VMServiceUpdateResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceUpdateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceUpdateResponse) ProtoMessage() {} + +func (x *VMServiceUpdateResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceUpdateResponse.ProtoReflect.Descriptor instead. +func (*VMServiceUpdateResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{7} +} + +// VMServiceListRequest TODO +type VMServiceListRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Project of the vm + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceListRequest) Reset() { + *x = VMServiceListRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceListRequest) ProtoMessage() {} + +func (x *VMServiceListRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceListRequest.ProtoReflect.Descriptor instead. +func (*VMServiceListRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{8} +} + +func (x *VMServiceListRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +// VMServiceListResponse TODO +type VMServiceListResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceListResponse) Reset() { + *x = VMServiceListResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceListResponse) ProtoMessage() {} + +func (x *VMServiceListResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceListResponse.ProtoReflect.Descriptor instead. +func (*VMServiceListResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{9} +} + +// VMServiceDeleteRequest TODO +type VMServiceDeleteRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Project of the vm + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceDeleteRequest) Reset() { + *x = VMServiceDeleteRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceDeleteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceDeleteRequest) ProtoMessage() {} + +func (x *VMServiceDeleteRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceDeleteRequest.ProtoReflect.Descriptor instead. +func (*VMServiceDeleteRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{10} +} + +func (x *VMServiceDeleteRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +// VMServiceDeleteResponse TODO +type VMServiceDeleteResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceDeleteResponse) Reset() { + *x = VMServiceDeleteResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceDeleteResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceDeleteResponse) ProtoMessage() {} + +func (x *VMServiceDeleteResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceDeleteResponse.ProtoReflect.Descriptor instead. +func (*VMServiceDeleteResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{11} +} + +var File_fits_api_vm_v1_vm_proto protoreflect.FileDescriptor + +const file_fits_api_vm_v1_vm_proto_rawDesc = "" + + "\n" + + "\x17fits/api/vm/v1/vm.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x96\x01\n" + + "\n" + + "VMInstance\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n" + + "\x04meta\x18\x02 \x01(\v2\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n" + + "\x04name\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\"\n" + + "\aproject\x18\x04 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"W\n" + + "\x13VMServiceGetRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + + "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"B\n" + + "\x14VMServiceGetResponse\x12*\n" + + "\x02vm\x18\x01 \x01(\v2\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"\xe1\x02\n" + + "\x16VMServiceCreateRequest\x12\"\n" + + "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12$\n" + + "\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x10\n" + + "\x03cpu\x18\x03 \x01(\rR\x03cpu\x12\x10\n" + + "\x03ram\x18\x04 \x01(\rR\x03ram\x12!\n" + + "\aos_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n" + + "\tvlan_uuid\x18\x06 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bvlanUuid\x12-\n" + + "\rlocation_uuid\x18\a \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\flocationUuid\x12+\n" + + "\fcontact_uuid\x18\b \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\x12*\n" + + "\x05disks\x18\t \x03(\v2\x14.fits.api.vm.v1.DiskR\x05disksB\a\n" + + "\x05_name\"\xde\x01\n" + + "\x04Disk\x12\x1f\n" + + "\vauto_extend\x18\x01 \x01(\bR\n" + + "autoExtend\x12!\n" + + "\n" + + "size_in_gb\x18\x02 \x01(\x04H\x00R\bsizeInGb\x88\x01\x01\x12&\n" + + "\fdrive_letter\x18\x03 \x01(\tH\x01R\vdriveLetter\x88\x01\x01\x12\x14\n" + + "\x05label\x18\x04 \x01(\tR\x05label\x12$\n" + + "\vmount_point\x18\x05 \x01(\tH\x02R\n" + + "mountPoint\x88\x01\x01B\r\n" + + "\v_size_in_gbB\x0f\n" + + "\r_drive_letterB\x0e\n" + + "\f_mount_point\"\x19\n" + + "\x17VMServiceCreateResponse\"~\n" + + "\x16VMServiceUpdateRequest\x12\"\n" + + "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12@\n" + + "\vupdate_meta\x18\x02 \x01(\v2\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\n" + + "updateMeta\"\x19\n" + + "\x17VMServiceUpdateResponse\":\n" + + "\x14VMServiceListRequest\x12\"\n" + + "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"\x17\n" + + "\x15VMServiceListResponse\"<\n" + + "\x16VMServiceDeleteRequest\x12\"\n" + + "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"\x19\n" + + "\x17VMServiceDeleteResponse2\x81\x04\n" + + "\tVMService\x12]\n" + + "\x03Get\x12#.fits.api.vm.v1.VMServiceGetRequest\x1a$.fits.api.vm.v1.VMServiceGetResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12e\n" + + "\x06Create\x12&.fits.api.vm.v1.VMServiceCreateRequest\x1a'.fits.api.vm.v1.VMServiceCreateResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12e\n" + + "\x06Update\x12&.fits.api.vm.v1.VMServiceUpdateRequest\x1a'.fits.api.vm.v1.VMServiceUpdateResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12`\n" + + "\x04List\x12$.fits.api.vm.v1.VMServiceListRequest\x1a%.fits.api.vm.v1.VMServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12e\n" + + "\x06Delete\x12&.fits.api.vm.v1.VMServiceDeleteRequest\x1a'.fits.api.vm.v1.VMServiceDeleteResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01B\xa5\x01\n" + + "\x12com.fits.api.vm.v1B\aVmProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" + +var ( + file_fits_api_vm_v1_vm_proto_rawDescOnce sync.Once + file_fits_api_vm_v1_vm_proto_rawDescData []byte +) + +func file_fits_api_vm_v1_vm_proto_rawDescGZIP() []byte { + file_fits_api_vm_v1_vm_proto_rawDescOnce.Do(func() { + file_fits_api_vm_v1_vm_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_vm_proto_rawDesc), len(file_fits_api_vm_v1_vm_proto_rawDesc))) + }) + return file_fits_api_vm_v1_vm_proto_rawDescData +} + +var file_fits_api_vm_v1_vm_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_fits_api_vm_v1_vm_proto_goTypes = []any{ + (*VMInstance)(nil), // 0: fits.api.vm.v1.VMInstance + (*VMServiceGetRequest)(nil), // 1: fits.api.vm.v1.VMServiceGetRequest + (*VMServiceGetResponse)(nil), // 2: fits.api.vm.v1.VMServiceGetResponse + (*VMServiceCreateRequest)(nil), // 3: fits.api.vm.v1.VMServiceCreateRequest + (*Disk)(nil), // 4: fits.api.vm.v1.Disk + (*VMServiceCreateResponse)(nil), // 5: fits.api.vm.v1.VMServiceCreateResponse + (*VMServiceUpdateRequest)(nil), // 6: fits.api.vm.v1.VMServiceUpdateRequest + (*VMServiceUpdateResponse)(nil), // 7: fits.api.vm.v1.VMServiceUpdateResponse + (*VMServiceListRequest)(nil), // 8: fits.api.vm.v1.VMServiceListRequest + (*VMServiceListResponse)(nil), // 9: fits.api.vm.v1.VMServiceListResponse + (*VMServiceDeleteRequest)(nil), // 10: fits.api.vm.v1.VMServiceDeleteRequest + (*VMServiceDeleteResponse)(nil), // 11: fits.api.vm.v1.VMServiceDeleteResponse + (*v1.Meta)(nil), // 12: fits.api.v1.Meta + (*v1.UpdateMeta)(nil), // 13: fits.api.v1.UpdateMeta +} +var file_fits_api_vm_v1_vm_proto_depIdxs = []int32{ + 12, // 0: fits.api.vm.v1.VMInstance.meta:type_name -> fits.api.v1.Meta + 0, // 1: fits.api.vm.v1.VMServiceGetResponse.vm:type_name -> fits.api.vm.v1.VMInstance + 4, // 2: fits.api.vm.v1.VMServiceCreateRequest.disks:type_name -> fits.api.vm.v1.Disk + 13, // 3: fits.api.vm.v1.VMServiceUpdateRequest.update_meta:type_name -> fits.api.v1.UpdateMeta + 1, // 4: fits.api.vm.v1.VMService.Get:input_type -> fits.api.vm.v1.VMServiceGetRequest + 3, // 5: fits.api.vm.v1.VMService.Create:input_type -> fits.api.vm.v1.VMServiceCreateRequest + 6, // 6: fits.api.vm.v1.VMService.Update:input_type -> fits.api.vm.v1.VMServiceUpdateRequest + 8, // 7: fits.api.vm.v1.VMService.List:input_type -> fits.api.vm.v1.VMServiceListRequest + 10, // 8: fits.api.vm.v1.VMService.Delete:input_type -> fits.api.vm.v1.VMServiceDeleteRequest + 2, // 9: fits.api.vm.v1.VMService.Get:output_type -> fits.api.vm.v1.VMServiceGetResponse + 5, // 10: fits.api.vm.v1.VMService.Create:output_type -> fits.api.vm.v1.VMServiceCreateResponse + 7, // 11: fits.api.vm.v1.VMService.Update:output_type -> fits.api.vm.v1.VMServiceUpdateResponse + 9, // 12: fits.api.vm.v1.VMService.List:output_type -> fits.api.vm.v1.VMServiceListResponse + 11, // 13: fits.api.vm.v1.VMService.Delete:output_type -> fits.api.vm.v1.VMServiceDeleteResponse + 9, // [9:14] is the sub-list for method output_type + 4, // [4:9] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { file_fits_api_vm_v1_vm_proto_init() } +func file_fits_api_vm_v1_vm_proto_init() { + if File_fits_api_vm_v1_vm_proto != nil { + return + } + file_fits_api_vm_v1_vm_proto_msgTypes[3].OneofWrappers = []any{} + file_fits_api_vm_v1_vm_proto_msgTypes[4].OneofWrappers = []any{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_vm_proto_rawDesc), len(file_fits_api_vm_v1_vm_proto_rawDesc)), + NumEnums: 0, + NumMessages: 12, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_fits_api_vm_v1_vm_proto_goTypes, + DependencyIndexes: file_fits_api_vm_v1_vm_proto_depIdxs, + MessageInfos: file_fits_api_vm_v1_vm_proto_msgTypes, + }.Build() + File_fits_api_vm_v1_vm_proto = out.File + file_fits_api_vm_v1_vm_proto_goTypes = nil + file_fits_api_vm_v1_vm_proto_depIdxs = nil +} diff --git a/go/fits/api/vm/v1/vmv1connect/vm.connect.go b/go/fits/api/vm/v1/vmv1connect/vm.connect.go new file mode 100644 index 0000000..31a60f9 --- /dev/null +++ b/go/fits/api/vm/v1/vmv1connect/vm.connect.go @@ -0,0 +1,250 @@ +// Code generated by protoc-gen-connect-go. DO NOT EDIT. +// +// Source: fits/api/vm/v1/vm.proto + +package vmv1connect + +import ( + connect "connectrpc.com/connect" + context "context" + errors "errors" + v1 "github.com/fi-ts/api/go/fits/api/vm/v1" + http "net/http" + strings "strings" +) + +// This is a compile-time assertion to ensure that this generated file and the connect package are +// compatible. If you get a compiler error that this constant is not defined, this code was +// generated with a version of connect newer than the one compiled into your binary. You can fix the +// problem by either regenerating this code with an older version of connect or updating the connect +// version compiled into your binary. +const _ = connect.IsAtLeastVersion1_13_0 + +const ( + // VMServiceName is the fully-qualified name of the VMService service. + VMServiceName = "fits.api.vm.v1.VMService" +) + +// These constants are the fully-qualified names of the RPCs defined in this package. They're +// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route. +// +// Note that these are different from the fully-qualified method names used by +// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to +// reflection-formatted method names, remove the leading slash and convert the remaining slash to a +// period. +const ( + // VMServiceGetProcedure is the fully-qualified name of the VMService's Get RPC. + VMServiceGetProcedure = "/fits.api.vm.v1.VMService/Get" + // VMServiceCreateProcedure is the fully-qualified name of the VMService's Create RPC. + VMServiceCreateProcedure = "/fits.api.vm.v1.VMService/Create" + // VMServiceUpdateProcedure is the fully-qualified name of the VMService's Update RPC. + VMServiceUpdateProcedure = "/fits.api.vm.v1.VMService/Update" + // VMServiceListProcedure is the fully-qualified name of the VMService's List RPC. + VMServiceListProcedure = "/fits.api.vm.v1.VMService/List" + // VMServiceDeleteProcedure is the fully-qualified name of the VMService's Delete RPC. + VMServiceDeleteProcedure = "/fits.api.vm.v1.VMService/Delete" +) + +// VMServiceClient is a client for the fits.api.vm.v1.VMService service. +type VMServiceClient interface { + // Returns the VM address with the specified VM. + Get(context.Context, *v1.VMServiceGetRequest) (*v1.VMServiceGetResponse, error) + // Creates a new VM address. + Create(context.Context, *v1.VMServiceCreateRequest) (*v1.VMServiceCreateResponse, error) + // Updates an VM address. + Update(context.Context, *v1.VMServiceUpdateRequest) (*v1.VMServiceUpdateResponse, error) + // Returns the list of all VM addresses. + List(context.Context, *v1.VMServiceListRequest) (*v1.VMServiceListResponse, error) + // Deletes an VM address. + Delete(context.Context, *v1.VMServiceDeleteRequest) (*v1.VMServiceDeleteResponse, error) +} + +// NewVMServiceClient constructs a client for the fits.api.vm.v1.VMService service. By default, it +// uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends +// uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or +// connect.WithGRPCWeb() options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewVMServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) VMServiceClient { + baseURL = strings.TrimRight(baseURL, "/") + vMServiceMethods := v1.File_fits_api_vm_v1_vm_proto.Services().ByName("VMService").Methods() + return &vMServiceClient{ + get: connect.NewClient[v1.VMServiceGetRequest, v1.VMServiceGetResponse]( + httpClient, + baseURL+VMServiceGetProcedure, + connect.WithSchema(vMServiceMethods.ByName("Get")), + connect.WithClientOptions(opts...), + ), + create: connect.NewClient[v1.VMServiceCreateRequest, v1.VMServiceCreateResponse]( + httpClient, + baseURL+VMServiceCreateProcedure, + connect.WithSchema(vMServiceMethods.ByName("Create")), + connect.WithClientOptions(opts...), + ), + update: connect.NewClient[v1.VMServiceUpdateRequest, v1.VMServiceUpdateResponse]( + httpClient, + baseURL+VMServiceUpdateProcedure, + connect.WithSchema(vMServiceMethods.ByName("Update")), + connect.WithClientOptions(opts...), + ), + list: connect.NewClient[v1.VMServiceListRequest, v1.VMServiceListResponse]( + httpClient, + baseURL+VMServiceListProcedure, + connect.WithSchema(vMServiceMethods.ByName("List")), + connect.WithClientOptions(opts...), + ), + delete: connect.NewClient[v1.VMServiceDeleteRequest, v1.VMServiceDeleteResponse]( + httpClient, + baseURL+VMServiceDeleteProcedure, + connect.WithSchema(vMServiceMethods.ByName("Delete")), + connect.WithClientOptions(opts...), + ), + } +} + +// vMServiceClient implements VMServiceClient. +type vMServiceClient struct { + get *connect.Client[v1.VMServiceGetRequest, v1.VMServiceGetResponse] + create *connect.Client[v1.VMServiceCreateRequest, v1.VMServiceCreateResponse] + update *connect.Client[v1.VMServiceUpdateRequest, v1.VMServiceUpdateResponse] + list *connect.Client[v1.VMServiceListRequest, v1.VMServiceListResponse] + delete *connect.Client[v1.VMServiceDeleteRequest, v1.VMServiceDeleteResponse] +} + +// Get calls fits.api.vm.v1.VMService.Get. +func (c *vMServiceClient) Get(ctx context.Context, req *v1.VMServiceGetRequest) (*v1.VMServiceGetResponse, error) { + response, err := c.get.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// Create calls fits.api.vm.v1.VMService.Create. +func (c *vMServiceClient) Create(ctx context.Context, req *v1.VMServiceCreateRequest) (*v1.VMServiceCreateResponse, error) { + response, err := c.create.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// Update calls fits.api.vm.v1.VMService.Update. +func (c *vMServiceClient) Update(ctx context.Context, req *v1.VMServiceUpdateRequest) (*v1.VMServiceUpdateResponse, error) { + response, err := c.update.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// List calls fits.api.vm.v1.VMService.List. +func (c *vMServiceClient) List(ctx context.Context, req *v1.VMServiceListRequest) (*v1.VMServiceListResponse, error) { + response, err := c.list.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// Delete calls fits.api.vm.v1.VMService.Delete. +func (c *vMServiceClient) Delete(ctx context.Context, req *v1.VMServiceDeleteRequest) (*v1.VMServiceDeleteResponse, error) { + response, err := c.delete.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// VMServiceHandler is an implementation of the fits.api.vm.v1.VMService service. +type VMServiceHandler interface { + // Returns the VM address with the specified VM. + Get(context.Context, *v1.VMServiceGetRequest) (*v1.VMServiceGetResponse, error) + // Creates a new VM address. + Create(context.Context, *v1.VMServiceCreateRequest) (*v1.VMServiceCreateResponse, error) + // Updates an VM address. + Update(context.Context, *v1.VMServiceUpdateRequest) (*v1.VMServiceUpdateResponse, error) + // Returns the list of all VM addresses. + List(context.Context, *v1.VMServiceListRequest) (*v1.VMServiceListResponse, error) + // Deletes an VM address. + Delete(context.Context, *v1.VMServiceDeleteRequest) (*v1.VMServiceDeleteResponse, error) +} + +// NewVMServiceHandler builds an HTTP handler from the service implementation. It returns the path +// on which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewVMServiceHandler(svc VMServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { + vMServiceMethods := v1.File_fits_api_vm_v1_vm_proto.Services().ByName("VMService").Methods() + vMServiceGetHandler := connect.NewUnaryHandlerSimple( + VMServiceGetProcedure, + svc.Get, + connect.WithSchema(vMServiceMethods.ByName("Get")), + connect.WithHandlerOptions(opts...), + ) + vMServiceCreateHandler := connect.NewUnaryHandlerSimple( + VMServiceCreateProcedure, + svc.Create, + connect.WithSchema(vMServiceMethods.ByName("Create")), + connect.WithHandlerOptions(opts...), + ) + vMServiceUpdateHandler := connect.NewUnaryHandlerSimple( + VMServiceUpdateProcedure, + svc.Update, + connect.WithSchema(vMServiceMethods.ByName("Update")), + connect.WithHandlerOptions(opts...), + ) + vMServiceListHandler := connect.NewUnaryHandlerSimple( + VMServiceListProcedure, + svc.List, + connect.WithSchema(vMServiceMethods.ByName("List")), + connect.WithHandlerOptions(opts...), + ) + vMServiceDeleteHandler := connect.NewUnaryHandlerSimple( + VMServiceDeleteProcedure, + svc.Delete, + connect.WithSchema(vMServiceMethods.ByName("Delete")), + connect.WithHandlerOptions(opts...), + ) + return "/fits.api.vm.v1.VMService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case VMServiceGetProcedure: + vMServiceGetHandler.ServeHTTP(w, r) + case VMServiceCreateProcedure: + vMServiceCreateHandler.ServeHTTP(w, r) + case VMServiceUpdateProcedure: + vMServiceUpdateHandler.ServeHTTP(w, r) + case VMServiceListProcedure: + vMServiceListHandler.ServeHTTP(w, r) + case VMServiceDeleteProcedure: + vMServiceDeleteHandler.ServeHTTP(w, r) + default: + http.NotFound(w, r) + } + }) +} + +// UnimplementedVMServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedVMServiceHandler struct{} + +func (UnimplementedVMServiceHandler) Get(context.Context, *v1.VMServiceGetRequest) (*v1.VMServiceGetResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.Get is not implemented")) +} + +func (UnimplementedVMServiceHandler) Create(context.Context, *v1.VMServiceCreateRequest) (*v1.VMServiceCreateResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.Create is not implemented")) +} + +func (UnimplementedVMServiceHandler) Update(context.Context, *v1.VMServiceUpdateRequest) (*v1.VMServiceUpdateResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.Update is not implemented")) +} + +func (UnimplementedVMServiceHandler) List(context.Context, *v1.VMServiceListRequest) (*v1.VMServiceListResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.List is not implemented")) +} + +func (UnimplementedVMServiceHandler) Delete(context.Context, *v1.VMServiceDeleteRequest) (*v1.VMServiceDeleteResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.Delete is not implemented")) +} diff --git a/go/permissions/servicepermissions.go b/go/permissions/servicepermissions.go index 0a5bb6d..6623709 100755 --- a/go/permissions/servicepermissions.go +++ b/go/permissions/servicepermissions.go @@ -15,6 +15,7 @@ func GetServices() []string { "fits.api.v1.TenantService", "fits.api.v1.TokenService", "fits.api.v1.VersionService", + "fits.api.vm.v1.VMService", } } @@ -52,6 +53,11 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.v1.ProjectService/Delete": {}, "/fits.api.v1.ProjectService/Get": {}, "/fits.api.v1.ProjectService/Update": {}, + "/fits.api.vm.v1.VMService/Create": {}, + "/fits.api.vm.v1.VMService/Delete": {}, + "/fits.api.vm.v1.VMService/Get": {}, + "/fits.api.vm.v1.VMService/List": {}, + "/fits.api.vm.v1.VMService/Update": {}, }, v1.ProjectRole_PROJECT_ROLE_EDITOR: map[string]struct{}{ "/fits.api.v1.IPService/Create": {}, @@ -61,11 +67,18 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.v1.IPService/Update": {}, "/fits.api.v1.ProjectService/Get": {}, "/fits.api.v1.ProjectService/Update": {}, + "/fits.api.vm.v1.VMService/Create": {}, + "/fits.api.vm.v1.VMService/Delete": {}, + "/fits.api.vm.v1.VMService/Get": {}, + "/fits.api.vm.v1.VMService/List": {}, + "/fits.api.vm.v1.VMService/Update": {}, }, v1.ProjectRole_PROJECT_ROLE_VIEWER: map[string]struct{}{ "/fits.api.v1.IPService/Get": {}, "/fits.api.v1.IPService/List": {}, "/fits.api.v1.ProjectService/Get": {}, + "/fits.api.vm.v1.VMService/Get": {}, + "/fits.api.vm.v1.VMService/List": {}, }, }, }, @@ -95,6 +108,11 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.v1.TokenService/Revoke": {}, "/fits.api.v1.TokenService/Update": {}, "/fits.api.v1.VersionService/Get": {}, + "/fits.api.vm.v1.VMService/Create": {}, + "/fits.api.vm.v1.VMService/Delete": {}, + "/fits.api.vm.v1.VMService/Get": {}, + "/fits.api.vm.v1.VMService/List": {}, + "/fits.api.vm.v1.VMService/Update": {}, "/grpc.reflection.v1.ServerReflection/ServerReflectionInfo": {}, "/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo": {}, }, @@ -134,6 +152,11 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.v1.ProjectService/Delete": true, "/fits.api.v1.ProjectService/Get": true, "/fits.api.v1.ProjectService/Update": true, + "/fits.api.vm.v1.VMService/Create": true, + "/fits.api.vm.v1.VMService/Delete": true, + "/fits.api.vm.v1.VMService/Get": true, + "/fits.api.vm.v1.VMService/List": true, + "/fits.api.vm.v1.VMService/Update": true, }, }, Auditable: map[string]bool{ @@ -162,6 +185,11 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.v1.TokenService/Revoke": true, "/fits.api.v1.TokenService/Update": true, "/fits.api.v1.VersionService/Get": false, + "/fits.api.vm.v1.VMService/Create": true, + "/fits.api.vm.v1.VMService/Delete": true, + "/fits.api.vm.v1.VMService/Get": false, + "/fits.api.vm.v1.VMService/List": false, + "/fits.api.vm.v1.VMService/Update": true, }, } } diff --git a/go/tests/mock_clients.go b/go/tests/mock_clients.go deleted file mode 100755 index 069bf71..0000000 --- a/go/tests/mock_clients.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated generate_clients.go. DO NOT EDIT. -package apitests - -import ( - "testing" - - apiclient "github.com/fi-ts/api/go/client" - "github.com/fi-ts/api/go/fits/api/v1/apiv1connect" - apiv1mocks "github.com/fi-ts/api/go/tests/mocks/fits/api/v1/apiv1connect" - - "github.com/stretchr/testify/mock" -) - -type ( - client struct { - apiv1service *apiv1 - } - - ClientMockFns struct { - Apiv1Mocks *Apiv1MockFns - } - - wrapper struct { - t *testing.T - } - apiv1 struct { - healthservice *apiv1mocks.HealthServiceClient - ipservice *apiv1mocks.IPServiceClient - methodservice *apiv1mocks.MethodServiceClient - projectservice *apiv1mocks.ProjectServiceClient - tenantservice *apiv1mocks.TenantServiceClient - tokenservice *apiv1mocks.TokenServiceClient - versionservice *apiv1mocks.VersionServiceClient - } - - Apiv1MockFns struct { - Health func(m *mock.Mock) - IP func(m *mock.Mock) - Method func(m *mock.Mock) - Project func(m *mock.Mock) - Tenant func(m *mock.Mock) - Token func(m *mock.Mock) - Version func(m *mock.Mock) - } -) - -func New(t *testing.T) *wrapper { - return &wrapper{t: t} -} - -func (w wrapper) Client(fns *ClientMockFns) *client { - return &client{ - apiv1service: w.Apiv1(fns.Apiv1Mocks), - } -} - -func (c *client) Apiv1() apiclient.Apiv1 { - return c.apiv1service -} - -func (w wrapper) Apiv1(fns *Apiv1MockFns) *apiv1 { - return newapiv1(w.t, fns) -} - -func newapiv1(t *testing.T, fns *Apiv1MockFns) *apiv1 { - a := &apiv1{ - healthservice: apiv1mocks.NewHealthServiceClient(t), - ipservice: apiv1mocks.NewIPServiceClient(t), - methodservice: apiv1mocks.NewMethodServiceClient(t), - projectservice: apiv1mocks.NewProjectServiceClient(t), - tenantservice: apiv1mocks.NewTenantServiceClient(t), - tokenservice: apiv1mocks.NewTokenServiceClient(t), - versionservice: apiv1mocks.NewVersionServiceClient(t), - } - - if fns != nil { - if fns.Health != nil { - fns.Health(&a.healthservice.Mock) - } - if fns.IP != nil { - fns.IP(&a.ipservice.Mock) - } - if fns.Method != nil { - fns.Method(&a.methodservice.Mock) - } - if fns.Project != nil { - fns.Project(&a.projectservice.Mock) - } - if fns.Tenant != nil { - fns.Tenant(&a.tenantservice.Mock) - } - if fns.Token != nil { - fns.Token(&a.tokenservice.Mock) - } - if fns.Version != nil { - fns.Version(&a.versionservice.Mock) - } - - } - - return a -} - -func (c *apiv1) Health() apiv1connect.HealthServiceClient { - return c.healthservice -} -func (c *apiv1) IP() apiv1connect.IPServiceClient { - return c.ipservice -} -func (c *apiv1) Method() apiv1connect.MethodServiceClient { - return c.methodservice -} -func (c *apiv1) Project() apiv1connect.ProjectServiceClient { - return c.projectservice -} -func (c *apiv1) Tenant() apiv1connect.TenantServiceClient { - return c.tenantservice -} -func (c *apiv1) Token() apiv1connect.TokenServiceClient { - return c.tokenservice -} -func (c *apiv1) Version() apiv1connect.VersionServiceClient { - return c.versionservice -} diff --git a/go/tests/mocks/client/Apivmv1.go b/go/tests/mocks/client/Apivmv1.go new file mode 100644 index 0000000..211089e --- /dev/null +++ b/go/tests/mocks/client/Apivmv1.go @@ -0,0 +1,83 @@ +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify + +package client + +import ( + "github.com/fi-ts/api/go/fits/api/vm/v1/vmv1connect" + mock "github.com/stretchr/testify/mock" +) + +// NewApivmv1 creates a new instance of Apivmv1. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewApivmv1(t interface { + mock.TestingT + Cleanup(func()) +}) *Apivmv1 { + mock := &Apivmv1{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// Apivmv1 is an autogenerated mock type for the Apivmv1 type +type Apivmv1 struct { + mock.Mock +} + +type Apivmv1_Expecter struct { + mock *mock.Mock +} + +func (_m *Apivmv1) EXPECT() *Apivmv1_Expecter { + return &Apivmv1_Expecter{mock: &_m.Mock} +} + +// VM provides a mock function for the type Apivmv1 +func (_mock *Apivmv1) VM() vmv1connect.VMServiceClient { + ret := _mock.Called() + + if len(ret) == 0 { + panic("no return value specified for VM") + } + + var r0 vmv1connect.VMServiceClient + if returnFunc, ok := ret.Get(0).(func() vmv1connect.VMServiceClient); ok { + r0 = returnFunc() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(vmv1connect.VMServiceClient) + } + } + return r0 +} + +// Apivmv1_VM_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'VM' +type Apivmv1_VM_Call struct { + *mock.Call +} + +// VM is a helper method to define mock.On call +func (_e *Apivmv1_Expecter) VM() *Apivmv1_VM_Call { + return &Apivmv1_VM_Call{Call: _e.mock.On("VM")} +} + +func (_c *Apivmv1_VM_Call) Run(run func()) *Apivmv1_VM_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *Apivmv1_VM_Call) Return(vMServiceClient vmv1connect.VMServiceClient) *Apivmv1_VM_Call { + _c.Call.Return(vMServiceClient) + return _c +} + +func (_c *Apivmv1_VM_Call) RunAndReturn(run func() vmv1connect.VMServiceClient) *Apivmv1_VM_Call { + _c.Call.Return(run) + return _c +} diff --git a/go/tests/mocks/client/Client.go b/go/tests/mocks/client/Client.go index 1335272..e9ba60e 100644 --- a/go/tests/mocks/client/Client.go +++ b/go/tests/mocks/client/Client.go @@ -81,3 +81,49 @@ func (_c *Client_Apiv1_Call) RunAndReturn(run func() client.Apiv1) *Client_Apiv1 _c.Call.Return(run) return _c } + +// Apivmv1 provides a mock function for the type Client +func (_mock *Client) Apivmv1() client.Apivmv1 { + ret := _mock.Called() + + if len(ret) == 0 { + panic("no return value specified for Apivmv1") + } + + var r0 client.Apivmv1 + if returnFunc, ok := ret.Get(0).(func() client.Apivmv1); ok { + r0 = returnFunc() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(client.Apivmv1) + } + } + return r0 +} + +// Client_Apivmv1_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Apivmv1' +type Client_Apivmv1_Call struct { + *mock.Call +} + +// Apivmv1 is a helper method to define mock.On call +func (_e *Client_Expecter) Apivmv1() *Client_Apivmv1_Call { + return &Client_Apivmv1_Call{Call: _e.mock.On("Apivmv1")} +} + +func (_c *Client_Apivmv1_Call) Run(run func()) *Client_Apivmv1_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *Client_Apivmv1_Call) Return(apivmv1 client.Apivmv1) *Client_Apivmv1_Call { + _c.Call.Return(apivmv1) + return _c +} + +func (_c *Client_Apivmv1_Call) RunAndReturn(run func() client.Apivmv1) *Client_Apivmv1_Call { + _c.Call.Return(run) + return _c +} diff --git a/go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceClient.go b/go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceClient.go new file mode 100644 index 0000000..85a85a9 --- /dev/null +++ b/go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceClient.go @@ -0,0 +1,379 @@ +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify + +package vmv1connect + +import ( + "context" + + "github.com/fi-ts/api/go/fits/api/vm/v1" + mock "github.com/stretchr/testify/mock" +) + +// NewVMServiceClient creates a new instance of VMServiceClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewVMServiceClient(t interface { + mock.TestingT + Cleanup(func()) +}) *VMServiceClient { + mock := &VMServiceClient{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// VMServiceClient is an autogenerated mock type for the VMServiceClient type +type VMServiceClient struct { + mock.Mock +} + +type VMServiceClient_Expecter struct { + mock *mock.Mock +} + +func (_m *VMServiceClient) EXPECT() *VMServiceClient_Expecter { + return &VMServiceClient_Expecter{mock: &_m.Mock} +} + +// Create provides a mock function for the type VMServiceClient +func (_mock *VMServiceClient) Create(context1 context.Context, vMServiceCreateRequest *vmv1.VMServiceCreateRequest) (*vmv1.VMServiceCreateResponse, error) { + ret := _mock.Called(context1, vMServiceCreateRequest) + + if len(ret) == 0 { + panic("no return value specified for Create") + } + + var r0 *vmv1.VMServiceCreateResponse + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceCreateRequest) (*vmv1.VMServiceCreateResponse, error)); ok { + return returnFunc(context1, vMServiceCreateRequest) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceCreateRequest) *vmv1.VMServiceCreateResponse); ok { + r0 = returnFunc(context1, vMServiceCreateRequest) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmv1.VMServiceCreateResponse) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceCreateRequest) error); ok { + r1 = returnFunc(context1, vMServiceCreateRequest) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// VMServiceClient_Create_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Create' +type VMServiceClient_Create_Call struct { + *mock.Call +} + +// Create is a helper method to define mock.On call +// - context1 context.Context +// - vMServiceCreateRequest *vmv1.VMServiceCreateRequest +func (_e *VMServiceClient_Expecter) Create(context1 any, vMServiceCreateRequest any) *VMServiceClient_Create_Call { + return &VMServiceClient_Create_Call{Call: _e.mock.On("Create", context1, vMServiceCreateRequest)} +} + +func (_c *VMServiceClient_Create_Call) Run(run func(context1 context.Context, vMServiceCreateRequest *vmv1.VMServiceCreateRequest)) *VMServiceClient_Create_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 *vmv1.VMServiceCreateRequest + if args[1] != nil { + arg1 = args[1].(*vmv1.VMServiceCreateRequest) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *VMServiceClient_Create_Call) Return(vMServiceCreateResponse *vmv1.VMServiceCreateResponse, err error) *VMServiceClient_Create_Call { + _c.Call.Return(vMServiceCreateResponse, err) + return _c +} + +func (_c *VMServiceClient_Create_Call) RunAndReturn(run func(context1 context.Context, vMServiceCreateRequest *vmv1.VMServiceCreateRequest) (*vmv1.VMServiceCreateResponse, error)) *VMServiceClient_Create_Call { + _c.Call.Return(run) + return _c +} + +// Delete provides a mock function for the type VMServiceClient +func (_mock *VMServiceClient) Delete(context1 context.Context, vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest) (*vmv1.VMServiceDeleteResponse, error) { + ret := _mock.Called(context1, vMServiceDeleteRequest) + + if len(ret) == 0 { + panic("no return value specified for Delete") + } + + var r0 *vmv1.VMServiceDeleteResponse + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceDeleteRequest) (*vmv1.VMServiceDeleteResponse, error)); ok { + return returnFunc(context1, vMServiceDeleteRequest) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceDeleteRequest) *vmv1.VMServiceDeleteResponse); ok { + r0 = returnFunc(context1, vMServiceDeleteRequest) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmv1.VMServiceDeleteResponse) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceDeleteRequest) error); ok { + r1 = returnFunc(context1, vMServiceDeleteRequest) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// VMServiceClient_Delete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Delete' +type VMServiceClient_Delete_Call struct { + *mock.Call +} + +// Delete is a helper method to define mock.On call +// - context1 context.Context +// - vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest +func (_e *VMServiceClient_Expecter) Delete(context1 any, vMServiceDeleteRequest any) *VMServiceClient_Delete_Call { + return &VMServiceClient_Delete_Call{Call: _e.mock.On("Delete", context1, vMServiceDeleteRequest)} +} + +func (_c *VMServiceClient_Delete_Call) Run(run func(context1 context.Context, vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest)) *VMServiceClient_Delete_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 *vmv1.VMServiceDeleteRequest + if args[1] != nil { + arg1 = args[1].(*vmv1.VMServiceDeleteRequest) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *VMServiceClient_Delete_Call) Return(vMServiceDeleteResponse *vmv1.VMServiceDeleteResponse, err error) *VMServiceClient_Delete_Call { + _c.Call.Return(vMServiceDeleteResponse, err) + return _c +} + +func (_c *VMServiceClient_Delete_Call) RunAndReturn(run func(context1 context.Context, vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest) (*vmv1.VMServiceDeleteResponse, error)) *VMServiceClient_Delete_Call { + _c.Call.Return(run) + return _c +} + +// Get provides a mock function for the type VMServiceClient +func (_mock *VMServiceClient) Get(context1 context.Context, vMServiceGetRequest *vmv1.VMServiceGetRequest) (*vmv1.VMServiceGetResponse, error) { + ret := _mock.Called(context1, vMServiceGetRequest) + + if len(ret) == 0 { + panic("no return value specified for Get") + } + + var r0 *vmv1.VMServiceGetResponse + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceGetRequest) (*vmv1.VMServiceGetResponse, error)); ok { + return returnFunc(context1, vMServiceGetRequest) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceGetRequest) *vmv1.VMServiceGetResponse); ok { + r0 = returnFunc(context1, vMServiceGetRequest) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmv1.VMServiceGetResponse) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceGetRequest) error); ok { + r1 = returnFunc(context1, vMServiceGetRequest) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// VMServiceClient_Get_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Get' +type VMServiceClient_Get_Call struct { + *mock.Call +} + +// Get is a helper method to define mock.On call +// - context1 context.Context +// - vMServiceGetRequest *vmv1.VMServiceGetRequest +func (_e *VMServiceClient_Expecter) Get(context1 any, vMServiceGetRequest any) *VMServiceClient_Get_Call { + return &VMServiceClient_Get_Call{Call: _e.mock.On("Get", context1, vMServiceGetRequest)} +} + +func (_c *VMServiceClient_Get_Call) Run(run func(context1 context.Context, vMServiceGetRequest *vmv1.VMServiceGetRequest)) *VMServiceClient_Get_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 *vmv1.VMServiceGetRequest + if args[1] != nil { + arg1 = args[1].(*vmv1.VMServiceGetRequest) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *VMServiceClient_Get_Call) Return(vMServiceGetResponse *vmv1.VMServiceGetResponse, err error) *VMServiceClient_Get_Call { + _c.Call.Return(vMServiceGetResponse, err) + return _c +} + +func (_c *VMServiceClient_Get_Call) RunAndReturn(run func(context1 context.Context, vMServiceGetRequest *vmv1.VMServiceGetRequest) (*vmv1.VMServiceGetResponse, error)) *VMServiceClient_Get_Call { + _c.Call.Return(run) + return _c +} + +// List provides a mock function for the type VMServiceClient +func (_mock *VMServiceClient) List(context1 context.Context, vMServiceListRequest *vmv1.VMServiceListRequest) (*vmv1.VMServiceListResponse, error) { + ret := _mock.Called(context1, vMServiceListRequest) + + if len(ret) == 0 { + panic("no return value specified for List") + } + + var r0 *vmv1.VMServiceListResponse + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceListRequest) (*vmv1.VMServiceListResponse, error)); ok { + return returnFunc(context1, vMServiceListRequest) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceListRequest) *vmv1.VMServiceListResponse); ok { + r0 = returnFunc(context1, vMServiceListRequest) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmv1.VMServiceListResponse) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceListRequest) error); ok { + r1 = returnFunc(context1, vMServiceListRequest) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// VMServiceClient_List_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'List' +type VMServiceClient_List_Call struct { + *mock.Call +} + +// List is a helper method to define mock.On call +// - context1 context.Context +// - vMServiceListRequest *vmv1.VMServiceListRequest +func (_e *VMServiceClient_Expecter) List(context1 any, vMServiceListRequest any) *VMServiceClient_List_Call { + return &VMServiceClient_List_Call{Call: _e.mock.On("List", context1, vMServiceListRequest)} +} + +func (_c *VMServiceClient_List_Call) Run(run func(context1 context.Context, vMServiceListRequest *vmv1.VMServiceListRequest)) *VMServiceClient_List_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 *vmv1.VMServiceListRequest + if args[1] != nil { + arg1 = args[1].(*vmv1.VMServiceListRequest) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *VMServiceClient_List_Call) Return(vMServiceListResponse *vmv1.VMServiceListResponse, err error) *VMServiceClient_List_Call { + _c.Call.Return(vMServiceListResponse, err) + return _c +} + +func (_c *VMServiceClient_List_Call) RunAndReturn(run func(context1 context.Context, vMServiceListRequest *vmv1.VMServiceListRequest) (*vmv1.VMServiceListResponse, error)) *VMServiceClient_List_Call { + _c.Call.Return(run) + return _c +} + +// Update provides a mock function for the type VMServiceClient +func (_mock *VMServiceClient) Update(context1 context.Context, vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest) (*vmv1.VMServiceUpdateResponse, error) { + ret := _mock.Called(context1, vMServiceUpdateRequest) + + if len(ret) == 0 { + panic("no return value specified for Update") + } + + var r0 *vmv1.VMServiceUpdateResponse + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceUpdateRequest) (*vmv1.VMServiceUpdateResponse, error)); ok { + return returnFunc(context1, vMServiceUpdateRequest) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceUpdateRequest) *vmv1.VMServiceUpdateResponse); ok { + r0 = returnFunc(context1, vMServiceUpdateRequest) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmv1.VMServiceUpdateResponse) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceUpdateRequest) error); ok { + r1 = returnFunc(context1, vMServiceUpdateRequest) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// VMServiceClient_Update_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Update' +type VMServiceClient_Update_Call struct { + *mock.Call +} + +// Update is a helper method to define mock.On call +// - context1 context.Context +// - vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest +func (_e *VMServiceClient_Expecter) Update(context1 any, vMServiceUpdateRequest any) *VMServiceClient_Update_Call { + return &VMServiceClient_Update_Call{Call: _e.mock.On("Update", context1, vMServiceUpdateRequest)} +} + +func (_c *VMServiceClient_Update_Call) Run(run func(context1 context.Context, vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest)) *VMServiceClient_Update_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 *vmv1.VMServiceUpdateRequest + if args[1] != nil { + arg1 = args[1].(*vmv1.VMServiceUpdateRequest) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *VMServiceClient_Update_Call) Return(vMServiceUpdateResponse *vmv1.VMServiceUpdateResponse, err error) *VMServiceClient_Update_Call { + _c.Call.Return(vMServiceUpdateResponse, err) + return _c +} + +func (_c *VMServiceClient_Update_Call) RunAndReturn(run func(context1 context.Context, vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest) (*vmv1.VMServiceUpdateResponse, error)) *VMServiceClient_Update_Call { + _c.Call.Return(run) + return _c +} diff --git a/go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceHandler.go b/go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceHandler.go new file mode 100644 index 0000000..e3f606e --- /dev/null +++ b/go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceHandler.go @@ -0,0 +1,379 @@ +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify + +package vmv1connect + +import ( + "context" + + "github.com/fi-ts/api/go/fits/api/vm/v1" + mock "github.com/stretchr/testify/mock" +) + +// NewVMServiceHandler creates a new instance of VMServiceHandler. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewVMServiceHandler(t interface { + mock.TestingT + Cleanup(func()) +}) *VMServiceHandler { + mock := &VMServiceHandler{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// VMServiceHandler is an autogenerated mock type for the VMServiceHandler type +type VMServiceHandler struct { + mock.Mock +} + +type VMServiceHandler_Expecter struct { + mock *mock.Mock +} + +func (_m *VMServiceHandler) EXPECT() *VMServiceHandler_Expecter { + return &VMServiceHandler_Expecter{mock: &_m.Mock} +} + +// Create provides a mock function for the type VMServiceHandler +func (_mock *VMServiceHandler) Create(context1 context.Context, vMServiceCreateRequest *vmv1.VMServiceCreateRequest) (*vmv1.VMServiceCreateResponse, error) { + ret := _mock.Called(context1, vMServiceCreateRequest) + + if len(ret) == 0 { + panic("no return value specified for Create") + } + + var r0 *vmv1.VMServiceCreateResponse + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceCreateRequest) (*vmv1.VMServiceCreateResponse, error)); ok { + return returnFunc(context1, vMServiceCreateRequest) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceCreateRequest) *vmv1.VMServiceCreateResponse); ok { + r0 = returnFunc(context1, vMServiceCreateRequest) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmv1.VMServiceCreateResponse) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceCreateRequest) error); ok { + r1 = returnFunc(context1, vMServiceCreateRequest) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// VMServiceHandler_Create_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Create' +type VMServiceHandler_Create_Call struct { + *mock.Call +} + +// Create is a helper method to define mock.On call +// - context1 context.Context +// - vMServiceCreateRequest *vmv1.VMServiceCreateRequest +func (_e *VMServiceHandler_Expecter) Create(context1 any, vMServiceCreateRequest any) *VMServiceHandler_Create_Call { + return &VMServiceHandler_Create_Call{Call: _e.mock.On("Create", context1, vMServiceCreateRequest)} +} + +func (_c *VMServiceHandler_Create_Call) Run(run func(context1 context.Context, vMServiceCreateRequest *vmv1.VMServiceCreateRequest)) *VMServiceHandler_Create_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 *vmv1.VMServiceCreateRequest + if args[1] != nil { + arg1 = args[1].(*vmv1.VMServiceCreateRequest) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *VMServiceHandler_Create_Call) Return(vMServiceCreateResponse *vmv1.VMServiceCreateResponse, err error) *VMServiceHandler_Create_Call { + _c.Call.Return(vMServiceCreateResponse, err) + return _c +} + +func (_c *VMServiceHandler_Create_Call) RunAndReturn(run func(context1 context.Context, vMServiceCreateRequest *vmv1.VMServiceCreateRequest) (*vmv1.VMServiceCreateResponse, error)) *VMServiceHandler_Create_Call { + _c.Call.Return(run) + return _c +} + +// Delete provides a mock function for the type VMServiceHandler +func (_mock *VMServiceHandler) Delete(context1 context.Context, vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest) (*vmv1.VMServiceDeleteResponse, error) { + ret := _mock.Called(context1, vMServiceDeleteRequest) + + if len(ret) == 0 { + panic("no return value specified for Delete") + } + + var r0 *vmv1.VMServiceDeleteResponse + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceDeleteRequest) (*vmv1.VMServiceDeleteResponse, error)); ok { + return returnFunc(context1, vMServiceDeleteRequest) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceDeleteRequest) *vmv1.VMServiceDeleteResponse); ok { + r0 = returnFunc(context1, vMServiceDeleteRequest) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmv1.VMServiceDeleteResponse) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceDeleteRequest) error); ok { + r1 = returnFunc(context1, vMServiceDeleteRequest) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// VMServiceHandler_Delete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Delete' +type VMServiceHandler_Delete_Call struct { + *mock.Call +} + +// Delete is a helper method to define mock.On call +// - context1 context.Context +// - vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest +func (_e *VMServiceHandler_Expecter) Delete(context1 any, vMServiceDeleteRequest any) *VMServiceHandler_Delete_Call { + return &VMServiceHandler_Delete_Call{Call: _e.mock.On("Delete", context1, vMServiceDeleteRequest)} +} + +func (_c *VMServiceHandler_Delete_Call) Run(run func(context1 context.Context, vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest)) *VMServiceHandler_Delete_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 *vmv1.VMServiceDeleteRequest + if args[1] != nil { + arg1 = args[1].(*vmv1.VMServiceDeleteRequest) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *VMServiceHandler_Delete_Call) Return(vMServiceDeleteResponse *vmv1.VMServiceDeleteResponse, err error) *VMServiceHandler_Delete_Call { + _c.Call.Return(vMServiceDeleteResponse, err) + return _c +} + +func (_c *VMServiceHandler_Delete_Call) RunAndReturn(run func(context1 context.Context, vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest) (*vmv1.VMServiceDeleteResponse, error)) *VMServiceHandler_Delete_Call { + _c.Call.Return(run) + return _c +} + +// Get provides a mock function for the type VMServiceHandler +func (_mock *VMServiceHandler) Get(context1 context.Context, vMServiceGetRequest *vmv1.VMServiceGetRequest) (*vmv1.VMServiceGetResponse, error) { + ret := _mock.Called(context1, vMServiceGetRequest) + + if len(ret) == 0 { + panic("no return value specified for Get") + } + + var r0 *vmv1.VMServiceGetResponse + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceGetRequest) (*vmv1.VMServiceGetResponse, error)); ok { + return returnFunc(context1, vMServiceGetRequest) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceGetRequest) *vmv1.VMServiceGetResponse); ok { + r0 = returnFunc(context1, vMServiceGetRequest) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmv1.VMServiceGetResponse) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceGetRequest) error); ok { + r1 = returnFunc(context1, vMServiceGetRequest) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// VMServiceHandler_Get_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Get' +type VMServiceHandler_Get_Call struct { + *mock.Call +} + +// Get is a helper method to define mock.On call +// - context1 context.Context +// - vMServiceGetRequest *vmv1.VMServiceGetRequest +func (_e *VMServiceHandler_Expecter) Get(context1 any, vMServiceGetRequest any) *VMServiceHandler_Get_Call { + return &VMServiceHandler_Get_Call{Call: _e.mock.On("Get", context1, vMServiceGetRequest)} +} + +func (_c *VMServiceHandler_Get_Call) Run(run func(context1 context.Context, vMServiceGetRequest *vmv1.VMServiceGetRequest)) *VMServiceHandler_Get_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 *vmv1.VMServiceGetRequest + if args[1] != nil { + arg1 = args[1].(*vmv1.VMServiceGetRequest) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *VMServiceHandler_Get_Call) Return(vMServiceGetResponse *vmv1.VMServiceGetResponse, err error) *VMServiceHandler_Get_Call { + _c.Call.Return(vMServiceGetResponse, err) + return _c +} + +func (_c *VMServiceHandler_Get_Call) RunAndReturn(run func(context1 context.Context, vMServiceGetRequest *vmv1.VMServiceGetRequest) (*vmv1.VMServiceGetResponse, error)) *VMServiceHandler_Get_Call { + _c.Call.Return(run) + return _c +} + +// List provides a mock function for the type VMServiceHandler +func (_mock *VMServiceHandler) List(context1 context.Context, vMServiceListRequest *vmv1.VMServiceListRequest) (*vmv1.VMServiceListResponse, error) { + ret := _mock.Called(context1, vMServiceListRequest) + + if len(ret) == 0 { + panic("no return value specified for List") + } + + var r0 *vmv1.VMServiceListResponse + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceListRequest) (*vmv1.VMServiceListResponse, error)); ok { + return returnFunc(context1, vMServiceListRequest) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceListRequest) *vmv1.VMServiceListResponse); ok { + r0 = returnFunc(context1, vMServiceListRequest) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmv1.VMServiceListResponse) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceListRequest) error); ok { + r1 = returnFunc(context1, vMServiceListRequest) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// VMServiceHandler_List_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'List' +type VMServiceHandler_List_Call struct { + *mock.Call +} + +// List is a helper method to define mock.On call +// - context1 context.Context +// - vMServiceListRequest *vmv1.VMServiceListRequest +func (_e *VMServiceHandler_Expecter) List(context1 any, vMServiceListRequest any) *VMServiceHandler_List_Call { + return &VMServiceHandler_List_Call{Call: _e.mock.On("List", context1, vMServiceListRequest)} +} + +func (_c *VMServiceHandler_List_Call) Run(run func(context1 context.Context, vMServiceListRequest *vmv1.VMServiceListRequest)) *VMServiceHandler_List_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 *vmv1.VMServiceListRequest + if args[1] != nil { + arg1 = args[1].(*vmv1.VMServiceListRequest) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *VMServiceHandler_List_Call) Return(vMServiceListResponse *vmv1.VMServiceListResponse, err error) *VMServiceHandler_List_Call { + _c.Call.Return(vMServiceListResponse, err) + return _c +} + +func (_c *VMServiceHandler_List_Call) RunAndReturn(run func(context1 context.Context, vMServiceListRequest *vmv1.VMServiceListRequest) (*vmv1.VMServiceListResponse, error)) *VMServiceHandler_List_Call { + _c.Call.Return(run) + return _c +} + +// Update provides a mock function for the type VMServiceHandler +func (_mock *VMServiceHandler) Update(context1 context.Context, vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest) (*vmv1.VMServiceUpdateResponse, error) { + ret := _mock.Called(context1, vMServiceUpdateRequest) + + if len(ret) == 0 { + panic("no return value specified for Update") + } + + var r0 *vmv1.VMServiceUpdateResponse + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceUpdateRequest) (*vmv1.VMServiceUpdateResponse, error)); ok { + return returnFunc(context1, vMServiceUpdateRequest) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceUpdateRequest) *vmv1.VMServiceUpdateResponse); ok { + r0 = returnFunc(context1, vMServiceUpdateRequest) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmv1.VMServiceUpdateResponse) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceUpdateRequest) error); ok { + r1 = returnFunc(context1, vMServiceUpdateRequest) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// VMServiceHandler_Update_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Update' +type VMServiceHandler_Update_Call struct { + *mock.Call +} + +// Update is a helper method to define mock.On call +// - context1 context.Context +// - vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest +func (_e *VMServiceHandler_Expecter) Update(context1 any, vMServiceUpdateRequest any) *VMServiceHandler_Update_Call { + return &VMServiceHandler_Update_Call{Call: _e.mock.On("Update", context1, vMServiceUpdateRequest)} +} + +func (_c *VMServiceHandler_Update_Call) Run(run func(context1 context.Context, vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest)) *VMServiceHandler_Update_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 *vmv1.VMServiceUpdateRequest + if args[1] != nil { + arg1 = args[1].(*vmv1.VMServiceUpdateRequest) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *VMServiceHandler_Update_Call) Return(vMServiceUpdateResponse *vmv1.VMServiceUpdateResponse, err error) *VMServiceHandler_Update_Call { + _c.Call.Return(vMServiceUpdateResponse, err) + return _c +} + +func (_c *VMServiceHandler_Update_Call) RunAndReturn(run func(context1 context.Context, vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest) (*vmv1.VMServiceUpdateResponse, error)) *VMServiceHandler_Update_Call { + _c.Call.Return(run) + return _c +} diff --git a/js/buf/validate/validate_pb.ts b/js/buf/validate/validate_pb.ts index 220e611..fe8de81 100644 --- a/js/buf/validate/validate_pb.ts +++ b/js/buf/validate/validate_pb.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file buf/validate/validate.proto (package buf.validate, syntax proto2) /* eslint-disable */ diff --git a/js/fits/api/v1/common_pb.js b/js/fits/api/v1/common_pb.js index a7718cf..2bb7161 100644 --- a/js/fits/api/v1/common_pb.js +++ b/js/fits/api/v1/common_pb.js @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/common.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ import { enumDesc, extDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; diff --git a/js/fits/api/v1/common_pb.ts b/js/fits/api/v1/common_pb.ts index 967f789..29a1ce3 100644 --- a/js/fits/api/v1/common_pb.ts +++ b/js/fits/api/v1/common_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/common.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ diff --git a/js/fits/api/v1/health_pb.js b/js/fits/api/v1/health_pb.js index 6798be4..92f9010 100644 --- a/js/fits/api/v1/health_pb.js +++ b/js/fits/api/v1/health_pb.js @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/health.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; diff --git a/js/fits/api/v1/health_pb.ts b/js/fits/api/v1/health_pb.ts index a715c39..b89dcd8 100644 --- a/js/fits/api/v1/health_pb.ts +++ b/js/fits/api/v1/health_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/health.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ diff --git a/js/fits/api/v1/ip_pb.js b/js/fits/api/v1/ip_pb.js index a15aa49..dc8745c 100644 --- a/js/fits/api/v1/ip_pb.js +++ b/js/fits/api/v1/ip_pb.js @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/ip.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; diff --git a/js/fits/api/v1/ip_pb.ts b/js/fits/api/v1/ip_pb.ts index 7ae562f..9e1dcaf 100644 --- a/js/fits/api/v1/ip_pb.ts +++ b/js/fits/api/v1/ip_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/ip.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ diff --git a/js/fits/api/v1/method_pb.js b/js/fits/api/v1/method_pb.js index ac3db3f..4119f22 100644 --- a/js/fits/api/v1/method_pb.js +++ b/js/fits/api/v1/method_pb.js @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/method.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; diff --git a/js/fits/api/v1/method_pb.ts b/js/fits/api/v1/method_pb.ts index bc6bbd8..14119da 100644 --- a/js/fits/api/v1/method_pb.ts +++ b/js/fits/api/v1/method_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/method.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ diff --git a/js/fits/api/v1/predefined_rules_pb.js b/js/fits/api/v1/predefined_rules_pb.js index c8dc060..15563d7 100644 --- a/js/fits/api/v1/predefined_rules_pb.js +++ b/js/fits/api/v1/predefined_rules_pb.js @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/predefined_rules.proto (package fits.api.v1, syntax proto2) /* eslint-disable */ import { extDesc, fileDesc } from "@bufbuild/protobuf/codegenv2"; diff --git a/js/fits/api/v1/predefined_rules_pb.ts b/js/fits/api/v1/predefined_rules_pb.ts index 559de67..069cfd0 100644 --- a/js/fits/api/v1/predefined_rules_pb.ts +++ b/js/fits/api/v1/predefined_rules_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/predefined_rules.proto (package fits.api.v1, syntax proto2) /* eslint-disable */ diff --git a/js/fits/api/v1/project_pb.js b/js/fits/api/v1/project_pb.js index 0f0842b..51ef65f 100644 --- a/js/fits/api/v1/project_pb.js +++ b/js/fits/api/v1/project_pb.js @@ -1,15 +1,14 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/project.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; import { file_buf_validate_validate } from "../../../buf/validate/validate_pb"; import { file_fits_api_v1_common } from "./common_pb"; import { file_fits_api_v1_predefined_rules } from "./predefined_rules_pb"; -import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt"; /** * Describes the file fits/api/v1/project.proto. */ -export const file_fits_api_v1_project = /*@__PURE__*/ fileDesc("ChlmaXRzL2FwaS92MS9wcm9qZWN0LnByb3RvEgtmaXRzLmFwaS52MSKtAQoHUHJvamVjdBIMCgR1dWlkGAEgASgJEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIOCgZ0ZW5hbnQYBSABKAkSFwoKYXZhdGFyX3VybBgGIAEoCUgAiAEBQg0KC19hdmF0YXJfdXJsIr4BChlQcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIgCgZ0ZW5hbnQYAyABKAlCC7pICHIGwLOusQIBSAKIAQESKAoGbGFiZWxzGAQgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzSAOIAQFCBQoDX2lkQgcKBV9uYW1lQgkKB190ZW5hbnRCCQoHX2xhYmVscyJEChpQcm9qZWN0U2VydmljZUxpc3RSZXNwb25zZRImCghwcm9qZWN0cxgBIAMoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiNQoYUHJvamVjdFNlcnZpY2VHZXRSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIkIKGVByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiwwEKG1Byb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBIaCgVsb2dpbhgBIAEoCUILukgIcgbAs66xAgESGQoEbmFtZRgCIAEoCUILukgIcgbAs66xAgESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEhcKCmF2YXRhcl91cmwYBCABKAlIAIgBARIjCgZsYWJlbHMYBSABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNCDQoLX2F2YXRhcl91cmwiRQocUHJvamVjdFNlcnZpY2VDcmVhdGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCI4ChtQcm9qZWN0U2VydmljZURlbGV0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQEiRQocUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCKxAgobUHJvamVjdFNlcnZpY2VVcGRhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESFwoKYXZhdGFyX3VybBgFIAEoCUgCiAEBEi4KBmxhYmVscxgGIAEoCzIZLmZpdHMuYXBpLnYxLlVwZGF0ZUxhYmVsc0gDiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkINCgtfYXZhdGFyX3VybEIJCgdfbGFiZWxzIkUKHFByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QylgQKDlByb2plY3RTZXJ2aWNlEmEKBExpc3QSJi5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0GicuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VMaXN0UmVzcG9uc2UiCNjzGALg8xgCEmEKA0dldBIlLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVxdWVzdBomLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmkKBkNyZWF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsLzGAIBAuDzGAESaAoGRGVsZXRlEiguZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXF1ZXN0GikuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZSIJyvMYAQHg8xgBEmkKBlVwZGF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAFCmAEKD2NvbS5maXRzLmFwaS52MUIMUHJvamVjdFByb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_google_protobuf_timestamp]); +export const file_fits_api_v1_project = /*@__PURE__*/ fileDesc("ChlmaXRzL2FwaS92MS9wcm9qZWN0LnByb3RvEgtmaXRzLmFwaS52MSKtAQoHUHJvamVjdBIMCgR1dWlkGAEgASgJEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIOCgZ0ZW5hbnQYBSABKAkSFwoKYXZhdGFyX3VybBgGIAEoCUgAiAEBQg0KC19hdmF0YXJfdXJsIr4BChlQcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIgCgZ0ZW5hbnQYAyABKAlCC7pICHIGwLOusQIBSAKIAQESKAoGbGFiZWxzGAQgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzSAOIAQFCBQoDX2lkQgcKBV9uYW1lQgkKB190ZW5hbnRCCQoHX2xhYmVscyJEChpQcm9qZWN0U2VydmljZUxpc3RSZXNwb25zZRImCghwcm9qZWN0cxgBIAMoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiNQoYUHJvamVjdFNlcnZpY2VHZXRSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIkIKGVByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiwwEKG1Byb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBIaCgVsb2dpbhgBIAEoCUILukgIcgbAs66xAgESGQoEbmFtZRgCIAEoCUILukgIcgbAs66xAgESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEhcKCmF2YXRhcl91cmwYBCABKAlIAIgBARIjCgZsYWJlbHMYBSABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNCDQoLX2F2YXRhcl91cmwiRQocUHJvamVjdFNlcnZpY2VDcmVhdGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCI4ChtQcm9qZWN0U2VydmljZURlbGV0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQEiRQocUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCKxAgobUHJvamVjdFNlcnZpY2VVcGRhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESFwoKYXZhdGFyX3VybBgFIAEoCUgCiAEBEi4KBmxhYmVscxgGIAEoCzIZLmZpdHMuYXBpLnYxLlVwZGF0ZUxhYmVsc0gDiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkINCgtfYXZhdGFyX3VybEIJCgdfbGFiZWxzIkUKHFByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QylgQKDlByb2plY3RTZXJ2aWNlEmEKBExpc3QSJi5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0GicuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VMaXN0UmVzcG9uc2UiCNjzGALg8xgCEmEKA0dldBIlLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVxdWVzdBomLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmkKBkNyZWF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsLzGAIBAuDzGAESaAoGRGVsZXRlEiguZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXF1ZXN0GikuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZSIJyvMYAQHg8xgBEmkKBlVwZGF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAFCmAEKD2NvbS5maXRzLmFwaS52MUIMUHJvamVjdFByb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); /** * Describes the message fits.api.v1.Project. * Use `create(ProjectSchema)` to create a new message. diff --git a/js/fits/api/v1/project_pb.ts b/js/fits/api/v1/project_pb.ts index c3e5a6f..2dc4d1e 100644 --- a/js/fits/api/v1/project_pb.ts +++ b/js/fits/api/v1/project_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/project.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ @@ -8,14 +8,13 @@ import { file_buf_validate_validate } from "../../../buf/validate/validate_pb"; import type { Labels, Meta, UpdateLabels, UpdateMeta } from "./common_pb"; import { file_fits_api_v1_common } from "./common_pb"; import { file_fits_api_v1_predefined_rules } from "./predefined_rules_pb"; -import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt"; import type { Message } from "@bufbuild/protobuf"; /** * Describes the file fits/api/v1/project.proto. */ export const file_fits_api_v1_project: GenFile = /*@__PURE__*/ - fileDesc("ChlmaXRzL2FwaS92MS9wcm9qZWN0LnByb3RvEgtmaXRzLmFwaS52MSKtAQoHUHJvamVjdBIMCgR1dWlkGAEgASgJEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIOCgZ0ZW5hbnQYBSABKAkSFwoKYXZhdGFyX3VybBgGIAEoCUgAiAEBQg0KC19hdmF0YXJfdXJsIr4BChlQcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIgCgZ0ZW5hbnQYAyABKAlCC7pICHIGwLOusQIBSAKIAQESKAoGbGFiZWxzGAQgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzSAOIAQFCBQoDX2lkQgcKBV9uYW1lQgkKB190ZW5hbnRCCQoHX2xhYmVscyJEChpQcm9qZWN0U2VydmljZUxpc3RSZXNwb25zZRImCghwcm9qZWN0cxgBIAMoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiNQoYUHJvamVjdFNlcnZpY2VHZXRSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIkIKGVByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiwwEKG1Byb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBIaCgVsb2dpbhgBIAEoCUILukgIcgbAs66xAgESGQoEbmFtZRgCIAEoCUILukgIcgbAs66xAgESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEhcKCmF2YXRhcl91cmwYBCABKAlIAIgBARIjCgZsYWJlbHMYBSABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNCDQoLX2F2YXRhcl91cmwiRQocUHJvamVjdFNlcnZpY2VDcmVhdGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCI4ChtQcm9qZWN0U2VydmljZURlbGV0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQEiRQocUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCKxAgobUHJvamVjdFNlcnZpY2VVcGRhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESFwoKYXZhdGFyX3VybBgFIAEoCUgCiAEBEi4KBmxhYmVscxgGIAEoCzIZLmZpdHMuYXBpLnYxLlVwZGF0ZUxhYmVsc0gDiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkINCgtfYXZhdGFyX3VybEIJCgdfbGFiZWxzIkUKHFByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QylgQKDlByb2plY3RTZXJ2aWNlEmEKBExpc3QSJi5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0GicuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VMaXN0UmVzcG9uc2UiCNjzGALg8xgCEmEKA0dldBIlLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVxdWVzdBomLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmkKBkNyZWF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsLzGAIBAuDzGAESaAoGRGVsZXRlEiguZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXF1ZXN0GikuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZSIJyvMYAQHg8xgBEmkKBlVwZGF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAFCmAEKD2NvbS5maXRzLmFwaS52MUIMUHJvamVjdFByb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_google_protobuf_timestamp]); + fileDesc("ChlmaXRzL2FwaS92MS9wcm9qZWN0LnByb3RvEgtmaXRzLmFwaS52MSKtAQoHUHJvamVjdBIMCgR1dWlkGAEgASgJEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIOCgZ0ZW5hbnQYBSABKAkSFwoKYXZhdGFyX3VybBgGIAEoCUgAiAEBQg0KC19hdmF0YXJfdXJsIr4BChlQcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIgCgZ0ZW5hbnQYAyABKAlCC7pICHIGwLOusQIBSAKIAQESKAoGbGFiZWxzGAQgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzSAOIAQFCBQoDX2lkQgcKBV9uYW1lQgkKB190ZW5hbnRCCQoHX2xhYmVscyJEChpQcm9qZWN0U2VydmljZUxpc3RSZXNwb25zZRImCghwcm9qZWN0cxgBIAMoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiNQoYUHJvamVjdFNlcnZpY2VHZXRSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIkIKGVByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiwwEKG1Byb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBIaCgVsb2dpbhgBIAEoCUILukgIcgbAs66xAgESGQoEbmFtZRgCIAEoCUILukgIcgbAs66xAgESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEhcKCmF2YXRhcl91cmwYBCABKAlIAIgBARIjCgZsYWJlbHMYBSABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNCDQoLX2F2YXRhcl91cmwiRQocUHJvamVjdFNlcnZpY2VDcmVhdGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCI4ChtQcm9qZWN0U2VydmljZURlbGV0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQEiRQocUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCKxAgobUHJvamVjdFNlcnZpY2VVcGRhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESFwoKYXZhdGFyX3VybBgFIAEoCUgCiAEBEi4KBmxhYmVscxgGIAEoCzIZLmZpdHMuYXBpLnYxLlVwZGF0ZUxhYmVsc0gDiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkINCgtfYXZhdGFyX3VybEIJCgdfbGFiZWxzIkUKHFByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QylgQKDlByb2plY3RTZXJ2aWNlEmEKBExpc3QSJi5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0GicuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VMaXN0UmVzcG9uc2UiCNjzGALg8xgCEmEKA0dldBIlLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVxdWVzdBomLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmkKBkNyZWF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsLzGAIBAuDzGAESaAoGRGVsZXRlEiguZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXF1ZXN0GikuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZSIJyvMYAQHg8xgBEmkKBlVwZGF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAFCmAEKD2NvbS5maXRzLmFwaS52MUIMUHJvamVjdFByb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); /** * Project defines a group of resources belonging to a tenant diff --git a/js/fits/api/v1/tenant_pb.js b/js/fits/api/v1/tenant_pb.js index dba3f3d..05fca45 100644 --- a/js/fits/api/v1/tenant_pb.js +++ b/js/fits/api/v1/tenant_pb.js @@ -1,15 +1,14 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/tenant.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; import { file_buf_validate_validate } from "../../../buf/validate/validate_pb"; import { file_fits_api_v1_common } from "./common_pb"; import { file_fits_api_v1_predefined_rules } from "./predefined_rules_pb"; -import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt"; /** * Describes the file fits/api/v1/tenant.proto. */ -export const file_fits_api_v1_tenant = /*@__PURE__*/ fileDesc("ChhmaXRzL2FwaS92MS90ZW5hbnQucHJvdG8SC2ZpdHMuYXBpLnYxIqwBCgZUZW5hbnQSDQoFbG9naW4YASABKAkSHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEbmFtZRgDIAEoCUILukgIcgbAs66xAgESDQoFZW1haWwYBCABKAkSIAoLZGVzY3JpcHRpb24YBSABKAlCC7pICHIGyLOusQIBEhIKCmF2YXRhcl91cmwYBiABKAkSEgoKY3JlYXRlZF9ieRgHIAEoCSKQAQoYVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIoCgZsYWJlbHMYAyABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNIAogBAUIFCgNfaWRCBwoFX25hbWVCCQoHX2xhYmVscyIoChdUZW5hbnRTZXJ2aWNlR2V0UmVxdWVzdBINCgVsb2dpbhgBIAEoCSLiAQoaVGVuYW50U2VydmljZUNyZWF0ZVJlcXVlc3QSGQoEbmFtZRgBIAEoCUILukgIcgbAs66xAgESJQoLZGVzY3JpcHRpb24YAiABKAlCC7pICHIGyLOusQIBSACIAQESGwoFZW1haWwYAyABKAlCB7pIBHICYAFIAYgBARIXCgphdmF0YXJfdXJsGAQgASgJSAKIAQESIwoGbGFiZWxzGAUgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzQg4KDF9kZXNjcmlwdGlvbkIICgZfZW1haWxCDQoLX2F2YXRhcl91cmwiywIKGlRlbmFudFNlcnZpY2VVcGRhdGVSZXF1ZXN0Eg0KBWxvZ2luGAEgASgJEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESGwoFZW1haWwYBCABKAlCB7pIBHICYAFIAYgBARIlCgtkZXNjcmlwdGlvbhgFIAEoCUILukgIcgbIs66xAgFIAogBARIXCgphdmF0YXJfdXJsGAYgASgJSAOIAQESLgoGbGFiZWxzGAcgASgLMhkuZml0cy5hcGkudjEuVXBkYXRlTGFiZWxzSASIAQFCBwoFX25hbWVCCAoGX2VtYWlsQg4KDF9kZXNjcmlwdGlvbkINCgtfYXZhdGFyX3VybEIJCgdfbGFiZWxzIisKGlRlbmFudFNlcnZpY2VEZWxldGVSZXF1ZXN0Eg0KBWxvZ2luGAEgASgJIj8KGFRlbmFudFNlcnZpY2VHZXRSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQQoZVGVuYW50U2VydmljZUxpc3RSZXNwb25zZRIkCgd0ZW5hbnRzGAEgAygLMhMuZml0cy5hcGkudjEuVGVuYW50IkIKG1RlbmFudFNlcnZpY2VDcmVhdGVSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQgobVGVuYW50U2VydmljZVVwZGF0ZVJlc3BvbnNlEiMKBnRlbmFudBgBIAEoCzITLmZpdHMuYXBpLnYxLlRlbmFudCJCChtUZW5hbnRTZXJ2aWNlRGVsZXRlUmVzcG9uc2USIwoGdGVuYW50GAEgASgLMhMuZml0cy5hcGkudjEuVGVuYW50MosECg1UZW5hbnRTZXJ2aWNlEmUKBkNyZWF0ZRInLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VDcmVhdGVSZXF1ZXN0GiguZml0cy5hcGkudjEuVGVuYW50U2VydmljZUNyZWF0ZVJlc3BvbnNlIgjY8xgC4PMYARJfCgRMaXN0EiUuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0GiYuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXNwb25zZSII2PMYAuDzGAISYAoDR2V0EiQuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUdldFJlcXVlc3QaJS5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlR2V0UmVzcG9uc2UiDMLzGAQBAgME4PMYAhJnCgZVcGRhdGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlVXBkYXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VVcGRhdGVSZXNwb25zZSIKwvMYAgEC4PMYARJnCgZEZWxldGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlRGVsZXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VEZWxldGVSZXNwb25zZSIKwvMYAgEC4PMYAUKXAQoPY29tLmZpdHMuYXBpLnYxQgtUZW5hbnRQcm90b1ABWilnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92MTthcGl2MaICA0ZBWKoCC0ZpdHMuQXBpLlYxygILRml0c1xBcGlcVjHiAhdGaXRzXEFwaVxWMVxHUEJNZXRhZGF0YeoCDUZpdHM6OkFwaTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_google_protobuf_timestamp]); +export const file_fits_api_v1_tenant = /*@__PURE__*/ fileDesc("ChhmaXRzL2FwaS92MS90ZW5hbnQucHJvdG8SC2ZpdHMuYXBpLnYxIqwBCgZUZW5hbnQSDQoFbG9naW4YASABKAkSHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEbmFtZRgDIAEoCUILukgIcgbAs66xAgESDQoFZW1haWwYBCABKAkSIAoLZGVzY3JpcHRpb24YBSABKAlCC7pICHIGyLOusQIBEhIKCmF2YXRhcl91cmwYBiABKAkSEgoKY3JlYXRlZF9ieRgHIAEoCSKQAQoYVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIoCgZsYWJlbHMYAyABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNIAogBAUIFCgNfaWRCBwoFX25hbWVCCQoHX2xhYmVscyIoChdUZW5hbnRTZXJ2aWNlR2V0UmVxdWVzdBINCgVsb2dpbhgBIAEoCSLiAQoaVGVuYW50U2VydmljZUNyZWF0ZVJlcXVlc3QSGQoEbmFtZRgBIAEoCUILukgIcgbAs66xAgESJQoLZGVzY3JpcHRpb24YAiABKAlCC7pICHIGyLOusQIBSACIAQESGwoFZW1haWwYAyABKAlCB7pIBHICYAFIAYgBARIXCgphdmF0YXJfdXJsGAQgASgJSAKIAQESIwoGbGFiZWxzGAUgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzQg4KDF9kZXNjcmlwdGlvbkIICgZfZW1haWxCDQoLX2F2YXRhcl91cmwiywIKGlRlbmFudFNlcnZpY2VVcGRhdGVSZXF1ZXN0Eg0KBWxvZ2luGAEgASgJEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESGwoFZW1haWwYBCABKAlCB7pIBHICYAFIAYgBARIlCgtkZXNjcmlwdGlvbhgFIAEoCUILukgIcgbIs66xAgFIAogBARIXCgphdmF0YXJfdXJsGAYgASgJSAOIAQESLgoGbGFiZWxzGAcgASgLMhkuZml0cy5hcGkudjEuVXBkYXRlTGFiZWxzSASIAQFCBwoFX25hbWVCCAoGX2VtYWlsQg4KDF9kZXNjcmlwdGlvbkINCgtfYXZhdGFyX3VybEIJCgdfbGFiZWxzIisKGlRlbmFudFNlcnZpY2VEZWxldGVSZXF1ZXN0Eg0KBWxvZ2luGAEgASgJIj8KGFRlbmFudFNlcnZpY2VHZXRSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQQoZVGVuYW50U2VydmljZUxpc3RSZXNwb25zZRIkCgd0ZW5hbnRzGAEgAygLMhMuZml0cy5hcGkudjEuVGVuYW50IkIKG1RlbmFudFNlcnZpY2VDcmVhdGVSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQgobVGVuYW50U2VydmljZVVwZGF0ZVJlc3BvbnNlEiMKBnRlbmFudBgBIAEoCzITLmZpdHMuYXBpLnYxLlRlbmFudCJCChtUZW5hbnRTZXJ2aWNlRGVsZXRlUmVzcG9uc2USIwoGdGVuYW50GAEgASgLMhMuZml0cy5hcGkudjEuVGVuYW50MosECg1UZW5hbnRTZXJ2aWNlEmUKBkNyZWF0ZRInLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VDcmVhdGVSZXF1ZXN0GiguZml0cy5hcGkudjEuVGVuYW50U2VydmljZUNyZWF0ZVJlc3BvbnNlIgjY8xgC4PMYARJfCgRMaXN0EiUuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0GiYuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXNwb25zZSII2PMYAuDzGAISYAoDR2V0EiQuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUdldFJlcXVlc3QaJS5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlR2V0UmVzcG9uc2UiDMLzGAQBAgME4PMYAhJnCgZVcGRhdGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlVXBkYXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VVcGRhdGVSZXNwb25zZSIKwvMYAgEC4PMYARJnCgZEZWxldGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlRGVsZXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VEZWxldGVSZXNwb25zZSIKwvMYAgEC4PMYAUKXAQoPY29tLmZpdHMuYXBpLnYxQgtUZW5hbnRQcm90b1ABWilnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92MTthcGl2MaICA0ZBWKoCC0ZpdHMuQXBpLlYxygILRml0c1xBcGlcVjHiAhdGaXRzXEFwaVxWMVxHUEJNZXRhZGF0YeoCDUZpdHM6OkFwaTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); /** * Describes the message fits.api.v1.Tenant. * Use `create(TenantSchema)` to create a new message. diff --git a/js/fits/api/v1/tenant_pb.ts b/js/fits/api/v1/tenant_pb.ts index 0fcd574..c157252 100644 --- a/js/fits/api/v1/tenant_pb.ts +++ b/js/fits/api/v1/tenant_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/tenant.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ @@ -8,14 +8,13 @@ import { file_buf_validate_validate } from "../../../buf/validate/validate_pb"; import type { Labels, Meta, UpdateLabels, UpdateMeta } from "./common_pb"; import { file_fits_api_v1_common } from "./common_pb"; import { file_fits_api_v1_predefined_rules } from "./predefined_rules_pb"; -import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt"; import type { Message } from "@bufbuild/protobuf"; /** * Describes the file fits/api/v1/tenant.proto. */ export const file_fits_api_v1_tenant: GenFile = /*@__PURE__*/ - fileDesc("ChhmaXRzL2FwaS92MS90ZW5hbnQucHJvdG8SC2ZpdHMuYXBpLnYxIqwBCgZUZW5hbnQSDQoFbG9naW4YASABKAkSHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEbmFtZRgDIAEoCUILukgIcgbAs66xAgESDQoFZW1haWwYBCABKAkSIAoLZGVzY3JpcHRpb24YBSABKAlCC7pICHIGyLOusQIBEhIKCmF2YXRhcl91cmwYBiABKAkSEgoKY3JlYXRlZF9ieRgHIAEoCSKQAQoYVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIoCgZsYWJlbHMYAyABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNIAogBAUIFCgNfaWRCBwoFX25hbWVCCQoHX2xhYmVscyIoChdUZW5hbnRTZXJ2aWNlR2V0UmVxdWVzdBINCgVsb2dpbhgBIAEoCSLiAQoaVGVuYW50U2VydmljZUNyZWF0ZVJlcXVlc3QSGQoEbmFtZRgBIAEoCUILukgIcgbAs66xAgESJQoLZGVzY3JpcHRpb24YAiABKAlCC7pICHIGyLOusQIBSACIAQESGwoFZW1haWwYAyABKAlCB7pIBHICYAFIAYgBARIXCgphdmF0YXJfdXJsGAQgASgJSAKIAQESIwoGbGFiZWxzGAUgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzQg4KDF9kZXNjcmlwdGlvbkIICgZfZW1haWxCDQoLX2F2YXRhcl91cmwiywIKGlRlbmFudFNlcnZpY2VVcGRhdGVSZXF1ZXN0Eg0KBWxvZ2luGAEgASgJEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESGwoFZW1haWwYBCABKAlCB7pIBHICYAFIAYgBARIlCgtkZXNjcmlwdGlvbhgFIAEoCUILukgIcgbIs66xAgFIAogBARIXCgphdmF0YXJfdXJsGAYgASgJSAOIAQESLgoGbGFiZWxzGAcgASgLMhkuZml0cy5hcGkudjEuVXBkYXRlTGFiZWxzSASIAQFCBwoFX25hbWVCCAoGX2VtYWlsQg4KDF9kZXNjcmlwdGlvbkINCgtfYXZhdGFyX3VybEIJCgdfbGFiZWxzIisKGlRlbmFudFNlcnZpY2VEZWxldGVSZXF1ZXN0Eg0KBWxvZ2luGAEgASgJIj8KGFRlbmFudFNlcnZpY2VHZXRSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQQoZVGVuYW50U2VydmljZUxpc3RSZXNwb25zZRIkCgd0ZW5hbnRzGAEgAygLMhMuZml0cy5hcGkudjEuVGVuYW50IkIKG1RlbmFudFNlcnZpY2VDcmVhdGVSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQgobVGVuYW50U2VydmljZVVwZGF0ZVJlc3BvbnNlEiMKBnRlbmFudBgBIAEoCzITLmZpdHMuYXBpLnYxLlRlbmFudCJCChtUZW5hbnRTZXJ2aWNlRGVsZXRlUmVzcG9uc2USIwoGdGVuYW50GAEgASgLMhMuZml0cy5hcGkudjEuVGVuYW50MosECg1UZW5hbnRTZXJ2aWNlEmUKBkNyZWF0ZRInLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VDcmVhdGVSZXF1ZXN0GiguZml0cy5hcGkudjEuVGVuYW50U2VydmljZUNyZWF0ZVJlc3BvbnNlIgjY8xgC4PMYARJfCgRMaXN0EiUuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0GiYuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXNwb25zZSII2PMYAuDzGAISYAoDR2V0EiQuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUdldFJlcXVlc3QaJS5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlR2V0UmVzcG9uc2UiDMLzGAQBAgME4PMYAhJnCgZVcGRhdGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlVXBkYXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VVcGRhdGVSZXNwb25zZSIKwvMYAgEC4PMYARJnCgZEZWxldGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlRGVsZXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VEZWxldGVSZXNwb25zZSIKwvMYAgEC4PMYAUKXAQoPY29tLmZpdHMuYXBpLnYxQgtUZW5hbnRQcm90b1ABWilnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92MTthcGl2MaICA0ZBWKoCC0ZpdHMuQXBpLlYxygILRml0c1xBcGlcVjHiAhdGaXRzXEFwaVxWMVxHUEJNZXRhZGF0YeoCDUZpdHM6OkFwaTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_google_protobuf_timestamp]); + fileDesc("ChhmaXRzL2FwaS92MS90ZW5hbnQucHJvdG8SC2ZpdHMuYXBpLnYxIqwBCgZUZW5hbnQSDQoFbG9naW4YASABKAkSHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEbmFtZRgDIAEoCUILukgIcgbAs66xAgESDQoFZW1haWwYBCABKAkSIAoLZGVzY3JpcHRpb24YBSABKAlCC7pICHIGyLOusQIBEhIKCmF2YXRhcl91cmwYBiABKAkSEgoKY3JlYXRlZF9ieRgHIAEoCSKQAQoYVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIoCgZsYWJlbHMYAyABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNIAogBAUIFCgNfaWRCBwoFX25hbWVCCQoHX2xhYmVscyIoChdUZW5hbnRTZXJ2aWNlR2V0UmVxdWVzdBINCgVsb2dpbhgBIAEoCSLiAQoaVGVuYW50U2VydmljZUNyZWF0ZVJlcXVlc3QSGQoEbmFtZRgBIAEoCUILukgIcgbAs66xAgESJQoLZGVzY3JpcHRpb24YAiABKAlCC7pICHIGyLOusQIBSACIAQESGwoFZW1haWwYAyABKAlCB7pIBHICYAFIAYgBARIXCgphdmF0YXJfdXJsGAQgASgJSAKIAQESIwoGbGFiZWxzGAUgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzQg4KDF9kZXNjcmlwdGlvbkIICgZfZW1haWxCDQoLX2F2YXRhcl91cmwiywIKGlRlbmFudFNlcnZpY2VVcGRhdGVSZXF1ZXN0Eg0KBWxvZ2luGAEgASgJEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESGwoFZW1haWwYBCABKAlCB7pIBHICYAFIAYgBARIlCgtkZXNjcmlwdGlvbhgFIAEoCUILukgIcgbIs66xAgFIAogBARIXCgphdmF0YXJfdXJsGAYgASgJSAOIAQESLgoGbGFiZWxzGAcgASgLMhkuZml0cy5hcGkudjEuVXBkYXRlTGFiZWxzSASIAQFCBwoFX25hbWVCCAoGX2VtYWlsQg4KDF9kZXNjcmlwdGlvbkINCgtfYXZhdGFyX3VybEIJCgdfbGFiZWxzIisKGlRlbmFudFNlcnZpY2VEZWxldGVSZXF1ZXN0Eg0KBWxvZ2luGAEgASgJIj8KGFRlbmFudFNlcnZpY2VHZXRSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQQoZVGVuYW50U2VydmljZUxpc3RSZXNwb25zZRIkCgd0ZW5hbnRzGAEgAygLMhMuZml0cy5hcGkudjEuVGVuYW50IkIKG1RlbmFudFNlcnZpY2VDcmVhdGVSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQgobVGVuYW50U2VydmljZVVwZGF0ZVJlc3BvbnNlEiMKBnRlbmFudBgBIAEoCzITLmZpdHMuYXBpLnYxLlRlbmFudCJCChtUZW5hbnRTZXJ2aWNlRGVsZXRlUmVzcG9uc2USIwoGdGVuYW50GAEgASgLMhMuZml0cy5hcGkudjEuVGVuYW50MosECg1UZW5hbnRTZXJ2aWNlEmUKBkNyZWF0ZRInLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VDcmVhdGVSZXF1ZXN0GiguZml0cy5hcGkudjEuVGVuYW50U2VydmljZUNyZWF0ZVJlc3BvbnNlIgjY8xgC4PMYARJfCgRMaXN0EiUuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0GiYuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXNwb25zZSII2PMYAuDzGAISYAoDR2V0EiQuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUdldFJlcXVlc3QaJS5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlR2V0UmVzcG9uc2UiDMLzGAQBAgME4PMYAhJnCgZVcGRhdGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlVXBkYXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VVcGRhdGVSZXNwb25zZSIKwvMYAgEC4PMYARJnCgZEZWxldGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlRGVsZXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VEZWxldGVSZXNwb25zZSIKwvMYAgEC4PMYAUKXAQoPY29tLmZpdHMuYXBpLnYxQgtUZW5hbnRQcm90b1ABWilnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92MTthcGl2MaICA0ZBWKoCC0ZpdHMuQXBpLlYxygILRml0c1xBcGlcVjHiAhdGaXRzXEFwaVxWMVxHUEJNZXRhZGF0YeoCDUZpdHM6OkFwaTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); /** * Tenant is a customer of the platform diff --git a/js/fits/api/v1/token_pb.js b/js/fits/api/v1/token_pb.js index c6744b4..29dc9e1 100644 --- a/js/fits/api/v1/token_pb.js +++ b/js/fits/api/v1/token_pb.js @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/token.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; diff --git a/js/fits/api/v1/token_pb.ts b/js/fits/api/v1/token_pb.ts index 7f7da1f..e58b6a3 100644 --- a/js/fits/api/v1/token_pb.ts +++ b/js/fits/api/v1/token_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/token.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ diff --git a/js/fits/api/v1/version_pb.js b/js/fits/api/v1/version_pb.js index 970ea1c..e3d39e9 100644 --- a/js/fits/api/v1/version_pb.js +++ b/js/fits/api/v1/version_pb.js @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/version.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; diff --git a/js/fits/api/v1/version_pb.ts b/js/fits/api/v1/version_pb.ts index b1c4a9f..01e72af 100644 --- a/js/fits/api/v1/version_pb.ts +++ b/js/fits/api/v1/version_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" // @generated from file fits/api/v1/version.proto (package fits.api.v1, syntax proto3) /* eslint-disable */ diff --git a/js/fits/api/vm/v1/os_pb.d.ts b/js/fits/api/vm/v1/os_pb.d.ts new file mode 100644 index 0000000..f65ede7 --- /dev/null +++ b/js/fits/api/vm/v1/os_pb.d.ts @@ -0,0 +1,25 @@ +import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2"; +import type { Message } from "@bufbuild/protobuf"; +/** + * Describes the file fits/api/vm/v1/os.proto. + */ +export declare const file_fits_api_vm_v1_os: GenFile; +/** + * Os is the definition of a potential OS of a VM instance + * TODO create a dedicated service + * + * @generated from message fits.api.vm.v1.Os + */ +export type Os = Message<"fits.api.vm.v1.Os"> & { + /** + * Uuid of this os + * + * @generated from field: string uuid = 1; + */ + uuid: string; +}; +/** + * Describes the message fits.api.vm.v1.Os. + * Use `create(OsSchema)` to create a new message. + */ +export declare const OsSchema: GenMessage; diff --git a/js/fits/api/vm/v1/os_pb.js b/js/fits/api/vm/v1/os_pb.js new file mode 100644 index 0000000..01df76d --- /dev/null +++ b/js/fits/api/vm/v1/os_pb.js @@ -0,0 +1,14 @@ +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" +// @generated from file fits/api/vm/v1/os.proto (package fits.api.vm.v1, syntax proto3) +/* eslint-disable */ +import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; +/** + * Describes the file fits/api/vm/v1/os.proto. + */ +export const file_fits_api_vm_v1_os = /*@__PURE__*/ fileDesc("ChdmaXRzL2FwaS92bS92MS9vcy5wcm90bxIOZml0cy5hcGkudm0udjEiHAoCT3MSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQFCpQEKEmNvbS5maXRzLmFwaS52bS52MUIHT3NQcm90b1ABWitnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92bS92MTt2bXYxogIDRkFWqgIORml0cy5BcGkuVm0uVjHKAg5GaXRzXEFwaVxWbVxWMeICGkZpdHNcQXBpXFZtXFYxXEdQQk1ldGFkYXRh6gIRRml0czo6QXBpOjpWbTo6VjFiBnByb3RvMw", [file_buf_validate_validate]); +/** + * Describes the message fits.api.vm.v1.Os. + * Use `create(OsSchema)` to create a new message. + */ +export const OsSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_os, 0); diff --git a/js/fits/api/vm/v1/os_pb.ts b/js/fits/api/vm/v1/os_pb.ts new file mode 100644 index 0000000..f0f1df6 --- /dev/null +++ b/js/fits/api/vm/v1/os_pb.ts @@ -0,0 +1,37 @@ +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" +// @generated from file fits/api/vm/v1/os.proto (package fits.api.vm.v1, syntax proto3) +/* eslint-disable */ + +import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file fits/api/vm/v1/os.proto. + */ +export const file_fits_api_vm_v1_os: GenFile = /*@__PURE__*/ + fileDesc("ChdmaXRzL2FwaS92bS92MS9vcy5wcm90bxIOZml0cy5hcGkudm0udjEiHAoCT3MSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQFCpQEKEmNvbS5maXRzLmFwaS52bS52MUIHT3NQcm90b1ABWitnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92bS92MTt2bXYxogIDRkFWqgIORml0cy5BcGkuVm0uVjHKAg5GaXRzXEFwaVxWbVxWMeICGkZpdHNcQXBpXFZtXFYxXEdQQk1ldGFkYXRh6gIRRml0czo6QXBpOjpWbTo6VjFiBnByb3RvMw", [file_buf_validate_validate]); + +/** + * Os is the definition of a potential OS of a VM instance + * TODO create a dedicated service + * + * @generated from message fits.api.vm.v1.Os + */ +export type Os = Message<"fits.api.vm.v1.Os"> & { + /** + * Uuid of this os + * + * @generated from field: string uuid = 1; + */ + uuid: string; +}; + +/** + * Describes the message fits.api.vm.v1.Os. + * Use `create(OsSchema)` to create a new message. + */ +export const OsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_os, 0); + diff --git a/js/fits/api/vm/v1/vm_pb.d.ts b/js/fits/api/vm/v1/vm_pb.d.ts new file mode 100644 index 0000000..0f57b41 --- /dev/null +++ b/js/fits/api/vm/v1/vm_pb.d.ts @@ -0,0 +1,361 @@ +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import type { Meta, UpdateMeta } from "../../v1/common_pb"; +import type { Message } from "@bufbuild/protobuf"; +/** + * Describes the file fits/api/vm/v1/vm.proto. + */ +export declare const file_fits_api_vm_v1_vm: GenFile; +/** + * VM Instance Messages + * + * @generated from message fits.api.vm.v1.VMInstance + */ +export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { + /** + * Uuid of this vm + * + * @generated from field: string uuid = 1; + */ + uuid: string; + /** + * Meta for this vm + * + * @generated from field: fits.api.v1.Meta meta = 2; + */ + meta?: Meta | undefined; + /** + * Name of this vm + * + * @generated from field: string name = 3; + */ + name: string; + /** + * Project where this vm address belongs to + * + * @generated from field: string project = 4; + */ + project: string; +}; +/** + * Describes the message fits.api.vm.v1.VMInstance. + * Use `create(VMInstanceSchema)` to create a new message. + */ +export declare const VMInstanceSchema: GenMessage; +/** + * VMServiceGetRequest TODO + * + * @generated from message fits.api.vm.v1.VMServiceGetRequest + */ +export type VMServiceGetRequest = Message<"fits.api.vm.v1.VMServiceGetRequest"> & { + /** + * Uuid of this vm + * + * @generated from field: string uuid = 1; + */ + uuid: string; + /** + * Project where this vm address belongs to + * + * @generated from field: string project = 2; + */ + project: string; +}; +/** + * Describes the message fits.api.vm.v1.VMServiceGetRequest. + * Use `create(VMServiceGetRequestSchema)` to create a new message. + */ +export declare const VMServiceGetRequestSchema: GenMessage; +/** + * VMServiceGetResponse TODO + * + * @generated from message fits.api.vm.v1.VMServiceGetResponse + */ +export type VMServiceGetResponse = Message<"fits.api.vm.v1.VMServiceGetResponse"> & { + /** + * The vm + * + * @generated from field: fits.api.vm.v1.VMInstance vm = 1; + */ + vm?: VMInstance | undefined; +}; +/** + * Describes the message fits.api.vm.v1.VMServiceGetResponse. + * Use `create(VMServiceGetResponseSchema)` to create a new message. + */ +export declare const VMServiceGetResponseSchema: GenMessage; +/** + * VMServiceCreateRequest TODO + * + * @generated from message fits.api.vm.v1.VMServiceCreateRequest + */ +export type VMServiceCreateRequest = Message<"fits.api.vm.v1.VMServiceCreateRequest"> & { + /** + * Project of the vm + * + * @generated from field: string project = 1; + */ + project: string; + /** + * Name of the vm + * + * @generated from field: optional string name = 2; + */ + name?: string | undefined; + /** + * Number of CPUs of this vm + * + * @generated from field: uint32 cpu = 3; + */ + cpu: number; + /** + * Ram of the vm in GB + * + * @generated from field: uint32 ram = 4; + */ + ram: number; + /** + * OS Uuid of the OS to install in the vm instance + * + * @generated from field: string os_uuid = 5; + */ + osUuid: string; + /** + * VLAN Uuid of the VLAN to install in the vm instance into + * + * @generated from field: string vlan_uuid = 6; + */ + vlanUuid: string; + /** + * Location Uuid of the datacenter location to install in the vm instance + * + * @generated from field: string location_uuid = 7; + */ + locationUuid: string; + /** + * Contact Uuid of who is the responsible contact of the vm instance + * + * @generated from field: string contact_uuid = 8; + */ + contactUuid: string; + /** + * List of disks for this vm + * + * Disks []DiskInputModel + * RequestedBy *string // TODO is inherited from the token making the create request -> stored in meta.createdBy + * + * @generated from field: repeated fits.api.vm.v1.Disk disks = 9; + */ + disks: Disk[]; +}; +/** + * Describes the message fits.api.vm.v1.VMServiceCreateRequest. + * Use `create(VMServiceCreateRequestSchema)` to create a new message. + */ +export declare const VMServiceCreateRequestSchema: GenMessage; +/** + * Disk + * + * @generated from message fits.api.vm.v1.Disk + */ +export type Disk = Message<"fits.api.vm.v1.Disk"> & { + /** + * AutoExtend if set to true the disk grows automatically + * + * @generated from field: bool auto_extend = 1; + */ + autoExtend: boolean; + /** + * Size if the disk in GB + * + * TODO discuss how this could be optional + * + * @generated from field: optional uint64 size_in_gb = 2; + */ + sizeInGb?: bigint | undefined; + /** + * DriveLetter where this disk should be assigned + * + * @generated from field: optional string drive_letter = 3; + */ + driveLetter?: string | undefined; + /** + * Label of the disk + * + * @generated from field: string label = 4; + */ + label: string; + /** + * MountPoint where this disk should be mounted + * + * TODO this requires a Filesystem on the disk ? + * + * @generated from field: optional string mount_point = 5; + */ + mountPoint?: string | undefined; +}; +/** + * Describes the message fits.api.vm.v1.Disk. + * Use `create(DiskSchema)` to create a new message. + */ +export declare const DiskSchema: GenMessage; +/** + * VMServiceCreateResponse TODO + * + * @generated from message fits.api.vm.v1.VMServiceCreateResponse + */ +export type VMServiceCreateResponse = Message<"fits.api.vm.v1.VMServiceCreateResponse"> & {}; +/** + * Describes the message fits.api.vm.v1.VMServiceCreateResponse. + * Use `create(VMServiceCreateResponseSchema)` to create a new message. + */ +export declare const VMServiceCreateResponseSchema: GenMessage; +/** + * VMServiceUpdateRequest TODO + * + * @generated from message fits.api.vm.v1.VMServiceUpdateRequest + */ +export type VMServiceUpdateRequest = Message<"fits.api.vm.v1.VMServiceUpdateRequest"> & { + /** + * Project of the vm + * + * @generated from field: string project = 1; + */ + project: string; + /** + * UpdateMeta contains the timestamp and strategy to be used in this update request. + * + * @generated from field: fits.api.v1.UpdateMeta update_meta = 2; + */ + updateMeta?: UpdateMeta | undefined; +}; +/** + * Describes the message fits.api.vm.v1.VMServiceUpdateRequest. + * Use `create(VMServiceUpdateRequestSchema)` to create a new message. + */ +export declare const VMServiceUpdateRequestSchema: GenMessage; +/** + * VMServiceUpdateResponse TODO + * + * @generated from message fits.api.vm.v1.VMServiceUpdateResponse + */ +export type VMServiceUpdateResponse = Message<"fits.api.vm.v1.VMServiceUpdateResponse"> & {}; +/** + * Describes the message fits.api.vm.v1.VMServiceUpdateResponse. + * Use `create(VMServiceUpdateResponseSchema)` to create a new message. + */ +export declare const VMServiceUpdateResponseSchema: GenMessage; +/** + * VMServiceListRequest TODO + * + * @generated from message fits.api.vm.v1.VMServiceListRequest + */ +export type VMServiceListRequest = Message<"fits.api.vm.v1.VMServiceListRequest"> & { + /** + * Project of the vm + * + * @generated from field: string project = 1; + */ + project: string; +}; +/** + * Describes the message fits.api.vm.v1.VMServiceListRequest. + * Use `create(VMServiceListRequestSchema)` to create a new message. + */ +export declare const VMServiceListRequestSchema: GenMessage; +/** + * VMServiceListResponse TODO + * + * @generated from message fits.api.vm.v1.VMServiceListResponse + */ +export type VMServiceListResponse = Message<"fits.api.vm.v1.VMServiceListResponse"> & {}; +/** + * Describes the message fits.api.vm.v1.VMServiceListResponse. + * Use `create(VMServiceListResponseSchema)` to create a new message. + */ +export declare const VMServiceListResponseSchema: GenMessage; +/** + * VMServiceDeleteRequest TODO + * + * @generated from message fits.api.vm.v1.VMServiceDeleteRequest + */ +export type VMServiceDeleteRequest = Message<"fits.api.vm.v1.VMServiceDeleteRequest"> & { + /** + * Project of the vm + * + * @generated from field: string project = 1; + */ + project: string; +}; +/** + * Describes the message fits.api.vm.v1.VMServiceDeleteRequest. + * Use `create(VMServiceDeleteRequestSchema)` to create a new message. + */ +export declare const VMServiceDeleteRequestSchema: GenMessage; +/** + * VMServiceDeleteResponse TODO + * + * @generated from message fits.api.vm.v1.VMServiceDeleteResponse + */ +export type VMServiceDeleteResponse = Message<"fits.api.vm.v1.VMServiceDeleteResponse"> & {}; +/** + * Describes the message fits.api.vm.v1.VMServiceDeleteResponse. + * Use `create(VMServiceDeleteResponseSchema)` to create a new message. + */ +export declare const VMServiceDeleteResponseSchema: GenMessage; +/** + * VMService provides VM address management operations. + * + * @generated from service fits.api.vm.v1.VMService + */ +export declare const VMService: GenService<{ + /** + * Returns the VM address with the specified VM. + * + * @generated from rpc fits.api.vm.v1.VMService.Get + */ + get: { + methodKind: "unary"; + input: typeof VMServiceGetRequestSchema; + output: typeof VMServiceGetResponseSchema; + }; + /** + * Creates a new VM address. + * + * @generated from rpc fits.api.vm.v1.VMService.Create + */ + create: { + methodKind: "unary"; + input: typeof VMServiceCreateRequestSchema; + output: typeof VMServiceCreateResponseSchema; + }; + /** + * Updates an VM address. + * + * @generated from rpc fits.api.vm.v1.VMService.Update + */ + update: { + methodKind: "unary"; + input: typeof VMServiceUpdateRequestSchema; + output: typeof VMServiceUpdateResponseSchema; + }; + /** + * Returns the list of all VM addresses. + * + * @generated from rpc fits.api.vm.v1.VMService.List + */ + list: { + methodKind: "unary"; + input: typeof VMServiceListRequestSchema; + output: typeof VMServiceListResponseSchema; + }; + /** + * Deletes an VM address. + * + * @generated from rpc fits.api.vm.v1.VMService.Delete + */ + delete: { + methodKind: "unary"; + input: typeof VMServiceDeleteRequestSchema; + output: typeof VMServiceDeleteResponseSchema; + }; +}>; diff --git a/js/fits/api/vm/v1/vm_pb.js b/js/fits/api/vm/v1/vm_pb.js new file mode 100644 index 0000000..47f5e10 --- /dev/null +++ b/js/fits/api/vm/v1/vm_pb.js @@ -0,0 +1,77 @@ +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" +// @generated from file fits/api/vm/v1/vm.proto (package fits.api.vm.v1, syntax proto3) +/* eslint-disable */ +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; +import { file_fits_api_v1_common } from "../../v1/common_pb"; +import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; +/** + * Describes the file fits/api/vm/v1/vm.proto. + */ +export const file_fits_api_vm_v1_vm = /*@__PURE__*/ fileDesc("ChdmaXRzL2FwaS92bS92MS92bS5wcm90bxIOZml0cy5hcGkudm0udjEiewoKVk1JbnN0YW5jZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIfCgRtZXRhGAIgASgLMhEuZml0cy5hcGkudjEuTWV0YRIZCgRuYW1lGAMgASgJQgu6SAhyBsCzrrECARIZCgdwcm9qZWN0GAQgASgJQgi6SAVyA7ABASJIChNWTVNlcnZpY2VHZXRSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBIj4KFFZNU2VydmljZUdldFJlc3BvbnNlEiYKAnZtGAEgASgLMhouZml0cy5hcGkudm0udjEuVk1JbnN0YW5jZSKUAgoWVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARIeCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECAUgAiAEBEgsKA2NwdRgDIAEoDRILCgNyYW0YBCABKA0SGQoHb3NfdXVpZBgFIAEoCUIIukgFcgOwAQESGwoJdmxhbl91dWlkGAYgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAcgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYCCABKAlCCLpIBXIDsAEBEiMKBWRpc2tzGAkgAygLMhQuZml0cy5hcGkudm0udjEuRGlza0IHCgVfbmFtZSKoAQoERGlzaxITCgthdXRvX2V4dGVuZBgBIAEoCBIXCgpzaXplX2luX2diGAIgASgESACIAQESGQoMZHJpdmVfbGV0dGVyGAMgASgJSAGIAQESDQoFbGFiZWwYBCABKAkSGAoLbW91bnRfcG9pbnQYBSABKAlIAogBAUINCgtfc2l6ZV9pbl9nYkIPCg1fZHJpdmVfbGV0dGVyQg4KDF9tb3VudF9wb2ludCIZChdWTVNlcnZpY2VDcmVhdGVSZXNwb25zZSJpChZWTVNlcnZpY2VVcGRhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBIhkKF1ZNU2VydmljZVVwZGF0ZVJlc3BvbnNlIjEKFFZNU2VydmljZUxpc3RSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIhcKFVZNU2VydmljZUxpc3RSZXNwb25zZSIzChZWTVNlcnZpY2VEZWxldGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIhkKF1ZNU2VydmljZURlbGV0ZVJlc3BvbnNlMoEECglWTVNlcnZpY2USXQoDR2V0EiMuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlR2V0UmVxdWVzdBokLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUdldFJlc3BvbnNlIgvK8xgDAQID4PMYAhJlCgZDcmVhdGUSJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VDcmVhdGVSZXF1ZXN0GicuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESZQoGVXBkYXRlEiYuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlVXBkYXRlUmVxdWVzdBonLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZVVwZGF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmAKBExpc3QSJC5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VMaXN0UmVxdWVzdBolLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAISZQoGRGVsZXRlEiYuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlRGVsZXRlUmVxdWVzdBonLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZURlbGV0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBQqUBChJjb20uZml0cy5hcGkudm0udjFCB1ZtUHJvdG9QAVorZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdm0vdjE7dm12MaICA0ZBVqoCDkZpdHMuQXBpLlZtLlYxygIORml0c1xBcGlcVm1cVjHiAhpGaXRzXEFwaVxWbVxWMVxHUEJNZXRhZGF0YeoCEUZpdHM6OkFwaTo6Vm06OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); +/** + * Describes the message fits.api.vm.v1.VMInstance. + * Use `create(VMInstanceSchema)` to create a new message. + */ +export const VMInstanceSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 0); +/** + * Describes the message fits.api.vm.v1.VMServiceGetRequest. + * Use `create(VMServiceGetRequestSchema)` to create a new message. + */ +export const VMServiceGetRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 1); +/** + * Describes the message fits.api.vm.v1.VMServiceGetResponse. + * Use `create(VMServiceGetResponseSchema)` to create a new message. + */ +export const VMServiceGetResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 2); +/** + * Describes the message fits.api.vm.v1.VMServiceCreateRequest. + * Use `create(VMServiceCreateRequestSchema)` to create a new message. + */ +export const VMServiceCreateRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 3); +/** + * Describes the message fits.api.vm.v1.Disk. + * Use `create(DiskSchema)` to create a new message. + */ +export const DiskSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 4); +/** + * Describes the message fits.api.vm.v1.VMServiceCreateResponse. + * Use `create(VMServiceCreateResponseSchema)` to create a new message. + */ +export const VMServiceCreateResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 5); +/** + * Describes the message fits.api.vm.v1.VMServiceUpdateRequest. + * Use `create(VMServiceUpdateRequestSchema)` to create a new message. + */ +export const VMServiceUpdateRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 6); +/** + * Describes the message fits.api.vm.v1.VMServiceUpdateResponse. + * Use `create(VMServiceUpdateResponseSchema)` to create a new message. + */ +export const VMServiceUpdateResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 7); +/** + * Describes the message fits.api.vm.v1.VMServiceListRequest. + * Use `create(VMServiceListRequestSchema)` to create a new message. + */ +export const VMServiceListRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 8); +/** + * Describes the message fits.api.vm.v1.VMServiceListResponse. + * Use `create(VMServiceListResponseSchema)` to create a new message. + */ +export const VMServiceListResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 9); +/** + * Describes the message fits.api.vm.v1.VMServiceDeleteRequest. + * Use `create(VMServiceDeleteRequestSchema)` to create a new message. + */ +export const VMServiceDeleteRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 10); +/** + * Describes the message fits.api.vm.v1.VMServiceDeleteResponse. + * Use `create(VMServiceDeleteResponseSchema)` to create a new message. + */ +export const VMServiceDeleteResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 11); +/** + * VMService provides VM address management operations. + * + * @generated from service fits.api.vm.v1.VMService + */ +export const VMService = /*@__PURE__*/ serviceDesc(file_fits_api_vm_v1_vm, 0); diff --git a/js/fits/api/vm/v1/vm_pb.ts b/js/fits/api/vm/v1/vm_pb.ts new file mode 100644 index 0000000..bd6c01a --- /dev/null +++ b/js/fits/api/vm/v1/vm_pb.ts @@ -0,0 +1,431 @@ +// @generated by protoc-gen-es v2.14.0 with parameter "target=ts" +// @generated from file fits/api/vm/v1/vm.proto (package fits.api.vm.v1, syntax proto3) +/* eslint-disable */ + +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; +import type { Meta, UpdateMeta } from "../../v1/common_pb"; +import { file_fits_api_v1_common } from "../../v1/common_pb"; +import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file fits/api/vm/v1/vm.proto. + */ +export const file_fits_api_vm_v1_vm: GenFile = /*@__PURE__*/ + fileDesc("ChdmaXRzL2FwaS92bS92MS92bS5wcm90bxIOZml0cy5hcGkudm0udjEiewoKVk1JbnN0YW5jZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIfCgRtZXRhGAIgASgLMhEuZml0cy5hcGkudjEuTWV0YRIZCgRuYW1lGAMgASgJQgu6SAhyBsCzrrECARIZCgdwcm9qZWN0GAQgASgJQgi6SAVyA7ABASJIChNWTVNlcnZpY2VHZXRSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBIj4KFFZNU2VydmljZUdldFJlc3BvbnNlEiYKAnZtGAEgASgLMhouZml0cy5hcGkudm0udjEuVk1JbnN0YW5jZSKUAgoWVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARIeCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECAUgAiAEBEgsKA2NwdRgDIAEoDRILCgNyYW0YBCABKA0SGQoHb3NfdXVpZBgFIAEoCUIIukgFcgOwAQESGwoJdmxhbl91dWlkGAYgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAcgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYCCABKAlCCLpIBXIDsAEBEiMKBWRpc2tzGAkgAygLMhQuZml0cy5hcGkudm0udjEuRGlza0IHCgVfbmFtZSKoAQoERGlzaxITCgthdXRvX2V4dGVuZBgBIAEoCBIXCgpzaXplX2luX2diGAIgASgESACIAQESGQoMZHJpdmVfbGV0dGVyGAMgASgJSAGIAQESDQoFbGFiZWwYBCABKAkSGAoLbW91bnRfcG9pbnQYBSABKAlIAogBAUINCgtfc2l6ZV9pbl9nYkIPCg1fZHJpdmVfbGV0dGVyQg4KDF9tb3VudF9wb2ludCIZChdWTVNlcnZpY2VDcmVhdGVSZXNwb25zZSJpChZWTVNlcnZpY2VVcGRhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBIhkKF1ZNU2VydmljZVVwZGF0ZVJlc3BvbnNlIjEKFFZNU2VydmljZUxpc3RSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIhcKFVZNU2VydmljZUxpc3RSZXNwb25zZSIzChZWTVNlcnZpY2VEZWxldGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIhkKF1ZNU2VydmljZURlbGV0ZVJlc3BvbnNlMoEECglWTVNlcnZpY2USXQoDR2V0EiMuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlR2V0UmVxdWVzdBokLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUdldFJlc3BvbnNlIgvK8xgDAQID4PMYAhJlCgZDcmVhdGUSJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VDcmVhdGVSZXF1ZXN0GicuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESZQoGVXBkYXRlEiYuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlVXBkYXRlUmVxdWVzdBonLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZVVwZGF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmAKBExpc3QSJC5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VMaXN0UmVxdWVzdBolLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAISZQoGRGVsZXRlEiYuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlRGVsZXRlUmVxdWVzdBonLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZURlbGV0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBQqUBChJjb20uZml0cy5hcGkudm0udjFCB1ZtUHJvdG9QAVorZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdm0vdjE7dm12MaICA0ZBVqoCDkZpdHMuQXBpLlZtLlYxygIORml0c1xBcGlcVm1cVjHiAhpGaXRzXEFwaVxWbVxWMVxHUEJNZXRhZGF0YeoCEUZpdHM6OkFwaTo6Vm06OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); + +/** + * VM Instance Messages + * + * @generated from message fits.api.vm.v1.VMInstance + */ +export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { + /** + * Uuid of this vm + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * Meta for this vm + * + * @generated from field: fits.api.v1.Meta meta = 2; + */ + meta?: Meta | undefined; + + /** + * Name of this vm + * + * @generated from field: string name = 3; + */ + name: string; + + /** + * Project where this vm address belongs to + * + * @generated from field: string project = 4; + */ + project: string; +}; + +/** + * Describes the message fits.api.vm.v1.VMInstance. + * Use `create(VMInstanceSchema)` to create a new message. + */ +export const VMInstanceSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 0); + +/** + * VMServiceGetRequest TODO + * + * @generated from message fits.api.vm.v1.VMServiceGetRequest + */ +export type VMServiceGetRequest = Message<"fits.api.vm.v1.VMServiceGetRequest"> & { + /** + * Uuid of this vm + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * Project where this vm address belongs to + * + * @generated from field: string project = 2; + */ + project: string; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceGetRequest. + * Use `create(VMServiceGetRequestSchema)` to create a new message. + */ +export const VMServiceGetRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 1); + +/** + * VMServiceGetResponse TODO + * + * @generated from message fits.api.vm.v1.VMServiceGetResponse + */ +export type VMServiceGetResponse = Message<"fits.api.vm.v1.VMServiceGetResponse"> & { + /** + * The vm + * + * @generated from field: fits.api.vm.v1.VMInstance vm = 1; + */ + vm?: VMInstance | undefined; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceGetResponse. + * Use `create(VMServiceGetResponseSchema)` to create a new message. + */ +export const VMServiceGetResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 2); + +/** + * VMServiceCreateRequest TODO + * + * @generated from message fits.api.vm.v1.VMServiceCreateRequest + */ +export type VMServiceCreateRequest = Message<"fits.api.vm.v1.VMServiceCreateRequest"> & { + /** + * Project of the vm + * + * @generated from field: string project = 1; + */ + project: string; + + /** + * Name of the vm + * + * @generated from field: optional string name = 2; + */ + name?: string | undefined; + + /** + * Number of CPUs of this vm + * + * @generated from field: uint32 cpu = 3; + */ + cpu: number; + + /** + * Ram of the vm in GB + * + * @generated from field: uint32 ram = 4; + */ + ram: number; + + /** + * OS Uuid of the OS to install in the vm instance + * + * @generated from field: string os_uuid = 5; + */ + osUuid: string; + + /** + * VLAN Uuid of the VLAN to install in the vm instance into + * + * @generated from field: string vlan_uuid = 6; + */ + vlanUuid: string; + + /** + * Location Uuid of the datacenter location to install in the vm instance + * + * @generated from field: string location_uuid = 7; + */ + locationUuid: string; + + /** + * Contact Uuid of who is the responsible contact of the vm instance + * + * @generated from field: string contact_uuid = 8; + */ + contactUuid: string; + + /** + * List of disks for this vm + * + * Disks []DiskInputModel + * RequestedBy *string // TODO is inherited from the token making the create request -> stored in meta.createdBy + * + * @generated from field: repeated fits.api.vm.v1.Disk disks = 9; + */ + disks: Disk[]; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceCreateRequest. + * Use `create(VMServiceCreateRequestSchema)` to create a new message. + */ +export const VMServiceCreateRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 3); + +/** + * Disk + * + * @generated from message fits.api.vm.v1.Disk + */ +export type Disk = Message<"fits.api.vm.v1.Disk"> & { + /** + * AutoExtend if set to true the disk grows automatically + * + * @generated from field: bool auto_extend = 1; + */ + autoExtend: boolean; + + /** + * Size if the disk in GB + * + * TODO discuss how this could be optional + * + * @generated from field: optional uint64 size_in_gb = 2; + */ + sizeInGb?: bigint | undefined; + + /** + * DriveLetter where this disk should be assigned + * + * @generated from field: optional string drive_letter = 3; + */ + driveLetter?: string | undefined; + + /** + * Label of the disk + * + * @generated from field: string label = 4; + */ + label: string; + + /** + * MountPoint where this disk should be mounted + * + * TODO this requires a Filesystem on the disk ? + * + * @generated from field: optional string mount_point = 5; + */ + mountPoint?: string | undefined; +}; + +/** + * Describes the message fits.api.vm.v1.Disk. + * Use `create(DiskSchema)` to create a new message. + */ +export const DiskSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 4); + +/** + * VMServiceCreateResponse TODO + * + * @generated from message fits.api.vm.v1.VMServiceCreateResponse + */ +export type VMServiceCreateResponse = Message<"fits.api.vm.v1.VMServiceCreateResponse"> & { +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceCreateResponse. + * Use `create(VMServiceCreateResponseSchema)` to create a new message. + */ +export const VMServiceCreateResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 5); + +/** + * VMServiceUpdateRequest TODO + * + * @generated from message fits.api.vm.v1.VMServiceUpdateRequest + */ +export type VMServiceUpdateRequest = Message<"fits.api.vm.v1.VMServiceUpdateRequest"> & { + /** + * Project of the vm + * + * @generated from field: string project = 1; + */ + project: string; + + /** + * UpdateMeta contains the timestamp and strategy to be used in this update request. + * + * @generated from field: fits.api.v1.UpdateMeta update_meta = 2; + */ + updateMeta?: UpdateMeta | undefined; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceUpdateRequest. + * Use `create(VMServiceUpdateRequestSchema)` to create a new message. + */ +export const VMServiceUpdateRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 6); + +/** + * VMServiceUpdateResponse TODO + * + * @generated from message fits.api.vm.v1.VMServiceUpdateResponse + */ +export type VMServiceUpdateResponse = Message<"fits.api.vm.v1.VMServiceUpdateResponse"> & { +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceUpdateResponse. + * Use `create(VMServiceUpdateResponseSchema)` to create a new message. + */ +export const VMServiceUpdateResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 7); + +/** + * VMServiceListRequest TODO + * + * @generated from message fits.api.vm.v1.VMServiceListRequest + */ +export type VMServiceListRequest = Message<"fits.api.vm.v1.VMServiceListRequest"> & { + /** + * Project of the vm + * + * @generated from field: string project = 1; + */ + project: string; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceListRequest. + * Use `create(VMServiceListRequestSchema)` to create a new message. + */ +export const VMServiceListRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 8); + +/** + * VMServiceListResponse TODO + * + * @generated from message fits.api.vm.v1.VMServiceListResponse + */ +export type VMServiceListResponse = Message<"fits.api.vm.v1.VMServiceListResponse"> & { +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceListResponse. + * Use `create(VMServiceListResponseSchema)` to create a new message. + */ +export const VMServiceListResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 9); + +/** + * VMServiceDeleteRequest TODO + * + * @generated from message fits.api.vm.v1.VMServiceDeleteRequest + */ +export type VMServiceDeleteRequest = Message<"fits.api.vm.v1.VMServiceDeleteRequest"> & { + /** + * Project of the vm + * + * @generated from field: string project = 1; + */ + project: string; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceDeleteRequest. + * Use `create(VMServiceDeleteRequestSchema)` to create a new message. + */ +export const VMServiceDeleteRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 10); + +/** + * VMServiceDeleteResponse TODO + * + * @generated from message fits.api.vm.v1.VMServiceDeleteResponse + */ +export type VMServiceDeleteResponse = Message<"fits.api.vm.v1.VMServiceDeleteResponse"> & { +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceDeleteResponse. + * Use `create(VMServiceDeleteResponseSchema)` to create a new message. + */ +export const VMServiceDeleteResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 11); + +/** + * VMService provides VM address management operations. + * + * @generated from service fits.api.vm.v1.VMService + */ +export const VMService: GenService<{ + /** + * Returns the VM address with the specified VM. + * + * @generated from rpc fits.api.vm.v1.VMService.Get + */ + get: { + methodKind: "unary"; + input: typeof VMServiceGetRequestSchema; + output: typeof VMServiceGetResponseSchema; + }, + /** + * Creates a new VM address. + * + * @generated from rpc fits.api.vm.v1.VMService.Create + */ + create: { + methodKind: "unary"; + input: typeof VMServiceCreateRequestSchema; + output: typeof VMServiceCreateResponseSchema; + }, + /** + * Updates an VM address. + * + * @generated from rpc fits.api.vm.v1.VMService.Update + */ + update: { + methodKind: "unary"; + input: typeof VMServiceUpdateRequestSchema; + output: typeof VMServiceUpdateResponseSchema; + }, + /** + * Returns the list of all VM addresses. + * + * @generated from rpc fits.api.vm.v1.VMService.List + */ + list: { + methodKind: "unary"; + input: typeof VMServiceListRequestSchema; + output: typeof VMServiceListResponseSchema; + }, + /** + * Deletes an VM address. + * + * @generated from rpc fits.api.vm.v1.VMService.Delete + */ + delete: { + methodKind: "unary"; + input: typeof VMServiceDeleteRequestSchema; + output: typeof VMServiceDeleteResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_fits_api_vm_v1_vm, 0); + diff --git a/proto/fits/api/vm/v1/vm.proto b/proto/fits/api/vm/v1/vm.proto index c4124b7..d0ca7a4 100644 --- a/proto/fits/api/vm/v1/vm.proto +++ b/proto/fits/api/vm/v1/vm.proto @@ -128,19 +128,33 @@ message Disk { message VMServiceCreateResponse {} // VMServiceUpdateRequest TODO -message VMServiceUpdateRequest {} +message VMServiceUpdateRequest { + // Project of the vm + string project = 1 [(buf.validate.field).string.uuid = true]; + + // TODO updatable fields + + // UpdateMeta contains the timestamp and strategy to be used in this update request. + fits.api.v1.UpdateMeta update_meta = 2 [(buf.validate.field).required = true]; +} // VMServiceUpdateResponse TODO message VMServiceUpdateResponse {} // VMServiceListRequest TODO -message VMServiceListRequest {} +message VMServiceListRequest { + // Project of the vm + string project = 1 [(buf.validate.field).string.uuid = true]; +} // VMServiceListResponse TODO message VMServiceListResponse {} // VMServiceDeleteRequest TODO -message VMServiceDeleteRequest {} +message VMServiceDeleteRequest { + // Project of the vm + string project = 1 [(buf.validate.field).string.uuid = true]; +} // VMServiceDeleteResponse TODO message VMServiceDeleteResponse {} diff --git a/python/fits/api/v1/common_pb2.py b/python/fits/api/v1/common_pb2.py index 12c69b1..9aa1b6e 100644 --- a/python/fits/api/v1/common_pb2.py +++ b/python/fits/api/v1/common_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: fits/api/v1/common.proto -# Protobuf Python Version: 7.34.1 +# Protobuf Python Version: 7.36.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -12,7 +12,7 @@ _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, 7, - 34, + 36, 1, '', 'fits/api/v1/common.proto' diff --git a/python/fits/api/v1/health_connect.py b/python/fits/api/v1/health_connect.py index bfbb0e0..d4eaf61 100644 --- a/python/fits/api/v1/health_connect.py +++ b/python/fits/api/v1/health_connect.py @@ -7,6 +7,8 @@ from connectrpc.client import ConnectClient, ConnectClientSync from connectrpc.code import Code +from connectrpc.codec import Codec +from connectrpc.compression import Compression from connectrpc.errors import ConnectError from connectrpc.interceptor import Interceptor, InterceptorSync from connectrpc.method import IdempotencyLevel, MethodInfo @@ -21,7 +23,7 @@ async def get(self, request: fits_dot_api_dot_v1_dot_health__pb2.HealthServiceGe class HealthServiceASGIApplication(ConnectASGIApplication[HealthService]): - def __init__(self, service: HealthService | AsyncGenerator[HealthService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + def __init__(self, service: HealthService | AsyncGenerator[HealthService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( service=service, endpoints=lambda svc: { @@ -38,6 +40,8 @@ def __init__(self, service: HealthService | AsyncGenerator[HealthService], *, in }, interceptors=interceptors, read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, ) @property @@ -68,13 +72,16 @@ async def get( ) + + + class HealthServiceSync(Protocol): def get(self, request: fits_dot_api_dot_v1_dot_health__pb2.HealthServiceGetRequest, ctx: RequestContext) -> fits_dot_api_dot_v1_dot_health__pb2.HealthServiceGetResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") class HealthServiceWSGIApplication(ConnectWSGIApplication): - def __init__(self, service: HealthServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + def __init__(self, service: HealthServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( endpoints={ "/fits.api.v1.HealthService/Get": EndpointSync.unary( @@ -90,6 +97,8 @@ def __init__(self, service: HealthServiceSync, interceptors: Iterable[Intercepto }, interceptors=interceptors, read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, ) @property @@ -118,3 +127,5 @@ def get( headers=headers, timeout_ms=timeout_ms, ) + + diff --git a/python/fits/api/v1/health_pb2.py b/python/fits/api/v1/health_pb2.py index a4c98f4..e0e3ddd 100644 --- a/python/fits/api/v1/health_pb2.py +++ b/python/fits/api/v1/health_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: fits/api/v1/health.proto -# Protobuf Python Version: 7.34.1 +# Protobuf Python Version: 7.36.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -12,7 +12,7 @@ _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, 7, - 34, + 36, 1, '', 'fits/api/v1/health.proto' diff --git a/python/fits/api/v1/ip_connect.py b/python/fits/api/v1/ip_connect.py index bafe90e..ac905ab 100644 --- a/python/fits/api/v1/ip_connect.py +++ b/python/fits/api/v1/ip_connect.py @@ -7,6 +7,8 @@ from connectrpc.client import ConnectClient, ConnectClientSync from connectrpc.code import Code +from connectrpc.codec import Codec +from connectrpc.compression import Compression from connectrpc.errors import ConnectError from connectrpc.interceptor import Interceptor, InterceptorSync from connectrpc.method import IdempotencyLevel, MethodInfo @@ -33,7 +35,7 @@ async def delete(self, request: fits_dot_api_dot_v1_dot_ip__pb2.IPServiceDeleteR class IPServiceASGIApplication(ConnectASGIApplication[IPService]): - def __init__(self, service: IPService | AsyncGenerator[IPService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + def __init__(self, service: IPService | AsyncGenerator[IPService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( service=service, endpoints=lambda svc: { @@ -90,6 +92,8 @@ def __init__(self, service: IPService | AsyncGenerator[IPService], *, intercepto }, interceptors=interceptors, read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, ) @property @@ -200,6 +204,9 @@ async def delete( ) + + + class IPServiceSync(Protocol): def get(self, request: fits_dot_api_dot_v1_dot_ip__pb2.IPServiceGetRequest, ctx: RequestContext) -> fits_dot_api_dot_v1_dot_ip__pb2.IPServiceGetResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") @@ -214,7 +221,7 @@ def delete(self, request: fits_dot_api_dot_v1_dot_ip__pb2.IPServiceDeleteRequest class IPServiceWSGIApplication(ConnectWSGIApplication): - def __init__(self, service: IPServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + def __init__(self, service: IPServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( endpoints={ "/fits.api.v1.IPService/Get": EndpointSync.unary( @@ -270,6 +277,8 @@ def __init__(self, service: IPServiceSync, interceptors: Iterable[InterceptorSyn }, interceptors=interceptors, read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, ) @property @@ -378,3 +387,5 @@ def delete( headers=headers, timeout_ms=timeout_ms, ) + + diff --git a/python/fits/api/v1/ip_pb2.py b/python/fits/api/v1/ip_pb2.py index 3a3132d..bc71c16 100644 --- a/python/fits/api/v1/ip_pb2.py +++ b/python/fits/api/v1/ip_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: fits/api/v1/ip.proto -# Protobuf Python Version: 7.34.1 +# Protobuf Python Version: 7.36.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -12,7 +12,7 @@ _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, 7, - 34, + 36, 1, '', 'fits/api/v1/ip.proto' diff --git a/python/fits/api/v1/method_connect.py b/python/fits/api/v1/method_connect.py index 15782cf..488fdc7 100644 --- a/python/fits/api/v1/method_connect.py +++ b/python/fits/api/v1/method_connect.py @@ -7,6 +7,8 @@ from connectrpc.client import ConnectClient, ConnectClientSync from connectrpc.code import Code +from connectrpc.codec import Codec +from connectrpc.compression import Compression from connectrpc.errors import ConnectError from connectrpc.interceptor import Interceptor, InterceptorSync from connectrpc.method import IdempotencyLevel, MethodInfo @@ -24,7 +26,7 @@ async def token_scoped_list(self, request: fits_dot_api_dot_v1_dot_method__pb2.M class MethodServiceASGIApplication(ConnectASGIApplication[MethodService]): - def __init__(self, service: MethodService | AsyncGenerator[MethodService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + def __init__(self, service: MethodService | AsyncGenerator[MethodService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( service=service, endpoints=lambda svc: { @@ -51,6 +53,8 @@ def __init__(self, service: MethodService | AsyncGenerator[MethodService], *, in }, interceptors=interceptors, read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, ) @property @@ -101,6 +105,9 @@ async def token_scoped_list( ) + + + class MethodServiceSync(Protocol): def list(self, request: fits_dot_api_dot_v1_dot_method__pb2.MethodServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_v1_dot_method__pb2.MethodServiceListResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") @@ -109,7 +116,7 @@ def token_scoped_list(self, request: fits_dot_api_dot_v1_dot_method__pb2.MethodS class MethodServiceWSGIApplication(ConnectWSGIApplication): - def __init__(self, service: MethodServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + def __init__(self, service: MethodServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( endpoints={ "/fits.api.v1.MethodService/List": EndpointSync.unary( @@ -135,6 +142,8 @@ def __init__(self, service: MethodServiceSync, interceptors: Iterable[Intercepto }, interceptors=interceptors, read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, ) @property @@ -183,3 +192,5 @@ def token_scoped_list( headers=headers, timeout_ms=timeout_ms, ) + + diff --git a/python/fits/api/v1/method_pb2.py b/python/fits/api/v1/method_pb2.py index dc86337..a58e59c 100644 --- a/python/fits/api/v1/method_pb2.py +++ b/python/fits/api/v1/method_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: fits/api/v1/method.proto -# Protobuf Python Version: 7.34.1 +# Protobuf Python Version: 7.36.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -12,7 +12,7 @@ _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, 7, - 34, + 36, 1, '', 'fits/api/v1/method.proto' diff --git a/python/fits/api/v1/predefined_rules_pb2.py b/python/fits/api/v1/predefined_rules_pb2.py index 85e4c3b..dcbcd24 100644 --- a/python/fits/api/v1/predefined_rules_pb2.py +++ b/python/fits/api/v1/predefined_rules_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: fits/api/v1/predefined_rules.proto -# Protobuf Python Version: 7.34.1 +# Protobuf Python Version: 7.36.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -12,7 +12,7 @@ _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, 7, - 34, + 36, 1, '', 'fits/api/v1/predefined_rules.proto' diff --git a/python/fits/api/v1/project_connect.py b/python/fits/api/v1/project_connect.py index 84fbab6..73d708d 100644 --- a/python/fits/api/v1/project_connect.py +++ b/python/fits/api/v1/project_connect.py @@ -7,6 +7,8 @@ from connectrpc.client import ConnectClient, ConnectClientSync from connectrpc.code import Code +from connectrpc.codec import Codec +from connectrpc.compression import Compression from connectrpc.errors import ConnectError from connectrpc.interceptor import Interceptor, InterceptorSync from connectrpc.method import IdempotencyLevel, MethodInfo @@ -33,7 +35,7 @@ async def update(self, request: fits_dot_api_dot_v1_dot_project__pb2.ProjectServ class ProjectServiceASGIApplication(ConnectASGIApplication[ProjectService]): - def __init__(self, service: ProjectService | AsyncGenerator[ProjectService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + def __init__(self, service: ProjectService | AsyncGenerator[ProjectService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( service=service, endpoints=lambda svc: { @@ -90,6 +92,8 @@ def __init__(self, service: ProjectService | AsyncGenerator[ProjectService], *, }, interceptors=interceptors, read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, ) @property @@ -200,6 +204,9 @@ async def update( ) + + + class ProjectServiceSync(Protocol): def list(self, request: fits_dot_api_dot_v1_dot_project__pb2.ProjectServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_v1_dot_project__pb2.ProjectServiceListResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") @@ -214,7 +221,7 @@ def update(self, request: fits_dot_api_dot_v1_dot_project__pb2.ProjectServiceUpd class ProjectServiceWSGIApplication(ConnectWSGIApplication): - def __init__(self, service: ProjectServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + def __init__(self, service: ProjectServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( endpoints={ "/fits.api.v1.ProjectService/List": EndpointSync.unary( @@ -270,6 +277,8 @@ def __init__(self, service: ProjectServiceSync, interceptors: Iterable[Intercept }, interceptors=interceptors, read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, ) @property @@ -378,3 +387,5 @@ def update( headers=headers, timeout_ms=timeout_ms, ) + + diff --git a/python/fits/api/v1/project_pb2.py b/python/fits/api/v1/project_pb2.py index e55aa0a..377e912 100644 --- a/python/fits/api/v1/project_pb2.py +++ b/python/fits/api/v1/project_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: fits/api/v1/project.proto -# Protobuf Python Version: 7.34.1 +# Protobuf Python Version: 7.36.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -12,7 +12,7 @@ _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, 7, - 34, + 36, 1, '', 'fits/api/v1/project.proto' @@ -25,10 +25,9 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/v1/project.proto\x12\x0b\x66its.api.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xdf\x01\n\x07Project\x12\x12\n\x04uuid\x18\x01 \x01(\tR\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\x16\n\x06tenant\x18\x05 \x01(\tR\x06tenant\x12\"\n\navatar_url\x18\x06 \x01(\tH\x00R\tavatarUrl\x88\x01\x01\x42\r\n\x0b_avatar_url\"\xd8\x01\n\x19ProjectServiceListRequest\x12\x13\n\x02id\x18\x01 \x01(\tH\x00R\x02id\x88\x01\x01\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12(\n\x06tenant\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x02R\x06tenant\x88\x01\x01\x12\x30\n\x06labels\x18\x04 \x01(\x0b\x32\x13.fits.api.v1.LabelsH\x03R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\t\n\x07_tenantB\t\n\x07_labels\"N\n\x1aProjectServiceListResponse\x12\x30\n\x08projects\x18\x01 \x03(\x0b\x32\x14.fits.api.v1.ProjectR\x08projects\">\n\x18ProjectServiceGetRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"K\n\x19ProjectServiceGetResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project\"\xf0\x01\n\x1bProjectServiceCreateRequest\x12!\n\x05login\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05login\x12\x1f\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\"\n\navatar_url\x18\x04 \x01(\tH\x00R\tavatarUrl\x88\x01\x01\x12+\n\x06labels\x18\x05 \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labelsB\r\n\x0b_avatar_url\"N\n\x1cProjectServiceCreateResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project\"A\n\x1bProjectServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"N\n\x1cProjectServiceDeleteResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project\"\xec\x02\n\x1bProjectServiceUpdateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12$\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\navatar_url\x18\x05 \x01(\tH\x02R\tavatarUrl\x88\x01\x01\x12\x36\n\x06labels\x18\x06 \x01(\x0b\x32\x19.fits.api.v1.UpdateLabelsH\x03R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\r\n\x0b_avatar_urlB\t\n\x07_labels\"N\n\x1cProjectServiceUpdateResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project2\x96\x04\n\x0eProjectService\x12\x61\n\x04List\x12&.fits.api.v1.ProjectServiceListRequest\x1a\'.fits.api.v1.ProjectServiceListResponse\"\x08\xd8\xf3\x18\x02\xe0\xf3\x18\x02\x12\x61\n\x03Get\x12%.fits.api.v1.ProjectServiceGetRequest\x1a&.fits.api.v1.ProjectServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x43reate\x12(.fits.api.v1.ProjectServiceCreateRequest\x1a).fits.api.v1.ProjectServiceCreateResponse\"\n\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12h\n\x06\x44\x65lete\x12(.fits.api.v1.ProjectServiceDeleteRequest\x1a).fits.api.v1.ProjectServiceDeleteResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12i\n\x06Update\x12(.fits.api.v1.ProjectServiceUpdateRequest\x1a).fits.api.v1.ProjectServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\x98\x01\n\x0f\x63om.fits.api.v1B\x0cProjectProtoP\x01Z)github.com/fi-ts/api/go/fits/api/v1;apiv1\xa2\x02\x03\x46\x41X\xaa\x02\x0b\x46its.Api.V1\xca\x02\x0b\x46its\\Api\\V1\xe2\x02\x17\x46its\\Api\\V1\\GPBMetadata\xea\x02\rFits::Api::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/v1/project.proto\x12\x0b\x66its.api.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xdf\x01\n\x07Project\x12\x12\n\x04uuid\x18\x01 \x01(\tR\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\x16\n\x06tenant\x18\x05 \x01(\tR\x06tenant\x12\"\n\navatar_url\x18\x06 \x01(\tH\x00R\tavatarUrl\x88\x01\x01\x42\r\n\x0b_avatar_url\"\xd8\x01\n\x19ProjectServiceListRequest\x12\x13\n\x02id\x18\x01 \x01(\tH\x00R\x02id\x88\x01\x01\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12(\n\x06tenant\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x02R\x06tenant\x88\x01\x01\x12\x30\n\x06labels\x18\x04 \x01(\x0b\x32\x13.fits.api.v1.LabelsH\x03R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\t\n\x07_tenantB\t\n\x07_labels\"N\n\x1aProjectServiceListResponse\x12\x30\n\x08projects\x18\x01 \x03(\x0b\x32\x14.fits.api.v1.ProjectR\x08projects\">\n\x18ProjectServiceGetRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"K\n\x19ProjectServiceGetResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project\"\xf0\x01\n\x1bProjectServiceCreateRequest\x12!\n\x05login\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05login\x12\x1f\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\"\n\navatar_url\x18\x04 \x01(\tH\x00R\tavatarUrl\x88\x01\x01\x12+\n\x06labels\x18\x05 \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labelsB\r\n\x0b_avatar_url\"N\n\x1cProjectServiceCreateResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project\"A\n\x1bProjectServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"N\n\x1cProjectServiceDeleteResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project\"\xec\x02\n\x1bProjectServiceUpdateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12$\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\navatar_url\x18\x05 \x01(\tH\x02R\tavatarUrl\x88\x01\x01\x12\x36\n\x06labels\x18\x06 \x01(\x0b\x32\x19.fits.api.v1.UpdateLabelsH\x03R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\r\n\x0b_avatar_urlB\t\n\x07_labels\"N\n\x1cProjectServiceUpdateResponse\x12.\n\x07project\x18\x01 \x01(\x0b\x32\x14.fits.api.v1.ProjectR\x07project2\x96\x04\n\x0eProjectService\x12\x61\n\x04List\x12&.fits.api.v1.ProjectServiceListRequest\x1a\'.fits.api.v1.ProjectServiceListResponse\"\x08\xd8\xf3\x18\x02\xe0\xf3\x18\x02\x12\x61\n\x03Get\x12%.fits.api.v1.ProjectServiceGetRequest\x1a&.fits.api.v1.ProjectServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x43reate\x12(.fits.api.v1.ProjectServiceCreateRequest\x1a).fits.api.v1.ProjectServiceCreateResponse\"\n\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12h\n\x06\x44\x65lete\x12(.fits.api.v1.ProjectServiceDeleteRequest\x1a).fits.api.v1.ProjectServiceDeleteResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12i\n\x06Update\x12(.fits.api.v1.ProjectServiceUpdateRequest\x1a).fits.api.v1.ProjectServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\x98\x01\n\x0f\x63om.fits.api.v1B\x0cProjectProtoP\x01Z)github.com/fi-ts/api/go/fits/api/v1;apiv1\xa2\x02\x03\x46\x41X\xaa\x02\x0b\x46its.Api.V1\xca\x02\x0b\x46its\\Api\\V1\xe2\x02\x17\x46its\\Api\\V1\\GPBMetadata\xea\x02\rFits::Api::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -72,28 +71,28 @@ _globals['_PROJECTSERVICE'].methods_by_name['Delete']._serialized_options = b'\312\363\030\001\001\340\363\030\001' _globals['_PROJECTSERVICE'].methods_by_name['Update']._loaded_options = None _globals['_PROJECTSERVICE'].methods_by_name['Update']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' - _globals['_PROJECT']._serialized_start=167 - _globals['_PROJECT']._serialized_end=390 - _globals['_PROJECTSERVICELISTREQUEST']._serialized_start=393 - _globals['_PROJECTSERVICELISTREQUEST']._serialized_end=609 - _globals['_PROJECTSERVICELISTRESPONSE']._serialized_start=611 - _globals['_PROJECTSERVICELISTRESPONSE']._serialized_end=689 - _globals['_PROJECTSERVICEGETREQUEST']._serialized_start=691 - _globals['_PROJECTSERVICEGETREQUEST']._serialized_end=753 - _globals['_PROJECTSERVICEGETRESPONSE']._serialized_start=755 - _globals['_PROJECTSERVICEGETRESPONSE']._serialized_end=830 - _globals['_PROJECTSERVICECREATEREQUEST']._serialized_start=833 - _globals['_PROJECTSERVICECREATEREQUEST']._serialized_end=1073 - _globals['_PROJECTSERVICECREATERESPONSE']._serialized_start=1075 - _globals['_PROJECTSERVICECREATERESPONSE']._serialized_end=1153 - _globals['_PROJECTSERVICEDELETEREQUEST']._serialized_start=1155 - _globals['_PROJECTSERVICEDELETEREQUEST']._serialized_end=1220 - _globals['_PROJECTSERVICEDELETERESPONSE']._serialized_start=1222 - _globals['_PROJECTSERVICEDELETERESPONSE']._serialized_end=1300 - _globals['_PROJECTSERVICEUPDATEREQUEST']._serialized_start=1303 - _globals['_PROJECTSERVICEUPDATEREQUEST']._serialized_end=1667 - _globals['_PROJECTSERVICEUPDATERESPONSE']._serialized_start=1669 - _globals['_PROJECTSERVICEUPDATERESPONSE']._serialized_end=1747 - _globals['_PROJECTSERVICE']._serialized_start=1750 - _globals['_PROJECTSERVICE']._serialized_end=2284 + _globals['_PROJECT']._serialized_start=134 + _globals['_PROJECT']._serialized_end=357 + _globals['_PROJECTSERVICELISTREQUEST']._serialized_start=360 + _globals['_PROJECTSERVICELISTREQUEST']._serialized_end=576 + _globals['_PROJECTSERVICELISTRESPONSE']._serialized_start=578 + _globals['_PROJECTSERVICELISTRESPONSE']._serialized_end=656 + _globals['_PROJECTSERVICEGETREQUEST']._serialized_start=658 + _globals['_PROJECTSERVICEGETREQUEST']._serialized_end=720 + _globals['_PROJECTSERVICEGETRESPONSE']._serialized_start=722 + _globals['_PROJECTSERVICEGETRESPONSE']._serialized_end=797 + _globals['_PROJECTSERVICECREATEREQUEST']._serialized_start=800 + _globals['_PROJECTSERVICECREATEREQUEST']._serialized_end=1040 + _globals['_PROJECTSERVICECREATERESPONSE']._serialized_start=1042 + _globals['_PROJECTSERVICECREATERESPONSE']._serialized_end=1120 + _globals['_PROJECTSERVICEDELETEREQUEST']._serialized_start=1122 + _globals['_PROJECTSERVICEDELETEREQUEST']._serialized_end=1187 + _globals['_PROJECTSERVICEDELETERESPONSE']._serialized_start=1189 + _globals['_PROJECTSERVICEDELETERESPONSE']._serialized_end=1267 + _globals['_PROJECTSERVICEUPDATEREQUEST']._serialized_start=1270 + _globals['_PROJECTSERVICEUPDATEREQUEST']._serialized_end=1634 + _globals['_PROJECTSERVICEUPDATERESPONSE']._serialized_start=1636 + _globals['_PROJECTSERVICEUPDATERESPONSE']._serialized_end=1714 + _globals['_PROJECTSERVICE']._serialized_start=1717 + _globals['_PROJECTSERVICE']._serialized_end=2251 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/v1/project_pb2.pyi b/python/fits/api/v1/project_pb2.pyi index 8756f92..4aad5d3 100644 --- a/python/fits/api/v1/project_pb2.pyi +++ b/python/fits/api/v1/project_pb2.pyi @@ -1,7 +1,6 @@ from buf.validate import validate_pb2 as _validate_pb2 from fits.api.v1 import common_pb2 as _common_pb2 from fits.api.v1 import predefined_rules_pb2 as _predefined_rules_pb2 -from google.protobuf import timestamp_pb2 as _timestamp_pb2 from google.protobuf.internal import containers as _containers from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message diff --git a/python/fits/api/v1/tenant_connect.py b/python/fits/api/v1/tenant_connect.py index 2e69081..33430b7 100644 --- a/python/fits/api/v1/tenant_connect.py +++ b/python/fits/api/v1/tenant_connect.py @@ -7,6 +7,8 @@ from connectrpc.client import ConnectClient, ConnectClientSync from connectrpc.code import Code +from connectrpc.codec import Codec +from connectrpc.compression import Compression from connectrpc.errors import ConnectError from connectrpc.interceptor import Interceptor, InterceptorSync from connectrpc.method import IdempotencyLevel, MethodInfo @@ -33,7 +35,7 @@ async def delete(self, request: fits_dot_api_dot_v1_dot_tenant__pb2.TenantServic class TenantServiceASGIApplication(ConnectASGIApplication[TenantService]): - def __init__(self, service: TenantService | AsyncGenerator[TenantService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + def __init__(self, service: TenantService | AsyncGenerator[TenantService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( service=service, endpoints=lambda svc: { @@ -90,6 +92,8 @@ def __init__(self, service: TenantService | AsyncGenerator[TenantService], *, in }, interceptors=interceptors, read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, ) @property @@ -200,6 +204,9 @@ async def delete( ) + + + class TenantServiceSync(Protocol): def create(self, request: fits_dot_api_dot_v1_dot_tenant__pb2.TenantServiceCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_v1_dot_tenant__pb2.TenantServiceCreateResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") @@ -214,7 +221,7 @@ def delete(self, request: fits_dot_api_dot_v1_dot_tenant__pb2.TenantServiceDelet class TenantServiceWSGIApplication(ConnectWSGIApplication): - def __init__(self, service: TenantServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + def __init__(self, service: TenantServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( endpoints={ "/fits.api.v1.TenantService/Create": EndpointSync.unary( @@ -270,6 +277,8 @@ def __init__(self, service: TenantServiceSync, interceptors: Iterable[Intercepto }, interceptors=interceptors, read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, ) @property @@ -378,3 +387,5 @@ def delete( headers=headers, timeout_ms=timeout_ms, ) + + diff --git a/python/fits/api/v1/tenant_pb2.py b/python/fits/api/v1/tenant_pb2.py index 7905c76..a501288 100644 --- a/python/fits/api/v1/tenant_pb2.py +++ b/python/fits/api/v1/tenant_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: fits/api/v1/tenant.proto -# Protobuf Python Version: 7.34.1 +# Protobuf Python Version: 7.36.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -12,7 +12,7 @@ _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, 7, - 34, + 36, 1, '', 'fits/api/v1/tenant.proto' @@ -25,10 +25,9 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66its/api/v1/tenant.proto\x12\x0b\x66its.api.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xe9\x01\n\x06Tenant\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\x14\n\x05\x65mail\x18\x04 \x01(\tR\x05\x65mail\x12-\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\x1d\n\navatar_url\x18\x06 \x01(\tR\tavatarUrl\x12\x1d\n\ncreated_by\x18\x07 \x01(\tR\tcreatedBy\"\xa2\x01\n\x18TenantServiceListRequest\x12\x13\n\x02id\x18\x01 \x01(\tH\x00R\x02id\x88\x01\x01\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12\x30\n\x06labels\x18\x03 \x01(\x0b\x32\x13.fits.api.v1.LabelsH\x02R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\t\n\x07_labels\"/\n\x17TenantServiceGetRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\"\x8f\x02\n\x1aTenantServiceCreateRequest\x12\x1f\n\x04name\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\x32\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\x05\x65mail\x18\x03 \x01(\tB\x07\xbaH\x04r\x02`\x01H\x01R\x05\x65mail\x88\x01\x01\x12\"\n\navatar_url\x18\x04 \x01(\tH\x02R\tavatarUrl\x88\x01\x01\x12+\n\x06labels\x18\x05 \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labelsB\x0e\n\x0c_descriptionB\x08\n\x06_emailB\r\n\x0b_avatar_url\"\x8b\x03\n\x1aTenantServiceUpdateRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12$\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\"\n\x05\x65mail\x18\x04 \x01(\tB\x07\xbaH\x04r\x02`\x01H\x01R\x05\x65mail\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x02R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\navatar_url\x18\x06 \x01(\tH\x03R\tavatarUrl\x88\x01\x01\x12\x36\n\x06labels\x18\x07 \x01(\x0b\x32\x19.fits.api.v1.UpdateLabelsH\x04R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x08\n\x06_emailB\x0e\n\x0c_descriptionB\r\n\x0b_avatar_urlB\t\n\x07_labels\"2\n\x1aTenantServiceDeleteRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\"G\n\x18TenantServiceGetResponse\x12+\n\x06tenant\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.TenantR\x06tenant\"J\n\x19TenantServiceListResponse\x12-\n\x07tenants\x18\x01 \x03(\x0b\x32\x13.fits.api.v1.TenantR\x07tenants\"J\n\x1bTenantServiceCreateResponse\x12+\n\x06tenant\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.TenantR\x06tenant\"J\n\x1bTenantServiceUpdateResponse\x12+\n\x06tenant\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.TenantR\x06tenant\"J\n\x1bTenantServiceDeleteResponse\x12+\n\x06tenant\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.TenantR\x06tenant2\x8b\x04\n\rTenantService\x12\x65\n\x06\x43reate\x12\'.fits.api.v1.TenantServiceCreateRequest\x1a(.fits.api.v1.TenantServiceCreateResponse\"\x08\xd8\xf3\x18\x02\xe0\xf3\x18\x01\x12_\n\x04List\x12%.fits.api.v1.TenantServiceListRequest\x1a&.fits.api.v1.TenantServiceListResponse\"\x08\xd8\xf3\x18\x02\xe0\xf3\x18\x02\x12`\n\x03Get\x12$.fits.api.v1.TenantServiceGetRequest\x1a%.fits.api.v1.TenantServiceGetResponse\"\x0c\xc2\xf3\x18\x04\x01\x02\x03\x04\xe0\xf3\x18\x02\x12g\n\x06Update\x12\'.fits.api.v1.TenantServiceUpdateRequest\x1a(.fits.api.v1.TenantServiceUpdateResponse\"\n\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12g\n\x06\x44\x65lete\x12\'.fits.api.v1.TenantServiceDeleteRequest\x1a(.fits.api.v1.TenantServiceDeleteResponse\"\n\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\x97\x01\n\x0f\x63om.fits.api.v1B\x0bTenantProtoP\x01Z)github.com/fi-ts/api/go/fits/api/v1;apiv1\xa2\x02\x03\x46\x41X\xaa\x02\x0b\x46its.Api.V1\xca\x02\x0b\x46its\\Api\\V1\xe2\x02\x17\x46its\\Api\\V1\\GPBMetadata\xea\x02\rFits::Api::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66its/api/v1/tenant.proto\x12\x0b\x66its.api.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xe9\x01\n\x06Tenant\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\x14\n\x05\x65mail\x18\x04 \x01(\tR\x05\x65mail\x12-\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\x1d\n\navatar_url\x18\x06 \x01(\tR\tavatarUrl\x12\x1d\n\ncreated_by\x18\x07 \x01(\tR\tcreatedBy\"\xa2\x01\n\x18TenantServiceListRequest\x12\x13\n\x02id\x18\x01 \x01(\tH\x00R\x02id\x88\x01\x01\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12\x30\n\x06labels\x18\x03 \x01(\x0b\x32\x13.fits.api.v1.LabelsH\x02R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\t\n\x07_labels\"/\n\x17TenantServiceGetRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\"\x8f\x02\n\x1aTenantServiceCreateRequest\x12\x1f\n\x04name\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\x32\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\x05\x65mail\x18\x03 \x01(\tB\x07\xbaH\x04r\x02`\x01H\x01R\x05\x65mail\x88\x01\x01\x12\"\n\navatar_url\x18\x04 \x01(\tH\x02R\tavatarUrl\x88\x01\x01\x12+\n\x06labels\x18\x05 \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labelsB\x0e\n\x0c_descriptionB\x08\n\x06_emailB\r\n\x0b_avatar_url\"\x8b\x03\n\x1aTenantServiceUpdateRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12$\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\"\n\x05\x65mail\x18\x04 \x01(\tB\x07\xbaH\x04r\x02`\x01H\x01R\x05\x65mail\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x02R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\navatar_url\x18\x06 \x01(\tH\x03R\tavatarUrl\x88\x01\x01\x12\x36\n\x06labels\x18\x07 \x01(\x0b\x32\x19.fits.api.v1.UpdateLabelsH\x04R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x08\n\x06_emailB\x0e\n\x0c_descriptionB\r\n\x0b_avatar_urlB\t\n\x07_labels\"2\n\x1aTenantServiceDeleteRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\"G\n\x18TenantServiceGetResponse\x12+\n\x06tenant\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.TenantR\x06tenant\"J\n\x19TenantServiceListResponse\x12-\n\x07tenants\x18\x01 \x03(\x0b\x32\x13.fits.api.v1.TenantR\x07tenants\"J\n\x1bTenantServiceCreateResponse\x12+\n\x06tenant\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.TenantR\x06tenant\"J\n\x1bTenantServiceUpdateResponse\x12+\n\x06tenant\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.TenantR\x06tenant\"J\n\x1bTenantServiceDeleteResponse\x12+\n\x06tenant\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.TenantR\x06tenant2\x8b\x04\n\rTenantService\x12\x65\n\x06\x43reate\x12\'.fits.api.v1.TenantServiceCreateRequest\x1a(.fits.api.v1.TenantServiceCreateResponse\"\x08\xd8\xf3\x18\x02\xe0\xf3\x18\x01\x12_\n\x04List\x12%.fits.api.v1.TenantServiceListRequest\x1a&.fits.api.v1.TenantServiceListResponse\"\x08\xd8\xf3\x18\x02\xe0\xf3\x18\x02\x12`\n\x03Get\x12$.fits.api.v1.TenantServiceGetRequest\x1a%.fits.api.v1.TenantServiceGetResponse\"\x0c\xc2\xf3\x18\x04\x01\x02\x03\x04\xe0\xf3\x18\x02\x12g\n\x06Update\x12\'.fits.api.v1.TenantServiceUpdateRequest\x1a(.fits.api.v1.TenantServiceUpdateResponse\"\n\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12g\n\x06\x44\x65lete\x12\'.fits.api.v1.TenantServiceDeleteRequest\x1a(.fits.api.v1.TenantServiceDeleteResponse\"\n\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\x97\x01\n\x0f\x63om.fits.api.v1B\x0bTenantProtoP\x01Z)github.com/fi-ts/api/go/fits/api/v1;apiv1\xa2\x02\x03\x46\x41X\xaa\x02\x0b\x46its.Api.V1\xca\x02\x0b\x46its\\Api\\V1\xe2\x02\x17\x46its\\Api\\V1\\GPBMetadata\xea\x02\rFits::Api::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -66,28 +65,28 @@ _globals['_TENANTSERVICE'].methods_by_name['Update']._serialized_options = b'\302\363\030\002\001\002\340\363\030\001' _globals['_TENANTSERVICE'].methods_by_name['Delete']._loaded_options = None _globals['_TENANTSERVICE'].methods_by_name['Delete']._serialized_options = b'\302\363\030\002\001\002\340\363\030\001' - _globals['_TENANT']._serialized_start=166 - _globals['_TENANT']._serialized_end=399 - _globals['_TENANTSERVICELISTREQUEST']._serialized_start=402 - _globals['_TENANTSERVICELISTREQUEST']._serialized_end=564 - _globals['_TENANTSERVICEGETREQUEST']._serialized_start=566 - _globals['_TENANTSERVICEGETREQUEST']._serialized_end=613 - _globals['_TENANTSERVICECREATEREQUEST']._serialized_start=616 - _globals['_TENANTSERVICECREATEREQUEST']._serialized_end=887 - _globals['_TENANTSERVICEUPDATEREQUEST']._serialized_start=890 - _globals['_TENANTSERVICEUPDATEREQUEST']._serialized_end=1285 - _globals['_TENANTSERVICEDELETEREQUEST']._serialized_start=1287 - _globals['_TENANTSERVICEDELETEREQUEST']._serialized_end=1337 - _globals['_TENANTSERVICEGETRESPONSE']._serialized_start=1339 - _globals['_TENANTSERVICEGETRESPONSE']._serialized_end=1410 - _globals['_TENANTSERVICELISTRESPONSE']._serialized_start=1412 - _globals['_TENANTSERVICELISTRESPONSE']._serialized_end=1486 - _globals['_TENANTSERVICECREATERESPONSE']._serialized_start=1488 - _globals['_TENANTSERVICECREATERESPONSE']._serialized_end=1562 - _globals['_TENANTSERVICEUPDATERESPONSE']._serialized_start=1564 - _globals['_TENANTSERVICEUPDATERESPONSE']._serialized_end=1638 - _globals['_TENANTSERVICEDELETERESPONSE']._serialized_start=1640 - _globals['_TENANTSERVICEDELETERESPONSE']._serialized_end=1714 - _globals['_TENANTSERVICE']._serialized_start=1717 - _globals['_TENANTSERVICE']._serialized_end=2240 + _globals['_TENANT']._serialized_start=133 + _globals['_TENANT']._serialized_end=366 + _globals['_TENANTSERVICELISTREQUEST']._serialized_start=369 + _globals['_TENANTSERVICELISTREQUEST']._serialized_end=531 + _globals['_TENANTSERVICEGETREQUEST']._serialized_start=533 + _globals['_TENANTSERVICEGETREQUEST']._serialized_end=580 + _globals['_TENANTSERVICECREATEREQUEST']._serialized_start=583 + _globals['_TENANTSERVICECREATEREQUEST']._serialized_end=854 + _globals['_TENANTSERVICEUPDATEREQUEST']._serialized_start=857 + _globals['_TENANTSERVICEUPDATEREQUEST']._serialized_end=1252 + _globals['_TENANTSERVICEDELETEREQUEST']._serialized_start=1254 + _globals['_TENANTSERVICEDELETEREQUEST']._serialized_end=1304 + _globals['_TENANTSERVICEGETRESPONSE']._serialized_start=1306 + _globals['_TENANTSERVICEGETRESPONSE']._serialized_end=1377 + _globals['_TENANTSERVICELISTRESPONSE']._serialized_start=1379 + _globals['_TENANTSERVICELISTRESPONSE']._serialized_end=1453 + _globals['_TENANTSERVICECREATERESPONSE']._serialized_start=1455 + _globals['_TENANTSERVICECREATERESPONSE']._serialized_end=1529 + _globals['_TENANTSERVICEUPDATERESPONSE']._serialized_start=1531 + _globals['_TENANTSERVICEUPDATERESPONSE']._serialized_end=1605 + _globals['_TENANTSERVICEDELETERESPONSE']._serialized_start=1607 + _globals['_TENANTSERVICEDELETERESPONSE']._serialized_end=1681 + _globals['_TENANTSERVICE']._serialized_start=1684 + _globals['_TENANTSERVICE']._serialized_end=2207 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/v1/tenant_pb2.pyi b/python/fits/api/v1/tenant_pb2.pyi index fd7ba94..8345ce9 100644 --- a/python/fits/api/v1/tenant_pb2.pyi +++ b/python/fits/api/v1/tenant_pb2.pyi @@ -1,7 +1,6 @@ from buf.validate import validate_pb2 as _validate_pb2 from fits.api.v1 import common_pb2 as _common_pb2 from fits.api.v1 import predefined_rules_pb2 as _predefined_rules_pb2 -from google.protobuf import timestamp_pb2 as _timestamp_pb2 from google.protobuf.internal import containers as _containers from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message diff --git a/python/fits/api/v1/token_connect.py b/python/fits/api/v1/token_connect.py index feac28b..f52ad82 100644 --- a/python/fits/api/v1/token_connect.py +++ b/python/fits/api/v1/token_connect.py @@ -7,6 +7,8 @@ from connectrpc.client import ConnectClient, ConnectClientSync from connectrpc.code import Code +from connectrpc.codec import Codec +from connectrpc.compression import Compression from connectrpc.errors import ConnectError from connectrpc.interceptor import Interceptor, InterceptorSync from connectrpc.method import IdempotencyLevel, MethodInfo @@ -36,7 +38,7 @@ async def refresh(self, request: fits_dot_api_dot_v1_dot_token__pb2.TokenService class TokenServiceASGIApplication(ConnectASGIApplication[TokenService]): - def __init__(self, service: TokenService | AsyncGenerator[TokenService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + def __init__(self, service: TokenService | AsyncGenerator[TokenService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( service=service, endpoints=lambda svc: { @@ -103,6 +105,8 @@ def __init__(self, service: TokenService | AsyncGenerator[TokenService], *, inte }, interceptors=interceptors, read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, ) @property @@ -233,6 +237,9 @@ async def refresh( ) + + + class TokenServiceSync(Protocol): def get(self, request: fits_dot_api_dot_v1_dot_token__pb2.TokenServiceGetRequest, ctx: RequestContext) -> fits_dot_api_dot_v1_dot_token__pb2.TokenServiceGetResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") @@ -249,7 +256,7 @@ def refresh(self, request: fits_dot_api_dot_v1_dot_token__pb2.TokenServiceRefres class TokenServiceWSGIApplication(ConnectWSGIApplication): - def __init__(self, service: TokenServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + def __init__(self, service: TokenServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( endpoints={ "/fits.api.v1.TokenService/Get": EndpointSync.unary( @@ -315,6 +322,8 @@ def __init__(self, service: TokenServiceSync, interceptors: Iterable[Interceptor }, interceptors=interceptors, read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, ) @property @@ -443,3 +452,5 @@ def refresh( headers=headers, timeout_ms=timeout_ms, ) + + diff --git a/python/fits/api/v1/token_pb2.py b/python/fits/api/v1/token_pb2.py index 46482f5..d404835 100644 --- a/python/fits/api/v1/token_pb2.py +++ b/python/fits/api/v1/token_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: fits/api/v1/token.proto -# Protobuf Python Version: 7.34.1 +# Protobuf Python Version: 7.36.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -12,7 +12,7 @@ _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, 7, - 34, + 36, 1, '', 'fits/api/v1/token.proto' diff --git a/python/fits/api/v1/version_connect.py b/python/fits/api/v1/version_connect.py index 2390894..ff0a0e8 100644 --- a/python/fits/api/v1/version_connect.py +++ b/python/fits/api/v1/version_connect.py @@ -7,6 +7,8 @@ from connectrpc.client import ConnectClient, ConnectClientSync from connectrpc.code import Code +from connectrpc.codec import Codec +from connectrpc.compression import Compression from connectrpc.errors import ConnectError from connectrpc.interceptor import Interceptor, InterceptorSync from connectrpc.method import IdempotencyLevel, MethodInfo @@ -21,7 +23,7 @@ async def get(self, request: fits_dot_api_dot_v1_dot_version__pb2.VersionService class VersionServiceASGIApplication(ConnectASGIApplication[VersionService]): - def __init__(self, service: VersionService | AsyncGenerator[VersionService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + def __init__(self, service: VersionService | AsyncGenerator[VersionService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( service=service, endpoints=lambda svc: { @@ -38,6 +40,8 @@ def __init__(self, service: VersionService | AsyncGenerator[VersionService], *, }, interceptors=interceptors, read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, ) @property @@ -68,13 +72,16 @@ async def get( ) + + + class VersionServiceSync(Protocol): def get(self, request: fits_dot_api_dot_v1_dot_version__pb2.VersionServiceGetRequest, ctx: RequestContext) -> fits_dot_api_dot_v1_dot_version__pb2.VersionServiceGetResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") class VersionServiceWSGIApplication(ConnectWSGIApplication): - def __init__(self, service: VersionServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + def __init__(self, service: VersionServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( endpoints={ "/fits.api.v1.VersionService/Get": EndpointSync.unary( @@ -90,6 +97,8 @@ def __init__(self, service: VersionServiceSync, interceptors: Iterable[Intercept }, interceptors=interceptors, read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, ) @property @@ -118,3 +127,5 @@ def get( headers=headers, timeout_ms=timeout_ms, ) + + diff --git a/python/fits/api/v1/version_pb2.py b/python/fits/api/v1/version_pb2.py index 44012b3..7192c2e 100644 --- a/python/fits/api/v1/version_pb2.py +++ b/python/fits/api/v1/version_pb2.py @@ -2,7 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: fits/api/v1/version.proto -# Protobuf Python Version: 7.34.1 +# Protobuf Python Version: 7.36.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -12,7 +12,7 @@ _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, 7, - 34, + 36, 1, '', 'fits/api/v1/version.proto' diff --git a/python/fits/api/vm/__init__.py b/python/fits/api/vm/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python/fits/api/vm/v1/__init__.py b/python/fits/api/vm/v1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python/fits/api/vm/v1/os_pb2.py b/python/fits/api/vm/v1/os_pb2.py new file mode 100644 index 0000000..978043f --- /dev/null +++ b/python/fits/api/vm/v1/os_pb2.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: fits/api/vm/v1/os.proto +# Protobuf Python Version: 7.36.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 7, + 36, + 1, + '', + 'fits/api/vm/v1/os.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/os.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\"\"\n\x02Os\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuidB\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07OsProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.vm.v1.os_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\007OsProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' + _globals['_OS'].fields_by_name['uuid']._loaded_options = None + _globals['_OS'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_OS']._serialized_start=72 + _globals['_OS']._serialized_end=106 +# @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/os_pb2.pyi b/python/fits/api/vm/v1/os_pb2.pyi new file mode 100644 index 0000000..8864b8e --- /dev/null +++ b/python/fits/api/vm/v1/os_pb2.pyi @@ -0,0 +1,12 @@ +from buf.validate import validate_pb2 as _validate_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Optional as _Optional + +DESCRIPTOR: _descriptor.FileDescriptor + +class Os(_message.Message): + __slots__ = ("uuid",) + UUID_FIELD_NUMBER: _ClassVar[int] + uuid: str + def __init__(self, uuid: _Optional[str] = ...) -> None: ... diff --git a/python/fits/api/vm/v1/vm_connect.py b/python/fits/api/vm/v1/vm_connect.py new file mode 100644 index 0000000..ceeb0f3 --- /dev/null +++ b/python/fits/api/vm/v1/vm_connect.py @@ -0,0 +1,391 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: fits/api/vm/v1/vm.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.codec import Codec +from connectrpc.compression import Compression +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import fits.api.vm.v1.vm_pb2 as fits_dot_api_dot_vm_dot_v1_dot_vm__pb2 + + +class VMService(Protocol): + async def get(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def create(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class VMServiceASGIApplication(ConnectASGIApplication[VMService]): + def __init__(self, service: VMService | AsyncGenerator[VMService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/fits.api.vm.v1.VMService/Get": Endpoint.unary( + method=MethodInfo( + name="Get", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get, + ), + "/fits.api.vm.v1.VMService/Create": Endpoint.unary( + method=MethodInfo( + name="Create", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create, + ), + "/fits.api.vm.v1.VMService/Update": Endpoint.unary( + method=MethodInfo( + name="Update", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update, + ), + "/fits.api.vm.v1.VMService/List": Endpoint.unary( + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.list, + ), + "/fits.api.vm.v1.VMService/Delete": Endpoint.unary( + method=MethodInfo( + name="Delete", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/fits.api.vm.v1.VMService" + + +class VMServiceClient(ConnectClient): + async def get( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="Get", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def create( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="Create", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="Update", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def list( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="Delete", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + + + + +class VMServiceSync(Protocol): + def get(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def create(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class VMServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: VMServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + endpoints={ + "/fits.api.vm.v1.VMService/Get": EndpointSync.unary( + method=MethodInfo( + name="Get", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get, + ), + "/fits.api.vm.v1.VMService/Create": EndpointSync.unary( + method=MethodInfo( + name="Create", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create, + ), + "/fits.api.vm.v1.VMService/Update": EndpointSync.unary( + method=MethodInfo( + name="Update", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update, + ), + "/fits.api.vm.v1.VMService/List": EndpointSync.unary( + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.list, + ), + "/fits.api.vm.v1.VMService/Delete": EndpointSync.unary( + method=MethodInfo( + name="Delete", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/fits.api.vm.v1.VMService" + + +class VMServiceClientSync(ConnectClientSync): + def get( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="Get", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def create( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="Create", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="Update", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def list( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="Delete", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + diff --git a/python/fits/api/vm/v1/vm_pb2.py b/python/fits/api/vm/v1/vm_pb2.py new file mode 100644 index 0000000..15b6bca --- /dev/null +++ b/python/fits/api/vm/v1/vm_pb2.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: fits/api/vm/v1/vm.proto +# Protobuf Python Version: 7.36.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 7, + 36, + 1, + '', + 'fits/api/vm/v1/vm.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 +from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/vm.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x96\x01\n\nVMInstance\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\"\n\x07project\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"W\n\x13VMServiceGetRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"B\n\x14VMServiceGetResponse\x12*\n\x02vm\x18\x01 \x01(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"\xe1\x02\n\x16VMServiceCreateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x10\n\x03\x63pu\x18\x03 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x04 \x01(\rR\x03ram\x12!\n\x07os_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12*\n\x05\x64isks\x18\t \x03(\x0b\x32\x14.fits.api.vm.v1.DiskR\x05\x64isksB\x07\n\x05_name\"\xde\x01\n\x04\x44isk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12&\n\x0c\x64rive_letter\x18\x03 \x01(\tH\x01R\x0b\x64riveLetter\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05label\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x02R\nmountPoint\x88\x01\x01\x42\r\n\x0b_size_in_gbB\x0f\n\r_drive_letterB\x0e\n\x0c_mount_point\"\x19\n\x17VMServiceCreateResponse\"~\n\x16VMServiceUpdateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\"\x19\n\x17VMServiceUpdateResponse\":\n\x14VMServiceListRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x17\n\x15VMServiceListResponse\"<\n\x16VMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x19\n\x17VMServiceDeleteResponse2\x81\x04\n\tVMService\x12]\n\x03Get\x12#.fits.api.vm.v1.VMServiceGetRequest\x1a$.fits.api.vm.v1.VMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x43reate\x12&.fits.api.vm.v1.VMServiceCreateRequest\x1a\'.fits.api.vm.v1.VMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x65\n\x06Update\x12&.fits.api.vm.v1.VMServiceUpdateRequest\x1a\'.fits.api.vm.v1.VMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12`\n\x04List\x12$.fits.api.vm.v1.VMServiceListRequest\x1a%.fits.api.vm.v1.VMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x44\x65lete\x12&.fits.api.vm.v1.VMServiceDeleteRequest\x1a\'.fits.api.vm.v1.VMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07VmProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.vm.v1.vm_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\007VmProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' + _globals['_VMINSTANCE'].fields_by_name['uuid']._loaded_options = None + _globals['_VMINSTANCE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMINSTANCE'].fields_by_name['name']._loaded_options = None + _globals['_VMINSTANCE'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_VMINSTANCE'].fields_by_name['project']._loaded_options = None + _globals['_VMINSTANCE'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEGETREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_VMSERVICEGETREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEGETREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_VMSERVICEGETREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['name']._loaded_options = None + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['os_uuid']._loaded_options = None + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['os_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['vlan_uuid']._loaded_options = None + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['vlan_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['location_uuid']._loaded_options = None + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['location_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['contact_uuid']._loaded_options = None + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._loaded_options = None + _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._serialized_options = b'\272H\003\310\001\001' + _globals['_VMSERVICELISTREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_VMSERVICELISTREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEDELETEREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_VMSERVICEDELETEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICE'].methods_by_name['Get']._loaded_options = None + _globals['_VMSERVICE'].methods_by_name['Get']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' + _globals['_VMSERVICE'].methods_by_name['Create']._loaded_options = None + _globals['_VMSERVICE'].methods_by_name['Create']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_VMSERVICE'].methods_by_name['Update']._loaded_options = None + _globals['_VMSERVICE'].methods_by_name['Update']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_VMSERVICE'].methods_by_name['List']._loaded_options = None + _globals['_VMSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' + _globals['_VMSERVICE'].methods_by_name['Delete']._loaded_options = None + _globals['_VMSERVICE'].methods_by_name['Delete']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_VMINSTANCE']._serialized_start=135 + _globals['_VMINSTANCE']._serialized_end=285 + _globals['_VMSERVICEGETREQUEST']._serialized_start=287 + _globals['_VMSERVICEGETREQUEST']._serialized_end=374 + _globals['_VMSERVICEGETRESPONSE']._serialized_start=376 + _globals['_VMSERVICEGETRESPONSE']._serialized_end=442 + _globals['_VMSERVICECREATEREQUEST']._serialized_start=445 + _globals['_VMSERVICECREATEREQUEST']._serialized_end=798 + _globals['_DISK']._serialized_start=801 + _globals['_DISK']._serialized_end=1023 + _globals['_VMSERVICECREATERESPONSE']._serialized_start=1025 + _globals['_VMSERVICECREATERESPONSE']._serialized_end=1050 + _globals['_VMSERVICEUPDATEREQUEST']._serialized_start=1052 + _globals['_VMSERVICEUPDATEREQUEST']._serialized_end=1178 + _globals['_VMSERVICEUPDATERESPONSE']._serialized_start=1180 + _globals['_VMSERVICEUPDATERESPONSE']._serialized_end=1205 + _globals['_VMSERVICELISTREQUEST']._serialized_start=1207 + _globals['_VMSERVICELISTREQUEST']._serialized_end=1265 + _globals['_VMSERVICELISTRESPONSE']._serialized_start=1267 + _globals['_VMSERVICELISTRESPONSE']._serialized_end=1290 + _globals['_VMSERVICEDELETEREQUEST']._serialized_start=1292 + _globals['_VMSERVICEDELETEREQUEST']._serialized_end=1352 + _globals['_VMSERVICEDELETERESPONSE']._serialized_start=1354 + _globals['_VMSERVICEDELETERESPONSE']._serialized_end=1379 + _globals['_VMSERVICE']._serialized_start=1382 + _globals['_VMSERVICE']._serialized_end=1895 +# @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/vm_pb2.pyi b/python/fits/api/vm/v1/vm_pb2.pyi new file mode 100644 index 0000000..50a988e --- /dev/null +++ b/python/fits/api/vm/v1/vm_pb2.pyi @@ -0,0 +1,108 @@ +from buf.validate import validate_pb2 as _validate_pb2 +from fits.api.v1 import common_pb2 as _common_pb2 +from fits.api.v1 import predefined_rules_pb2 as _predefined_rules_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class VMInstance(_message.Message): + __slots__ = ("uuid", "meta", "name", "project") + UUID_FIELD_NUMBER: _ClassVar[int] + META_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + PROJECT_FIELD_NUMBER: _ClassVar[int] + uuid: str + meta: _common_pb2.Meta + name: str + project: str + def __init__(self, uuid: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., name: _Optional[str] = ..., project: _Optional[str] = ...) -> None: ... + +class VMServiceGetRequest(_message.Message): + __slots__ = ("uuid", "project") + UUID_FIELD_NUMBER: _ClassVar[int] + PROJECT_FIELD_NUMBER: _ClassVar[int] + uuid: str + project: str + def __init__(self, uuid: _Optional[str] = ..., project: _Optional[str] = ...) -> None: ... + +class VMServiceGetResponse(_message.Message): + __slots__ = ("vm",) + VM_FIELD_NUMBER: _ClassVar[int] + vm: VMInstance + def __init__(self, vm: _Optional[_Union[VMInstance, _Mapping]] = ...) -> None: ... + +class VMServiceCreateRequest(_message.Message): + __slots__ = ("project", "name", "cpu", "ram", "os_uuid", "vlan_uuid", "location_uuid", "contact_uuid", "disks") + PROJECT_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + CPU_FIELD_NUMBER: _ClassVar[int] + RAM_FIELD_NUMBER: _ClassVar[int] + OS_UUID_FIELD_NUMBER: _ClassVar[int] + VLAN_UUID_FIELD_NUMBER: _ClassVar[int] + LOCATION_UUID_FIELD_NUMBER: _ClassVar[int] + CONTACT_UUID_FIELD_NUMBER: _ClassVar[int] + DISKS_FIELD_NUMBER: _ClassVar[int] + project: str + name: str + cpu: int + ram: int + os_uuid: str + vlan_uuid: str + location_uuid: str + contact_uuid: str + disks: _containers.RepeatedCompositeFieldContainer[Disk] + def __init__(self, project: _Optional[str] = ..., name: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., os_uuid: _Optional[str] = ..., vlan_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., disks: _Optional[_Iterable[_Union[Disk, _Mapping]]] = ...) -> None: ... + +class Disk(_message.Message): + __slots__ = ("auto_extend", "size_in_gb", "drive_letter", "label", "mount_point") + AUTO_EXTEND_FIELD_NUMBER: _ClassVar[int] + SIZE_IN_GB_FIELD_NUMBER: _ClassVar[int] + DRIVE_LETTER_FIELD_NUMBER: _ClassVar[int] + LABEL_FIELD_NUMBER: _ClassVar[int] + MOUNT_POINT_FIELD_NUMBER: _ClassVar[int] + auto_extend: bool + size_in_gb: int + drive_letter: str + label: str + mount_point: str + def __init__(self, auto_extend: _Optional[bool] = ..., size_in_gb: _Optional[int] = ..., drive_letter: _Optional[str] = ..., label: _Optional[str] = ..., mount_point: _Optional[str] = ...) -> None: ... + +class VMServiceCreateResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class VMServiceUpdateRequest(_message.Message): + __slots__ = ("project", "update_meta") + PROJECT_FIELD_NUMBER: _ClassVar[int] + UPDATE_META_FIELD_NUMBER: _ClassVar[int] + project: str + update_meta: _common_pb2.UpdateMeta + def __init__(self, project: _Optional[str] = ..., update_meta: _Optional[_Union[_common_pb2.UpdateMeta, _Mapping]] = ...) -> None: ... + +class VMServiceUpdateResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class VMServiceListRequest(_message.Message): + __slots__ = ("project",) + PROJECT_FIELD_NUMBER: _ClassVar[int] + project: str + def __init__(self, project: _Optional[str] = ...) -> None: ... + +class VMServiceListResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class VMServiceDeleteRequest(_message.Message): + __slots__ = ("project",) + PROJECT_FIELD_NUMBER: _ClassVar[int] + project: str + def __init__(self, project: _Optional[str] = ...) -> None: ... + +class VMServiceDeleteResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... From 15404417f080ef1aba9f04dd1b5520d7ac32d595 Mon Sep 17 00:00:00 2001 From: Stefan Majer Date: Fri, 4 Sep 2026 14:43:52 +0200 Subject: [PATCH 03/21] Fix client generation --- generate/generate.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/generate/generate.go b/generate/generate.go index b5db5b8..091920a 100644 --- a/generate/generate.go +++ b/generate/generate.go @@ -72,15 +72,15 @@ func main() { panic(err) } - // err = writeTemplate("../go/tests/mock_clients.go", mockClientTpl, svcs) - // if err != nil { - // panic(err) - // } - - // err = writePythonTemplate("../python/fits/client/client.py", pythonClientTpl, svcs) - // if err != nil { - // panic(err) - // } + err = writeTemplate("../go/tests/mock_clients.go", mockClientTpl, svcs) + if err != nil { + panic(err) + } + + err = writePythonTemplate("../python/fits/client/client.py", pythonClientTpl, svcs) + if err != nil { + panic(err) + } } func servicePermissions(root string) (*permissions.ServicePermissions, error) { From 6de42b1bb873fabeba94cd710e1984a51f32fb00 Mon Sep 17 00:00:00 2001 From: Stefan Majer Date: Fri, 4 Sep 2026 14:45:10 +0200 Subject: [PATCH 04/21] Forgot --- python/fits/client/client.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/python/fits/client/client.py b/python/fits/client/client.py index ad466e6..6948762 100755 --- a/python/fits/client/client.py +++ b/python/fits/client/client.py @@ -10,6 +10,8 @@ import fits.api.v1.token_connect as api_token_connect import fits.api.v1.version_connect as api_version_connect +import fits.apivm.v1.vm_connect as apivm_vm_connect + class Client: @@ -27,6 +29,9 @@ def __init__(self, baseurl: str, timeout: float = 10): def apiv1(self): return self._Apiv1(baseurl=self._baseurl, client=self._client) + def apivmv1(self): + return self._Apivmv1(baseurl=self._baseurl, client=self._client) + class _Apiv1: @@ -57,3 +62,13 @@ def version(self): return api_version_connect.VersionServiceClientSync(address=self._baseurl, http_client=self._client) + class _Apivmv1: + def __init__(self, baseurl: str, client: pyqwest.SyncClient = None): + self._baseurl = baseurl + self._client = client + + + def vm(self): + return apivm_vm_connect.VMServiceClientSync(address=self._baseurl, http_client=self._client) + + From 11a3cbbdecc37edbae521aea173bd38cd0069c4c Mon Sep 17 00:00:00 2001 From: Stefan Majer Date: Mon, 7 Sep 2026 11:15:30 +0200 Subject: [PATCH 05/21] No more mocks --- go/tests/mocks/client/Apivmv1.go | 83 ---- go/tests/mocks/client/Client.go | 129 ------ .../api/vm/v1/vmv1connect/VMServiceClient.go | 379 ------------------ .../api/vm/v1/vmv1connect/VMServiceHandler.go | 379 ------------------ 4 files changed, 970 deletions(-) delete mode 100644 go/tests/mocks/client/Apivmv1.go delete mode 100644 go/tests/mocks/client/Client.go delete mode 100644 go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceClient.go delete mode 100644 go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceHandler.go diff --git a/go/tests/mocks/client/Apivmv1.go b/go/tests/mocks/client/Apivmv1.go deleted file mode 100644 index 211089e..0000000 --- a/go/tests/mocks/client/Apivmv1.go +++ /dev/null @@ -1,83 +0,0 @@ -// Code generated by mockery; DO NOT EDIT. -// github.com/vektra/mockery -// template: testify - -package client - -import ( - "github.com/fi-ts/api/go/fits/api/vm/v1/vmv1connect" - mock "github.com/stretchr/testify/mock" -) - -// NewApivmv1 creates a new instance of Apivmv1. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -// The first argument is typically a *testing.T value. -func NewApivmv1(t interface { - mock.TestingT - Cleanup(func()) -}) *Apivmv1 { - mock := &Apivmv1{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} - -// Apivmv1 is an autogenerated mock type for the Apivmv1 type -type Apivmv1 struct { - mock.Mock -} - -type Apivmv1_Expecter struct { - mock *mock.Mock -} - -func (_m *Apivmv1) EXPECT() *Apivmv1_Expecter { - return &Apivmv1_Expecter{mock: &_m.Mock} -} - -// VM provides a mock function for the type Apivmv1 -func (_mock *Apivmv1) VM() vmv1connect.VMServiceClient { - ret := _mock.Called() - - if len(ret) == 0 { - panic("no return value specified for VM") - } - - var r0 vmv1connect.VMServiceClient - if returnFunc, ok := ret.Get(0).(func() vmv1connect.VMServiceClient); ok { - r0 = returnFunc() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(vmv1connect.VMServiceClient) - } - } - return r0 -} - -// Apivmv1_VM_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'VM' -type Apivmv1_VM_Call struct { - *mock.Call -} - -// VM is a helper method to define mock.On call -func (_e *Apivmv1_Expecter) VM() *Apivmv1_VM_Call { - return &Apivmv1_VM_Call{Call: _e.mock.On("VM")} -} - -func (_c *Apivmv1_VM_Call) Run(run func()) *Apivmv1_VM_Call { - _c.Call.Run(func(args mock.Arguments) { - run() - }) - return _c -} - -func (_c *Apivmv1_VM_Call) Return(vMServiceClient vmv1connect.VMServiceClient) *Apivmv1_VM_Call { - _c.Call.Return(vMServiceClient) - return _c -} - -func (_c *Apivmv1_VM_Call) RunAndReturn(run func() vmv1connect.VMServiceClient) *Apivmv1_VM_Call { - _c.Call.Return(run) - return _c -} diff --git a/go/tests/mocks/client/Client.go b/go/tests/mocks/client/Client.go deleted file mode 100644 index e9ba60e..0000000 --- a/go/tests/mocks/client/Client.go +++ /dev/null @@ -1,129 +0,0 @@ -// Code generated by mockery; DO NOT EDIT. -// github.com/vektra/mockery -// template: testify - -package client - -import ( - "github.com/fi-ts/api/go/client" - mock "github.com/stretchr/testify/mock" -) - -// NewClient creates a new instance of Client. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -// The first argument is typically a *testing.T value. -func NewClient(t interface { - mock.TestingT - Cleanup(func()) -}) *Client { - mock := &Client{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} - -// Client is an autogenerated mock type for the Client type -type Client struct { - mock.Mock -} - -type Client_Expecter struct { - mock *mock.Mock -} - -func (_m *Client) EXPECT() *Client_Expecter { - return &Client_Expecter{mock: &_m.Mock} -} - -// Apiv1 provides a mock function for the type Client -func (_mock *Client) Apiv1() client.Apiv1 { - ret := _mock.Called() - - if len(ret) == 0 { - panic("no return value specified for Apiv1") - } - - var r0 client.Apiv1 - if returnFunc, ok := ret.Get(0).(func() client.Apiv1); ok { - r0 = returnFunc() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(client.Apiv1) - } - } - return r0 -} - -// Client_Apiv1_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Apiv1' -type Client_Apiv1_Call struct { - *mock.Call -} - -// Apiv1 is a helper method to define mock.On call -func (_e *Client_Expecter) Apiv1() *Client_Apiv1_Call { - return &Client_Apiv1_Call{Call: _e.mock.On("Apiv1")} -} - -func (_c *Client_Apiv1_Call) Run(run func()) *Client_Apiv1_Call { - _c.Call.Run(func(args mock.Arguments) { - run() - }) - return _c -} - -func (_c *Client_Apiv1_Call) Return(apiv1 client.Apiv1) *Client_Apiv1_Call { - _c.Call.Return(apiv1) - return _c -} - -func (_c *Client_Apiv1_Call) RunAndReturn(run func() client.Apiv1) *Client_Apiv1_Call { - _c.Call.Return(run) - return _c -} - -// Apivmv1 provides a mock function for the type Client -func (_mock *Client) Apivmv1() client.Apivmv1 { - ret := _mock.Called() - - if len(ret) == 0 { - panic("no return value specified for Apivmv1") - } - - var r0 client.Apivmv1 - if returnFunc, ok := ret.Get(0).(func() client.Apivmv1); ok { - r0 = returnFunc() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(client.Apivmv1) - } - } - return r0 -} - -// Client_Apivmv1_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Apivmv1' -type Client_Apivmv1_Call struct { - *mock.Call -} - -// Apivmv1 is a helper method to define mock.On call -func (_e *Client_Expecter) Apivmv1() *Client_Apivmv1_Call { - return &Client_Apivmv1_Call{Call: _e.mock.On("Apivmv1")} -} - -func (_c *Client_Apivmv1_Call) Run(run func()) *Client_Apivmv1_Call { - _c.Call.Run(func(args mock.Arguments) { - run() - }) - return _c -} - -func (_c *Client_Apivmv1_Call) Return(apivmv1 client.Apivmv1) *Client_Apivmv1_Call { - _c.Call.Return(apivmv1) - return _c -} - -func (_c *Client_Apivmv1_Call) RunAndReturn(run func() client.Apivmv1) *Client_Apivmv1_Call { - _c.Call.Return(run) - return _c -} diff --git a/go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceClient.go b/go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceClient.go deleted file mode 100644 index 85a85a9..0000000 --- a/go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceClient.go +++ /dev/null @@ -1,379 +0,0 @@ -// Code generated by mockery; DO NOT EDIT. -// github.com/vektra/mockery -// template: testify - -package vmv1connect - -import ( - "context" - - "github.com/fi-ts/api/go/fits/api/vm/v1" - mock "github.com/stretchr/testify/mock" -) - -// NewVMServiceClient creates a new instance of VMServiceClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -// The first argument is typically a *testing.T value. -func NewVMServiceClient(t interface { - mock.TestingT - Cleanup(func()) -}) *VMServiceClient { - mock := &VMServiceClient{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} - -// VMServiceClient is an autogenerated mock type for the VMServiceClient type -type VMServiceClient struct { - mock.Mock -} - -type VMServiceClient_Expecter struct { - mock *mock.Mock -} - -func (_m *VMServiceClient) EXPECT() *VMServiceClient_Expecter { - return &VMServiceClient_Expecter{mock: &_m.Mock} -} - -// Create provides a mock function for the type VMServiceClient -func (_mock *VMServiceClient) Create(context1 context.Context, vMServiceCreateRequest *vmv1.VMServiceCreateRequest) (*vmv1.VMServiceCreateResponse, error) { - ret := _mock.Called(context1, vMServiceCreateRequest) - - if len(ret) == 0 { - panic("no return value specified for Create") - } - - var r0 *vmv1.VMServiceCreateResponse - var r1 error - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceCreateRequest) (*vmv1.VMServiceCreateResponse, error)); ok { - return returnFunc(context1, vMServiceCreateRequest) - } - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceCreateRequest) *vmv1.VMServiceCreateResponse); ok { - r0 = returnFunc(context1, vMServiceCreateRequest) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*vmv1.VMServiceCreateResponse) - } - } - if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceCreateRequest) error); ok { - r1 = returnFunc(context1, vMServiceCreateRequest) - } else { - r1 = ret.Error(1) - } - return r0, r1 -} - -// VMServiceClient_Create_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Create' -type VMServiceClient_Create_Call struct { - *mock.Call -} - -// Create is a helper method to define mock.On call -// - context1 context.Context -// - vMServiceCreateRequest *vmv1.VMServiceCreateRequest -func (_e *VMServiceClient_Expecter) Create(context1 any, vMServiceCreateRequest any) *VMServiceClient_Create_Call { - return &VMServiceClient_Create_Call{Call: _e.mock.On("Create", context1, vMServiceCreateRequest)} -} - -func (_c *VMServiceClient_Create_Call) Run(run func(context1 context.Context, vMServiceCreateRequest *vmv1.VMServiceCreateRequest)) *VMServiceClient_Create_Call { - _c.Call.Run(func(args mock.Arguments) { - var arg0 context.Context - if args[0] != nil { - arg0 = args[0].(context.Context) - } - var arg1 *vmv1.VMServiceCreateRequest - if args[1] != nil { - arg1 = args[1].(*vmv1.VMServiceCreateRequest) - } - run( - arg0, - arg1, - ) - }) - return _c -} - -func (_c *VMServiceClient_Create_Call) Return(vMServiceCreateResponse *vmv1.VMServiceCreateResponse, err error) *VMServiceClient_Create_Call { - _c.Call.Return(vMServiceCreateResponse, err) - return _c -} - -func (_c *VMServiceClient_Create_Call) RunAndReturn(run func(context1 context.Context, vMServiceCreateRequest *vmv1.VMServiceCreateRequest) (*vmv1.VMServiceCreateResponse, error)) *VMServiceClient_Create_Call { - _c.Call.Return(run) - return _c -} - -// Delete provides a mock function for the type VMServiceClient -func (_mock *VMServiceClient) Delete(context1 context.Context, vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest) (*vmv1.VMServiceDeleteResponse, error) { - ret := _mock.Called(context1, vMServiceDeleteRequest) - - if len(ret) == 0 { - panic("no return value specified for Delete") - } - - var r0 *vmv1.VMServiceDeleteResponse - var r1 error - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceDeleteRequest) (*vmv1.VMServiceDeleteResponse, error)); ok { - return returnFunc(context1, vMServiceDeleteRequest) - } - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceDeleteRequest) *vmv1.VMServiceDeleteResponse); ok { - r0 = returnFunc(context1, vMServiceDeleteRequest) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*vmv1.VMServiceDeleteResponse) - } - } - if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceDeleteRequest) error); ok { - r1 = returnFunc(context1, vMServiceDeleteRequest) - } else { - r1 = ret.Error(1) - } - return r0, r1 -} - -// VMServiceClient_Delete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Delete' -type VMServiceClient_Delete_Call struct { - *mock.Call -} - -// Delete is a helper method to define mock.On call -// - context1 context.Context -// - vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest -func (_e *VMServiceClient_Expecter) Delete(context1 any, vMServiceDeleteRequest any) *VMServiceClient_Delete_Call { - return &VMServiceClient_Delete_Call{Call: _e.mock.On("Delete", context1, vMServiceDeleteRequest)} -} - -func (_c *VMServiceClient_Delete_Call) Run(run func(context1 context.Context, vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest)) *VMServiceClient_Delete_Call { - _c.Call.Run(func(args mock.Arguments) { - var arg0 context.Context - if args[0] != nil { - arg0 = args[0].(context.Context) - } - var arg1 *vmv1.VMServiceDeleteRequest - if args[1] != nil { - arg1 = args[1].(*vmv1.VMServiceDeleteRequest) - } - run( - arg0, - arg1, - ) - }) - return _c -} - -func (_c *VMServiceClient_Delete_Call) Return(vMServiceDeleteResponse *vmv1.VMServiceDeleteResponse, err error) *VMServiceClient_Delete_Call { - _c.Call.Return(vMServiceDeleteResponse, err) - return _c -} - -func (_c *VMServiceClient_Delete_Call) RunAndReturn(run func(context1 context.Context, vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest) (*vmv1.VMServiceDeleteResponse, error)) *VMServiceClient_Delete_Call { - _c.Call.Return(run) - return _c -} - -// Get provides a mock function for the type VMServiceClient -func (_mock *VMServiceClient) Get(context1 context.Context, vMServiceGetRequest *vmv1.VMServiceGetRequest) (*vmv1.VMServiceGetResponse, error) { - ret := _mock.Called(context1, vMServiceGetRequest) - - if len(ret) == 0 { - panic("no return value specified for Get") - } - - var r0 *vmv1.VMServiceGetResponse - var r1 error - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceGetRequest) (*vmv1.VMServiceGetResponse, error)); ok { - return returnFunc(context1, vMServiceGetRequest) - } - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceGetRequest) *vmv1.VMServiceGetResponse); ok { - r0 = returnFunc(context1, vMServiceGetRequest) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*vmv1.VMServiceGetResponse) - } - } - if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceGetRequest) error); ok { - r1 = returnFunc(context1, vMServiceGetRequest) - } else { - r1 = ret.Error(1) - } - return r0, r1 -} - -// VMServiceClient_Get_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Get' -type VMServiceClient_Get_Call struct { - *mock.Call -} - -// Get is a helper method to define mock.On call -// - context1 context.Context -// - vMServiceGetRequest *vmv1.VMServiceGetRequest -func (_e *VMServiceClient_Expecter) Get(context1 any, vMServiceGetRequest any) *VMServiceClient_Get_Call { - return &VMServiceClient_Get_Call{Call: _e.mock.On("Get", context1, vMServiceGetRequest)} -} - -func (_c *VMServiceClient_Get_Call) Run(run func(context1 context.Context, vMServiceGetRequest *vmv1.VMServiceGetRequest)) *VMServiceClient_Get_Call { - _c.Call.Run(func(args mock.Arguments) { - var arg0 context.Context - if args[0] != nil { - arg0 = args[0].(context.Context) - } - var arg1 *vmv1.VMServiceGetRequest - if args[1] != nil { - arg1 = args[1].(*vmv1.VMServiceGetRequest) - } - run( - arg0, - arg1, - ) - }) - return _c -} - -func (_c *VMServiceClient_Get_Call) Return(vMServiceGetResponse *vmv1.VMServiceGetResponse, err error) *VMServiceClient_Get_Call { - _c.Call.Return(vMServiceGetResponse, err) - return _c -} - -func (_c *VMServiceClient_Get_Call) RunAndReturn(run func(context1 context.Context, vMServiceGetRequest *vmv1.VMServiceGetRequest) (*vmv1.VMServiceGetResponse, error)) *VMServiceClient_Get_Call { - _c.Call.Return(run) - return _c -} - -// List provides a mock function for the type VMServiceClient -func (_mock *VMServiceClient) List(context1 context.Context, vMServiceListRequest *vmv1.VMServiceListRequest) (*vmv1.VMServiceListResponse, error) { - ret := _mock.Called(context1, vMServiceListRequest) - - if len(ret) == 0 { - panic("no return value specified for List") - } - - var r0 *vmv1.VMServiceListResponse - var r1 error - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceListRequest) (*vmv1.VMServiceListResponse, error)); ok { - return returnFunc(context1, vMServiceListRequest) - } - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceListRequest) *vmv1.VMServiceListResponse); ok { - r0 = returnFunc(context1, vMServiceListRequest) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*vmv1.VMServiceListResponse) - } - } - if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceListRequest) error); ok { - r1 = returnFunc(context1, vMServiceListRequest) - } else { - r1 = ret.Error(1) - } - return r0, r1 -} - -// VMServiceClient_List_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'List' -type VMServiceClient_List_Call struct { - *mock.Call -} - -// List is a helper method to define mock.On call -// - context1 context.Context -// - vMServiceListRequest *vmv1.VMServiceListRequest -func (_e *VMServiceClient_Expecter) List(context1 any, vMServiceListRequest any) *VMServiceClient_List_Call { - return &VMServiceClient_List_Call{Call: _e.mock.On("List", context1, vMServiceListRequest)} -} - -func (_c *VMServiceClient_List_Call) Run(run func(context1 context.Context, vMServiceListRequest *vmv1.VMServiceListRequest)) *VMServiceClient_List_Call { - _c.Call.Run(func(args mock.Arguments) { - var arg0 context.Context - if args[0] != nil { - arg0 = args[0].(context.Context) - } - var arg1 *vmv1.VMServiceListRequest - if args[1] != nil { - arg1 = args[1].(*vmv1.VMServiceListRequest) - } - run( - arg0, - arg1, - ) - }) - return _c -} - -func (_c *VMServiceClient_List_Call) Return(vMServiceListResponse *vmv1.VMServiceListResponse, err error) *VMServiceClient_List_Call { - _c.Call.Return(vMServiceListResponse, err) - return _c -} - -func (_c *VMServiceClient_List_Call) RunAndReturn(run func(context1 context.Context, vMServiceListRequest *vmv1.VMServiceListRequest) (*vmv1.VMServiceListResponse, error)) *VMServiceClient_List_Call { - _c.Call.Return(run) - return _c -} - -// Update provides a mock function for the type VMServiceClient -func (_mock *VMServiceClient) Update(context1 context.Context, vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest) (*vmv1.VMServiceUpdateResponse, error) { - ret := _mock.Called(context1, vMServiceUpdateRequest) - - if len(ret) == 0 { - panic("no return value specified for Update") - } - - var r0 *vmv1.VMServiceUpdateResponse - var r1 error - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceUpdateRequest) (*vmv1.VMServiceUpdateResponse, error)); ok { - return returnFunc(context1, vMServiceUpdateRequest) - } - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceUpdateRequest) *vmv1.VMServiceUpdateResponse); ok { - r0 = returnFunc(context1, vMServiceUpdateRequest) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*vmv1.VMServiceUpdateResponse) - } - } - if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceUpdateRequest) error); ok { - r1 = returnFunc(context1, vMServiceUpdateRequest) - } else { - r1 = ret.Error(1) - } - return r0, r1 -} - -// VMServiceClient_Update_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Update' -type VMServiceClient_Update_Call struct { - *mock.Call -} - -// Update is a helper method to define mock.On call -// - context1 context.Context -// - vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest -func (_e *VMServiceClient_Expecter) Update(context1 any, vMServiceUpdateRequest any) *VMServiceClient_Update_Call { - return &VMServiceClient_Update_Call{Call: _e.mock.On("Update", context1, vMServiceUpdateRequest)} -} - -func (_c *VMServiceClient_Update_Call) Run(run func(context1 context.Context, vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest)) *VMServiceClient_Update_Call { - _c.Call.Run(func(args mock.Arguments) { - var arg0 context.Context - if args[0] != nil { - arg0 = args[0].(context.Context) - } - var arg1 *vmv1.VMServiceUpdateRequest - if args[1] != nil { - arg1 = args[1].(*vmv1.VMServiceUpdateRequest) - } - run( - arg0, - arg1, - ) - }) - return _c -} - -func (_c *VMServiceClient_Update_Call) Return(vMServiceUpdateResponse *vmv1.VMServiceUpdateResponse, err error) *VMServiceClient_Update_Call { - _c.Call.Return(vMServiceUpdateResponse, err) - return _c -} - -func (_c *VMServiceClient_Update_Call) RunAndReturn(run func(context1 context.Context, vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest) (*vmv1.VMServiceUpdateResponse, error)) *VMServiceClient_Update_Call { - _c.Call.Return(run) - return _c -} diff --git a/go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceHandler.go b/go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceHandler.go deleted file mode 100644 index e3f606e..0000000 --- a/go/tests/mocks/fits/api/vm/v1/vmv1connect/VMServiceHandler.go +++ /dev/null @@ -1,379 +0,0 @@ -// Code generated by mockery; DO NOT EDIT. -// github.com/vektra/mockery -// template: testify - -package vmv1connect - -import ( - "context" - - "github.com/fi-ts/api/go/fits/api/vm/v1" - mock "github.com/stretchr/testify/mock" -) - -// NewVMServiceHandler creates a new instance of VMServiceHandler. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -// The first argument is typically a *testing.T value. -func NewVMServiceHandler(t interface { - mock.TestingT - Cleanup(func()) -}) *VMServiceHandler { - mock := &VMServiceHandler{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} - -// VMServiceHandler is an autogenerated mock type for the VMServiceHandler type -type VMServiceHandler struct { - mock.Mock -} - -type VMServiceHandler_Expecter struct { - mock *mock.Mock -} - -func (_m *VMServiceHandler) EXPECT() *VMServiceHandler_Expecter { - return &VMServiceHandler_Expecter{mock: &_m.Mock} -} - -// Create provides a mock function for the type VMServiceHandler -func (_mock *VMServiceHandler) Create(context1 context.Context, vMServiceCreateRequest *vmv1.VMServiceCreateRequest) (*vmv1.VMServiceCreateResponse, error) { - ret := _mock.Called(context1, vMServiceCreateRequest) - - if len(ret) == 0 { - panic("no return value specified for Create") - } - - var r0 *vmv1.VMServiceCreateResponse - var r1 error - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceCreateRequest) (*vmv1.VMServiceCreateResponse, error)); ok { - return returnFunc(context1, vMServiceCreateRequest) - } - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceCreateRequest) *vmv1.VMServiceCreateResponse); ok { - r0 = returnFunc(context1, vMServiceCreateRequest) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*vmv1.VMServiceCreateResponse) - } - } - if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceCreateRequest) error); ok { - r1 = returnFunc(context1, vMServiceCreateRequest) - } else { - r1 = ret.Error(1) - } - return r0, r1 -} - -// VMServiceHandler_Create_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Create' -type VMServiceHandler_Create_Call struct { - *mock.Call -} - -// Create is a helper method to define mock.On call -// - context1 context.Context -// - vMServiceCreateRequest *vmv1.VMServiceCreateRequest -func (_e *VMServiceHandler_Expecter) Create(context1 any, vMServiceCreateRequest any) *VMServiceHandler_Create_Call { - return &VMServiceHandler_Create_Call{Call: _e.mock.On("Create", context1, vMServiceCreateRequest)} -} - -func (_c *VMServiceHandler_Create_Call) Run(run func(context1 context.Context, vMServiceCreateRequest *vmv1.VMServiceCreateRequest)) *VMServiceHandler_Create_Call { - _c.Call.Run(func(args mock.Arguments) { - var arg0 context.Context - if args[0] != nil { - arg0 = args[0].(context.Context) - } - var arg1 *vmv1.VMServiceCreateRequest - if args[1] != nil { - arg1 = args[1].(*vmv1.VMServiceCreateRequest) - } - run( - arg0, - arg1, - ) - }) - return _c -} - -func (_c *VMServiceHandler_Create_Call) Return(vMServiceCreateResponse *vmv1.VMServiceCreateResponse, err error) *VMServiceHandler_Create_Call { - _c.Call.Return(vMServiceCreateResponse, err) - return _c -} - -func (_c *VMServiceHandler_Create_Call) RunAndReturn(run func(context1 context.Context, vMServiceCreateRequest *vmv1.VMServiceCreateRequest) (*vmv1.VMServiceCreateResponse, error)) *VMServiceHandler_Create_Call { - _c.Call.Return(run) - return _c -} - -// Delete provides a mock function for the type VMServiceHandler -func (_mock *VMServiceHandler) Delete(context1 context.Context, vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest) (*vmv1.VMServiceDeleteResponse, error) { - ret := _mock.Called(context1, vMServiceDeleteRequest) - - if len(ret) == 0 { - panic("no return value specified for Delete") - } - - var r0 *vmv1.VMServiceDeleteResponse - var r1 error - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceDeleteRequest) (*vmv1.VMServiceDeleteResponse, error)); ok { - return returnFunc(context1, vMServiceDeleteRequest) - } - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceDeleteRequest) *vmv1.VMServiceDeleteResponse); ok { - r0 = returnFunc(context1, vMServiceDeleteRequest) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*vmv1.VMServiceDeleteResponse) - } - } - if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceDeleteRequest) error); ok { - r1 = returnFunc(context1, vMServiceDeleteRequest) - } else { - r1 = ret.Error(1) - } - return r0, r1 -} - -// VMServiceHandler_Delete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Delete' -type VMServiceHandler_Delete_Call struct { - *mock.Call -} - -// Delete is a helper method to define mock.On call -// - context1 context.Context -// - vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest -func (_e *VMServiceHandler_Expecter) Delete(context1 any, vMServiceDeleteRequest any) *VMServiceHandler_Delete_Call { - return &VMServiceHandler_Delete_Call{Call: _e.mock.On("Delete", context1, vMServiceDeleteRequest)} -} - -func (_c *VMServiceHandler_Delete_Call) Run(run func(context1 context.Context, vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest)) *VMServiceHandler_Delete_Call { - _c.Call.Run(func(args mock.Arguments) { - var arg0 context.Context - if args[0] != nil { - arg0 = args[0].(context.Context) - } - var arg1 *vmv1.VMServiceDeleteRequest - if args[1] != nil { - arg1 = args[1].(*vmv1.VMServiceDeleteRequest) - } - run( - arg0, - arg1, - ) - }) - return _c -} - -func (_c *VMServiceHandler_Delete_Call) Return(vMServiceDeleteResponse *vmv1.VMServiceDeleteResponse, err error) *VMServiceHandler_Delete_Call { - _c.Call.Return(vMServiceDeleteResponse, err) - return _c -} - -func (_c *VMServiceHandler_Delete_Call) RunAndReturn(run func(context1 context.Context, vMServiceDeleteRequest *vmv1.VMServiceDeleteRequest) (*vmv1.VMServiceDeleteResponse, error)) *VMServiceHandler_Delete_Call { - _c.Call.Return(run) - return _c -} - -// Get provides a mock function for the type VMServiceHandler -func (_mock *VMServiceHandler) Get(context1 context.Context, vMServiceGetRequest *vmv1.VMServiceGetRequest) (*vmv1.VMServiceGetResponse, error) { - ret := _mock.Called(context1, vMServiceGetRequest) - - if len(ret) == 0 { - panic("no return value specified for Get") - } - - var r0 *vmv1.VMServiceGetResponse - var r1 error - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceGetRequest) (*vmv1.VMServiceGetResponse, error)); ok { - return returnFunc(context1, vMServiceGetRequest) - } - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceGetRequest) *vmv1.VMServiceGetResponse); ok { - r0 = returnFunc(context1, vMServiceGetRequest) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*vmv1.VMServiceGetResponse) - } - } - if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceGetRequest) error); ok { - r1 = returnFunc(context1, vMServiceGetRequest) - } else { - r1 = ret.Error(1) - } - return r0, r1 -} - -// VMServiceHandler_Get_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Get' -type VMServiceHandler_Get_Call struct { - *mock.Call -} - -// Get is a helper method to define mock.On call -// - context1 context.Context -// - vMServiceGetRequest *vmv1.VMServiceGetRequest -func (_e *VMServiceHandler_Expecter) Get(context1 any, vMServiceGetRequest any) *VMServiceHandler_Get_Call { - return &VMServiceHandler_Get_Call{Call: _e.mock.On("Get", context1, vMServiceGetRequest)} -} - -func (_c *VMServiceHandler_Get_Call) Run(run func(context1 context.Context, vMServiceGetRequest *vmv1.VMServiceGetRequest)) *VMServiceHandler_Get_Call { - _c.Call.Run(func(args mock.Arguments) { - var arg0 context.Context - if args[0] != nil { - arg0 = args[0].(context.Context) - } - var arg1 *vmv1.VMServiceGetRequest - if args[1] != nil { - arg1 = args[1].(*vmv1.VMServiceGetRequest) - } - run( - arg0, - arg1, - ) - }) - return _c -} - -func (_c *VMServiceHandler_Get_Call) Return(vMServiceGetResponse *vmv1.VMServiceGetResponse, err error) *VMServiceHandler_Get_Call { - _c.Call.Return(vMServiceGetResponse, err) - return _c -} - -func (_c *VMServiceHandler_Get_Call) RunAndReturn(run func(context1 context.Context, vMServiceGetRequest *vmv1.VMServiceGetRequest) (*vmv1.VMServiceGetResponse, error)) *VMServiceHandler_Get_Call { - _c.Call.Return(run) - return _c -} - -// List provides a mock function for the type VMServiceHandler -func (_mock *VMServiceHandler) List(context1 context.Context, vMServiceListRequest *vmv1.VMServiceListRequest) (*vmv1.VMServiceListResponse, error) { - ret := _mock.Called(context1, vMServiceListRequest) - - if len(ret) == 0 { - panic("no return value specified for List") - } - - var r0 *vmv1.VMServiceListResponse - var r1 error - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceListRequest) (*vmv1.VMServiceListResponse, error)); ok { - return returnFunc(context1, vMServiceListRequest) - } - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceListRequest) *vmv1.VMServiceListResponse); ok { - r0 = returnFunc(context1, vMServiceListRequest) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*vmv1.VMServiceListResponse) - } - } - if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceListRequest) error); ok { - r1 = returnFunc(context1, vMServiceListRequest) - } else { - r1 = ret.Error(1) - } - return r0, r1 -} - -// VMServiceHandler_List_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'List' -type VMServiceHandler_List_Call struct { - *mock.Call -} - -// List is a helper method to define mock.On call -// - context1 context.Context -// - vMServiceListRequest *vmv1.VMServiceListRequest -func (_e *VMServiceHandler_Expecter) List(context1 any, vMServiceListRequest any) *VMServiceHandler_List_Call { - return &VMServiceHandler_List_Call{Call: _e.mock.On("List", context1, vMServiceListRequest)} -} - -func (_c *VMServiceHandler_List_Call) Run(run func(context1 context.Context, vMServiceListRequest *vmv1.VMServiceListRequest)) *VMServiceHandler_List_Call { - _c.Call.Run(func(args mock.Arguments) { - var arg0 context.Context - if args[0] != nil { - arg0 = args[0].(context.Context) - } - var arg1 *vmv1.VMServiceListRequest - if args[1] != nil { - arg1 = args[1].(*vmv1.VMServiceListRequest) - } - run( - arg0, - arg1, - ) - }) - return _c -} - -func (_c *VMServiceHandler_List_Call) Return(vMServiceListResponse *vmv1.VMServiceListResponse, err error) *VMServiceHandler_List_Call { - _c.Call.Return(vMServiceListResponse, err) - return _c -} - -func (_c *VMServiceHandler_List_Call) RunAndReturn(run func(context1 context.Context, vMServiceListRequest *vmv1.VMServiceListRequest) (*vmv1.VMServiceListResponse, error)) *VMServiceHandler_List_Call { - _c.Call.Return(run) - return _c -} - -// Update provides a mock function for the type VMServiceHandler -func (_mock *VMServiceHandler) Update(context1 context.Context, vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest) (*vmv1.VMServiceUpdateResponse, error) { - ret := _mock.Called(context1, vMServiceUpdateRequest) - - if len(ret) == 0 { - panic("no return value specified for Update") - } - - var r0 *vmv1.VMServiceUpdateResponse - var r1 error - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceUpdateRequest) (*vmv1.VMServiceUpdateResponse, error)); ok { - return returnFunc(context1, vMServiceUpdateRequest) - } - if returnFunc, ok := ret.Get(0).(func(context.Context, *vmv1.VMServiceUpdateRequest) *vmv1.VMServiceUpdateResponse); ok { - r0 = returnFunc(context1, vMServiceUpdateRequest) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*vmv1.VMServiceUpdateResponse) - } - } - if returnFunc, ok := ret.Get(1).(func(context.Context, *vmv1.VMServiceUpdateRequest) error); ok { - r1 = returnFunc(context1, vMServiceUpdateRequest) - } else { - r1 = ret.Error(1) - } - return r0, r1 -} - -// VMServiceHandler_Update_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Update' -type VMServiceHandler_Update_Call struct { - *mock.Call -} - -// Update is a helper method to define mock.On call -// - context1 context.Context -// - vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest -func (_e *VMServiceHandler_Expecter) Update(context1 any, vMServiceUpdateRequest any) *VMServiceHandler_Update_Call { - return &VMServiceHandler_Update_Call{Call: _e.mock.On("Update", context1, vMServiceUpdateRequest)} -} - -func (_c *VMServiceHandler_Update_Call) Run(run func(context1 context.Context, vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest)) *VMServiceHandler_Update_Call { - _c.Call.Run(func(args mock.Arguments) { - var arg0 context.Context - if args[0] != nil { - arg0 = args[0].(context.Context) - } - var arg1 *vmv1.VMServiceUpdateRequest - if args[1] != nil { - arg1 = args[1].(*vmv1.VMServiceUpdateRequest) - } - run( - arg0, - arg1, - ) - }) - return _c -} - -func (_c *VMServiceHandler_Update_Call) Return(vMServiceUpdateResponse *vmv1.VMServiceUpdateResponse, err error) *VMServiceHandler_Update_Call { - _c.Call.Return(vMServiceUpdateResponse, err) - return _c -} - -func (_c *VMServiceHandler_Update_Call) RunAndReturn(run func(context1 context.Context, vMServiceUpdateRequest *vmv1.VMServiceUpdateRequest) (*vmv1.VMServiceUpdateResponse, error)) *VMServiceHandler_Update_Call { - _c.Call.Return(run) - return _c -} From 80351e6d92d2675284cf45bc4a7b54e93d0ba7d2 Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Wed, 9 Sep 2026 00:13:41 +0200 Subject: [PATCH 06/21] feat: add some vm-related list service drafts --- doc/index.html | 1000 +++++++++++++++-- go/fits/api/v1/common.pb.go | 104 +- go/fits/api/vm/v1/location.pb.go | 231 ++++ go/fits/api/vm/v1/os.pb.go | 174 ++- go/fits/api/vm/v1/service.pb.go | 231 ++++ go/fits/api/vm/v1/stagetype.pb.go | 260 +++++ go/fits/api/vm/v1/vlan.pb.go | 393 +++++++ go/fits/api/vm/v1/vm.pb.go | 50 +- .../api/vm/v1/vmv1connect/location.connect.go | 114 ++ go/fits/api/vm/v1/vmv1connect/os.connect.go | 114 ++ .../api/vm/v1/vmv1connect/service.connect.go | 114 ++ .../vm/v1/vmv1connect/stagetype.connect.go | 114 ++ go/fits/api/vm/v1/vmv1connect/vlan.connect.go | 114 ++ go/fits/api/vm/v1/vmv1connect/vm.connect.go | 20 +- js/fits/api/v1/common_pb.ts | 38 +- js/fits/api/vm/v1/location_pb.ts | 100 ++ js/fits/api/vm/v1/os_pb.ts | 99 +- js/fits/api/vm/v1/service_pb.ts | 105 ++ js/fits/api/vm/v1/stagetype_pb.ts | 126 +++ js/fits/api/vm/v1/vlan_pb.ts | 212 ++++ js/fits/api/vm/v1/vm_pb.ts | 68 +- proto/fits/api/v1/common.proto | 11 + proto/fits/api/vm/v1/location.proto | 35 + proto/fits/api/vm/v1/os.proto | 42 +- proto/fits/api/vm/v1/service.proto | 39 + proto/fits/api/vm/v1/stagetype.proto | 50 + proto/fits/api/vm/v1/vlan.proto | 90 ++ proto/fits/api/vm/v1/vm.proto | 68 +- python/fits/api/v1/common_pb2.py | 28 +- python/fits/api/v1/common_pb2.pyi | 10 + python/fits/api/vm/v1/location_connect.py | 131 +++ python/fits/api/vm/v1/location_pb2.py | 49 + python/fits/api/vm/v1/location_pb2.pyi | 27 + python/fits/api/vm/v1/os_connect.py | 131 +++ python/fits/api/vm/v1/os_pb2.py | 15 +- python/fits/api/vm/v1/os_pb2.pyi | 27 +- python/fits/api/vm/v1/service_connect.py | 131 +++ python/fits/api/vm/v1/service_pb2.py | 49 + python/fits/api/vm/v1/service_pb2.pyi | 27 + python/fits/api/vm/v1/stagetype_connect.py | 131 +++ python/fits/api/vm/v1/stagetype_pb2.py | 51 + python/fits/api/vm/v1/stagetype_pb2.pyi | 31 + python/fits/api/vm/v1/vlan_connect.py | 131 +++ python/fits/api/vm/v1/vlan_pb2.py | 57 + python/fits/api/vm/v1/vlan_pb2.pyi | 57 + python/fits/api/vm/v1/vm_pb2.py | 44 +- python/fits/api/vm/v1/vm_pb2.pyi | 8 +- 47 files changed, 4943 insertions(+), 308 deletions(-) create mode 100644 go/fits/api/vm/v1/location.pb.go create mode 100644 go/fits/api/vm/v1/service.pb.go create mode 100644 go/fits/api/vm/v1/stagetype.pb.go create mode 100644 go/fits/api/vm/v1/vlan.pb.go create mode 100644 go/fits/api/vm/v1/vmv1connect/location.connect.go create mode 100644 go/fits/api/vm/v1/vmv1connect/os.connect.go create mode 100644 go/fits/api/vm/v1/vmv1connect/service.connect.go create mode 100644 go/fits/api/vm/v1/vmv1connect/stagetype.connect.go create mode 100644 go/fits/api/vm/v1/vmv1connect/vlan.connect.go create mode 100644 js/fits/api/vm/v1/location_pb.ts create mode 100644 js/fits/api/vm/v1/service_pb.ts create mode 100644 js/fits/api/vm/v1/stagetype_pb.ts create mode 100644 js/fits/api/vm/v1/vlan_pb.ts create mode 100644 proto/fits/api/vm/v1/location.proto create mode 100644 proto/fits/api/vm/v1/service.proto create mode 100644 proto/fits/api/vm/v1/stagetype.proto create mode 100644 proto/fits/api/vm/v1/vlan.proto create mode 100644 python/fits/api/vm/v1/location_connect.py create mode 100644 python/fits/api/vm/v1/location_pb2.py create mode 100644 python/fits/api/vm/v1/location_pb2.pyi create mode 100644 python/fits/api/vm/v1/os_connect.py create mode 100644 python/fits/api/vm/v1/service_connect.py create mode 100644 python/fits/api/vm/v1/service_pb2.py create mode 100644 python/fits/api/vm/v1/service_pb2.pyi create mode 100644 python/fits/api/vm/v1/stagetype_connect.py create mode 100644 python/fits/api/vm/v1/stagetype_pb2.py create mode 100644 python/fits/api/vm/v1/stagetype_pb2.pyi create mode 100644 python/fits/api/vm/v1/vlan_connect.py create mode 100644 python/fits/api/vm/v1/vlan_pb2.py create mode 100644 python/fits/api/vm/v1/vlan_pb2.pyi diff --git a/doc/index.html b/doc/index.html index c954590..f37e78d 100644 --- a/doc/index.html +++ b/doc/index.html @@ -269,6 +269,10 @@

    Table of Contents

    MUpdateMeta +
  • + MValidationError +
  • +
  • EAdminRole @@ -725,17 +729,137 @@

    Table of Contents

  • +
  • + fits/api/vm/v1/location.proto + +
  • + +
  • fits/api/vm/v1/os.proto +
  • + + +
  • + fits/api/vm/v1/service.proto + +
  • + + +
  • + fits/api/vm/v1/stagetype.proto + +
  • + + +
  • + fits/api/vm/v1/vlan.proto +
  • @@ -1146,6 +1270,44 @@

    UpdateMeta

    +

    ValidationError

    +

    ValidationError describes a single validation problem reported by an upstream API.

    Used to surface structured validation errors (e.g. HTTP 422) returned by backends.

    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    locstringrepeated

    Location of the validation error within the request, e.g. ["body", "tenant_uuid"]

    msgstring

    Human readable error message

    typestring

    Type of the validation error, e.g. "value_error"

    + + + + +

    AdminRole

    @@ -4260,13 +4422,13 @@

    VersionService

    -

    fits/api/vm/v1/os.proto

    Top +

    fits/api/vm/v1/location.proto

    Top

    -

    Os

    -

    Os is the definition of a potential OS of a VM instance

    TODO create a dedicated service

    +

    Location

    +

    Location is the definition of an available datacenter location for VM instances

    @@ -4279,7 +4441,14 @@

    Os

    - + + + + + + + + @@ -4289,22 +4458,15 @@

    Os

    +

    LocationServiceListRequest

    +

    LocationServiceListRequest is the request payload for a location list request.

    The upstream nulink API accepts no body or parameters, so this is intentionally empty.

    - - - - - - - -
    -

    fits/api/vm/v1/vm.proto

    Top -
    -

    + + -

    Disk

    -

    Disk

    +

    LocationServiceListResponse

    +

    LocationServiceListResponse is the response payload for a location list request

    uuid string

    Uuid of this os

    Uuid of this location

    titlestring

    title of the location

    @@ -4314,42 +4476,10 @@

    Disk

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -4359,8 +4489,41 @@

    Disk

    -

    VMInstance

    -

    VM Instance Messages

    + + + + + + +

    LocationService

    +

    LocationService lists datacenter locations available for VM instances.

    +
    auto_extendbool

    AutoExtend if set to true the disk grows automatically

    size_in_gbuint64optional

    Size if the disk in GB - -TODO discuss how this could be optional

    drive_letterstringoptional

    DriveLetter where this disk should be assigned

    labelstring

    Label of the disk

    mount_pointstringoptional

    MountPoint where this disk should be mounted - -TODO this requires a Filesystem on the disk ?

    locationsLocationrepeated

    The available locations

    + + + + + + + + + + + + + +
    Method NameRequest TypeResponse TypeDescription
    ListLocationServiceListRequestLocationServiceListResponse

    Returns a list of all datacenter locations.

    + + + + +
    +

    fits/api/vm/v1/os.proto

    Top +
    +

    + + +

    OS

    +

    OS is the definition of an available OS for VM instances

    @@ -4373,28 +4536,28 @@

    VMInstance

    - + - - + + - + - + - + - + - + @@ -4404,8 +4567,15 @@

    VMInstance

    -

    VMServiceCreateRequest

    -

    VMServiceCreateRequest TODO

    +

    OSServiceListRequest

    +

    OSServiceListRequest is the request payload for a OS list request.

    The upstream nulink API accepts no body or parameters, so this is intentionally empty.

    + + + + + +

    OSServiceListResponse

    +

    OSServiceListResponse is the response payload for a OS list request

    uuid string

    Uuid of this vm

    Uuid of this OS

    metafits.api.v1.Metatitlestring

    Meta for this vm

    Title of the OS

    nametype string

    Name of this vm

    Type of the OS

    projectversion string

    Project where this vm address belongs to

    Version of the OS

    @@ -4415,69 +4585,677 @@

    VMServiceCreateRequest

    - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - + +
    projectstring

    Project of the vm

    namestringoptional

    Name of the vm

    cpuuint32

    Number of CPUs of this vm

    ramuint32

    Ram of the vm in GB

    ossOSrepeated

    The available OSs

    + + + + + + + + + + + +

    OSService

    +

    OSService lists operating systems available for VM instances.

    + + + + + + + + + + + + + + +
    Method NameRequest TypeResponse TypeDescription
    ListOSServiceListRequestOSServiceListResponse

    Returns a list of all OSs.

    + + + + +
    +

    fits/api/vm/v1/service.proto

    Top +
    +

    + + +

    Service

    +

    TODO what is a service?

    + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    uuidstring

    Uuid of this Service

    titlestring

    title of the Service + +type NucleusDBServices struct { + ServiceTitle string `json:"service_title"` + ServiceUuid string `json:"service_uuid"` +}

    + + + + + +

    ServiceServiceListRequest

    +

    ServiceServiceListRequest is the request payload for a service list request.

    The upstream nulink API accepts no body or parameters, so this is intentionally empty.

    + + + + + +

    ServiceServiceListResponse

    +

    ServiceServiceListResponse is the response payload for a service list request

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    servicesServicerepeated

    The available services

    + + + + + + + + + + + +

    ServiceService

    +

    ServiceService TODO what is a service?

    + + + + + + + + + + + + + + +
    Method NameRequest TypeResponse TypeDescription
    ListServiceServiceListRequestServiceServiceListResponse

    Returns a list of all services.

    + + + + +
    +

    fits/api/vm/v1/stagetype.proto

    Top +
    +

    + + +

    StageType

    +

    TODO what is a stage type?

    Maps to the upstream NucleusDBStageTypes model.

    TODO evaluate whether the uuid is really optional; the upstream API spec does not

    make this clear, so we validate it strictly for now.

    + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    uuidstring

    Uuid of this stage type

    titlestring

    title of the stage type + +type NucleusDBStageTypes struct { + StageTypeTitle string `json:"stage_type_title"` + StageTypeUuid *openapi_types.UUID `json:"stage_type_uuid,omitempty"` +}

    + + + + + +

    StageTypeServiceListRequest

    +

    StageTypeServiceListRequest is the request payload for a stage type list request.

    Maps to the upstream TenantInputModel.

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    tenant_uuidstring

    Tenant to list available stage types for + +Note: the upstream model also has a requested_by field, which is intentionally +omitted here because it is added by the auth layer from the request context.

    + + + + + +

    StageTypeServiceListResponse

    +

    StageTypeServiceListResponse is the response payload for a stage type list request

    + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    stagetypesStageTyperepeated

    The available stage types

    validation_errorsfits.api.v1.ValidationErrorrepeated

    Validation errors returned by the upstream API when the request is rejected (HTTP 422) +TODO this is just a test

    + + + + + + + + + + + +

    StageTypeService

    +

    StageTypeService lists stage types available for VM instances.

    + + + + + + + + + + + + + + +
    Method NameRequest TypeResponse TypeDescription
    ListStageTypeServiceListRequestStageTypeServiceListResponse

    Returns a list of all stage types available for a tenant.

    + + + + +
    +

    fits/api/vm/v1/vlan.proto

    Top +
    +

    + + +

    Vlan

    +

    Vlan is a VLAN that a VM can be connected to.

    Maps to the upstream NucleusDBVlans model.

    TODO evaluate which of the uuid fields are really optional; the upstream API

    spec does not make this clear, so we validate them strictly for now.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    uuidstring

    Uuid of this VLAN

    idint32

    Id of this VLAN

    subnet_titlestring

    Title of the subnet this VLAN belongs to

    subnetstring

    CIDR of the subnet this VLAN belongs to

    subnetmaskstring

    Subnetmask of this VLAN

    gatewaystring

    Gateway of this VLAN

    ip_range_startstring

    Start of the usable IP range of this VLAN

    ip_range_endstring

    End of the usable IP range of this VLAN

    use_dhcpbool

    Whether DHCP is used on this VLAN

    pod_titlestring

    Title of the pod this VLAN belongs to

    pod_uuidstring

    Uuid of the pod this VLAN belongs to

    stage_type_titlestring

    Title of the stage type of this VLAN

    stage_type_uuidstring

    Uuid of the stage type of this VLAN

    tenant_uuidstring

    Uuid of the tenant this VLAN belongs to

    tenant_titlestring

    Title of the tenant this VLAN belongs to

    + + + + + +

    VlanServiceListRequest

    +

    VlanServiceListRequest is the request payload for a VLAN list request.

    Maps to the upstream TenantInputModel.

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    tenant_uuidstring

    Tenant to list available VLANs for + +Note: the upstream model also has a requested_by field, which is intentionally +omitted here because it is added by the auth layer from the request context.

    + + + + + +

    VlanServiceListResponse

    +

    VlanServiceListResponse is the response payload for a VLAN list request

    + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    vlansVlanrepeated

    The available VLANs

    validation_errorsfits.api.v1.ValidationErrorrepeated

    Validation errors returned by the upstream API when the request is rejected (HTTP 422) +TODO this is just a test

    + + + + + + + + + + + +

    VlanService

    +

    VLANService lists VLANs avaiable for VM instances.

    + + + + + + + + + + + + + + +
    Method NameRequest TypeResponse TypeDescription
    ListVlanServiceListRequestVlanServiceListResponse

    Returns a list of all VLANs available for a tenant.

    + + + + +
    +

    fits/api/vm/v1/vm.proto

    Top +
    +

    + + +

    Disk

    +

    Disk

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    auto_extendbool

    AutoExtend if set to true the disk grows automatically

    size_in_gbuint64optional

    Size if the disk in GB + +TODO discuss how this could be optional

    drive_letterstringoptional

    DriveLetter where this disk should be assigned

    labelstring

    Label of the disk

    mount_pointstringoptional

    MountPoint where this disk should be mounted + +TODO this requires a Filesystem on the disk ?

    + + + + + +

    VMInstance

    +

    VM Instance Messages

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    uuidstring

    Uuid of this VM

    metafits.api.v1.Meta

    Meta for this VM

    namestring

    Name of this VM

    projectstring

    Project where this VM belongs to

    + + + + + +

    VMServiceCreateRequest

    +

    VMServiceCreateRequest TODO

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - +TODO is inherited from the token making the create request -> stored in meta.createdBy +RequestedBy *string

    @@ -4508,7 +5286,7 @@

    VMServiceDeleteRequest

    - + @@ -4539,14 +5317,14 @@

    VMServiceGetRequest

    - + - + @@ -4570,7 +5348,7 @@

    VMServiceGetResponse

    - + @@ -4594,7 +5372,7 @@

    VMServiceListRequest

    - + @@ -4625,7 +5403,7 @@

    VMServiceUpdateRequest

    - + @@ -4656,7 +5434,7 @@

    VMServiceUpdateResponse

    VMService

    -

    VMService provides VM address management operations.

    +

    VMService provides VM CRUD perations.

    FieldTypeLabelDescription
    project_uuidstring

    Project of the VM

    namestringoptional

    Name of the VM

    cpuuint32

    Number of CPUs of this VM

    ramuint32

    RAM of the VM in GB

    os_uuid string

    OS Uuid of the OS to install in the vm instance

    OS Uuid of the OS to install in the VM instance

    vlan_uuid string

    VLAN Uuid of the VLAN to install in the vm instance into

    VLAN Uuid of the VLAN to install in the VM instance into

    location_uuid string

    Location Uuid of the datacenter location to install in the vm instance

    Location Uuid of the datacenter location to install in the VM instance

    contact_uuid string

    Contact Uuid of who is the responsible contact of the vm instance

    Contact Uuid of who is the responsible contact of the VM instance

    disks Disk repeated

    List of disks for this vm - +

    List of disks for this VM + +TODO differentiation +oneof vmtype { + // ensure at least one match is specified. + option (buf.validate.oneof).required = true; + VMServiceCreateWindowsRequest windows = 21; + VMServiceCreateLinuxRequest linux = 22; +} Disks []DiskInputModel -RequestedBy *string // TODO is inherited from the token making the create request -> stored in meta.createdBy

    project string

    Project of the vm

    Project of the VM

    uuid string

    Uuid of this vm

    Uuid of this VM

    project string

    Project where this vm address belongs to

    Project where this VM belongs to

    vm VMInstance

    The vm

    The VM

    project string

    Project of the vm

    Project of the VM

    project string

    Project of the vm

    Project of the VM

    @@ -4667,35 +5445,35 @@

    VMService

    - + - + - + - + - + diff --git a/go/fits/api/v1/common.pb.go b/go/fits/api/v1/common.pb.go index d369aa9..47d3a8e 100644 --- a/go/fits/api/v1/common.pb.go +++ b/go/fits/api/v1/common.pb.go @@ -647,6 +647,71 @@ func (x *UpdateMeta) GetLockingStrategy() OptimisticLockingStrategy { return OptimisticLockingStrategy_OPTIMISTIC_LOCKING_STRATEGY_UNSPECIFIED } +// ValidationError describes a single validation problem reported by an upstream API. +// Used to surface structured validation errors (e.g. HTTP 422) returned by backends. +type ValidationError struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Location of the validation error within the request, e.g. ["body", "tenant_uuid"] + Loc []string `protobuf:"bytes,1,rep,name=loc,proto3" json:"loc,omitempty"` + // Human readable error message + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + // Type of the validation error, e.g. "value_error" + Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ValidationError) Reset() { + *x = ValidationError{} + mi := &file_fits_api_v1_common_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ValidationError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidationError) ProtoMessage() {} + +func (x *ValidationError) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_v1_common_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidationError.ProtoReflect.Descriptor instead. +func (*ValidationError) Descriptor() ([]byte, []int) { + return file_fits_api_v1_common_proto_rawDescGZIP(), []int{5} +} + +func (x *ValidationError) GetLoc() []string { + if x != nil { + return x.Loc + } + return nil +} + +func (x *ValidationError) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *ValidationError) GetType() string { + if x != nil { + return x.Type + } + return "" +} + var file_fits_api_v1_common_proto_extTypes = []protoimpl.ExtensionInfo{ { ExtendedType: (*descriptorpb.MethodOptions)(nil), @@ -762,7 +827,11 @@ const file_fits_api_v1_common_proto_rawDesc = "" + "UpdateMeta\x129\n" + "\n" + "updated_at\x18\x01 \x01(\v2\x1a.google.protobuf.TimestampR\tupdatedAt\x12[\n" + - "\x10locking_strategy\x18\x02 \x01(\x0e2&.fits.api.v1.OptimisticLockingStrategyB\b\xbaH\x05\x82\x01\x02\x10\x01R\x0flockingStrategy*\x87\x01\n" + + "\x10locking_strategy\x18\x02 \x01(\x0e2&.fits.api.v1.OptimisticLockingStrategyB\b\xbaH\x05\x82\x01\x02\x10\x01R\x0flockingStrategy\"I\n" + + "\x0fValidationError\x12\x10\n" + + "\x03loc\x18\x01 \x03(\tR\x03loc\x12\x10\n" + + "\x03msg\x18\x02 \x01(\tR\x03msg\x12\x12\n" + + "\x04type\x18\x03 \x01(\tR\x04type*\x87\x01\n" + "\n" + "TenantRole\x12\x1b\n" + "\x17TENANT_ROLE_UNSPECIFIED\x10\x00\x12\x15\n" + @@ -816,7 +885,7 @@ func file_fits_api_v1_common_proto_rawDescGZIP() []byte { } var file_fits_api_v1_common_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_fits_api_v1_common_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_fits_api_v1_common_proto_msgTypes = make([]protoimpl.MessageInfo, 7) var file_fits_api_v1_common_proto_goTypes = []any{ (TenantRole)(0), // 0: fits.api.v1.TenantRole (ProjectRole)(0), // 1: fits.api.v1.ProjectRole @@ -829,25 +898,26 @@ var file_fits_api_v1_common_proto_goTypes = []any{ (*Meta)(nil), // 8: fits.api.v1.Meta (*UpdateLabels)(nil), // 9: fits.api.v1.UpdateLabels (*UpdateMeta)(nil), // 10: fits.api.v1.UpdateMeta - nil, // 11: fits.api.v1.Labels.LabelsEntry - (*timestamppb.Timestamp)(nil), // 12: google.protobuf.Timestamp - (*descriptorpb.MethodOptions)(nil), // 13: google.protobuf.MethodOptions - (*descriptorpb.EnumValueOptions)(nil), // 14: google.protobuf.EnumValueOptions + (*ValidationError)(nil), // 11: fits.api.v1.ValidationError + nil, // 12: fits.api.v1.Labels.LabelsEntry + (*timestamppb.Timestamp)(nil), // 13: google.protobuf.Timestamp + (*descriptorpb.MethodOptions)(nil), // 14: google.protobuf.MethodOptions + (*descriptorpb.EnumValueOptions)(nil), // 15: google.protobuf.EnumValueOptions } var file_fits_api_v1_common_proto_depIdxs = []int32{ - 11, // 0: fits.api.v1.Labels.labels:type_name -> fits.api.v1.Labels.LabelsEntry + 12, // 0: fits.api.v1.Labels.labels:type_name -> fits.api.v1.Labels.LabelsEntry 7, // 1: fits.api.v1.Meta.labels:type_name -> fits.api.v1.Labels - 12, // 2: fits.api.v1.Meta.created_at:type_name -> google.protobuf.Timestamp - 12, // 3: fits.api.v1.Meta.updated_at:type_name -> google.protobuf.Timestamp + 13, // 2: fits.api.v1.Meta.created_at:type_name -> google.protobuf.Timestamp + 13, // 3: fits.api.v1.Meta.updated_at:type_name -> google.protobuf.Timestamp 7, // 4: fits.api.v1.UpdateLabels.update:type_name -> fits.api.v1.Labels - 12, // 5: fits.api.v1.UpdateMeta.updated_at:type_name -> google.protobuf.Timestamp + 13, // 5: fits.api.v1.UpdateMeta.updated_at:type_name -> google.protobuf.Timestamp 5, // 6: fits.api.v1.UpdateMeta.locking_strategy:type_name -> fits.api.v1.OptimisticLockingStrategy - 13, // 7: fits.api.v1.tenant_roles:extendee -> google.protobuf.MethodOptions - 13, // 8: fits.api.v1.project_roles:extendee -> google.protobuf.MethodOptions - 13, // 9: fits.api.v1.admin_roles:extendee -> google.protobuf.MethodOptions - 13, // 10: fits.api.v1.visibility:extendee -> google.protobuf.MethodOptions - 13, // 11: fits.api.v1.auditing:extendee -> google.protobuf.MethodOptions - 14, // 12: fits.api.v1.enum_string_value:extendee -> google.protobuf.EnumValueOptions + 14, // 7: fits.api.v1.tenant_roles:extendee -> google.protobuf.MethodOptions + 14, // 8: fits.api.v1.project_roles:extendee -> google.protobuf.MethodOptions + 14, // 9: fits.api.v1.admin_roles:extendee -> google.protobuf.MethodOptions + 14, // 10: fits.api.v1.visibility:extendee -> google.protobuf.MethodOptions + 14, // 11: fits.api.v1.auditing:extendee -> google.protobuf.MethodOptions + 15, // 12: fits.api.v1.enum_string_value:extendee -> google.protobuf.EnumValueOptions 0, // 13: fits.api.v1.tenant_roles:type_name -> fits.api.v1.TenantRole 1, // 14: fits.api.v1.project_roles:type_name -> fits.api.v1.ProjectRole 2, // 15: fits.api.v1.admin_roles:type_name -> fits.api.v1.AdminRole @@ -874,7 +944,7 @@ func file_fits_api_v1_common_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_v1_common_proto_rawDesc), len(file_fits_api_v1_common_proto_rawDesc)), NumEnums: 6, - NumMessages: 6, + NumMessages: 7, NumExtensions: 6, NumServices: 0, }, diff --git a/go/fits/api/vm/v1/location.pb.go b/go/fits/api/vm/v1/location.pb.go new file mode 100644 index 0000000..57f587c --- /dev/null +++ b/go/fits/api/vm/v1/location.pb.go @@ -0,0 +1,231 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.12 +// protoc (unknown) +// source: fits/api/vm/v1/location.proto + +package vmv1 + +import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" + _ "github.com/fi-ts/api/go/fits/api/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Location is the definition of an available datacenter location for VM instances +type Location struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Uuid of this location + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // title of the location + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Location) Reset() { + *x = Location{} + mi := &file_fits_api_vm_v1_location_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Location) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Location) ProtoMessage() {} + +func (x *Location) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_location_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Location.ProtoReflect.Descriptor instead. +func (*Location) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_location_proto_rawDescGZIP(), []int{0} +} + +func (x *Location) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *Location) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +// LocationServiceListRequest is the request payload for a location list request. +// The upstream nulink API accepts no body or parameters, so this is intentionally empty. +type LocationServiceListRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LocationServiceListRequest) Reset() { + *x = LocationServiceListRequest{} + mi := &file_fits_api_vm_v1_location_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LocationServiceListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LocationServiceListRequest) ProtoMessage() {} + +func (x *LocationServiceListRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_location_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LocationServiceListRequest.ProtoReflect.Descriptor instead. +func (*LocationServiceListRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_location_proto_rawDescGZIP(), []int{1} +} + +// LocationServiceListResponse is the response payload for a location list request +type LocationServiceListResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The available locations + Locations []*Location `protobuf:"bytes,1,rep,name=locations,proto3" json:"locations,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LocationServiceListResponse) Reset() { + *x = LocationServiceListResponse{} + mi := &file_fits_api_vm_v1_location_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LocationServiceListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LocationServiceListResponse) ProtoMessage() {} + +func (x *LocationServiceListResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_location_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LocationServiceListResponse.ProtoReflect.Descriptor instead. +func (*LocationServiceListResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_location_proto_rawDescGZIP(), []int{2} +} + +func (x *LocationServiceListResponse) GetLocations() []*Location { + if x != nil { + return x.Locations + } + return nil +} + +var File_fits_api_vm_v1_location_proto protoreflect.FileDescriptor + +const file_fits_api_vm_v1_location_proto_rawDesc = "" + + "\n" + + "\x1dfits/api/vm/v1/location.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\">\n" + + "\bLocation\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\"\x1c\n" + + "\x1aLocationServiceListRequest\"U\n" + + "\x1bLocationServiceListResponse\x126\n" + + "\tlocations\x18\x01 \x03(\v2\x18.fits.api.vm.v1.LocationR\tlocations2\x7f\n" + + "\x0fLocationService\x12l\n" + + "\x04List\x12*.fits.api.vm.v1.LocationServiceListRequest\x1a+.fits.api.vm.v1.LocationServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xab\x01\n" + + "\x12com.fits.api.vm.v1B\rLocationProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" + +var ( + file_fits_api_vm_v1_location_proto_rawDescOnce sync.Once + file_fits_api_vm_v1_location_proto_rawDescData []byte +) + +func file_fits_api_vm_v1_location_proto_rawDescGZIP() []byte { + file_fits_api_vm_v1_location_proto_rawDescOnce.Do(func() { + file_fits_api_vm_v1_location_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_location_proto_rawDesc), len(file_fits_api_vm_v1_location_proto_rawDesc))) + }) + return file_fits_api_vm_v1_location_proto_rawDescData +} + +var file_fits_api_vm_v1_location_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_fits_api_vm_v1_location_proto_goTypes = []any{ + (*Location)(nil), // 0: fits.api.vm.v1.Location + (*LocationServiceListRequest)(nil), // 1: fits.api.vm.v1.LocationServiceListRequest + (*LocationServiceListResponse)(nil), // 2: fits.api.vm.v1.LocationServiceListResponse +} +var file_fits_api_vm_v1_location_proto_depIdxs = []int32{ + 0, // 0: fits.api.vm.v1.LocationServiceListResponse.locations:type_name -> fits.api.vm.v1.Location + 1, // 1: fits.api.vm.v1.LocationService.List:input_type -> fits.api.vm.v1.LocationServiceListRequest + 2, // 2: fits.api.vm.v1.LocationService.List:output_type -> fits.api.vm.v1.LocationServiceListResponse + 2, // [2:3] is the sub-list for method output_type + 1, // [1:2] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_fits_api_vm_v1_location_proto_init() } +func file_fits_api_vm_v1_location_proto_init() { + if File_fits_api_vm_v1_location_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_location_proto_rawDesc), len(file_fits_api_vm_v1_location_proto_rawDesc)), + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_fits_api_vm_v1_location_proto_goTypes, + DependencyIndexes: file_fits_api_vm_v1_location_proto_depIdxs, + MessageInfos: file_fits_api_vm_v1_location_proto_msgTypes, + }.Build() + File_fits_api_vm_v1_location_proto = out.File + file_fits_api_vm_v1_location_proto_goTypes = nil + file_fits_api_vm_v1_location_proto_depIdxs = nil +} diff --git a/go/fits/api/vm/v1/os.pb.go b/go/fits/api/vm/v1/os.pb.go index 8d17e32..b2c5d5b 100644 --- a/go/fits/api/vm/v1/os.pb.go +++ b/go/fits/api/vm/v1/os.pb.go @@ -8,6 +8,7 @@ package vmv1 import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" + _ "github.com/fi-ts/api/go/fits/api/v1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -22,30 +23,35 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// Os is the definition of a potential OS of a VM instance -// TODO create a dedicated service -type Os struct { +// OS is the definition of an available OS for VM instances +type OS struct { state protoimpl.MessageState `protogen:"open.v1"` - // Uuid of this os - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Uuid of this OS + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Title of the OS + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + // Type of the OS + Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` + // Version of the OS + Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *Os) Reset() { - *x = Os{} +func (x *OS) Reset() { + *x = OS{} mi := &file_fits_api_vm_v1_os_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Os) String() string { +func (x *OS) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Os) ProtoMessage() {} +func (*OS) ProtoMessage() {} -func (x *Os) ProtoReflect() protoreflect.Message { +func (x *OS) ProtoReflect() protoreflect.Message { mi := &file_fits_api_vm_v1_os_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -57,25 +63,138 @@ func (x *Os) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Os.ProtoReflect.Descriptor instead. -func (*Os) Descriptor() ([]byte, []int) { +// Deprecated: Use OS.ProtoReflect.Descriptor instead. +func (*OS) Descriptor() ([]byte, []int) { return file_fits_api_vm_v1_os_proto_rawDescGZIP(), []int{0} } -func (x *Os) GetUuid() string { +func (x *OS) GetUuid() string { if x != nil { return x.Uuid } return "" } +func (x *OS) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *OS) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *OS) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +// OSServiceListRequest is the request payload for a OS list request. +// The upstream nulink API accepts no body or parameters, so this is intentionally empty. +type OSServiceListRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *OSServiceListRequest) Reset() { + *x = OSServiceListRequest{} + mi := &file_fits_api_vm_v1_os_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *OSServiceListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OSServiceListRequest) ProtoMessage() {} + +func (x *OSServiceListRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_os_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OSServiceListRequest.ProtoReflect.Descriptor instead. +func (*OSServiceListRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_os_proto_rawDescGZIP(), []int{1} +} + +// OSServiceListResponse is the response payload for a OS list request +type OSServiceListResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The available OSs + Oss []*OS `protobuf:"bytes,1,rep,name=oss,proto3" json:"oss,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *OSServiceListResponse) Reset() { + *x = OSServiceListResponse{} + mi := &file_fits_api_vm_v1_os_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *OSServiceListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OSServiceListResponse) ProtoMessage() {} + +func (x *OSServiceListResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_os_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OSServiceListResponse.ProtoReflect.Descriptor instead. +func (*OSServiceListResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_os_proto_rawDescGZIP(), []int{2} +} + +func (x *OSServiceListResponse) GetOss() []*OS { + if x != nil { + return x.Oss + } + return nil +} + var File_fits_api_vm_v1_os_proto protoreflect.FileDescriptor const file_fits_api_vm_v1_os_proto_rawDesc = "" + "\n" + - "\x17fits/api/vm/v1/os.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\"\"\n" + - "\x02Os\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuidB\xa5\x01\n" + + "\x17fits/api/vm/v1/os.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\"f\n" + + "\x02OS\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\x12\x12\n" + + "\x04type\x18\x03 \x01(\tR\x04type\x12\x18\n" + + "\aversion\x18\x04 \x01(\tR\aversion\"\x16\n" + + "\x14OSServiceListRequest\"=\n" + + "\x15OSServiceListResponse\x12$\n" + + "\x03oss\x18\x01 \x03(\v2\x12.fits.api.vm.v1.OSR\x03oss2m\n" + + "\tOSService\x12`\n" + + "\x04List\x12$.fits.api.vm.v1.OSServiceListRequest\x1a%.fits.api.vm.v1.OSServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xa5\x01\n" + "\x12com.fits.api.vm.v1B\aOsProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" var ( @@ -90,16 +209,21 @@ func file_fits_api_vm_v1_os_proto_rawDescGZIP() []byte { return file_fits_api_vm_v1_os_proto_rawDescData } -var file_fits_api_vm_v1_os_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_fits_api_vm_v1_os_proto_msgTypes = make([]protoimpl.MessageInfo, 3) var file_fits_api_vm_v1_os_proto_goTypes = []any{ - (*Os)(nil), // 0: fits.api.vm.v1.Os + (*OS)(nil), // 0: fits.api.vm.v1.OS + (*OSServiceListRequest)(nil), // 1: fits.api.vm.v1.OSServiceListRequest + (*OSServiceListResponse)(nil), // 2: fits.api.vm.v1.OSServiceListResponse } var file_fits_api_vm_v1_os_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name + 0, // 0: fits.api.vm.v1.OSServiceListResponse.oss:type_name -> fits.api.vm.v1.OS + 1, // 1: fits.api.vm.v1.OSService.List:input_type -> fits.api.vm.v1.OSServiceListRequest + 2, // 2: fits.api.vm.v1.OSService.List:output_type -> fits.api.vm.v1.OSServiceListResponse + 2, // [2:3] is the sub-list for method output_type + 1, // [1:2] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name } func init() { file_fits_api_vm_v1_os_proto_init() } @@ -113,9 +237,9 @@ func file_fits_api_vm_v1_os_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_os_proto_rawDesc), len(file_fits_api_vm_v1_os_proto_rawDesc)), NumEnums: 0, - NumMessages: 1, + NumMessages: 3, NumExtensions: 0, - NumServices: 0, + NumServices: 1, }, GoTypes: file_fits_api_vm_v1_os_proto_goTypes, DependencyIndexes: file_fits_api_vm_v1_os_proto_depIdxs, diff --git a/go/fits/api/vm/v1/service.pb.go b/go/fits/api/vm/v1/service.pb.go new file mode 100644 index 0000000..d76ed38 --- /dev/null +++ b/go/fits/api/vm/v1/service.pb.go @@ -0,0 +1,231 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.12 +// protoc (unknown) +// source: fits/api/vm/v1/service.proto + +package vmv1 + +import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" + _ "github.com/fi-ts/api/go/fits/api/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// TODO what is a service? +type Service struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Uuid of this Service + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // title of the Service + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Service) Reset() { + *x = Service{} + mi := &file_fits_api_vm_v1_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Service) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Service) ProtoMessage() {} + +func (x *Service) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_service_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Service.ProtoReflect.Descriptor instead. +func (*Service) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_service_proto_rawDescGZIP(), []int{0} +} + +func (x *Service) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *Service) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +// ServiceServiceListRequest is the request payload for a service list request. +// The upstream nulink API accepts no body or parameters, so this is intentionally empty. +type ServiceServiceListRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ServiceServiceListRequest) Reset() { + *x = ServiceServiceListRequest{} + mi := &file_fits_api_vm_v1_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ServiceServiceListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceServiceListRequest) ProtoMessage() {} + +func (x *ServiceServiceListRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_service_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServiceServiceListRequest.ProtoReflect.Descriptor instead. +func (*ServiceServiceListRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_service_proto_rawDescGZIP(), []int{1} +} + +// ServiceServiceListResponse is the response payload for a service list request +type ServiceServiceListResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The available services + Services []*Service `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ServiceServiceListResponse) Reset() { + *x = ServiceServiceListResponse{} + mi := &file_fits_api_vm_v1_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ServiceServiceListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceServiceListResponse) ProtoMessage() {} + +func (x *ServiceServiceListResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_service_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServiceServiceListResponse.ProtoReflect.Descriptor instead. +func (*ServiceServiceListResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_service_proto_rawDescGZIP(), []int{2} +} + +func (x *ServiceServiceListResponse) GetServices() []*Service { + if x != nil { + return x.Services + } + return nil +} + +var File_fits_api_vm_v1_service_proto protoreflect.FileDescriptor + +const file_fits_api_vm_v1_service_proto_rawDesc = "" + + "\n" + + "\x1cfits/api/vm/v1/service.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\"=\n" + + "\aService\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\"\x1b\n" + + "\x19ServiceServiceListRequest\"Q\n" + + "\x1aServiceServiceListResponse\x123\n" + + "\bservices\x18\x01 \x03(\v2\x17.fits.api.vm.v1.ServiceR\bservices2|\n" + + "\x0eServiceService\x12j\n" + + "\x04List\x12).fits.api.vm.v1.ServiceServiceListRequest\x1a*.fits.api.vm.v1.ServiceServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xaa\x01\n" + + "\x12com.fits.api.vm.v1B\fServiceProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" + +var ( + file_fits_api_vm_v1_service_proto_rawDescOnce sync.Once + file_fits_api_vm_v1_service_proto_rawDescData []byte +) + +func file_fits_api_vm_v1_service_proto_rawDescGZIP() []byte { + file_fits_api_vm_v1_service_proto_rawDescOnce.Do(func() { + file_fits_api_vm_v1_service_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_service_proto_rawDesc), len(file_fits_api_vm_v1_service_proto_rawDesc))) + }) + return file_fits_api_vm_v1_service_proto_rawDescData +} + +var file_fits_api_vm_v1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_fits_api_vm_v1_service_proto_goTypes = []any{ + (*Service)(nil), // 0: fits.api.vm.v1.Service + (*ServiceServiceListRequest)(nil), // 1: fits.api.vm.v1.ServiceServiceListRequest + (*ServiceServiceListResponse)(nil), // 2: fits.api.vm.v1.ServiceServiceListResponse +} +var file_fits_api_vm_v1_service_proto_depIdxs = []int32{ + 0, // 0: fits.api.vm.v1.ServiceServiceListResponse.services:type_name -> fits.api.vm.v1.Service + 1, // 1: fits.api.vm.v1.ServiceService.List:input_type -> fits.api.vm.v1.ServiceServiceListRequest + 2, // 2: fits.api.vm.v1.ServiceService.List:output_type -> fits.api.vm.v1.ServiceServiceListResponse + 2, // [2:3] is the sub-list for method output_type + 1, // [1:2] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_fits_api_vm_v1_service_proto_init() } +func file_fits_api_vm_v1_service_proto_init() { + if File_fits_api_vm_v1_service_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_service_proto_rawDesc), len(file_fits_api_vm_v1_service_proto_rawDesc)), + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_fits_api_vm_v1_service_proto_goTypes, + DependencyIndexes: file_fits_api_vm_v1_service_proto_depIdxs, + MessageInfos: file_fits_api_vm_v1_service_proto_msgTypes, + }.Build() + File_fits_api_vm_v1_service_proto = out.File + file_fits_api_vm_v1_service_proto_goTypes = nil + file_fits_api_vm_v1_service_proto_depIdxs = nil +} diff --git a/go/fits/api/vm/v1/stagetype.pb.go b/go/fits/api/vm/v1/stagetype.pb.go new file mode 100644 index 0000000..79de608 --- /dev/null +++ b/go/fits/api/vm/v1/stagetype.pb.go @@ -0,0 +1,260 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.12 +// protoc (unknown) +// source: fits/api/vm/v1/stagetype.proto + +package vmv1 + +import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" + v1 "github.com/fi-ts/api/go/fits/api/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// TODO what is a stage type? +// Maps to the upstream NucleusDBStageTypes model. +// TODO evaluate whether the uuid is really optional; the upstream API spec does not +// make this clear, so we validate it strictly for now. +type StageType struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Uuid of this stage type + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // title of the stage type + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StageType) Reset() { + *x = StageType{} + mi := &file_fits_api_vm_v1_stagetype_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StageType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StageType) ProtoMessage() {} + +func (x *StageType) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_stagetype_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StageType.ProtoReflect.Descriptor instead. +func (*StageType) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_stagetype_proto_rawDescGZIP(), []int{0} +} + +func (x *StageType) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *StageType) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +// StageTypeServiceListRequest is the request payload for a stage type list request. +// Maps to the upstream TenantInputModel. +type StageTypeServiceListRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Tenant to list available stage types for + TenantUuid string `protobuf:"bytes,1,opt,name=tenant_uuid,json=tenantUuid,proto3" json:"tenant_uuid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StageTypeServiceListRequest) Reset() { + *x = StageTypeServiceListRequest{} + mi := &file_fits_api_vm_v1_stagetype_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StageTypeServiceListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StageTypeServiceListRequest) ProtoMessage() {} + +func (x *StageTypeServiceListRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_stagetype_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StageTypeServiceListRequest.ProtoReflect.Descriptor instead. +func (*StageTypeServiceListRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_stagetype_proto_rawDescGZIP(), []int{1} +} + +func (x *StageTypeServiceListRequest) GetTenantUuid() string { + if x != nil { + return x.TenantUuid + } + return "" +} + +// StageTypeServiceListResponse is the response payload for a stage type list request +type StageTypeServiceListResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The available stage types + Stagetypes []*StageType `protobuf:"bytes,1,rep,name=stagetypes,proto3" json:"stagetypes,omitempty"` + // Validation errors returned by the upstream API when the request is rejected (HTTP 422) + // TODO this is just a test + ValidationErrors []*v1.ValidationError `protobuf:"bytes,2,rep,name=validation_errors,json=validationErrors,proto3" json:"validation_errors,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StageTypeServiceListResponse) Reset() { + *x = StageTypeServiceListResponse{} + mi := &file_fits_api_vm_v1_stagetype_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StageTypeServiceListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StageTypeServiceListResponse) ProtoMessage() {} + +func (x *StageTypeServiceListResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_stagetype_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StageTypeServiceListResponse.ProtoReflect.Descriptor instead. +func (*StageTypeServiceListResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_stagetype_proto_rawDescGZIP(), []int{2} +} + +func (x *StageTypeServiceListResponse) GetStagetypes() []*StageType { + if x != nil { + return x.Stagetypes + } + return nil +} + +func (x *StageTypeServiceListResponse) GetValidationErrors() []*v1.ValidationError { + if x != nil { + return x.ValidationErrors + } + return nil +} + +var File_fits_api_vm_v1_stagetype_proto protoreflect.FileDescriptor + +const file_fits_api_vm_v1_stagetype_proto_rawDesc = "" + + "\n" + + "\x1efits/api/vm/v1/stagetype.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\"?\n" + + "\tStageType\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\"H\n" + + "\x1bStageTypeServiceListRequest\x12)\n" + + "\vtenant_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\n" + + "tenantUuid\"\xa4\x01\n" + + "\x1cStageTypeServiceListResponse\x129\n" + + "\n" + + "stagetypes\x18\x01 \x03(\v2\x19.fits.api.vm.v1.StageTypeR\n" + + "stagetypes\x12I\n" + + "\x11validation_errors\x18\x02 \x03(\v2\x1c.fits.api.v1.ValidationErrorR\x10validationErrors2\x82\x01\n" + + "\x10StageTypeService\x12n\n" + + "\x04List\x12+.fits.api.vm.v1.StageTypeServiceListRequest\x1a,.fits.api.vm.v1.StageTypeServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xac\x01\n" + + "\x12com.fits.api.vm.v1B\x0eStagetypeProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" + +var ( + file_fits_api_vm_v1_stagetype_proto_rawDescOnce sync.Once + file_fits_api_vm_v1_stagetype_proto_rawDescData []byte +) + +func file_fits_api_vm_v1_stagetype_proto_rawDescGZIP() []byte { + file_fits_api_vm_v1_stagetype_proto_rawDescOnce.Do(func() { + file_fits_api_vm_v1_stagetype_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_stagetype_proto_rawDesc), len(file_fits_api_vm_v1_stagetype_proto_rawDesc))) + }) + return file_fits_api_vm_v1_stagetype_proto_rawDescData +} + +var file_fits_api_vm_v1_stagetype_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_fits_api_vm_v1_stagetype_proto_goTypes = []any{ + (*StageType)(nil), // 0: fits.api.vm.v1.StageType + (*StageTypeServiceListRequest)(nil), // 1: fits.api.vm.v1.StageTypeServiceListRequest + (*StageTypeServiceListResponse)(nil), // 2: fits.api.vm.v1.StageTypeServiceListResponse + (*v1.ValidationError)(nil), // 3: fits.api.v1.ValidationError +} +var file_fits_api_vm_v1_stagetype_proto_depIdxs = []int32{ + 0, // 0: fits.api.vm.v1.StageTypeServiceListResponse.stagetypes:type_name -> fits.api.vm.v1.StageType + 3, // 1: fits.api.vm.v1.StageTypeServiceListResponse.validation_errors:type_name -> fits.api.v1.ValidationError + 1, // 2: fits.api.vm.v1.StageTypeService.List:input_type -> fits.api.vm.v1.StageTypeServiceListRequest + 2, // 3: fits.api.vm.v1.StageTypeService.List:output_type -> fits.api.vm.v1.StageTypeServiceListResponse + 3, // [3:4] is the sub-list for method output_type + 2, // [2:3] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_fits_api_vm_v1_stagetype_proto_init() } +func file_fits_api_vm_v1_stagetype_proto_init() { + if File_fits_api_vm_v1_stagetype_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_stagetype_proto_rawDesc), len(file_fits_api_vm_v1_stagetype_proto_rawDesc)), + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_fits_api_vm_v1_stagetype_proto_goTypes, + DependencyIndexes: file_fits_api_vm_v1_stagetype_proto_depIdxs, + MessageInfos: file_fits_api_vm_v1_stagetype_proto_msgTypes, + }.Build() + File_fits_api_vm_v1_stagetype_proto = out.File + file_fits_api_vm_v1_stagetype_proto_goTypes = nil + file_fits_api_vm_v1_stagetype_proto_depIdxs = nil +} diff --git a/go/fits/api/vm/v1/vlan.pb.go b/go/fits/api/vm/v1/vlan.pb.go new file mode 100644 index 0000000..5319329 --- /dev/null +++ b/go/fits/api/vm/v1/vlan.pb.go @@ -0,0 +1,393 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.12 +// protoc (unknown) +// source: fits/api/vm/v1/vlan.proto + +package vmv1 + +import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" + v1 "github.com/fi-ts/api/go/fits/api/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Vlan is a VLAN that a VM can be connected to. +// Maps to the upstream NucleusDBVlans model. +// TODO evaluate which of the uuid fields are really optional; the upstream API +// spec does not make this clear, so we validate them strictly for now. +type Vlan struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Uuid of this VLAN + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Id of this VLAN + Id int32 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"` + // Title of the subnet this VLAN belongs to + SubnetTitle string `protobuf:"bytes,3,opt,name=subnet_title,json=subnetTitle,proto3" json:"subnet_title,omitempty"` + // CIDR of the subnet this VLAN belongs to + Subnet string `protobuf:"bytes,4,opt,name=subnet,proto3" json:"subnet,omitempty"` + // Subnetmask of this VLAN + Subnetmask string `protobuf:"bytes,5,opt,name=subnetmask,proto3" json:"subnetmask,omitempty"` + // Gateway of this VLAN + Gateway string `protobuf:"bytes,6,opt,name=gateway,proto3" json:"gateway,omitempty"` + // Start of the usable IP range of this VLAN + IpRangeStart string `protobuf:"bytes,7,opt,name=ip_range_start,json=ipRangeStart,proto3" json:"ip_range_start,omitempty"` + // End of the usable IP range of this VLAN + IpRangeEnd string `protobuf:"bytes,8,opt,name=ip_range_end,json=ipRangeEnd,proto3" json:"ip_range_end,omitempty"` + // Whether DHCP is used on this VLAN + UseDhcp bool `protobuf:"varint,9,opt,name=use_dhcp,json=useDhcp,proto3" json:"use_dhcp,omitempty"` + // Title of the pod this VLAN belongs to + PodTitle string `protobuf:"bytes,10,opt,name=pod_title,json=podTitle,proto3" json:"pod_title,omitempty"` + // Uuid of the pod this VLAN belongs to + PodUuid string `protobuf:"bytes,11,opt,name=pod_uuid,json=podUuid,proto3" json:"pod_uuid,omitempty"` + // Title of the stage type of this VLAN + StageTypeTitle string `protobuf:"bytes,12,opt,name=stage_type_title,json=stageTypeTitle,proto3" json:"stage_type_title,omitempty"` + // Uuid of the stage type of this VLAN + StageTypeUuid string `protobuf:"bytes,13,opt,name=stage_type_uuid,json=stageTypeUuid,proto3" json:"stage_type_uuid,omitempty"` + // Uuid of the tenant this VLAN belongs to + TenantUuid string `protobuf:"bytes,14,opt,name=tenant_uuid,json=tenantUuid,proto3" json:"tenant_uuid,omitempty"` + // Title of the tenant this VLAN belongs to + TenantTitle string `protobuf:"bytes,15,opt,name=tenant_title,json=tenantTitle,proto3" json:"tenant_title,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Vlan) Reset() { + *x = Vlan{} + mi := &file_fits_api_vm_v1_vlan_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Vlan) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Vlan) ProtoMessage() {} + +func (x *Vlan) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vlan_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Vlan.ProtoReflect.Descriptor instead. +func (*Vlan) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vlan_proto_rawDescGZIP(), []int{0} +} + +func (x *Vlan) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *Vlan) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *Vlan) GetSubnetTitle() string { + if x != nil { + return x.SubnetTitle + } + return "" +} + +func (x *Vlan) GetSubnet() string { + if x != nil { + return x.Subnet + } + return "" +} + +func (x *Vlan) GetSubnetmask() string { + if x != nil { + return x.Subnetmask + } + return "" +} + +func (x *Vlan) GetGateway() string { + if x != nil { + return x.Gateway + } + return "" +} + +func (x *Vlan) GetIpRangeStart() string { + if x != nil { + return x.IpRangeStart + } + return "" +} + +func (x *Vlan) GetIpRangeEnd() string { + if x != nil { + return x.IpRangeEnd + } + return "" +} + +func (x *Vlan) GetUseDhcp() bool { + if x != nil { + return x.UseDhcp + } + return false +} + +func (x *Vlan) GetPodTitle() string { + if x != nil { + return x.PodTitle + } + return "" +} + +func (x *Vlan) GetPodUuid() string { + if x != nil { + return x.PodUuid + } + return "" +} + +func (x *Vlan) GetStageTypeTitle() string { + if x != nil { + return x.StageTypeTitle + } + return "" +} + +func (x *Vlan) GetStageTypeUuid() string { + if x != nil { + return x.StageTypeUuid + } + return "" +} + +func (x *Vlan) GetTenantUuid() string { + if x != nil { + return x.TenantUuid + } + return "" +} + +func (x *Vlan) GetTenantTitle() string { + if x != nil { + return x.TenantTitle + } + return "" +} + +// VlanServiceListRequest is the request payload for a VLAN list request. +// Maps to the upstream TenantInputModel. +type VlanServiceListRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Tenant to list available VLANs for + TenantUuid string `protobuf:"bytes,1,opt,name=tenant_uuid,json=tenantUuid,proto3" json:"tenant_uuid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VlanServiceListRequest) Reset() { + *x = VlanServiceListRequest{} + mi := &file_fits_api_vm_v1_vlan_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VlanServiceListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VlanServiceListRequest) ProtoMessage() {} + +func (x *VlanServiceListRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vlan_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VlanServiceListRequest.ProtoReflect.Descriptor instead. +func (*VlanServiceListRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vlan_proto_rawDescGZIP(), []int{1} +} + +func (x *VlanServiceListRequest) GetTenantUuid() string { + if x != nil { + return x.TenantUuid + } + return "" +} + +// VlanServiceListResponse is the response payload for a VLAN list request +type VlanServiceListResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The available VLANs + Vlans []*Vlan `protobuf:"bytes,1,rep,name=vlans,proto3" json:"vlans,omitempty"` + // Validation errors returned by the upstream API when the request is rejected (HTTP 422) + // TODO this is just a test + ValidationErrors []*v1.ValidationError `protobuf:"bytes,2,rep,name=validation_errors,json=validationErrors,proto3" json:"validation_errors,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VlanServiceListResponse) Reset() { + *x = VlanServiceListResponse{} + mi := &file_fits_api_vm_v1_vlan_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VlanServiceListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VlanServiceListResponse) ProtoMessage() {} + +func (x *VlanServiceListResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vlan_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VlanServiceListResponse.ProtoReflect.Descriptor instead. +func (*VlanServiceListResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vlan_proto_rawDescGZIP(), []int{2} +} + +func (x *VlanServiceListResponse) GetVlans() []*Vlan { + if x != nil { + return x.Vlans + } + return nil +} + +func (x *VlanServiceListResponse) GetValidationErrors() []*v1.ValidationError { + if x != nil { + return x.ValidationErrors + } + return nil +} + +var File_fits_api_vm_v1_vlan_proto protoreflect.FileDescriptor + +const file_fits_api_vm_v1_vlan_proto_rawDesc = "" + + "\n" + + "\x19fits/api/vm/v1/vlan.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\"\xf8\x03\n" + + "\x04Vlan\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x0e\n" + + "\x02id\x18\x02 \x01(\x05R\x02id\x12!\n" + + "\fsubnet_title\x18\x03 \x01(\tR\vsubnetTitle\x12\x16\n" + + "\x06subnet\x18\x04 \x01(\tR\x06subnet\x12\x1e\n" + + "\n" + + "subnetmask\x18\x05 \x01(\tR\n" + + "subnetmask\x12\x18\n" + + "\agateway\x18\x06 \x01(\tR\agateway\x12$\n" + + "\x0eip_range_start\x18\a \x01(\tR\fipRangeStart\x12 \n" + + "\fip_range_end\x18\b \x01(\tR\n" + + "ipRangeEnd\x12\x19\n" + + "\buse_dhcp\x18\t \x01(\bR\auseDhcp\x12\x1b\n" + + "\tpod_title\x18\n" + + " \x01(\tR\bpodTitle\x12#\n" + + "\bpod_uuid\x18\v \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\apodUuid\x12(\n" + + "\x10stage_type_title\x18\f \x01(\tR\x0estageTypeTitle\x120\n" + + "\x0fstage_type_uuid\x18\r \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12)\n" + + "\vtenant_uuid\x18\x0e \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\n" + + "tenantUuid\x12!\n" + + "\ftenant_title\x18\x0f \x01(\tR\vtenantTitle\"C\n" + + "\x16VlanServiceListRequest\x12)\n" + + "\vtenant_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\n" + + "tenantUuid\"\x90\x01\n" + + "\x17VlanServiceListResponse\x12*\n" + + "\x05vlans\x18\x01 \x03(\v2\x14.fits.api.vm.v1.VlanR\x05vlans\x12I\n" + + "\x11validation_errors\x18\x02 \x03(\v2\x1c.fits.api.v1.ValidationErrorR\x10validationErrors2s\n" + + "\vVlanService\x12d\n" + + "\x04List\x12&.fits.api.vm.v1.VlanServiceListRequest\x1a'.fits.api.vm.v1.VlanServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xa7\x01\n" + + "\x12com.fits.api.vm.v1B\tVlanProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" + +var ( + file_fits_api_vm_v1_vlan_proto_rawDescOnce sync.Once + file_fits_api_vm_v1_vlan_proto_rawDescData []byte +) + +func file_fits_api_vm_v1_vlan_proto_rawDescGZIP() []byte { + file_fits_api_vm_v1_vlan_proto_rawDescOnce.Do(func() { + file_fits_api_vm_v1_vlan_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_vlan_proto_rawDesc), len(file_fits_api_vm_v1_vlan_proto_rawDesc))) + }) + return file_fits_api_vm_v1_vlan_proto_rawDescData +} + +var file_fits_api_vm_v1_vlan_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_fits_api_vm_v1_vlan_proto_goTypes = []any{ + (*Vlan)(nil), // 0: fits.api.vm.v1.Vlan + (*VlanServiceListRequest)(nil), // 1: fits.api.vm.v1.VlanServiceListRequest + (*VlanServiceListResponse)(nil), // 2: fits.api.vm.v1.VlanServiceListResponse + (*v1.ValidationError)(nil), // 3: fits.api.v1.ValidationError +} +var file_fits_api_vm_v1_vlan_proto_depIdxs = []int32{ + 0, // 0: fits.api.vm.v1.VlanServiceListResponse.vlans:type_name -> fits.api.vm.v1.Vlan + 3, // 1: fits.api.vm.v1.VlanServiceListResponse.validation_errors:type_name -> fits.api.v1.ValidationError + 1, // 2: fits.api.vm.v1.VlanService.List:input_type -> fits.api.vm.v1.VlanServiceListRequest + 2, // 3: fits.api.vm.v1.VlanService.List:output_type -> fits.api.vm.v1.VlanServiceListResponse + 3, // [3:4] is the sub-list for method output_type + 2, // [2:3] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_fits_api_vm_v1_vlan_proto_init() } +func file_fits_api_vm_v1_vlan_proto_init() { + if File_fits_api_vm_v1_vlan_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_vlan_proto_rawDesc), len(file_fits_api_vm_v1_vlan_proto_rawDesc)), + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_fits_api_vm_v1_vlan_proto_goTypes, + DependencyIndexes: file_fits_api_vm_v1_vlan_proto_depIdxs, + MessageInfos: file_fits_api_vm_v1_vlan_proto_msgTypes, + }.Build() + File_fits_api_vm_v1_vlan_proto = out.File + file_fits_api_vm_v1_vlan_proto_goTypes = nil + file_fits_api_vm_v1_vlan_proto_depIdxs = nil +} diff --git a/go/fits/api/vm/v1/vm.pb.go b/go/fits/api/vm/v1/vm.pb.go index 855ea2d..21b62ef 100644 --- a/go/fits/api/vm/v1/vm.pb.go +++ b/go/fits/api/vm/v1/vm.pb.go @@ -26,13 +26,13 @@ const ( // VM Instance Messages type VMInstance struct { state protoimpl.MessageState `protogen:"open.v1"` - // Uuid of this vm + // Uuid of this VM Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // Meta for this vm + // Meta for this VM Meta *v1.Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` - // Name of this vm + // Name of this VM Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - // Project where this vm address belongs to + // Project where this VM belongs to Project string `protobuf:"bytes,4,opt,name=project,proto3" json:"project,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -99,9 +99,9 @@ func (x *VMInstance) GetProject() string { // VMServiceGetRequest TODO type VMServiceGetRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // Uuid of this vm + // Uuid of this VM Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // Project where this vm address belongs to + // Project where this VM belongs to Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -154,7 +154,7 @@ func (x *VMServiceGetRequest) GetProject() string { // VMServiceGetResponse TODO type VMServiceGetResponse struct { state protoimpl.MessageState `protogen:"open.v1"` - // The vm + // The VM Vm *VMInstance `protobuf:"bytes,1,opt,name=vm,proto3" json:"vm,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -200,23 +200,23 @@ func (x *VMServiceGetResponse) GetVm() *VMInstance { // VMServiceCreateRequest TODO type VMServiceCreateRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // Project of the vm - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - // Name of the vm + // Project of the VM + ProjectUuid string `protobuf:"bytes,1,opt,name=project_uuid,json=projectUuid,proto3" json:"project_uuid,omitempty"` + // Name of the VM Name *string `protobuf:"bytes,2,opt,name=name,proto3,oneof" json:"name,omitempty"` - // Number of CPUs of this vm + // Number of CPUs of this VM Cpu uint32 `protobuf:"varint,3,opt,name=cpu,proto3" json:"cpu,omitempty"` - // Ram of the vm in GB + // RAM of the VM in GB Ram uint32 `protobuf:"varint,4,opt,name=ram,proto3" json:"ram,omitempty"` - // OS Uuid of the OS to install in the vm instance + // OS Uuid of the OS to install in the VM instance OsUuid string `protobuf:"bytes,5,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` - // VLAN Uuid of the VLAN to install in the vm instance into + // VLAN Uuid of the VLAN to install in the VM instance into VlanUuid string `protobuf:"bytes,6,opt,name=vlan_uuid,json=vlanUuid,proto3" json:"vlan_uuid,omitempty"` - // Location Uuid of the datacenter location to install in the vm instance + // Location Uuid of the datacenter location to install in the VM instance LocationUuid string `protobuf:"bytes,7,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` - // Contact Uuid of who is the responsible contact of the vm instance + // Contact Uuid of who is the responsible contact of the VM instance ContactUuid string `protobuf:"bytes,8,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` - // List of disks for this vm + // List of disks for this VM Disks []*Disk `protobuf:"bytes,9,rep,name=disks,proto3" json:"disks,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -252,9 +252,9 @@ func (*VMServiceCreateRequest) Descriptor() ([]byte, []int) { return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{3} } -func (x *VMServiceCreateRequest) GetProject() string { +func (x *VMServiceCreateRequest) GetProjectUuid() string { if x != nil { - return x.Project + return x.ProjectUuid } return "" } @@ -437,7 +437,7 @@ func (*VMServiceCreateResponse) Descriptor() ([]byte, []int) { // VMServiceUpdateRequest TODO type VMServiceUpdateRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // Project of the vm + // Project of the VM Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` // UpdateMeta contains the timestamp and strategy to be used in this update request. UpdateMeta *v1.UpdateMeta `protobuf:"bytes,2,opt,name=update_meta,json=updateMeta,proto3" json:"update_meta,omitempty"` @@ -529,7 +529,7 @@ func (*VMServiceUpdateResponse) Descriptor() ([]byte, []int) { // VMServiceListRequest TODO type VMServiceListRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // Project of the vm + // Project of the VM Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -612,7 +612,7 @@ func (*VMServiceListResponse) Descriptor() ([]byte, []int) { // VMServiceDeleteRequest TODO type VMServiceDeleteRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // Project of the vm + // Project of the VM Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -707,9 +707,9 @@ const file_fits_api_vm_v1_vm_proto_rawDesc = "" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"B\n" + "\x14VMServiceGetResponse\x12*\n" + - "\x02vm\x18\x01 \x01(\v2\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"\xe1\x02\n" + - "\x16VMServiceCreateRequest\x12\"\n" + - "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12$\n" + + "\x02vm\x18\x01 \x01(\v2\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"\xea\x02\n" + + "\x16VMServiceCreateRequest\x12+\n" + + "\fproject_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vprojectUuid\x12$\n" + "\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x10\n" + "\x03cpu\x18\x03 \x01(\rR\x03cpu\x12\x10\n" + "\x03ram\x18\x04 \x01(\rR\x03ram\x12!\n" + diff --git a/go/fits/api/vm/v1/vmv1connect/location.connect.go b/go/fits/api/vm/v1/vmv1connect/location.connect.go new file mode 100644 index 0000000..d40ad9f --- /dev/null +++ b/go/fits/api/vm/v1/vmv1connect/location.connect.go @@ -0,0 +1,114 @@ +// Code generated by protoc-gen-connect-go. DO NOT EDIT. +// +// Source: fits/api/vm/v1/location.proto + +package vmv1connect + +import ( + connect "connectrpc.com/connect" + context "context" + errors "errors" + v1 "github.com/fi-ts/api/go/fits/api/vm/v1" + http "net/http" + strings "strings" +) + +// This is a compile-time assertion to ensure that this generated file and the connect package are +// compatible. If you get a compiler error that this constant is not defined, this code was +// generated with a version of connect newer than the one compiled into your binary. You can fix the +// problem by either regenerating this code with an older version of connect or updating the connect +// version compiled into your binary. +const _ = connect.IsAtLeastVersion1_13_0 + +const ( + // LocationServiceName is the fully-qualified name of the LocationService service. + LocationServiceName = "fits.api.vm.v1.LocationService" +) + +// These constants are the fully-qualified names of the RPCs defined in this package. They're +// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route. +// +// Note that these are different from the fully-qualified method names used by +// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to +// reflection-formatted method names, remove the leading slash and convert the remaining slash to a +// period. +const ( + // LocationServiceListProcedure is the fully-qualified name of the LocationService's List RPC. + LocationServiceListProcedure = "/fits.api.vm.v1.LocationService/List" +) + +// LocationServiceClient is a client for the fits.api.vm.v1.LocationService service. +type LocationServiceClient interface { + // Returns a list of all datacenter locations. + List(context.Context, *v1.LocationServiceListRequest) (*v1.LocationServiceListResponse, error) +} + +// NewLocationServiceClient constructs a client for the fits.api.vm.v1.LocationService service. By +// default, it uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, +// and sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the +// connect.WithGRPC() or connect.WithGRPCWeb() options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewLocationServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) LocationServiceClient { + baseURL = strings.TrimRight(baseURL, "/") + locationServiceMethods := v1.File_fits_api_vm_v1_location_proto.Services().ByName("LocationService").Methods() + return &locationServiceClient{ + list: connect.NewClient[v1.LocationServiceListRequest, v1.LocationServiceListResponse]( + httpClient, + baseURL+LocationServiceListProcedure, + connect.WithSchema(locationServiceMethods.ByName("List")), + connect.WithClientOptions(opts...), + ), + } +} + +// locationServiceClient implements LocationServiceClient. +type locationServiceClient struct { + list *connect.Client[v1.LocationServiceListRequest, v1.LocationServiceListResponse] +} + +// List calls fits.api.vm.v1.LocationService.List. +func (c *locationServiceClient) List(ctx context.Context, req *v1.LocationServiceListRequest) (*v1.LocationServiceListResponse, error) { + response, err := c.list.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// LocationServiceHandler is an implementation of the fits.api.vm.v1.LocationService service. +type LocationServiceHandler interface { + // Returns a list of all datacenter locations. + List(context.Context, *v1.LocationServiceListRequest) (*v1.LocationServiceListResponse, error) +} + +// NewLocationServiceHandler builds an HTTP handler from the service implementation. It returns the +// path on which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewLocationServiceHandler(svc LocationServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { + locationServiceMethods := v1.File_fits_api_vm_v1_location_proto.Services().ByName("LocationService").Methods() + locationServiceListHandler := connect.NewUnaryHandlerSimple( + LocationServiceListProcedure, + svc.List, + connect.WithSchema(locationServiceMethods.ByName("List")), + connect.WithHandlerOptions(opts...), + ) + return "/fits.api.vm.v1.LocationService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case LocationServiceListProcedure: + locationServiceListHandler.ServeHTTP(w, r) + default: + http.NotFound(w, r) + } + }) +} + +// UnimplementedLocationServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedLocationServiceHandler struct{} + +func (UnimplementedLocationServiceHandler) List(context.Context, *v1.LocationServiceListRequest) (*v1.LocationServiceListResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.LocationService.List is not implemented")) +} diff --git a/go/fits/api/vm/v1/vmv1connect/os.connect.go b/go/fits/api/vm/v1/vmv1connect/os.connect.go new file mode 100644 index 0000000..2a64dfc --- /dev/null +++ b/go/fits/api/vm/v1/vmv1connect/os.connect.go @@ -0,0 +1,114 @@ +// Code generated by protoc-gen-connect-go. DO NOT EDIT. +// +// Source: fits/api/vm/v1/os.proto + +package vmv1connect + +import ( + connect "connectrpc.com/connect" + context "context" + errors "errors" + v1 "github.com/fi-ts/api/go/fits/api/vm/v1" + http "net/http" + strings "strings" +) + +// This is a compile-time assertion to ensure that this generated file and the connect package are +// compatible. If you get a compiler error that this constant is not defined, this code was +// generated with a version of connect newer than the one compiled into your binary. You can fix the +// problem by either regenerating this code with an older version of connect or updating the connect +// version compiled into your binary. +const _ = connect.IsAtLeastVersion1_13_0 + +const ( + // OSServiceName is the fully-qualified name of the OSService service. + OSServiceName = "fits.api.vm.v1.OSService" +) + +// These constants are the fully-qualified names of the RPCs defined in this package. They're +// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route. +// +// Note that these are different from the fully-qualified method names used by +// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to +// reflection-formatted method names, remove the leading slash and convert the remaining slash to a +// period. +const ( + // OSServiceListProcedure is the fully-qualified name of the OSService's List RPC. + OSServiceListProcedure = "/fits.api.vm.v1.OSService/List" +) + +// OSServiceClient is a client for the fits.api.vm.v1.OSService service. +type OSServiceClient interface { + // Returns a list of all OSs. + List(context.Context, *v1.OSServiceListRequest) (*v1.OSServiceListResponse, error) +} + +// NewOSServiceClient constructs a client for the fits.api.vm.v1.OSService service. By default, it +// uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends +// uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or +// connect.WithGRPCWeb() options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewOSServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) OSServiceClient { + baseURL = strings.TrimRight(baseURL, "/") + oSServiceMethods := v1.File_fits_api_vm_v1_os_proto.Services().ByName("OSService").Methods() + return &oSServiceClient{ + list: connect.NewClient[v1.OSServiceListRequest, v1.OSServiceListResponse]( + httpClient, + baseURL+OSServiceListProcedure, + connect.WithSchema(oSServiceMethods.ByName("List")), + connect.WithClientOptions(opts...), + ), + } +} + +// oSServiceClient implements OSServiceClient. +type oSServiceClient struct { + list *connect.Client[v1.OSServiceListRequest, v1.OSServiceListResponse] +} + +// List calls fits.api.vm.v1.OSService.List. +func (c *oSServiceClient) List(ctx context.Context, req *v1.OSServiceListRequest) (*v1.OSServiceListResponse, error) { + response, err := c.list.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// OSServiceHandler is an implementation of the fits.api.vm.v1.OSService service. +type OSServiceHandler interface { + // Returns a list of all OSs. + List(context.Context, *v1.OSServiceListRequest) (*v1.OSServiceListResponse, error) +} + +// NewOSServiceHandler builds an HTTP handler from the service implementation. It returns the path +// on which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewOSServiceHandler(svc OSServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { + oSServiceMethods := v1.File_fits_api_vm_v1_os_proto.Services().ByName("OSService").Methods() + oSServiceListHandler := connect.NewUnaryHandlerSimple( + OSServiceListProcedure, + svc.List, + connect.WithSchema(oSServiceMethods.ByName("List")), + connect.WithHandlerOptions(opts...), + ) + return "/fits.api.vm.v1.OSService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case OSServiceListProcedure: + oSServiceListHandler.ServeHTTP(w, r) + default: + http.NotFound(w, r) + } + }) +} + +// UnimplementedOSServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedOSServiceHandler struct{} + +func (UnimplementedOSServiceHandler) List(context.Context, *v1.OSServiceListRequest) (*v1.OSServiceListResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.OSService.List is not implemented")) +} diff --git a/go/fits/api/vm/v1/vmv1connect/service.connect.go b/go/fits/api/vm/v1/vmv1connect/service.connect.go new file mode 100644 index 0000000..be54e37 --- /dev/null +++ b/go/fits/api/vm/v1/vmv1connect/service.connect.go @@ -0,0 +1,114 @@ +// Code generated by protoc-gen-connect-go. DO NOT EDIT. +// +// Source: fits/api/vm/v1/service.proto + +package vmv1connect + +import ( + connect "connectrpc.com/connect" + context "context" + errors "errors" + v1 "github.com/fi-ts/api/go/fits/api/vm/v1" + http "net/http" + strings "strings" +) + +// This is a compile-time assertion to ensure that this generated file and the connect package are +// compatible. If you get a compiler error that this constant is not defined, this code was +// generated with a version of connect newer than the one compiled into your binary. You can fix the +// problem by either regenerating this code with an older version of connect or updating the connect +// version compiled into your binary. +const _ = connect.IsAtLeastVersion1_13_0 + +const ( + // ServiceServiceName is the fully-qualified name of the ServiceService service. + ServiceServiceName = "fits.api.vm.v1.ServiceService" +) + +// These constants are the fully-qualified names of the RPCs defined in this package. They're +// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route. +// +// Note that these are different from the fully-qualified method names used by +// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to +// reflection-formatted method names, remove the leading slash and convert the remaining slash to a +// period. +const ( + // ServiceServiceListProcedure is the fully-qualified name of the ServiceService's List RPC. + ServiceServiceListProcedure = "/fits.api.vm.v1.ServiceService/List" +) + +// ServiceServiceClient is a client for the fits.api.vm.v1.ServiceService service. +type ServiceServiceClient interface { + // Returns a list of all services. + List(context.Context, *v1.ServiceServiceListRequest) (*v1.ServiceServiceListResponse, error) +} + +// NewServiceServiceClient constructs a client for the fits.api.vm.v1.ServiceService service. By +// default, it uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, +// and sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the +// connect.WithGRPC() or connect.WithGRPCWeb() options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewServiceServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) ServiceServiceClient { + baseURL = strings.TrimRight(baseURL, "/") + serviceServiceMethods := v1.File_fits_api_vm_v1_service_proto.Services().ByName("ServiceService").Methods() + return &serviceServiceClient{ + list: connect.NewClient[v1.ServiceServiceListRequest, v1.ServiceServiceListResponse]( + httpClient, + baseURL+ServiceServiceListProcedure, + connect.WithSchema(serviceServiceMethods.ByName("List")), + connect.WithClientOptions(opts...), + ), + } +} + +// serviceServiceClient implements ServiceServiceClient. +type serviceServiceClient struct { + list *connect.Client[v1.ServiceServiceListRequest, v1.ServiceServiceListResponse] +} + +// List calls fits.api.vm.v1.ServiceService.List. +func (c *serviceServiceClient) List(ctx context.Context, req *v1.ServiceServiceListRequest) (*v1.ServiceServiceListResponse, error) { + response, err := c.list.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// ServiceServiceHandler is an implementation of the fits.api.vm.v1.ServiceService service. +type ServiceServiceHandler interface { + // Returns a list of all services. + List(context.Context, *v1.ServiceServiceListRequest) (*v1.ServiceServiceListResponse, error) +} + +// NewServiceServiceHandler builds an HTTP handler from the service implementation. It returns the +// path on which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewServiceServiceHandler(svc ServiceServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { + serviceServiceMethods := v1.File_fits_api_vm_v1_service_proto.Services().ByName("ServiceService").Methods() + serviceServiceListHandler := connect.NewUnaryHandlerSimple( + ServiceServiceListProcedure, + svc.List, + connect.WithSchema(serviceServiceMethods.ByName("List")), + connect.WithHandlerOptions(opts...), + ) + return "/fits.api.vm.v1.ServiceService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case ServiceServiceListProcedure: + serviceServiceListHandler.ServeHTTP(w, r) + default: + http.NotFound(w, r) + } + }) +} + +// UnimplementedServiceServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedServiceServiceHandler struct{} + +func (UnimplementedServiceServiceHandler) List(context.Context, *v1.ServiceServiceListRequest) (*v1.ServiceServiceListResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.ServiceService.List is not implemented")) +} diff --git a/go/fits/api/vm/v1/vmv1connect/stagetype.connect.go b/go/fits/api/vm/v1/vmv1connect/stagetype.connect.go new file mode 100644 index 0000000..fba4637 --- /dev/null +++ b/go/fits/api/vm/v1/vmv1connect/stagetype.connect.go @@ -0,0 +1,114 @@ +// Code generated by protoc-gen-connect-go. DO NOT EDIT. +// +// Source: fits/api/vm/v1/stagetype.proto + +package vmv1connect + +import ( + connect "connectrpc.com/connect" + context "context" + errors "errors" + v1 "github.com/fi-ts/api/go/fits/api/vm/v1" + http "net/http" + strings "strings" +) + +// This is a compile-time assertion to ensure that this generated file and the connect package are +// compatible. If you get a compiler error that this constant is not defined, this code was +// generated with a version of connect newer than the one compiled into your binary. You can fix the +// problem by either regenerating this code with an older version of connect or updating the connect +// version compiled into your binary. +const _ = connect.IsAtLeastVersion1_13_0 + +const ( + // StageTypeServiceName is the fully-qualified name of the StageTypeService service. + StageTypeServiceName = "fits.api.vm.v1.StageTypeService" +) + +// These constants are the fully-qualified names of the RPCs defined in this package. They're +// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route. +// +// Note that these are different from the fully-qualified method names used by +// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to +// reflection-formatted method names, remove the leading slash and convert the remaining slash to a +// period. +const ( + // StageTypeServiceListProcedure is the fully-qualified name of the StageTypeService's List RPC. + StageTypeServiceListProcedure = "/fits.api.vm.v1.StageTypeService/List" +) + +// StageTypeServiceClient is a client for the fits.api.vm.v1.StageTypeService service. +type StageTypeServiceClient interface { + // Returns a list of all stage types available for a tenant. + List(context.Context, *v1.StageTypeServiceListRequest) (*v1.StageTypeServiceListResponse, error) +} + +// NewStageTypeServiceClient constructs a client for the fits.api.vm.v1.StageTypeService service. By +// default, it uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, +// and sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the +// connect.WithGRPC() or connect.WithGRPCWeb() options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewStageTypeServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) StageTypeServiceClient { + baseURL = strings.TrimRight(baseURL, "/") + stageTypeServiceMethods := v1.File_fits_api_vm_v1_stagetype_proto.Services().ByName("StageTypeService").Methods() + return &stageTypeServiceClient{ + list: connect.NewClient[v1.StageTypeServiceListRequest, v1.StageTypeServiceListResponse]( + httpClient, + baseURL+StageTypeServiceListProcedure, + connect.WithSchema(stageTypeServiceMethods.ByName("List")), + connect.WithClientOptions(opts...), + ), + } +} + +// stageTypeServiceClient implements StageTypeServiceClient. +type stageTypeServiceClient struct { + list *connect.Client[v1.StageTypeServiceListRequest, v1.StageTypeServiceListResponse] +} + +// List calls fits.api.vm.v1.StageTypeService.List. +func (c *stageTypeServiceClient) List(ctx context.Context, req *v1.StageTypeServiceListRequest) (*v1.StageTypeServiceListResponse, error) { + response, err := c.list.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// StageTypeServiceHandler is an implementation of the fits.api.vm.v1.StageTypeService service. +type StageTypeServiceHandler interface { + // Returns a list of all stage types available for a tenant. + List(context.Context, *v1.StageTypeServiceListRequest) (*v1.StageTypeServiceListResponse, error) +} + +// NewStageTypeServiceHandler builds an HTTP handler from the service implementation. It returns the +// path on which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewStageTypeServiceHandler(svc StageTypeServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { + stageTypeServiceMethods := v1.File_fits_api_vm_v1_stagetype_proto.Services().ByName("StageTypeService").Methods() + stageTypeServiceListHandler := connect.NewUnaryHandlerSimple( + StageTypeServiceListProcedure, + svc.List, + connect.WithSchema(stageTypeServiceMethods.ByName("List")), + connect.WithHandlerOptions(opts...), + ) + return "/fits.api.vm.v1.StageTypeService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case StageTypeServiceListProcedure: + stageTypeServiceListHandler.ServeHTTP(w, r) + default: + http.NotFound(w, r) + } + }) +} + +// UnimplementedStageTypeServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedStageTypeServiceHandler struct{} + +func (UnimplementedStageTypeServiceHandler) List(context.Context, *v1.StageTypeServiceListRequest) (*v1.StageTypeServiceListResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.StageTypeService.List is not implemented")) +} diff --git a/go/fits/api/vm/v1/vmv1connect/vlan.connect.go b/go/fits/api/vm/v1/vmv1connect/vlan.connect.go new file mode 100644 index 0000000..323f4e4 --- /dev/null +++ b/go/fits/api/vm/v1/vmv1connect/vlan.connect.go @@ -0,0 +1,114 @@ +// Code generated by protoc-gen-connect-go. DO NOT EDIT. +// +// Source: fits/api/vm/v1/vlan.proto + +package vmv1connect + +import ( + connect "connectrpc.com/connect" + context "context" + errors "errors" + v1 "github.com/fi-ts/api/go/fits/api/vm/v1" + http "net/http" + strings "strings" +) + +// This is a compile-time assertion to ensure that this generated file and the connect package are +// compatible. If you get a compiler error that this constant is not defined, this code was +// generated with a version of connect newer than the one compiled into your binary. You can fix the +// problem by either regenerating this code with an older version of connect or updating the connect +// version compiled into your binary. +const _ = connect.IsAtLeastVersion1_13_0 + +const ( + // VlanServiceName is the fully-qualified name of the VlanService service. + VlanServiceName = "fits.api.vm.v1.VlanService" +) + +// These constants are the fully-qualified names of the RPCs defined in this package. They're +// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route. +// +// Note that these are different from the fully-qualified method names used by +// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to +// reflection-formatted method names, remove the leading slash and convert the remaining slash to a +// period. +const ( + // VlanServiceListProcedure is the fully-qualified name of the VlanService's List RPC. + VlanServiceListProcedure = "/fits.api.vm.v1.VlanService/List" +) + +// VlanServiceClient is a client for the fits.api.vm.v1.VlanService service. +type VlanServiceClient interface { + // Returns a list of all VLANs available for a tenant. + List(context.Context, *v1.VlanServiceListRequest) (*v1.VlanServiceListResponse, error) +} + +// NewVlanServiceClient constructs a client for the fits.api.vm.v1.VlanService service. By default, +// it uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and +// sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() +// or connect.WithGRPCWeb() options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewVlanServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) VlanServiceClient { + baseURL = strings.TrimRight(baseURL, "/") + vlanServiceMethods := v1.File_fits_api_vm_v1_vlan_proto.Services().ByName("VlanService").Methods() + return &vlanServiceClient{ + list: connect.NewClient[v1.VlanServiceListRequest, v1.VlanServiceListResponse]( + httpClient, + baseURL+VlanServiceListProcedure, + connect.WithSchema(vlanServiceMethods.ByName("List")), + connect.WithClientOptions(opts...), + ), + } +} + +// vlanServiceClient implements VlanServiceClient. +type vlanServiceClient struct { + list *connect.Client[v1.VlanServiceListRequest, v1.VlanServiceListResponse] +} + +// List calls fits.api.vm.v1.VlanService.List. +func (c *vlanServiceClient) List(ctx context.Context, req *v1.VlanServiceListRequest) (*v1.VlanServiceListResponse, error) { + response, err := c.list.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// VlanServiceHandler is an implementation of the fits.api.vm.v1.VlanService service. +type VlanServiceHandler interface { + // Returns a list of all VLANs available for a tenant. + List(context.Context, *v1.VlanServiceListRequest) (*v1.VlanServiceListResponse, error) +} + +// NewVlanServiceHandler builds an HTTP handler from the service implementation. It returns the path +// on which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewVlanServiceHandler(svc VlanServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { + vlanServiceMethods := v1.File_fits_api_vm_v1_vlan_proto.Services().ByName("VlanService").Methods() + vlanServiceListHandler := connect.NewUnaryHandlerSimple( + VlanServiceListProcedure, + svc.List, + connect.WithSchema(vlanServiceMethods.ByName("List")), + connect.WithHandlerOptions(opts...), + ) + return "/fits.api.vm.v1.VlanService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case VlanServiceListProcedure: + vlanServiceListHandler.ServeHTTP(w, r) + default: + http.NotFound(w, r) + } + }) +} + +// UnimplementedVlanServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedVlanServiceHandler struct{} + +func (UnimplementedVlanServiceHandler) List(context.Context, *v1.VlanServiceListRequest) (*v1.VlanServiceListResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VlanService.List is not implemented")) +} diff --git a/go/fits/api/vm/v1/vmv1connect/vm.connect.go b/go/fits/api/vm/v1/vmv1connect/vm.connect.go index 31a60f9..a9e5c3a 100644 --- a/go/fits/api/vm/v1/vmv1connect/vm.connect.go +++ b/go/fits/api/vm/v1/vmv1connect/vm.connect.go @@ -47,15 +47,15 @@ const ( // VMServiceClient is a client for the fits.api.vm.v1.VMService service. type VMServiceClient interface { - // Returns the VM address with the specified VM. + // Returns the VM with the specified UUID. Get(context.Context, *v1.VMServiceGetRequest) (*v1.VMServiceGetResponse, error) - // Creates a new VM address. + // Creates a new VM. Create(context.Context, *v1.VMServiceCreateRequest) (*v1.VMServiceCreateResponse, error) - // Updates an VM address. + // Updates a VM. Update(context.Context, *v1.VMServiceUpdateRequest) (*v1.VMServiceUpdateResponse, error) - // Returns the list of all VM addresses. + // Returns the list of all VMs. List(context.Context, *v1.VMServiceListRequest) (*v1.VMServiceListResponse, error) - // Deletes an VM address. + // Deletes a VM. Delete(context.Context, *v1.VMServiceDeleteRequest) (*v1.VMServiceDeleteResponse, error) } @@ -159,15 +159,15 @@ func (c *vMServiceClient) Delete(ctx context.Context, req *v1.VMServiceDeleteReq // VMServiceHandler is an implementation of the fits.api.vm.v1.VMService service. type VMServiceHandler interface { - // Returns the VM address with the specified VM. + // Returns the VM with the specified UUID. Get(context.Context, *v1.VMServiceGetRequest) (*v1.VMServiceGetResponse, error) - // Creates a new VM address. + // Creates a new VM. Create(context.Context, *v1.VMServiceCreateRequest) (*v1.VMServiceCreateResponse, error) - // Updates an VM address. + // Updates a VM. Update(context.Context, *v1.VMServiceUpdateRequest) (*v1.VMServiceUpdateResponse, error) - // Returns the list of all VM addresses. + // Returns the list of all VMs. List(context.Context, *v1.VMServiceListRequest) (*v1.VMServiceListResponse, error) - // Deletes an VM address. + // Deletes a VM. Delete(context.Context, *v1.VMServiceDeleteRequest) (*v1.VMServiceDeleteResponse, error) } diff --git a/js/fits/api/v1/common_pb.ts b/js/fits/api/v1/common_pb.ts index 5c6f21c..8843609 100644 --- a/js/fits/api/v1/common_pb.ts +++ b/js/fits/api/v1/common_pb.ts @@ -14,7 +14,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file fits/api/v1/common.proto. */ export const file_fits_api_v1_common: GenFile = /*@__PURE__*/ - fileDesc("ChhmaXRzL2FwaS92MS9jb21tb24ucHJvdG8SC2ZpdHMuYXBpLnYxIkIKBlBhZ2luZxIRCgRwYWdlGAEgASgESACIAQESEgoFY291bnQYAiABKARIAYgBAUIHCgVfcGFnZUIICgZfY291bnQiiAEKBkxhYmVscxJPCgZsYWJlbHMYASADKAsyHy5maXRzLmFwaS52MS5MYWJlbHMuTGFiZWxzRW50cnlCHrpIG5oBGLiVuLECASIHcgUQARiAAioHcgUQABiAAhotCgtMYWJlbHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIq8BCgRNZXRhEigKBmxhYmVscxgBIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVsc0gAiAEBEi4KCmNyZWF0ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhIKCmdlbmVyYXRpb24YBCABKARCCQoHX2xhYmVscyJDCgxVcGRhdGVMYWJlbHMSIwoGdXBkYXRlGAEgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzEg4KBnJlbW92ZRgCIAMoCSKIAQoKVXBkYXRlTWV0YRIuCgp1cGRhdGVkX2F0GAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJKChBsb2NraW5nX3N0cmF0ZWd5GAIgASgOMiYuZml0cy5hcGkudjEuT3B0aW1pc3RpY0xvY2tpbmdTdHJhdGVneUIIukgFggECEAEqhwEKClRlbmFudFJvbGUSGwoXVEVOQU5UX1JPTEVfVU5TUEVDSUZJRUQQABIVChFURU5BTlRfUk9MRV9PV05FUhABEhYKElRFTkFOVF9ST0xFX0VESVRPUhACEhYKElRFTkFOVF9ST0xFX1ZJRVdFUhADEhUKEVRFTkFOVF9ST0xFX0dVRVNUEAQqdQoLUHJvamVjdFJvbGUSHAoYUFJPSkVDVF9ST0xFX1VOU1BFQ0lGSUVEEAASFgoSUFJPSkVDVF9ST0xFX09XTkVSEAESFwoTUFJPSkVDVF9ST0xFX0VESVRPUhACEhcKE1BST0pFQ1RfUk9MRV9WSUVXRVIQAypVCglBZG1pblJvbGUSGgoWQURNSU5fUk9MRV9VTlNQRUNJRklFRBAAEhUKEUFETUlOX1JPTEVfRURJVE9SEAESFQoRQURNSU5fUk9MRV9WSUVXRVIQAipUCgpWaXNpYmlsaXR5EhoKFlZJU0lCSUxJVFlfVU5TUEVDSUZJRUQQABIVChFWSVNJQklMSVRZX1BVQkxJQxABEhMKD1ZJU0lCSUxJVFlfU0VMRhACKlIKCEF1ZGl0aW5nEhgKFEFVRElUSU5HX1VOU1BFQ0lGSUVEEAASFQoRQVVESVRJTkdfSU5DTFVERUQQARIVChFBVURJVElOR19FWENMVURFRBACKpgBChlPcHRpbWlzdGljTG9ja2luZ1N0cmF0ZWd5EisKJ09QVElNSVNUSUNfTE9DS0lOR19TVFJBVEVHWV9VTlNQRUNJRklFRBAAEiYKIk9QVElNSVNUSUNfTE9DS0lOR19TVFJBVEVHWV9DTElFTlQQARImCiJPUFRJTUlTVElDX0xPQ0tJTkdfU1RSQVRFR1lfU0VSVkVSEAI6XAoMdGVuYW50X3JvbGVzEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYuI4DIAMoDjIXLmZpdHMuYXBpLnYxLlRlbmFudFJvbGVSC3RlbmFudFJvbGVzOl8KDXByb2plY3Rfcm9sZXMSHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxi5jgMgAygOMhguZml0cy5hcGkudjEuUHJvamVjdFJvbGVSDHByb2plY3RSb2xlczpZCgthZG1pbl9yb2xlcxIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGLqOAyADKA4yFi5maXRzLmFwaS52MS5BZG1pblJvbGVSCmFkbWluUm9sZXM6WQoKdmlzaWJpbGl0eRIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGLuOAyABKA4yFy5maXRzLmFwaS52MS5WaXNpYmlsaXR5Ugp2aXNpYmlsaXR5OlMKCGF1ZGl0aW5nEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYvI4DIAEoDjIVLmZpdHMuYXBpLnYxLkF1ZGl0aW5nUghhdWRpdGluZzpPChFlbnVtX3N0cmluZ192YWx1ZRIhLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zGKCWAyABKAlSD2VudW1TdHJpbmdWYWx1ZUKXAQoPY29tLmZpdHMuYXBpLnYxQgtDb21tb25Qcm90b1ABWilnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92MTthcGl2MaICA0ZBWKoCC0ZpdHMuQXBpLlYxygILRml0c1xBcGlcVjHiAhdGaXRzXEFwaVxWMVxHUEJNZXRhZGF0YeoCDUZpdHM6OkFwaTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_predefined_rules, file_google_protobuf_descriptor, file_google_protobuf_timestamp]); + fileDesc("ChhmaXRzL2FwaS92MS9jb21tb24ucHJvdG8SC2ZpdHMuYXBpLnYxIkIKBlBhZ2luZxIRCgRwYWdlGAEgASgESACIAQESEgoFY291bnQYAiABKARIAYgBAUIHCgVfcGFnZUIICgZfY291bnQiiAEKBkxhYmVscxJPCgZsYWJlbHMYASADKAsyHy5maXRzLmFwaS52MS5MYWJlbHMuTGFiZWxzRW50cnlCHrpIG5oBGLiVuLECASIHcgUQARiAAioHcgUQABiAAhotCgtMYWJlbHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIq8BCgRNZXRhEigKBmxhYmVscxgBIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVsc0gAiAEBEi4KCmNyZWF0ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhIKCmdlbmVyYXRpb24YBCABKARCCQoHX2xhYmVscyJDCgxVcGRhdGVMYWJlbHMSIwoGdXBkYXRlGAEgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzEg4KBnJlbW92ZRgCIAMoCSKIAQoKVXBkYXRlTWV0YRIuCgp1cGRhdGVkX2F0GAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJKChBsb2NraW5nX3N0cmF0ZWd5GAIgASgOMiYuZml0cy5hcGkudjEuT3B0aW1pc3RpY0xvY2tpbmdTdHJhdGVneUIIukgFggECEAEiOQoPVmFsaWRhdGlvbkVycm9yEgsKA2xvYxgBIAMoCRILCgNtc2cYAiABKAkSDAoEdHlwZRgDIAEoCSqHAQoKVGVuYW50Um9sZRIbChdURU5BTlRfUk9MRV9VTlNQRUNJRklFRBAAEhUKEVRFTkFOVF9ST0xFX09XTkVSEAESFgoSVEVOQU5UX1JPTEVfRURJVE9SEAISFgoSVEVOQU5UX1JPTEVfVklFV0VSEAMSFQoRVEVOQU5UX1JPTEVfR1VFU1QQBCp1CgtQcm9qZWN0Um9sZRIcChhQUk9KRUNUX1JPTEVfVU5TUEVDSUZJRUQQABIWChJQUk9KRUNUX1JPTEVfT1dORVIQARIXChNQUk9KRUNUX1JPTEVfRURJVE9SEAISFwoTUFJPSkVDVF9ST0xFX1ZJRVdFUhADKlUKCUFkbWluUm9sZRIaChZBRE1JTl9ST0xFX1VOU1BFQ0lGSUVEEAASFQoRQURNSU5fUk9MRV9FRElUT1IQARIVChFBRE1JTl9ST0xFX1ZJRVdFUhACKlQKClZpc2liaWxpdHkSGgoWVklTSUJJTElUWV9VTlNQRUNJRklFRBAAEhUKEVZJU0lCSUxJVFlfUFVCTElDEAESEwoPVklTSUJJTElUWV9TRUxGEAIqUgoIQXVkaXRpbmcSGAoUQVVESVRJTkdfVU5TUEVDSUZJRUQQABIVChFBVURJVElOR19JTkNMVURFRBABEhUKEUFVRElUSU5HX0VYQ0xVREVEEAIqmAEKGU9wdGltaXN0aWNMb2NraW5nU3RyYXRlZ3kSKwonT1BUSU1JU1RJQ19MT0NLSU5HX1NUUkFURUdZX1VOU1BFQ0lGSUVEEAASJgoiT1BUSU1JU1RJQ19MT0NLSU5HX1NUUkFURUdZX0NMSUVOVBABEiYKIk9QVElNSVNUSUNfTE9DS0lOR19TVFJBVEVHWV9TRVJWRVIQAjpcCgx0ZW5hbnRfcm9sZXMSHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxi4jgMgAygOMhcuZml0cy5hcGkudjEuVGVuYW50Um9sZVILdGVuYW50Um9sZXM6XwoNcHJvamVjdF9yb2xlcxIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGLmOAyADKA4yGC5maXRzLmFwaS52MS5Qcm9qZWN0Um9sZVIMcHJvamVjdFJvbGVzOlkKC2FkbWluX3JvbGVzEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYuo4DIAMoDjIWLmZpdHMuYXBpLnYxLkFkbWluUm9sZVIKYWRtaW5Sb2xlczpZCgp2aXNpYmlsaXR5Eh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYu44DIAEoDjIXLmZpdHMuYXBpLnYxLlZpc2liaWxpdHlSCnZpc2liaWxpdHk6UwoIYXVkaXRpbmcSHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxi8jgMgASgOMhUuZml0cy5hcGkudjEuQXVkaXRpbmdSCGF1ZGl0aW5nOk8KEWVudW1fc3RyaW5nX3ZhbHVlEiEuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMYoJYDIAEoCVIPZW51bVN0cmluZ1ZhbHVlQpcBCg9jb20uZml0cy5hcGkudjFCC0NvbW1vblByb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_predefined_rules, file_google_protobuf_descriptor, file_google_protobuf_timestamp]); /** * Paging defines paging for methods with a lot of results @@ -166,6 +166,42 @@ export type UpdateMeta = Message<"fits.api.v1.UpdateMeta"> & { export const UpdateMetaSchema: GenMessage = /*@__PURE__*/ messageDesc(file_fits_api_v1_common, 4); +/** + * ValidationError describes a single validation problem reported by an upstream API. + * Used to surface structured validation errors (e.g. HTTP 422) returned by backends. + * + * @generated from message fits.api.v1.ValidationError + */ +export type ValidationError = Message<"fits.api.v1.ValidationError"> & { + /** + * Location of the validation error within the request, e.g. ["body", "tenant_uuid"] + * + * @generated from field: repeated string loc = 1; + */ + loc: string[]; + + /** + * Human readable error message + * + * @generated from field: string msg = 2; + */ + msg: string; + + /** + * Type of the validation error, e.g. "value_error" + * + * @generated from field: string type = 3; + */ + type: string; +}; + +/** + * Describes the message fits.api.v1.ValidationError. + * Use `create(ValidationErrorSchema)` to create a new message. + */ +export const ValidationErrorSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_v1_common, 5); + /** * TenantRole specifies what role a logged in user needs to call this tenant scoped service * diff --git a/js/fits/api/vm/v1/location_pb.ts b/js/fits/api/vm/v1/location_pb.ts new file mode 100644 index 0000000..ed6c1a9 --- /dev/null +++ b/js/fits/api/vm/v1/location_pb.ts @@ -0,0 +1,100 @@ +// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" +// @generated from file fits/api/vm/v1/location.proto (package fits.api.vm.v1, syntax proto3) +/* eslint-disable */ + +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; +import { file_fits_api_v1_common } from "../../v1/common_pb"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file fits/api/vm/v1/location.proto. + */ +export const file_fits_api_vm_v1_location: GenFile = /*@__PURE__*/ + fileDesc("Ch1maXRzL2FwaS92bS92MS9sb2NhdGlvbi5wcm90bxIOZml0cy5hcGkudm0udjEiMQoITG9jYXRpb24SFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESDQoFdGl0bGUYAiABKAkiHAoaTG9jYXRpb25TZXJ2aWNlTGlzdFJlcXVlc3QiSgobTG9jYXRpb25TZXJ2aWNlTGlzdFJlc3BvbnNlEisKCWxvY2F0aW9ucxgBIAMoCzIYLmZpdHMuYXBpLnZtLnYxLkxvY2F0aW9uMn8KD0xvY2F0aW9uU2VydmljZRJsCgRMaXN0EiouZml0cy5hcGkudm0udjEuTG9jYXRpb25TZXJ2aWNlTGlzdFJlcXVlc3QaKy5maXRzLmFwaS52bS52MS5Mb2NhdGlvblNlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCQqsBChJjb20uZml0cy5hcGkudm0udjFCDUxvY2F0aW9uUHJvdG9QAVorZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdm0vdjE7dm12MaICA0ZBVqoCDkZpdHMuQXBpLlZtLlYxygIORml0c1xBcGlcVm1cVjHiAhpGaXRzXEFwaVxWbVxWMVxHUEJNZXRhZGF0YeoCEUZpdHM6OkFwaTo6Vm06OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common]); + +/** + * Location is the definition of an available datacenter location for VM instances + * + * @generated from message fits.api.vm.v1.Location + */ +export type Location = Message<"fits.api.vm.v1.Location"> & { + /** + * Uuid of this location + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * title of the location + * + * @generated from field: string title = 2; + */ + title: string; +}; + +/** + * Describes the message fits.api.vm.v1.Location. + * Use `create(LocationSchema)` to create a new message. + */ +export const LocationSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_location, 0); + +/** + * LocationServiceListRequest is the request payload for a location list request. + * The upstream nulink API accepts no body or parameters, so this is intentionally empty. + * + * @generated from message fits.api.vm.v1.LocationServiceListRequest + */ +export type LocationServiceListRequest = Message<"fits.api.vm.v1.LocationServiceListRequest"> & { +}; + +/** + * Describes the message fits.api.vm.v1.LocationServiceListRequest. + * Use `create(LocationServiceListRequestSchema)` to create a new message. + */ +export const LocationServiceListRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_location, 1); + +/** + * LocationServiceListResponse is the response payload for a location list request + * + * @generated from message fits.api.vm.v1.LocationServiceListResponse + */ +export type LocationServiceListResponse = Message<"fits.api.vm.v1.LocationServiceListResponse"> & { + /** + * The available locations + * + * @generated from field: repeated fits.api.vm.v1.Location locations = 1; + */ + locations: Location[]; +}; + +/** + * Describes the message fits.api.vm.v1.LocationServiceListResponse. + * Use `create(LocationServiceListResponseSchema)` to create a new message. + */ +export const LocationServiceListResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_location, 2); + +/** + * LocationService lists datacenter locations available for VM instances. + * + * @generated from service fits.api.vm.v1.LocationService + */ +export const LocationService: GenService<{ + /** + * Returns a list of all datacenter locations. + * + * @generated from rpc fits.api.vm.v1.LocationService.List + */ + list: { + methodKind: "unary"; + input: typeof LocationServiceListRequestSchema; + output: typeof LocationServiceListResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_fits_api_vm_v1_location, 0); + diff --git a/js/fits/api/vm/v1/os_pb.ts b/js/fits/api/vm/v1/os_pb.ts index 8643384..7e53321 100644 --- a/js/fits/api/vm/v1/os_pb.ts +++ b/js/fits/api/vm/v1/os_pb.ts @@ -2,36 +2,113 @@ // @generated from file fits/api/vm/v1/os.proto (package fits.api.vm.v1, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2"; -import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; +import { file_fits_api_v1_common } from "../../v1/common_pb"; import type { Message } from "@bufbuild/protobuf"; /** * Describes the file fits/api/vm/v1/os.proto. */ export const file_fits_api_vm_v1_os: GenFile = /*@__PURE__*/ - fileDesc("ChdmaXRzL2FwaS92bS92MS9vcy5wcm90bxIOZml0cy5hcGkudm0udjEiHAoCT3MSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQFCpQEKEmNvbS5maXRzLmFwaS52bS52MUIHT3NQcm90b1ABWitnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92bS92MTt2bXYxogIDRkFWqgIORml0cy5BcGkuVm0uVjHKAg5GaXRzXEFwaVxWbVxWMeICGkZpdHNcQXBpXFZtXFYxXEdQQk1ldGFkYXRh6gIRRml0czo6QXBpOjpWbTo6VjFiBnByb3RvMw", [file_buf_validate_validate]); + fileDesc("ChdmaXRzL2FwaS92bS92MS9vcy5wcm90bxIOZml0cy5hcGkudm0udjEiSgoCT1MSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESDQoFdGl0bGUYAiABKAkSDAoEdHlwZRgDIAEoCRIPCgd2ZXJzaW9uGAQgASgJIhYKFE9TU2VydmljZUxpc3RSZXF1ZXN0IjgKFU9TU2VydmljZUxpc3RSZXNwb25zZRIfCgNvc3MYASADKAsyEi5maXRzLmFwaS52bS52MS5PUzJtCglPU1NlcnZpY2USYAoETGlzdBIkLmZpdHMuYXBpLnZtLnYxLk9TU2VydmljZUxpc3RSZXF1ZXN0GiUuZml0cy5hcGkudm0udjEuT1NTZXJ2aWNlTGlzdFJlc3BvbnNlIgvK8xgDAQID4PMYAkKlAQoSY29tLmZpdHMuYXBpLnZtLnYxQgdPc1Byb3RvUAFaK2dpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3ZtL3YxO3ZtdjGiAgNGQVaqAg5GaXRzLkFwaS5WbS5WMcoCDkZpdHNcQXBpXFZtXFYx4gIaRml0c1xBcGlcVm1cVjFcR1BCTWV0YWRhdGHqAhFGaXRzOjpBcGk6OlZtOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common]); /** - * Os is the definition of a potential OS of a VM instance - * TODO create a dedicated service + * OS is the definition of an available OS for VM instances * - * @generated from message fits.api.vm.v1.Os + * @generated from message fits.api.vm.v1.OS */ -export type Os = Message<"fits.api.vm.v1.Os"> & { +export type OS = Message<"fits.api.vm.v1.OS"> & { /** - * Uuid of this os + * Uuid of this OS * * @generated from field: string uuid = 1; */ uuid: string; + + /** + * Title of the OS + * + * @generated from field: string title = 2; + */ + title: string; + + /** + * Type of the OS + * + * @generated from field: string type = 3; + */ + type: string; + + /** + * Version of the OS + * + * @generated from field: string version = 4; + */ + version: string; }; /** - * Describes the message fits.api.vm.v1.Os. - * Use `create(OsSchema)` to create a new message. + * Describes the message fits.api.vm.v1.OS. + * Use `create(OSSchema)` to create a new message. */ -export const OsSchema: GenMessage = /*@__PURE__*/ +export const OSSchema: GenMessage = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_os, 0); +/** + * OSServiceListRequest is the request payload for a OS list request. + * The upstream nulink API accepts no body or parameters, so this is intentionally empty. + * + * @generated from message fits.api.vm.v1.OSServiceListRequest + */ +export type OSServiceListRequest = Message<"fits.api.vm.v1.OSServiceListRequest"> & { +}; + +/** + * Describes the message fits.api.vm.v1.OSServiceListRequest. + * Use `create(OSServiceListRequestSchema)` to create a new message. + */ +export const OSServiceListRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_os, 1); + +/** + * OSServiceListResponse is the response payload for a OS list request + * + * @generated from message fits.api.vm.v1.OSServiceListResponse + */ +export type OSServiceListResponse = Message<"fits.api.vm.v1.OSServiceListResponse"> & { + /** + * The available OSs + * + * @generated from field: repeated fits.api.vm.v1.OS oss = 1; + */ + oss: OS[]; +}; + +/** + * Describes the message fits.api.vm.v1.OSServiceListResponse. + * Use `create(OSServiceListResponseSchema)` to create a new message. + */ +export const OSServiceListResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_os, 2); + +/** + * OSService lists operating systems available for VM instances. + * + * @generated from service fits.api.vm.v1.OSService + */ +export const OSService: GenService<{ + /** + * Returns a list of all OSs. + * + * @generated from rpc fits.api.vm.v1.OSService.List + */ + list: { + methodKind: "unary"; + input: typeof OSServiceListRequestSchema; + output: typeof OSServiceListResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_fits_api_vm_v1_os, 0); + diff --git a/js/fits/api/vm/v1/service_pb.ts b/js/fits/api/vm/v1/service_pb.ts new file mode 100644 index 0000000..ea53e15 --- /dev/null +++ b/js/fits/api/vm/v1/service_pb.ts @@ -0,0 +1,105 @@ +// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" +// @generated from file fits/api/vm/v1/service.proto (package fits.api.vm.v1, syntax proto3) +/* eslint-disable */ + +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; +import { file_fits_api_v1_common } from "../../v1/common_pb"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file fits/api/vm/v1/service.proto. + */ +export const file_fits_api_vm_v1_service: GenFile = /*@__PURE__*/ + fileDesc("ChxmaXRzL2FwaS92bS92MS9zZXJ2aWNlLnByb3RvEg5maXRzLmFwaS52bS52MSIwCgdTZXJ2aWNlEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEg0KBXRpdGxlGAIgASgJIhsKGVNlcnZpY2VTZXJ2aWNlTGlzdFJlcXVlc3QiRwoaU2VydmljZVNlcnZpY2VMaXN0UmVzcG9uc2USKQoIc2VydmljZXMYASADKAsyFy5maXRzLmFwaS52bS52MS5TZXJ2aWNlMnwKDlNlcnZpY2VTZXJ2aWNlEmoKBExpc3QSKS5maXRzLmFwaS52bS52MS5TZXJ2aWNlU2VydmljZUxpc3RSZXF1ZXN0GiouZml0cy5hcGkudm0udjEuU2VydmljZVNlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCQqoBChJjb20uZml0cy5hcGkudm0udjFCDFNlcnZpY2VQcm90b1ABWitnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92bS92MTt2bXYxogIDRkFWqgIORml0cy5BcGkuVm0uVjHKAg5GaXRzXEFwaVxWbVxWMeICGkZpdHNcQXBpXFZtXFYxXEdQQk1ldGFkYXRh6gIRRml0czo6QXBpOjpWbTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common]); + +/** + * TODO what is a service? + * + * @generated from message fits.api.vm.v1.Service + */ +export type Service = Message<"fits.api.vm.v1.Service"> & { + /** + * Uuid of this Service + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * title of the Service + * + * type NucleusDBServices struct { + * ServiceTitle string `json:"service_title"` + * ServiceUuid string `json:"service_uuid"` + * } + * + * @generated from field: string title = 2; + */ + title: string; +}; + +/** + * Describes the message fits.api.vm.v1.Service. + * Use `create(ServiceSchema)` to create a new message. + */ +export const ServiceSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_service, 0); + +/** + * ServiceServiceListRequest is the request payload for a service list request. + * The upstream nulink API accepts no body or parameters, so this is intentionally empty. + * + * @generated from message fits.api.vm.v1.ServiceServiceListRequest + */ +export type ServiceServiceListRequest = Message<"fits.api.vm.v1.ServiceServiceListRequest"> & { +}; + +/** + * Describes the message fits.api.vm.v1.ServiceServiceListRequest. + * Use `create(ServiceServiceListRequestSchema)` to create a new message. + */ +export const ServiceServiceListRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_service, 1); + +/** + * ServiceServiceListResponse is the response payload for a service list request + * + * @generated from message fits.api.vm.v1.ServiceServiceListResponse + */ +export type ServiceServiceListResponse = Message<"fits.api.vm.v1.ServiceServiceListResponse"> & { + /** + * The available services + * + * @generated from field: repeated fits.api.vm.v1.Service services = 1; + */ + services: Service[]; +}; + +/** + * Describes the message fits.api.vm.v1.ServiceServiceListResponse. + * Use `create(ServiceServiceListResponseSchema)` to create a new message. + */ +export const ServiceServiceListResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_service, 2); + +/** + * ServiceService TODO what is a service? + * + * @generated from service fits.api.vm.v1.ServiceService + */ +export const ServiceService: GenService<{ + /** + * Returns a list of all services. + * + * @generated from rpc fits.api.vm.v1.ServiceService.List + */ + list: { + methodKind: "unary"; + input: typeof ServiceServiceListRequestSchema; + output: typeof ServiceServiceListResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_fits_api_vm_v1_service, 0); + diff --git a/js/fits/api/vm/v1/stagetype_pb.ts b/js/fits/api/vm/v1/stagetype_pb.ts new file mode 100644 index 0000000..dff3381 --- /dev/null +++ b/js/fits/api/vm/v1/stagetype_pb.ts @@ -0,0 +1,126 @@ +// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" +// @generated from file fits/api/vm/v1/stagetype.proto (package fits.api.vm.v1, syntax proto3) +/* eslint-disable */ + +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; +import type { ValidationError } from "../../v1/common_pb"; +import { file_fits_api_v1_common } from "../../v1/common_pb"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file fits/api/vm/v1/stagetype.proto. + */ +export const file_fits_api_vm_v1_stagetype: GenFile = /*@__PURE__*/ + fileDesc("Ch5maXRzL2FwaS92bS92MS9zdGFnZXR5cGUucHJvdG8SDmZpdHMuYXBpLnZtLnYxIjIKCVN0YWdlVHlwZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARINCgV0aXRsZRgCIAEoCSI8ChtTdGFnZVR5cGVTZXJ2aWNlTGlzdFJlcXVlc3QSHQoLdGVuYW50X3V1aWQYASABKAlCCLpIBXIDsAEBIoYBChxTdGFnZVR5cGVTZXJ2aWNlTGlzdFJlc3BvbnNlEi0KCnN0YWdldHlwZXMYASADKAsyGS5maXRzLmFwaS52bS52MS5TdGFnZVR5cGUSNwoRdmFsaWRhdGlvbl9lcnJvcnMYAiADKAsyHC5maXRzLmFwaS52MS5WYWxpZGF0aW9uRXJyb3IyggEKEFN0YWdlVHlwZVNlcnZpY2USbgoETGlzdBIrLmZpdHMuYXBpLnZtLnYxLlN0YWdlVHlwZVNlcnZpY2VMaXN0UmVxdWVzdBosLmZpdHMuYXBpLnZtLnYxLlN0YWdlVHlwZVNlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCQqwBChJjb20uZml0cy5hcGkudm0udjFCDlN0YWdldHlwZVByb3RvUAFaK2dpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3ZtL3YxO3ZtdjGiAgNGQVaqAg5GaXRzLkFwaS5WbS5WMcoCDkZpdHNcQXBpXFZtXFYx4gIaRml0c1xBcGlcVm1cVjFcR1BCTWV0YWRhdGHqAhFGaXRzOjpBcGk6OlZtOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common]); + +/** + * TODO what is a stage type? + * Maps to the upstream NucleusDBStageTypes model. + * TODO evaluate whether the uuid is really optional; the upstream API spec does not + * make this clear, so we validate it strictly for now. + * + * @generated from message fits.api.vm.v1.StageType + */ +export type StageType = Message<"fits.api.vm.v1.StageType"> & { + /** + * Uuid of this stage type + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * title of the stage type + * + * type NucleusDBStageTypes struct { + * StageTypeTitle string `json:"stage_type_title"` + * StageTypeUuid *openapi_types.UUID `json:"stage_type_uuid,omitempty"` + * } + * + * @generated from field: string title = 2; + */ + title: string; +}; + +/** + * Describes the message fits.api.vm.v1.StageType. + * Use `create(StageTypeSchema)` to create a new message. + */ +export const StageTypeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_stagetype, 0); + +/** + * StageTypeServiceListRequest is the request payload for a stage type list request. + * Maps to the upstream TenantInputModel. + * + * @generated from message fits.api.vm.v1.StageTypeServiceListRequest + */ +export type StageTypeServiceListRequest = Message<"fits.api.vm.v1.StageTypeServiceListRequest"> & { + /** + * Tenant to list available stage types for + * + * Note: the upstream model also has a requested_by field, which is intentionally + * omitted here because it is added by the auth layer from the request context. + * + * @generated from field: string tenant_uuid = 1; + */ + tenantUuid: string; +}; + +/** + * Describes the message fits.api.vm.v1.StageTypeServiceListRequest. + * Use `create(StageTypeServiceListRequestSchema)` to create a new message. + */ +export const StageTypeServiceListRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_stagetype, 1); + +/** + * StageTypeServiceListResponse is the response payload for a stage type list request + * + * @generated from message fits.api.vm.v1.StageTypeServiceListResponse + */ +export type StageTypeServiceListResponse = Message<"fits.api.vm.v1.StageTypeServiceListResponse"> & { + /** + * The available stage types + * + * @generated from field: repeated fits.api.vm.v1.StageType stagetypes = 1; + */ + stagetypes: StageType[]; + + /** + * Validation errors returned by the upstream API when the request is rejected (HTTP 422) + * TODO this is just a test + * + * @generated from field: repeated fits.api.v1.ValidationError validation_errors = 2; + */ + validationErrors: ValidationError[]; +}; + +/** + * Describes the message fits.api.vm.v1.StageTypeServiceListResponse. + * Use `create(StageTypeServiceListResponseSchema)` to create a new message. + */ +export const StageTypeServiceListResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_stagetype, 2); + +/** + * StageTypeService lists stage types available for VM instances. + * + * @generated from service fits.api.vm.v1.StageTypeService + */ +export const StageTypeService: GenService<{ + /** + * Returns a list of all stage types available for a tenant. + * + * @generated from rpc fits.api.vm.v1.StageTypeService.List + */ + list: { + methodKind: "unary"; + input: typeof StageTypeServiceListRequestSchema; + output: typeof StageTypeServiceListResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_fits_api_vm_v1_stagetype, 0); + diff --git a/js/fits/api/vm/v1/vlan_pb.ts b/js/fits/api/vm/v1/vlan_pb.ts new file mode 100644 index 0000000..19e980a --- /dev/null +++ b/js/fits/api/vm/v1/vlan_pb.ts @@ -0,0 +1,212 @@ +// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" +// @generated from file fits/api/vm/v1/vlan.proto (package fits.api.vm.v1, syntax proto3) +/* eslint-disable */ + +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; +import type { ValidationError } from "../../v1/common_pb"; +import { file_fits_api_v1_common } from "../../v1/common_pb"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file fits/api/vm/v1/vlan.proto. + */ +export const file_fits_api_vm_v1_vlan: GenFile = /*@__PURE__*/ + fileDesc("ChlmaXRzL2FwaS92bS92MS92bGFuLnByb3RvEg5maXRzLmFwaS52bS52MSLWAgoEVmxhbhIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIKCgJpZBgCIAEoBRIUCgxzdWJuZXRfdGl0bGUYAyABKAkSDgoGc3VibmV0GAQgASgJEhIKCnN1Ym5ldG1hc2sYBSABKAkSDwoHZ2F0ZXdheRgGIAEoCRIWCg5pcF9yYW5nZV9zdGFydBgHIAEoCRIUCgxpcF9yYW5nZV9lbmQYCCABKAkSEAoIdXNlX2RoY3AYCSABKAgSEQoJcG9kX3RpdGxlGAogASgJEhoKCHBvZF91dWlkGAsgASgJQgi6SAVyA7ABARIYChBzdGFnZV90eXBlX3RpdGxlGAwgASgJEiEKD3N0YWdlX3R5cGVfdXVpZBgNIAEoCUIIukgFcgOwAQESHQoLdGVuYW50X3V1aWQYDiABKAlCCLpIBXIDsAEBEhQKDHRlbmFudF90aXRsZRgPIAEoCSI3ChZWbGFuU2VydmljZUxpc3RSZXF1ZXN0Eh0KC3RlbmFudF91dWlkGAEgASgJQgi6SAVyA7ABASJ3ChdWbGFuU2VydmljZUxpc3RSZXNwb25zZRIjCgV2bGFucxgBIAMoCzIULmZpdHMuYXBpLnZtLnYxLlZsYW4SNwoRdmFsaWRhdGlvbl9lcnJvcnMYAiADKAsyHC5maXRzLmFwaS52MS5WYWxpZGF0aW9uRXJyb3IycwoLVmxhblNlcnZpY2USZAoETGlzdBImLmZpdHMuYXBpLnZtLnYxLlZsYW5TZXJ2aWNlTGlzdFJlcXVlc3QaJy5maXRzLmFwaS52bS52MS5WbGFuU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAJCpwEKEmNvbS5maXRzLmFwaS52bS52MUIJVmxhblByb3RvUAFaK2dpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3ZtL3YxO3ZtdjGiAgNGQVaqAg5GaXRzLkFwaS5WbS5WMcoCDkZpdHNcQXBpXFZtXFYx4gIaRml0c1xBcGlcVm1cVjFcR1BCTWV0YWRhdGHqAhFGaXRzOjpBcGk6OlZtOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common]); + +/** + * Vlan is a VLAN that a VM can be connected to. + * Maps to the upstream NucleusDBVlans model. + * TODO evaluate which of the uuid fields are really optional; the upstream API + * spec does not make this clear, so we validate them strictly for now. + * + * @generated from message fits.api.vm.v1.Vlan + */ +export type Vlan = Message<"fits.api.vm.v1.Vlan"> & { + /** + * Uuid of this VLAN + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * Id of this VLAN + * + * @generated from field: int32 id = 2; + */ + id: number; + + /** + * Title of the subnet this VLAN belongs to + * + * @generated from field: string subnet_title = 3; + */ + subnetTitle: string; + + /** + * CIDR of the subnet this VLAN belongs to + * + * @generated from field: string subnet = 4; + */ + subnet: string; + + /** + * Subnetmask of this VLAN + * + * @generated from field: string subnetmask = 5; + */ + subnetmask: string; + + /** + * Gateway of this VLAN + * + * @generated from field: string gateway = 6; + */ + gateway: string; + + /** + * Start of the usable IP range of this VLAN + * + * @generated from field: string ip_range_start = 7; + */ + ipRangeStart: string; + + /** + * End of the usable IP range of this VLAN + * + * @generated from field: string ip_range_end = 8; + */ + ipRangeEnd: string; + + /** + * Whether DHCP is used on this VLAN + * + * @generated from field: bool use_dhcp = 9; + */ + useDhcp: boolean; + + /** + * Title of the pod this VLAN belongs to + * + * @generated from field: string pod_title = 10; + */ + podTitle: string; + + /** + * Uuid of the pod this VLAN belongs to + * + * @generated from field: string pod_uuid = 11; + */ + podUuid: string; + + /** + * Title of the stage type of this VLAN + * + * @generated from field: string stage_type_title = 12; + */ + stageTypeTitle: string; + + /** + * Uuid of the stage type of this VLAN + * + * @generated from field: string stage_type_uuid = 13; + */ + stageTypeUuid: string; + + /** + * Uuid of the tenant this VLAN belongs to + * + * @generated from field: string tenant_uuid = 14; + */ + tenantUuid: string; + + /** + * Title of the tenant this VLAN belongs to + * + * @generated from field: string tenant_title = 15; + */ + tenantTitle: string; +}; + +/** + * Describes the message fits.api.vm.v1.Vlan. + * Use `create(VlanSchema)` to create a new message. + */ +export const VlanSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vlan, 0); + +/** + * VlanServiceListRequest is the request payload for a VLAN list request. + * Maps to the upstream TenantInputModel. + * + * @generated from message fits.api.vm.v1.VlanServiceListRequest + */ +export type VlanServiceListRequest = Message<"fits.api.vm.v1.VlanServiceListRequest"> & { + /** + * Tenant to list available VLANs for + * + * Note: the upstream model also has a requested_by field, which is intentionally + * omitted here because it is added by the auth layer from the request context. + * + * @generated from field: string tenant_uuid = 1; + */ + tenantUuid: string; +}; + +/** + * Describes the message fits.api.vm.v1.VlanServiceListRequest. + * Use `create(VlanServiceListRequestSchema)` to create a new message. + */ +export const VlanServiceListRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vlan, 1); + +/** + * VlanServiceListResponse is the response payload for a VLAN list request + * + * @generated from message fits.api.vm.v1.VlanServiceListResponse + */ +export type VlanServiceListResponse = Message<"fits.api.vm.v1.VlanServiceListResponse"> & { + /** + * The available VLANs + * + * @generated from field: repeated fits.api.vm.v1.Vlan vlans = 1; + */ + vlans: Vlan[]; + + /** + * Validation errors returned by the upstream API when the request is rejected (HTTP 422) + * TODO this is just a test + * + * @generated from field: repeated fits.api.v1.ValidationError validation_errors = 2; + */ + validationErrors: ValidationError[]; +}; + +/** + * Describes the message fits.api.vm.v1.VlanServiceListResponse. + * Use `create(VlanServiceListResponseSchema)` to create a new message. + */ +export const VlanServiceListResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vlan, 2); + +/** + * VLANService lists VLANs avaiable for VM instances. + * + * @generated from service fits.api.vm.v1.VlanService + */ +export const VlanService: GenService<{ + /** + * Returns a list of all VLANs available for a tenant. + * + * @generated from rpc fits.api.vm.v1.VlanService.List + */ + list: { + methodKind: "unary"; + input: typeof VlanServiceListRequestSchema; + output: typeof VlanServiceListResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_fits_api_vm_v1_vlan, 0); + diff --git a/js/fits/api/vm/v1/vm_pb.ts b/js/fits/api/vm/v1/vm_pb.ts index daed3a1..b7d9be0 100644 --- a/js/fits/api/vm/v1/vm_pb.ts +++ b/js/fits/api/vm/v1/vm_pb.ts @@ -14,7 +14,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file fits/api/vm/v1/vm.proto. */ export const file_fits_api_vm_v1_vm: GenFile = /*@__PURE__*/ - fileDesc("ChdmaXRzL2FwaS92bS92MS92bS5wcm90bxIOZml0cy5hcGkudm0udjEiewoKVk1JbnN0YW5jZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIfCgRtZXRhGAIgASgLMhEuZml0cy5hcGkudjEuTWV0YRIZCgRuYW1lGAMgASgJQgu6SAhyBsCzrrECARIZCgdwcm9qZWN0GAQgASgJQgi6SAVyA7ABASJIChNWTVNlcnZpY2VHZXRSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBIj4KFFZNU2VydmljZUdldFJlc3BvbnNlEiYKAnZtGAEgASgLMhouZml0cy5hcGkudm0udjEuVk1JbnN0YW5jZSKUAgoWVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARIeCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECAUgAiAEBEgsKA2NwdRgDIAEoDRILCgNyYW0YBCABKA0SGQoHb3NfdXVpZBgFIAEoCUIIukgFcgOwAQESGwoJdmxhbl91dWlkGAYgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAcgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYCCABKAlCCLpIBXIDsAEBEiMKBWRpc2tzGAkgAygLMhQuZml0cy5hcGkudm0udjEuRGlza0IHCgVfbmFtZSKoAQoERGlzaxITCgthdXRvX2V4dGVuZBgBIAEoCBIXCgpzaXplX2luX2diGAIgASgESACIAQESGQoMZHJpdmVfbGV0dGVyGAMgASgJSAGIAQESDQoFbGFiZWwYBCABKAkSGAoLbW91bnRfcG9pbnQYBSABKAlIAogBAUINCgtfc2l6ZV9pbl9nYkIPCg1fZHJpdmVfbGV0dGVyQg4KDF9tb3VudF9wb2ludCIZChdWTVNlcnZpY2VDcmVhdGVSZXNwb25zZSJpChZWTVNlcnZpY2VVcGRhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBIhkKF1ZNU2VydmljZVVwZGF0ZVJlc3BvbnNlIjEKFFZNU2VydmljZUxpc3RSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIhcKFVZNU2VydmljZUxpc3RSZXNwb25zZSIzChZWTVNlcnZpY2VEZWxldGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIhkKF1ZNU2VydmljZURlbGV0ZVJlc3BvbnNlMoEECglWTVNlcnZpY2USXQoDR2V0EiMuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlR2V0UmVxdWVzdBokLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUdldFJlc3BvbnNlIgvK8xgDAQID4PMYAhJlCgZDcmVhdGUSJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VDcmVhdGVSZXF1ZXN0GicuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESZQoGVXBkYXRlEiYuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlVXBkYXRlUmVxdWVzdBonLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZVVwZGF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmAKBExpc3QSJC5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VMaXN0UmVxdWVzdBolLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAISZQoGRGVsZXRlEiYuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlRGVsZXRlUmVxdWVzdBonLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZURlbGV0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBQqUBChJjb20uZml0cy5hcGkudm0udjFCB1ZtUHJvdG9QAVorZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdm0vdjE7dm12MaICA0ZBVqoCDkZpdHMuQXBpLlZtLlYxygIORml0c1xBcGlcVm1cVjHiAhpGaXRzXEFwaVxWbVxWMVxHUEJNZXRhZGF0YeoCEUZpdHM6OkFwaTo6Vm06OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); + fileDesc("ChdmaXRzL2FwaS92bS92MS92bS5wcm90bxIOZml0cy5hcGkudm0udjEiewoKVk1JbnN0YW5jZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIfCgRtZXRhGAIgASgLMhEuZml0cy5hcGkudjEuTWV0YRIZCgRuYW1lGAMgASgJQgu6SAhyBsCzrrECARIZCgdwcm9qZWN0GAQgASgJQgi6SAVyA7ABASJIChNWTVNlcnZpY2VHZXRSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBIj4KFFZNU2VydmljZUdldFJlc3BvbnNlEiYKAnZtGAEgASgLMhouZml0cy5hcGkudm0udjEuVk1JbnN0YW5jZSKZAgoWVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBIeCgxwcm9qZWN0X3V1aWQYASABKAlCCLpIBXIDsAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSACIAQESCwoDY3B1GAMgASgNEgsKA3JhbRgEIAEoDRIZCgdvc191dWlkGAUgASgJQgi6SAVyA7ABARIbCgl2bGFuX3V1aWQYBiABKAlCCLpIBXIDsAEBEh8KDWxvY2F0aW9uX3V1aWQYByABKAlCCLpIBXIDsAEBEh4KDGNvbnRhY3RfdXVpZBgIIAEoCUIIukgFcgOwAQESIwoFZGlza3MYCSADKAsyFC5maXRzLmFwaS52bS52MS5EaXNrQgcKBV9uYW1lIqgBCgREaXNrEhMKC2F1dG9fZXh0ZW5kGAEgASgIEhcKCnNpemVfaW5fZ2IYAiABKARIAIgBARIZCgxkcml2ZV9sZXR0ZXIYAyABKAlIAYgBARINCgVsYWJlbBgEIAEoCRIYCgttb3VudF9wb2ludBgFIAEoCUgCiAEBQg0KC19zaXplX2luX2diQg8KDV9kcml2ZV9sZXR0ZXJCDgoMX21vdW50X3BvaW50IhkKF1ZNU2VydmljZUNyZWF0ZVJlc3BvbnNlImkKFlZNU2VydmljZVVwZGF0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQESNAoLdXBkYXRlX21ldGEYAiABKAsyFy5maXRzLmFwaS52MS5VcGRhdGVNZXRhQga6SAPIAQEiGQoXVk1TZXJ2aWNlVXBkYXRlUmVzcG9uc2UiMQoUVk1TZXJ2aWNlTGlzdFJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQEiFwoVVk1TZXJ2aWNlTGlzdFJlc3BvbnNlIjMKFlZNU2VydmljZURlbGV0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQEiGQoXVk1TZXJ2aWNlRGVsZXRlUmVzcG9uc2UygQQKCVZNU2VydmljZRJdCgNHZXQSIy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VHZXRSZXF1ZXN0GiQuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmUKBkNyZWF0ZRImLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUNyZWF0ZVJlcXVlc3QaJy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VDcmVhdGVSZXNwb25zZSIKyvMYAgEC4PMYARJlCgZVcGRhdGUSJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VVcGRhdGVSZXF1ZXN0GicuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESYAoETGlzdBIkLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUxpc3RSZXF1ZXN0GiUuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlTGlzdFJlc3BvbnNlIgvK8xgDAQID4PMYAhJlCgZEZWxldGUSJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VEZWxldGVSZXF1ZXN0GicuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlRGVsZXRlUmVzcG9uc2UiCsrzGAIBAuDzGAFCpQEKEmNvbS5maXRzLmFwaS52bS52MUIHVm1Qcm90b1ABWitnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92bS92MTt2bXYxogIDRkFWqgIORml0cy5BcGkuVm0uVjHKAg5GaXRzXEFwaVxWbVxWMeICGkZpdHNcQXBpXFZtXFYxXEdQQk1ldGFkYXRh6gIRRml0czo6QXBpOjpWbTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); /** * VM Instance Messages @@ -23,28 +23,28 @@ export const file_fits_api_vm_v1_vm: GenFile = /*@__PURE__*/ */ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { /** - * Uuid of this vm + * Uuid of this VM * * @generated from field: string uuid = 1; */ uuid: string; /** - * Meta for this vm + * Meta for this VM * * @generated from field: fits.api.v1.Meta meta = 2; */ meta?: Meta | undefined; /** - * Name of this vm + * Name of this VM * * @generated from field: string name = 3; */ name: string; /** - * Project where this vm address belongs to + * Project where this VM belongs to * * @generated from field: string project = 4; */ @@ -65,14 +65,14 @@ export const VMInstanceSchema: GenMessage = /*@__PURE__*/ */ export type VMServiceGetRequest = Message<"fits.api.vm.v1.VMServiceGetRequest"> & { /** - * Uuid of this vm + * Uuid of this VM * * @generated from field: string uuid = 1; */ uuid: string; /** - * Project where this vm address belongs to + * Project where this VM belongs to * * @generated from field: string project = 2; */ @@ -93,7 +93,7 @@ export const VMServiceGetRequestSchema: GenMessage = /*@__P */ export type VMServiceGetResponse = Message<"fits.api.vm.v1.VMServiceGetResponse"> & { /** - * The vm + * The VM * * @generated from field: fits.api.vm.v1.VMInstance vm = 1; */ @@ -114,66 +114,74 @@ export const VMServiceGetResponseSchema: GenMessage = /*@_ */ export type VMServiceCreateRequest = Message<"fits.api.vm.v1.VMServiceCreateRequest"> & { /** - * Project of the vm + * Project of the VM * - * @generated from field: string project = 1; + * @generated from field: string project_uuid = 1; */ - project: string; + projectUuid: string; /** - * Name of the vm + * Name of the VM * * @generated from field: optional string name = 2; */ name?: string | undefined; /** - * Number of CPUs of this vm + * Number of CPUs of this VM * * @generated from field: uint32 cpu = 3; */ cpu: number; /** - * Ram of the vm in GB + * RAM of the VM in GB * * @generated from field: uint32 ram = 4; */ ram: number; /** - * OS Uuid of the OS to install in the vm instance + * OS Uuid of the OS to install in the VM instance * * @generated from field: string os_uuid = 5; */ osUuid: string; /** - * VLAN Uuid of the VLAN to install in the vm instance into + * VLAN Uuid of the VLAN to install in the VM instance into * * @generated from field: string vlan_uuid = 6; */ vlanUuid: string; /** - * Location Uuid of the datacenter location to install in the vm instance + * Location Uuid of the datacenter location to install in the VM instance * * @generated from field: string location_uuid = 7; */ locationUuid: string; /** - * Contact Uuid of who is the responsible contact of the vm instance + * Contact Uuid of who is the responsible contact of the VM instance * * @generated from field: string contact_uuid = 8; */ contactUuid: string; /** - * List of disks for this vm - * + * List of disks for this VM + * + * TODO differentiation + * oneof vmtype { + * // ensure at least one match is specified. + * option (buf.validate.oneof).required = true; + * VMServiceCreateWindowsRequest windows = 21; + * VMServiceCreateLinuxRequest linux = 22; + * } * Disks []DiskInputModel - * RequestedBy *string // TODO is inherited from the token making the create request -> stored in meta.createdBy + * TODO is inherited from the token making the create request -> stored in meta.createdBy + * RequestedBy *string * * @generated from field: repeated fits.api.vm.v1.Disk disks = 9; */ @@ -262,7 +270,7 @@ export const VMServiceCreateResponseSchema: GenMessage */ export type VMServiceUpdateRequest = Message<"fits.api.vm.v1.VMServiceUpdateRequest"> & { /** - * Project of the vm + * Project of the VM * * @generated from field: string project = 1; */ @@ -305,7 +313,7 @@ export const VMServiceUpdateResponseSchema: GenMessage */ export type VMServiceListRequest = Message<"fits.api.vm.v1.VMServiceListRequest"> & { /** - * Project of the vm + * Project of the VM * * @generated from field: string project = 1; */ @@ -341,7 +349,7 @@ export const VMServiceListResponseSchema: GenMessage = /* */ export type VMServiceDeleteRequest = Message<"fits.api.vm.v1.VMServiceDeleteRequest"> & { /** - * Project of the vm + * Project of the VM * * @generated from field: string project = 1; */ @@ -371,13 +379,13 @@ export const VMServiceDeleteResponseSchema: GenMessage messageDesc(file_fits_api_vm_v1_vm, 11); /** - * VMService provides VM address management operations. + * VMService provides VM CRUD perations. * * @generated from service fits.api.vm.v1.VMService */ export const VMService: GenService<{ /** - * Returns the VM address with the specified VM. + * Returns the VM with the specified UUID. * * @generated from rpc fits.api.vm.v1.VMService.Get */ @@ -387,7 +395,7 @@ export const VMService: GenService<{ output: typeof VMServiceGetResponseSchema; }, /** - * Creates a new VM address. + * Creates a new VM. * * @generated from rpc fits.api.vm.v1.VMService.Create */ @@ -397,7 +405,7 @@ export const VMService: GenService<{ output: typeof VMServiceCreateResponseSchema; }, /** - * Updates an VM address. + * Updates a VM. * * @generated from rpc fits.api.vm.v1.VMService.Update */ @@ -407,7 +415,7 @@ export const VMService: GenService<{ output: typeof VMServiceUpdateResponseSchema; }, /** - * Returns the list of all VM addresses. + * Returns the list of all VMs. * * @generated from rpc fits.api.vm.v1.VMService.List */ @@ -417,7 +425,7 @@ export const VMService: GenService<{ output: typeof VMServiceListResponseSchema; }, /** - * Deletes an VM address. + * Deletes a VM. * * @generated from rpc fits.api.vm.v1.VMService.Delete */ diff --git a/proto/fits/api/v1/common.proto b/proto/fits/api/v1/common.proto index 8daf65c..548d276 100644 --- a/proto/fits/api/v1/common.proto +++ b/proto/fits/api/v1/common.proto @@ -160,3 +160,14 @@ enum OptimisticLockingStrategy { // and fetches the most recent entity before updating with the given values with the update request OPTIMISTIC_LOCKING_STRATEGY_SERVER = 2; } + +// ValidationError describes a single validation problem reported by an upstream API. +// Used to surface structured validation errors (e.g. HTTP 422) returned by backends. +message ValidationError { + // Location of the validation error within the request, e.g. ["body", "tenant_uuid"] + repeated string loc = 1; + // Human readable error message + string msg = 2; + // Type of the validation error, e.g. "value_error" + string type = 3; +} diff --git a/proto/fits/api/vm/v1/location.proto b/proto/fits/api/vm/v1/location.proto new file mode 100644 index 0000000..2d3f68c --- /dev/null +++ b/proto/fits/api/vm/v1/location.proto @@ -0,0 +1,35 @@ +syntax = "proto3"; + +package fits.api.vm.v1; + +import "buf/validate/validate.proto"; +import "fits/api/v1/common.proto"; + +// LocationService lists datacenter locations available for VM instances. +service LocationService { + // Returns a list of all datacenter locations. + rpc List(LocationServiceListRequest) returns (LocationServiceListResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; + option (fits.api.v1.auditing) = AUDITING_EXCLUDED; + } +} + +// Location is the definition of an available datacenter location for VM instances +message Location { + // Uuid of this location + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // title of the location + string title = 2; +} + +// LocationServiceListRequest is the request payload for a location list request. +// The upstream nulink API accepts no body or parameters, so this is intentionally empty. +message LocationServiceListRequest {} + +// LocationServiceListResponse is the response payload for a location list request +message LocationServiceListResponse { + // The available locations + repeated Location locations = 1; +} diff --git a/proto/fits/api/vm/v1/os.proto b/proto/fits/api/vm/v1/os.proto index 6d314db..deadd34 100644 --- a/proto/fits/api/vm/v1/os.proto +++ b/proto/fits/api/vm/v1/os.proto @@ -3,12 +3,44 @@ syntax = "proto3"; package fits.api.vm.v1; import "buf/validate/validate.proto"; +import "fits/api/v1/common.proto"; -// TODO matthias define get list service +// OSService lists operating systems available for VM instances. +service OSService { + // Returns a list of all OSs. + rpc List(OSServiceListRequest) returns (OSServiceListResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; + option (fits.api.v1.auditing) = AUDITING_EXCLUDED; + } +} -// Os is the definition of a potential OS of a VM instance -// TODO create a dedicated service -message Os { - // Uuid of this os +// OS is the definition of an available OS for VM instances +message OS { + // Uuid of this OS string uuid = 1 [(buf.validate.field).string.uuid = true]; + // Title of the OS + string title = 2; + // Type of the OS + string type = 3; + // Version of the OS + string version = 4; + + // type NucleusDBOss struct { + // OsTitle string `json:"os_title"` + // OsType string `json:"os_type"` + // OsUuid *openapi_types.UUID `json:"os_uuid,omitempty"` + // OsVersion string `json:"os_version"` + // } +} + +// OSServiceListRequest is the request payload for a OS list request. +// The upstream nulink API accepts no body or parameters, so this is intentionally empty. +message OSServiceListRequest {} + +// OSServiceListResponse is the response payload for a OS list request +message OSServiceListResponse { + // The available OSs + repeated OS oss = 1; } diff --git a/proto/fits/api/vm/v1/service.proto b/proto/fits/api/vm/v1/service.proto new file mode 100644 index 0000000..c701217 --- /dev/null +++ b/proto/fits/api/vm/v1/service.proto @@ -0,0 +1,39 @@ +syntax = "proto3"; + +package fits.api.vm.v1; + +import "buf/validate/validate.proto"; +import "fits/api/v1/common.proto"; + +// ServiceService TODO what is a service? +service ServiceService { + // Returns a list of all services. + rpc List(ServiceServiceListRequest) returns (ServiceServiceListResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; + option (fits.api.v1.auditing) = AUDITING_EXCLUDED; + } +} + +// TODO what is a service? +message Service { + // Uuid of this Service + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // title of the Service + string title = 2; + // type NucleusDBServices struct { + // ServiceTitle string `json:"service_title"` + // ServiceUuid string `json:"service_uuid"` + // } +} + +// ServiceServiceListRequest is the request payload for a service list request. +// The upstream nulink API accepts no body or parameters, so this is intentionally empty. +message ServiceServiceListRequest {} + +// ServiceServiceListResponse is the response payload for a service list request +message ServiceServiceListResponse { + // The available services + repeated Service services = 1; +} diff --git a/proto/fits/api/vm/v1/stagetype.proto b/proto/fits/api/vm/v1/stagetype.proto new file mode 100644 index 0000000..32337de --- /dev/null +++ b/proto/fits/api/vm/v1/stagetype.proto @@ -0,0 +1,50 @@ +syntax = "proto3"; + +package fits.api.vm.v1; + +import "buf/validate/validate.proto"; +import "fits/api/v1/common.proto"; + +// StageTypeService lists stage types available for VM instances. +service StageTypeService { + // Returns a list of all stage types available for a tenant. + rpc List(StageTypeServiceListRequest) returns (StageTypeServiceListResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; + option (fits.api.v1.auditing) = AUDITING_EXCLUDED; + } +} + +// TODO what is a stage type? +// Maps to the upstream NucleusDBStageTypes model. +// TODO evaluate whether the uuid is really optional; the upstream API spec does not +// make this clear, so we validate it strictly for now. +message StageType { + // Uuid of this stage type + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // title of the stage type + string title = 2; + // type NucleusDBStageTypes struct { + // StageTypeTitle string `json:"stage_type_title"` + // StageTypeUuid *openapi_types.UUID `json:"stage_type_uuid,omitempty"` + // } +} + +// StageTypeServiceListRequest is the request payload for a stage type list request. +// Maps to the upstream TenantInputModel. +message StageTypeServiceListRequest { + // Tenant to list available stage types for + string tenant_uuid = 1 [(buf.validate.field).string.uuid = true]; + // Note: the upstream model also has a requested_by field, which is intentionally + // omitted here because it is added by the auth layer from the request context. +} + +// StageTypeServiceListResponse is the response payload for a stage type list request +message StageTypeServiceListResponse { + // The available stage types + repeated StageType stagetypes = 1; + // Validation errors returned by the upstream API when the request is rejected (HTTP 422) + // TODO this is just a test + repeated fits.api.v1.ValidationError validation_errors = 2; +} diff --git a/proto/fits/api/vm/v1/vlan.proto b/proto/fits/api/vm/v1/vlan.proto new file mode 100644 index 0000000..ce6199a --- /dev/null +++ b/proto/fits/api/vm/v1/vlan.proto @@ -0,0 +1,90 @@ +syntax = "proto3"; + +package fits.api.vm.v1; + +import "buf/validate/validate.proto"; +import "fits/api/v1/common.proto"; + +// VLANService lists VLANs avaiable for VM instances. +service VlanService { + // Returns a list of all VLANs available for a tenant. + rpc List(VlanServiceListRequest) returns (VlanServiceListResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; + option (fits.api.v1.auditing) = AUDITING_EXCLUDED; + } +} + +// Vlan is a VLAN that a VM can be connected to. +// Maps to the upstream NucleusDBVlans model. +// TODO evaluate which of the uuid fields are really optional; the upstream API +// spec does not make this clear, so we validate them strictly for now. +message Vlan { + // Uuid of this VLAN + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // Id of this VLAN + int32 id = 2; + // Title of the subnet this VLAN belongs to + string subnet_title = 3; + // CIDR of the subnet this VLAN belongs to + string subnet = 4; + // Subnetmask of this VLAN + string subnetmask = 5; + // Gateway of this VLAN + string gateway = 6; + // Start of the usable IP range of this VLAN + string ip_range_start = 7; + // End of the usable IP range of this VLAN + string ip_range_end = 8; + // Whether DHCP is used on this VLAN + bool use_dhcp = 9; + // Title of the pod this VLAN belongs to + string pod_title = 10; + // Uuid of the pod this VLAN belongs to + string pod_uuid = 11 [(buf.validate.field).string.uuid = true]; + // Title of the stage type of this VLAN + string stage_type_title = 12; + // Uuid of the stage type of this VLAN + string stage_type_uuid = 13 [(buf.validate.field).string.uuid = true]; + // Uuid of the tenant this VLAN belongs to + string tenant_uuid = 14 [(buf.validate.field).string.uuid = true]; + // Title of the tenant this VLAN belongs to + string tenant_title = 15; + + // type NucleusDBVlans struct { + // Gateway string `json:"gateway"` + // IpRangeEnd string `json:"ip_range_end"` + // IpRangeStart string `json:"ip_range_start"` + // PodTitle string `json:"pod_title"` + // PodUuid *openapi_types.UUID `json:"pod_uuid,omitempty"` + // StageTypeTitle string `json:"stage_type_title"` + // StageTypeUuid *openapi_types.UUID `json:"stage_type_uuid,omitempty"` + // Subnet string `json:"subnet"` + // SubnetTitle string `json:"subnet_title"` + // Subnetmask string `json:"subnetmask"` + // TenantTitle string `json:"tenant_title"` + // TenantUuid string `json:"tenant_uuid"` + // UseDhcp bool `json:"use_dhcp"` + // VlanId int `json:"vlan_id"` + // VlanUuid *openapi_types.UUID `json:"vlan_uuid,omitempty"` + // } +} + +// VlanServiceListRequest is the request payload for a VLAN list request. +// Maps to the upstream TenantInputModel. +message VlanServiceListRequest { + // Tenant to list available VLANs for + string tenant_uuid = 1 [(buf.validate.field).string.uuid = true]; + // Note: the upstream model also has a requested_by field, which is intentionally + // omitted here because it is added by the auth layer from the request context. +} + +// VlanServiceListResponse is the response payload for a VLAN list request +message VlanServiceListResponse { + // The available VLANs + repeated Vlan vlans = 1; + // Validation errors returned by the upstream API when the request is rejected (HTTP 422) + // TODO this is just a test + repeated fits.api.v1.ValidationError validation_errors = 2; +} diff --git a/proto/fits/api/vm/v1/vm.proto b/proto/fits/api/vm/v1/vm.proto index d0ca7a4..2e17503 100644 --- a/proto/fits/api/vm/v1/vm.proto +++ b/proto/fits/api/vm/v1/vm.proto @@ -6,35 +6,35 @@ import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; -// VMService provides VM address management operations. +// VMService provides VM CRUD perations. service VMService { - // Returns the VM address with the specified VM. + // Returns the VM with the specified UUID. rpc Get(VMServiceGetRequest) returns (VMServiceGetResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; option (fits.api.v1.auditing) = AUDITING_EXCLUDED; } - // Creates a new VM address. + // Creates a new VM. rpc Create(VMServiceCreateRequest) returns (VMServiceCreateResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_INCLUDED; } - // Updates an VM address. + // Updates a VM. rpc Update(VMServiceUpdateRequest) returns (VMServiceUpdateResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_INCLUDED; } - // Returns the list of all VM addresses. + // Returns the list of all VMs. rpc List(VMServiceListRequest) returns (VMServiceListResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; option (fits.api.v1.auditing) = AUDITING_EXCLUDED; } - // Deletes an VM address. + // Deletes a VM. rpc Delete(VMServiceDeleteRequest) returns (VMServiceDeleteResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; @@ -44,13 +44,13 @@ service VMService { // VM Instance Messages message VMInstance { - // Uuid of this vm + // Uuid of this VM string uuid = 1 [(buf.validate.field).string.uuid = true]; - // Meta for this vm + // Meta for this VM fits.api.v1.Meta meta = 2; - // Name of this vm + // Name of this VM string name = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; - // Project where this vm address belongs to + // Project where this VM belongs to string project = 4 [(buf.validate.field).string.uuid = true]; } @@ -58,40 +58,54 @@ message VMInstance { // VMServiceGetRequest TODO message VMServiceGetRequest { - // Uuid of this vm + // Uuid of this VM string uuid = 1 [(buf.validate.field).string.uuid = true]; - // Project where this vm address belongs to + // Project where this VM belongs to string project = 2 [(buf.validate.field).string.uuid = true]; } // VMServiceGetResponse TODO message VMServiceGetResponse { - // The vm + // The VM VMInstance vm = 1; } +// TODO sample for windows/linux differentiation +// message VMServiceCreateWindowsRequest { +// Windows Disk +// } +// message VMServiceCreateLinuxRequest { +// } // VMServiceCreateRequest TODO message VMServiceCreateRequest { - // Project of the vm - string project = 1 [(buf.validate.field).string.uuid = true]; - // Name of the vm + // Project of the VM + string project_uuid = 1 [(buf.validate.field).string.uuid = true]; + // Name of the VM optional string name = 2 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; - // Number of CPUs of this vm + // Number of CPUs of this VM uint32 cpu = 3; - // Ram of the vm in GB + // RAM of the VM in GB uint32 ram = 4; - // OS Uuid of the OS to install in the vm instance + // OS Uuid of the OS to install in the VM instance string os_uuid = 5 [(buf.validate.field).string.uuid = true]; - // VLAN Uuid of the VLAN to install in the vm instance into + // VLAN Uuid of the VLAN to install in the VM instance into string vlan_uuid = 6 [(buf.validate.field).string.uuid = true]; - // Location Uuid of the datacenter location to install in the vm instance + // Location Uuid of the datacenter location to install in the VM instance string location_uuid = 7 [(buf.validate.field).string.uuid = true]; - // Contact Uuid of who is the responsible contact of the vm instance + // Contact Uuid of who is the responsible contact of the VM instance string contact_uuid = 8 [(buf.validate.field).string.uuid = true]; - // List of disks for this vm + // List of disks for this VM repeated Disk disks = 9; + // TODO differentiation + // oneof vmtype { + // // ensure at least one match is specified. + // option (buf.validate.oneof).required = true; + // VMServiceCreateWindowsRequest windows = 21; + // VMServiceCreateLinuxRequest linux = 22; + // } // Disks []DiskInputModel - // RequestedBy *string // TODO is inherited from the token making the create request -> stored in meta.createdBy + // TODO is inherited from the token making the create request -> stored in meta.createdBy + // RequestedBy *string // AccountingKey *string // Availability VMInstanceLinuxCreateInputModelAvailability @@ -129,7 +143,7 @@ message VMServiceCreateResponse {} // VMServiceUpdateRequest TODO message VMServiceUpdateRequest { - // Project of the vm + // Project of the VM string project = 1 [(buf.validate.field).string.uuid = true]; // TODO updatable fields @@ -143,7 +157,7 @@ message VMServiceUpdateResponse {} // VMServiceListRequest TODO message VMServiceListRequest { - // Project of the vm + // Project of the VM string project = 1 [(buf.validate.field).string.uuid = true]; } @@ -152,7 +166,7 @@ message VMServiceListResponse {} // VMServiceDeleteRequest TODO message VMServiceDeleteRequest { - // Project of the vm + // Project of the VM string project = 1 [(buf.validate.field).string.uuid = true]; } diff --git a/python/fits/api/v1/common_pb2.py b/python/fits/api/v1/common_pb2.py index c63376a..3ffe7cb 100644 --- a/python/fits/api/v1/common_pb2.py +++ b/python/fits/api/v1/common_pb2.py @@ -28,7 +28,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66its/api/v1/common.proto\x12\x0b\x66its.api.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a google/protobuf/descriptor.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"O\n\x06Paging\x12\x17\n\x04page\x18\x01 \x01(\x04H\x00R\x04page\x88\x01\x01\x12\x19\n\x05\x63ount\x18\x02 \x01(\x04H\x01R\x05\x63ount\x88\x01\x01\x42\x07\n\x05_pageB\x08\n\x06_count\"\x9c\x01\n\x06Labels\x12W\n\x06labels\x18\x01 \x03(\x0b\x32\x1f.fits.api.v1.Labels.LabelsEntryB\x1e\xbaH\x1b\x9a\x01\x18\"\x07r\x05\x10\x01\x18\x80\x02*\x07r\x05\x10\x00\x18\x80\x02\xb8\x95\xb8\xb1\x02\x01R\x06labels\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xd9\x01\n\x04Meta\x12\x30\n\x06labels\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.LabelsH\x00R\x06labels\x88\x01\x01\x12\x39\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x1e\n\ngeneration\x18\x04 \x01(\x04R\ngenerationB\t\n\x07_labels\"S\n\x0cUpdateLabels\x12+\n\x06update\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06update\x12\x16\n\x06remove\x18\x02 \x03(\tR\x06remove\"\xa4\x01\n\nUpdateMeta\x12\x39\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12[\n\x10locking_strategy\x18\x02 \x01(\x0e\x32&.fits.api.v1.OptimisticLockingStrategyB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0flockingStrategy*\x87\x01\n\nTenantRole\x12\x1b\n\x17TENANT_ROLE_UNSPECIFIED\x10\x00\x12\x15\n\x11TENANT_ROLE_OWNER\x10\x01\x12\x16\n\x12TENANT_ROLE_EDITOR\x10\x02\x12\x16\n\x12TENANT_ROLE_VIEWER\x10\x03\x12\x15\n\x11TENANT_ROLE_GUEST\x10\x04*u\n\x0bProjectRole\x12\x1c\n\x18PROJECT_ROLE_UNSPECIFIED\x10\x00\x12\x16\n\x12PROJECT_ROLE_OWNER\x10\x01\x12\x17\n\x13PROJECT_ROLE_EDITOR\x10\x02\x12\x17\n\x13PROJECT_ROLE_VIEWER\x10\x03*U\n\tAdminRole\x12\x1a\n\x16\x41\x44MIN_ROLE_UNSPECIFIED\x10\x00\x12\x15\n\x11\x41\x44MIN_ROLE_EDITOR\x10\x01\x12\x15\n\x11\x41\x44MIN_ROLE_VIEWER\x10\x02*T\n\nVisibility\x12\x1a\n\x16VISIBILITY_UNSPECIFIED\x10\x00\x12\x15\n\x11VISIBILITY_PUBLIC\x10\x01\x12\x13\n\x0fVISIBILITY_SELF\x10\x02*R\n\x08\x41uditing\x12\x18\n\x14\x41UDITING_UNSPECIFIED\x10\x00\x12\x15\n\x11\x41UDITING_INCLUDED\x10\x01\x12\x15\n\x11\x41UDITING_EXCLUDED\x10\x02*\x98\x01\n\x19OptimisticLockingStrategy\x12+\n\'OPTIMISTIC_LOCKING_STRATEGY_UNSPECIFIED\x10\x00\x12&\n\"OPTIMISTIC_LOCKING_STRATEGY_CLIENT\x10\x01\x12&\n\"OPTIMISTIC_LOCKING_STRATEGY_SERVER\x10\x02:\\\n\x0ctenant_roles\x12\x1e.google.protobuf.MethodOptions\x18\xb8\x8e\x03 \x03(\x0e\x32\x17.fits.api.v1.TenantRoleR\x0btenantRoles:_\n\rproject_roles\x12\x1e.google.protobuf.MethodOptions\x18\xb9\x8e\x03 \x03(\x0e\x32\x18.fits.api.v1.ProjectRoleR\x0cprojectRoles:Y\n\x0b\x61\x64min_roles\x12\x1e.google.protobuf.MethodOptions\x18\xba\x8e\x03 \x03(\x0e\x32\x16.fits.api.v1.AdminRoleR\nadminRoles:Y\n\nvisibility\x12\x1e.google.protobuf.MethodOptions\x18\xbb\x8e\x03 \x01(\x0e\x32\x17.fits.api.v1.VisibilityR\nvisibility:S\n\x08\x61uditing\x12\x1e.google.protobuf.MethodOptions\x18\xbc\x8e\x03 \x01(\x0e\x32\x15.fits.api.v1.AuditingR\x08\x61uditing:O\n\x11\x65num_string_value\x12!.google.protobuf.EnumValueOptions\x18\xa0\x96\x03 \x01(\tR\x0f\x65numStringValueB\x97\x01\n\x0f\x63om.fits.api.v1B\x0b\x43ommonProtoP\x01Z)github.com/fi-ts/api/go/fits/api/v1;apiv1\xa2\x02\x03\x46\x41X\xaa\x02\x0b\x46its.Api.V1\xca\x02\x0b\x46its\\Api\\V1\xe2\x02\x17\x46its\\Api\\V1\\GPBMetadata\xea\x02\rFits::Api::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66its/api/v1/common.proto\x12\x0b\x66its.api.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a google/protobuf/descriptor.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"O\n\x06Paging\x12\x17\n\x04page\x18\x01 \x01(\x04H\x00R\x04page\x88\x01\x01\x12\x19\n\x05\x63ount\x18\x02 \x01(\x04H\x01R\x05\x63ount\x88\x01\x01\x42\x07\n\x05_pageB\x08\n\x06_count\"\x9c\x01\n\x06Labels\x12W\n\x06labels\x18\x01 \x03(\x0b\x32\x1f.fits.api.v1.Labels.LabelsEntryB\x1e\xbaH\x1b\x9a\x01\x18\"\x07r\x05\x10\x01\x18\x80\x02*\x07r\x05\x10\x00\x18\x80\x02\xb8\x95\xb8\xb1\x02\x01R\x06labels\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xd9\x01\n\x04Meta\x12\x30\n\x06labels\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.LabelsH\x00R\x06labels\x88\x01\x01\x12\x39\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x1e\n\ngeneration\x18\x04 \x01(\x04R\ngenerationB\t\n\x07_labels\"S\n\x0cUpdateLabels\x12+\n\x06update\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06update\x12\x16\n\x06remove\x18\x02 \x03(\tR\x06remove\"\xa4\x01\n\nUpdateMeta\x12\x39\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12[\n\x10locking_strategy\x18\x02 \x01(\x0e\x32&.fits.api.v1.OptimisticLockingStrategyB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0flockingStrategy\"I\n\x0fValidationError\x12\x10\n\x03loc\x18\x01 \x03(\tR\x03loc\x12\x10\n\x03msg\x18\x02 \x01(\tR\x03msg\x12\x12\n\x04type\x18\x03 \x01(\tR\x04type*\x87\x01\n\nTenantRole\x12\x1b\n\x17TENANT_ROLE_UNSPECIFIED\x10\x00\x12\x15\n\x11TENANT_ROLE_OWNER\x10\x01\x12\x16\n\x12TENANT_ROLE_EDITOR\x10\x02\x12\x16\n\x12TENANT_ROLE_VIEWER\x10\x03\x12\x15\n\x11TENANT_ROLE_GUEST\x10\x04*u\n\x0bProjectRole\x12\x1c\n\x18PROJECT_ROLE_UNSPECIFIED\x10\x00\x12\x16\n\x12PROJECT_ROLE_OWNER\x10\x01\x12\x17\n\x13PROJECT_ROLE_EDITOR\x10\x02\x12\x17\n\x13PROJECT_ROLE_VIEWER\x10\x03*U\n\tAdminRole\x12\x1a\n\x16\x41\x44MIN_ROLE_UNSPECIFIED\x10\x00\x12\x15\n\x11\x41\x44MIN_ROLE_EDITOR\x10\x01\x12\x15\n\x11\x41\x44MIN_ROLE_VIEWER\x10\x02*T\n\nVisibility\x12\x1a\n\x16VISIBILITY_UNSPECIFIED\x10\x00\x12\x15\n\x11VISIBILITY_PUBLIC\x10\x01\x12\x13\n\x0fVISIBILITY_SELF\x10\x02*R\n\x08\x41uditing\x12\x18\n\x14\x41UDITING_UNSPECIFIED\x10\x00\x12\x15\n\x11\x41UDITING_INCLUDED\x10\x01\x12\x15\n\x11\x41UDITING_EXCLUDED\x10\x02*\x98\x01\n\x19OptimisticLockingStrategy\x12+\n\'OPTIMISTIC_LOCKING_STRATEGY_UNSPECIFIED\x10\x00\x12&\n\"OPTIMISTIC_LOCKING_STRATEGY_CLIENT\x10\x01\x12&\n\"OPTIMISTIC_LOCKING_STRATEGY_SERVER\x10\x02:\\\n\x0ctenant_roles\x12\x1e.google.protobuf.MethodOptions\x18\xb8\x8e\x03 \x03(\x0e\x32\x17.fits.api.v1.TenantRoleR\x0btenantRoles:_\n\rproject_roles\x12\x1e.google.protobuf.MethodOptions\x18\xb9\x8e\x03 \x03(\x0e\x32\x18.fits.api.v1.ProjectRoleR\x0cprojectRoles:Y\n\x0b\x61\x64min_roles\x12\x1e.google.protobuf.MethodOptions\x18\xba\x8e\x03 \x03(\x0e\x32\x16.fits.api.v1.AdminRoleR\nadminRoles:Y\n\nvisibility\x12\x1e.google.protobuf.MethodOptions\x18\xbb\x8e\x03 \x01(\x0e\x32\x17.fits.api.v1.VisibilityR\nvisibility:S\n\x08\x61uditing\x12\x1e.google.protobuf.MethodOptions\x18\xbc\x8e\x03 \x01(\x0e\x32\x15.fits.api.v1.AuditingR\x08\x61uditing:O\n\x11\x65num_string_value\x12!.google.protobuf.EnumValueOptions\x18\xa0\x96\x03 \x01(\tR\x0f\x65numStringValueB\x97\x01\n\x0f\x63om.fits.api.v1B\x0b\x43ommonProtoP\x01Z)github.com/fi-ts/api/go/fits/api/v1;apiv1\xa2\x02\x03\x46\x41X\xaa\x02\x0b\x46its.Api.V1\xca\x02\x0b\x46its\\Api\\V1\xe2\x02\x17\x46its\\Api\\V1\\GPBMetadata\xea\x02\rFits::Api::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -42,18 +42,18 @@ _globals['_LABELS'].fields_by_name['labels']._serialized_options = b'\272H\033\232\001\030\"\007r\005\020\001\030\200\002*\007r\005\020\000\030\200\002\270\225\270\261\002\001' _globals['_UPDATEMETA'].fields_by_name['locking_strategy']._loaded_options = None _globals['_UPDATEMETA'].fields_by_name['locking_strategy']._serialized_options = b'\272H\005\202\001\002\020\001' - _globals['_TENANTROLE']._serialized_start=886 - _globals['_TENANTROLE']._serialized_end=1021 - _globals['_PROJECTROLE']._serialized_start=1023 - _globals['_PROJECTROLE']._serialized_end=1140 - _globals['_ADMINROLE']._serialized_start=1142 - _globals['_ADMINROLE']._serialized_end=1227 - _globals['_VISIBILITY']._serialized_start=1229 - _globals['_VISIBILITY']._serialized_end=1313 - _globals['_AUDITING']._serialized_start=1315 - _globals['_AUDITING']._serialized_end=1397 - _globals['_OPTIMISTICLOCKINGSTRATEGY']._serialized_start=1400 - _globals['_OPTIMISTICLOCKINGSTRATEGY']._serialized_end=1552 + _globals['_TENANTROLE']._serialized_start=961 + _globals['_TENANTROLE']._serialized_end=1096 + _globals['_PROJECTROLE']._serialized_start=1098 + _globals['_PROJECTROLE']._serialized_end=1215 + _globals['_ADMINROLE']._serialized_start=1217 + _globals['_ADMINROLE']._serialized_end=1302 + _globals['_VISIBILITY']._serialized_start=1304 + _globals['_VISIBILITY']._serialized_end=1388 + _globals['_AUDITING']._serialized_start=1390 + _globals['_AUDITING']._serialized_end=1472 + _globals['_OPTIMISTICLOCKINGSTRATEGY']._serialized_start=1475 + _globals['_OPTIMISTICLOCKINGSTRATEGY']._serialized_end=1627 _globals['_PAGING']._serialized_start=173 _globals['_PAGING']._serialized_end=252 _globals['_LABELS']._serialized_start=255 @@ -66,4 +66,6 @@ _globals['_UPDATELABELS']._serialized_end=716 _globals['_UPDATEMETA']._serialized_start=719 _globals['_UPDATEMETA']._serialized_end=883 + _globals['_VALIDATIONERROR']._serialized_start=885 + _globals['_VALIDATIONERROR']._serialized_end=958 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/v1/common_pb2.pyi b/python/fits/api/v1/common_pb2.pyi index 7c205e5..ba65107 100644 --- a/python/fits/api/v1/common_pb2.pyi +++ b/python/fits/api/v1/common_pb2.pyi @@ -133,3 +133,13 @@ class UpdateMeta(_message.Message): updated_at: _timestamp_pb2.Timestamp locking_strategy: OptimisticLockingStrategy def __init__(self, updated_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., locking_strategy: _Optional[_Union[OptimisticLockingStrategy, str]] = ...) -> None: ... + +class ValidationError(_message.Message): + __slots__ = ("loc", "msg", "type") + LOC_FIELD_NUMBER: _ClassVar[int] + MSG_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + loc: _containers.RepeatedScalarFieldContainer[str] + msg: str + type: str + def __init__(self, loc: _Optional[_Iterable[str]] = ..., msg: _Optional[str] = ..., type: _Optional[str] = ...) -> None: ... diff --git a/python/fits/api/vm/v1/location_connect.py b/python/fits/api/vm/v1/location_connect.py new file mode 100644 index 0000000..43d6ac3 --- /dev/null +++ b/python/fits/api/vm/v1/location_connect.py @@ -0,0 +1,131 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: fits/api/vm/v1/location.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.codec import Codec +from connectrpc.compression import Compression +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import fits.api.vm.v1.location_pb2 as fits_dot_api_dot_vm_dot_v1_dot_location__pb2 + + +class LocationService(Protocol): + async def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class LocationServiceASGIApplication(ConnectASGIApplication[LocationService]): + def __init__(self, service: LocationService | AsyncGenerator[LocationService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/fits.api.vm.v1.LocationService/List": Endpoint.unary( + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.LocationService", + input=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.list, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/fits.api.vm.v1.LocationService" + + +class LocationServiceClient(ConnectClient): + async def list( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.LocationService", + input=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + + + + +class LocationServiceSync(Protocol): + def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class LocationServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: LocationServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + endpoints={ + "/fits.api.vm.v1.LocationService/List": EndpointSync.unary( + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.LocationService", + input=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.list, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/fits.api.vm.v1.LocationService" + + +class LocationServiceClientSync(ConnectClientSync): + def list( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.LocationService", + input=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + diff --git a/python/fits/api/vm/v1/location_pb2.py b/python/fits/api/vm/v1/location_pb2.py new file mode 100644 index 0000000..0ba13dc --- /dev/null +++ b/python/fits/api/vm/v1/location_pb2.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: fits/api/vm/v1/location.proto +# Protobuf Python Version: 7.36.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 7, + 36, + 1, + '', + 'fits/api/vm/v1/location.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x66its/api/vm/v1/location.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\">\n\x08Location\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n\x05title\x18\x02 \x01(\tR\x05title\"\x1c\n\x1aLocationServiceListRequest\"U\n\x1bLocationServiceListResponse\x12\x36\n\tlocations\x18\x01 \x03(\x0b\x32\x18.fits.api.vm.v1.LocationR\tlocations2\x7f\n\x0fLocationService\x12l\n\x04List\x12*.fits.api.vm.v1.LocationServiceListRequest\x1a+.fits.api.vm.v1.LocationServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xab\x01\n\x12\x63om.fits.api.vm.v1B\rLocationProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.vm.v1.location_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\rLocationProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' + _globals['_LOCATION'].fields_by_name['uuid']._loaded_options = None + _globals['_LOCATION'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_LOCATIONSERVICE'].methods_by_name['List']._loaded_options = None + _globals['_LOCATIONSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' + _globals['_LOCATION']._serialized_start=104 + _globals['_LOCATION']._serialized_end=166 + _globals['_LOCATIONSERVICELISTREQUEST']._serialized_start=168 + _globals['_LOCATIONSERVICELISTREQUEST']._serialized_end=196 + _globals['_LOCATIONSERVICELISTRESPONSE']._serialized_start=198 + _globals['_LOCATIONSERVICELISTRESPONSE']._serialized_end=283 + _globals['_LOCATIONSERVICE']._serialized_start=285 + _globals['_LOCATIONSERVICE']._serialized_end=412 +# @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/location_pb2.pyi b/python/fits/api/vm/v1/location_pb2.pyi new file mode 100644 index 0000000..3282949 --- /dev/null +++ b/python/fits/api/vm/v1/location_pb2.pyi @@ -0,0 +1,27 @@ +from buf.validate import validate_pb2 as _validate_pb2 +from fits.api.v1 import common_pb2 as _common_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class Location(_message.Message): + __slots__ = ("uuid", "title") + UUID_FIELD_NUMBER: _ClassVar[int] + TITLE_FIELD_NUMBER: _ClassVar[int] + uuid: str + title: str + def __init__(self, uuid: _Optional[str] = ..., title: _Optional[str] = ...) -> None: ... + +class LocationServiceListRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class LocationServiceListResponse(_message.Message): + __slots__ = ("locations",) + LOCATIONS_FIELD_NUMBER: _ClassVar[int] + locations: _containers.RepeatedCompositeFieldContainer[Location] + def __init__(self, locations: _Optional[_Iterable[_Union[Location, _Mapping]]] = ...) -> None: ... diff --git a/python/fits/api/vm/v1/os_connect.py b/python/fits/api/vm/v1/os_connect.py new file mode 100644 index 0000000..3464251 --- /dev/null +++ b/python/fits/api/vm/v1/os_connect.py @@ -0,0 +1,131 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: fits/api/vm/v1/os.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.codec import Codec +from connectrpc.compression import Compression +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import fits.api.vm.v1.os_pb2 as fits_dot_api_dot_vm_dot_v1_dot_os__pb2 + + +class OSService(Protocol): + async def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class OSServiceASGIApplication(ConnectASGIApplication[OSService]): + def __init__(self, service: OSService | AsyncGenerator[OSService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/fits.api.vm.v1.OSService/List": Endpoint.unary( + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.OSService", + input=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.list, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/fits.api.vm.v1.OSService" + + +class OSServiceClient(ConnectClient): + async def list( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.OSService", + input=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + + + + +class OSServiceSync(Protocol): + def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class OSServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: OSServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + endpoints={ + "/fits.api.vm.v1.OSService/List": EndpointSync.unary( + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.OSService", + input=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.list, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/fits.api.vm.v1.OSService" + + +class OSServiceClientSync(ConnectClientSync): + def list( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.OSService", + input=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + diff --git a/python/fits/api/vm/v1/os_pb2.py b/python/fits/api/vm/v1/os_pb2.py index 978043f..e29ddda 100644 --- a/python/fits/api/vm/v1/os_pb2.py +++ b/python/fits/api/vm/v1/os_pb2.py @@ -23,9 +23,10 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/os.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\"\"\n\x02Os\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuidB\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07OsProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/os.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\"f\n\x02OS\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n\x05title\x18\x02 \x01(\tR\x05title\x12\x12\n\x04type\x18\x03 \x01(\tR\x04type\x12\x18\n\x07version\x18\x04 \x01(\tR\x07version\"\x16\n\x14OSServiceListRequest\"=\n\x15OSServiceListResponse\x12$\n\x03oss\x18\x01 \x03(\x0b\x32\x12.fits.api.vm.v1.OSR\x03oss2m\n\tOSService\x12`\n\x04List\x12$.fits.api.vm.v1.OSServiceListRequest\x1a%.fits.api.vm.v1.OSServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07OsProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -35,6 +36,14 @@ _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\007OsProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' _globals['_OS'].fields_by_name['uuid']._loaded_options = None _globals['_OS'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_OS']._serialized_start=72 - _globals['_OS']._serialized_end=106 + _globals['_OSSERVICE'].methods_by_name['List']._loaded_options = None + _globals['_OSSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' + _globals['_OS']._serialized_start=98 + _globals['_OS']._serialized_end=200 + _globals['_OSSERVICELISTREQUEST']._serialized_start=202 + _globals['_OSSERVICELISTREQUEST']._serialized_end=224 + _globals['_OSSERVICELISTRESPONSE']._serialized_start=226 + _globals['_OSSERVICELISTRESPONSE']._serialized_end=287 + _globals['_OSSERVICE']._serialized_start=289 + _globals['_OSSERVICE']._serialized_end=398 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/os_pb2.pyi b/python/fits/api/vm/v1/os_pb2.pyi index 8864b8e..30f3157 100644 --- a/python/fits/api/vm/v1/os_pb2.pyi +++ b/python/fits/api/vm/v1/os_pb2.pyi @@ -1,12 +1,31 @@ from buf.validate import validate_pb2 as _validate_pb2 +from fits.api.v1 import common_pb2 as _common_pb2 +from google.protobuf.internal import containers as _containers from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message -from typing import ClassVar as _ClassVar, Optional as _Optional +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union DESCRIPTOR: _descriptor.FileDescriptor -class Os(_message.Message): - __slots__ = ("uuid",) +class OS(_message.Message): + __slots__ = ("uuid", "title", "type", "version") UUID_FIELD_NUMBER: _ClassVar[int] + TITLE_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] uuid: str - def __init__(self, uuid: _Optional[str] = ...) -> None: ... + title: str + type: str + version: str + def __init__(self, uuid: _Optional[str] = ..., title: _Optional[str] = ..., type: _Optional[str] = ..., version: _Optional[str] = ...) -> None: ... + +class OSServiceListRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class OSServiceListResponse(_message.Message): + __slots__ = ("oss",) + OSS_FIELD_NUMBER: _ClassVar[int] + oss: _containers.RepeatedCompositeFieldContainer[OS] + def __init__(self, oss: _Optional[_Iterable[_Union[OS, _Mapping]]] = ...) -> None: ... diff --git a/python/fits/api/vm/v1/service_connect.py b/python/fits/api/vm/v1/service_connect.py new file mode 100644 index 0000000..3979370 --- /dev/null +++ b/python/fits/api/vm/v1/service_connect.py @@ -0,0 +1,131 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: fits/api/vm/v1/service.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.codec import Codec +from connectrpc.compression import Compression +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import fits.api.vm.v1.service_pb2 as fits_dot_api_dot_vm_dot_v1_dot_service__pb2 + + +class ServiceService(Protocol): + async def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class ServiceServiceASGIApplication(ConnectASGIApplication[ServiceService]): + def __init__(self, service: ServiceService | AsyncGenerator[ServiceService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/fits.api.vm.v1.ServiceService/List": Endpoint.unary( + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.ServiceService", + input=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.list, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/fits.api.vm.v1.ServiceService" + + +class ServiceServiceClient(ConnectClient): + async def list( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.ServiceService", + input=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + + + + +class ServiceServiceSync(Protocol): + def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class ServiceServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: ServiceServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + endpoints={ + "/fits.api.vm.v1.ServiceService/List": EndpointSync.unary( + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.ServiceService", + input=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.list, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/fits.api.vm.v1.ServiceService" + + +class ServiceServiceClientSync(ConnectClientSync): + def list( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.ServiceService", + input=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + diff --git a/python/fits/api/vm/v1/service_pb2.py b/python/fits/api/vm/v1/service_pb2.py new file mode 100644 index 0000000..f423479 --- /dev/null +++ b/python/fits/api/vm/v1/service_pb2.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: fits/api/vm/v1/service.proto +# Protobuf Python Version: 7.36.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 7, + 36, + 1, + '', + 'fits/api/vm/v1/service.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66its/api/vm/v1/service.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\"=\n\x07Service\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n\x05title\x18\x02 \x01(\tR\x05title\"\x1b\n\x19ServiceServiceListRequest\"Q\n\x1aServiceServiceListResponse\x12\x33\n\x08services\x18\x01 \x03(\x0b\x32\x17.fits.api.vm.v1.ServiceR\x08services2|\n\x0eServiceService\x12j\n\x04List\x12).fits.api.vm.v1.ServiceServiceListRequest\x1a*.fits.api.vm.v1.ServiceServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xaa\x01\n\x12\x63om.fits.api.vm.v1B\x0cServiceProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.vm.v1.service_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\014ServiceProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' + _globals['_SERVICE'].fields_by_name['uuid']._loaded_options = None + _globals['_SERVICE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_SERVICESERVICE'].methods_by_name['List']._loaded_options = None + _globals['_SERVICESERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' + _globals['_SERVICE']._serialized_start=103 + _globals['_SERVICE']._serialized_end=164 + _globals['_SERVICESERVICELISTREQUEST']._serialized_start=166 + _globals['_SERVICESERVICELISTREQUEST']._serialized_end=193 + _globals['_SERVICESERVICELISTRESPONSE']._serialized_start=195 + _globals['_SERVICESERVICELISTRESPONSE']._serialized_end=276 + _globals['_SERVICESERVICE']._serialized_start=278 + _globals['_SERVICESERVICE']._serialized_end=402 +# @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/service_pb2.pyi b/python/fits/api/vm/v1/service_pb2.pyi new file mode 100644 index 0000000..efb26cf --- /dev/null +++ b/python/fits/api/vm/v1/service_pb2.pyi @@ -0,0 +1,27 @@ +from buf.validate import validate_pb2 as _validate_pb2 +from fits.api.v1 import common_pb2 as _common_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class Service(_message.Message): + __slots__ = ("uuid", "title") + UUID_FIELD_NUMBER: _ClassVar[int] + TITLE_FIELD_NUMBER: _ClassVar[int] + uuid: str + title: str + def __init__(self, uuid: _Optional[str] = ..., title: _Optional[str] = ...) -> None: ... + +class ServiceServiceListRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class ServiceServiceListResponse(_message.Message): + __slots__ = ("services",) + SERVICES_FIELD_NUMBER: _ClassVar[int] + services: _containers.RepeatedCompositeFieldContainer[Service] + def __init__(self, services: _Optional[_Iterable[_Union[Service, _Mapping]]] = ...) -> None: ... diff --git a/python/fits/api/vm/v1/stagetype_connect.py b/python/fits/api/vm/v1/stagetype_connect.py new file mode 100644 index 0000000..a04cc8b --- /dev/null +++ b/python/fits/api/vm/v1/stagetype_connect.py @@ -0,0 +1,131 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: fits/api/vm/v1/stagetype.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.codec import Codec +from connectrpc.compression import Compression +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import fits.api.vm.v1.stagetype_pb2 as fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2 + + +class StageTypeService(Protocol): + async def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class StageTypeServiceASGIApplication(ConnectASGIApplication[StageTypeService]): + def __init__(self, service: StageTypeService | AsyncGenerator[StageTypeService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/fits.api.vm.v1.StageTypeService/List": Endpoint.unary( + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.StageTypeService", + input=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.list, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/fits.api.vm.v1.StageTypeService" + + +class StageTypeServiceClient(ConnectClient): + async def list( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.StageTypeService", + input=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + + + + +class StageTypeServiceSync(Protocol): + def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class StageTypeServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: StageTypeServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + endpoints={ + "/fits.api.vm.v1.StageTypeService/List": EndpointSync.unary( + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.StageTypeService", + input=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.list, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/fits.api.vm.v1.StageTypeService" + + +class StageTypeServiceClientSync(ConnectClientSync): + def list( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.StageTypeService", + input=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + diff --git a/python/fits/api/vm/v1/stagetype_pb2.py b/python/fits/api/vm/v1/stagetype_pb2.py new file mode 100644 index 0000000..dd52c0a --- /dev/null +++ b/python/fits/api/vm/v1/stagetype_pb2.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: fits/api/vm/v1/stagetype.proto +# Protobuf Python Version: 7.36.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 7, + 36, + 1, + '', + 'fits/api/vm/v1/stagetype.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x66its/api/vm/v1/stagetype.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\"?\n\tStageType\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n\x05title\x18\x02 \x01(\tR\x05title\"H\n\x1bStageTypeServiceListRequest\x12)\n\x0btenant_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ntenantUuid\"\xa4\x01\n\x1cStageTypeServiceListResponse\x12\x39\n\nstagetypes\x18\x01 \x03(\x0b\x32\x19.fits.api.vm.v1.StageTypeR\nstagetypes\x12I\n\x11validation_errors\x18\x02 \x03(\x0b\x32\x1c.fits.api.v1.ValidationErrorR\x10validationErrors2\x82\x01\n\x10StageTypeService\x12n\n\x04List\x12+.fits.api.vm.v1.StageTypeServiceListRequest\x1a,.fits.api.vm.v1.StageTypeServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xac\x01\n\x12\x63om.fits.api.vm.v1B\x0eStagetypeProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.vm.v1.stagetype_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\016StagetypeProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' + _globals['_STAGETYPE'].fields_by_name['uuid']._loaded_options = None + _globals['_STAGETYPE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_STAGETYPESERVICELISTREQUEST'].fields_by_name['tenant_uuid']._loaded_options = None + _globals['_STAGETYPESERVICELISTREQUEST'].fields_by_name['tenant_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_STAGETYPESERVICE'].methods_by_name['List']._loaded_options = None + _globals['_STAGETYPESERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' + _globals['_STAGETYPE']._serialized_start=105 + _globals['_STAGETYPE']._serialized_end=168 + _globals['_STAGETYPESERVICELISTREQUEST']._serialized_start=170 + _globals['_STAGETYPESERVICELISTREQUEST']._serialized_end=242 + _globals['_STAGETYPESERVICELISTRESPONSE']._serialized_start=245 + _globals['_STAGETYPESERVICELISTRESPONSE']._serialized_end=409 + _globals['_STAGETYPESERVICE']._serialized_start=412 + _globals['_STAGETYPESERVICE']._serialized_end=542 +# @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/stagetype_pb2.pyi b/python/fits/api/vm/v1/stagetype_pb2.pyi new file mode 100644 index 0000000..eea97d7 --- /dev/null +++ b/python/fits/api/vm/v1/stagetype_pb2.pyi @@ -0,0 +1,31 @@ +from buf.validate import validate_pb2 as _validate_pb2 +from fits.api.v1 import common_pb2 as _common_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class StageType(_message.Message): + __slots__ = ("uuid", "title") + UUID_FIELD_NUMBER: _ClassVar[int] + TITLE_FIELD_NUMBER: _ClassVar[int] + uuid: str + title: str + def __init__(self, uuid: _Optional[str] = ..., title: _Optional[str] = ...) -> None: ... + +class StageTypeServiceListRequest(_message.Message): + __slots__ = ("tenant_uuid",) + TENANT_UUID_FIELD_NUMBER: _ClassVar[int] + tenant_uuid: str + def __init__(self, tenant_uuid: _Optional[str] = ...) -> None: ... + +class StageTypeServiceListResponse(_message.Message): + __slots__ = ("stagetypes", "validation_errors") + STAGETYPES_FIELD_NUMBER: _ClassVar[int] + VALIDATION_ERRORS_FIELD_NUMBER: _ClassVar[int] + stagetypes: _containers.RepeatedCompositeFieldContainer[StageType] + validation_errors: _containers.RepeatedCompositeFieldContainer[_common_pb2.ValidationError] + def __init__(self, stagetypes: _Optional[_Iterable[_Union[StageType, _Mapping]]] = ..., validation_errors: _Optional[_Iterable[_Union[_common_pb2.ValidationError, _Mapping]]] = ...) -> None: ... diff --git a/python/fits/api/vm/v1/vlan_connect.py b/python/fits/api/vm/v1/vlan_connect.py new file mode 100644 index 0000000..54bf6a8 --- /dev/null +++ b/python/fits/api/vm/v1/vlan_connect.py @@ -0,0 +1,131 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: fits/api/vm/v1/vlan.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.codec import Codec +from connectrpc.compression import Compression +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import fits.api.vm.v1.vlan_pb2 as fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2 + + +class VlanService(Protocol): + async def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class VlanServiceASGIApplication(ConnectASGIApplication[VlanService]): + def __init__(self, service: VlanService | AsyncGenerator[VlanService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/fits.api.vm.v1.VlanService/List": Endpoint.unary( + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.VlanService", + input=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.list, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/fits.api.vm.v1.VlanService" + + +class VlanServiceClient(ConnectClient): + async def list( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.VlanService", + input=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + + + + +class VlanServiceSync(Protocol): + def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class VlanServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: VlanServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + endpoints={ + "/fits.api.vm.v1.VlanService/List": EndpointSync.unary( + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.VlanService", + input=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.list, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/fits.api.vm.v1.VlanService" + + +class VlanServiceClientSync(ConnectClientSync): + def list( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="List", + service_name="fits.api.vm.v1.VlanService", + input=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + diff --git a/python/fits/api/vm/v1/vlan_pb2.py b/python/fits/api/vm/v1/vlan_pb2.py new file mode 100644 index 0000000..0d1f91b --- /dev/null +++ b/python/fits/api/vm/v1/vlan_pb2.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: fits/api/vm/v1/vlan.proto +# Protobuf Python Version: 7.36.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 7, + 36, + 1, + '', + 'fits/api/vm/v1/vlan.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/vm/v1/vlan.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\"\xf8\x03\n\x04Vlan\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x0e\n\x02id\x18\x02 \x01(\x05R\x02id\x12!\n\x0csubnet_title\x18\x03 \x01(\tR\x0bsubnetTitle\x12\x16\n\x06subnet\x18\x04 \x01(\tR\x06subnet\x12\x1e\n\nsubnetmask\x18\x05 \x01(\tR\nsubnetmask\x12\x18\n\x07gateway\x18\x06 \x01(\tR\x07gateway\x12$\n\x0eip_range_start\x18\x07 \x01(\tR\x0cipRangeStart\x12 \n\x0cip_range_end\x18\x08 \x01(\tR\nipRangeEnd\x12\x19\n\x08use_dhcp\x18\t \x01(\x08R\x07useDhcp\x12\x1b\n\tpod_title\x18\n \x01(\tR\x08podTitle\x12#\n\x08pod_uuid\x18\x0b \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07podUuid\x12(\n\x10stage_type_title\x18\x0c \x01(\tR\x0estageTypeTitle\x12\x30\n\x0fstage_type_uuid\x18\r \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12)\n\x0btenant_uuid\x18\x0e \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ntenantUuid\x12!\n\x0ctenant_title\x18\x0f \x01(\tR\x0btenantTitle\"C\n\x16VlanServiceListRequest\x12)\n\x0btenant_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ntenantUuid\"\x90\x01\n\x17VlanServiceListResponse\x12*\n\x05vlans\x18\x01 \x03(\x0b\x32\x14.fits.api.vm.v1.VlanR\x05vlans\x12I\n\x11validation_errors\x18\x02 \x03(\x0b\x32\x1c.fits.api.v1.ValidationErrorR\x10validationErrors2s\n\x0bVlanService\x12\x64\n\x04List\x12&.fits.api.vm.v1.VlanServiceListRequest\x1a\'.fits.api.vm.v1.VlanServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xa7\x01\n\x12\x63om.fits.api.vm.v1B\tVlanProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.vm.v1.vlan_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\tVlanProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' + _globals['_VLAN'].fields_by_name['uuid']._loaded_options = None + _globals['_VLAN'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VLAN'].fields_by_name['pod_uuid']._loaded_options = None + _globals['_VLAN'].fields_by_name['pod_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VLAN'].fields_by_name['stage_type_uuid']._loaded_options = None + _globals['_VLAN'].fields_by_name['stage_type_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VLAN'].fields_by_name['tenant_uuid']._loaded_options = None + _globals['_VLAN'].fields_by_name['tenant_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VLANSERVICELISTREQUEST'].fields_by_name['tenant_uuid']._loaded_options = None + _globals['_VLANSERVICELISTREQUEST'].fields_by_name['tenant_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VLANSERVICE'].methods_by_name['List']._loaded_options = None + _globals['_VLANSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' + _globals['_VLAN']._serialized_start=101 + _globals['_VLAN']._serialized_end=605 + _globals['_VLANSERVICELISTREQUEST']._serialized_start=607 + _globals['_VLANSERVICELISTREQUEST']._serialized_end=674 + _globals['_VLANSERVICELISTRESPONSE']._serialized_start=677 + _globals['_VLANSERVICELISTRESPONSE']._serialized_end=821 + _globals['_VLANSERVICE']._serialized_start=823 + _globals['_VLANSERVICE']._serialized_end=938 +# @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/vlan_pb2.pyi b/python/fits/api/vm/v1/vlan_pb2.pyi new file mode 100644 index 0000000..81d5427 --- /dev/null +++ b/python/fits/api/vm/v1/vlan_pb2.pyi @@ -0,0 +1,57 @@ +from buf.validate import validate_pb2 as _validate_pb2 +from fits.api.v1 import common_pb2 as _common_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class Vlan(_message.Message): + __slots__ = ("uuid", "id", "subnet_title", "subnet", "subnetmask", "gateway", "ip_range_start", "ip_range_end", "use_dhcp", "pod_title", "pod_uuid", "stage_type_title", "stage_type_uuid", "tenant_uuid", "tenant_title") + UUID_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + SUBNET_TITLE_FIELD_NUMBER: _ClassVar[int] + SUBNET_FIELD_NUMBER: _ClassVar[int] + SUBNETMASK_FIELD_NUMBER: _ClassVar[int] + GATEWAY_FIELD_NUMBER: _ClassVar[int] + IP_RANGE_START_FIELD_NUMBER: _ClassVar[int] + IP_RANGE_END_FIELD_NUMBER: _ClassVar[int] + USE_DHCP_FIELD_NUMBER: _ClassVar[int] + POD_TITLE_FIELD_NUMBER: _ClassVar[int] + POD_UUID_FIELD_NUMBER: _ClassVar[int] + STAGE_TYPE_TITLE_FIELD_NUMBER: _ClassVar[int] + STAGE_TYPE_UUID_FIELD_NUMBER: _ClassVar[int] + TENANT_UUID_FIELD_NUMBER: _ClassVar[int] + TENANT_TITLE_FIELD_NUMBER: _ClassVar[int] + uuid: str + id: int + subnet_title: str + subnet: str + subnetmask: str + gateway: str + ip_range_start: str + ip_range_end: str + use_dhcp: bool + pod_title: str + pod_uuid: str + stage_type_title: str + stage_type_uuid: str + tenant_uuid: str + tenant_title: str + def __init__(self, uuid: _Optional[str] = ..., id: _Optional[int] = ..., subnet_title: _Optional[str] = ..., subnet: _Optional[str] = ..., subnetmask: _Optional[str] = ..., gateway: _Optional[str] = ..., ip_range_start: _Optional[str] = ..., ip_range_end: _Optional[str] = ..., use_dhcp: _Optional[bool] = ..., pod_title: _Optional[str] = ..., pod_uuid: _Optional[str] = ..., stage_type_title: _Optional[str] = ..., stage_type_uuid: _Optional[str] = ..., tenant_uuid: _Optional[str] = ..., tenant_title: _Optional[str] = ...) -> None: ... + +class VlanServiceListRequest(_message.Message): + __slots__ = ("tenant_uuid",) + TENANT_UUID_FIELD_NUMBER: _ClassVar[int] + tenant_uuid: str + def __init__(self, tenant_uuid: _Optional[str] = ...) -> None: ... + +class VlanServiceListResponse(_message.Message): + __slots__ = ("vlans", "validation_errors") + VLANS_FIELD_NUMBER: _ClassVar[int] + VALIDATION_ERRORS_FIELD_NUMBER: _ClassVar[int] + vlans: _containers.RepeatedCompositeFieldContainer[Vlan] + validation_errors: _containers.RepeatedCompositeFieldContainer[_common_pb2.ValidationError] + def __init__(self, vlans: _Optional[_Iterable[_Union[Vlan, _Mapping]]] = ..., validation_errors: _Optional[_Iterable[_Union[_common_pb2.ValidationError, _Mapping]]] = ...) -> None: ... diff --git a/python/fits/api/vm/v1/vm_pb2.py b/python/fits/api/vm/v1/vm_pb2.py index 15b6bca..993efe3 100644 --- a/python/fits/api/vm/v1/vm_pb2.py +++ b/python/fits/api/vm/v1/vm_pb2.py @@ -27,7 +27,7 @@ from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/vm.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x96\x01\n\nVMInstance\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\"\n\x07project\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"W\n\x13VMServiceGetRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"B\n\x14VMServiceGetResponse\x12*\n\x02vm\x18\x01 \x01(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"\xe1\x02\n\x16VMServiceCreateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x10\n\x03\x63pu\x18\x03 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x04 \x01(\rR\x03ram\x12!\n\x07os_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12*\n\x05\x64isks\x18\t \x03(\x0b\x32\x14.fits.api.vm.v1.DiskR\x05\x64isksB\x07\n\x05_name\"\xde\x01\n\x04\x44isk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12&\n\x0c\x64rive_letter\x18\x03 \x01(\tH\x01R\x0b\x64riveLetter\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05label\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x02R\nmountPoint\x88\x01\x01\x42\r\n\x0b_size_in_gbB\x0f\n\r_drive_letterB\x0e\n\x0c_mount_point\"\x19\n\x17VMServiceCreateResponse\"~\n\x16VMServiceUpdateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\"\x19\n\x17VMServiceUpdateResponse\":\n\x14VMServiceListRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x17\n\x15VMServiceListResponse\"<\n\x16VMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x19\n\x17VMServiceDeleteResponse2\x81\x04\n\tVMService\x12]\n\x03Get\x12#.fits.api.vm.v1.VMServiceGetRequest\x1a$.fits.api.vm.v1.VMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x43reate\x12&.fits.api.vm.v1.VMServiceCreateRequest\x1a\'.fits.api.vm.v1.VMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x65\n\x06Update\x12&.fits.api.vm.v1.VMServiceUpdateRequest\x1a\'.fits.api.vm.v1.VMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12`\n\x04List\x12$.fits.api.vm.v1.VMServiceListRequest\x1a%.fits.api.vm.v1.VMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x44\x65lete\x12&.fits.api.vm.v1.VMServiceDeleteRequest\x1a\'.fits.api.vm.v1.VMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07VmProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/vm.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x96\x01\n\nVMInstance\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\"\n\x07project\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"W\n\x13VMServiceGetRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"B\n\x14VMServiceGetResponse\x12*\n\x02vm\x18\x01 \x01(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"\xea\x02\n\x16VMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x10\n\x03\x63pu\x18\x03 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x04 \x01(\rR\x03ram\x12!\n\x07os_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12*\n\x05\x64isks\x18\t \x03(\x0b\x32\x14.fits.api.vm.v1.DiskR\x05\x64isksB\x07\n\x05_name\"\xde\x01\n\x04\x44isk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12&\n\x0c\x64rive_letter\x18\x03 \x01(\tH\x01R\x0b\x64riveLetter\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05label\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x02R\nmountPoint\x88\x01\x01\x42\r\n\x0b_size_in_gbB\x0f\n\r_drive_letterB\x0e\n\x0c_mount_point\"\x19\n\x17VMServiceCreateResponse\"~\n\x16VMServiceUpdateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\"\x19\n\x17VMServiceUpdateResponse\":\n\x14VMServiceListRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x17\n\x15VMServiceListResponse\"<\n\x16VMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x19\n\x17VMServiceDeleteResponse2\x81\x04\n\tVMService\x12]\n\x03Get\x12#.fits.api.vm.v1.VMServiceGetRequest\x1a$.fits.api.vm.v1.VMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x43reate\x12&.fits.api.vm.v1.VMServiceCreateRequest\x1a\'.fits.api.vm.v1.VMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x65\n\x06Update\x12&.fits.api.vm.v1.VMServiceUpdateRequest\x1a\'.fits.api.vm.v1.VMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12`\n\x04List\x12$.fits.api.vm.v1.VMServiceListRequest\x1a%.fits.api.vm.v1.VMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x44\x65lete\x12&.fits.api.vm.v1.VMServiceDeleteRequest\x1a\'.fits.api.vm.v1.VMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07VmProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -45,8 +45,8 @@ _globals['_VMSERVICEGETREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VMSERVICEGETREQUEST'].fields_by_name['project']._loaded_options = None _globals['_VMSERVICEGETREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['project_uuid']._loaded_options = None + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['project_uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VMSERVICECREATEREQUEST'].fields_by_name['name']._loaded_options = None _globals['_VMSERVICECREATEREQUEST'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_VMSERVICECREATEREQUEST'].fields_by_name['os_uuid']._loaded_options = None @@ -82,23 +82,23 @@ _globals['_VMSERVICEGETRESPONSE']._serialized_start=376 _globals['_VMSERVICEGETRESPONSE']._serialized_end=442 _globals['_VMSERVICECREATEREQUEST']._serialized_start=445 - _globals['_VMSERVICECREATEREQUEST']._serialized_end=798 - _globals['_DISK']._serialized_start=801 - _globals['_DISK']._serialized_end=1023 - _globals['_VMSERVICECREATERESPONSE']._serialized_start=1025 - _globals['_VMSERVICECREATERESPONSE']._serialized_end=1050 - _globals['_VMSERVICEUPDATEREQUEST']._serialized_start=1052 - _globals['_VMSERVICEUPDATEREQUEST']._serialized_end=1178 - _globals['_VMSERVICEUPDATERESPONSE']._serialized_start=1180 - _globals['_VMSERVICEUPDATERESPONSE']._serialized_end=1205 - _globals['_VMSERVICELISTREQUEST']._serialized_start=1207 - _globals['_VMSERVICELISTREQUEST']._serialized_end=1265 - _globals['_VMSERVICELISTRESPONSE']._serialized_start=1267 - _globals['_VMSERVICELISTRESPONSE']._serialized_end=1290 - _globals['_VMSERVICEDELETEREQUEST']._serialized_start=1292 - _globals['_VMSERVICEDELETEREQUEST']._serialized_end=1352 - _globals['_VMSERVICEDELETERESPONSE']._serialized_start=1354 - _globals['_VMSERVICEDELETERESPONSE']._serialized_end=1379 - _globals['_VMSERVICE']._serialized_start=1382 - _globals['_VMSERVICE']._serialized_end=1895 + _globals['_VMSERVICECREATEREQUEST']._serialized_end=807 + _globals['_DISK']._serialized_start=810 + _globals['_DISK']._serialized_end=1032 + _globals['_VMSERVICECREATERESPONSE']._serialized_start=1034 + _globals['_VMSERVICECREATERESPONSE']._serialized_end=1059 + _globals['_VMSERVICEUPDATEREQUEST']._serialized_start=1061 + _globals['_VMSERVICEUPDATEREQUEST']._serialized_end=1187 + _globals['_VMSERVICEUPDATERESPONSE']._serialized_start=1189 + _globals['_VMSERVICEUPDATERESPONSE']._serialized_end=1214 + _globals['_VMSERVICELISTREQUEST']._serialized_start=1216 + _globals['_VMSERVICELISTREQUEST']._serialized_end=1274 + _globals['_VMSERVICELISTRESPONSE']._serialized_start=1276 + _globals['_VMSERVICELISTRESPONSE']._serialized_end=1299 + _globals['_VMSERVICEDELETEREQUEST']._serialized_start=1301 + _globals['_VMSERVICEDELETEREQUEST']._serialized_end=1361 + _globals['_VMSERVICEDELETERESPONSE']._serialized_start=1363 + _globals['_VMSERVICEDELETERESPONSE']._serialized_end=1388 + _globals['_VMSERVICE']._serialized_start=1391 + _globals['_VMSERVICE']._serialized_end=1904 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/vm_pb2.pyi b/python/fits/api/vm/v1/vm_pb2.pyi index 50a988e..4f76bfe 100644 --- a/python/fits/api/vm/v1/vm_pb2.pyi +++ b/python/fits/api/vm/v1/vm_pb2.pyi @@ -36,8 +36,8 @@ class VMServiceGetResponse(_message.Message): def __init__(self, vm: _Optional[_Union[VMInstance, _Mapping]] = ...) -> None: ... class VMServiceCreateRequest(_message.Message): - __slots__ = ("project", "name", "cpu", "ram", "os_uuid", "vlan_uuid", "location_uuid", "contact_uuid", "disks") - PROJECT_FIELD_NUMBER: _ClassVar[int] + __slots__ = ("project_uuid", "name", "cpu", "ram", "os_uuid", "vlan_uuid", "location_uuid", "contact_uuid", "disks") + PROJECT_UUID_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] CPU_FIELD_NUMBER: _ClassVar[int] RAM_FIELD_NUMBER: _ClassVar[int] @@ -46,7 +46,7 @@ class VMServiceCreateRequest(_message.Message): LOCATION_UUID_FIELD_NUMBER: _ClassVar[int] CONTACT_UUID_FIELD_NUMBER: _ClassVar[int] DISKS_FIELD_NUMBER: _ClassVar[int] - project: str + project_uuid: str name: str cpu: int ram: int @@ -55,7 +55,7 @@ class VMServiceCreateRequest(_message.Message): location_uuid: str contact_uuid: str disks: _containers.RepeatedCompositeFieldContainer[Disk] - def __init__(self, project: _Optional[str] = ..., name: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., os_uuid: _Optional[str] = ..., vlan_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., disks: _Optional[_Iterable[_Union[Disk, _Mapping]]] = ...) -> None: ... + def __init__(self, project_uuid: _Optional[str] = ..., name: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., os_uuid: _Optional[str] = ..., vlan_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., disks: _Optional[_Iterable[_Union[Disk, _Mapping]]] = ...) -> None: ... class Disk(_message.Message): __slots__ = ("auto_extend", "size_in_gb", "drive_letter", "label", "mount_point") From ebf50d2189a5cfb763bc4331056055bdd3538ed2 Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Wed, 9 Sep 2026 14:50:32 +0200 Subject: [PATCH 07/21] finalize location, stagetype and os; remove service as not relevant for users --- doc/index.html | 194 +++-------------------- go/fits/api/vm/v1/location.pb.go | 20 ++- go/fits/api/vm/v1/service.pb.go | 8 +- go/fits/api/vm/v1/stagetype.pb.go | 61 ++----- go/fits/api/vm/v1/vlan.pb.go | 15 +- js/fits/api/vm/v1/location_pb.ts | 12 +- js/fits/api/vm/v1/os_pb.ts | 1 + js/fits/api/vm/v1/service_pb.ts | 4 +- js/fits/api/vm/v1/stagetype_pb.ts | 30 +--- js/fits/api/vm/v1/vlan_pb.ts | 8 +- proto/fits/api/vm/v1/location.proto | 9 +- proto/fits/api/vm/v1/os.proto | 1 + proto/fits/api/vm/v1/service.proto | 39 ----- proto/fits/api/vm/v1/stagetype.proto | 21 +-- proto/fits/api/vm/v1/vlan.proto | 4 +- python/fits/api/vm/v1/location_pb2.py | 21 +-- python/fits/api/vm/v1/location_pb2.pyi | 7 +- python/fits/api/vm/v1/service_connect.py | 131 --------------- python/fits/api/vm/v1/service_pb2.py | 49 ------ python/fits/api/vm/v1/service_pb2.pyi | 27 ---- python/fits/api/vm/v1/stagetype_pb2.py | 23 +-- python/fits/api/vm/v1/stagetype_pb2.pyi | 13 +- python/fits/api/vm/v1/vlan_pb2.py | 23 +-- python/fits/api/vm/v1/vlan_pb2.pyi | 9 +- 24 files changed, 159 insertions(+), 571 deletions(-) delete mode 100644 proto/fits/api/vm/v1/service.proto delete mode 100644 python/fits/api/vm/v1/service_connect.py delete mode 100644 python/fits/api/vm/v1/service_pb2.py delete mode 100644 python/fits/api/vm/v1/service_pb2.pyi diff --git a/doc/index.html b/doc/index.html index f37e78d..166ebe6 100644 --- a/doc/index.html +++ b/doc/index.html @@ -783,33 +783,6 @@

    Table of Contents

    -
  • - fits/api/vm/v1/service.proto - -
  • - -
  • fits/api/vm/v1/stagetype.proto
      @@ -4459,9 +4432,27 @@

      Location

      LocationServiceListRequest

      -

      LocationServiceListRequest is the request payload for a location list request.

      The upstream nulink API accepts no body or parameters, so this is intentionally empty.

      +

      LocationServiceListRequest is the request payload for a location list request.

      The upstream nulink API accepts no body or parameters, so this is intentionally empty.

      TODO pro tenant anders. FITS darf beide RZ, sonst nur eines, logik dazu in nu-link

      +
  • Method NameRequest TypeResponse TypeDescription
    Get VMServiceGetRequest VMServiceGetResponse

    Returns the VM address with the specified VM.

    Returns the VM with the specified UUID.

    Create VMServiceCreateRequest VMServiceCreateResponse

    Creates a new VM address.

    Creates a new VM.

    Update VMServiceUpdateRequest VMServiceUpdateResponse

    Updates an VM address.

    Updates a VM.

    List VMServiceListRequest VMServiceListResponse

    Returns the list of all VM addresses.

    Returns the list of all VMs.

    Delete VMServiceDeleteRequest VMServiceDeleteResponse

    Deletes an VM address.

    Deletes a VM.

    + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    tenantstring

    Tenant to list available locations for +TODO Tobias baut in nulink-api ein

    + + @@ -4496,7 +4487,7 @@

    LocationServiceListResponse<

    LocationService

    -

    LocationService lists datacenter locations available for VM instances.

    +

    LocationService lists datacenter locations available for VM instances.

    TODO wurde besprochen am 09.09.26

    @@ -4605,7 +4596,7 @@

    OSServiceListResponse

    OSService

    -

    OSService lists operating systems available for VM instances.

    +

    OSService lists operating systems available for VM instances.

    TODO wurde besprochen am 09.09.26

    Method NameRequest TypeResponse TypeDescription
    @@ -4625,106 +4616,6 @@

    OSService

    -
    -

    fits/api/vm/v1/service.proto

    Top -
    -

    - - -

    Service

    -

    TODO what is a service?

    - - -
    Method NameRequest TypeResponse TypeDescription
    - - - - - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    uuidstring

    Uuid of this Service

    titlestring

    title of the Service - -type NucleusDBServices struct { - ServiceTitle string `json:"service_title"` - ServiceUuid string `json:"service_uuid"` -}

    - - - - - -

    ServiceServiceListRequest

    -

    ServiceServiceListRequest is the request payload for a service list request.

    The upstream nulink API accepts no body or parameters, so this is intentionally empty.

    - - - - - -

    ServiceServiceListResponse

    -

    ServiceServiceListResponse is the response payload for a service list request

    - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    servicesServicerepeated

    The available services

    - - - - - - - - - - - -

    ServiceService

    -

    ServiceService TODO what is a service?

    - - - - - - - - - - - - - - -
    Method NameRequest TypeResponse TypeDescription
    ListServiceServiceListRequestServiceServiceListResponse

    Returns a list of all services.

    - - - -

    fits/api/vm/v1/stagetype.proto

    Top
    @@ -4732,7 +4623,7 @@

    fits/api/vm/v1/stagetype.proto

    StageType -

    TODO what is a stage type?

    Maps to the upstream NucleusDBStageTypes model.

    TODO evaluate whether the uuid is really optional; the upstream API spec does not

    make this clear, so we validate it strictly for now.

    +

    Maps to the upstream NucleusDBStageTypes model.

    @@ -4752,12 +4643,7 @@

    StageType

    - + @@ -4771,26 +4657,6 @@

    StageTypeServiceListRequest<

    StageTypeServiceListRequest is the request payload for a stage type list request.

    Maps to the upstream TenantInputModel.

    -

    title string

    title of the stage type - -type NucleusDBStageTypes struct { - StageTypeTitle string `json:"stage_type_title"` - StageTypeUuid *openapi_types.UUID `json:"stage_type_uuid,omitempty"` -}

    title of the stage type

    - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    tenant_uuidstring

    Tenant to list available stage types for - -Note: the upstream model also has a requested_by field, which is intentionally -omitted here because it is added by the auth layer from the request context.

    - - @@ -4811,14 +4677,6 @@

    StageTypeServiceListRespons

    The available stage types

    - - validation_errors -
    fits.api.v1.ValidationError - repeated -

    Validation errors returned by the upstream API when the request is rejected (HTTP 422) -TODO this is just a test

    - - @@ -4833,7 +4691,7 @@

    StageTypeServiceListRespons

    StageTypeService

    -

    StageTypeService lists stage types available for VM instances.

    +

    StageTypeService lists stage types available for VM instances.

    TODO wurde besprochen am 09.09.26

    @@ -4992,7 +4850,7 @@

    VlanServiceListRequest

    - + - + @@ -5095,25 +5131,67 @@

    VMServiceCreateRequest

    - + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5130,6 +5208,37 @@

    VMServiceCreateResponse

    +

    VMServiceCreateWindowsRequest

    +

    Windows-specific create request parts

    + + +
    Method NameRequest TypeResponse TypeDescription
    tenant_uuidtenant string

    Tenant to list available VLANs for @@ -5047,7 +4905,7 @@

    VlanServiceListResponse

    VlanService

    -

    VLANService lists VLANs avaiable for VM instances.

    +

    VLANService lists VLANs avaiable for VM instances.

    TODO wurde besprochen am 09.09.26

    diff --git a/go/fits/api/vm/v1/location.pb.go b/go/fits/api/vm/v1/location.pb.go index 57f587c..7f6925f 100644 --- a/go/fits/api/vm/v1/location.pb.go +++ b/go/fits/api/vm/v1/location.pb.go @@ -80,8 +80,12 @@ func (x *Location) GetTitle() string { // LocationServiceListRequest is the request payload for a location list request. // The upstream nulink API accepts no body or parameters, so this is intentionally empty. +// TODO pro tenant anders. FITS darf beide RZ, sonst nur eines, logik dazu in nu-link type LocationServiceListRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` + state protoimpl.MessageState `protogen:"open.v1"` + // Tenant to list available locations for + // TODO Tobias baut in nulink-api ein + Tenant string `protobuf:"bytes,1,opt,name=tenant,proto3" json:"tenant,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -116,6 +120,13 @@ func (*LocationServiceListRequest) Descriptor() ([]byte, []int) { return file_fits_api_vm_v1_location_proto_rawDescGZIP(), []int{1} } +func (x *LocationServiceListRequest) GetTenant() string { + if x != nil { + return x.Tenant + } + return "" +} + // LocationServiceListResponse is the response payload for a location list request type LocationServiceListResponse struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -166,11 +177,12 @@ var File_fits_api_vm_v1_location_proto protoreflect.FileDescriptor const file_fits_api_vm_v1_location_proto_rawDesc = "" + "\n" + - "\x1dfits/api/vm/v1/location.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\">\n" + + "\x1dfits/api/vm/v1/location.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\">\n" + "\bLocation\x12\x1c\n" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n" + - "\x05title\x18\x02 \x01(\tR\x05title\"\x1c\n" + - "\x1aLocationServiceListRequest\"U\n" + + "\x05title\x18\x02 \x01(\tR\x05title\"A\n" + + "\x1aLocationServiceListRequest\x12#\n" + + "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"U\n" + "\x1bLocationServiceListResponse\x126\n" + "\tlocations\x18\x01 \x03(\v2\x18.fits.api.vm.v1.LocationR\tlocations2\x7f\n" + "\x0fLocationService\x12l\n" + diff --git a/go/fits/api/vm/v1/service.pb.go b/go/fits/api/vm/v1/service.pb.go index d76ed38..628f4ad 100644 --- a/go/fits/api/vm/v1/service.pb.go +++ b/go/fits/api/vm/v1/service.pb.go @@ -7,7 +7,6 @@ package vmv1 import ( - _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" _ "github.com/fi-ts/api/go/fits/api/v1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -27,6 +26,7 @@ const ( type Service struct { state protoimpl.MessageState `protogen:"open.v1"` // Uuid of this Service + // TODO this is actually not a UUID, but a string. It can be "special-customer" e.g. Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` // title of the Service Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` @@ -166,9 +166,9 @@ var File_fits_api_vm_v1_service_proto protoreflect.FileDescriptor const file_fits_api_vm_v1_service_proto_rawDesc = "" + "\n" + - "\x1cfits/api/vm/v1/service.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\"=\n" + - "\aService\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n" + + "\x1cfits/api/vm/v1/service.proto\x12\x0efits.api.vm.v1\x1a\x18fits/api/v1/common.proto\"3\n" + + "\aService\x12\x12\n" + + "\x04uuid\x18\x01 \x01(\tR\x04uuid\x12\x14\n" + "\x05title\x18\x02 \x01(\tR\x05title\"\x1b\n" + "\x19ServiceServiceListRequest\"Q\n" + "\x1aServiceServiceListResponse\x123\n" + diff --git a/go/fits/api/vm/v1/stagetype.pb.go b/go/fits/api/vm/v1/stagetype.pb.go index 79de608..b3ab114 100644 --- a/go/fits/api/vm/v1/stagetype.pb.go +++ b/go/fits/api/vm/v1/stagetype.pb.go @@ -8,7 +8,7 @@ package vmv1 import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" - v1 "github.com/fi-ts/api/go/fits/api/v1" + _ "github.com/fi-ts/api/go/fits/api/v1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -23,10 +23,7 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// TODO what is a stage type? // Maps to the upstream NucleusDBStageTypes model. -// TODO evaluate whether the uuid is really optional; the upstream API spec does not -// make this clear, so we validate it strictly for now. type StageType struct { state protoimpl.MessageState `protogen:"open.v1"` // Uuid of this stage type @@ -84,9 +81,7 @@ func (x *StageType) GetTitle() string { // StageTypeServiceListRequest is the request payload for a stage type list request. // Maps to the upstream TenantInputModel. type StageTypeServiceListRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Tenant to list available stage types for - TenantUuid string `protobuf:"bytes,1,opt,name=tenant_uuid,json=tenantUuid,proto3" json:"tenant_uuid,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -121,23 +116,13 @@ func (*StageTypeServiceListRequest) Descriptor() ([]byte, []int) { return file_fits_api_vm_v1_stagetype_proto_rawDescGZIP(), []int{1} } -func (x *StageTypeServiceListRequest) GetTenantUuid() string { - if x != nil { - return x.TenantUuid - } - return "" -} - // StageTypeServiceListResponse is the response payload for a stage type list request type StageTypeServiceListResponse struct { state protoimpl.MessageState `protogen:"open.v1"` // The available stage types - Stagetypes []*StageType `protobuf:"bytes,1,rep,name=stagetypes,proto3" json:"stagetypes,omitempty"` - // Validation errors returned by the upstream API when the request is rejected (HTTP 422) - // TODO this is just a test - ValidationErrors []*v1.ValidationError `protobuf:"bytes,2,rep,name=validation_errors,json=validationErrors,proto3" json:"validation_errors,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + Stagetypes []*StageType `protobuf:"bytes,1,rep,name=stagetypes,proto3" json:"stagetypes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *StageTypeServiceListResponse) Reset() { @@ -177,29 +162,19 @@ func (x *StageTypeServiceListResponse) GetStagetypes() []*StageType { return nil } -func (x *StageTypeServiceListResponse) GetValidationErrors() []*v1.ValidationError { - if x != nil { - return x.ValidationErrors - } - return nil -} - var File_fits_api_vm_v1_stagetype_proto protoreflect.FileDescriptor const file_fits_api_vm_v1_stagetype_proto_rawDesc = "" + "\n" + - "\x1efits/api/vm/v1/stagetype.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\"?\n" + + "\x1efits/api/vm/v1/stagetype.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"L\n" + "\tStageType\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n" + - "\x05title\x18\x02 \x01(\tR\x05title\"H\n" + - "\x1bStageTypeServiceListRequest\x12)\n" + - "\vtenant_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\n" + - "tenantUuid\"\xa4\x01\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n" + + "\x05title\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\"\x1d\n" + + "\x1bStageTypeServiceListRequest\"Y\n" + "\x1cStageTypeServiceListResponse\x129\n" + "\n" + "stagetypes\x18\x01 \x03(\v2\x19.fits.api.vm.v1.StageTypeR\n" + - "stagetypes\x12I\n" + - "\x11validation_errors\x18\x02 \x03(\v2\x1c.fits.api.v1.ValidationErrorR\x10validationErrors2\x82\x01\n" + + "stagetypes2\x82\x01\n" + "\x10StageTypeService\x12n\n" + "\x04List\x12+.fits.api.vm.v1.StageTypeServiceListRequest\x1a,.fits.api.vm.v1.StageTypeServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xac\x01\n" + "\x12com.fits.api.vm.v1B\x0eStagetypeProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" @@ -221,18 +196,16 @@ var file_fits_api_vm_v1_stagetype_proto_goTypes = []any{ (*StageType)(nil), // 0: fits.api.vm.v1.StageType (*StageTypeServiceListRequest)(nil), // 1: fits.api.vm.v1.StageTypeServiceListRequest (*StageTypeServiceListResponse)(nil), // 2: fits.api.vm.v1.StageTypeServiceListResponse - (*v1.ValidationError)(nil), // 3: fits.api.v1.ValidationError } var file_fits_api_vm_v1_stagetype_proto_depIdxs = []int32{ 0, // 0: fits.api.vm.v1.StageTypeServiceListResponse.stagetypes:type_name -> fits.api.vm.v1.StageType - 3, // 1: fits.api.vm.v1.StageTypeServiceListResponse.validation_errors:type_name -> fits.api.v1.ValidationError - 1, // 2: fits.api.vm.v1.StageTypeService.List:input_type -> fits.api.vm.v1.StageTypeServiceListRequest - 2, // 3: fits.api.vm.v1.StageTypeService.List:output_type -> fits.api.vm.v1.StageTypeServiceListResponse - 3, // [3:4] is the sub-list for method output_type - 2, // [2:3] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name + 1, // 1: fits.api.vm.v1.StageTypeService.List:input_type -> fits.api.vm.v1.StageTypeServiceListRequest + 2, // 2: fits.api.vm.v1.StageTypeService.List:output_type -> fits.api.vm.v1.StageTypeServiceListResponse + 2, // [2:3] is the sub-list for method output_type + 1, // [1:2] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name } func init() { file_fits_api_vm_v1_stagetype_proto_init() } diff --git a/go/fits/api/vm/v1/vlan.pb.go b/go/fits/api/vm/v1/vlan.pb.go index 5319329..e3bbc66 100644 --- a/go/fits/api/vm/v1/vlan.pb.go +++ b/go/fits/api/vm/v1/vlan.pb.go @@ -203,7 +203,7 @@ func (x *Vlan) GetTenantTitle() string { type VlanServiceListRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // Tenant to list available VLANs for - TenantUuid string `protobuf:"bytes,1,opt,name=tenant_uuid,json=tenantUuid,proto3" json:"tenant_uuid,omitempty"` + Tenant string `protobuf:"bytes,1,opt,name=tenant,proto3" json:"tenant,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -238,9 +238,9 @@ func (*VlanServiceListRequest) Descriptor() ([]byte, []int) { return file_fits_api_vm_v1_vlan_proto_rawDescGZIP(), []int{1} } -func (x *VlanServiceListRequest) GetTenantUuid() string { +func (x *VlanServiceListRequest) GetTenant() string { if x != nil { - return x.TenantUuid + return x.Tenant } return "" } @@ -305,7 +305,7 @@ var File_fits_api_vm_v1_vlan_proto protoreflect.FileDescriptor const file_fits_api_vm_v1_vlan_proto_rawDesc = "" + "\n" + - "\x19fits/api/vm/v1/vlan.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\"\xf8\x03\n" + + "\x19fits/api/vm/v1/vlan.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xf8\x03\n" + "\x04Vlan\x12\x1c\n" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x0e\n" + "\x02id\x18\x02 \x01(\x05R\x02id\x12!\n" + @@ -326,10 +326,9 @@ const file_fits_api_vm_v1_vlan_proto_rawDesc = "" + "\x0fstage_type_uuid\x18\r \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12)\n" + "\vtenant_uuid\x18\x0e \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\n" + "tenantUuid\x12!\n" + - "\ftenant_title\x18\x0f \x01(\tR\vtenantTitle\"C\n" + - "\x16VlanServiceListRequest\x12)\n" + - "\vtenant_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\n" + - "tenantUuid\"\x90\x01\n" + + "\ftenant_title\x18\x0f \x01(\tR\vtenantTitle\"=\n" + + "\x16VlanServiceListRequest\x12#\n" + + "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"\x90\x01\n" + "\x17VlanServiceListResponse\x12*\n" + "\x05vlans\x18\x01 \x03(\v2\x14.fits.api.vm.v1.VlanR\x05vlans\x12I\n" + "\x11validation_errors\x18\x02 \x03(\v2\x1c.fits.api.v1.ValidationErrorR\x10validationErrors2s\n" + diff --git a/js/fits/api/vm/v1/location_pb.ts b/js/fits/api/vm/v1/location_pb.ts index ed6c1a9..58411c3 100644 --- a/js/fits/api/vm/v1/location_pb.ts +++ b/js/fits/api/vm/v1/location_pb.ts @@ -6,13 +6,14 @@ import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegen import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; import { file_fits_api_v1_common } from "../../v1/common_pb"; +import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; import type { Message } from "@bufbuild/protobuf"; /** * Describes the file fits/api/vm/v1/location.proto. */ export const file_fits_api_vm_v1_location: GenFile = /*@__PURE__*/ - fileDesc("Ch1maXRzL2FwaS92bS92MS9sb2NhdGlvbi5wcm90bxIOZml0cy5hcGkudm0udjEiMQoITG9jYXRpb24SFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESDQoFdGl0bGUYAiABKAkiHAoaTG9jYXRpb25TZXJ2aWNlTGlzdFJlcXVlc3QiSgobTG9jYXRpb25TZXJ2aWNlTGlzdFJlc3BvbnNlEisKCWxvY2F0aW9ucxgBIAMoCzIYLmZpdHMuYXBpLnZtLnYxLkxvY2F0aW9uMn8KD0xvY2F0aW9uU2VydmljZRJsCgRMaXN0EiouZml0cy5hcGkudm0udjEuTG9jYXRpb25TZXJ2aWNlTGlzdFJlcXVlc3QaKy5maXRzLmFwaS52bS52MS5Mb2NhdGlvblNlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCQqsBChJjb20uZml0cy5hcGkudm0udjFCDUxvY2F0aW9uUHJvdG9QAVorZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdm0vdjE7dm12MaICA0ZBVqoCDkZpdHMuQXBpLlZtLlYxygIORml0c1xBcGlcVm1cVjHiAhpGaXRzXEFwaVxWbVxWMVxHUEJNZXRhZGF0YeoCEUZpdHM6OkFwaTo6Vm06OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common]); + fileDesc("Ch1maXRzL2FwaS92bS92MS9sb2NhdGlvbi5wcm90bxIOZml0cy5hcGkudm0udjEiMQoITG9jYXRpb24SFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESDQoFdGl0bGUYAiABKAkiOQoaTG9jYXRpb25TZXJ2aWNlTGlzdFJlcXVlc3QSGwoGdGVuYW50GAEgASgJQgu6SAhyBsCzrrECASJKChtMb2NhdGlvblNlcnZpY2VMaXN0UmVzcG9uc2USKwoJbG9jYXRpb25zGAEgAygLMhguZml0cy5hcGkudm0udjEuTG9jYXRpb24yfwoPTG9jYXRpb25TZXJ2aWNlEmwKBExpc3QSKi5maXRzLmFwaS52bS52MS5Mb2NhdGlvblNlcnZpY2VMaXN0UmVxdWVzdBorLmZpdHMuYXBpLnZtLnYxLkxvY2F0aW9uU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAJCqwEKEmNvbS5maXRzLmFwaS52bS52MUINTG9jYXRpb25Qcm90b1ABWitnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92bS92MTt2bXYxogIDRkFWqgIORml0cy5BcGkuVm0uVjHKAg5GaXRzXEFwaVxWbVxWMeICGkZpdHNcQXBpXFZtXFYxXEdQQk1ldGFkYXRh6gIRRml0czo6QXBpOjpWbTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); /** * Location is the definition of an available datacenter location for VM instances @@ -45,10 +46,18 @@ export const LocationSchema: GenMessage = /*@__PURE__*/ /** * LocationServiceListRequest is the request payload for a location list request. * The upstream nulink API accepts no body or parameters, so this is intentionally empty. + * TODO pro tenant anders. FITS darf beide RZ, sonst nur eines, logik dazu in nu-link * * @generated from message fits.api.vm.v1.LocationServiceListRequest */ export type LocationServiceListRequest = Message<"fits.api.vm.v1.LocationServiceListRequest"> & { + /** + * Tenant to list available locations for + * TODO Tobias baut in nulink-api ein + * + * @generated from field: string tenant = 1; + */ + tenant: string; }; /** @@ -81,6 +90,7 @@ export const LocationServiceListResponseSchema: GenMessage = /* /** * OSService lists operating systems available for VM instances. + * TODO wurde besprochen am 09.09.26 * * @generated from service fits.api.vm.v1.OSService */ diff --git a/js/fits/api/vm/v1/service_pb.ts b/js/fits/api/vm/v1/service_pb.ts index ea53e15..00df6d8 100644 --- a/js/fits/api/vm/v1/service_pb.ts +++ b/js/fits/api/vm/v1/service_pb.ts @@ -4,7 +4,6 @@ import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; -import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; import { file_fits_api_v1_common } from "../../v1/common_pb"; import type { Message } from "@bufbuild/protobuf"; @@ -12,7 +11,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file fits/api/vm/v1/service.proto. */ export const file_fits_api_vm_v1_service: GenFile = /*@__PURE__*/ - fileDesc("ChxmaXRzL2FwaS92bS92MS9zZXJ2aWNlLnByb3RvEg5maXRzLmFwaS52bS52MSIwCgdTZXJ2aWNlEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEg0KBXRpdGxlGAIgASgJIhsKGVNlcnZpY2VTZXJ2aWNlTGlzdFJlcXVlc3QiRwoaU2VydmljZVNlcnZpY2VMaXN0UmVzcG9uc2USKQoIc2VydmljZXMYASADKAsyFy5maXRzLmFwaS52bS52MS5TZXJ2aWNlMnwKDlNlcnZpY2VTZXJ2aWNlEmoKBExpc3QSKS5maXRzLmFwaS52bS52MS5TZXJ2aWNlU2VydmljZUxpc3RSZXF1ZXN0GiouZml0cy5hcGkudm0udjEuU2VydmljZVNlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCQqoBChJjb20uZml0cy5hcGkudm0udjFCDFNlcnZpY2VQcm90b1ABWitnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92bS92MTt2bXYxogIDRkFWqgIORml0cy5BcGkuVm0uVjHKAg5GaXRzXEFwaVxWbVxWMeICGkZpdHNcQXBpXFZtXFYxXEdQQk1ldGFkYXRh6gIRRml0czo6QXBpOjpWbTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common]); + fileDesc("ChxmaXRzL2FwaS92bS92MS9zZXJ2aWNlLnByb3RvEg5maXRzLmFwaS52bS52MSImCgdTZXJ2aWNlEgwKBHV1aWQYASABKAkSDQoFdGl0bGUYAiABKAkiGwoZU2VydmljZVNlcnZpY2VMaXN0UmVxdWVzdCJHChpTZXJ2aWNlU2VydmljZUxpc3RSZXNwb25zZRIpCghzZXJ2aWNlcxgBIAMoCzIXLmZpdHMuYXBpLnZtLnYxLlNlcnZpY2UyfAoOU2VydmljZVNlcnZpY2USagoETGlzdBIpLmZpdHMuYXBpLnZtLnYxLlNlcnZpY2VTZXJ2aWNlTGlzdFJlcXVlc3QaKi5maXRzLmFwaS52bS52MS5TZXJ2aWNlU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAJCqgEKEmNvbS5maXRzLmFwaS52bS52MUIMU2VydmljZVByb3RvUAFaK2dpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3ZtL3YxO3ZtdjGiAgNGQVaqAg5GaXRzLkFwaS5WbS5WMcoCDkZpdHNcQXBpXFZtXFYx4gIaRml0c1xBcGlcVm1cVjFcR1BCTWV0YWRhdGHqAhFGaXRzOjpBcGk6OlZtOjpWMWIGcHJvdG8z", [file_fits_api_v1_common]); /** * TODO what is a service? @@ -22,6 +21,7 @@ export const file_fits_api_vm_v1_service: GenFile = /*@__PURE__*/ export type Service = Message<"fits.api.vm.v1.Service"> & { /** * Uuid of this Service + * TODO this is actually not a UUID, but a string. It can be "special-customer" e.g. * * @generated from field: string uuid = 1; */ diff --git a/js/fits/api/vm/v1/stagetype_pb.ts b/js/fits/api/vm/v1/stagetype_pb.ts index dff3381..532ef52 100644 --- a/js/fits/api/vm/v1/stagetype_pb.ts +++ b/js/fits/api/vm/v1/stagetype_pb.ts @@ -5,21 +5,18 @@ import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; -import type { ValidationError } from "../../v1/common_pb"; import { file_fits_api_v1_common } from "../../v1/common_pb"; +import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; import type { Message } from "@bufbuild/protobuf"; /** * Describes the file fits/api/vm/v1/stagetype.proto. */ export const file_fits_api_vm_v1_stagetype: GenFile = /*@__PURE__*/ - fileDesc("Ch5maXRzL2FwaS92bS92MS9zdGFnZXR5cGUucHJvdG8SDmZpdHMuYXBpLnZtLnYxIjIKCVN0YWdlVHlwZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARINCgV0aXRsZRgCIAEoCSI8ChtTdGFnZVR5cGVTZXJ2aWNlTGlzdFJlcXVlc3QSHQoLdGVuYW50X3V1aWQYASABKAlCCLpIBXIDsAEBIoYBChxTdGFnZVR5cGVTZXJ2aWNlTGlzdFJlc3BvbnNlEi0KCnN0YWdldHlwZXMYASADKAsyGS5maXRzLmFwaS52bS52MS5TdGFnZVR5cGUSNwoRdmFsaWRhdGlvbl9lcnJvcnMYAiADKAsyHC5maXRzLmFwaS52MS5WYWxpZGF0aW9uRXJyb3IyggEKEFN0YWdlVHlwZVNlcnZpY2USbgoETGlzdBIrLmZpdHMuYXBpLnZtLnYxLlN0YWdlVHlwZVNlcnZpY2VMaXN0UmVxdWVzdBosLmZpdHMuYXBpLnZtLnYxLlN0YWdlVHlwZVNlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCQqwBChJjb20uZml0cy5hcGkudm0udjFCDlN0YWdldHlwZVByb3RvUAFaK2dpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3ZtL3YxO3ZtdjGiAgNGQVaqAg5GaXRzLkFwaS5WbS5WMcoCDkZpdHNcQXBpXFZtXFYx4gIaRml0c1xBcGlcVm1cVjFcR1BCTWV0YWRhdGHqAhFGaXRzOjpBcGk6OlZtOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common]); + fileDesc("Ch5maXRzL2FwaS92bS92MS9zdGFnZXR5cGUucHJvdG8SDmZpdHMuYXBpLnZtLnYxIj8KCVN0YWdlVHlwZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIaCgV0aXRsZRgCIAEoCUILukgIcgbAs66xAgEiHQobU3RhZ2VUeXBlU2VydmljZUxpc3RSZXF1ZXN0Ik0KHFN0YWdlVHlwZVNlcnZpY2VMaXN0UmVzcG9uc2USLQoKc3RhZ2V0eXBlcxgBIAMoCzIZLmZpdHMuYXBpLnZtLnYxLlN0YWdlVHlwZTKCAQoQU3RhZ2VUeXBlU2VydmljZRJuCgRMaXN0EisuZml0cy5hcGkudm0udjEuU3RhZ2VUeXBlU2VydmljZUxpc3RSZXF1ZXN0GiwuZml0cy5hcGkudm0udjEuU3RhZ2VUeXBlU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAJCrAEKEmNvbS5maXRzLmFwaS52bS52MUIOU3RhZ2V0eXBlUHJvdG9QAVorZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdm0vdjE7dm12MaICA0ZBVqoCDkZpdHMuQXBpLlZtLlYxygIORml0c1xBcGlcVm1cVjHiAhpGaXRzXEFwaVxWbVxWMVxHUEJNZXRhZGF0YeoCEUZpdHM6OkFwaTo6Vm06OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); /** - * TODO what is a stage type? * Maps to the upstream NucleusDBStageTypes model. - * TODO evaluate whether the uuid is really optional; the upstream API spec does not - * make this clear, so we validate it strictly for now. * * @generated from message fits.api.vm.v1.StageType */ @@ -34,11 +31,6 @@ export type StageType = Message<"fits.api.vm.v1.StageType"> & { /** * title of the stage type * - * type NucleusDBStageTypes struct { - * StageTypeTitle string `json:"stage_type_title"` - * StageTypeUuid *openapi_types.UUID `json:"stage_type_uuid,omitempty"` - * } - * * @generated from field: string title = 2; */ title: string; @@ -58,15 +50,6 @@ export const StageTypeSchema: GenMessage = /*@__PURE__*/ * @generated from message fits.api.vm.v1.StageTypeServiceListRequest */ export type StageTypeServiceListRequest = Message<"fits.api.vm.v1.StageTypeServiceListRequest"> & { - /** - * Tenant to list available stage types for - * - * Note: the upstream model also has a requested_by field, which is intentionally - * omitted here because it is added by the auth layer from the request context. - * - * @generated from field: string tenant_uuid = 1; - */ - tenantUuid: string; }; /** @@ -88,14 +71,6 @@ export type StageTypeServiceListResponse = Message<"fits.api.vm.v1.StageTypeServ * @generated from field: repeated fits.api.vm.v1.StageType stagetypes = 1; */ stagetypes: StageType[]; - - /** - * Validation errors returned by the upstream API when the request is rejected (HTTP 422) - * TODO this is just a test - * - * @generated from field: repeated fits.api.v1.ValidationError validation_errors = 2; - */ - validationErrors: ValidationError[]; }; /** @@ -107,6 +82,7 @@ export const StageTypeServiceListResponseSchema: GenMessage /** * VLANService lists VLANs avaiable for VM instances. + * TODO wurde besprochen am 09.09.26 * * @generated from service fits.api.vm.v1.VlanService */ diff --git a/proto/fits/api/vm/v1/location.proto b/proto/fits/api/vm/v1/location.proto index 2d3f68c..c637531 100644 --- a/proto/fits/api/vm/v1/location.proto +++ b/proto/fits/api/vm/v1/location.proto @@ -4,8 +4,10 @@ package fits.api.vm.v1; import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; +import "fits/api/v1/predefined_rules.proto"; // LocationService lists datacenter locations available for VM instances. +// TODO wurde besprochen am 09.09.26 service LocationService { // Returns a list of all datacenter locations. rpc List(LocationServiceListRequest) returns (LocationServiceListResponse) { @@ -26,7 +28,12 @@ message Location { // LocationServiceListRequest is the request payload for a location list request. // The upstream nulink API accepts no body or parameters, so this is intentionally empty. -message LocationServiceListRequest {} +// TODO pro tenant anders. FITS darf beide RZ, sonst nur eines, logik dazu in nu-link +message LocationServiceListRequest { + // Tenant to list available locations for + // TODO Tobias baut in nulink-api ein + string tenant = 1 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; +} // LocationServiceListResponse is the response payload for a location list request message LocationServiceListResponse { diff --git a/proto/fits/api/vm/v1/os.proto b/proto/fits/api/vm/v1/os.proto index deadd34..d73c22b 100644 --- a/proto/fits/api/vm/v1/os.proto +++ b/proto/fits/api/vm/v1/os.proto @@ -6,6 +6,7 @@ import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; // OSService lists operating systems available for VM instances. +// TODO wurde besprochen am 09.09.26 service OSService { // Returns a list of all OSs. rpc List(OSServiceListRequest) returns (OSServiceListResponse) { diff --git a/proto/fits/api/vm/v1/service.proto b/proto/fits/api/vm/v1/service.proto deleted file mode 100644 index c701217..0000000 --- a/proto/fits/api/vm/v1/service.proto +++ /dev/null @@ -1,39 +0,0 @@ -syntax = "proto3"; - -package fits.api.vm.v1; - -import "buf/validate/validate.proto"; -import "fits/api/v1/common.proto"; - -// ServiceService TODO what is a service? -service ServiceService { - // Returns a list of all services. - rpc List(ServiceServiceListRequest) returns (ServiceServiceListResponse) { - option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; - option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; - option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; - option (fits.api.v1.auditing) = AUDITING_EXCLUDED; - } -} - -// TODO what is a service? -message Service { - // Uuid of this Service - string uuid = 1 [(buf.validate.field).string.uuid = true]; - // title of the Service - string title = 2; - // type NucleusDBServices struct { - // ServiceTitle string `json:"service_title"` - // ServiceUuid string `json:"service_uuid"` - // } -} - -// ServiceServiceListRequest is the request payload for a service list request. -// The upstream nulink API accepts no body or parameters, so this is intentionally empty. -message ServiceServiceListRequest {} - -// ServiceServiceListResponse is the response payload for a service list request -message ServiceServiceListResponse { - // The available services - repeated Service services = 1; -} diff --git a/proto/fits/api/vm/v1/stagetype.proto b/proto/fits/api/vm/v1/stagetype.proto index 32337de..35bb77f 100644 --- a/proto/fits/api/vm/v1/stagetype.proto +++ b/proto/fits/api/vm/v1/stagetype.proto @@ -4,8 +4,10 @@ package fits.api.vm.v1; import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; +import "fits/api/v1/predefined_rules.proto"; // StageTypeService lists stage types available for VM instances. +// TODO wurde besprochen am 09.09.26 service StageTypeService { // Returns a list of all stage types available for a tenant. rpc List(StageTypeServiceListRequest) returns (StageTypeServiceListResponse) { @@ -16,35 +18,20 @@ service StageTypeService { } } -// TODO what is a stage type? // Maps to the upstream NucleusDBStageTypes model. -// TODO evaluate whether the uuid is really optional; the upstream API spec does not -// make this clear, so we validate it strictly for now. message StageType { // Uuid of this stage type string uuid = 1 [(buf.validate.field).string.uuid = true]; // title of the stage type - string title = 2; - // type NucleusDBStageTypes struct { - // StageTypeTitle string `json:"stage_type_title"` - // StageTypeUuid *openapi_types.UUID `json:"stage_type_uuid,omitempty"` - // } + string title = 2 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } // StageTypeServiceListRequest is the request payload for a stage type list request. // Maps to the upstream TenantInputModel. -message StageTypeServiceListRequest { - // Tenant to list available stage types for - string tenant_uuid = 1 [(buf.validate.field).string.uuid = true]; - // Note: the upstream model also has a requested_by field, which is intentionally - // omitted here because it is added by the auth layer from the request context. -} +message StageTypeServiceListRequest {} // StageTypeServiceListResponse is the response payload for a stage type list request message StageTypeServiceListResponse { // The available stage types repeated StageType stagetypes = 1; - // Validation errors returned by the upstream API when the request is rejected (HTTP 422) - // TODO this is just a test - repeated fits.api.v1.ValidationError validation_errors = 2; } diff --git a/proto/fits/api/vm/v1/vlan.proto b/proto/fits/api/vm/v1/vlan.proto index ce6199a..7ff2b7e 100644 --- a/proto/fits/api/vm/v1/vlan.proto +++ b/proto/fits/api/vm/v1/vlan.proto @@ -4,8 +4,10 @@ package fits.api.vm.v1; import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; +import "fits/api/v1/predefined_rules.proto"; // VLANService lists VLANs avaiable for VM instances. +// TODO wurde besprochen am 09.09.26 service VlanService { // Returns a list of all VLANs available for a tenant. rpc List(VlanServiceListRequest) returns (VlanServiceListResponse) { @@ -75,7 +77,7 @@ message Vlan { // Maps to the upstream TenantInputModel. message VlanServiceListRequest { // Tenant to list available VLANs for - string tenant_uuid = 1 [(buf.validate.field).string.uuid = true]; + string tenant = 1 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; // Note: the upstream model also has a requested_by field, which is intentionally // omitted here because it is added by the auth layer from the request context. } diff --git a/python/fits/api/vm/v1/location_pb2.py b/python/fits/api/vm/v1/location_pb2.py index 0ba13dc..239ca58 100644 --- a/python/fits/api/vm/v1/location_pb2.py +++ b/python/fits/api/vm/v1/location_pb2.py @@ -24,9 +24,10 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 +from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x66its/api/vm/v1/location.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\">\n\x08Location\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n\x05title\x18\x02 \x01(\tR\x05title\"\x1c\n\x1aLocationServiceListRequest\"U\n\x1bLocationServiceListResponse\x12\x36\n\tlocations\x18\x01 \x03(\x0b\x32\x18.fits.api.vm.v1.LocationR\tlocations2\x7f\n\x0fLocationService\x12l\n\x04List\x12*.fits.api.vm.v1.LocationServiceListRequest\x1a+.fits.api.vm.v1.LocationServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xab\x01\n\x12\x63om.fits.api.vm.v1B\rLocationProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x66its/api/vm/v1/location.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\">\n\x08Location\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n\x05title\x18\x02 \x01(\tR\x05title\"A\n\x1aLocationServiceListRequest\x12#\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"U\n\x1bLocationServiceListResponse\x12\x36\n\tlocations\x18\x01 \x03(\x0b\x32\x18.fits.api.vm.v1.LocationR\tlocations2\x7f\n\x0fLocationService\x12l\n\x04List\x12*.fits.api.vm.v1.LocationServiceListRequest\x1a+.fits.api.vm.v1.LocationServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xab\x01\n\x12\x63om.fits.api.vm.v1B\rLocationProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -36,14 +37,16 @@ _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\rLocationProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' _globals['_LOCATION'].fields_by_name['uuid']._loaded_options = None _globals['_LOCATION'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_LOCATIONSERVICELISTREQUEST'].fields_by_name['tenant']._loaded_options = None + _globals['_LOCATIONSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_LOCATIONSERVICE'].methods_by_name['List']._loaded_options = None _globals['_LOCATIONSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' - _globals['_LOCATION']._serialized_start=104 - _globals['_LOCATION']._serialized_end=166 - _globals['_LOCATIONSERVICELISTREQUEST']._serialized_start=168 - _globals['_LOCATIONSERVICELISTREQUEST']._serialized_end=196 - _globals['_LOCATIONSERVICELISTRESPONSE']._serialized_start=198 - _globals['_LOCATIONSERVICELISTRESPONSE']._serialized_end=283 - _globals['_LOCATIONSERVICE']._serialized_start=285 - _globals['_LOCATIONSERVICE']._serialized_end=412 + _globals['_LOCATION']._serialized_start=140 + _globals['_LOCATION']._serialized_end=202 + _globals['_LOCATIONSERVICELISTREQUEST']._serialized_start=204 + _globals['_LOCATIONSERVICELISTREQUEST']._serialized_end=269 + _globals['_LOCATIONSERVICELISTRESPONSE']._serialized_start=271 + _globals['_LOCATIONSERVICELISTRESPONSE']._serialized_end=356 + _globals['_LOCATIONSERVICE']._serialized_start=358 + _globals['_LOCATIONSERVICE']._serialized_end=485 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/location_pb2.pyi b/python/fits/api/vm/v1/location_pb2.pyi index 3282949..989a6b3 100644 --- a/python/fits/api/vm/v1/location_pb2.pyi +++ b/python/fits/api/vm/v1/location_pb2.pyi @@ -1,5 +1,6 @@ from buf.validate import validate_pb2 as _validate_pb2 from fits.api.v1 import common_pb2 as _common_pb2 +from fits.api.v1 import predefined_rules_pb2 as _predefined_rules_pb2 from google.protobuf.internal import containers as _containers from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message @@ -17,8 +18,10 @@ class Location(_message.Message): def __init__(self, uuid: _Optional[str] = ..., title: _Optional[str] = ...) -> None: ... class LocationServiceListRequest(_message.Message): - __slots__ = () - def __init__(self) -> None: ... + __slots__ = ("tenant",) + TENANT_FIELD_NUMBER: _ClassVar[int] + tenant: str + def __init__(self, tenant: _Optional[str] = ...) -> None: ... class LocationServiceListResponse(_message.Message): __slots__ = ("locations",) diff --git a/python/fits/api/vm/v1/service_connect.py b/python/fits/api/vm/v1/service_connect.py deleted file mode 100644 index 3979370..0000000 --- a/python/fits/api/vm/v1/service_connect.py +++ /dev/null @@ -1,131 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! -# source: fits/api/vm/v1/service.proto - -from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping -from typing import Protocol - -from connectrpc.client import ConnectClient, ConnectClientSync -from connectrpc.code import Code -from connectrpc.codec import Codec -from connectrpc.compression import Compression -from connectrpc.errors import ConnectError -from connectrpc.interceptor import Interceptor, InterceptorSync -from connectrpc.method import IdempotencyLevel, MethodInfo -from connectrpc.request import Headers, RequestContext -from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync -import fits.api.vm.v1.service_pb2 as fits_dot_api_dot_vm_dot_v1_dot_service__pb2 - - -class ServiceService(Protocol): - async def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - -class ServiceServiceASGIApplication(ConnectASGIApplication[ServiceService]): - def __init__(self, service: ServiceService | AsyncGenerator[ServiceService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: - super().__init__( - service=service, - endpoints=lambda svc: { - "/fits.api.vm.v1.ServiceService/List": Endpoint.unary( - method=MethodInfo( - name="List", - service_name="fits.api.vm.v1.ServiceService", - input=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.list, - ), - }, - interceptors=interceptors, - read_max_bytes=read_max_bytes, - compressions=compressions, - codecs=codecs, - ) - - @property - def path(self) -> str: - """Returns the URL path to mount the application to when serving multiple applications.""" - return "/fits.api.vm.v1.ServiceService" - - -class ServiceServiceClient(ConnectClient): - async def list( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="List", - service_name="fits.api.vm.v1.ServiceService", - input=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - - - - -class ServiceServiceSync(Protocol): - def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - -class ServiceServiceWSGIApplication(ConnectWSGIApplication): - def __init__(self, service: ServiceServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: - super().__init__( - endpoints={ - "/fits.api.vm.v1.ServiceService/List": EndpointSync.unary( - method=MethodInfo( - name="List", - service_name="fits.api.vm.v1.ServiceService", - input=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.list, - ), - }, - interceptors=interceptors, - read_max_bytes=read_max_bytes, - compressions=compressions, - codecs=codecs, - ) - - @property - def path(self) -> str: - """Returns the URL path to mount the application to when serving multiple applications.""" - return "/fits.api.vm.v1.ServiceService" - - -class ServiceServiceClientSync(ConnectClientSync): - def list( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="List", - service_name="fits.api.vm.v1.ServiceService", - input=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_service__pb2.ServiceServiceListResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - diff --git a/python/fits/api/vm/v1/service_pb2.py b/python/fits/api/vm/v1/service_pb2.py deleted file mode 100644 index f423479..0000000 --- a/python/fits/api/vm/v1/service_pb2.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: fits/api/vm/v1/service.proto -# Protobuf Python Version: 7.36.1 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 7, - 36, - 1, - '', - 'fits/api/vm/v1/service.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66its/api/vm/v1/service.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\"=\n\x07Service\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n\x05title\x18\x02 \x01(\tR\x05title\"\x1b\n\x19ServiceServiceListRequest\"Q\n\x1aServiceServiceListResponse\x12\x33\n\x08services\x18\x01 \x03(\x0b\x32\x17.fits.api.vm.v1.ServiceR\x08services2|\n\x0eServiceService\x12j\n\x04List\x12).fits.api.vm.v1.ServiceServiceListRequest\x1a*.fits.api.vm.v1.ServiceServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xaa\x01\n\x12\x63om.fits.api.vm.v1B\x0cServiceProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.vm.v1.service_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\014ServiceProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' - _globals['_SERVICE'].fields_by_name['uuid']._loaded_options = None - _globals['_SERVICE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_SERVICESERVICE'].methods_by_name['List']._loaded_options = None - _globals['_SERVICESERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' - _globals['_SERVICE']._serialized_start=103 - _globals['_SERVICE']._serialized_end=164 - _globals['_SERVICESERVICELISTREQUEST']._serialized_start=166 - _globals['_SERVICESERVICELISTREQUEST']._serialized_end=193 - _globals['_SERVICESERVICELISTRESPONSE']._serialized_start=195 - _globals['_SERVICESERVICELISTRESPONSE']._serialized_end=276 - _globals['_SERVICESERVICE']._serialized_start=278 - _globals['_SERVICESERVICE']._serialized_end=402 -# @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/service_pb2.pyi b/python/fits/api/vm/v1/service_pb2.pyi deleted file mode 100644 index efb26cf..0000000 --- a/python/fits/api/vm/v1/service_pb2.pyi +++ /dev/null @@ -1,27 +0,0 @@ -from buf.validate import validate_pb2 as _validate_pb2 -from fits.api.v1 import common_pb2 as _common_pb2 -from google.protobuf.internal import containers as _containers -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from collections.abc import Iterable as _Iterable, Mapping as _Mapping -from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union - -DESCRIPTOR: _descriptor.FileDescriptor - -class Service(_message.Message): - __slots__ = ("uuid", "title") - UUID_FIELD_NUMBER: _ClassVar[int] - TITLE_FIELD_NUMBER: _ClassVar[int] - uuid: str - title: str - def __init__(self, uuid: _Optional[str] = ..., title: _Optional[str] = ...) -> None: ... - -class ServiceServiceListRequest(_message.Message): - __slots__ = () - def __init__(self) -> None: ... - -class ServiceServiceListResponse(_message.Message): - __slots__ = ("services",) - SERVICES_FIELD_NUMBER: _ClassVar[int] - services: _containers.RepeatedCompositeFieldContainer[Service] - def __init__(self, services: _Optional[_Iterable[_Union[Service, _Mapping]]] = ...) -> None: ... diff --git a/python/fits/api/vm/v1/stagetype_pb2.py b/python/fits/api/vm/v1/stagetype_pb2.py index dd52c0a..eff1eaa 100644 --- a/python/fits/api/vm/v1/stagetype_pb2.py +++ b/python/fits/api/vm/v1/stagetype_pb2.py @@ -24,9 +24,10 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 +from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x66its/api/vm/v1/stagetype.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\"?\n\tStageType\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n\x05title\x18\x02 \x01(\tR\x05title\"H\n\x1bStageTypeServiceListRequest\x12)\n\x0btenant_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ntenantUuid\"\xa4\x01\n\x1cStageTypeServiceListResponse\x12\x39\n\nstagetypes\x18\x01 \x03(\x0b\x32\x19.fits.api.vm.v1.StageTypeR\nstagetypes\x12I\n\x11validation_errors\x18\x02 \x03(\x0b\x32\x1c.fits.api.v1.ValidationErrorR\x10validationErrors2\x82\x01\n\x10StageTypeService\x12n\n\x04List\x12+.fits.api.vm.v1.StageTypeServiceListRequest\x1a,.fits.api.vm.v1.StageTypeServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xac\x01\n\x12\x63om.fits.api.vm.v1B\x0eStagetypeProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x66its/api/vm/v1/stagetype.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"L\n\tStageType\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x05title\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\"\x1d\n\x1bStageTypeServiceListRequest\"Y\n\x1cStageTypeServiceListResponse\x12\x39\n\nstagetypes\x18\x01 \x03(\x0b\x32\x19.fits.api.vm.v1.StageTypeR\nstagetypes2\x82\x01\n\x10StageTypeService\x12n\n\x04List\x12+.fits.api.vm.v1.StageTypeServiceListRequest\x1a,.fits.api.vm.v1.StageTypeServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xac\x01\n\x12\x63om.fits.api.vm.v1B\x0eStagetypeProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -36,16 +37,16 @@ _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\016StagetypeProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' _globals['_STAGETYPE'].fields_by_name['uuid']._loaded_options = None _globals['_STAGETYPE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_STAGETYPESERVICELISTREQUEST'].fields_by_name['tenant_uuid']._loaded_options = None - _globals['_STAGETYPESERVICELISTREQUEST'].fields_by_name['tenant_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_STAGETYPE'].fields_by_name['title']._loaded_options = None + _globals['_STAGETYPE'].fields_by_name['title']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_STAGETYPESERVICE'].methods_by_name['List']._loaded_options = None _globals['_STAGETYPESERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' - _globals['_STAGETYPE']._serialized_start=105 - _globals['_STAGETYPE']._serialized_end=168 - _globals['_STAGETYPESERVICELISTREQUEST']._serialized_start=170 - _globals['_STAGETYPESERVICELISTREQUEST']._serialized_end=242 - _globals['_STAGETYPESERVICELISTRESPONSE']._serialized_start=245 - _globals['_STAGETYPESERVICELISTRESPONSE']._serialized_end=409 - _globals['_STAGETYPESERVICE']._serialized_start=412 - _globals['_STAGETYPESERVICE']._serialized_end=542 + _globals['_STAGETYPE']._serialized_start=141 + _globals['_STAGETYPE']._serialized_end=217 + _globals['_STAGETYPESERVICELISTREQUEST']._serialized_start=219 + _globals['_STAGETYPESERVICELISTREQUEST']._serialized_end=248 + _globals['_STAGETYPESERVICELISTRESPONSE']._serialized_start=250 + _globals['_STAGETYPESERVICELISTRESPONSE']._serialized_end=339 + _globals['_STAGETYPESERVICE']._serialized_start=342 + _globals['_STAGETYPESERVICE']._serialized_end=472 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/stagetype_pb2.pyi b/python/fits/api/vm/v1/stagetype_pb2.pyi index eea97d7..a253252 100644 --- a/python/fits/api/vm/v1/stagetype_pb2.pyi +++ b/python/fits/api/vm/v1/stagetype_pb2.pyi @@ -1,5 +1,6 @@ from buf.validate import validate_pb2 as _validate_pb2 from fits.api.v1 import common_pb2 as _common_pb2 +from fits.api.v1 import predefined_rules_pb2 as _predefined_rules_pb2 from google.protobuf.internal import containers as _containers from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message @@ -17,15 +18,11 @@ class StageType(_message.Message): def __init__(self, uuid: _Optional[str] = ..., title: _Optional[str] = ...) -> None: ... class StageTypeServiceListRequest(_message.Message): - __slots__ = ("tenant_uuid",) - TENANT_UUID_FIELD_NUMBER: _ClassVar[int] - tenant_uuid: str - def __init__(self, tenant_uuid: _Optional[str] = ...) -> None: ... + __slots__ = () + def __init__(self) -> None: ... class StageTypeServiceListResponse(_message.Message): - __slots__ = ("stagetypes", "validation_errors") + __slots__ = ("stagetypes",) STAGETYPES_FIELD_NUMBER: _ClassVar[int] - VALIDATION_ERRORS_FIELD_NUMBER: _ClassVar[int] stagetypes: _containers.RepeatedCompositeFieldContainer[StageType] - validation_errors: _containers.RepeatedCompositeFieldContainer[_common_pb2.ValidationError] - def __init__(self, stagetypes: _Optional[_Iterable[_Union[StageType, _Mapping]]] = ..., validation_errors: _Optional[_Iterable[_Union[_common_pb2.ValidationError, _Mapping]]] = ...) -> None: ... + def __init__(self, stagetypes: _Optional[_Iterable[_Union[StageType, _Mapping]]] = ...) -> None: ... diff --git a/python/fits/api/vm/v1/vlan_pb2.py b/python/fits/api/vm/v1/vlan_pb2.py index 0d1f91b..fd4b32a 100644 --- a/python/fits/api/vm/v1/vlan_pb2.py +++ b/python/fits/api/vm/v1/vlan_pb2.py @@ -24,9 +24,10 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 +from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/vm/v1/vlan.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\"\xf8\x03\n\x04Vlan\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x0e\n\x02id\x18\x02 \x01(\x05R\x02id\x12!\n\x0csubnet_title\x18\x03 \x01(\tR\x0bsubnetTitle\x12\x16\n\x06subnet\x18\x04 \x01(\tR\x06subnet\x12\x1e\n\nsubnetmask\x18\x05 \x01(\tR\nsubnetmask\x12\x18\n\x07gateway\x18\x06 \x01(\tR\x07gateway\x12$\n\x0eip_range_start\x18\x07 \x01(\tR\x0cipRangeStart\x12 \n\x0cip_range_end\x18\x08 \x01(\tR\nipRangeEnd\x12\x19\n\x08use_dhcp\x18\t \x01(\x08R\x07useDhcp\x12\x1b\n\tpod_title\x18\n \x01(\tR\x08podTitle\x12#\n\x08pod_uuid\x18\x0b \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07podUuid\x12(\n\x10stage_type_title\x18\x0c \x01(\tR\x0estageTypeTitle\x12\x30\n\x0fstage_type_uuid\x18\r \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12)\n\x0btenant_uuid\x18\x0e \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ntenantUuid\x12!\n\x0ctenant_title\x18\x0f \x01(\tR\x0btenantTitle\"C\n\x16VlanServiceListRequest\x12)\n\x0btenant_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ntenantUuid\"\x90\x01\n\x17VlanServiceListResponse\x12*\n\x05vlans\x18\x01 \x03(\x0b\x32\x14.fits.api.vm.v1.VlanR\x05vlans\x12I\n\x11validation_errors\x18\x02 \x03(\x0b\x32\x1c.fits.api.v1.ValidationErrorR\x10validationErrors2s\n\x0bVlanService\x12\x64\n\x04List\x12&.fits.api.vm.v1.VlanServiceListRequest\x1a\'.fits.api.vm.v1.VlanServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xa7\x01\n\x12\x63om.fits.api.vm.v1B\tVlanProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/vm/v1/vlan.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xf8\x03\n\x04Vlan\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x0e\n\x02id\x18\x02 \x01(\x05R\x02id\x12!\n\x0csubnet_title\x18\x03 \x01(\tR\x0bsubnetTitle\x12\x16\n\x06subnet\x18\x04 \x01(\tR\x06subnet\x12\x1e\n\nsubnetmask\x18\x05 \x01(\tR\nsubnetmask\x12\x18\n\x07gateway\x18\x06 \x01(\tR\x07gateway\x12$\n\x0eip_range_start\x18\x07 \x01(\tR\x0cipRangeStart\x12 \n\x0cip_range_end\x18\x08 \x01(\tR\nipRangeEnd\x12\x19\n\x08use_dhcp\x18\t \x01(\x08R\x07useDhcp\x12\x1b\n\tpod_title\x18\n \x01(\tR\x08podTitle\x12#\n\x08pod_uuid\x18\x0b \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07podUuid\x12(\n\x10stage_type_title\x18\x0c \x01(\tR\x0estageTypeTitle\x12\x30\n\x0fstage_type_uuid\x18\r \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12)\n\x0btenant_uuid\x18\x0e \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ntenantUuid\x12!\n\x0ctenant_title\x18\x0f \x01(\tR\x0btenantTitle\"=\n\x16VlanServiceListRequest\x12#\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"\x90\x01\n\x17VlanServiceListResponse\x12*\n\x05vlans\x18\x01 \x03(\x0b\x32\x14.fits.api.vm.v1.VlanR\x05vlans\x12I\n\x11validation_errors\x18\x02 \x03(\x0b\x32\x1c.fits.api.v1.ValidationErrorR\x10validationErrors2s\n\x0bVlanService\x12\x64\n\x04List\x12&.fits.api.vm.v1.VlanServiceListRequest\x1a\'.fits.api.vm.v1.VlanServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xa7\x01\n\x12\x63om.fits.api.vm.v1B\tVlanProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -42,16 +43,16 @@ _globals['_VLAN'].fields_by_name['stage_type_uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VLAN'].fields_by_name['tenant_uuid']._loaded_options = None _globals['_VLAN'].fields_by_name['tenant_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VLANSERVICELISTREQUEST'].fields_by_name['tenant_uuid']._loaded_options = None - _globals['_VLANSERVICELISTREQUEST'].fields_by_name['tenant_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VLANSERVICELISTREQUEST'].fields_by_name['tenant']._loaded_options = None + _globals['_VLANSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_VLANSERVICE'].methods_by_name['List']._loaded_options = None _globals['_VLANSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' - _globals['_VLAN']._serialized_start=101 - _globals['_VLAN']._serialized_end=605 - _globals['_VLANSERVICELISTREQUEST']._serialized_start=607 - _globals['_VLANSERVICELISTREQUEST']._serialized_end=674 - _globals['_VLANSERVICELISTRESPONSE']._serialized_start=677 - _globals['_VLANSERVICELISTRESPONSE']._serialized_end=821 - _globals['_VLANSERVICE']._serialized_start=823 - _globals['_VLANSERVICE']._serialized_end=938 + _globals['_VLAN']._serialized_start=137 + _globals['_VLAN']._serialized_end=641 + _globals['_VLANSERVICELISTREQUEST']._serialized_start=643 + _globals['_VLANSERVICELISTREQUEST']._serialized_end=704 + _globals['_VLANSERVICELISTRESPONSE']._serialized_start=707 + _globals['_VLANSERVICELISTRESPONSE']._serialized_end=851 + _globals['_VLANSERVICE']._serialized_start=853 + _globals['_VLANSERVICE']._serialized_end=968 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/vlan_pb2.pyi b/python/fits/api/vm/v1/vlan_pb2.pyi index 81d5427..f79a7d9 100644 --- a/python/fits/api/vm/v1/vlan_pb2.pyi +++ b/python/fits/api/vm/v1/vlan_pb2.pyi @@ -1,5 +1,6 @@ from buf.validate import validate_pb2 as _validate_pb2 from fits.api.v1 import common_pb2 as _common_pb2 +from fits.api.v1 import predefined_rules_pb2 as _predefined_rules_pb2 from google.protobuf.internal import containers as _containers from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message @@ -43,10 +44,10 @@ class Vlan(_message.Message): def __init__(self, uuid: _Optional[str] = ..., id: _Optional[int] = ..., subnet_title: _Optional[str] = ..., subnet: _Optional[str] = ..., subnetmask: _Optional[str] = ..., gateway: _Optional[str] = ..., ip_range_start: _Optional[str] = ..., ip_range_end: _Optional[str] = ..., use_dhcp: _Optional[bool] = ..., pod_title: _Optional[str] = ..., pod_uuid: _Optional[str] = ..., stage_type_title: _Optional[str] = ..., stage_type_uuid: _Optional[str] = ..., tenant_uuid: _Optional[str] = ..., tenant_title: _Optional[str] = ...) -> None: ... class VlanServiceListRequest(_message.Message): - __slots__ = ("tenant_uuid",) - TENANT_UUID_FIELD_NUMBER: _ClassVar[int] - tenant_uuid: str - def __init__(self, tenant_uuid: _Optional[str] = ...) -> None: ... + __slots__ = ("tenant",) + TENANT_FIELD_NUMBER: _ClassVar[int] + tenant: str + def __init__(self, tenant: _Optional[str] = ...) -> None: ... class VlanServiceListResponse(_message.Message): __slots__ = ("vlans", "validation_errors") From f94dd96c3ccf3c8482c85353c48f30581fded283 Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Wed, 9 Sep 2026 16:26:18 +0200 Subject: [PATCH 08/21] finalize VM creation request --- doc/index.html | 212 ++++++++++-- go/fits/api/vm/v1/vm.pb.go | 507 ++++++++++++++++++++++------ js/fits/api/vm/v1/location_pb.ts | 2 + js/fits/api/vm/v1/vm_pb.ts | 220 +++++++++--- proto/fits/api/vm/v1/location.proto | 2 + proto/fits/api/vm/v1/vm.proto | 82 +++-- python/fits/api/vm/v1/vm_pb2.py | 54 +-- python/fits/api/vm/v1/vm_pb2.pyi | 59 +++- 8 files changed, 919 insertions(+), 219 deletions(-) diff --git a/doc/index.html b/doc/index.html index 166ebe6..97fbc88 100644 --- a/doc/index.html +++ b/doc/index.html @@ -842,13 +842,17 @@

    Table of Contents

    Method NameRequest TypeResponse TypeDescription
    @@ -4931,8 +4943,8 @@

    fits/api/vm/v1/vm.proto

    To

    -

    Disk

    -

    Disk

    +

    LinuxDisk

    +

    LinuxDisk

    Method NameRequest TypeResponse TypeDescription
    @@ -4957,13 +4969,6 @@

    Disk

    TODO discuss how this could be optional

    -
    - - - - - - @@ -5032,6 +5037,37 @@

    VMInstance

    +

    VMServiceCreateLinuxRequest

    +

    Linux-specific create request parts

    + + +
    drive_letterstringoptional

    DriveLetter where this disk should be assigned

    label string
    + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    ldap_uuidstring

    LDAP UUID

    diskLinuxDisk

    Linux Disk

    + + + + +

    VMServiceCreateRequest

    VMServiceCreateRequest TODO

    @@ -5067,7 +5103,7 @@

    VMServiceCreateRequest

    ram uint32

    RAM of the VM in GB

    RAM of the VM in GB (TODO 2^n validation)

    contact_uuid string

    Contact Uuid of who is the responsible contact of the VM instance

    Contact Uuid of who is the responsible contact of the VM instance +TODO hier ist noch Klärungsbedarf. Ansprechpartner hängt nicht mal an einem echten user im system +TODO sondern sind einfach nur Kontaktdaten, die an die Entity hingehängt wird. +TODO aktuell hängt dies in der nulink api +TODO labels als Option? +TODO what about dsgvo? +TODO daten im service now? +TODO eventuell im tenant-apiserver Kontakte erlauben? +TODO was macht FCN? wäre das für sie auch sinnvoll? +TODO is required

    disksDiskrepeated

    List of disks for this VM - -TODO differentiation -oneof vmtype { - // ensure at least one match is specified. - option (buf.validate.oneof).required = true; - VMServiceCreateWindowsRequest windows = 21; - VMServiceCreateLinuxRequest linux = 22; -} -Disks []DiskInputModel -TODO is inherited from the token making the create request -> stored in meta.createdBy -RequestedBy *string

    labelsfits.api.v1.Labels

    Replaces optional ContractNumber, TransactionNumber, TechnicalKey, AccountingKey

    order_numberstring

    Order number muss unbedingt mitgegeben werden +Hängt sogar z.b. am VM restart. +Wird für gewöhnlich vom User angegeben.

    backupbool

    Currently no different backup plans, just true or false

    availabilitystring

    V0, V1, V2, V3 -> highest=best

    serviceclassstring

    SZ1, SZ2, SZ3 -> highest=best

    windowsVMServiceCreateWindowsRequest

    Windows Disk and Domain

    linuxVMServiceCreateLinuxRequest

    Linux Disk and LDAP

    + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    domain_uuidstring

    Domain UUID

    diskWindowsDisk

    Windows Disk

    + + + + +

    VMServiceDeleteRequest

    VMServiceDeleteRequest TODO

    @@ -5285,6 +5394,53 @@

    VMServiceUpdateResponse

    +

    WindowsDisk

    +

    WindowsDisk

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    auto_extendbool

    AutoExtend if set to true the disk grows automatically

    size_in_gbuint64optional

    Size if the disk in GB + +TODO discuss how this could be optional

    driveletterstringoptional

    DriveLetter where this disk should be assigned

    labelstring

    Label of the disk

    + + + + + diff --git a/go/fits/api/vm/v1/vm.pb.go b/go/fits/api/vm/v1/vm.pb.go index 21b62ef..00066a2 100644 --- a/go/fits/api/vm/v1/vm.pb.go +++ b/go/fits/api/vm/v1/vm.pb.go @@ -197,6 +197,116 @@ func (x *VMServiceGetResponse) GetVm() *VMInstance { return nil } +// Windows-specific create request parts +type VMServiceCreateWindowsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Domain UUID + DomainUuid string `protobuf:"bytes,1,opt,name=domain_uuid,json=domainUuid,proto3" json:"domain_uuid,omitempty"` + // // Windows Disk + Disk *WindowsDisk `protobuf:"bytes,2,opt,name=disk,proto3" json:"disk,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceCreateWindowsRequest) Reset() { + *x = VMServiceCreateWindowsRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceCreateWindowsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceCreateWindowsRequest) ProtoMessage() {} + +func (x *VMServiceCreateWindowsRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceCreateWindowsRequest.ProtoReflect.Descriptor instead. +func (*VMServiceCreateWindowsRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{3} +} + +func (x *VMServiceCreateWindowsRequest) GetDomainUuid() string { + if x != nil { + return x.DomainUuid + } + return "" +} + +func (x *VMServiceCreateWindowsRequest) GetDisk() *WindowsDisk { + if x != nil { + return x.Disk + } + return nil +} + +// Linux-specific create request parts +type VMServiceCreateLinuxRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // LDAP UUID + LdapUuid string `protobuf:"bytes,1,opt,name=ldap_uuid,json=ldapUuid,proto3" json:"ldap_uuid,omitempty"` + // Linux Disk + Disk *LinuxDisk `protobuf:"bytes,2,opt,name=disk,proto3" json:"disk,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceCreateLinuxRequest) Reset() { + *x = VMServiceCreateLinuxRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceCreateLinuxRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceCreateLinuxRequest) ProtoMessage() {} + +func (x *VMServiceCreateLinuxRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceCreateLinuxRequest.ProtoReflect.Descriptor instead. +func (*VMServiceCreateLinuxRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{4} +} + +func (x *VMServiceCreateLinuxRequest) GetLdapUuid() string { + if x != nil { + return x.LdapUuid + } + return "" +} + +func (x *VMServiceCreateLinuxRequest) GetDisk() *LinuxDisk { + if x != nil { + return x.Disk + } + return nil +} + // VMServiceCreateRequest TODO type VMServiceCreateRequest struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -206,7 +316,7 @@ type VMServiceCreateRequest struct { Name *string `protobuf:"bytes,2,opt,name=name,proto3,oneof" json:"name,omitempty"` // Number of CPUs of this VM Cpu uint32 `protobuf:"varint,3,opt,name=cpu,proto3" json:"cpu,omitempty"` - // RAM of the VM in GB + // RAM of the VM in GB (TODO 2^n validation) Ram uint32 `protobuf:"varint,4,opt,name=ram,proto3" json:"ram,omitempty"` // OS Uuid of the OS to install in the VM instance OsUuid string `protobuf:"bytes,5,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` @@ -215,16 +325,42 @@ type VMServiceCreateRequest struct { // Location Uuid of the datacenter location to install in the VM instance LocationUuid string `protobuf:"bytes,7,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` // Contact Uuid of who is the responsible contact of the VM instance + // TODO hier ist noch Klärungsbedarf. Ansprechpartner hängt nicht mal an einem echten user im system + // TODO sondern sind einfach nur Kontaktdaten, die an die Entity hingehängt wird. + // TODO aktuell hängt dies in der nulink api + // TODO labels als Option? + // TODO what about dsgvo? + // TODO daten im service now? + // TODO eventuell im tenant-apiserver Kontakte erlauben? + // TODO was macht FCN? wäre das für sie auch sinnvoll? + // TODO is required ContactUuid string `protobuf:"bytes,8,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` - // List of disks for this VM - Disks []*Disk `protobuf:"bytes,9,rep,name=disks,proto3" json:"disks,omitempty"` + // Replaces optional ContractNumber, TransactionNumber, TechnicalKey, AccountingKey + Labels *v1.Labels `protobuf:"bytes,10,opt,name=labels,proto3" json:"labels,omitempty"` + // Order number muss unbedingt mitgegeben werden + // Hängt sogar z.b. am VM restart. + // Wird für gewöhnlich vom User angegeben. + OrderNumber string `protobuf:"bytes,11,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // Currently no different backup plans, just true or false + Backup bool `protobuf:"varint,12,opt,name=backup,proto3" json:"backup,omitempty"` + // V0, V1, V2, V3 -> highest=best + Availability string `protobuf:"bytes,13,opt,name=availability,proto3" json:"availability,omitempty"` + // SZ1, SZ2, SZ3 -> highest=best + Serviceclass string `protobuf:"bytes,14,opt,name=serviceclass,proto3" json:"serviceclass,omitempty"` + // TODO differentiation Linux/Windows + // + // Types that are valid to be assigned to Vmtype: + // + // *VMServiceCreateRequest_Windows + // *VMServiceCreateRequest_Linux + Vmtype isVMServiceCreateRequest_Vmtype `protobuf_oneof:"vmtype"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *VMServiceCreateRequest) Reset() { *x = VMServiceCreateRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -236,7 +372,7 @@ func (x *VMServiceCreateRequest) String() string { func (*VMServiceCreateRequest) ProtoMessage() {} func (x *VMServiceCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -249,7 +385,7 @@ func (x *VMServiceCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceCreateRequest.ProtoReflect.Descriptor instead. func (*VMServiceCreateRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{3} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{5} } func (x *VMServiceCreateRequest) GetProjectUuid() string { @@ -308,22 +444,91 @@ func (x *VMServiceCreateRequest) GetContactUuid() string { return "" } -func (x *VMServiceCreateRequest) GetDisks() []*Disk { +func (x *VMServiceCreateRequest) GetLabels() *v1.Labels { if x != nil { - return x.Disks + return x.Labels } return nil } -// Disk -type Disk struct { +func (x *VMServiceCreateRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +func (x *VMServiceCreateRequest) GetBackup() bool { + if x != nil { + return x.Backup + } + return false +} + +func (x *VMServiceCreateRequest) GetAvailability() string { + if x != nil { + return x.Availability + } + return "" +} + +func (x *VMServiceCreateRequest) GetServiceclass() string { + if x != nil { + return x.Serviceclass + } + return "" +} + +func (x *VMServiceCreateRequest) GetVmtype() isVMServiceCreateRequest_Vmtype { + if x != nil { + return x.Vmtype + } + return nil +} + +func (x *VMServiceCreateRequest) GetWindows() *VMServiceCreateWindowsRequest { + if x != nil { + if x, ok := x.Vmtype.(*VMServiceCreateRequest_Windows); ok { + return x.Windows + } + } + return nil +} + +func (x *VMServiceCreateRequest) GetLinux() *VMServiceCreateLinuxRequest { + if x != nil { + if x, ok := x.Vmtype.(*VMServiceCreateRequest_Linux); ok { + return x.Linux + } + } + return nil +} + +type isVMServiceCreateRequest_Vmtype interface { + isVMServiceCreateRequest_Vmtype() +} + +type VMServiceCreateRequest_Windows struct { + // Windows Disk and Domain + Windows *VMServiceCreateWindowsRequest `protobuf:"bytes,21,opt,name=windows,proto3,oneof"` +} + +type VMServiceCreateRequest_Linux struct { + // Linux Disk and LDAP + Linux *VMServiceCreateLinuxRequest `protobuf:"bytes,22,opt,name=linux,proto3,oneof"` +} + +func (*VMServiceCreateRequest_Windows) isVMServiceCreateRequest_Vmtype() {} + +func (*VMServiceCreateRequest_Linux) isVMServiceCreateRequest_Vmtype() {} + +// LinuxDisk +type LinuxDisk struct { state protoimpl.MessageState `protogen:"open.v1"` // AutoExtend if set to true the disk grows automatically AutoExtend bool `protobuf:"varint,1,opt,name=auto_extend,json=autoExtend,proto3" json:"auto_extend,omitempty"` // Size if the disk in GB SizeInGb *uint64 `protobuf:"varint,2,opt,name=size_in_gb,json=sizeInGb,proto3,oneof" json:"size_in_gb,omitempty"` // TODO discuss how this could be optional - // DriveLetter where this disk should be assigned - DriveLetter *string `protobuf:"bytes,3,opt,name=drive_letter,json=driveLetter,proto3,oneof" json:"drive_letter,omitempty"` // Label of the disk Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"` // MountPoint where this disk should be mounted @@ -332,21 +537,21 @@ type Disk struct { sizeCache protoimpl.SizeCache } -func (x *Disk) Reset() { - *x = Disk{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[4] +func (x *LinuxDisk) Reset() { + *x = LinuxDisk{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Disk) String() string { +func (x *LinuxDisk) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Disk) ProtoMessage() {} +func (*LinuxDisk) ProtoMessage() {} -func (x *Disk) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[4] +func (x *LinuxDisk) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -357,42 +562,108 @@ func (x *Disk) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Disk.ProtoReflect.Descriptor instead. -func (*Disk) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{4} +// Deprecated: Use LinuxDisk.ProtoReflect.Descriptor instead. +func (*LinuxDisk) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{6} } -func (x *Disk) GetAutoExtend() bool { +func (x *LinuxDisk) GetAutoExtend() bool { if x != nil { return x.AutoExtend } return false } -func (x *Disk) GetSizeInGb() uint64 { +func (x *LinuxDisk) GetSizeInGb() uint64 { if x != nil && x.SizeInGb != nil { return *x.SizeInGb } return 0 } -func (x *Disk) GetDriveLetter() string { - if x != nil && x.DriveLetter != nil { - return *x.DriveLetter +func (x *LinuxDisk) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +func (x *LinuxDisk) GetMountPoint() string { + if x != nil && x.MountPoint != nil { + return *x.MountPoint } return "" } -func (x *Disk) GetLabel() string { +// WindowsDisk +type WindowsDisk struct { + state protoimpl.MessageState `protogen:"open.v1"` + // AutoExtend if set to true the disk grows automatically + AutoExtend bool `protobuf:"varint,1,opt,name=auto_extend,json=autoExtend,proto3" json:"auto_extend,omitempty"` + // Size if the disk in GB + SizeInGb *uint64 `protobuf:"varint,2,opt,name=size_in_gb,json=sizeInGb,proto3,oneof" json:"size_in_gb,omitempty"` // TODO discuss how this could be optional + // DriveLetter where this disk should be assigned + Driveletter *string `protobuf:"bytes,3,opt,name=driveletter,proto3,oneof" json:"driveletter,omitempty"` + // Label of the disk + Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WindowsDisk) Reset() { + *x = WindowsDisk{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WindowsDisk) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WindowsDisk) ProtoMessage() {} + +func (x *WindowsDisk) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] if x != nil { - return x.Label + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WindowsDisk.ProtoReflect.Descriptor instead. +func (*WindowsDisk) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{7} +} + +func (x *WindowsDisk) GetAutoExtend() bool { + if x != nil { + return x.AutoExtend + } + return false +} + +func (x *WindowsDisk) GetSizeInGb() uint64 { + if x != nil && x.SizeInGb != nil { + return *x.SizeInGb + } + return 0 +} + +func (x *WindowsDisk) GetDriveletter() string { + if x != nil && x.Driveletter != nil { + return *x.Driveletter } return "" } -func (x *Disk) GetMountPoint() string { - if x != nil && x.MountPoint != nil { - return *x.MountPoint +func (x *WindowsDisk) GetLabel() string { + if x != nil { + return x.Label } return "" } @@ -406,7 +677,7 @@ type VMServiceCreateResponse struct { func (x *VMServiceCreateResponse) Reset() { *x = VMServiceCreateResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -418,7 +689,7 @@ func (x *VMServiceCreateResponse) String() string { func (*VMServiceCreateResponse) ProtoMessage() {} func (x *VMServiceCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -431,7 +702,7 @@ func (x *VMServiceCreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceCreateResponse.ProtoReflect.Descriptor instead. func (*VMServiceCreateResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{5} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{8} } // VMServiceUpdateRequest TODO @@ -447,7 +718,7 @@ type VMServiceUpdateRequest struct { func (x *VMServiceUpdateRequest) Reset() { *x = VMServiceUpdateRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -459,7 +730,7 @@ func (x *VMServiceUpdateRequest) String() string { func (*VMServiceUpdateRequest) ProtoMessage() {} func (x *VMServiceUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -472,7 +743,7 @@ func (x *VMServiceUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceUpdateRequest.ProtoReflect.Descriptor instead. func (*VMServiceUpdateRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{6} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{9} } func (x *VMServiceUpdateRequest) GetProject() string { @@ -498,7 +769,7 @@ type VMServiceUpdateResponse struct { func (x *VMServiceUpdateResponse) Reset() { *x = VMServiceUpdateResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -510,7 +781,7 @@ func (x *VMServiceUpdateResponse) String() string { func (*VMServiceUpdateResponse) ProtoMessage() {} func (x *VMServiceUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -523,7 +794,7 @@ func (x *VMServiceUpdateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceUpdateResponse.ProtoReflect.Descriptor instead. func (*VMServiceUpdateResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{7} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{10} } // VMServiceListRequest TODO @@ -537,7 +808,7 @@ type VMServiceListRequest struct { func (x *VMServiceListRequest) Reset() { *x = VMServiceListRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -549,7 +820,7 @@ func (x *VMServiceListRequest) String() string { func (*VMServiceListRequest) ProtoMessage() {} func (x *VMServiceListRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -562,7 +833,7 @@ func (x *VMServiceListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceListRequest.ProtoReflect.Descriptor instead. func (*VMServiceListRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{8} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{11} } func (x *VMServiceListRequest) GetProject() string { @@ -581,7 +852,7 @@ type VMServiceListResponse struct { func (x *VMServiceListResponse) Reset() { *x = VMServiceListResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -593,7 +864,7 @@ func (x *VMServiceListResponse) String() string { func (*VMServiceListResponse) ProtoMessage() {} func (x *VMServiceListResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -606,7 +877,7 @@ func (x *VMServiceListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceListResponse.ProtoReflect.Descriptor instead. func (*VMServiceListResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{9} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{12} } // VMServiceDeleteRequest TODO @@ -620,7 +891,7 @@ type VMServiceDeleteRequest struct { func (x *VMServiceDeleteRequest) Reset() { *x = VMServiceDeleteRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -632,7 +903,7 @@ func (x *VMServiceDeleteRequest) String() string { func (*VMServiceDeleteRequest) ProtoMessage() {} func (x *VMServiceDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -645,7 +916,7 @@ func (x *VMServiceDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceDeleteRequest.ProtoReflect.Descriptor instead. func (*VMServiceDeleteRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{10} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{13} } func (x *VMServiceDeleteRequest) GetProject() string { @@ -664,7 +935,7 @@ type VMServiceDeleteResponse struct { func (x *VMServiceDeleteResponse) Reset() { *x = VMServiceDeleteResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -676,7 +947,7 @@ func (x *VMServiceDeleteResponse) String() string { func (*VMServiceDeleteResponse) ProtoMessage() {} func (x *VMServiceDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -689,7 +960,7 @@ func (x *VMServiceDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceDeleteResponse.ProtoReflect.Descriptor instead. func (*VMServiceDeleteResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{11} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{14} } var File_fits_api_vm_v1_vm_proto protoreflect.FileDescriptor @@ -707,30 +978,52 @@ const file_fits_api_vm_v1_vm_proto_rawDesc = "" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"B\n" + "\x14VMServiceGetResponse\x12*\n" + - "\x02vm\x18\x01 \x01(\v2\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"\xea\x02\n" + + "\x02vm\x18\x01 \x01(\v2\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"{\n" + + "\x1dVMServiceCreateWindowsRequest\x12)\n" + + "\vdomain_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\n" + + "domainUuid\x12/\n" + + "\x04disk\x18\x02 \x01(\v2\x1b.fits.api.vm.v1.WindowsDiskR\x04disk\"s\n" + + "\x1bVMServiceCreateLinuxRequest\x12%\n" + + "\tldap_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bldapUuid\x12-\n" + + "\x04disk\x18\x02 \x01(\v2\x19.fits.api.vm.v1.LinuxDiskR\x04disk\"\x8f\x05\n" + "\x16VMServiceCreateRequest\x12+\n" + "\fproject_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vprojectUuid\x12$\n" + - "\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x10\n" + + "\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12\x10\n" + "\x03cpu\x18\x03 \x01(\rR\x03cpu\x12\x10\n" + "\x03ram\x18\x04 \x01(\rR\x03ram\x12!\n" + "\aos_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n" + "\tvlan_uuid\x18\x06 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bvlanUuid\x12-\n" + "\rlocation_uuid\x18\a \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\flocationUuid\x12+\n" + - "\fcontact_uuid\x18\b \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\x12*\n" + - "\x05disks\x18\t \x03(\v2\x14.fits.api.vm.v1.DiskR\x05disksB\a\n" + - "\x05_name\"\xde\x01\n" + - "\x04Disk\x12\x1f\n" + + "\fcontact_uuid\x18\b \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\x12+\n" + + "\x06labels\x18\n" + + " \x01(\v2\x13.fits.api.v1.LabelsR\x06labels\x12!\n" + + "\forder_number\x18\v \x01(\tR\vorderNumber\x12\x16\n" + + "\x06backup\x18\f \x01(\bR\x06backup\x12\"\n" + + "\favailability\x18\r \x01(\tR\favailability\x12\"\n" + + "\fserviceclass\x18\x0e \x01(\tR\fserviceclass\x12I\n" + + "\awindows\x18\x15 \x01(\v2-.fits.api.vm.v1.VMServiceCreateWindowsRequestH\x00R\awindows\x12C\n" + + "\x05linux\x18\x16 \x01(\v2+.fits.api.vm.v1.VMServiceCreateLinuxRequestH\x00R\x05linuxB\x0f\n" + + "\x06vmtype\x12\x05\xbaH\x02\b\x01B\a\n" + + "\x05_name\"\xaa\x01\n" + + "\tLinuxDisk\x12\x1f\n" + "\vauto_extend\x18\x01 \x01(\bR\n" + "autoExtend\x12!\n" + "\n" + - "size_in_gb\x18\x02 \x01(\x04H\x00R\bsizeInGb\x88\x01\x01\x12&\n" + - "\fdrive_letter\x18\x03 \x01(\tH\x01R\vdriveLetter\x88\x01\x01\x12\x14\n" + + "size_in_gb\x18\x02 \x01(\x04H\x00R\bsizeInGb\x88\x01\x01\x12\x14\n" + "\x05label\x18\x04 \x01(\tR\x05label\x12$\n" + - "\vmount_point\x18\x05 \x01(\tH\x02R\n" + + "\vmount_point\x18\x05 \x01(\tH\x01R\n" + "mountPoint\x88\x01\x01B\r\n" + - "\v_size_in_gbB\x0f\n" + - "\r_drive_letterB\x0e\n" + - "\f_mount_point\"\x19\n" + + "\v_size_in_gbB\x0e\n" + + "\f_mount_point\"\xad\x01\n" + + "\vWindowsDisk\x12\x1f\n" + + "\vauto_extend\x18\x01 \x01(\bR\n" + + "autoExtend\x12!\n" + + "\n" + + "size_in_gb\x18\x02 \x01(\x04H\x00R\bsizeInGb\x88\x01\x01\x12%\n" + + "\vdriveletter\x18\x03 \x01(\tH\x01R\vdriveletter\x88\x01\x01\x12\x14\n" + + "\x05label\x18\x04 \x01(\tR\x05labelB\r\n" + + "\v_size_in_gbB\x0e\n" + + "\f_driveletter\"\x19\n" + "\x17VMServiceCreateResponse\"~\n" + "\x16VMServiceUpdateRequest\x12\"\n" + "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12@\n" + @@ -766,43 +1059,51 @@ func file_fits_api_vm_v1_vm_proto_rawDescGZIP() []byte { return file_fits_api_vm_v1_vm_proto_rawDescData } -var file_fits_api_vm_v1_vm_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_fits_api_vm_v1_vm_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_fits_api_vm_v1_vm_proto_goTypes = []any{ - (*VMInstance)(nil), // 0: fits.api.vm.v1.VMInstance - (*VMServiceGetRequest)(nil), // 1: fits.api.vm.v1.VMServiceGetRequest - (*VMServiceGetResponse)(nil), // 2: fits.api.vm.v1.VMServiceGetResponse - (*VMServiceCreateRequest)(nil), // 3: fits.api.vm.v1.VMServiceCreateRequest - (*Disk)(nil), // 4: fits.api.vm.v1.Disk - (*VMServiceCreateResponse)(nil), // 5: fits.api.vm.v1.VMServiceCreateResponse - (*VMServiceUpdateRequest)(nil), // 6: fits.api.vm.v1.VMServiceUpdateRequest - (*VMServiceUpdateResponse)(nil), // 7: fits.api.vm.v1.VMServiceUpdateResponse - (*VMServiceListRequest)(nil), // 8: fits.api.vm.v1.VMServiceListRequest - (*VMServiceListResponse)(nil), // 9: fits.api.vm.v1.VMServiceListResponse - (*VMServiceDeleteRequest)(nil), // 10: fits.api.vm.v1.VMServiceDeleteRequest - (*VMServiceDeleteResponse)(nil), // 11: fits.api.vm.v1.VMServiceDeleteResponse - (*v1.Meta)(nil), // 12: fits.api.v1.Meta - (*v1.UpdateMeta)(nil), // 13: fits.api.v1.UpdateMeta + (*VMInstance)(nil), // 0: fits.api.vm.v1.VMInstance + (*VMServiceGetRequest)(nil), // 1: fits.api.vm.v1.VMServiceGetRequest + (*VMServiceGetResponse)(nil), // 2: fits.api.vm.v1.VMServiceGetResponse + (*VMServiceCreateWindowsRequest)(nil), // 3: fits.api.vm.v1.VMServiceCreateWindowsRequest + (*VMServiceCreateLinuxRequest)(nil), // 4: fits.api.vm.v1.VMServiceCreateLinuxRequest + (*VMServiceCreateRequest)(nil), // 5: fits.api.vm.v1.VMServiceCreateRequest + (*LinuxDisk)(nil), // 6: fits.api.vm.v1.LinuxDisk + (*WindowsDisk)(nil), // 7: fits.api.vm.v1.WindowsDisk + (*VMServiceCreateResponse)(nil), // 8: fits.api.vm.v1.VMServiceCreateResponse + (*VMServiceUpdateRequest)(nil), // 9: fits.api.vm.v1.VMServiceUpdateRequest + (*VMServiceUpdateResponse)(nil), // 10: fits.api.vm.v1.VMServiceUpdateResponse + (*VMServiceListRequest)(nil), // 11: fits.api.vm.v1.VMServiceListRequest + (*VMServiceListResponse)(nil), // 12: fits.api.vm.v1.VMServiceListResponse + (*VMServiceDeleteRequest)(nil), // 13: fits.api.vm.v1.VMServiceDeleteRequest + (*VMServiceDeleteResponse)(nil), // 14: fits.api.vm.v1.VMServiceDeleteResponse + (*v1.Meta)(nil), // 15: fits.api.v1.Meta + (*v1.Labels)(nil), // 16: fits.api.v1.Labels + (*v1.UpdateMeta)(nil), // 17: fits.api.v1.UpdateMeta } var file_fits_api_vm_v1_vm_proto_depIdxs = []int32{ - 12, // 0: fits.api.vm.v1.VMInstance.meta:type_name -> fits.api.v1.Meta + 15, // 0: fits.api.vm.v1.VMInstance.meta:type_name -> fits.api.v1.Meta 0, // 1: fits.api.vm.v1.VMServiceGetResponse.vm:type_name -> fits.api.vm.v1.VMInstance - 4, // 2: fits.api.vm.v1.VMServiceCreateRequest.disks:type_name -> fits.api.vm.v1.Disk - 13, // 3: fits.api.vm.v1.VMServiceUpdateRequest.update_meta:type_name -> fits.api.v1.UpdateMeta - 1, // 4: fits.api.vm.v1.VMService.Get:input_type -> fits.api.vm.v1.VMServiceGetRequest - 3, // 5: fits.api.vm.v1.VMService.Create:input_type -> fits.api.vm.v1.VMServiceCreateRequest - 6, // 6: fits.api.vm.v1.VMService.Update:input_type -> fits.api.vm.v1.VMServiceUpdateRequest - 8, // 7: fits.api.vm.v1.VMService.List:input_type -> fits.api.vm.v1.VMServiceListRequest - 10, // 8: fits.api.vm.v1.VMService.Delete:input_type -> fits.api.vm.v1.VMServiceDeleteRequest - 2, // 9: fits.api.vm.v1.VMService.Get:output_type -> fits.api.vm.v1.VMServiceGetResponse - 5, // 10: fits.api.vm.v1.VMService.Create:output_type -> fits.api.vm.v1.VMServiceCreateResponse - 7, // 11: fits.api.vm.v1.VMService.Update:output_type -> fits.api.vm.v1.VMServiceUpdateResponse - 9, // 12: fits.api.vm.v1.VMService.List:output_type -> fits.api.vm.v1.VMServiceListResponse - 11, // 13: fits.api.vm.v1.VMService.Delete:output_type -> fits.api.vm.v1.VMServiceDeleteResponse - 9, // [9:14] is the sub-list for method output_type - 4, // [4:9] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name + 7, // 2: fits.api.vm.v1.VMServiceCreateWindowsRequest.disk:type_name -> fits.api.vm.v1.WindowsDisk + 6, // 3: fits.api.vm.v1.VMServiceCreateLinuxRequest.disk:type_name -> fits.api.vm.v1.LinuxDisk + 16, // 4: fits.api.vm.v1.VMServiceCreateRequest.labels:type_name -> fits.api.v1.Labels + 3, // 5: fits.api.vm.v1.VMServiceCreateRequest.windows:type_name -> fits.api.vm.v1.VMServiceCreateWindowsRequest + 4, // 6: fits.api.vm.v1.VMServiceCreateRequest.linux:type_name -> fits.api.vm.v1.VMServiceCreateLinuxRequest + 17, // 7: fits.api.vm.v1.VMServiceUpdateRequest.update_meta:type_name -> fits.api.v1.UpdateMeta + 1, // 8: fits.api.vm.v1.VMService.Get:input_type -> fits.api.vm.v1.VMServiceGetRequest + 5, // 9: fits.api.vm.v1.VMService.Create:input_type -> fits.api.vm.v1.VMServiceCreateRequest + 9, // 10: fits.api.vm.v1.VMService.Update:input_type -> fits.api.vm.v1.VMServiceUpdateRequest + 11, // 11: fits.api.vm.v1.VMService.List:input_type -> fits.api.vm.v1.VMServiceListRequest + 13, // 12: fits.api.vm.v1.VMService.Delete:input_type -> fits.api.vm.v1.VMServiceDeleteRequest + 2, // 13: fits.api.vm.v1.VMService.Get:output_type -> fits.api.vm.v1.VMServiceGetResponse + 8, // 14: fits.api.vm.v1.VMService.Create:output_type -> fits.api.vm.v1.VMServiceCreateResponse + 10, // 15: fits.api.vm.v1.VMService.Update:output_type -> fits.api.vm.v1.VMServiceUpdateResponse + 12, // 16: fits.api.vm.v1.VMService.List:output_type -> fits.api.vm.v1.VMServiceListResponse + 14, // 17: fits.api.vm.v1.VMService.Delete:output_type -> fits.api.vm.v1.VMServiceDeleteResponse + 13, // [13:18] is the sub-list for method output_type + 8, // [8:13] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name } func init() { file_fits_api_vm_v1_vm_proto_init() } @@ -810,15 +1111,19 @@ func file_fits_api_vm_v1_vm_proto_init() { if File_fits_api_vm_v1_vm_proto != nil { return } - file_fits_api_vm_v1_vm_proto_msgTypes[3].OneofWrappers = []any{} - file_fits_api_vm_v1_vm_proto_msgTypes[4].OneofWrappers = []any{} + file_fits_api_vm_v1_vm_proto_msgTypes[5].OneofWrappers = []any{ + (*VMServiceCreateRequest_Windows)(nil), + (*VMServiceCreateRequest_Linux)(nil), + } + file_fits_api_vm_v1_vm_proto_msgTypes[6].OneofWrappers = []any{} + file_fits_api_vm_v1_vm_proto_msgTypes[7].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_vm_proto_rawDesc), len(file_fits_api_vm_v1_vm_proto_rawDesc)), NumEnums: 0, - NumMessages: 12, + NumMessages: 15, NumExtensions: 0, NumServices: 1, }, diff --git a/js/fits/api/vm/v1/location_pb.ts b/js/fits/api/vm/v1/location_pb.ts index 58411c3..d134831 100644 --- a/js/fits/api/vm/v1/location_pb.ts +++ b/js/fits/api/vm/v1/location_pb.ts @@ -91,6 +91,8 @@ export const LocationServiceListResponseSchema: GenMessage = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 2); +/** + * Windows-specific create request parts + * + * @generated from message fits.api.vm.v1.VMServiceCreateWindowsRequest + */ +export type VMServiceCreateWindowsRequest = Message<"fits.api.vm.v1.VMServiceCreateWindowsRequest"> & { + /** + * Domain UUID + * + * @generated from field: string domain_uuid = 1; + */ + domainUuid: string; + + /** + * // Windows Disk + * + * @generated from field: fits.api.vm.v1.WindowsDisk disk = 2; + */ + disk?: WindowsDisk | undefined; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceCreateWindowsRequest. + * Use `create(VMServiceCreateWindowsRequestSchema)` to create a new message. + */ +export const VMServiceCreateWindowsRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 3); + +/** + * Linux-specific create request parts + * + * @generated from message fits.api.vm.v1.VMServiceCreateLinuxRequest + */ +export type VMServiceCreateLinuxRequest = Message<"fits.api.vm.v1.VMServiceCreateLinuxRequest"> & { + /** + * LDAP UUID + * + * @generated from field: string ldap_uuid = 1; + */ + ldapUuid: string; + + /** + * Linux Disk + * + * @generated from field: fits.api.vm.v1.LinuxDisk disk = 2; + */ + disk?: LinuxDisk | undefined; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceCreateLinuxRequest. + * Use `create(VMServiceCreateLinuxRequestSchema)` to create a new message. + */ +export const VMServiceCreateLinuxRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 4); + /** * VMServiceCreateRequest TODO * @@ -135,7 +191,7 @@ export type VMServiceCreateRequest = Message<"fits.api.vm.v1.VMServiceCreateRequ cpu: number; /** - * RAM of the VM in GB + * RAM of the VM in GB (TODO 2^n validation) * * @generated from field: uint32 ram = 4; */ @@ -164,28 +220,79 @@ export type VMServiceCreateRequest = Message<"fits.api.vm.v1.VMServiceCreateRequ /** * Contact Uuid of who is the responsible contact of the VM instance + * TODO hier ist noch Klärungsbedarf. Ansprechpartner hängt nicht mal an einem echten user im system + * TODO sondern sind einfach nur Kontaktdaten, die an die Entity hingehängt wird. + * TODO aktuell hängt dies in der nulink api + * TODO labels als Option? + * TODO what about dsgvo? + * TODO daten im service now? + * TODO eventuell im tenant-apiserver Kontakte erlauben? + * TODO was macht FCN? wäre das für sie auch sinnvoll? + * TODO is required * * @generated from field: string contact_uuid = 8; */ contactUuid: string; /** - * List of disks for this VM + * Replaces optional ContractNumber, TransactionNumber, TechnicalKey, AccountingKey + * + * @generated from field: fits.api.v1.Labels labels = 10; + */ + labels?: Labels | undefined; + + /** + * Order number muss unbedingt mitgegeben werden + * Hängt sogar z.b. am VM restart. + * Wird für gewöhnlich vom User angegeben. * - * TODO differentiation - * oneof vmtype { - * // ensure at least one match is specified. - * option (buf.validate.oneof).required = true; - * VMServiceCreateWindowsRequest windows = 21; - * VMServiceCreateLinuxRequest linux = 22; - * } - * Disks []DiskInputModel - * TODO is inherited from the token making the create request -> stored in meta.createdBy - * RequestedBy *string + * @generated from field: string order_number = 11; + */ + orderNumber: string; + + /** + * Currently no different backup plans, just true or false * - * @generated from field: repeated fits.api.vm.v1.Disk disks = 9; + * @generated from field: bool backup = 12; */ - disks: Disk[]; + backup: boolean; + + /** + * V0, V1, V2, V3 -> highest=best + * + * @generated from field: string availability = 13; + */ + availability: string; + + /** + * SZ1, SZ2, SZ3 -> highest=best + * + * @generated from field: string serviceclass = 14; + */ + serviceclass: string; + + /** + * TODO differentiation Linux/Windows + * + * @generated from oneof fits.api.vm.v1.VMServiceCreateRequest.vmtype + */ + vmtype: { + /** + * Windows Disk and Domain + * + * @generated from field: fits.api.vm.v1.VMServiceCreateWindowsRequest windows = 21; + */ + value: VMServiceCreateWindowsRequest; + case: "windows"; + } | { + /** + * Linux Disk and LDAP + * + * @generated from field: fits.api.vm.v1.VMServiceCreateLinuxRequest linux = 22; + */ + value: VMServiceCreateLinuxRequest; + case: "linux"; + } | { case: undefined; value?: undefined }; }; /** @@ -193,14 +300,14 @@ export type VMServiceCreateRequest = Message<"fits.api.vm.v1.VMServiceCreateRequ * Use `create(VMServiceCreateRequestSchema)` to create a new message. */ export const VMServiceCreateRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 3); + messageDesc(file_fits_api_vm_v1_vm, 5); /** - * Disk + * LinuxDisk * - * @generated from message fits.api.vm.v1.Disk + * @generated from message fits.api.vm.v1.LinuxDisk */ -export type Disk = Message<"fits.api.vm.v1.Disk"> & { +export type LinuxDisk = Message<"fits.api.vm.v1.LinuxDisk"> & { /** * AutoExtend if set to true the disk grows automatically * @@ -217,13 +324,6 @@ export type Disk = Message<"fits.api.vm.v1.Disk"> & { */ sizeInGb?: bigint | undefined; - /** - * DriveLetter where this disk should be assigned - * - * @generated from field: optional string drive_letter = 3; - */ - driveLetter?: string | undefined; - /** * Label of the disk * @@ -242,11 +342,55 @@ export type Disk = Message<"fits.api.vm.v1.Disk"> & { }; /** - * Describes the message fits.api.vm.v1.Disk. - * Use `create(DiskSchema)` to create a new message. + * Describes the message fits.api.vm.v1.LinuxDisk. + * Use `create(LinuxDiskSchema)` to create a new message. */ -export const DiskSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 4); +export const LinuxDiskSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 6); + +/** + * WindowsDisk + * + * @generated from message fits.api.vm.v1.WindowsDisk + */ +export type WindowsDisk = Message<"fits.api.vm.v1.WindowsDisk"> & { + /** + * AutoExtend if set to true the disk grows automatically + * + * @generated from field: bool auto_extend = 1; + */ + autoExtend: boolean; + + /** + * Size if the disk in GB + * + * TODO discuss how this could be optional + * + * @generated from field: optional uint64 size_in_gb = 2; + */ + sizeInGb?: bigint | undefined; + + /** + * DriveLetter where this disk should be assigned + * + * @generated from field: optional string driveletter = 3; + */ + driveletter?: string | undefined; + + /** + * Label of the disk + * + * @generated from field: string label = 4; + */ + label: string; +}; + +/** + * Describes the message fits.api.vm.v1.WindowsDisk. + * Use `create(WindowsDiskSchema)` to create a new message. + */ +export const WindowsDiskSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 7); /** * VMServiceCreateResponse TODO @@ -261,7 +405,7 @@ export type VMServiceCreateResponse = Message<"fits.api.vm.v1.VMServiceCreateRes * Use `create(VMServiceCreateResponseSchema)` to create a new message. */ export const VMServiceCreateResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 5); + messageDesc(file_fits_api_vm_v1_vm, 8); /** * VMServiceUpdateRequest TODO @@ -289,7 +433,7 @@ export type VMServiceUpdateRequest = Message<"fits.api.vm.v1.VMServiceUpdateRequ * Use `create(VMServiceUpdateRequestSchema)` to create a new message. */ export const VMServiceUpdateRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 6); + messageDesc(file_fits_api_vm_v1_vm, 9); /** * VMServiceUpdateResponse TODO @@ -304,7 +448,7 @@ export type VMServiceUpdateResponse = Message<"fits.api.vm.v1.VMServiceUpdateRes * Use `create(VMServiceUpdateResponseSchema)` to create a new message. */ export const VMServiceUpdateResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 7); + messageDesc(file_fits_api_vm_v1_vm, 10); /** * VMServiceListRequest TODO @@ -325,7 +469,7 @@ export type VMServiceListRequest = Message<"fits.api.vm.v1.VMServiceListRequest" * Use `create(VMServiceListRequestSchema)` to create a new message. */ export const VMServiceListRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 8); + messageDesc(file_fits_api_vm_v1_vm, 11); /** * VMServiceListResponse TODO @@ -340,7 +484,7 @@ export type VMServiceListResponse = Message<"fits.api.vm.v1.VMServiceListRespons * Use `create(VMServiceListResponseSchema)` to create a new message. */ export const VMServiceListResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 9); + messageDesc(file_fits_api_vm_v1_vm, 12); /** * VMServiceDeleteRequest TODO @@ -361,7 +505,7 @@ export type VMServiceDeleteRequest = Message<"fits.api.vm.v1.VMServiceDeleteRequ * Use `create(VMServiceDeleteRequestSchema)` to create a new message. */ export const VMServiceDeleteRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 10); + messageDesc(file_fits_api_vm_v1_vm, 13); /** * VMServiceDeleteResponse TODO @@ -376,7 +520,7 @@ export type VMServiceDeleteResponse = Message<"fits.api.vm.v1.VMServiceDeleteRes * Use `create(VMServiceDeleteResponseSchema)` to create a new message. */ export const VMServiceDeleteResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 11); + messageDesc(file_fits_api_vm_v1_vm, 14); /** * VMService provides VM CRUD perations. diff --git a/proto/fits/api/vm/v1/location.proto b/proto/fits/api/vm/v1/location.proto index c637531..b3abc0b 100644 --- a/proto/fits/api/vm/v1/location.proto +++ b/proto/fits/api/vm/v1/location.proto @@ -8,6 +8,8 @@ import "fits/api/v1/predefined_rules.proto"; // LocationService lists datacenter locations available for VM instances. // TODO wurde besprochen am 09.09.26 +// TODO muss zu "Pod" werden. User erstellen eine VM nicht pro location, sondern pro Pod +// TODO Ein Pod ist fest an einer location verankert. service LocationService { // Returns a list of all datacenter locations. rpc List(LocationServiceListRequest) returns (LocationServiceListResponse) { diff --git a/proto/fits/api/vm/v1/vm.proto b/proto/fits/api/vm/v1/vm.proto index 2e17503..2ad75c1 100644 --- a/proto/fits/api/vm/v1/vm.proto +++ b/proto/fits/api/vm/v1/vm.proto @@ -69,12 +69,21 @@ message VMServiceGetResponse { // The VM VMInstance vm = 1; } -// TODO sample for windows/linux differentiation -// message VMServiceCreateWindowsRequest { -// Windows Disk -// } -// message VMServiceCreateLinuxRequest { -// } +// Windows-specific create request parts +message VMServiceCreateWindowsRequest { + // Domain UUID + string domain_uuid = 1 [(buf.validate.field).string.uuid = true]; + // // Windows Disk + WindowsDisk disk = 2; +} + +// Linux-specific create request parts +message VMServiceCreateLinuxRequest { + // LDAP UUID + string ldap_uuid = 1 [(buf.validate.field).string.uuid = true]; + // Linux Disk + LinuxDisk disk = 2; +} // VMServiceCreateRequest TODO message VMServiceCreateRequest { @@ -84,7 +93,7 @@ message VMServiceCreateRequest { optional string name = 2 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; // Number of CPUs of this VM uint32 cpu = 3; - // RAM of the VM in GB + // RAM of the VM in GB (TODO 2^n validation) uint32 ram = 4; // OS Uuid of the OS to install in the VM instance string os_uuid = 5 [(buf.validate.field).string.uuid = true]; @@ -93,20 +102,43 @@ message VMServiceCreateRequest { // Location Uuid of the datacenter location to install in the VM instance string location_uuid = 7 [(buf.validate.field).string.uuid = true]; // Contact Uuid of who is the responsible contact of the VM instance + // TODO hier ist noch Klärungsbedarf. Ansprechpartner hängt nicht mal an einem echten user im system + // TODO sondern sind einfach nur Kontaktdaten, die an die Entity hingehängt wird. + // TODO aktuell hängt dies in der nulink api + // TODO labels als Option? + // TODO what about dsgvo? + // TODO daten im service now? + // TODO eventuell im tenant-apiserver Kontakte erlauben? + // TODO was macht FCN? wäre das für sie auch sinnvoll? + // TODO is required string contact_uuid = 8 [(buf.validate.field).string.uuid = true]; - // List of disks for this VM - repeated Disk disks = 9; - // TODO differentiation - // oneof vmtype { - // // ensure at least one match is specified. - // option (buf.validate.oneof).required = true; - // VMServiceCreateWindowsRequest windows = 21; - // VMServiceCreateLinuxRequest linux = 22; - // } + // Replaces optional ContractNumber, TransactionNumber, TechnicalKey, AccountingKey + fits.api.v1.Labels labels = 10; + // Order number muss unbedingt mitgegeben werden + // Hängt sogar z.b. am VM restart. + // Wird für gewöhnlich vom User angegeben. + string order_number = 11; + // Currently no different backup plans, just true or false + bool backup = 12; + // V0, V1, V2, V3 -> highest=best + string availability = 13; + // SZ1, SZ2, SZ3 -> highest=best + string serviceclass = 14; + // TODO differentiation Linux/Windows + oneof vmtype { + // ensure at least one match is specified. + option (buf.validate.oneof).required = true; + // Windows Disk and Domain + VMServiceCreateWindowsRequest windows = 21; + // Linux Disk and LDAP + VMServiceCreateLinuxRequest linux = 22; + } // Disks []DiskInputModel // TODO is inherited from the token making the create request -> stored in meta.createdBy + // TODO Tobias bietet an, das Token selbst zu lesen und das RequestedBy selbst zu holen über x-original token (siehe Botonds PR) // RequestedBy *string + // Still open // AccountingKey *string // Availability VMInstanceLinuxCreateInputModelAvailability // Backup bool @@ -124,20 +156,30 @@ message VMServiceCreateRequest { // TransactionNumber *string } -// Disk -message Disk { +// LinuxDisk +message LinuxDisk { // AutoExtend if set to true the disk grows automatically bool auto_extend = 1; // Size if the disk in GB optional uint64 size_in_gb = 2; // TODO discuss how this could be optional - // DriveLetter where this disk should be assigned - optional string drive_letter = 3; // Label of the disk string label = 4; // MountPoint where this disk should be mounted optional string mount_point = 5; // TODO this requires a Filesystem on the disk ? } +// WindowsDisk +message WindowsDisk { + // AutoExtend if set to true the disk grows automatically + bool auto_extend = 1; + // Size if the disk in GB + optional uint64 size_in_gb = 2; // TODO discuss how this could be optional + // DriveLetter where this disk should be assigned + optional string driveletter = 3; + // Label of the disk + string label = 4; +} + // VMServiceCreateResponse TODO message VMServiceCreateResponse {} diff --git a/python/fits/api/vm/v1/vm_pb2.py b/python/fits/api/vm/v1/vm_pb2.py index 993efe3..4fc2f47 100644 --- a/python/fits/api/vm/v1/vm_pb2.py +++ b/python/fits/api/vm/v1/vm_pb2.py @@ -27,7 +27,7 @@ from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/vm.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x96\x01\n\nVMInstance\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\"\n\x07project\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"W\n\x13VMServiceGetRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"B\n\x14VMServiceGetResponse\x12*\n\x02vm\x18\x01 \x01(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"\xea\x02\n\x16VMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x10\n\x03\x63pu\x18\x03 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x04 \x01(\rR\x03ram\x12!\n\x07os_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12*\n\x05\x64isks\x18\t \x03(\x0b\x32\x14.fits.api.vm.v1.DiskR\x05\x64isksB\x07\n\x05_name\"\xde\x01\n\x04\x44isk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12&\n\x0c\x64rive_letter\x18\x03 \x01(\tH\x01R\x0b\x64riveLetter\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05label\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x02R\nmountPoint\x88\x01\x01\x42\r\n\x0b_size_in_gbB\x0f\n\r_drive_letterB\x0e\n\x0c_mount_point\"\x19\n\x17VMServiceCreateResponse\"~\n\x16VMServiceUpdateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\"\x19\n\x17VMServiceUpdateResponse\":\n\x14VMServiceListRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x17\n\x15VMServiceListResponse\"<\n\x16VMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x19\n\x17VMServiceDeleteResponse2\x81\x04\n\tVMService\x12]\n\x03Get\x12#.fits.api.vm.v1.VMServiceGetRequest\x1a$.fits.api.vm.v1.VMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x43reate\x12&.fits.api.vm.v1.VMServiceCreateRequest\x1a\'.fits.api.vm.v1.VMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x65\n\x06Update\x12&.fits.api.vm.v1.VMServiceUpdateRequest\x1a\'.fits.api.vm.v1.VMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12`\n\x04List\x12$.fits.api.vm.v1.VMServiceListRequest\x1a%.fits.api.vm.v1.VMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x44\x65lete\x12&.fits.api.vm.v1.VMServiceDeleteRequest\x1a\'.fits.api.vm.v1.VMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07VmProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/vm.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x96\x01\n\nVMInstance\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\"\n\x07project\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"W\n\x13VMServiceGetRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"B\n\x14VMServiceGetResponse\x12*\n\x02vm\x18\x01 \x01(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"{\n\x1dVMServiceCreateWindowsRequest\x12)\n\x0b\x64omain_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12/\n\x04\x64isk\x18\x02 \x01(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskR\x04\x64isk\"s\n\x1bVMServiceCreateLinuxRequest\x12%\n\tldap_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12-\n\x04\x64isk\x18\x02 \x01(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskR\x04\x64isk\"\x8f\x05\n\x16VMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12\x10\n\x03\x63pu\x18\x03 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x04 \x01(\rR\x03ram\x12!\n\x07os_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12+\n\x06labels\x18\n \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labels\x12!\n\x0corder_number\x18\x0b \x01(\tR\x0borderNumber\x12\x16\n\x06\x62\x61\x63kup\x18\x0c \x01(\x08R\x06\x62\x61\x63kup\x12\"\n\x0c\x61vailability\x18\r \x01(\tR\x0c\x61vailability\x12\"\n\x0cserviceclass\x18\x0e \x01(\tR\x0cserviceclass\x12I\n\x07windows\x18\x15 \x01(\x0b\x32-.fits.api.vm.v1.VMServiceCreateWindowsRequestH\x00R\x07windows\x12\x43\n\x05linux\x18\x16 \x01(\x0b\x32+.fits.api.vm.v1.VMServiceCreateLinuxRequestH\x00R\x05linuxB\x0f\n\x06vmtype\x12\x05\xbaH\x02\x08\x01\x42\x07\n\x05_name\"\xaa\x01\n\tLinuxDisk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05label\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x01R\nmountPoint\x88\x01\x01\x42\r\n\x0b_size_in_gbB\x0e\n\x0c_mount_point\"\xad\x01\n\x0bWindowsDisk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12%\n\x0b\x64riveletter\x18\x03 \x01(\tH\x01R\x0b\x64riveletter\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05labelB\r\n\x0b_size_in_gbB\x0e\n\x0c_driveletter\"\x19\n\x17VMServiceCreateResponse\"~\n\x16VMServiceUpdateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\"\x19\n\x17VMServiceUpdateResponse\":\n\x14VMServiceListRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x17\n\x15VMServiceListResponse\"<\n\x16VMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x19\n\x17VMServiceDeleteResponse2\x81\x04\n\tVMService\x12]\n\x03Get\x12#.fits.api.vm.v1.VMServiceGetRequest\x1a$.fits.api.vm.v1.VMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x43reate\x12&.fits.api.vm.v1.VMServiceCreateRequest\x1a\'.fits.api.vm.v1.VMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x65\n\x06Update\x12&.fits.api.vm.v1.VMServiceUpdateRequest\x1a\'.fits.api.vm.v1.VMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12`\n\x04List\x12$.fits.api.vm.v1.VMServiceListRequest\x1a%.fits.api.vm.v1.VMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x44\x65lete\x12&.fits.api.vm.v1.VMServiceDeleteRequest\x1a\'.fits.api.vm.v1.VMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07VmProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -45,6 +45,12 @@ _globals['_VMSERVICEGETREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VMSERVICEGETREQUEST'].fields_by_name['project']._loaded_options = None _globals['_VMSERVICEGETREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICECREATEWINDOWSREQUEST'].fields_by_name['domain_uuid']._loaded_options = None + _globals['_VMSERVICECREATEWINDOWSREQUEST'].fields_by_name['domain_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICECREATELINUXREQUEST'].fields_by_name['ldap_uuid']._loaded_options = None + _globals['_VMSERVICECREATELINUXREQUEST'].fields_by_name['ldap_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICECREATEREQUEST'].oneofs_by_name['vmtype']._loaded_options = None + _globals['_VMSERVICECREATEREQUEST'].oneofs_by_name['vmtype']._serialized_options = b'\272H\002\010\001' _globals['_VMSERVICECREATEREQUEST'].fields_by_name['project_uuid']._loaded_options = None _globals['_VMSERVICECREATEREQUEST'].fields_by_name['project_uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VMSERVICECREATEREQUEST'].fields_by_name['name']._loaded_options = None @@ -81,24 +87,30 @@ _globals['_VMSERVICEGETREQUEST']._serialized_end=374 _globals['_VMSERVICEGETRESPONSE']._serialized_start=376 _globals['_VMSERVICEGETRESPONSE']._serialized_end=442 - _globals['_VMSERVICECREATEREQUEST']._serialized_start=445 - _globals['_VMSERVICECREATEREQUEST']._serialized_end=807 - _globals['_DISK']._serialized_start=810 - _globals['_DISK']._serialized_end=1032 - _globals['_VMSERVICECREATERESPONSE']._serialized_start=1034 - _globals['_VMSERVICECREATERESPONSE']._serialized_end=1059 - _globals['_VMSERVICEUPDATEREQUEST']._serialized_start=1061 - _globals['_VMSERVICEUPDATEREQUEST']._serialized_end=1187 - _globals['_VMSERVICEUPDATERESPONSE']._serialized_start=1189 - _globals['_VMSERVICEUPDATERESPONSE']._serialized_end=1214 - _globals['_VMSERVICELISTREQUEST']._serialized_start=1216 - _globals['_VMSERVICELISTREQUEST']._serialized_end=1274 - _globals['_VMSERVICELISTRESPONSE']._serialized_start=1276 - _globals['_VMSERVICELISTRESPONSE']._serialized_end=1299 - _globals['_VMSERVICEDELETEREQUEST']._serialized_start=1301 - _globals['_VMSERVICEDELETEREQUEST']._serialized_end=1361 - _globals['_VMSERVICEDELETERESPONSE']._serialized_start=1363 - _globals['_VMSERVICEDELETERESPONSE']._serialized_end=1388 - _globals['_VMSERVICE']._serialized_start=1391 - _globals['_VMSERVICE']._serialized_end=1904 + _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_start=444 + _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_end=567 + _globals['_VMSERVICECREATELINUXREQUEST']._serialized_start=569 + _globals['_VMSERVICECREATELINUXREQUEST']._serialized_end=684 + _globals['_VMSERVICECREATEREQUEST']._serialized_start=687 + _globals['_VMSERVICECREATEREQUEST']._serialized_end=1342 + _globals['_LINUXDISK']._serialized_start=1345 + _globals['_LINUXDISK']._serialized_end=1515 + _globals['_WINDOWSDISK']._serialized_start=1518 + _globals['_WINDOWSDISK']._serialized_end=1691 + _globals['_VMSERVICECREATERESPONSE']._serialized_start=1693 + _globals['_VMSERVICECREATERESPONSE']._serialized_end=1718 + _globals['_VMSERVICEUPDATEREQUEST']._serialized_start=1720 + _globals['_VMSERVICEUPDATEREQUEST']._serialized_end=1846 + _globals['_VMSERVICEUPDATERESPONSE']._serialized_start=1848 + _globals['_VMSERVICEUPDATERESPONSE']._serialized_end=1873 + _globals['_VMSERVICELISTREQUEST']._serialized_start=1875 + _globals['_VMSERVICELISTREQUEST']._serialized_end=1933 + _globals['_VMSERVICELISTRESPONSE']._serialized_start=1935 + _globals['_VMSERVICELISTRESPONSE']._serialized_end=1958 + _globals['_VMSERVICEDELETEREQUEST']._serialized_start=1960 + _globals['_VMSERVICEDELETEREQUEST']._serialized_end=2020 + _globals['_VMSERVICEDELETERESPONSE']._serialized_start=2022 + _globals['_VMSERVICEDELETERESPONSE']._serialized_end=2047 + _globals['_VMSERVICE']._serialized_start=2050 + _globals['_VMSERVICE']._serialized_end=2563 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/vm_pb2.pyi b/python/fits/api/vm/v1/vm_pb2.pyi index 4f76bfe..0f48b01 100644 --- a/python/fits/api/vm/v1/vm_pb2.pyi +++ b/python/fits/api/vm/v1/vm_pb2.pyi @@ -1,10 +1,9 @@ from buf.validate import validate_pb2 as _validate_pb2 from fits.api.v1 import common_pb2 as _common_pb2 from fits.api.v1 import predefined_rules_pb2 as _predefined_rules_pb2 -from google.protobuf.internal import containers as _containers from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message -from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from collections.abc import Mapping as _Mapping from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union DESCRIPTOR: _descriptor.FileDescriptor @@ -35,8 +34,24 @@ class VMServiceGetResponse(_message.Message): vm: VMInstance def __init__(self, vm: _Optional[_Union[VMInstance, _Mapping]] = ...) -> None: ... +class VMServiceCreateWindowsRequest(_message.Message): + __slots__ = ("domain_uuid", "disk") + DOMAIN_UUID_FIELD_NUMBER: _ClassVar[int] + DISK_FIELD_NUMBER: _ClassVar[int] + domain_uuid: str + disk: WindowsDisk + def __init__(self, domain_uuid: _Optional[str] = ..., disk: _Optional[_Union[WindowsDisk, _Mapping]] = ...) -> None: ... + +class VMServiceCreateLinuxRequest(_message.Message): + __slots__ = ("ldap_uuid", "disk") + LDAP_UUID_FIELD_NUMBER: _ClassVar[int] + DISK_FIELD_NUMBER: _ClassVar[int] + ldap_uuid: str + disk: LinuxDisk + def __init__(self, ldap_uuid: _Optional[str] = ..., disk: _Optional[_Union[LinuxDisk, _Mapping]] = ...) -> None: ... + class VMServiceCreateRequest(_message.Message): - __slots__ = ("project_uuid", "name", "cpu", "ram", "os_uuid", "vlan_uuid", "location_uuid", "contact_uuid", "disks") + __slots__ = ("project_uuid", "name", "cpu", "ram", "os_uuid", "vlan_uuid", "location_uuid", "contact_uuid", "labels", "order_number", "backup", "availability", "serviceclass", "windows", "linux") PROJECT_UUID_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] CPU_FIELD_NUMBER: _ClassVar[int] @@ -45,7 +60,13 @@ class VMServiceCreateRequest(_message.Message): VLAN_UUID_FIELD_NUMBER: _ClassVar[int] LOCATION_UUID_FIELD_NUMBER: _ClassVar[int] CONTACT_UUID_FIELD_NUMBER: _ClassVar[int] - DISKS_FIELD_NUMBER: _ClassVar[int] + LABELS_FIELD_NUMBER: _ClassVar[int] + ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] + BACKUP_FIELD_NUMBER: _ClassVar[int] + AVAILABILITY_FIELD_NUMBER: _ClassVar[int] + SERVICECLASS_FIELD_NUMBER: _ClassVar[int] + WINDOWS_FIELD_NUMBER: _ClassVar[int] + LINUX_FIELD_NUMBER: _ClassVar[int] project_uuid: str name: str cpu: int @@ -54,22 +75,38 @@ class VMServiceCreateRequest(_message.Message): vlan_uuid: str location_uuid: str contact_uuid: str - disks: _containers.RepeatedCompositeFieldContainer[Disk] - def __init__(self, project_uuid: _Optional[str] = ..., name: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., os_uuid: _Optional[str] = ..., vlan_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., disks: _Optional[_Iterable[_Union[Disk, _Mapping]]] = ...) -> None: ... + labels: _common_pb2.Labels + order_number: str + backup: bool + availability: str + serviceclass: str + windows: VMServiceCreateWindowsRequest + linux: VMServiceCreateLinuxRequest + def __init__(self, project_uuid: _Optional[str] = ..., name: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., os_uuid: _Optional[str] = ..., vlan_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., labels: _Optional[_Union[_common_pb2.Labels, _Mapping]] = ..., order_number: _Optional[str] = ..., backup: _Optional[bool] = ..., availability: _Optional[str] = ..., serviceclass: _Optional[str] = ..., windows: _Optional[_Union[VMServiceCreateWindowsRequest, _Mapping]] = ..., linux: _Optional[_Union[VMServiceCreateLinuxRequest, _Mapping]] = ...) -> None: ... -class Disk(_message.Message): - __slots__ = ("auto_extend", "size_in_gb", "drive_letter", "label", "mount_point") +class LinuxDisk(_message.Message): + __slots__ = ("auto_extend", "size_in_gb", "label", "mount_point") AUTO_EXTEND_FIELD_NUMBER: _ClassVar[int] SIZE_IN_GB_FIELD_NUMBER: _ClassVar[int] - DRIVE_LETTER_FIELD_NUMBER: _ClassVar[int] LABEL_FIELD_NUMBER: _ClassVar[int] MOUNT_POINT_FIELD_NUMBER: _ClassVar[int] auto_extend: bool size_in_gb: int - drive_letter: str label: str mount_point: str - def __init__(self, auto_extend: _Optional[bool] = ..., size_in_gb: _Optional[int] = ..., drive_letter: _Optional[str] = ..., label: _Optional[str] = ..., mount_point: _Optional[str] = ...) -> None: ... + def __init__(self, auto_extend: _Optional[bool] = ..., size_in_gb: _Optional[int] = ..., label: _Optional[str] = ..., mount_point: _Optional[str] = ...) -> None: ... + +class WindowsDisk(_message.Message): + __slots__ = ("auto_extend", "size_in_gb", "driveletter", "label") + AUTO_EXTEND_FIELD_NUMBER: _ClassVar[int] + SIZE_IN_GB_FIELD_NUMBER: _ClassVar[int] + DRIVELETTER_FIELD_NUMBER: _ClassVar[int] + LABEL_FIELD_NUMBER: _ClassVar[int] + auto_extend: bool + size_in_gb: int + driveletter: str + label: str + def __init__(self, auto_extend: _Optional[bool] = ..., size_in_gb: _Optional[int] = ..., driveletter: _Optional[str] = ..., label: _Optional[str] = ...) -> None: ... class VMServiceCreateResponse(_message.Message): __slots__ = () From 6bb36d547fe7b770026e87d3178b396aebfbc1a0 Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Wed, 9 Sep 2026 16:46:46 +0200 Subject: [PATCH 09/21] VM comments --- proto/fits/api/vm/v1/vm.proto | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/proto/fits/api/vm/v1/vm.proto b/proto/fits/api/vm/v1/vm.proto index 2ad75c1..e1ff7ad 100644 --- a/proto/fits/api/vm/v1/vm.proto +++ b/proto/fits/api/vm/v1/vm.proto @@ -43,6 +43,7 @@ service VMService { } // VM Instance Messages +// TODO NucleusDBVMs und NucleusDBVMsLightUser aussortieren message VMInstance { // Uuid of this VM string uuid = 1 [(buf.validate.field).string.uuid = true]; @@ -120,9 +121,9 @@ message VMServiceCreateRequest { string order_number = 11; // Currently no different backup plans, just true or false bool backup = 12; - // V0, V1, V2, V3 -> highest=best + // v0, v1, v2, v3 -> highest=best string availability = 13; - // SZ1, SZ2, SZ3 -> highest=best + // sz1, sz2, sz3 -> highest=best string serviceclass = 14; // TODO differentiation Linux/Windows oneof vmtype { @@ -204,7 +205,10 @@ message VMServiceListRequest { } // VMServiceListResponse TODO -message VMServiceListResponse {} +message VMServiceListResponse { + // List of VM instances + repeated VMInstance vms = 1; +} // VMServiceDeleteRequest TODO message VMServiceDeleteRequest { From 1e4ae8e23b594c6589ac7b7aaf0a2dc484e2d1b9 Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Thu, 10 Sep 2026 13:53:02 +0200 Subject: [PATCH 10/21] chore: generate clients --- go/client/client.go | 46 ++++++++++- go/permissions/servicepermissions.go | 114 +++++++++++++++++---------- js/client.ts | 52 ++++++++++++ python/fits/client/client.py | 16 ++++ 4 files changed, 184 insertions(+), 44 deletions(-) diff --git a/go/client/client.go b/go/client/client.go index 49c36dd..42eabba 100755 --- a/go/client/client.go +++ b/go/client/client.go @@ -40,11 +40,19 @@ type ( } Apivmv1 interface { + Location() vmv1connect.LocationServiceClient + OS() vmv1connect.OSServiceClient + StageType() vmv1connect.StageTypeServiceClient + Vlan() vmv1connect.VlanServiceClient VM() vmv1connect.VMServiceClient } apivmv1 struct { - vmservice vmv1connect.VMServiceClient + locationservice vmv1connect.LocationServiceClient + osservice vmv1connect.OSServiceClient + stagetypeservice vmv1connect.StageTypeServiceClient + vlanservice vmv1connect.VlanServiceClient + vmservice vmv1connect.VMServiceClient } ) @@ -120,6 +128,30 @@ func (c *apiv1) Version() apiv1connect.VersionServiceClient { func (c *client) Apivmv1() Apivmv1 { a := &apivmv1{ + locationservice: vmv1connect.NewLocationServiceClient( + c.config.HttpClient(), + c.config.BaseURL, + connect.WithInterceptors(c.interceptors...), + compress.WithAll(compress.LevelBalanced), + ), + osservice: vmv1connect.NewOSServiceClient( + c.config.HttpClient(), + c.config.BaseURL, + connect.WithInterceptors(c.interceptors...), + compress.WithAll(compress.LevelBalanced), + ), + stagetypeservice: vmv1connect.NewStageTypeServiceClient( + c.config.HttpClient(), + c.config.BaseURL, + connect.WithInterceptors(c.interceptors...), + compress.WithAll(compress.LevelBalanced), + ), + vlanservice: vmv1connect.NewVlanServiceClient( + c.config.HttpClient(), + c.config.BaseURL, + connect.WithInterceptors(c.interceptors...), + compress.WithAll(compress.LevelBalanced), + ), vmservice: vmv1connect.NewVMServiceClient( c.config.HttpClient(), c.config.BaseURL, @@ -130,6 +162,18 @@ func (c *client) Apivmv1() Apivmv1 { return a } +func (c *apivmv1) Location() vmv1connect.LocationServiceClient { + return c.locationservice +} +func (c *apivmv1) OS() vmv1connect.OSServiceClient { + return c.osservice +} +func (c *apivmv1) StageType() vmv1connect.StageTypeServiceClient { + return c.stagetypeservice +} +func (c *apivmv1) Vlan() vmv1connect.VlanServiceClient { + return c.vlanservice +} func (c *apivmv1) VM() vmv1connect.VMServiceClient { return c.vmservice } diff --git a/go/permissions/servicepermissions.go b/go/permissions/servicepermissions.go index 6623709..0842708 100755 --- a/go/permissions/servicepermissions.go +++ b/go/permissions/servicepermissions.go @@ -15,7 +15,11 @@ func GetServices() []string { "fits.api.v1.TenantService", "fits.api.v1.TokenService", "fits.api.v1.VersionService", + "fits.api.vm.v1.LocationService", + "fits.api.vm.v1.OSService", + "fits.api.vm.v1.StageTypeService", "fits.api.vm.v1.VMService", + "fits.api.vm.v1.VlanService", } } @@ -45,40 +49,52 @@ func GetServicePermissions() *ServicePermissions { }, Project: Project{ v1.ProjectRole_PROJECT_ROLE_OWNER: map[string]struct{}{ - "/fits.api.v1.IPService/Create": {}, - "/fits.api.v1.IPService/Delete": {}, - "/fits.api.v1.IPService/Get": {}, - "/fits.api.v1.IPService/List": {}, - "/fits.api.v1.IPService/Update": {}, - "/fits.api.v1.ProjectService/Delete": {}, - "/fits.api.v1.ProjectService/Get": {}, - "/fits.api.v1.ProjectService/Update": {}, - "/fits.api.vm.v1.VMService/Create": {}, - "/fits.api.vm.v1.VMService/Delete": {}, - "/fits.api.vm.v1.VMService/Get": {}, - "/fits.api.vm.v1.VMService/List": {}, - "/fits.api.vm.v1.VMService/Update": {}, + "/fits.api.v1.IPService/Create": {}, + "/fits.api.v1.IPService/Delete": {}, + "/fits.api.v1.IPService/Get": {}, + "/fits.api.v1.IPService/List": {}, + "/fits.api.v1.IPService/Update": {}, + "/fits.api.v1.ProjectService/Delete": {}, + "/fits.api.v1.ProjectService/Get": {}, + "/fits.api.v1.ProjectService/Update": {}, + "/fits.api.vm.v1.LocationService/List": {}, + "/fits.api.vm.v1.OSService/List": {}, + "/fits.api.vm.v1.StageTypeService/List": {}, + "/fits.api.vm.v1.VMService/Create": {}, + "/fits.api.vm.v1.VMService/Delete": {}, + "/fits.api.vm.v1.VMService/Get": {}, + "/fits.api.vm.v1.VMService/List": {}, + "/fits.api.vm.v1.VMService/Update": {}, + "/fits.api.vm.v1.VlanService/List": {}, }, v1.ProjectRole_PROJECT_ROLE_EDITOR: map[string]struct{}{ - "/fits.api.v1.IPService/Create": {}, - "/fits.api.v1.IPService/Delete": {}, - "/fits.api.v1.IPService/Get": {}, - "/fits.api.v1.IPService/List": {}, - "/fits.api.v1.IPService/Update": {}, - "/fits.api.v1.ProjectService/Get": {}, - "/fits.api.v1.ProjectService/Update": {}, - "/fits.api.vm.v1.VMService/Create": {}, - "/fits.api.vm.v1.VMService/Delete": {}, - "/fits.api.vm.v1.VMService/Get": {}, - "/fits.api.vm.v1.VMService/List": {}, - "/fits.api.vm.v1.VMService/Update": {}, + "/fits.api.v1.IPService/Create": {}, + "/fits.api.v1.IPService/Delete": {}, + "/fits.api.v1.IPService/Get": {}, + "/fits.api.v1.IPService/List": {}, + "/fits.api.v1.IPService/Update": {}, + "/fits.api.v1.ProjectService/Get": {}, + "/fits.api.v1.ProjectService/Update": {}, + "/fits.api.vm.v1.LocationService/List": {}, + "/fits.api.vm.v1.OSService/List": {}, + "/fits.api.vm.v1.StageTypeService/List": {}, + "/fits.api.vm.v1.VMService/Create": {}, + "/fits.api.vm.v1.VMService/Delete": {}, + "/fits.api.vm.v1.VMService/Get": {}, + "/fits.api.vm.v1.VMService/List": {}, + "/fits.api.vm.v1.VMService/Update": {}, + "/fits.api.vm.v1.VlanService/List": {}, }, v1.ProjectRole_PROJECT_ROLE_VIEWER: map[string]struct{}{ - "/fits.api.v1.IPService/Get": {}, - "/fits.api.v1.IPService/List": {}, - "/fits.api.v1.ProjectService/Get": {}, - "/fits.api.vm.v1.VMService/Get": {}, - "/fits.api.vm.v1.VMService/List": {}, + "/fits.api.v1.IPService/Get": {}, + "/fits.api.v1.IPService/List": {}, + "/fits.api.v1.ProjectService/Get": {}, + "/fits.api.vm.v1.LocationService/List": {}, + "/fits.api.vm.v1.OSService/List": {}, + "/fits.api.vm.v1.StageTypeService/List": {}, + "/fits.api.vm.v1.VMService/Get": {}, + "/fits.api.vm.v1.VMService/List": {}, + "/fits.api.vm.v1.VlanService/List": {}, }, }, }, @@ -108,11 +124,15 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.v1.TokenService/Revoke": {}, "/fits.api.v1.TokenService/Update": {}, "/fits.api.v1.VersionService/Get": {}, + "/fits.api.vm.v1.LocationService/List": {}, + "/fits.api.vm.v1.OSService/List": {}, + "/fits.api.vm.v1.StageTypeService/List": {}, "/fits.api.vm.v1.VMService/Create": {}, "/fits.api.vm.v1.VMService/Delete": {}, "/fits.api.vm.v1.VMService/Get": {}, "/fits.api.vm.v1.VMService/List": {}, "/fits.api.vm.v1.VMService/Update": {}, + "/fits.api.vm.v1.VlanService/List": {}, "/grpc.reflection.v1.ServerReflection/ServerReflectionInfo": {}, "/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo": {}, }, @@ -144,19 +164,23 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.v1.TenantService/Update": true, }, Project: map[string]bool{ - "/fits.api.v1.IPService/Create": true, - "/fits.api.v1.IPService/Delete": true, - "/fits.api.v1.IPService/Get": true, - "/fits.api.v1.IPService/List": true, - "/fits.api.v1.IPService/Update": true, - "/fits.api.v1.ProjectService/Delete": true, - "/fits.api.v1.ProjectService/Get": true, - "/fits.api.v1.ProjectService/Update": true, - "/fits.api.vm.v1.VMService/Create": true, - "/fits.api.vm.v1.VMService/Delete": true, - "/fits.api.vm.v1.VMService/Get": true, - "/fits.api.vm.v1.VMService/List": true, - "/fits.api.vm.v1.VMService/Update": true, + "/fits.api.v1.IPService/Create": true, + "/fits.api.v1.IPService/Delete": true, + "/fits.api.v1.IPService/Get": true, + "/fits.api.v1.IPService/List": true, + "/fits.api.v1.IPService/Update": true, + "/fits.api.v1.ProjectService/Delete": true, + "/fits.api.v1.ProjectService/Get": true, + "/fits.api.v1.ProjectService/Update": true, + "/fits.api.vm.v1.LocationService/List": true, + "/fits.api.vm.v1.OSService/List": true, + "/fits.api.vm.v1.StageTypeService/List": true, + "/fits.api.vm.v1.VMService/Create": true, + "/fits.api.vm.v1.VMService/Delete": true, + "/fits.api.vm.v1.VMService/Get": true, + "/fits.api.vm.v1.VMService/List": true, + "/fits.api.vm.v1.VMService/Update": true, + "/fits.api.vm.v1.VlanService/List": true, }, }, Auditable: map[string]bool{ @@ -185,11 +209,15 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.v1.TokenService/Revoke": true, "/fits.api.v1.TokenService/Update": true, "/fits.api.v1.VersionService/Get": false, + "/fits.api.vm.v1.LocationService/List": false, + "/fits.api.vm.v1.OSService/List": false, + "/fits.api.vm.v1.StageTypeService/List": false, "/fits.api.vm.v1.VMService/Create": true, "/fits.api.vm.v1.VMService/Delete": true, "/fits.api.vm.v1.VMService/Get": false, "/fits.api.vm.v1.VMService/List": false, "/fits.api.vm.v1.VMService/Update": true, + "/fits.api.vm.v1.VlanService/List": false, }, } } diff --git a/js/client.ts b/js/client.ts index 8fdd5cb..8d1756f 100755 --- a/js/client.ts +++ b/js/client.ts @@ -21,6 +21,14 @@ import { VersionService as Apiv1VersionService } from "./fits/api/v1/version_pb" +import { LocationService as Apivmv1LocationService } from "./fits/api/vm/v1/location_pb"; + +import { OSService as Apivmv1OSService } from "./fits/api/vm/v1/os_pb"; + +import { StageTypeService as Apivmv1StageTypeService } from "./fits/api/vm/v1/stagetype_pb"; + +import { VlanService as Apivmv1VlanService } from "./fits/api/vm/v1/vlan_pb"; + import { VMService as Apivmv1VMService } from "./fits/api/vm/v1/vm_pb"; @@ -61,6 +69,14 @@ export interface Apiv1 { export interface Apivmv1 { + location(): ConnectClient; + + os(): ConnectClient; + + stageType(): ConnectClient; + + vlan(): ConnectClient; + vm(): ConnectClient; } @@ -208,6 +224,14 @@ class Apivmv1Impl implements Apivmv1 { private transport: Transport; + private _location?: ConnectClient; + + private _os?: ConnectClient; + + private _stageType?: ConnectClient; + + private _vlan?: ConnectClient; + private _vm?: ConnectClient; @@ -216,6 +240,34 @@ class Apivmv1Impl implements Apivmv1 { } + location(): ConnectClient { + if (!this._location) { + this._location = createClient(Apivmv1LocationService, this.transport); + } + return this._location; + } + + os(): ConnectClient { + if (!this._os) { + this._os = createClient(Apivmv1OSService, this.transport); + } + return this._os; + } + + stageType(): ConnectClient { + if (!this._stageType) { + this._stageType = createClient(Apivmv1StageTypeService, this.transport); + } + return this._stageType; + } + + vlan(): ConnectClient { + if (!this._vlan) { + this._vlan = createClient(Apivmv1VlanService, this.transport); + } + return this._vlan; + } + vm(): ConnectClient { if (!this._vm) { this._vm = createClient(Apivmv1VMService, this.transport); diff --git a/python/fits/client/client.py b/python/fits/client/client.py index 9daf227..2c13a7c 100755 --- a/python/fits/client/client.py +++ b/python/fits/client/client.py @@ -10,6 +10,10 @@ import fits.api.v1.token_connect as api_token_connect import fits.api.v1.version_connect as api_version_connect +import fits.apivm.v1.location_connect as apivm_location_connect +import fits.apivm.v1.os_connect as apivm_os_connect +import fits.apivm.v1.stagetype_connect as apivm_stagetype_connect +import fits.apivm.v1.vlan_connect as apivm_vlan_connect import fits.apivm.v1.vm_connect as apivm_vm_connect @@ -72,6 +76,18 @@ def __init__(self, baseurl: str, client: pyqwest.SyncClient = None, interceptors self._interceptors = list(interceptors) + def location(self): + return apivm_location_connect.LocationServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + + def os(self): + return apivm_os_connect.OSServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + + def stagetype(self): + return apivm_stagetype_connect.StageTypeServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + + def vlan(self): + return apivm_vlan_connect.VlanServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + def vm(self): return apivm_vm_connect.VMServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) From e21aa098c48273dd9d87cd7acd963777ba91705c Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Thu, 10 Sep 2026 14:38:03 +0200 Subject: [PATCH 11/21] feat: VMInstance and cleanup --- doc/index.html | 408 ++++++++++++--- go/fits/api/vm/v1/vm.pb.go | 861 +++++++++++++++++++++++-------- js/fits/api/vm/v1/vm_pb.ts | 440 ++++++++++++---- proto/fits/api/vm/v1/vm.proto | 244 +++++---- python/fits/api/vm/v1/vm_pb2.py | 109 ++-- python/fits/api/vm/v1/vm_pb2.pyi | 118 ++++- 6 files changed, 1637 insertions(+), 543 deletions(-) diff --git a/doc/index.html b/doc/index.html index 97fbc88..ccb8f69 100644 --- a/doc/index.html +++ b/doc/index.html @@ -841,10 +841,18 @@

    Table of Contents

    fits/api/vm/v1/vm.proto
      +
    • + MLinuxDetails +
    • +
    • MLinuxDisk
    • +
    • + MNetworkInterface +
    • +
    • MVMInstance
    • @@ -897,6 +905,10 @@

      Table of Contents

      MVMServiceUpdateResponse +
    • + MWindowsDetails +
    • +
    • MWindowsDisk
    • @@ -4943,8 +4955,47 @@

      fits/api/vm/v1/vm.proto

      To

      +

      LinuxDetails

      +

      Linux-specific VM details.

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      disksLinuxDiskrepeated

      Disks configured on the Linux VM.

      ldap_uuidstring

      UUID of the LDAP directory the VM is integrated with.

      ldap_fqdnstring

      Linux-specific FQDN. Derived from the optional name set at creation, +or generated by the backend if none was provided.

      + + + + +

      LinuxDisk

      -

      LinuxDisk

      +

      Disk configuration for a Linux VM.

      @@ -4957,32 +5008,68 @@

      LinuxDisk

      - + - + - + - + + + +
      auto_extend bool

      AutoExtend if set to true the disk grows automatically

      If true, the disk grows automatically when space runs low.

      size_in_gb uint64 optional

      Size if the disk in GB - -TODO discuss how this could be optional

      Size of the disk in GB.

      label string

      Label of the disk

      Label (name) of the disk.

      mount_point string optional

      MountPoint where this disk should be mounted +

      Filesystem path where this disk should be mounted (e.g. "/data").

      + + + + + +

      NetworkInterface

      +

      A network interface of a VM. IPv4 only; IPv6 is not yet supported.

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +TODO validation

      @@ -4993,7 +5080,7 @@

      LinuxDisk

      VMInstance

      -

      VM Instance Messages

      +

      VM Instance Messages

      A VM instance as returned by the API.

      FieldTypeLabelDescription
      uuidstring

      UUID of this interface.

      ipaddressstring

      IPv4 address assigned to this interface.

      macaddressstring

      MAC address of this interface. -TODO this requires a Filesystem on the disk ?

      @@ -5006,28 +5093,145 @@

      VMInstance

      - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5038,7 +5242,7 @@

      VMInstance

      VMServiceCreateLinuxRequest

      -

      Linux-specific create request parts

      +

      Linux-specific create request parts.

      uuid string

      Uuid of this VM

      UUID of this VM.

      meta fits.api.v1.Meta

      Meta for this VM

      Metadata for this VM. +TODO dates are available in the nulink db, but not passed through yet.

      namefqdn string

      Name of this VM

      FQDN of the VM. Derived from the optional name set at creation, +or generated by the backend if none was provided.

      projectproject_uuid string

      Project where this VM belongs to

      UUID of the project this VM belongs to.

      os_uuidstring

      UUID of the operating system image installed on the VM. +Resolve the human-readable title via the OS endpoint.

      location_uuidstring

      UUID of the datacenter location. +The VM is automatically scheduled into one pod within the chosen location; +users select the city but not the specific datacenter.

      contact_uuidstring

      TODO: Contact UUID – not yet implemented; open discussion with FCN (#23).

      cpuuint32

      Number of CPU cores.

      ramuint32

      RAM in GB.

      order_numberstring

      Internal reference number provided by the user, e.g. a ticket ID.

      contractbool

      Whether the order was placed by FITS (true) or self-service by the user (false).

      backupbool

      Whether backup is enabled.

      availabilitystring

      Availability level: v0, v1, v2, v3 (higher value = higher availability).

      serviceclassstring

      Service class: sz1, sz2, sz3 (higher value = higher tier).

      statusstring

      Status of the ongoing operation.

      status_infostring

      Additional information about the current status.

      windows_detailsWindowsDetails

      Windows-specific settings (domain + disks).

      linux_detailsLinuxDetails

      Linux-specific settings (LDAP + disks).

      interfacesNetworkInterfacerepeated

      Network interfaces attached to the VM (IPv4 only).

      vlanVlan

      VLAN the VM is attached to.

      @@ -5051,14 +5255,14 @@

      VMServiceCreateLinuxRequest<

      - + - + @@ -5069,7 +5273,7 @@

      VMServiceCreateLinuxRequest<

      VMServiceCreateRequest

      -

      VMServiceCreateRequest TODO

      +

      Request to create a new VM instance.

      ldap_uuid string

      LDAP UUID

      UUID of the LDAP directory the VM should integrate with. Required.

      disk LinuxDisk

      Linux Disk

      Disk configuration for the Linux VM.

      @@ -5082,116 +5286,111 @@

      VMServiceCreateRequest

      - + - - - - - - - - - - - - - - - + - + - + - + - + - - + + - + + + + + + + + - + + + + + + + + - + - + - + - + - + @@ -5209,7 +5408,7 @@

      VMServiceCreateResponse

      VMServiceCreateWindowsRequest

      -

      Windows-specific create request parts

      +

      Windows-specific create request parts.

      project_uuid string

      Project of the VM

      UUID of the project this VM belongs to. Required.

      name string optional

      Name of the VM

      cpuuint32

      Number of CPUs of this VM

      ramuint32

      RAM of the VM in GB (TODO 2^n validation)

      Optional name for the VM. The FQDN is derived from this value.

      os_uuid string

      OS Uuid of the OS to install in the VM instance

      UUID of the operating system image to install. Required.

      vlan_uuid string

      VLAN Uuid of the VLAN to install in the VM instance into

      UUID of the VLAN network to attach the VM to. Required. +Obtainable via the VLAN list endpoint.

      location_uuid string

      Location Uuid of the datacenter location to install in the VM instance

      UUID of the datacenter location. Required. +The VM is automatically scheduled into one data center within the chosen location; +users select the city but not the specific datacenter.

      contact_uuid string

      Contact Uuid of who is the responsible contact of the VM instance -TODO hier ist noch Klärungsbedarf. Ansprechpartner hängt nicht mal an einem echten user im system -TODO sondern sind einfach nur Kontaktdaten, die an die Entity hingehängt wird. -TODO aktuell hängt dies in der nulink api -TODO labels als Option? -TODO what about dsgvo? -TODO daten im service now? -TODO eventuell im tenant-apiserver Kontakte erlauben? -TODO was macht FCN? wäre das für sie auch sinnvoll? -TODO is required

      TODO: Contact UUID – open discussion with FCN on how to model responsible contacts. +GDPR considerations pending. May become a dedicated /contact endpoint.

      labelsfits.api.v1.Labelscpuuint32

      Replaces optional ContractNumber, TransactionNumber, TechnicalKey, AccountingKey

      Number of CPU cores.

      ramuint32

      RAM in GB. Must be a power of 2.

      order_number string

      Order number muss unbedingt mitgegeben werden -Hängt sogar z.b. am VM restart. -Wird für gewöhnlich vom User angegeben.

      Internal reference number provided by the user, e.g. a ticket ID. Free text. Required.

      labelsfits.api.v1.Labels

      Optional key-value labels for accounting purposes +(e.g. contract number, transaction number, technical key, accounting key).

      backup bool

      Currently no different backup plans, just true or false

      Whether backup is enabled. Simple on/off toggle; no distinct backup plans. Required.

      availability string

      V0, V1, V2, V3 -> highest=best

      Availability level: v0, v1, v2, v3 (higher value = higher availability). Required.

      serviceclass string

      SZ1, SZ2, SZ3 -> highest=best

      Service class: sz1, sz2, sz3 (higher value = higher tier). Required. +Only certain combinations with availability are valid; enforced by the backend.

      windows VMServiceCreateWindowsRequest

      Windows Disk and Domain

      Windows-specific settings (domain + disk).

      linux VMServiceCreateLinuxRequest

      Linux Disk and LDAP

      Linux-specific settings (LDAP + disk).

      @@ -5222,14 +5421,14 @@

      VMServiceCreateWindowsRequ

      - + - + @@ -5326,7 +5525,7 @@

      VMServiceGetResponse

      VMServiceListRequest

      -

      VMServiceListRequest TODO

      +

      VMServiceListRequest

      domain_uuid string

      Domain UUID

      UUID of the Windows domain the VM should join. Required.

      disk WindowsDisk

      Windows Disk

      Disk configuration for the Windows VM.

      @@ -5336,9 +5535,16 @@

      VMServiceListRequest

      - + - + + + + + + + + @@ -5350,9 +5556,26 @@

      VMServiceListRequest

      VMServiceListResponse

      -

      VMServiceListResponse TODO

      +

      VMServiceListResponse

      +
      projecttenant stringoptional

      Tenant of the VM

      project_uuidstringoptional

      Project of the VM

      + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      vmsVMInstancerepeated

      List of VM instances

      + + @@ -5367,7 +5590,7 @@

      VMServiceUpdateRequest

      - project + project_uuid
      string

      Project of the VM

      @@ -5394,8 +5617,47 @@

      VMServiceUpdateResponse

      +

      WindowsDetails

      +

      Windows-specific VM details.

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      disksWindowsDiskrepeated

      Disks configured on the Windows VM.

      domain_uuidstring

      UUID of the Windows domain the VM has joined.

      domain_fqdnstring

      Windows-specific FQDN. Derived from the optional name set at creation, +or generated by the backend if none was provided.

      + + + + +

      WindowsDisk

      -

      WindowsDisk

      +

      Disk configuration for a Windows VM.

      @@ -5408,30 +5670,28 @@

      WindowsDisk

      - + - + - + - + diff --git a/go/fits/api/vm/v1/vm.pb.go b/go/fits/api/vm/v1/vm.pb.go index 00066a2..49e5aaf 100644 --- a/go/fits/api/vm/v1/vm.pb.go +++ b/go/fits/api/vm/v1/vm.pb.go @@ -24,16 +24,57 @@ const ( ) // VM Instance Messages +// A VM instance as returned by the API. type VMInstance struct { state protoimpl.MessageState `protogen:"open.v1"` - // Uuid of this VM + // UUID of this VM. Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // Meta for this VM + // Metadata for this VM. + // TODO dates are available in the nulink db, but not passed through yet. Meta *v1.Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` - // Name of this VM - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - // Project where this VM belongs to - Project string `protobuf:"bytes,4,opt,name=project,proto3" json:"project,omitempty"` + // FQDN of the VM. Derived from the optional name set at creation, + // or generated by the backend if none was provided. + Fqdn string `protobuf:"bytes,3,opt,name=fqdn,proto3" json:"fqdn,omitempty"` + // UUID of the project this VM belongs to. + ProjectUuid string `protobuf:"bytes,4,opt,name=project_uuid,json=projectUuid,proto3" json:"project_uuid,omitempty"` + // UUID of the operating system image installed on the VM. + // Resolve the human-readable title via the OS endpoint. + OsUuid string `protobuf:"bytes,5,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` + // UUID of the datacenter location. + // The VM is automatically scheduled into one pod within the chosen location; + // users select the city but not the specific datacenter. + LocationUuid string `protobuf:"bytes,6,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` + // TODO: Contact UUID – not yet implemented; open discussion with FCN (#23). + ContactUuid string `protobuf:"bytes,7,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` + // Number of CPU cores. + Cpu uint32 `protobuf:"varint,8,opt,name=cpu,proto3" json:"cpu,omitempty"` + // RAM in GB. + Ram uint32 `protobuf:"varint,9,opt,name=ram,proto3" json:"ram,omitempty"` + // Internal reference number provided by the user, e.g. a ticket ID. + OrderNumber string `protobuf:"bytes,10,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // Whether the order was placed by FITS (true) or self-service by the user (false). + Contract bool `protobuf:"varint,11,opt,name=contract,proto3" json:"contract,omitempty"` + // Whether backup is enabled. + Backup bool `protobuf:"varint,12,opt,name=backup,proto3" json:"backup,omitempty"` + // Availability level: v0, v1, v2, v3 (higher value = higher availability). + Availability string `protobuf:"bytes,13,opt,name=availability,proto3" json:"availability,omitempty"` + // Service class: sz1, sz2, sz3 (higher value = higher tier). + Serviceclass string `protobuf:"bytes,14,opt,name=serviceclass,proto3" json:"serviceclass,omitempty"` + // Status of the ongoing operation. + Status string `protobuf:"bytes,25,opt,name=status,proto3" json:"status,omitempty"` + // Additional information about the current status. + StatusInfo string `protobuf:"bytes,16,opt,name=status_info,json=statusInfo,proto3" json:"status_info,omitempty"` + // OS-specific configuration. Exactly one must be set. + // + // Types that are valid to be assigned to Details: + // + // *VMInstance_WindowsDetails + // *VMInstance_LinuxDetails + Details isVMInstance_Details `protobuf_oneof:"details"` + // Network interfaces attached to the VM (IPv4 only). + Interfaces []*NetworkInterface `protobuf:"bytes,19,rep,name=interfaces,proto3" json:"interfaces,omitempty"` + // VLAN the VM is attached to. + Vlan *Vlan `protobuf:"bytes,20,opt,name=vlan,proto3" json:"vlan,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -82,16 +123,351 @@ func (x *VMInstance) GetMeta() *v1.Meta { return nil } -func (x *VMInstance) GetName() string { +func (x *VMInstance) GetFqdn() string { if x != nil { - return x.Name + return x.Fqdn } return "" } -func (x *VMInstance) GetProject() string { +func (x *VMInstance) GetProjectUuid() string { if x != nil { - return x.Project + return x.ProjectUuid + } + return "" +} + +func (x *VMInstance) GetOsUuid() string { + if x != nil { + return x.OsUuid + } + return "" +} + +func (x *VMInstance) GetLocationUuid() string { + if x != nil { + return x.LocationUuid + } + return "" +} + +func (x *VMInstance) GetContactUuid() string { + if x != nil { + return x.ContactUuid + } + return "" +} + +func (x *VMInstance) GetCpu() uint32 { + if x != nil { + return x.Cpu + } + return 0 +} + +func (x *VMInstance) GetRam() uint32 { + if x != nil { + return x.Ram + } + return 0 +} + +func (x *VMInstance) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +func (x *VMInstance) GetContract() bool { + if x != nil { + return x.Contract + } + return false +} + +func (x *VMInstance) GetBackup() bool { + if x != nil { + return x.Backup + } + return false +} + +func (x *VMInstance) GetAvailability() string { + if x != nil { + return x.Availability + } + return "" +} + +func (x *VMInstance) GetServiceclass() string { + if x != nil { + return x.Serviceclass + } + return "" +} + +func (x *VMInstance) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *VMInstance) GetStatusInfo() string { + if x != nil { + return x.StatusInfo + } + return "" +} + +func (x *VMInstance) GetDetails() isVMInstance_Details { + if x != nil { + return x.Details + } + return nil +} + +func (x *VMInstance) GetWindowsDetails() *WindowsDetails { + if x != nil { + if x, ok := x.Details.(*VMInstance_WindowsDetails); ok { + return x.WindowsDetails + } + } + return nil +} + +func (x *VMInstance) GetLinuxDetails() *LinuxDetails { + if x != nil { + if x, ok := x.Details.(*VMInstance_LinuxDetails); ok { + return x.LinuxDetails + } + } + return nil +} + +func (x *VMInstance) GetInterfaces() []*NetworkInterface { + if x != nil { + return x.Interfaces + } + return nil +} + +func (x *VMInstance) GetVlan() *Vlan { + if x != nil { + return x.Vlan + } + return nil +} + +type isVMInstance_Details interface { + isVMInstance_Details() +} + +type VMInstance_WindowsDetails struct { + // Windows-specific settings (domain + disks). + WindowsDetails *WindowsDetails `protobuf:"bytes,17,opt,name=windows_details,json=windowsDetails,proto3,oneof"` +} + +type VMInstance_LinuxDetails struct { + // Linux-specific settings (LDAP + disks). + LinuxDetails *LinuxDetails `protobuf:"bytes,18,opt,name=linux_details,json=linuxDetails,proto3,oneof"` +} + +func (*VMInstance_WindowsDetails) isVMInstance_Details() {} + +func (*VMInstance_LinuxDetails) isVMInstance_Details() {} + +// Linux-specific VM details. +type LinuxDetails struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Disks configured on the Linux VM. + Disks []*LinuxDisk `protobuf:"bytes,1,rep,name=disks,proto3" json:"disks,omitempty"` + // UUID of the LDAP directory the VM is integrated with. + LdapUuid string `protobuf:"bytes,2,opt,name=ldap_uuid,json=ldapUuid,proto3" json:"ldap_uuid,omitempty"` + // Linux-specific FQDN. Derived from the optional name set at creation, + // or generated by the backend if none was provided. + LdapFqdn string `protobuf:"bytes,3,opt,name=ldap_fqdn,json=ldapFqdn,proto3" json:"ldap_fqdn,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LinuxDetails) Reset() { + *x = LinuxDetails{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LinuxDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LinuxDetails) ProtoMessage() {} + +func (x *LinuxDetails) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LinuxDetails.ProtoReflect.Descriptor instead. +func (*LinuxDetails) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{1} +} + +func (x *LinuxDetails) GetDisks() []*LinuxDisk { + if x != nil { + return x.Disks + } + return nil +} + +func (x *LinuxDetails) GetLdapUuid() string { + if x != nil { + return x.LdapUuid + } + return "" +} + +func (x *LinuxDetails) GetLdapFqdn() string { + if x != nil { + return x.LdapFqdn + } + return "" +} + +// Windows-specific VM details. +type WindowsDetails struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Disks configured on the Windows VM. + Disks []*WindowsDisk `protobuf:"bytes,1,rep,name=disks,proto3" json:"disks,omitempty"` + // UUID of the Windows domain the VM has joined. + DomainUuid string `protobuf:"bytes,2,opt,name=domain_uuid,json=domainUuid,proto3" json:"domain_uuid,omitempty"` + // Windows-specific FQDN. Derived from the optional name set at creation, + // or generated by the backend if none was provided. + DomainFqdn string `protobuf:"bytes,3,opt,name=domain_fqdn,json=domainFqdn,proto3" json:"domain_fqdn,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WindowsDetails) Reset() { + *x = WindowsDetails{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WindowsDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WindowsDetails) ProtoMessage() {} + +func (x *WindowsDetails) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WindowsDetails.ProtoReflect.Descriptor instead. +func (*WindowsDetails) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{2} +} + +func (x *WindowsDetails) GetDisks() []*WindowsDisk { + if x != nil { + return x.Disks + } + return nil +} + +func (x *WindowsDetails) GetDomainUuid() string { + if x != nil { + return x.DomainUuid + } + return "" +} + +func (x *WindowsDetails) GetDomainFqdn() string { + if x != nil { + return x.DomainFqdn + } + return "" +} + +// A network interface of a VM. IPv4 only; IPv6 is not yet supported. +type NetworkInterface struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of this interface. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // IPv4 address assigned to this interface. + Ipaddress string `protobuf:"bytes,2,opt,name=ipaddress,proto3" json:"ipaddress,omitempty"` + // MAC address of this interface. + Macaddress string `protobuf:"bytes,3,opt,name=macaddress,proto3" json:"macaddress,omitempty"` // TODO validation + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NetworkInterface) Reset() { + *x = NetworkInterface{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NetworkInterface) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NetworkInterface) ProtoMessage() {} + +func (x *NetworkInterface) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NetworkInterface.ProtoReflect.Descriptor instead. +func (*NetworkInterface) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{3} +} + +func (x *NetworkInterface) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *NetworkInterface) GetIpaddress() string { + if x != nil { + return x.Ipaddress + } + return "" +} + +func (x *NetworkInterface) GetMacaddress() string { + if x != nil { + return x.Macaddress } return "" } @@ -109,7 +485,7 @@ type VMServiceGetRequest struct { func (x *VMServiceGetRequest) Reset() { *x = VMServiceGetRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[1] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -121,7 +497,7 @@ func (x *VMServiceGetRequest) String() string { func (*VMServiceGetRequest) ProtoMessage() {} func (x *VMServiceGetRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[1] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -134,7 +510,7 @@ func (x *VMServiceGetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceGetRequest.ProtoReflect.Descriptor instead. func (*VMServiceGetRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{1} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{4} } func (x *VMServiceGetRequest) GetUuid() string { @@ -162,7 +538,7 @@ type VMServiceGetResponse struct { func (x *VMServiceGetResponse) Reset() { *x = VMServiceGetResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[2] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -174,7 +550,7 @@ func (x *VMServiceGetResponse) String() string { func (*VMServiceGetResponse) ProtoMessage() {} func (x *VMServiceGetResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[2] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -187,7 +563,7 @@ func (x *VMServiceGetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceGetResponse.ProtoReflect.Descriptor instead. func (*VMServiceGetResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{2} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{5} } func (x *VMServiceGetResponse) GetVm() *VMInstance { @@ -197,12 +573,12 @@ func (x *VMServiceGetResponse) GetVm() *VMInstance { return nil } -// Windows-specific create request parts +// Windows-specific create request parts. type VMServiceCreateWindowsRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // Domain UUID + // UUID of the Windows domain the VM should join. Required. DomainUuid string `protobuf:"bytes,1,opt,name=domain_uuid,json=domainUuid,proto3" json:"domain_uuid,omitempty"` - // // Windows Disk + // Disk configuration for the Windows VM. Disk *WindowsDisk `protobuf:"bytes,2,opt,name=disk,proto3" json:"disk,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -210,7 +586,7 @@ type VMServiceCreateWindowsRequest struct { func (x *VMServiceCreateWindowsRequest) Reset() { *x = VMServiceCreateWindowsRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -222,7 +598,7 @@ func (x *VMServiceCreateWindowsRequest) String() string { func (*VMServiceCreateWindowsRequest) ProtoMessage() {} func (x *VMServiceCreateWindowsRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -235,7 +611,7 @@ func (x *VMServiceCreateWindowsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceCreateWindowsRequest.ProtoReflect.Descriptor instead. func (*VMServiceCreateWindowsRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{3} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{6} } func (x *VMServiceCreateWindowsRequest) GetDomainUuid() string { @@ -252,12 +628,12 @@ func (x *VMServiceCreateWindowsRequest) GetDisk() *WindowsDisk { return nil } -// Linux-specific create request parts +// Linux-specific create request parts. type VMServiceCreateLinuxRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // LDAP UUID + // UUID of the LDAP directory the VM should integrate with. Required. LdapUuid string `protobuf:"bytes,1,opt,name=ldap_uuid,json=ldapUuid,proto3" json:"ldap_uuid,omitempty"` - // Linux Disk + // Disk configuration for the Linux VM. Disk *LinuxDisk `protobuf:"bytes,2,opt,name=disk,proto3" json:"disk,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -265,7 +641,7 @@ type VMServiceCreateLinuxRequest struct { func (x *VMServiceCreateLinuxRequest) Reset() { *x = VMServiceCreateLinuxRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[4] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -277,7 +653,7 @@ func (x *VMServiceCreateLinuxRequest) String() string { func (*VMServiceCreateLinuxRequest) ProtoMessage() {} func (x *VMServiceCreateLinuxRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[4] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -290,7 +666,7 @@ func (x *VMServiceCreateLinuxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceCreateLinuxRequest.ProtoReflect.Descriptor instead. func (*VMServiceCreateLinuxRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{4} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{7} } func (x *VMServiceCreateLinuxRequest) GetLdapUuid() string { @@ -307,47 +683,42 @@ func (x *VMServiceCreateLinuxRequest) GetDisk() *LinuxDisk { return nil } -// VMServiceCreateRequest TODO +// Request to create a new VM instance. type VMServiceCreateRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // Project of the VM + // UUID of the project this VM belongs to. Required. ProjectUuid string `protobuf:"bytes,1,opt,name=project_uuid,json=projectUuid,proto3" json:"project_uuid,omitempty"` - // Name of the VM + // Optional name for the VM. The FQDN is derived from this value. Name *string `protobuf:"bytes,2,opt,name=name,proto3,oneof" json:"name,omitempty"` - // Number of CPUs of this VM - Cpu uint32 `protobuf:"varint,3,opt,name=cpu,proto3" json:"cpu,omitempty"` - // RAM of the VM in GB (TODO 2^n validation) - Ram uint32 `protobuf:"varint,4,opt,name=ram,proto3" json:"ram,omitempty"` - // OS Uuid of the OS to install in the VM instance - OsUuid string `protobuf:"bytes,5,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` - // VLAN Uuid of the VLAN to install in the VM instance into - VlanUuid string `protobuf:"bytes,6,opt,name=vlan_uuid,json=vlanUuid,proto3" json:"vlan_uuid,omitempty"` - // Location Uuid of the datacenter location to install in the VM instance - LocationUuid string `protobuf:"bytes,7,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` - // Contact Uuid of who is the responsible contact of the VM instance - // TODO hier ist noch Klärungsbedarf. Ansprechpartner hängt nicht mal an einem echten user im system - // TODO sondern sind einfach nur Kontaktdaten, die an die Entity hingehängt wird. - // TODO aktuell hängt dies in der nulink api - // TODO labels als Option? - // TODO what about dsgvo? - // TODO daten im service now? - // TODO eventuell im tenant-apiserver Kontakte erlauben? - // TODO was macht FCN? wäre das für sie auch sinnvoll? - // TODO is required - ContactUuid string `protobuf:"bytes,8,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` - // Replaces optional ContractNumber, TransactionNumber, TechnicalKey, AccountingKey + // UUID of the operating system image to install. Required. + OsUuid string `protobuf:"bytes,3,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` + // UUID of the VLAN network to attach the VM to. Required. + // Obtainable via the VLAN list endpoint. + VlanUuid string `protobuf:"bytes,4,opt,name=vlan_uuid,json=vlanUuid,proto3" json:"vlan_uuid,omitempty"` + // UUID of the datacenter location. Required. + // The VM is automatically scheduled into one data center within the chosen location; + // users select the city but not the specific datacenter. + LocationUuid string `protobuf:"bytes,5,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` + // TODO: Contact UUID – open discussion with FCN on how to model responsible contacts. + // GDPR considerations pending. May become a dedicated /contact endpoint. + ContactUuid string `protobuf:"bytes,6,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` + // Number of CPU cores. + Cpu uint32 `protobuf:"varint,7,opt,name=cpu,proto3" json:"cpu,omitempty"` + // RAM in GB. Must be a power of 2. + Ram uint32 `protobuf:"varint,8,opt,name=ram,proto3" json:"ram,omitempty"` + // Internal reference number provided by the user, e.g. a ticket ID. Free text. Required. + OrderNumber string `protobuf:"bytes,9,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // Optional key-value labels for accounting purposes + // (e.g. contract number, transaction number, technical key, accounting key). Labels *v1.Labels `protobuf:"bytes,10,opt,name=labels,proto3" json:"labels,omitempty"` - // Order number muss unbedingt mitgegeben werden - // Hängt sogar z.b. am VM restart. - // Wird für gewöhnlich vom User angegeben. - OrderNumber string `protobuf:"bytes,11,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` - // Currently no different backup plans, just true or false - Backup bool `protobuf:"varint,12,opt,name=backup,proto3" json:"backup,omitempty"` - // V0, V1, V2, V3 -> highest=best - Availability string `protobuf:"bytes,13,opt,name=availability,proto3" json:"availability,omitempty"` - // SZ1, SZ2, SZ3 -> highest=best - Serviceclass string `protobuf:"bytes,14,opt,name=serviceclass,proto3" json:"serviceclass,omitempty"` - // TODO differentiation Linux/Windows + // Whether backup is enabled. Simple on/off toggle; no distinct backup plans. Required. + Backup bool `protobuf:"varint,11,opt,name=backup,proto3" json:"backup,omitempty"` + // Availability level: v0, v1, v2, v3 (higher value = higher availability). Required. + Availability string `protobuf:"bytes,12,opt,name=availability,proto3" json:"availability,omitempty"` + // Service class: sz1, sz2, sz3 (higher value = higher tier). Required. + // Only certain combinations with availability are valid; enforced by the backend. + Serviceclass string `protobuf:"bytes,13,opt,name=serviceclass,proto3" json:"serviceclass,omitempty"` + // Specifies the OS type and its associated configuration. Exactly one must be set. // // Types that are valid to be assigned to Vmtype: // @@ -360,7 +731,7 @@ type VMServiceCreateRequest struct { func (x *VMServiceCreateRequest) Reset() { *x = VMServiceCreateRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -372,7 +743,7 @@ func (x *VMServiceCreateRequest) String() string { func (*VMServiceCreateRequest) ProtoMessage() {} func (x *VMServiceCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -385,7 +756,7 @@ func (x *VMServiceCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceCreateRequest.ProtoReflect.Descriptor instead. func (*VMServiceCreateRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{5} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{8} } func (x *VMServiceCreateRequest) GetProjectUuid() string { @@ -402,20 +773,6 @@ func (x *VMServiceCreateRequest) GetName() string { return "" } -func (x *VMServiceCreateRequest) GetCpu() uint32 { - if x != nil { - return x.Cpu - } - return 0 -} - -func (x *VMServiceCreateRequest) GetRam() uint32 { - if x != nil { - return x.Ram - } - return 0 -} - func (x *VMServiceCreateRequest) GetOsUuid() string { if x != nil { return x.OsUuid @@ -444,11 +801,18 @@ func (x *VMServiceCreateRequest) GetContactUuid() string { return "" } -func (x *VMServiceCreateRequest) GetLabels() *v1.Labels { +func (x *VMServiceCreateRequest) GetCpu() uint32 { if x != nil { - return x.Labels + return x.Cpu } - return nil + return 0 +} + +func (x *VMServiceCreateRequest) GetRam() uint32 { + if x != nil { + return x.Ram + } + return 0 } func (x *VMServiceCreateRequest) GetOrderNumber() string { @@ -458,6 +822,13 @@ func (x *VMServiceCreateRequest) GetOrderNumber() string { return "" } +func (x *VMServiceCreateRequest) GetLabels() *v1.Labels { + if x != nil { + return x.Labels + } + return nil +} + func (x *VMServiceCreateRequest) GetBackup() bool { if x != nil { return x.Backup @@ -509,37 +880,37 @@ type isVMServiceCreateRequest_Vmtype interface { } type VMServiceCreateRequest_Windows struct { - // Windows Disk and Domain - Windows *VMServiceCreateWindowsRequest `protobuf:"bytes,21,opt,name=windows,proto3,oneof"` + // Windows-specific settings (domain + disk). + Windows *VMServiceCreateWindowsRequest `protobuf:"bytes,14,opt,name=windows,proto3,oneof"` } type VMServiceCreateRequest_Linux struct { - // Linux Disk and LDAP - Linux *VMServiceCreateLinuxRequest `protobuf:"bytes,22,opt,name=linux,proto3,oneof"` + // Linux-specific settings (LDAP + disk). + Linux *VMServiceCreateLinuxRequest `protobuf:"bytes,15,opt,name=linux,proto3,oneof"` } func (*VMServiceCreateRequest_Windows) isVMServiceCreateRequest_Vmtype() {} func (*VMServiceCreateRequest_Linux) isVMServiceCreateRequest_Vmtype() {} -// LinuxDisk +// Disk configuration for a Linux VM. type LinuxDisk struct { state protoimpl.MessageState `protogen:"open.v1"` - // AutoExtend if set to true the disk grows automatically + // If true, the disk grows automatically when space runs low. AutoExtend bool `protobuf:"varint,1,opt,name=auto_extend,json=autoExtend,proto3" json:"auto_extend,omitempty"` - // Size if the disk in GB - SizeInGb *uint64 `protobuf:"varint,2,opt,name=size_in_gb,json=sizeInGb,proto3,oneof" json:"size_in_gb,omitempty"` // TODO discuss how this could be optional - // Label of the disk + // Size of the disk in GB. + SizeInGb *uint64 `protobuf:"varint,2,opt,name=size_in_gb,json=sizeInGb,proto3,oneof" json:"size_in_gb,omitempty"` + // Label (name) of the disk. Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"` - // MountPoint where this disk should be mounted - MountPoint *string `protobuf:"bytes,5,opt,name=mount_point,json=mountPoint,proto3,oneof" json:"mount_point,omitempty"` // TODO this requires a Filesystem on the disk ? + // Filesystem path where this disk should be mounted (e.g. "/data"). + MountPoint *string `protobuf:"bytes,5,opt,name=mount_point,json=mountPoint,proto3,oneof" json:"mount_point,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *LinuxDisk) Reset() { *x = LinuxDisk{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -551,7 +922,7 @@ func (x *LinuxDisk) String() string { func (*LinuxDisk) ProtoMessage() {} func (x *LinuxDisk) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -564,7 +935,7 @@ func (x *LinuxDisk) ProtoReflect() protoreflect.Message { // Deprecated: Use LinuxDisk.ProtoReflect.Descriptor instead. func (*LinuxDisk) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{6} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{9} } func (x *LinuxDisk) GetAutoExtend() bool { @@ -595,16 +966,16 @@ func (x *LinuxDisk) GetMountPoint() string { return "" } -// WindowsDisk +// Disk configuration for a Windows VM. type WindowsDisk struct { state protoimpl.MessageState `protogen:"open.v1"` - // AutoExtend if set to true the disk grows automatically + // If true, the disk grows automatically when space runs low. AutoExtend bool `protobuf:"varint,1,opt,name=auto_extend,json=autoExtend,proto3" json:"auto_extend,omitempty"` - // Size if the disk in GB - SizeInGb *uint64 `protobuf:"varint,2,opt,name=size_in_gb,json=sizeInGb,proto3,oneof" json:"size_in_gb,omitempty"` // TODO discuss how this could be optional - // DriveLetter where this disk should be assigned + // Size of the disk in GB. + SizeInGb *uint64 `protobuf:"varint,2,opt,name=size_in_gb,json=sizeInGb,proto3,oneof" json:"size_in_gb,omitempty"` + // Drive letter assigned to this disk (e.g. "D"). Driveletter *string `protobuf:"bytes,3,opt,name=driveletter,proto3,oneof" json:"driveletter,omitempty"` - // Label of the disk + // Label (name) of the disk. Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -612,7 +983,7 @@ type WindowsDisk struct { func (x *WindowsDisk) Reset() { *x = WindowsDisk{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -624,7 +995,7 @@ func (x *WindowsDisk) String() string { func (*WindowsDisk) ProtoMessage() {} func (x *WindowsDisk) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -637,7 +1008,7 @@ func (x *WindowsDisk) ProtoReflect() protoreflect.Message { // Deprecated: Use WindowsDisk.ProtoReflect.Descriptor instead. func (*WindowsDisk) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{7} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{10} } func (x *WindowsDisk) GetAutoExtend() bool { @@ -677,7 +1048,7 @@ type VMServiceCreateResponse struct { func (x *VMServiceCreateResponse) Reset() { *x = VMServiceCreateResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -689,7 +1060,7 @@ func (x *VMServiceCreateResponse) String() string { func (*VMServiceCreateResponse) ProtoMessage() {} func (x *VMServiceCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -702,14 +1073,14 @@ func (x *VMServiceCreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceCreateResponse.ProtoReflect.Descriptor instead. func (*VMServiceCreateResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{8} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{11} } // VMServiceUpdateRequest TODO type VMServiceUpdateRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // Project of the VM - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + ProjectUuid string `protobuf:"bytes,1,opt,name=project_uuid,json=projectUuid,proto3" json:"project_uuid,omitempty"` // UpdateMeta contains the timestamp and strategy to be used in this update request. UpdateMeta *v1.UpdateMeta `protobuf:"bytes,2,opt,name=update_meta,json=updateMeta,proto3" json:"update_meta,omitempty"` unknownFields protoimpl.UnknownFields @@ -718,7 +1089,7 @@ type VMServiceUpdateRequest struct { func (x *VMServiceUpdateRequest) Reset() { *x = VMServiceUpdateRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -730,7 +1101,7 @@ func (x *VMServiceUpdateRequest) String() string { func (*VMServiceUpdateRequest) ProtoMessage() {} func (x *VMServiceUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -743,12 +1114,12 @@ func (x *VMServiceUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceUpdateRequest.ProtoReflect.Descriptor instead. func (*VMServiceUpdateRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{9} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{12} } -func (x *VMServiceUpdateRequest) GetProject() string { +func (x *VMServiceUpdateRequest) GetProjectUuid() string { if x != nil { - return x.Project + return x.ProjectUuid } return "" } @@ -769,7 +1140,7 @@ type VMServiceUpdateResponse struct { func (x *VMServiceUpdateResponse) Reset() { *x = VMServiceUpdateResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -781,7 +1152,7 @@ func (x *VMServiceUpdateResponse) String() string { func (*VMServiceUpdateResponse) ProtoMessage() {} func (x *VMServiceUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -794,21 +1165,23 @@ func (x *VMServiceUpdateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceUpdateResponse.ProtoReflect.Descriptor instead. func (*VMServiceUpdateResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{10} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{13} } -// VMServiceListRequest TODO +// VMServiceListRequest type VMServiceListRequest struct { state protoimpl.MessageState `protogen:"open.v1"` + // Tenant of the VM + Tenant *string `protobuf:"bytes,1,opt,name=tenant,proto3,oneof" json:"tenant,omitempty"` // Project of the VM - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + ProjectUuid *string `protobuf:"bytes,2,opt,name=project_uuid,json=projectUuid,proto3,oneof" json:"project_uuid,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *VMServiceListRequest) Reset() { *x = VMServiceListRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -820,7 +1193,7 @@ func (x *VMServiceListRequest) String() string { func (*VMServiceListRequest) ProtoMessage() {} func (x *VMServiceListRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -833,26 +1206,35 @@ func (x *VMServiceListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceListRequest.ProtoReflect.Descriptor instead. func (*VMServiceListRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{11} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{14} } -func (x *VMServiceListRequest) GetProject() string { - if x != nil { - return x.Project +func (x *VMServiceListRequest) GetTenant() string { + if x != nil && x.Tenant != nil { + return *x.Tenant + } + return "" +} + +func (x *VMServiceListRequest) GetProjectUuid() string { + if x != nil && x.ProjectUuid != nil { + return *x.ProjectUuid } return "" } -// VMServiceListResponse TODO +// VMServiceListResponse type VMServiceListResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` + state protoimpl.MessageState `protogen:"open.v1"` + // List of VM instances + Vms []*VMInstance `protobuf:"bytes,1,rep,name=vms,proto3" json:"vms,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *VMServiceListResponse) Reset() { *x = VMServiceListResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[12] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -864,7 +1246,7 @@ func (x *VMServiceListResponse) String() string { func (*VMServiceListResponse) ProtoMessage() {} func (x *VMServiceListResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[12] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -877,7 +1259,14 @@ func (x *VMServiceListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceListResponse.ProtoReflect.Descriptor instead. func (*VMServiceListResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{12} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{15} +} + +func (x *VMServiceListResponse) GetVms() []*VMInstance { + if x != nil { + return x.Vms + } + return nil } // VMServiceDeleteRequest TODO @@ -891,7 +1280,7 @@ type VMServiceDeleteRequest struct { func (x *VMServiceDeleteRequest) Reset() { *x = VMServiceDeleteRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[13] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -903,7 +1292,7 @@ func (x *VMServiceDeleteRequest) String() string { func (*VMServiceDeleteRequest) ProtoMessage() {} func (x *VMServiceDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[13] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -916,7 +1305,7 @@ func (x *VMServiceDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceDeleteRequest.ProtoReflect.Descriptor instead. func (*VMServiceDeleteRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{13} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{16} } func (x *VMServiceDeleteRequest) GetProject() string { @@ -935,7 +1324,7 @@ type VMServiceDeleteResponse struct { func (x *VMServiceDeleteResponse) Reset() { *x = VMServiceDeleteResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[14] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -947,7 +1336,7 @@ func (x *VMServiceDeleteResponse) String() string { func (*VMServiceDeleteResponse) ProtoMessage() {} func (x *VMServiceDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[14] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -960,20 +1349,57 @@ func (x *VMServiceDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VMServiceDeleteResponse.ProtoReflect.Descriptor instead. func (*VMServiceDeleteResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{14} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{17} } var File_fits_api_vm_v1_vm_proto protoreflect.FileDescriptor const file_fits_api_vm_v1_vm_proto_rawDesc = "" + "\n" + - "\x17fits/api/vm/v1/vm.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x96\x01\n" + + "\x17fits/api/vm/v1/vm.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x19fits/api/vm/v1/vlan.proto\"\xa8\x06\n" + "\n" + "VMInstance\x12\x1c\n" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n" + "\x04meta\x18\x02 \x01(\v2\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n" + - "\x04name\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\"\n" + - "\aproject\x18\x04 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"W\n" + + "\x04fqdn\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04fqdn\x12+\n" + + "\fproject_uuid\x18\x04 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vprojectUuid\x12!\n" + + "\aos_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n" + + "\rlocation_uuid\x18\x06 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\flocationUuid\x12+\n" + + "\fcontact_uuid\x18\a \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\x12\x10\n" + + "\x03cpu\x18\b \x01(\rR\x03cpu\x12\x10\n" + + "\x03ram\x18\t \x01(\rR\x03ram\x12!\n" + + "\forder_number\x18\n" + + " \x01(\tR\vorderNumber\x12\x1a\n" + + "\bcontract\x18\v \x01(\bR\bcontract\x12\x16\n" + + "\x06backup\x18\f \x01(\bR\x06backup\x12\"\n" + + "\favailability\x18\r \x01(\tR\favailability\x12\"\n" + + "\fserviceclass\x18\x0e \x01(\tR\fserviceclass\x12\x16\n" + + "\x06status\x18\x19 \x01(\tR\x06status\x12\x1f\n" + + "\vstatus_info\x18\x10 \x01(\tR\n" + + "statusInfo\x12I\n" + + "\x0fwindows_details\x18\x11 \x01(\v2\x1e.fits.api.vm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12C\n" + + "\rlinux_details\x18\x12 \x01(\v2\x1c.fits.api.vm.v1.LinuxDetailsH\x00R\flinuxDetails\x12@\n" + + "\n" + + "interfaces\x18\x13 \x03(\v2 .fits.api.vm.v1.NetworkInterfaceR\n" + + "interfaces\x12(\n" + + "\x04vlan\x18\x14 \x01(\v2\x14.fits.api.vm.v1.VlanR\x04vlanB\x10\n" + + "\adetails\x12\x05\xbaH\x02\b\x01\"\x90\x01\n" + + "\fLinuxDetails\x12/\n" + + "\x05disks\x18\x01 \x03(\v2\x19.fits.api.vm.v1.LinuxDiskR\x05disks\x12%\n" + + "\tldap_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bldapUuid\x12(\n" + + "\tldap_fqdn\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\bldapFqdn\"\x9c\x01\n" + + "\x0eWindowsDetails\x121\n" + + "\x05disks\x18\x01 \x03(\v2\x1b.fits.api.vm.v1.WindowsDiskR\x05disks\x12)\n" + + "\vdomain_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\n" + + "domainUuid\x12,\n" + + "\vdomain_fqdn\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\n" + + "domainFqdn\"{\n" + + "\x10NetworkInterface\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n" + + "\tipaddress\x18\x02 \x01(\tB\v\xbaH\br\x06賮\xb1\x02\x01R\tipaddress\x12\x1e\n" + + "\n" + + "macaddress\x18\x03 \x01(\tR\n" + + "macaddress\"W\n" + "\x13VMServiceGetRequest\x12\x1c\n" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"B\n" + @@ -988,21 +1414,21 @@ const file_fits_api_vm_v1_vm_proto_rawDesc = "" + "\x04disk\x18\x02 \x01(\v2\x19.fits.api.vm.v1.LinuxDiskR\x04disk\"\x8f\x05\n" + "\x16VMServiceCreateRequest\x12+\n" + "\fproject_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vprojectUuid\x12$\n" + - "\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12\x10\n" + - "\x03cpu\x18\x03 \x01(\rR\x03cpu\x12\x10\n" + - "\x03ram\x18\x04 \x01(\rR\x03ram\x12!\n" + - "\aos_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n" + - "\tvlan_uuid\x18\x06 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bvlanUuid\x12-\n" + - "\rlocation_uuid\x18\a \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\flocationUuid\x12+\n" + - "\fcontact_uuid\x18\b \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\x12+\n" + + "\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n" + + "\aos_uuid\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n" + + "\tvlan_uuid\x18\x04 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bvlanUuid\x12-\n" + + "\rlocation_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\flocationUuid\x12+\n" + + "\fcontact_uuid\x18\x06 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\x12\x10\n" + + "\x03cpu\x18\a \x01(\rR\x03cpu\x12\x10\n" + + "\x03ram\x18\b \x01(\rR\x03ram\x12!\n" + + "\forder_number\x18\t \x01(\tR\vorderNumber\x12+\n" + "\x06labels\x18\n" + - " \x01(\v2\x13.fits.api.v1.LabelsR\x06labels\x12!\n" + - "\forder_number\x18\v \x01(\tR\vorderNumber\x12\x16\n" + - "\x06backup\x18\f \x01(\bR\x06backup\x12\"\n" + - "\favailability\x18\r \x01(\tR\favailability\x12\"\n" + - "\fserviceclass\x18\x0e \x01(\tR\fserviceclass\x12I\n" + - "\awindows\x18\x15 \x01(\v2-.fits.api.vm.v1.VMServiceCreateWindowsRequestH\x00R\awindows\x12C\n" + - "\x05linux\x18\x16 \x01(\v2+.fits.api.vm.v1.VMServiceCreateLinuxRequestH\x00R\x05linuxB\x0f\n" + + " \x01(\v2\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n" + + "\x06backup\x18\v \x01(\bR\x06backup\x12\"\n" + + "\favailability\x18\f \x01(\tR\favailability\x12\"\n" + + "\fserviceclass\x18\r \x01(\tR\fserviceclass\x12I\n" + + "\awindows\x18\x0e \x01(\v2-.fits.api.vm.v1.VMServiceCreateWindowsRequestH\x00R\awindows\x12C\n" + + "\x05linux\x18\x0f \x01(\v2+.fits.api.vm.v1.VMServiceCreateLinuxRequestH\x00R\x05linuxB\x0f\n" + "\x06vmtype\x12\x05\xbaH\x02\b\x01B\a\n" + "\x05_name\"\xaa\x01\n" + "\tLinuxDisk\x12\x1f\n" + @@ -1024,15 +1450,19 @@ const file_fits_api_vm_v1_vm_proto_rawDesc = "" + "\x05label\x18\x04 \x01(\tR\x05labelB\r\n" + "\v_size_in_gbB\x0e\n" + "\f_driveletter\"\x19\n" + - "\x17VMServiceCreateResponse\"~\n" + - "\x16VMServiceUpdateRequest\x12\"\n" + - "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12@\n" + + "\x17VMServiceCreateResponse\"\x87\x01\n" + + "\x16VMServiceUpdateRequest\x12+\n" + + "\fproject_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vprojectUuid\x12@\n" + "\vupdate_meta\x18\x02 \x01(\v2\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\n" + "updateMeta\"\x19\n" + - "\x17VMServiceUpdateResponse\":\n" + - "\x14VMServiceListRequest\x12\"\n" + - "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"\x17\n" + - "\x15VMServiceListResponse\"<\n" + + "\x17VMServiceUpdateResponse\"\x81\x01\n" + + "\x14VMServiceListRequest\x12\x1b\n" + + "\x06tenant\x18\x01 \x01(\tH\x00R\x06tenant\x88\x01\x01\x120\n" + + "\fproject_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x01R\vprojectUuid\x88\x01\x01B\t\n" + + "\a_tenantB\x0f\n" + + "\r_project_uuid\"E\n" + + "\x15VMServiceListResponse\x12,\n" + + "\x03vms\x18\x01 \x03(\v2\x1a.fits.api.vm.v1.VMInstanceR\x03vms\"<\n" + "\x16VMServiceDeleteRequest\x12\"\n" + "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"\x19\n" + "\x17VMServiceDeleteResponse2\x81\x04\n" + @@ -1059,51 +1489,62 @@ func file_fits_api_vm_v1_vm_proto_rawDescGZIP() []byte { return file_fits_api_vm_v1_vm_proto_rawDescData } -var file_fits_api_vm_v1_vm_proto_msgTypes = make([]protoimpl.MessageInfo, 15) +var file_fits_api_vm_v1_vm_proto_msgTypes = make([]protoimpl.MessageInfo, 18) var file_fits_api_vm_v1_vm_proto_goTypes = []any{ (*VMInstance)(nil), // 0: fits.api.vm.v1.VMInstance - (*VMServiceGetRequest)(nil), // 1: fits.api.vm.v1.VMServiceGetRequest - (*VMServiceGetResponse)(nil), // 2: fits.api.vm.v1.VMServiceGetResponse - (*VMServiceCreateWindowsRequest)(nil), // 3: fits.api.vm.v1.VMServiceCreateWindowsRequest - (*VMServiceCreateLinuxRequest)(nil), // 4: fits.api.vm.v1.VMServiceCreateLinuxRequest - (*VMServiceCreateRequest)(nil), // 5: fits.api.vm.v1.VMServiceCreateRequest - (*LinuxDisk)(nil), // 6: fits.api.vm.v1.LinuxDisk - (*WindowsDisk)(nil), // 7: fits.api.vm.v1.WindowsDisk - (*VMServiceCreateResponse)(nil), // 8: fits.api.vm.v1.VMServiceCreateResponse - (*VMServiceUpdateRequest)(nil), // 9: fits.api.vm.v1.VMServiceUpdateRequest - (*VMServiceUpdateResponse)(nil), // 10: fits.api.vm.v1.VMServiceUpdateResponse - (*VMServiceListRequest)(nil), // 11: fits.api.vm.v1.VMServiceListRequest - (*VMServiceListResponse)(nil), // 12: fits.api.vm.v1.VMServiceListResponse - (*VMServiceDeleteRequest)(nil), // 13: fits.api.vm.v1.VMServiceDeleteRequest - (*VMServiceDeleteResponse)(nil), // 14: fits.api.vm.v1.VMServiceDeleteResponse - (*v1.Meta)(nil), // 15: fits.api.v1.Meta - (*v1.Labels)(nil), // 16: fits.api.v1.Labels - (*v1.UpdateMeta)(nil), // 17: fits.api.v1.UpdateMeta + (*LinuxDetails)(nil), // 1: fits.api.vm.v1.LinuxDetails + (*WindowsDetails)(nil), // 2: fits.api.vm.v1.WindowsDetails + (*NetworkInterface)(nil), // 3: fits.api.vm.v1.NetworkInterface + (*VMServiceGetRequest)(nil), // 4: fits.api.vm.v1.VMServiceGetRequest + (*VMServiceGetResponse)(nil), // 5: fits.api.vm.v1.VMServiceGetResponse + (*VMServiceCreateWindowsRequest)(nil), // 6: fits.api.vm.v1.VMServiceCreateWindowsRequest + (*VMServiceCreateLinuxRequest)(nil), // 7: fits.api.vm.v1.VMServiceCreateLinuxRequest + (*VMServiceCreateRequest)(nil), // 8: fits.api.vm.v1.VMServiceCreateRequest + (*LinuxDisk)(nil), // 9: fits.api.vm.v1.LinuxDisk + (*WindowsDisk)(nil), // 10: fits.api.vm.v1.WindowsDisk + (*VMServiceCreateResponse)(nil), // 11: fits.api.vm.v1.VMServiceCreateResponse + (*VMServiceUpdateRequest)(nil), // 12: fits.api.vm.v1.VMServiceUpdateRequest + (*VMServiceUpdateResponse)(nil), // 13: fits.api.vm.v1.VMServiceUpdateResponse + (*VMServiceListRequest)(nil), // 14: fits.api.vm.v1.VMServiceListRequest + (*VMServiceListResponse)(nil), // 15: fits.api.vm.v1.VMServiceListResponse + (*VMServiceDeleteRequest)(nil), // 16: fits.api.vm.v1.VMServiceDeleteRequest + (*VMServiceDeleteResponse)(nil), // 17: fits.api.vm.v1.VMServiceDeleteResponse + (*v1.Meta)(nil), // 18: fits.api.v1.Meta + (*Vlan)(nil), // 19: fits.api.vm.v1.Vlan + (*v1.Labels)(nil), // 20: fits.api.v1.Labels + (*v1.UpdateMeta)(nil), // 21: fits.api.v1.UpdateMeta } var file_fits_api_vm_v1_vm_proto_depIdxs = []int32{ - 15, // 0: fits.api.vm.v1.VMInstance.meta:type_name -> fits.api.v1.Meta - 0, // 1: fits.api.vm.v1.VMServiceGetResponse.vm:type_name -> fits.api.vm.v1.VMInstance - 7, // 2: fits.api.vm.v1.VMServiceCreateWindowsRequest.disk:type_name -> fits.api.vm.v1.WindowsDisk - 6, // 3: fits.api.vm.v1.VMServiceCreateLinuxRequest.disk:type_name -> fits.api.vm.v1.LinuxDisk - 16, // 4: fits.api.vm.v1.VMServiceCreateRequest.labels:type_name -> fits.api.v1.Labels - 3, // 5: fits.api.vm.v1.VMServiceCreateRequest.windows:type_name -> fits.api.vm.v1.VMServiceCreateWindowsRequest - 4, // 6: fits.api.vm.v1.VMServiceCreateRequest.linux:type_name -> fits.api.vm.v1.VMServiceCreateLinuxRequest - 17, // 7: fits.api.vm.v1.VMServiceUpdateRequest.update_meta:type_name -> fits.api.v1.UpdateMeta - 1, // 8: fits.api.vm.v1.VMService.Get:input_type -> fits.api.vm.v1.VMServiceGetRequest - 5, // 9: fits.api.vm.v1.VMService.Create:input_type -> fits.api.vm.v1.VMServiceCreateRequest - 9, // 10: fits.api.vm.v1.VMService.Update:input_type -> fits.api.vm.v1.VMServiceUpdateRequest - 11, // 11: fits.api.vm.v1.VMService.List:input_type -> fits.api.vm.v1.VMServiceListRequest - 13, // 12: fits.api.vm.v1.VMService.Delete:input_type -> fits.api.vm.v1.VMServiceDeleteRequest - 2, // 13: fits.api.vm.v1.VMService.Get:output_type -> fits.api.vm.v1.VMServiceGetResponse - 8, // 14: fits.api.vm.v1.VMService.Create:output_type -> fits.api.vm.v1.VMServiceCreateResponse - 10, // 15: fits.api.vm.v1.VMService.Update:output_type -> fits.api.vm.v1.VMServiceUpdateResponse - 12, // 16: fits.api.vm.v1.VMService.List:output_type -> fits.api.vm.v1.VMServiceListResponse - 14, // 17: fits.api.vm.v1.VMService.Delete:output_type -> fits.api.vm.v1.VMServiceDeleteResponse - 13, // [13:18] is the sub-list for method output_type - 8, // [8:13] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name + 18, // 0: fits.api.vm.v1.VMInstance.meta:type_name -> fits.api.v1.Meta + 2, // 1: fits.api.vm.v1.VMInstance.windows_details:type_name -> fits.api.vm.v1.WindowsDetails + 1, // 2: fits.api.vm.v1.VMInstance.linux_details:type_name -> fits.api.vm.v1.LinuxDetails + 3, // 3: fits.api.vm.v1.VMInstance.interfaces:type_name -> fits.api.vm.v1.NetworkInterface + 19, // 4: fits.api.vm.v1.VMInstance.vlan:type_name -> fits.api.vm.v1.Vlan + 9, // 5: fits.api.vm.v1.LinuxDetails.disks:type_name -> fits.api.vm.v1.LinuxDisk + 10, // 6: fits.api.vm.v1.WindowsDetails.disks:type_name -> fits.api.vm.v1.WindowsDisk + 0, // 7: fits.api.vm.v1.VMServiceGetResponse.vm:type_name -> fits.api.vm.v1.VMInstance + 10, // 8: fits.api.vm.v1.VMServiceCreateWindowsRequest.disk:type_name -> fits.api.vm.v1.WindowsDisk + 9, // 9: fits.api.vm.v1.VMServiceCreateLinuxRequest.disk:type_name -> fits.api.vm.v1.LinuxDisk + 20, // 10: fits.api.vm.v1.VMServiceCreateRequest.labels:type_name -> fits.api.v1.Labels + 6, // 11: fits.api.vm.v1.VMServiceCreateRequest.windows:type_name -> fits.api.vm.v1.VMServiceCreateWindowsRequest + 7, // 12: fits.api.vm.v1.VMServiceCreateRequest.linux:type_name -> fits.api.vm.v1.VMServiceCreateLinuxRequest + 21, // 13: fits.api.vm.v1.VMServiceUpdateRequest.update_meta:type_name -> fits.api.v1.UpdateMeta + 0, // 14: fits.api.vm.v1.VMServiceListResponse.vms:type_name -> fits.api.vm.v1.VMInstance + 4, // 15: fits.api.vm.v1.VMService.Get:input_type -> fits.api.vm.v1.VMServiceGetRequest + 8, // 16: fits.api.vm.v1.VMService.Create:input_type -> fits.api.vm.v1.VMServiceCreateRequest + 12, // 17: fits.api.vm.v1.VMService.Update:input_type -> fits.api.vm.v1.VMServiceUpdateRequest + 14, // 18: fits.api.vm.v1.VMService.List:input_type -> fits.api.vm.v1.VMServiceListRequest + 16, // 19: fits.api.vm.v1.VMService.Delete:input_type -> fits.api.vm.v1.VMServiceDeleteRequest + 5, // 20: fits.api.vm.v1.VMService.Get:output_type -> fits.api.vm.v1.VMServiceGetResponse + 11, // 21: fits.api.vm.v1.VMService.Create:output_type -> fits.api.vm.v1.VMServiceCreateResponse + 13, // 22: fits.api.vm.v1.VMService.Update:output_type -> fits.api.vm.v1.VMServiceUpdateResponse + 15, // 23: fits.api.vm.v1.VMService.List:output_type -> fits.api.vm.v1.VMServiceListResponse + 17, // 24: fits.api.vm.v1.VMService.Delete:output_type -> fits.api.vm.v1.VMServiceDeleteResponse + 20, // [20:25] is the sub-list for method output_type + 15, // [15:20] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name } func init() { file_fits_api_vm_v1_vm_proto_init() } @@ -1111,19 +1552,25 @@ func file_fits_api_vm_v1_vm_proto_init() { if File_fits_api_vm_v1_vm_proto != nil { return } - file_fits_api_vm_v1_vm_proto_msgTypes[5].OneofWrappers = []any{ + file_fits_api_vm_v1_vlan_proto_init() + file_fits_api_vm_v1_vm_proto_msgTypes[0].OneofWrappers = []any{ + (*VMInstance_WindowsDetails)(nil), + (*VMInstance_LinuxDetails)(nil), + } + file_fits_api_vm_v1_vm_proto_msgTypes[8].OneofWrappers = []any{ (*VMServiceCreateRequest_Windows)(nil), (*VMServiceCreateRequest_Linux)(nil), } - file_fits_api_vm_v1_vm_proto_msgTypes[6].OneofWrappers = []any{} - file_fits_api_vm_v1_vm_proto_msgTypes[7].OneofWrappers = []any{} + file_fits_api_vm_v1_vm_proto_msgTypes[9].OneofWrappers = []any{} + file_fits_api_vm_v1_vm_proto_msgTypes[10].OneofWrappers = []any{} + file_fits_api_vm_v1_vm_proto_msgTypes[14].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_vm_proto_rawDesc), len(file_fits_api_vm_v1_vm_proto_rawDesc)), NumEnums: 0, - NumMessages: 15, + NumMessages: 18, NumExtensions: 0, NumServices: 1, }, diff --git a/js/fits/api/vm/v1/vm_pb.ts b/js/fits/api/vm/v1/vm_pb.ts index 7164f89..3752f4f 100644 --- a/js/fits/api/vm/v1/vm_pb.ts +++ b/js/fits/api/vm/v1/vm_pb.ts @@ -8,47 +8,176 @@ import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb import type { Labels, Meta, UpdateMeta } from "../../v1/common_pb"; import { file_fits_api_v1_common } from "../../v1/common_pb"; import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; +import type { Vlan } from "./vlan_pb"; +import { file_fits_api_vm_v1_vlan } from "./vlan_pb"; import type { Message } from "@bufbuild/protobuf"; /** * Describes the file fits/api/vm/v1/vm.proto. */ export const file_fits_api_vm_v1_vm: GenFile = /*@__PURE__*/ - fileDesc("ChdmaXRzL2FwaS92bS92MS92bS5wcm90bxIOZml0cy5hcGkudm0udjEiewoKVk1JbnN0YW5jZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIfCgRtZXRhGAIgASgLMhEuZml0cy5hcGkudjEuTWV0YRIZCgRuYW1lGAMgASgJQgu6SAhyBsCzrrECARIZCgdwcm9qZWN0GAQgASgJQgi6SAVyA7ABASJIChNWTVNlcnZpY2VHZXRSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBIj4KFFZNU2VydmljZUdldFJlc3BvbnNlEiYKAnZtGAEgASgLMhouZml0cy5hcGkudm0udjEuVk1JbnN0YW5jZSJpCh1WTVNlcnZpY2VDcmVhdGVXaW5kb3dzUmVxdWVzdBIdCgtkb21haW5fdXVpZBgBIAEoCUIIukgFcgOwAQESKQoEZGlzaxgCIAEoCzIbLmZpdHMuYXBpLnZtLnYxLldpbmRvd3NEaXNrImMKG1ZNU2VydmljZUNyZWF0ZUxpbnV4UmVxdWVzdBIbCglsZGFwX3V1aWQYASABKAlCCLpIBXIDsAEBEicKBGRpc2sYAiABKAsyGS5maXRzLmFwaS52bS52MS5MaW51eERpc2si/AMKFlZNU2VydmljZUNyZWF0ZVJlcXVlc3QSHgoMcHJvamVjdF91dWlkGAEgASgJQgi6SAVyA7ABARIeCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECAUgBiAEBEgsKA2NwdRgDIAEoDRILCgNyYW0YBCABKA0SGQoHb3NfdXVpZBgFIAEoCUIIukgFcgOwAQESGwoJdmxhbl91dWlkGAYgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAcgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYCCABKAlCCLpIBXIDsAEBEiMKBmxhYmVscxgKIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVscxIUCgxvcmRlcl9udW1iZXIYCyABKAkSDgoGYmFja3VwGAwgASgIEhQKDGF2YWlsYWJpbGl0eRgNIAEoCRIUCgxzZXJ2aWNlY2xhc3MYDiABKAkSQAoHd2luZG93cxgVIAEoCzItLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUNyZWF0ZVdpbmRvd3NSZXF1ZXN0SAASPAoFbGludXgYFiABKAsyKy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VDcmVhdGVMaW51eFJlcXVlc3RIAEIPCgZ2bXR5cGUSBbpIAggBQgcKBV9uYW1lIoEBCglMaW51eERpc2sSEwoLYXV0b19leHRlbmQYASABKAgSFwoKc2l6ZV9pbl9nYhgCIAEoBEgAiAEBEg0KBWxhYmVsGAQgASgJEhgKC21vdW50X3BvaW50GAUgASgJSAGIAQFCDQoLX3NpemVfaW5fZ2JCDgoMX21vdW50X3BvaW50IoMBCgtXaW5kb3dzRGlzaxITCgthdXRvX2V4dGVuZBgBIAEoCBIXCgpzaXplX2luX2diGAIgASgESACIAQESGAoLZHJpdmVsZXR0ZXIYAyABKAlIAYgBARINCgVsYWJlbBgEIAEoCUINCgtfc2l6ZV9pbl9nYkIOCgxfZHJpdmVsZXR0ZXIiGQoXVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiaQoWVk1TZXJ2aWNlVXBkYXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARI0Cgt1cGRhdGVfbWV0YRgCIAEoCzIXLmZpdHMuYXBpLnYxLlVwZGF0ZU1ldGFCBrpIA8gBASIZChdWTVNlcnZpY2VVcGRhdGVSZXNwb25zZSIxChRWTVNlcnZpY2VMaXN0UmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABASIXChVWTVNlcnZpY2VMaXN0UmVzcG9uc2UiMwoWVk1TZXJ2aWNlRGVsZXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABASIZChdWTVNlcnZpY2VEZWxldGVSZXNwb25zZTKBBAoJVk1TZXJ2aWNlEl0KA0dldBIjLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUdldFJlcXVlc3QaJC5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VHZXRSZXNwb25zZSILyvMYAwECA+DzGAISZQoGQ3JlYXRlEiYuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBonLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmUKBlVwZGF0ZRImLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZVVwZGF0ZVJlcXVlc3QaJy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VVcGRhdGVSZXNwb25zZSIKyvMYAgEC4PMYARJgCgRMaXN0EiQuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlTGlzdFJlcXVlc3QaJS5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmUKBkRlbGV0ZRImLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZURlbGV0ZVJlcXVlc3QaJy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VEZWxldGVSZXNwb25zZSIKyvMYAgEC4PMYAUKlAQoSY29tLmZpdHMuYXBpLnZtLnYxQgdWbVByb3RvUAFaK2dpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3ZtL3YxO3ZtdjGiAgNGQVaqAg5GaXRzLkFwaS5WbS5WMcoCDkZpdHNcQXBpXFZtXFYx4gIaRml0c1xBcGlcVm1cVjFcR1BCTWV0YWRhdGHqAhFGaXRzOjpBcGk6OlZtOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); + fileDesc("ChdmaXRzL2FwaS92bS92MS92bS5wcm90bxIOZml0cy5hcGkudm0udjEi3QQKClZNSW5zdGFuY2USFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEZnFkbhgDIAEoCUILukgIcgbAs66xAgESHgoMcHJvamVjdF91dWlkGAQgASgJQgi6SAVyA7ABARIZCgdvc191dWlkGAUgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAYgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYByABKAlCCLpIBXIDsAEBEgsKA2NwdRgIIAEoDRILCgNyYW0YCSABKA0SFAoMb3JkZXJfbnVtYmVyGAogASgJEhAKCGNvbnRyYWN0GAsgASgIEg4KBmJhY2t1cBgMIAEoCBIUCgxhdmFpbGFiaWxpdHkYDSABKAkSFAoMc2VydmljZWNsYXNzGA4gASgJEg4KBnN0YXR1cxgZIAEoCRITCgtzdGF0dXNfaW5mbxgQIAEoCRI5Cg93aW5kb3dzX2RldGFpbHMYESABKAsyHi5maXRzLmFwaS52bS52MS5XaW5kb3dzRGV0YWlsc0gAEjUKDWxpbnV4X2RldGFpbHMYEiABKAsyHC5maXRzLmFwaS52bS52MS5MaW51eERldGFpbHNIABI0CgppbnRlcmZhY2VzGBMgAygLMiAuZml0cy5hcGkudm0udjEuTmV0d29ya0ludGVyZmFjZRIiCgR2bGFuGBQgASgLMhQuZml0cy5hcGkudm0udjEuVmxhbkIQCgdkZXRhaWxzEgW6SAIIASJ1CgxMaW51eERldGFpbHMSKAoFZGlza3MYASADKAsyGS5maXRzLmFwaS52bS52MS5MaW51eERpc2sSGwoJbGRhcF91dWlkGAIgASgJQgi6SAVyA7ABARIeCglsZGFwX2ZxZG4YAyABKAlCC7pICHIGwLOusQIBIn0KDldpbmRvd3NEZXRhaWxzEioKBWRpc2tzGAEgAygLMhsuZml0cy5hcGkudm0udjEuV2luZG93c0Rpc2sSHQoLZG9tYWluX3V1aWQYAiABKAlCCLpIBXIDsAEBEiAKC2RvbWFpbl9mcWRuGAMgASgJQgu6SAhyBsCzrrECASJeChBOZXR3b3JrSW50ZXJmYWNlEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEh4KCWlwYWRkcmVzcxgCIAEoCUILukgIcgbos66xAgESEgoKbWFjYWRkcmVzcxgDIAEoCSJIChNWTVNlcnZpY2VHZXRSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBIj4KFFZNU2VydmljZUdldFJlc3BvbnNlEiYKAnZtGAEgASgLMhouZml0cy5hcGkudm0udjEuVk1JbnN0YW5jZSJpCh1WTVNlcnZpY2VDcmVhdGVXaW5kb3dzUmVxdWVzdBIdCgtkb21haW5fdXVpZBgBIAEoCUIIukgFcgOwAQESKQoEZGlzaxgCIAEoCzIbLmZpdHMuYXBpLnZtLnYxLldpbmRvd3NEaXNrImMKG1ZNU2VydmljZUNyZWF0ZUxpbnV4UmVxdWVzdBIbCglsZGFwX3V1aWQYASABKAlCCLpIBXIDsAEBEicKBGRpc2sYAiABKAsyGS5maXRzLmFwaS52bS52MS5MaW51eERpc2si/AMKFlZNU2VydmljZUNyZWF0ZVJlcXVlc3QSHgoMcHJvamVjdF91dWlkGAEgASgJQgi6SAVyA7ABARIeCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECAUgBiAEBEhkKB29zX3V1aWQYAyABKAlCCLpIBXIDsAEBEhsKCXZsYW5fdXVpZBgEIAEoCUIIukgFcgOwAQESHwoNbG9jYXRpb25fdXVpZBgFIAEoCUIIukgFcgOwAQESHgoMY29udGFjdF91dWlkGAYgASgJQgi6SAVyA7ABARILCgNjcHUYByABKA0SCwoDcmFtGAggASgNEhQKDG9yZGVyX251bWJlchgJIAEoCRIjCgZsYWJlbHMYCiABKAsyEy5maXRzLmFwaS52MS5MYWJlbHMSDgoGYmFja3VwGAsgASgIEhQKDGF2YWlsYWJpbGl0eRgMIAEoCRIUCgxzZXJ2aWNlY2xhc3MYDSABKAkSQAoHd2luZG93cxgOIAEoCzItLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUNyZWF0ZVdpbmRvd3NSZXF1ZXN0SAASPAoFbGludXgYDyABKAsyKy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VDcmVhdGVMaW51eFJlcXVlc3RIAEIPCgZ2bXR5cGUSBbpIAggBQgcKBV9uYW1lIoEBCglMaW51eERpc2sSEwoLYXV0b19leHRlbmQYASABKAgSFwoKc2l6ZV9pbl9nYhgCIAEoBEgAiAEBEg0KBWxhYmVsGAQgASgJEhgKC21vdW50X3BvaW50GAUgASgJSAGIAQFCDQoLX3NpemVfaW5fZ2JCDgoMX21vdW50X3BvaW50IoMBCgtXaW5kb3dzRGlzaxITCgthdXRvX2V4dGVuZBgBIAEoCBIXCgpzaXplX2luX2diGAIgASgESACIAQESGAoLZHJpdmVsZXR0ZXIYAyABKAlIAYgBARINCgVsYWJlbBgEIAEoCUINCgtfc2l6ZV9pbl9nYkIOCgxfZHJpdmVsZXR0ZXIiGQoXVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2UibgoWVk1TZXJ2aWNlVXBkYXRlUmVxdWVzdBIeCgxwcm9qZWN0X3V1aWQYASABKAlCCLpIBXIDsAEBEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBIhkKF1ZNU2VydmljZVVwZGF0ZVJlc3BvbnNlImwKFFZNU2VydmljZUxpc3RSZXF1ZXN0EhMKBnRlbmFudBgBIAEoCUgAiAEBEiMKDHByb2plY3RfdXVpZBgCIAEoCUIIukgFcgOwAQFIAYgBAUIJCgdfdGVuYW50Qg8KDV9wcm9qZWN0X3V1aWQiQAoVVk1TZXJ2aWNlTGlzdFJlc3BvbnNlEicKA3ZtcxgBIAMoCzIaLmZpdHMuYXBpLnZtLnYxLlZNSW5zdGFuY2UiMwoWVk1TZXJ2aWNlRGVsZXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABASIZChdWTVNlcnZpY2VEZWxldGVSZXNwb25zZTKBBAoJVk1TZXJ2aWNlEl0KA0dldBIjLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUdldFJlcXVlc3QaJC5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VHZXRSZXNwb25zZSILyvMYAwECA+DzGAISZQoGQ3JlYXRlEiYuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBonLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmUKBlVwZGF0ZRImLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZVVwZGF0ZVJlcXVlc3QaJy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VVcGRhdGVSZXNwb25zZSIKyvMYAgEC4PMYARJgCgRMaXN0EiQuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlTGlzdFJlcXVlc3QaJS5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmUKBkRlbGV0ZRImLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZURlbGV0ZVJlcXVlc3QaJy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VEZWxldGVSZXNwb25zZSIKyvMYAgEC4PMYAUKlAQoSY29tLmZpdHMuYXBpLnZtLnYxQgdWbVByb3RvUAFaK2dpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3ZtL3YxO3ZtdjGiAgNGQVaqAg5GaXRzLkFwaS5WbS5WMcoCDkZpdHNcQXBpXFZtXFYx4gIaRml0c1xBcGlcVm1cVjFcR1BCTWV0YWRhdGHqAhFGaXRzOjpBcGk6OlZtOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_fits_api_vm_v1_vlan]); /** * VM Instance Messages + * A VM instance as returned by the API. * * @generated from message fits.api.vm.v1.VMInstance */ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { /** - * Uuid of this VM + * UUID of this VM. * * @generated from field: string uuid = 1; */ uuid: string; /** - * Meta for this VM + * Metadata for this VM. + * TODO dates are available in the nulink db, but not passed through yet. * * @generated from field: fits.api.v1.Meta meta = 2; */ meta?: Meta | undefined; /** - * Name of this VM + * FQDN of the VM. Derived from the optional name set at creation, + * or generated by the backend if none was provided. * - * @generated from field: string name = 3; + * @generated from field: string fqdn = 3; */ - name: string; + fqdn: string; /** - * Project where this VM belongs to + * UUID of the project this VM belongs to. * - * @generated from field: string project = 4; + * @generated from field: string project_uuid = 4; */ - project: string; + projectUuid: string; + + /** + * UUID of the operating system image installed on the VM. + * Resolve the human-readable title via the OS endpoint. + * + * @generated from field: string os_uuid = 5; + */ + osUuid: string; + + /** + * UUID of the datacenter location. + * The VM is automatically scheduled into one pod within the chosen location; + * users select the city but not the specific datacenter. + * + * @generated from field: string location_uuid = 6; + */ + locationUuid: string; + + /** + * TODO: Contact UUID – not yet implemented; open discussion with FCN (#23). + * + * @generated from field: string contact_uuid = 7; + */ + contactUuid: string; + + /** + * Number of CPU cores. + * + * @generated from field: uint32 cpu = 8; + */ + cpu: number; + + /** + * RAM in GB. + * + * @generated from field: uint32 ram = 9; + */ + ram: number; + + /** + * Internal reference number provided by the user, e.g. a ticket ID. + * + * @generated from field: string order_number = 10; + */ + orderNumber: string; + + /** + * Whether the order was placed by FITS (true) or self-service by the user (false). + * + * @generated from field: bool contract = 11; + */ + contract: boolean; + + /** + * Whether backup is enabled. + * + * @generated from field: bool backup = 12; + */ + backup: boolean; + + /** + * Availability level: v0, v1, v2, v3 (higher value = higher availability). + * + * @generated from field: string availability = 13; + */ + availability: string; + + /** + * Service class: sz1, sz2, sz3 (higher value = higher tier). + * + * @generated from field: string serviceclass = 14; + */ + serviceclass: string; + + /** + * Status of the ongoing operation. + * + * @generated from field: string status = 25; + */ + status: string; + + /** + * Additional information about the current status. + * + * @generated from field: string status_info = 16; + */ + statusInfo: string; + + /** + * OS-specific configuration. Exactly one must be set. + * + * @generated from oneof fits.api.vm.v1.VMInstance.details + */ + details: { + /** + * Windows-specific settings (domain + disks). + * + * @generated from field: fits.api.vm.v1.WindowsDetails windows_details = 17; + */ + value: WindowsDetails; + case: "windowsDetails"; + } | { + /** + * Linux-specific settings (LDAP + disks). + * + * @generated from field: fits.api.vm.v1.LinuxDetails linux_details = 18; + */ + value: LinuxDetails; + case: "linuxDetails"; + } | { case: undefined; value?: undefined }; + + /** + * Network interfaces attached to the VM (IPv4 only). + * + * @generated from field: repeated fits.api.vm.v1.NetworkInterface interfaces = 19; + */ + interfaces: NetworkInterface[]; + + /** + * VLAN the VM is attached to. + * + * @generated from field: fits.api.vm.v1.Vlan vlan = 20; + */ + vlan?: Vlan | undefined; }; /** @@ -58,6 +187,115 @@ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { export const VMInstanceSchema: GenMessage = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 0); +/** + * Linux-specific VM details. + * + * @generated from message fits.api.vm.v1.LinuxDetails + */ +export type LinuxDetails = Message<"fits.api.vm.v1.LinuxDetails"> & { + /** + * Disks configured on the Linux VM. + * + * @generated from field: repeated fits.api.vm.v1.LinuxDisk disks = 1; + */ + disks: LinuxDisk[]; + + /** + * UUID of the LDAP directory the VM is integrated with. + * + * @generated from field: string ldap_uuid = 2; + */ + ldapUuid: string; + + /** + * Linux-specific FQDN. Derived from the optional name set at creation, + * or generated by the backend if none was provided. + * + * @generated from field: string ldap_fqdn = 3; + */ + ldapFqdn: string; +}; + +/** + * Describes the message fits.api.vm.v1.LinuxDetails. + * Use `create(LinuxDetailsSchema)` to create a new message. + */ +export const LinuxDetailsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 1); + +/** + * Windows-specific VM details. + * + * @generated from message fits.api.vm.v1.WindowsDetails + */ +export type WindowsDetails = Message<"fits.api.vm.v1.WindowsDetails"> & { + /** + * Disks configured on the Windows VM. + * + * @generated from field: repeated fits.api.vm.v1.WindowsDisk disks = 1; + */ + disks: WindowsDisk[]; + + /** + * UUID of the Windows domain the VM has joined. + * + * @generated from field: string domain_uuid = 2; + */ + domainUuid: string; + + /** + * Windows-specific FQDN. Derived from the optional name set at creation, + * or generated by the backend if none was provided. + * + * @generated from field: string domain_fqdn = 3; + */ + domainFqdn: string; +}; + +/** + * Describes the message fits.api.vm.v1.WindowsDetails. + * Use `create(WindowsDetailsSchema)` to create a new message. + */ +export const WindowsDetailsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 2); + +/** + * A network interface of a VM. IPv4 only; IPv6 is not yet supported. + * + * @generated from message fits.api.vm.v1.NetworkInterface + */ +export type NetworkInterface = Message<"fits.api.vm.v1.NetworkInterface"> & { + /** + * UUID of this interface. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * IPv4 address assigned to this interface. + * + * @generated from field: string ipaddress = 2; + */ + ipaddress: string; + + /** + * MAC address of this interface. + * + * TODO validation + * + * @generated from field: string macaddress = 3; + */ + macaddress: string; +}; + +/** + * Describes the message fits.api.vm.v1.NetworkInterface. + * Use `create(NetworkInterfaceSchema)` to create a new message. + */ +export const NetworkInterfaceSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 3); + /** * VMServiceGetRequest TODO * @@ -84,7 +322,7 @@ export type VMServiceGetRequest = Message<"fits.api.vm.v1.VMServiceGetRequest"> * Use `create(VMServiceGetRequestSchema)` to create a new message. */ export const VMServiceGetRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 1); + messageDesc(file_fits_api_vm_v1_vm, 4); /** * VMServiceGetResponse TODO @@ -105,23 +343,23 @@ export type VMServiceGetResponse = Message<"fits.api.vm.v1.VMServiceGetResponse" * Use `create(VMServiceGetResponseSchema)` to create a new message. */ export const VMServiceGetResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 2); + messageDesc(file_fits_api_vm_v1_vm, 5); /** - * Windows-specific create request parts + * Windows-specific create request parts. * * @generated from message fits.api.vm.v1.VMServiceCreateWindowsRequest */ export type VMServiceCreateWindowsRequest = Message<"fits.api.vm.v1.VMServiceCreateWindowsRequest"> & { /** - * Domain UUID + * UUID of the Windows domain the VM should join. Required. * * @generated from field: string domain_uuid = 1; */ domainUuid: string; /** - * // Windows Disk + * Disk configuration for the Windows VM. * * @generated from field: fits.api.vm.v1.WindowsDisk disk = 2; */ @@ -133,23 +371,23 @@ export type VMServiceCreateWindowsRequest = Message<"fits.api.vm.v1.VMServiceCre * Use `create(VMServiceCreateWindowsRequestSchema)` to create a new message. */ export const VMServiceCreateWindowsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 3); + messageDesc(file_fits_api_vm_v1_vm, 6); /** - * Linux-specific create request parts + * Linux-specific create request parts. * * @generated from message fits.api.vm.v1.VMServiceCreateLinuxRequest */ export type VMServiceCreateLinuxRequest = Message<"fits.api.vm.v1.VMServiceCreateLinuxRequest"> & { /** - * LDAP UUID + * UUID of the LDAP directory the VM should integrate with. Required. * * @generated from field: string ldap_uuid = 1; */ ldapUuid: string; /** - * Linux Disk + * Disk configuration for the Linux VM. * * @generated from field: fits.api.vm.v1.LinuxDisk disk = 2; */ @@ -161,134 +399,129 @@ export type VMServiceCreateLinuxRequest = Message<"fits.api.vm.v1.VMServiceCreat * Use `create(VMServiceCreateLinuxRequestSchema)` to create a new message. */ export const VMServiceCreateLinuxRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 4); + messageDesc(file_fits_api_vm_v1_vm, 7); /** - * VMServiceCreateRequest TODO + * Request to create a new VM instance. * * @generated from message fits.api.vm.v1.VMServiceCreateRequest */ export type VMServiceCreateRequest = Message<"fits.api.vm.v1.VMServiceCreateRequest"> & { /** - * Project of the VM + * UUID of the project this VM belongs to. Required. * * @generated from field: string project_uuid = 1; */ projectUuid: string; /** - * Name of the VM + * Optional name for the VM. The FQDN is derived from this value. * * @generated from field: optional string name = 2; */ name?: string | undefined; /** - * Number of CPUs of this VM + * UUID of the operating system image to install. Required. * - * @generated from field: uint32 cpu = 3; + * @generated from field: string os_uuid = 3; */ - cpu: number; + osUuid: string; /** - * RAM of the VM in GB (TODO 2^n validation) + * UUID of the VLAN network to attach the VM to. Required. + * Obtainable via the VLAN list endpoint. * - * @generated from field: uint32 ram = 4; + * @generated from field: string vlan_uuid = 4; */ - ram: number; + vlanUuid: string; /** - * OS Uuid of the OS to install in the VM instance + * UUID of the datacenter location. Required. + * The VM is automatically scheduled into one data center within the chosen location; + * users select the city but not the specific datacenter. * - * @generated from field: string os_uuid = 5; + * @generated from field: string location_uuid = 5; */ - osUuid: string; + locationUuid: string; /** - * VLAN Uuid of the VLAN to install in the VM instance into + * TODO: Contact UUID – open discussion with FCN on how to model responsible contacts. + * GDPR considerations pending. May become a dedicated /contact endpoint. * - * @generated from field: string vlan_uuid = 6; + * @generated from field: string contact_uuid = 6; */ - vlanUuid: string; + contactUuid: string; /** - * Location Uuid of the datacenter location to install in the VM instance + * Number of CPU cores. * - * @generated from field: string location_uuid = 7; + * @generated from field: uint32 cpu = 7; */ - locationUuid: string; + cpu: number; /** - * Contact Uuid of who is the responsible contact of the VM instance - * TODO hier ist noch Klärungsbedarf. Ansprechpartner hängt nicht mal an einem echten user im system - * TODO sondern sind einfach nur Kontaktdaten, die an die Entity hingehängt wird. - * TODO aktuell hängt dies in der nulink api - * TODO labels als Option? - * TODO what about dsgvo? - * TODO daten im service now? - * TODO eventuell im tenant-apiserver Kontakte erlauben? - * TODO was macht FCN? wäre das für sie auch sinnvoll? - * TODO is required + * RAM in GB. Must be a power of 2. * - * @generated from field: string contact_uuid = 8; + * @generated from field: uint32 ram = 8; */ - contactUuid: string; + ram: number; /** - * Replaces optional ContractNumber, TransactionNumber, TechnicalKey, AccountingKey + * Internal reference number provided by the user, e.g. a ticket ID. Free text. Required. * - * @generated from field: fits.api.v1.Labels labels = 10; + * @generated from field: string order_number = 9; */ - labels?: Labels | undefined; + orderNumber: string; /** - * Order number muss unbedingt mitgegeben werden - * Hängt sogar z.b. am VM restart. - * Wird für gewöhnlich vom User angegeben. + * Optional key-value labels for accounting purposes + * (e.g. contract number, transaction number, technical key, accounting key). * - * @generated from field: string order_number = 11; + * @generated from field: fits.api.v1.Labels labels = 10; */ - orderNumber: string; + labels?: Labels | undefined; /** - * Currently no different backup plans, just true or false + * Whether backup is enabled. Simple on/off toggle; no distinct backup plans. Required. * - * @generated from field: bool backup = 12; + * @generated from field: bool backup = 11; */ backup: boolean; /** - * V0, V1, V2, V3 -> highest=best + * Availability level: v0, v1, v2, v3 (higher value = higher availability). Required. * - * @generated from field: string availability = 13; + * @generated from field: string availability = 12; */ availability: string; /** - * SZ1, SZ2, SZ3 -> highest=best + * Service class: sz1, sz2, sz3 (higher value = higher tier). Required. + * Only certain combinations with availability are valid; enforced by the backend. * - * @generated from field: string serviceclass = 14; + * @generated from field: string serviceclass = 13; */ serviceclass: string; /** - * TODO differentiation Linux/Windows + * Specifies the OS type and its associated configuration. Exactly one must be set. * * @generated from oneof fits.api.vm.v1.VMServiceCreateRequest.vmtype */ vmtype: { /** - * Windows Disk and Domain + * Windows-specific settings (domain + disk). * - * @generated from field: fits.api.vm.v1.VMServiceCreateWindowsRequest windows = 21; + * @generated from field: fits.api.vm.v1.VMServiceCreateWindowsRequest windows = 14; */ value: VMServiceCreateWindowsRequest; case: "windows"; } | { /** - * Linux Disk and LDAP + * Linux-specific settings (LDAP + disk). * - * @generated from field: fits.api.vm.v1.VMServiceCreateLinuxRequest linux = 22; + * @generated from field: fits.api.vm.v1.VMServiceCreateLinuxRequest linux = 15; */ value: VMServiceCreateLinuxRequest; case: "linux"; @@ -300,41 +533,37 @@ export type VMServiceCreateRequest = Message<"fits.api.vm.v1.VMServiceCreateRequ * Use `create(VMServiceCreateRequestSchema)` to create a new message. */ export const VMServiceCreateRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 5); + messageDesc(file_fits_api_vm_v1_vm, 8); /** - * LinuxDisk + * Disk configuration for a Linux VM. * * @generated from message fits.api.vm.v1.LinuxDisk */ export type LinuxDisk = Message<"fits.api.vm.v1.LinuxDisk"> & { /** - * AutoExtend if set to true the disk grows automatically + * If true, the disk grows automatically when space runs low. * * @generated from field: bool auto_extend = 1; */ autoExtend: boolean; /** - * Size if the disk in GB - * - * TODO discuss how this could be optional + * Size of the disk in GB. * * @generated from field: optional uint64 size_in_gb = 2; */ sizeInGb?: bigint | undefined; /** - * Label of the disk + * Label (name) of the disk. * * @generated from field: string label = 4; */ label: string; /** - * MountPoint where this disk should be mounted - * - * TODO this requires a Filesystem on the disk ? + * Filesystem path where this disk should be mounted (e.g. "/data"). * * @generated from field: optional string mount_point = 5; */ @@ -346,39 +575,37 @@ export type LinuxDisk = Message<"fits.api.vm.v1.LinuxDisk"> & { * Use `create(LinuxDiskSchema)` to create a new message. */ export const LinuxDiskSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 6); + messageDesc(file_fits_api_vm_v1_vm, 9); /** - * WindowsDisk + * Disk configuration for a Windows VM. * * @generated from message fits.api.vm.v1.WindowsDisk */ export type WindowsDisk = Message<"fits.api.vm.v1.WindowsDisk"> & { /** - * AutoExtend if set to true the disk grows automatically + * If true, the disk grows automatically when space runs low. * * @generated from field: bool auto_extend = 1; */ autoExtend: boolean; /** - * Size if the disk in GB - * - * TODO discuss how this could be optional + * Size of the disk in GB. * * @generated from field: optional uint64 size_in_gb = 2; */ sizeInGb?: bigint | undefined; /** - * DriveLetter where this disk should be assigned + * Drive letter assigned to this disk (e.g. "D"). * * @generated from field: optional string driveletter = 3; */ driveletter?: string | undefined; /** - * Label of the disk + * Label (name) of the disk. * * @generated from field: string label = 4; */ @@ -390,7 +617,7 @@ export type WindowsDisk = Message<"fits.api.vm.v1.WindowsDisk"> & { * Use `create(WindowsDiskSchema)` to create a new message. */ export const WindowsDiskSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 7); + messageDesc(file_fits_api_vm_v1_vm, 10); /** * VMServiceCreateResponse TODO @@ -405,7 +632,7 @@ export type VMServiceCreateResponse = Message<"fits.api.vm.v1.VMServiceCreateRes * Use `create(VMServiceCreateResponseSchema)` to create a new message. */ export const VMServiceCreateResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 8); + messageDesc(file_fits_api_vm_v1_vm, 11); /** * VMServiceUpdateRequest TODO @@ -416,9 +643,9 @@ export type VMServiceUpdateRequest = Message<"fits.api.vm.v1.VMServiceUpdateRequ /** * Project of the VM * - * @generated from field: string project = 1; + * @generated from field: string project_uuid = 1; */ - project: string; + projectUuid: string; /** * UpdateMeta contains the timestamp and strategy to be used in this update request. @@ -433,7 +660,7 @@ export type VMServiceUpdateRequest = Message<"fits.api.vm.v1.VMServiceUpdateRequ * Use `create(VMServiceUpdateRequestSchema)` to create a new message. */ export const VMServiceUpdateRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 9); + messageDesc(file_fits_api_vm_v1_vm, 12); /** * VMServiceUpdateResponse TODO @@ -448,20 +675,27 @@ export type VMServiceUpdateResponse = Message<"fits.api.vm.v1.VMServiceUpdateRes * Use `create(VMServiceUpdateResponseSchema)` to create a new message. */ export const VMServiceUpdateResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 10); + messageDesc(file_fits_api_vm_v1_vm, 13); /** - * VMServiceListRequest TODO + * VMServiceListRequest * * @generated from message fits.api.vm.v1.VMServiceListRequest */ export type VMServiceListRequest = Message<"fits.api.vm.v1.VMServiceListRequest"> & { + /** + * Tenant of the VM + * + * @generated from field: optional string tenant = 1; + */ + tenant?: string | undefined; + /** * Project of the VM * - * @generated from field: string project = 1; + * @generated from field: optional string project_uuid = 2; */ - project: string; + projectUuid?: string | undefined; }; /** @@ -469,14 +703,20 @@ export type VMServiceListRequest = Message<"fits.api.vm.v1.VMServiceListRequest" * Use `create(VMServiceListRequestSchema)` to create a new message. */ export const VMServiceListRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 11); + messageDesc(file_fits_api_vm_v1_vm, 14); /** - * VMServiceListResponse TODO + * VMServiceListResponse * * @generated from message fits.api.vm.v1.VMServiceListResponse */ export type VMServiceListResponse = Message<"fits.api.vm.v1.VMServiceListResponse"> & { + /** + * List of VM instances + * + * @generated from field: repeated fits.api.vm.v1.VMInstance vms = 1; + */ + vms: VMInstance[]; }; /** @@ -484,7 +724,7 @@ export type VMServiceListResponse = Message<"fits.api.vm.v1.VMServiceListRespons * Use `create(VMServiceListResponseSchema)` to create a new message. */ export const VMServiceListResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 12); + messageDesc(file_fits_api_vm_v1_vm, 15); /** * VMServiceDeleteRequest TODO @@ -505,7 +745,7 @@ export type VMServiceDeleteRequest = Message<"fits.api.vm.v1.VMServiceDeleteRequ * Use `create(VMServiceDeleteRequestSchema)` to create a new message. */ export const VMServiceDeleteRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 13); + messageDesc(file_fits_api_vm_v1_vm, 16); /** * VMServiceDeleteResponse TODO @@ -520,7 +760,7 @@ export type VMServiceDeleteResponse = Message<"fits.api.vm.v1.VMServiceDeleteRes * Use `create(VMServiceDeleteResponseSchema)` to create a new message. */ export const VMServiceDeleteResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 14); + messageDesc(file_fits_api_vm_v1_vm, 17); /** * VMService provides VM CRUD perations. diff --git a/proto/fits/api/vm/v1/vm.proto b/proto/fits/api/vm/v1/vm.proto index e1ff7ad..2baa7a8 100644 --- a/proto/fits/api/vm/v1/vm.proto +++ b/proto/fits/api/vm/v1/vm.proto @@ -5,6 +5,7 @@ package fits.api.vm.v1; import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; +import "fits/api/vm/v1/vlan.proto"; // VMService provides VM CRUD perations. service VMService { @@ -43,18 +44,96 @@ service VMService { } // VM Instance Messages -// TODO NucleusDBVMs und NucleusDBVMsLightUser aussortieren +// A VM instance as returned by the API. message VMInstance { - // Uuid of this VM + // UUID of this VM. string uuid = 1 [(buf.validate.field).string.uuid = true]; - // Meta for this VM + // Metadata for this VM. + // TODO dates are available in the nulink db, but not passed through yet. fits.api.v1.Meta meta = 2; - // Name of this VM - string name = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; - // Project where this VM belongs to - string project = 4 [(buf.validate.field).string.uuid = true]; + // FQDN of the VM. Derived from the optional name set at creation, + // or generated by the backend if none was provided. + string fqdn = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; + // UUID of the project this VM belongs to. + string project_uuid = 4 [(buf.validate.field).string.uuid = true]; + // UUID of the operating system image installed on the VM. + // Resolve the human-readable title via the OS endpoint. + string os_uuid = 5 [(buf.validate.field).string.uuid = true]; + // UUID of the datacenter location. + // The VM is automatically scheduled into one pod within the chosen location; + // users select the city but not the specific datacenter. + string location_uuid = 6 [(buf.validate.field).string.uuid = true]; + // TODO: Contact UUID – not yet implemented; open discussion with FCN (#23). + string contact_uuid = 7 [(buf.validate.field).string.uuid = true]; + + // Number of CPU cores. + uint32 cpu = 8; + // RAM in GB. + uint32 ram = 9; + + // Internal reference number provided by the user, e.g. a ticket ID. + string order_number = 10; + // Whether the order was placed by FITS (true) or self-service by the user (false). + bool contract = 11; + + // Whether backup is enabled. + bool backup = 12; + // Availability level: v0, v1, v2, v3 (higher value = higher availability). + string availability = 13; + // Service class: sz1, sz2, sz3 (higher value = higher tier). + string serviceclass = 14; + + // Status of the ongoing operation. + string status = 25; + // Additional information about the current status. + string status_info = 16; + + // OS-specific configuration. Exactly one must be set. + oneof details { + option (buf.validate.oneof).required = true; + // Windows-specific settings (domain + disks). + WindowsDetails windows_details = 17; + // Linux-specific settings (LDAP + disks). + LinuxDetails linux_details = 18; + } + + // Network interfaces attached to the VM (IPv4 only). + repeated NetworkInterface interfaces = 19; + // VLAN the VM is attached to. + Vlan vlan = 20; +} + +// Linux-specific VM details. +message LinuxDetails { + // Disks configured on the Linux VM. + repeated LinuxDisk disks = 1; + // UUID of the LDAP directory the VM is integrated with. + string ldap_uuid = 2 [(buf.validate.field).string.uuid = true]; + // Linux-specific FQDN. Derived from the optional name set at creation, + // or generated by the backend if none was provided. + string ldap_fqdn = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } +// Windows-specific VM details. +message WindowsDetails { + // Disks configured on the Windows VM. + repeated WindowsDisk disks = 1; + // UUID of the Windows domain the VM has joined. + string domain_uuid = 2 [(buf.validate.field).string.uuid = true]; + // Windows-specific FQDN. Derived from the optional name set at creation, + // or generated by the backend if none was provided. + string domain_fqdn = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; +} + +// A network interface of a VM. IPv4 only; IPv6 is not yet supported. +message NetworkInterface { + // UUID of this interface. + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // IPv4 address assigned to this interface. + string ipaddress = 2 [(buf.validate.field).string.(fits.api.v1.is_ip_or_hostname) = true]; + // MAC address of this interface. + string macaddress = 3; // TODO validation +} // Service messages // VMServiceGetRequest TODO @@ -70,114 +149,87 @@ message VMServiceGetResponse { // The VM VMInstance vm = 1; } -// Windows-specific create request parts +// Windows-specific create request parts. message VMServiceCreateWindowsRequest { - // Domain UUID + // UUID of the Windows domain the VM should join. Required. string domain_uuid = 1 [(buf.validate.field).string.uuid = true]; - // // Windows Disk + // Disk configuration for the Windows VM. WindowsDisk disk = 2; } -// Linux-specific create request parts +// Linux-specific create request parts. message VMServiceCreateLinuxRequest { - // LDAP UUID + // UUID of the LDAP directory the VM should integrate with. Required. string ldap_uuid = 1 [(buf.validate.field).string.uuid = true]; - // Linux Disk + // Disk configuration for the Linux VM. LinuxDisk disk = 2; } -// VMServiceCreateRequest TODO +// Request to create a new VM instance. message VMServiceCreateRequest { - // Project of the VM + // UUID of the project this VM belongs to. Required. string project_uuid = 1 [(buf.validate.field).string.uuid = true]; - // Name of the VM + // Optional name for the VM. The FQDN is derived from this value. optional string name = 2 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; - // Number of CPUs of this VM - uint32 cpu = 3; - // RAM of the VM in GB (TODO 2^n validation) - uint32 ram = 4; - // OS Uuid of the OS to install in the VM instance - string os_uuid = 5 [(buf.validate.field).string.uuid = true]; - // VLAN Uuid of the VLAN to install in the VM instance into - string vlan_uuid = 6 [(buf.validate.field).string.uuid = true]; - // Location Uuid of the datacenter location to install in the VM instance - string location_uuid = 7 [(buf.validate.field).string.uuid = true]; - // Contact Uuid of who is the responsible contact of the VM instance - // TODO hier ist noch Klärungsbedarf. Ansprechpartner hängt nicht mal an einem echten user im system - // TODO sondern sind einfach nur Kontaktdaten, die an die Entity hingehängt wird. - // TODO aktuell hängt dies in der nulink api - // TODO labels als Option? - // TODO what about dsgvo? - // TODO daten im service now? - // TODO eventuell im tenant-apiserver Kontakte erlauben? - // TODO was macht FCN? wäre das für sie auch sinnvoll? - // TODO is required - string contact_uuid = 8 [(buf.validate.field).string.uuid = true]; - // Replaces optional ContractNumber, TransactionNumber, TechnicalKey, AccountingKey + // UUID of the operating system image to install. Required. + string os_uuid = 3 [(buf.validate.field).string.uuid = true]; + // UUID of the VLAN network to attach the VM to. Required. + // Obtainable via the VLAN list endpoint. + string vlan_uuid = 4 [(buf.validate.field).string.uuid = true]; + // UUID of the datacenter location. Required. + // The VM is automatically scheduled into one data center within the chosen location; + // users select the city but not the specific datacenter. + string location_uuid = 5 [(buf.validate.field).string.uuid = true]; + // TODO: Contact UUID – open discussion with FCN on how to model responsible contacts. + // GDPR considerations pending. May become a dedicated /contact endpoint. + string contact_uuid = 6 [(buf.validate.field).string.uuid = true]; + // Number of CPU cores. + uint32 cpu = 7; + // RAM in GB. Must be a power of 2. + uint32 ram = 8; + // Internal reference number provided by the user, e.g. a ticket ID. Free text. Required. + string order_number = 9; + // Optional key-value labels for accounting purposes + // (e.g. contract number, transaction number, technical key, accounting key). fits.api.v1.Labels labels = 10; - // Order number muss unbedingt mitgegeben werden - // Hängt sogar z.b. am VM restart. - // Wird für gewöhnlich vom User angegeben. - string order_number = 11; - // Currently no different backup plans, just true or false - bool backup = 12; - // v0, v1, v2, v3 -> highest=best - string availability = 13; - // sz1, sz2, sz3 -> highest=best - string serviceclass = 14; - // TODO differentiation Linux/Windows + // Whether backup is enabled. Simple on/off toggle; no distinct backup plans. Required. + bool backup = 11; + // Availability level: v0, v1, v2, v3 (higher value = higher availability). Required. + string availability = 12; + // Service class: sz1, sz2, sz3 (higher value = higher tier). Required. + // Only certain combinations with availability are valid; enforced by the backend. + string serviceclass = 13; + // Specifies the OS type and its associated configuration. Exactly one must be set. oneof vmtype { - // ensure at least one match is specified. option (buf.validate.oneof).required = true; - // Windows Disk and Domain - VMServiceCreateWindowsRequest windows = 21; - // Linux Disk and LDAP - VMServiceCreateLinuxRequest linux = 22; + // Windows-specific settings (domain + disk). + VMServiceCreateWindowsRequest windows = 14; + // Linux-specific settings (LDAP + disk). + VMServiceCreateLinuxRequest linux = 15; } - // Disks []DiskInputModel - // TODO is inherited from the token making the create request -> stored in meta.createdBy - // TODO Tobias bietet an, das Token selbst zu lesen und das RequestedBy selbst zu holen über x-original token (siehe Botonds PR) - // RequestedBy *string - - // Still open - // AccountingKey *string - // Availability VMInstanceLinuxCreateInputModelAvailability - // Backup bool - // Billable bool - // BillingStartDate *openapi_types.Date - // Contract bool - // ContractNumber *string - // Encrypted bool - // LdapUuid openapi_types.UUID - // OrderNumber string - // Serviceclass VMInstanceLinuxCreateInputModelServiceclass - // Storageclass VMInstanceLinuxCreateInputModelStorageclass - // TechnicalKey *string - // TenantUuid *string // TODO Defined with the projectUUID - // TransactionNumber *string -} - -// LinuxDisk +} + +// Disk configuration for a Linux VM. message LinuxDisk { - // AutoExtend if set to true the disk grows automatically + // If true, the disk grows automatically when space runs low. bool auto_extend = 1; - // Size if the disk in GB - optional uint64 size_in_gb = 2; // TODO discuss how this could be optional - // Label of the disk + // Size of the disk in GB. + optional uint64 size_in_gb = 2; + // Label (name) of the disk. string label = 4; - // MountPoint where this disk should be mounted - optional string mount_point = 5; // TODO this requires a Filesystem on the disk ? + // Filesystem path where this disk should be mounted (e.g. "/data"). + optional string mount_point = 5; } -// WindowsDisk +// Disk configuration for a Windows VM. message WindowsDisk { - // AutoExtend if set to true the disk grows automatically + // If true, the disk grows automatically when space runs low. bool auto_extend = 1; - // Size if the disk in GB - optional uint64 size_in_gb = 2; // TODO discuss how this could be optional - // DriveLetter where this disk should be assigned + // Size of the disk in GB. + optional uint64 size_in_gb = 2; + // Drive letter assigned to this disk (e.g. "D"). optional string driveletter = 3; - // Label of the disk + // Label (name) of the disk. string label = 4; } @@ -187,9 +239,7 @@ message VMServiceCreateResponse {} // VMServiceUpdateRequest TODO message VMServiceUpdateRequest { // Project of the VM - string project = 1 [(buf.validate.field).string.uuid = true]; - - // TODO updatable fields + string project_uuid = 1 [(buf.validate.field).string.uuid = true]; // UpdateMeta contains the timestamp and strategy to be used in this update request. fits.api.v1.UpdateMeta update_meta = 2 [(buf.validate.field).required = true]; @@ -198,13 +248,15 @@ message VMServiceUpdateRequest { // VMServiceUpdateResponse TODO message VMServiceUpdateResponse {} -// VMServiceListRequest TODO +// VMServiceListRequest message VMServiceListRequest { + // Tenant of the VM + optional string tenant = 1; // Project of the VM - string project = 1 [(buf.validate.field).string.uuid = true]; + optional string project_uuid = 2 [(buf.validate.field).string.uuid = true]; } -// VMServiceListResponse TODO +// VMServiceListResponse message VMServiceListResponse { // List of VM instances repeated VMInstance vms = 1; diff --git a/python/fits/api/vm/v1/vm_pb2.py b/python/fits/api/vm/v1/vm_pb2.py index 4fc2f47..58302d0 100644 --- a/python/fits/api/vm/v1/vm_pb2.py +++ b/python/fits/api/vm/v1/vm_pb2.py @@ -25,9 +25,10 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 +from fits.api.vm.v1 import vlan_pb2 as fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/vm.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x96\x01\n\nVMInstance\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\"\n\x07project\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"W\n\x13VMServiceGetRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"B\n\x14VMServiceGetResponse\x12*\n\x02vm\x18\x01 \x01(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"{\n\x1dVMServiceCreateWindowsRequest\x12)\n\x0b\x64omain_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12/\n\x04\x64isk\x18\x02 \x01(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskR\x04\x64isk\"s\n\x1bVMServiceCreateLinuxRequest\x12%\n\tldap_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12-\n\x04\x64isk\x18\x02 \x01(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskR\x04\x64isk\"\x8f\x05\n\x16VMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12\x10\n\x03\x63pu\x18\x03 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x04 \x01(\rR\x03ram\x12!\n\x07os_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12+\n\x06labels\x18\n \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labels\x12!\n\x0corder_number\x18\x0b \x01(\tR\x0borderNumber\x12\x16\n\x06\x62\x61\x63kup\x18\x0c \x01(\x08R\x06\x62\x61\x63kup\x12\"\n\x0c\x61vailability\x18\r \x01(\tR\x0c\x61vailability\x12\"\n\x0cserviceclass\x18\x0e \x01(\tR\x0cserviceclass\x12I\n\x07windows\x18\x15 \x01(\x0b\x32-.fits.api.vm.v1.VMServiceCreateWindowsRequestH\x00R\x07windows\x12\x43\n\x05linux\x18\x16 \x01(\x0b\x32+.fits.api.vm.v1.VMServiceCreateLinuxRequestH\x00R\x05linuxB\x0f\n\x06vmtype\x12\x05\xbaH\x02\x08\x01\x42\x07\n\x05_name\"\xaa\x01\n\tLinuxDisk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05label\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x01R\nmountPoint\x88\x01\x01\x42\r\n\x0b_size_in_gbB\x0e\n\x0c_mount_point\"\xad\x01\n\x0bWindowsDisk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12%\n\x0b\x64riveletter\x18\x03 \x01(\tH\x01R\x0b\x64riveletter\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05labelB\r\n\x0b_size_in_gbB\x0e\n\x0c_driveletter\"\x19\n\x17VMServiceCreateResponse\"~\n\x16VMServiceUpdateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\"\x19\n\x17VMServiceUpdateResponse\":\n\x14VMServiceListRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x17\n\x15VMServiceListResponse\"<\n\x16VMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x19\n\x17VMServiceDeleteResponse2\x81\x04\n\tVMService\x12]\n\x03Get\x12#.fits.api.vm.v1.VMServiceGetRequest\x1a$.fits.api.vm.v1.VMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x43reate\x12&.fits.api.vm.v1.VMServiceCreateRequest\x1a\'.fits.api.vm.v1.VMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x65\n\x06Update\x12&.fits.api.vm.v1.VMServiceUpdateRequest\x1a\'.fits.api.vm.v1.VMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12`\n\x04List\x12$.fits.api.vm.v1.VMServiceListRequest\x1a%.fits.api.vm.v1.VMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x44\x65lete\x12&.fits.api.vm.v1.VMServiceDeleteRequest\x1a\'.fits.api.vm.v1.VMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07VmProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/vm.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x19\x66its/api/vm/v1/vlan.proto\"\xa8\x06\n\nVMInstance\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04\x66qdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04\x66qdn\x12+\n\x0cproject_uuid\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12!\n\x07os_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n\rlocation_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\x08 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\t \x01(\rR\x03ram\x12!\n\x0corder_number\x18\n \x01(\tR\x0borderNumber\x12\x1a\n\x08\x63ontract\x18\x0b \x01(\x08R\x08\x63ontract\x12\x16\n\x06\x62\x61\x63kup\x18\x0c \x01(\x08R\x06\x62\x61\x63kup\x12\"\n\x0c\x61vailability\x18\r \x01(\tR\x0c\x61vailability\x12\"\n\x0cserviceclass\x18\x0e \x01(\tR\x0cserviceclass\x12\x16\n\x06status\x18\x19 \x01(\tR\x06status\x12\x1f\n\x0bstatus_info\x18\x10 \x01(\tR\nstatusInfo\x12I\n\x0fwindows_details\x18\x11 \x01(\x0b\x32\x1e.fits.api.vm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12\x43\n\rlinux_details\x18\x12 \x01(\x0b\x32\x1c.fits.api.vm.v1.LinuxDetailsH\x00R\x0clinuxDetails\x12@\n\ninterfaces\x18\x13 \x03(\x0b\x32 .fits.api.vm.v1.NetworkInterfaceR\ninterfaces\x12(\n\x04vlan\x18\x14 \x01(\x0b\x32\x14.fits.api.vm.v1.VlanR\x04vlanB\x10\n\x07\x64\x65tails\x12\x05\xbaH\x02\x08\x01\"\x90\x01\n\x0cLinuxDetails\x12/\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskR\x05\x64isks\x12%\n\tldap_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12(\n\tldap_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08ldapFqdn\"\x9c\x01\n\x0eWindowsDetails\x12\x31\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskR\x05\x64isks\x12)\n\x0b\x64omain_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12,\n\x0b\x64omain_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\ndomainFqdn\"{\n\x10NetworkInterface\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n\tipaddress\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xe8\xb3\xae\xb1\x02\x01R\tipaddress\x12\x1e\n\nmacaddress\x18\x03 \x01(\tR\nmacaddress\"W\n\x13VMServiceGetRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"B\n\x14VMServiceGetResponse\x12*\n\x02vm\x18\x01 \x01(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"{\n\x1dVMServiceCreateWindowsRequest\x12)\n\x0b\x64omain_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12/\n\x04\x64isk\x18\x02 \x01(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskR\x04\x64isk\"s\n\x1bVMServiceCreateLinuxRequest\x12%\n\tldap_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12-\n\x04\x64isk\x18\x02 \x01(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskR\x04\x64isk\"\x8f\x05\n\x16VMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n\x07os_uuid\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\x07 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x08 \x01(\rR\x03ram\x12!\n\x0corder_number\x18\t \x01(\tR\x0borderNumber\x12+\n\x06labels\x18\n \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12\"\n\x0c\x61vailability\x18\x0c \x01(\tR\x0c\x61vailability\x12\"\n\x0cserviceclass\x18\r \x01(\tR\x0cserviceclass\x12I\n\x07windows\x18\x0e \x01(\x0b\x32-.fits.api.vm.v1.VMServiceCreateWindowsRequestH\x00R\x07windows\x12\x43\n\x05linux\x18\x0f \x01(\x0b\x32+.fits.api.vm.v1.VMServiceCreateLinuxRequestH\x00R\x05linuxB\x0f\n\x06vmtype\x12\x05\xbaH\x02\x08\x01\x42\x07\n\x05_name\"\xaa\x01\n\tLinuxDisk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05label\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x01R\nmountPoint\x88\x01\x01\x42\r\n\x0b_size_in_gbB\x0e\n\x0c_mount_point\"\xad\x01\n\x0bWindowsDisk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12%\n\x0b\x64riveletter\x18\x03 \x01(\tH\x01R\x0b\x64riveletter\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05labelB\r\n\x0b_size_in_gbB\x0e\n\x0c_driveletter\"\x19\n\x17VMServiceCreateResponse\"\x87\x01\n\x16VMServiceUpdateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\"\x19\n\x17VMServiceUpdateResponse\"\x81\x01\n\x14VMServiceListRequest\x12\x1b\n\x06tenant\x18\x01 \x01(\tH\x00R\x06tenant\x88\x01\x01\x12\x30\n\x0cproject_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x01R\x0bprojectUuid\x88\x01\x01\x42\t\n\x07_tenantB\x0f\n\r_project_uuid\"E\n\x15VMServiceListResponse\x12,\n\x03vms\x18\x01 \x03(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x03vms\"<\n\x16VMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x19\n\x17VMServiceDeleteResponse2\x81\x04\n\tVMService\x12]\n\x03Get\x12#.fits.api.vm.v1.VMServiceGetRequest\x1a$.fits.api.vm.v1.VMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x43reate\x12&.fits.api.vm.v1.VMServiceCreateRequest\x1a\'.fits.api.vm.v1.VMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x65\n\x06Update\x12&.fits.api.vm.v1.VMServiceUpdateRequest\x1a\'.fits.api.vm.v1.VMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12`\n\x04List\x12$.fits.api.vm.v1.VMServiceListRequest\x1a%.fits.api.vm.v1.VMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x44\x65lete\x12&.fits.api.vm.v1.VMServiceDeleteRequest\x1a\'.fits.api.vm.v1.VMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07VmProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -35,12 +36,32 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\007VmProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' + _globals['_VMINSTANCE'].oneofs_by_name['details']._loaded_options = None + _globals['_VMINSTANCE'].oneofs_by_name['details']._serialized_options = b'\272H\002\010\001' _globals['_VMINSTANCE'].fields_by_name['uuid']._loaded_options = None _globals['_VMINSTANCE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMINSTANCE'].fields_by_name['name']._loaded_options = None - _globals['_VMINSTANCE'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_VMINSTANCE'].fields_by_name['project']._loaded_options = None - _globals['_VMINSTANCE'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMINSTANCE'].fields_by_name['fqdn']._loaded_options = None + _globals['_VMINSTANCE'].fields_by_name['fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_VMINSTANCE'].fields_by_name['project_uuid']._loaded_options = None + _globals['_VMINSTANCE'].fields_by_name['project_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMINSTANCE'].fields_by_name['os_uuid']._loaded_options = None + _globals['_VMINSTANCE'].fields_by_name['os_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMINSTANCE'].fields_by_name['location_uuid']._loaded_options = None + _globals['_VMINSTANCE'].fields_by_name['location_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMINSTANCE'].fields_by_name['contact_uuid']._loaded_options = None + _globals['_VMINSTANCE'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_LINUXDETAILS'].fields_by_name['ldap_uuid']._loaded_options = None + _globals['_LINUXDETAILS'].fields_by_name['ldap_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_LINUXDETAILS'].fields_by_name['ldap_fqdn']._loaded_options = None + _globals['_LINUXDETAILS'].fields_by_name['ldap_fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_WINDOWSDETAILS'].fields_by_name['domain_uuid']._loaded_options = None + _globals['_WINDOWSDETAILS'].fields_by_name['domain_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_WINDOWSDETAILS'].fields_by_name['domain_fqdn']._loaded_options = None + _globals['_WINDOWSDETAILS'].fields_by_name['domain_fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_NETWORKINTERFACE'].fields_by_name['uuid']._loaded_options = None + _globals['_NETWORKINTERFACE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_NETWORKINTERFACE'].fields_by_name['ipaddress']._loaded_options = None + _globals['_NETWORKINTERFACE'].fields_by_name['ipaddress']._serialized_options = b'\272H\010r\006\350\263\256\261\002\001' _globals['_VMSERVICEGETREQUEST'].fields_by_name['uuid']._loaded_options = None _globals['_VMSERVICEGETREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VMSERVICEGETREQUEST'].fields_by_name['project']._loaded_options = None @@ -63,12 +84,12 @@ _globals['_VMSERVICECREATEREQUEST'].fields_by_name['location_uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VMSERVICECREATEREQUEST'].fields_by_name['contact_uuid']._loaded_options = None _globals['_VMSERVICECREATEREQUEST'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['project_uuid']._loaded_options = None + _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['project_uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._loaded_options = None _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._serialized_options = b'\272H\003\310\001\001' - _globals['_VMSERVICELISTREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_VMSERVICELISTREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICELISTREQUEST'].fields_by_name['project_uuid']._loaded_options = None + _globals['_VMSERVICELISTREQUEST'].fields_by_name['project_uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VMSERVICEDELETEREQUEST'].fields_by_name['project']._loaded_options = None _globals['_VMSERVICEDELETEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VMSERVICE'].methods_by_name['Get']._loaded_options = None @@ -81,36 +102,42 @@ _globals['_VMSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' _globals['_VMSERVICE'].methods_by_name['Delete']._loaded_options = None _globals['_VMSERVICE'].methods_by_name['Delete']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' - _globals['_VMINSTANCE']._serialized_start=135 - _globals['_VMINSTANCE']._serialized_end=285 - _globals['_VMSERVICEGETREQUEST']._serialized_start=287 - _globals['_VMSERVICEGETREQUEST']._serialized_end=374 - _globals['_VMSERVICEGETRESPONSE']._serialized_start=376 - _globals['_VMSERVICEGETRESPONSE']._serialized_end=442 - _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_start=444 - _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_end=567 - _globals['_VMSERVICECREATELINUXREQUEST']._serialized_start=569 - _globals['_VMSERVICECREATELINUXREQUEST']._serialized_end=684 - _globals['_VMSERVICECREATEREQUEST']._serialized_start=687 - _globals['_VMSERVICECREATEREQUEST']._serialized_end=1342 - _globals['_LINUXDISK']._serialized_start=1345 - _globals['_LINUXDISK']._serialized_end=1515 - _globals['_WINDOWSDISK']._serialized_start=1518 - _globals['_WINDOWSDISK']._serialized_end=1691 - _globals['_VMSERVICECREATERESPONSE']._serialized_start=1693 - _globals['_VMSERVICECREATERESPONSE']._serialized_end=1718 - _globals['_VMSERVICEUPDATEREQUEST']._serialized_start=1720 - _globals['_VMSERVICEUPDATEREQUEST']._serialized_end=1846 - _globals['_VMSERVICEUPDATERESPONSE']._serialized_start=1848 - _globals['_VMSERVICEUPDATERESPONSE']._serialized_end=1873 - _globals['_VMSERVICELISTREQUEST']._serialized_start=1875 - _globals['_VMSERVICELISTREQUEST']._serialized_end=1933 - _globals['_VMSERVICELISTRESPONSE']._serialized_start=1935 - _globals['_VMSERVICELISTRESPONSE']._serialized_end=1958 - _globals['_VMSERVICEDELETEREQUEST']._serialized_start=1960 - _globals['_VMSERVICEDELETEREQUEST']._serialized_end=2020 - _globals['_VMSERVICEDELETERESPONSE']._serialized_start=2022 - _globals['_VMSERVICEDELETERESPONSE']._serialized_end=2047 - _globals['_VMSERVICE']._serialized_start=2050 - _globals['_VMSERVICE']._serialized_end=2563 + _globals['_VMINSTANCE']._serialized_start=162 + _globals['_VMINSTANCE']._serialized_end=970 + _globals['_LINUXDETAILS']._serialized_start=973 + _globals['_LINUXDETAILS']._serialized_end=1117 + _globals['_WINDOWSDETAILS']._serialized_start=1120 + _globals['_WINDOWSDETAILS']._serialized_end=1276 + _globals['_NETWORKINTERFACE']._serialized_start=1278 + _globals['_NETWORKINTERFACE']._serialized_end=1401 + _globals['_VMSERVICEGETREQUEST']._serialized_start=1403 + _globals['_VMSERVICEGETREQUEST']._serialized_end=1490 + _globals['_VMSERVICEGETRESPONSE']._serialized_start=1492 + _globals['_VMSERVICEGETRESPONSE']._serialized_end=1558 + _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_start=1560 + _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_end=1683 + _globals['_VMSERVICECREATELINUXREQUEST']._serialized_start=1685 + _globals['_VMSERVICECREATELINUXREQUEST']._serialized_end=1800 + _globals['_VMSERVICECREATEREQUEST']._serialized_start=1803 + _globals['_VMSERVICECREATEREQUEST']._serialized_end=2458 + _globals['_LINUXDISK']._serialized_start=2461 + _globals['_LINUXDISK']._serialized_end=2631 + _globals['_WINDOWSDISK']._serialized_start=2634 + _globals['_WINDOWSDISK']._serialized_end=2807 + _globals['_VMSERVICECREATERESPONSE']._serialized_start=2809 + _globals['_VMSERVICECREATERESPONSE']._serialized_end=2834 + _globals['_VMSERVICEUPDATEREQUEST']._serialized_start=2837 + _globals['_VMSERVICEUPDATEREQUEST']._serialized_end=2972 + _globals['_VMSERVICEUPDATERESPONSE']._serialized_start=2974 + _globals['_VMSERVICEUPDATERESPONSE']._serialized_end=2999 + _globals['_VMSERVICELISTREQUEST']._serialized_start=3002 + _globals['_VMSERVICELISTREQUEST']._serialized_end=3131 + _globals['_VMSERVICELISTRESPONSE']._serialized_start=3133 + _globals['_VMSERVICELISTRESPONSE']._serialized_end=3202 + _globals['_VMSERVICEDELETEREQUEST']._serialized_start=3204 + _globals['_VMSERVICEDELETEREQUEST']._serialized_end=3264 + _globals['_VMSERVICEDELETERESPONSE']._serialized_start=3266 + _globals['_VMSERVICEDELETERESPONSE']._serialized_end=3291 + _globals['_VMSERVICE']._serialized_start=3294 + _globals['_VMSERVICE']._serialized_end=3807 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/vm_pb2.pyi b/python/fits/api/vm/v1/vm_pb2.pyi index 0f48b01..a46f876 100644 --- a/python/fits/api/vm/v1/vm_pb2.pyi +++ b/python/fits/api/vm/v1/vm_pb2.pyi @@ -1,24 +1,88 @@ from buf.validate import validate_pb2 as _validate_pb2 from fits.api.v1 import common_pb2 as _common_pb2 from fits.api.v1 import predefined_rules_pb2 as _predefined_rules_pb2 +from fits.api.vm.v1 import vlan_pb2 as _vlan_pb2 +from google.protobuf.internal import containers as _containers from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message -from collections.abc import Mapping as _Mapping +from collections.abc import Iterable as _Iterable, Mapping as _Mapping from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union DESCRIPTOR: _descriptor.FileDescriptor class VMInstance(_message.Message): - __slots__ = ("uuid", "meta", "name", "project") + __slots__ = ("uuid", "meta", "fqdn", "project_uuid", "os_uuid", "location_uuid", "contact_uuid", "cpu", "ram", "order_number", "contract", "backup", "availability", "serviceclass", "status", "status_info", "windows_details", "linux_details", "interfaces", "vlan") UUID_FIELD_NUMBER: _ClassVar[int] META_FIELD_NUMBER: _ClassVar[int] - NAME_FIELD_NUMBER: _ClassVar[int] - PROJECT_FIELD_NUMBER: _ClassVar[int] + FQDN_FIELD_NUMBER: _ClassVar[int] + PROJECT_UUID_FIELD_NUMBER: _ClassVar[int] + OS_UUID_FIELD_NUMBER: _ClassVar[int] + LOCATION_UUID_FIELD_NUMBER: _ClassVar[int] + CONTACT_UUID_FIELD_NUMBER: _ClassVar[int] + CPU_FIELD_NUMBER: _ClassVar[int] + RAM_FIELD_NUMBER: _ClassVar[int] + ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] + CONTRACT_FIELD_NUMBER: _ClassVar[int] + BACKUP_FIELD_NUMBER: _ClassVar[int] + AVAILABILITY_FIELD_NUMBER: _ClassVar[int] + SERVICECLASS_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + STATUS_INFO_FIELD_NUMBER: _ClassVar[int] + WINDOWS_DETAILS_FIELD_NUMBER: _ClassVar[int] + LINUX_DETAILS_FIELD_NUMBER: _ClassVar[int] + INTERFACES_FIELD_NUMBER: _ClassVar[int] + VLAN_FIELD_NUMBER: _ClassVar[int] uuid: str meta: _common_pb2.Meta - name: str - project: str - def __init__(self, uuid: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., name: _Optional[str] = ..., project: _Optional[str] = ...) -> None: ... + fqdn: str + project_uuid: str + os_uuid: str + location_uuid: str + contact_uuid: str + cpu: int + ram: int + order_number: str + contract: bool + backup: bool + availability: str + serviceclass: str + status: str + status_info: str + windows_details: WindowsDetails + linux_details: LinuxDetails + interfaces: _containers.RepeatedCompositeFieldContainer[NetworkInterface] + vlan: _vlan_pb2.Vlan + def __init__(self, uuid: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., fqdn: _Optional[str] = ..., project_uuid: _Optional[str] = ..., os_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., order_number: _Optional[str] = ..., contract: _Optional[bool] = ..., backup: _Optional[bool] = ..., availability: _Optional[str] = ..., serviceclass: _Optional[str] = ..., status: _Optional[str] = ..., status_info: _Optional[str] = ..., windows_details: _Optional[_Union[WindowsDetails, _Mapping]] = ..., linux_details: _Optional[_Union[LinuxDetails, _Mapping]] = ..., interfaces: _Optional[_Iterable[_Union[NetworkInterface, _Mapping]]] = ..., vlan: _Optional[_Union[_vlan_pb2.Vlan, _Mapping]] = ...) -> None: ... + +class LinuxDetails(_message.Message): + __slots__ = ("disks", "ldap_uuid", "ldap_fqdn") + DISKS_FIELD_NUMBER: _ClassVar[int] + LDAP_UUID_FIELD_NUMBER: _ClassVar[int] + LDAP_FQDN_FIELD_NUMBER: _ClassVar[int] + disks: _containers.RepeatedCompositeFieldContainer[LinuxDisk] + ldap_uuid: str + ldap_fqdn: str + def __init__(self, disks: _Optional[_Iterable[_Union[LinuxDisk, _Mapping]]] = ..., ldap_uuid: _Optional[str] = ..., ldap_fqdn: _Optional[str] = ...) -> None: ... + +class WindowsDetails(_message.Message): + __slots__ = ("disks", "domain_uuid", "domain_fqdn") + DISKS_FIELD_NUMBER: _ClassVar[int] + DOMAIN_UUID_FIELD_NUMBER: _ClassVar[int] + DOMAIN_FQDN_FIELD_NUMBER: _ClassVar[int] + disks: _containers.RepeatedCompositeFieldContainer[WindowsDisk] + domain_uuid: str + domain_fqdn: str + def __init__(self, disks: _Optional[_Iterable[_Union[WindowsDisk, _Mapping]]] = ..., domain_uuid: _Optional[str] = ..., domain_fqdn: _Optional[str] = ...) -> None: ... + +class NetworkInterface(_message.Message): + __slots__ = ("uuid", "ipaddress", "macaddress") + UUID_FIELD_NUMBER: _ClassVar[int] + IPADDRESS_FIELD_NUMBER: _ClassVar[int] + MACADDRESS_FIELD_NUMBER: _ClassVar[int] + uuid: str + ipaddress: str + macaddress: str + def __init__(self, uuid: _Optional[str] = ..., ipaddress: _Optional[str] = ..., macaddress: _Optional[str] = ...) -> None: ... class VMServiceGetRequest(_message.Message): __slots__ = ("uuid", "project") @@ -51,17 +115,17 @@ class VMServiceCreateLinuxRequest(_message.Message): def __init__(self, ldap_uuid: _Optional[str] = ..., disk: _Optional[_Union[LinuxDisk, _Mapping]] = ...) -> None: ... class VMServiceCreateRequest(_message.Message): - __slots__ = ("project_uuid", "name", "cpu", "ram", "os_uuid", "vlan_uuid", "location_uuid", "contact_uuid", "labels", "order_number", "backup", "availability", "serviceclass", "windows", "linux") + __slots__ = ("project_uuid", "name", "os_uuid", "vlan_uuid", "location_uuid", "contact_uuid", "cpu", "ram", "order_number", "labels", "backup", "availability", "serviceclass", "windows", "linux") PROJECT_UUID_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] - CPU_FIELD_NUMBER: _ClassVar[int] - RAM_FIELD_NUMBER: _ClassVar[int] OS_UUID_FIELD_NUMBER: _ClassVar[int] VLAN_UUID_FIELD_NUMBER: _ClassVar[int] LOCATION_UUID_FIELD_NUMBER: _ClassVar[int] CONTACT_UUID_FIELD_NUMBER: _ClassVar[int] - LABELS_FIELD_NUMBER: _ClassVar[int] + CPU_FIELD_NUMBER: _ClassVar[int] + RAM_FIELD_NUMBER: _ClassVar[int] ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] + LABELS_FIELD_NUMBER: _ClassVar[int] BACKUP_FIELD_NUMBER: _ClassVar[int] AVAILABILITY_FIELD_NUMBER: _ClassVar[int] SERVICECLASS_FIELD_NUMBER: _ClassVar[int] @@ -69,20 +133,20 @@ class VMServiceCreateRequest(_message.Message): LINUX_FIELD_NUMBER: _ClassVar[int] project_uuid: str name: str - cpu: int - ram: int os_uuid: str vlan_uuid: str location_uuid: str contact_uuid: str - labels: _common_pb2.Labels + cpu: int + ram: int order_number: str + labels: _common_pb2.Labels backup: bool availability: str serviceclass: str windows: VMServiceCreateWindowsRequest linux: VMServiceCreateLinuxRequest - def __init__(self, project_uuid: _Optional[str] = ..., name: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., os_uuid: _Optional[str] = ..., vlan_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., labels: _Optional[_Union[_common_pb2.Labels, _Mapping]] = ..., order_number: _Optional[str] = ..., backup: _Optional[bool] = ..., availability: _Optional[str] = ..., serviceclass: _Optional[str] = ..., windows: _Optional[_Union[VMServiceCreateWindowsRequest, _Mapping]] = ..., linux: _Optional[_Union[VMServiceCreateLinuxRequest, _Mapping]] = ...) -> None: ... + def __init__(self, project_uuid: _Optional[str] = ..., name: _Optional[str] = ..., os_uuid: _Optional[str] = ..., vlan_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., order_number: _Optional[str] = ..., labels: _Optional[_Union[_common_pb2.Labels, _Mapping]] = ..., backup: _Optional[bool] = ..., availability: _Optional[str] = ..., serviceclass: _Optional[str] = ..., windows: _Optional[_Union[VMServiceCreateWindowsRequest, _Mapping]] = ..., linux: _Optional[_Union[VMServiceCreateLinuxRequest, _Mapping]] = ...) -> None: ... class LinuxDisk(_message.Message): __slots__ = ("auto_extend", "size_in_gb", "label", "mount_point") @@ -113,26 +177,30 @@ class VMServiceCreateResponse(_message.Message): def __init__(self) -> None: ... class VMServiceUpdateRequest(_message.Message): - __slots__ = ("project", "update_meta") - PROJECT_FIELD_NUMBER: _ClassVar[int] + __slots__ = ("project_uuid", "update_meta") + PROJECT_UUID_FIELD_NUMBER: _ClassVar[int] UPDATE_META_FIELD_NUMBER: _ClassVar[int] - project: str + project_uuid: str update_meta: _common_pb2.UpdateMeta - def __init__(self, project: _Optional[str] = ..., update_meta: _Optional[_Union[_common_pb2.UpdateMeta, _Mapping]] = ...) -> None: ... + def __init__(self, project_uuid: _Optional[str] = ..., update_meta: _Optional[_Union[_common_pb2.UpdateMeta, _Mapping]] = ...) -> None: ... class VMServiceUpdateResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... class VMServiceListRequest(_message.Message): - __slots__ = ("project",) - PROJECT_FIELD_NUMBER: _ClassVar[int] - project: str - def __init__(self, project: _Optional[str] = ...) -> None: ... + __slots__ = ("tenant", "project_uuid") + TENANT_FIELD_NUMBER: _ClassVar[int] + PROJECT_UUID_FIELD_NUMBER: _ClassVar[int] + tenant: str + project_uuid: str + def __init__(self, tenant: _Optional[str] = ..., project_uuid: _Optional[str] = ...) -> None: ... class VMServiceListResponse(_message.Message): - __slots__ = () - def __init__(self) -> None: ... + __slots__ = ("vms",) + VMS_FIELD_NUMBER: _ClassVar[int] + vms: _containers.RepeatedCompositeFieldContainer[VMInstance] + def __init__(self, vms: _Optional[_Iterable[_Union[VMInstance, _Mapping]]] = ...) -> None: ... class VMServiceDeleteRequest(_message.Message): __slots__ = ("project",) From f08e43004c0a9e44302963e0bbf92463347f1236 Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Thu, 10 Sep 2026 14:46:33 +0200 Subject: [PATCH 12/21] feat: add tenant to VMInstance --- doc/index.html | 7 +++ go/fits/api/vm/v1/vm.pb.go | 84 ++++++++++++++++++-------------- js/fits/api/vm/v1/vm_pb.ts | 43 +++++++++------- proto/fits/api/vm/v1/vm.proto | 36 +++++++------- python/fits/api/vm/v1/vm_pb2.py | 78 ++++++++++++++--------------- python/fits/api/vm/v1/vm_pb2.pyi | 6 ++- 6 files changed, 142 insertions(+), 112 deletions(-) diff --git a/doc/index.html b/doc/index.html index ccb8f69..c3bda30 100644 --- a/doc/index.html +++ b/doc/index.html @@ -5112,6 +5112,13 @@

      VMInstance

      or generated by the backend if none was provided.

      +
      + + + + + + diff --git a/go/fits/api/vm/v1/vm.pb.go b/go/fits/api/vm/v1/vm.pb.go index 49e5aaf..a6cb37d 100644 --- a/go/fits/api/vm/v1/vm.pb.go +++ b/go/fits/api/vm/v1/vm.pb.go @@ -35,35 +35,37 @@ type VMInstance struct { // FQDN of the VM. Derived from the optional name set at creation, // or generated by the backend if none was provided. Fqdn string `protobuf:"bytes,3,opt,name=fqdn,proto3" json:"fqdn,omitempty"` + // Tenant this VM belongs to. + Tenant string `protobuf:"bytes,4,opt,name=tenant,proto3" json:"tenant,omitempty"` // UUID of the project this VM belongs to. - ProjectUuid string `protobuf:"bytes,4,opt,name=project_uuid,json=projectUuid,proto3" json:"project_uuid,omitempty"` + ProjectUuid string `protobuf:"bytes,5,opt,name=project_uuid,json=projectUuid,proto3" json:"project_uuid,omitempty"` // UUID of the operating system image installed on the VM. // Resolve the human-readable title via the OS endpoint. - OsUuid string `protobuf:"bytes,5,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` + OsUuid string `protobuf:"bytes,6,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` // UUID of the datacenter location. // The VM is automatically scheduled into one pod within the chosen location; // users select the city but not the specific datacenter. - LocationUuid string `protobuf:"bytes,6,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` + LocationUuid string `protobuf:"bytes,7,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` // TODO: Contact UUID – not yet implemented; open discussion with FCN (#23). - ContactUuid string `protobuf:"bytes,7,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` + ContactUuid string `protobuf:"bytes,8,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` // Number of CPU cores. - Cpu uint32 `protobuf:"varint,8,opt,name=cpu,proto3" json:"cpu,omitempty"` + Cpu uint32 `protobuf:"varint,9,opt,name=cpu,proto3" json:"cpu,omitempty"` // RAM in GB. - Ram uint32 `protobuf:"varint,9,opt,name=ram,proto3" json:"ram,omitempty"` + Ram uint32 `protobuf:"varint,10,opt,name=ram,proto3" json:"ram,omitempty"` // Internal reference number provided by the user, e.g. a ticket ID. - OrderNumber string `protobuf:"bytes,10,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + OrderNumber string `protobuf:"bytes,11,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` // Whether the order was placed by FITS (true) or self-service by the user (false). - Contract bool `protobuf:"varint,11,opt,name=contract,proto3" json:"contract,omitempty"` + Contract bool `protobuf:"varint,12,opt,name=contract,proto3" json:"contract,omitempty"` // Whether backup is enabled. - Backup bool `protobuf:"varint,12,opt,name=backup,proto3" json:"backup,omitempty"` + Backup bool `protobuf:"varint,13,opt,name=backup,proto3" json:"backup,omitempty"` // Availability level: v0, v1, v2, v3 (higher value = higher availability). - Availability string `protobuf:"bytes,13,opt,name=availability,proto3" json:"availability,omitempty"` + Availability string `protobuf:"bytes,14,opt,name=availability,proto3" json:"availability,omitempty"` // Service class: sz1, sz2, sz3 (higher value = higher tier). - Serviceclass string `protobuf:"bytes,14,opt,name=serviceclass,proto3" json:"serviceclass,omitempty"` + Serviceclass string `protobuf:"bytes,15,opt,name=serviceclass,proto3" json:"serviceclass,omitempty"` // Status of the ongoing operation. - Status string `protobuf:"bytes,25,opt,name=status,proto3" json:"status,omitempty"` + Status string `protobuf:"bytes,16,opt,name=status,proto3" json:"status,omitempty"` // Additional information about the current status. - StatusInfo string `protobuf:"bytes,16,opt,name=status_info,json=statusInfo,proto3" json:"status_info,omitempty"` + StatusInfo string `protobuf:"bytes,17,opt,name=status_info,json=statusInfo,proto3" json:"status_info,omitempty"` // OS-specific configuration. Exactly one must be set. // // Types that are valid to be assigned to Details: @@ -72,9 +74,9 @@ type VMInstance struct { // *VMInstance_LinuxDetails Details isVMInstance_Details `protobuf_oneof:"details"` // Network interfaces attached to the VM (IPv4 only). - Interfaces []*NetworkInterface `protobuf:"bytes,19,rep,name=interfaces,proto3" json:"interfaces,omitempty"` + Interfaces []*NetworkInterface `protobuf:"bytes,20,rep,name=interfaces,proto3" json:"interfaces,omitempty"` // VLAN the VM is attached to. - Vlan *Vlan `protobuf:"bytes,20,opt,name=vlan,proto3" json:"vlan,omitempty"` + Vlan *Vlan `protobuf:"bytes,21,opt,name=vlan,proto3" json:"vlan,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -130,6 +132,13 @@ func (x *VMInstance) GetFqdn() string { return "" } +func (x *VMInstance) GetTenant() string { + if x != nil { + return x.Tenant + } + return "" +} + func (x *VMInstance) GetProjectUuid() string { if x != nil { return x.ProjectUuid @@ -266,12 +275,12 @@ type isVMInstance_Details interface { type VMInstance_WindowsDetails struct { // Windows-specific settings (domain + disks). - WindowsDetails *WindowsDetails `protobuf:"bytes,17,opt,name=windows_details,json=windowsDetails,proto3,oneof"` + WindowsDetails *WindowsDetails `protobuf:"bytes,18,opt,name=windows_details,json=windowsDetails,proto3,oneof"` } type VMInstance_LinuxDetails struct { // Linux-specific settings (LDAP + disks). - LinuxDetails *LinuxDetails `protobuf:"bytes,18,opt,name=linux_details,json=linuxDetails,proto3,oneof"` + LinuxDetails *LinuxDetails `protobuf:"bytes,19,opt,name=linux_details,json=linuxDetails,proto3,oneof"` } func (*VMInstance_WindowsDetails) isVMInstance_Details() {} @@ -1356,33 +1365,34 @@ var File_fits_api_vm_v1_vm_proto protoreflect.FileDescriptor const file_fits_api_vm_v1_vm_proto_rawDesc = "" + "\n" + - "\x17fits/api/vm/v1/vm.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x19fits/api/vm/v1/vlan.proto\"\xa8\x06\n" + + "\x17fits/api/vm/v1/vm.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x19fits/api/vm/v1/vlan.proto\"\xcd\x06\n" + "\n" + "VMInstance\x12\x1c\n" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n" + "\x04meta\x18\x02 \x01(\v2\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n" + - "\x04fqdn\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04fqdn\x12+\n" + - "\fproject_uuid\x18\x04 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vprojectUuid\x12!\n" + - "\aos_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n" + - "\rlocation_uuid\x18\x06 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\flocationUuid\x12+\n" + - "\fcontact_uuid\x18\a \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\x12\x10\n" + - "\x03cpu\x18\b \x01(\rR\x03cpu\x12\x10\n" + - "\x03ram\x18\t \x01(\rR\x03ram\x12!\n" + - "\forder_number\x18\n" + - " \x01(\tR\vorderNumber\x12\x1a\n" + - "\bcontract\x18\v \x01(\bR\bcontract\x12\x16\n" + - "\x06backup\x18\f \x01(\bR\x06backup\x12\"\n" + - "\favailability\x18\r \x01(\tR\favailability\x12\"\n" + - "\fserviceclass\x18\x0e \x01(\tR\fserviceclass\x12\x16\n" + - "\x06status\x18\x19 \x01(\tR\x06status\x12\x1f\n" + - "\vstatus_info\x18\x10 \x01(\tR\n" + + "\x04fqdn\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04fqdn\x12#\n" + + "\x06tenant\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n" + + "\fproject_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vprojectUuid\x12!\n" + + "\aos_uuid\x18\x06 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n" + + "\rlocation_uuid\x18\a \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\flocationUuid\x12+\n" + + "\fcontact_uuid\x18\b \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\x12\x10\n" + + "\x03cpu\x18\t \x01(\rR\x03cpu\x12\x10\n" + + "\x03ram\x18\n" + + " \x01(\rR\x03ram\x12!\n" + + "\forder_number\x18\v \x01(\tR\vorderNumber\x12\x1a\n" + + "\bcontract\x18\f \x01(\bR\bcontract\x12\x16\n" + + "\x06backup\x18\r \x01(\bR\x06backup\x12\"\n" + + "\favailability\x18\x0e \x01(\tR\favailability\x12\"\n" + + "\fserviceclass\x18\x0f \x01(\tR\fserviceclass\x12\x16\n" + + "\x06status\x18\x10 \x01(\tR\x06status\x12\x1f\n" + + "\vstatus_info\x18\x11 \x01(\tR\n" + "statusInfo\x12I\n" + - "\x0fwindows_details\x18\x11 \x01(\v2\x1e.fits.api.vm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12C\n" + - "\rlinux_details\x18\x12 \x01(\v2\x1c.fits.api.vm.v1.LinuxDetailsH\x00R\flinuxDetails\x12@\n" + + "\x0fwindows_details\x18\x12 \x01(\v2\x1e.fits.api.vm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12C\n" + + "\rlinux_details\x18\x13 \x01(\v2\x1c.fits.api.vm.v1.LinuxDetailsH\x00R\flinuxDetails\x12@\n" + "\n" + - "interfaces\x18\x13 \x03(\v2 .fits.api.vm.v1.NetworkInterfaceR\n" + + "interfaces\x18\x14 \x03(\v2 .fits.api.vm.v1.NetworkInterfaceR\n" + "interfaces\x12(\n" + - "\x04vlan\x18\x14 \x01(\v2\x14.fits.api.vm.v1.VlanR\x04vlanB\x10\n" + + "\x04vlan\x18\x15 \x01(\v2\x14.fits.api.vm.v1.VlanR\x04vlanB\x10\n" + "\adetails\x12\x05\xbaH\x02\b\x01\"\x90\x01\n" + "\fLinuxDetails\x12/\n" + "\x05disks\x18\x01 \x03(\v2\x19.fits.api.vm.v1.LinuxDiskR\x05disks\x12%\n" + diff --git a/js/fits/api/vm/v1/vm_pb.ts b/js/fits/api/vm/v1/vm_pb.ts index 3752f4f..d2e1aed 100644 --- a/js/fits/api/vm/v1/vm_pb.ts +++ b/js/fits/api/vm/v1/vm_pb.ts @@ -16,7 +16,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file fits/api/vm/v1/vm.proto. */ export const file_fits_api_vm_v1_vm: GenFile = /*@__PURE__*/ - fileDesc("ChdmaXRzL2FwaS92bS92MS92bS5wcm90bxIOZml0cy5hcGkudm0udjEi3QQKClZNSW5zdGFuY2USFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEZnFkbhgDIAEoCUILukgIcgbAs66xAgESHgoMcHJvamVjdF91dWlkGAQgASgJQgi6SAVyA7ABARIZCgdvc191dWlkGAUgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAYgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYByABKAlCCLpIBXIDsAEBEgsKA2NwdRgIIAEoDRILCgNyYW0YCSABKA0SFAoMb3JkZXJfbnVtYmVyGAogASgJEhAKCGNvbnRyYWN0GAsgASgIEg4KBmJhY2t1cBgMIAEoCBIUCgxhdmFpbGFiaWxpdHkYDSABKAkSFAoMc2VydmljZWNsYXNzGA4gASgJEg4KBnN0YXR1cxgZIAEoCRITCgtzdGF0dXNfaW5mbxgQIAEoCRI5Cg93aW5kb3dzX2RldGFpbHMYESABKAsyHi5maXRzLmFwaS52bS52MS5XaW5kb3dzRGV0YWlsc0gAEjUKDWxpbnV4X2RldGFpbHMYEiABKAsyHC5maXRzLmFwaS52bS52MS5MaW51eERldGFpbHNIABI0CgppbnRlcmZhY2VzGBMgAygLMiAuZml0cy5hcGkudm0udjEuTmV0d29ya0ludGVyZmFjZRIiCgR2bGFuGBQgASgLMhQuZml0cy5hcGkudm0udjEuVmxhbkIQCgdkZXRhaWxzEgW6SAIIASJ1CgxMaW51eERldGFpbHMSKAoFZGlza3MYASADKAsyGS5maXRzLmFwaS52bS52MS5MaW51eERpc2sSGwoJbGRhcF91dWlkGAIgASgJQgi6SAVyA7ABARIeCglsZGFwX2ZxZG4YAyABKAlCC7pICHIGwLOusQIBIn0KDldpbmRvd3NEZXRhaWxzEioKBWRpc2tzGAEgAygLMhsuZml0cy5hcGkudm0udjEuV2luZG93c0Rpc2sSHQoLZG9tYWluX3V1aWQYAiABKAlCCLpIBXIDsAEBEiAKC2RvbWFpbl9mcWRuGAMgASgJQgu6SAhyBsCzrrECASJeChBOZXR3b3JrSW50ZXJmYWNlEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEh4KCWlwYWRkcmVzcxgCIAEoCUILukgIcgbos66xAgESEgoKbWFjYWRkcmVzcxgDIAEoCSJIChNWTVNlcnZpY2VHZXRSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBIj4KFFZNU2VydmljZUdldFJlc3BvbnNlEiYKAnZtGAEgASgLMhouZml0cy5hcGkudm0udjEuVk1JbnN0YW5jZSJpCh1WTVNlcnZpY2VDcmVhdGVXaW5kb3dzUmVxdWVzdBIdCgtkb21haW5fdXVpZBgBIAEoCUIIukgFcgOwAQESKQoEZGlzaxgCIAEoCzIbLmZpdHMuYXBpLnZtLnYxLldpbmRvd3NEaXNrImMKG1ZNU2VydmljZUNyZWF0ZUxpbnV4UmVxdWVzdBIbCglsZGFwX3V1aWQYASABKAlCCLpIBXIDsAEBEicKBGRpc2sYAiABKAsyGS5maXRzLmFwaS52bS52MS5MaW51eERpc2si/AMKFlZNU2VydmljZUNyZWF0ZVJlcXVlc3QSHgoMcHJvamVjdF91dWlkGAEgASgJQgi6SAVyA7ABARIeCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECAUgBiAEBEhkKB29zX3V1aWQYAyABKAlCCLpIBXIDsAEBEhsKCXZsYW5fdXVpZBgEIAEoCUIIukgFcgOwAQESHwoNbG9jYXRpb25fdXVpZBgFIAEoCUIIukgFcgOwAQESHgoMY29udGFjdF91dWlkGAYgASgJQgi6SAVyA7ABARILCgNjcHUYByABKA0SCwoDcmFtGAggASgNEhQKDG9yZGVyX251bWJlchgJIAEoCRIjCgZsYWJlbHMYCiABKAsyEy5maXRzLmFwaS52MS5MYWJlbHMSDgoGYmFja3VwGAsgASgIEhQKDGF2YWlsYWJpbGl0eRgMIAEoCRIUCgxzZXJ2aWNlY2xhc3MYDSABKAkSQAoHd2luZG93cxgOIAEoCzItLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUNyZWF0ZVdpbmRvd3NSZXF1ZXN0SAASPAoFbGludXgYDyABKAsyKy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VDcmVhdGVMaW51eFJlcXVlc3RIAEIPCgZ2bXR5cGUSBbpIAggBQgcKBV9uYW1lIoEBCglMaW51eERpc2sSEwoLYXV0b19leHRlbmQYASABKAgSFwoKc2l6ZV9pbl9nYhgCIAEoBEgAiAEBEg0KBWxhYmVsGAQgASgJEhgKC21vdW50X3BvaW50GAUgASgJSAGIAQFCDQoLX3NpemVfaW5fZ2JCDgoMX21vdW50X3BvaW50IoMBCgtXaW5kb3dzRGlzaxITCgthdXRvX2V4dGVuZBgBIAEoCBIXCgpzaXplX2luX2diGAIgASgESACIAQESGAoLZHJpdmVsZXR0ZXIYAyABKAlIAYgBARINCgVsYWJlbBgEIAEoCUINCgtfc2l6ZV9pbl9nYkIOCgxfZHJpdmVsZXR0ZXIiGQoXVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2UibgoWVk1TZXJ2aWNlVXBkYXRlUmVxdWVzdBIeCgxwcm9qZWN0X3V1aWQYASABKAlCCLpIBXIDsAEBEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBIhkKF1ZNU2VydmljZVVwZGF0ZVJlc3BvbnNlImwKFFZNU2VydmljZUxpc3RSZXF1ZXN0EhMKBnRlbmFudBgBIAEoCUgAiAEBEiMKDHByb2plY3RfdXVpZBgCIAEoCUIIukgFcgOwAQFIAYgBAUIJCgdfdGVuYW50Qg8KDV9wcm9qZWN0X3V1aWQiQAoVVk1TZXJ2aWNlTGlzdFJlc3BvbnNlEicKA3ZtcxgBIAMoCzIaLmZpdHMuYXBpLnZtLnYxLlZNSW5zdGFuY2UiMwoWVk1TZXJ2aWNlRGVsZXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABASIZChdWTVNlcnZpY2VEZWxldGVSZXNwb25zZTKBBAoJVk1TZXJ2aWNlEl0KA0dldBIjLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUdldFJlcXVlc3QaJC5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VHZXRSZXNwb25zZSILyvMYAwECA+DzGAISZQoGQ3JlYXRlEiYuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBonLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmUKBlVwZGF0ZRImLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZVVwZGF0ZVJlcXVlc3QaJy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VVcGRhdGVSZXNwb25zZSIKyvMYAgEC4PMYARJgCgRMaXN0EiQuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlTGlzdFJlcXVlc3QaJS5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmUKBkRlbGV0ZRImLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZURlbGV0ZVJlcXVlc3QaJy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VEZWxldGVSZXNwb25zZSIKyvMYAgEC4PMYAUKlAQoSY29tLmZpdHMuYXBpLnZtLnYxQgdWbVByb3RvUAFaK2dpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3ZtL3YxO3ZtdjGiAgNGQVaqAg5GaXRzLkFwaS5WbS5WMcoCDkZpdHNcQXBpXFZtXFYx4gIaRml0c1xBcGlcVm1cVjFcR1BCTWV0YWRhdGHqAhFGaXRzOjpBcGk6OlZtOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_fits_api_vm_v1_vlan]); + fileDesc("ChdmaXRzL2FwaS92bS92MS92bS5wcm90bxIOZml0cy5hcGkudm0udjEi+gQKClZNSW5zdGFuY2USFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEZnFkbhgDIAEoCUILukgIcgbAs66xAgESGwoGdGVuYW50GAQgASgJQgu6SAhyBsCzrrECARIeCgxwcm9qZWN0X3V1aWQYBSABKAlCCLpIBXIDsAEBEhkKB29zX3V1aWQYBiABKAlCCLpIBXIDsAEBEh8KDWxvY2F0aW9uX3V1aWQYByABKAlCCLpIBXIDsAEBEh4KDGNvbnRhY3RfdXVpZBgIIAEoCUIIukgFcgOwAQESCwoDY3B1GAkgASgNEgsKA3JhbRgKIAEoDRIUCgxvcmRlcl9udW1iZXIYCyABKAkSEAoIY29udHJhY3QYDCABKAgSDgoGYmFja3VwGA0gASgIEhQKDGF2YWlsYWJpbGl0eRgOIAEoCRIUCgxzZXJ2aWNlY2xhc3MYDyABKAkSDgoGc3RhdHVzGBAgASgJEhMKC3N0YXR1c19pbmZvGBEgASgJEjkKD3dpbmRvd3NfZGV0YWlscxgSIAEoCzIeLmZpdHMuYXBpLnZtLnYxLldpbmRvd3NEZXRhaWxzSAASNQoNbGludXhfZGV0YWlscxgTIAEoCzIcLmZpdHMuYXBpLnZtLnYxLkxpbnV4RGV0YWlsc0gAEjQKCmludGVyZmFjZXMYFCADKAsyIC5maXRzLmFwaS52bS52MS5OZXR3b3JrSW50ZXJmYWNlEiIKBHZsYW4YFSABKAsyFC5maXRzLmFwaS52bS52MS5WbGFuQhAKB2RldGFpbHMSBbpIAggBInUKDExpbnV4RGV0YWlscxIoCgVkaXNrcxgBIAMoCzIZLmZpdHMuYXBpLnZtLnYxLkxpbnV4RGlzaxIbCglsZGFwX3V1aWQYAiABKAlCCLpIBXIDsAEBEh4KCWxkYXBfZnFkbhgDIAEoCUILukgIcgbAs66xAgEifQoOV2luZG93c0RldGFpbHMSKgoFZGlza3MYASADKAsyGy5maXRzLmFwaS52bS52MS5XaW5kb3dzRGlzaxIdCgtkb21haW5fdXVpZBgCIAEoCUIIukgFcgOwAQESIAoLZG9tYWluX2ZxZG4YAyABKAlCC7pICHIGwLOusQIBIl4KEE5ldHdvcmtJbnRlcmZhY2USFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESHgoJaXBhZGRyZXNzGAIgASgJQgu6SAhyBuizrrECARISCgptYWNhZGRyZXNzGAMgASgJIkgKE1ZNU2VydmljZUdldFJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQEiPgoUVk1TZXJ2aWNlR2V0UmVzcG9uc2USJgoCdm0YASABKAsyGi5maXRzLmFwaS52bS52MS5WTUluc3RhbmNlImkKHVZNU2VydmljZUNyZWF0ZVdpbmRvd3NSZXF1ZXN0Eh0KC2RvbWFpbl91dWlkGAEgASgJQgi6SAVyA7ABARIpCgRkaXNrGAIgASgLMhsuZml0cy5hcGkudm0udjEuV2luZG93c0Rpc2siYwobVk1TZXJ2aWNlQ3JlYXRlTGludXhSZXF1ZXN0EhsKCWxkYXBfdXVpZBgBIAEoCUIIukgFcgOwAQESJwoEZGlzaxgCIAEoCzIZLmZpdHMuYXBpLnZtLnYxLkxpbnV4RGlzayL8AwoWVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBIeCgxwcm9qZWN0X3V1aWQYASABKAlCCLpIBXIDsAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESGQoHb3NfdXVpZBgDIAEoCUIIukgFcgOwAQESGwoJdmxhbl91dWlkGAQgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAUgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYBiABKAlCCLpIBXIDsAEBEgsKA2NwdRgHIAEoDRILCgNyYW0YCCABKA0SFAoMb3JkZXJfbnVtYmVyGAkgASgJEiMKBmxhYmVscxgKIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVscxIOCgZiYWNrdXAYCyABKAgSFAoMYXZhaWxhYmlsaXR5GAwgASgJEhQKDHNlcnZpY2VjbGFzcxgNIAEoCRJACgd3aW5kb3dzGA4gASgLMi0uZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQ3JlYXRlV2luZG93c1JlcXVlc3RIABI8CgVsaW51eBgPIAEoCzIrLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUNyZWF0ZUxpbnV4UmVxdWVzdEgAQg8KBnZtdHlwZRIFukgCCAFCBwoFX25hbWUigQEKCUxpbnV4RGlzaxITCgthdXRvX2V4dGVuZBgBIAEoCBIXCgpzaXplX2luX2diGAIgASgESACIAQESDQoFbGFiZWwYBCABKAkSGAoLbW91bnRfcG9pbnQYBSABKAlIAYgBAUINCgtfc2l6ZV9pbl9nYkIOCgxfbW91bnRfcG9pbnQigwEKC1dpbmRvd3NEaXNrEhMKC2F1dG9fZXh0ZW5kGAEgASgIEhcKCnNpemVfaW5fZ2IYAiABKARIAIgBARIYCgtkcml2ZWxldHRlchgDIAEoCUgBiAEBEg0KBWxhYmVsGAQgASgJQg0KC19zaXplX2luX2diQg4KDF9kcml2ZWxldHRlciIZChdWTVNlcnZpY2VDcmVhdGVSZXNwb25zZSJuChZWTVNlcnZpY2VVcGRhdGVSZXF1ZXN0Eh4KDHByb2plY3RfdXVpZBgBIAEoCUIIukgFcgOwAQESNAoLdXBkYXRlX21ldGEYAiABKAsyFy5maXRzLmFwaS52MS5VcGRhdGVNZXRhQga6SAPIAQEiGQoXVk1TZXJ2aWNlVXBkYXRlUmVzcG9uc2UibAoUVk1TZXJ2aWNlTGlzdFJlcXVlc3QSEwoGdGVuYW50GAEgASgJSACIAQESIwoMcHJvamVjdF91dWlkGAIgASgJQgi6SAVyA7ABAUgBiAEBQgkKB190ZW5hbnRCDwoNX3Byb2plY3RfdXVpZCJAChVWTVNlcnZpY2VMaXN0UmVzcG9uc2USJwoDdm1zGAEgAygLMhouZml0cy5hcGkudm0udjEuVk1JbnN0YW5jZSIzChZWTVNlcnZpY2VEZWxldGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIhkKF1ZNU2VydmljZURlbGV0ZVJlc3BvbnNlMoEECglWTVNlcnZpY2USXQoDR2V0EiMuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlR2V0UmVxdWVzdBokLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUdldFJlc3BvbnNlIgvK8xgDAQID4PMYAhJlCgZDcmVhdGUSJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VDcmVhdGVSZXF1ZXN0GicuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESZQoGVXBkYXRlEiYuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlVXBkYXRlUmVxdWVzdBonLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZVVwZGF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmAKBExpc3QSJC5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VMaXN0UmVxdWVzdBolLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAISZQoGRGVsZXRlEiYuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlRGVsZXRlUmVxdWVzdBonLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZURlbGV0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBQqUBChJjb20uZml0cy5hcGkudm0udjFCB1ZtUHJvdG9QAVorZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdm0vdjE7dm12MaICA0ZBVqoCDkZpdHMuQXBpLlZtLlYxygIORml0c1xBcGlcVm1cVjHiAhpGaXRzXEFwaVxWbVxWMVxHUEJNZXRhZGF0YeoCEUZpdHM6OkFwaTo6Vm06OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_fits_api_vm_v1_vlan]); /** * VM Instance Messages @@ -48,10 +48,17 @@ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { */ fqdn: string; + /** + * Tenant this VM belongs to. + * + * @generated from field: string tenant = 4; + */ + tenant: string; + /** * UUID of the project this VM belongs to. * - * @generated from field: string project_uuid = 4; + * @generated from field: string project_uuid = 5; */ projectUuid: string; @@ -59,7 +66,7 @@ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { * UUID of the operating system image installed on the VM. * Resolve the human-readable title via the OS endpoint. * - * @generated from field: string os_uuid = 5; + * @generated from field: string os_uuid = 6; */ osUuid: string; @@ -68,77 +75,77 @@ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { * The VM is automatically scheduled into one pod within the chosen location; * users select the city but not the specific datacenter. * - * @generated from field: string location_uuid = 6; + * @generated from field: string location_uuid = 7; */ locationUuid: string; /** * TODO: Contact UUID – not yet implemented; open discussion with FCN (#23). * - * @generated from field: string contact_uuid = 7; + * @generated from field: string contact_uuid = 8; */ contactUuid: string; /** * Number of CPU cores. * - * @generated from field: uint32 cpu = 8; + * @generated from field: uint32 cpu = 9; */ cpu: number; /** * RAM in GB. * - * @generated from field: uint32 ram = 9; + * @generated from field: uint32 ram = 10; */ ram: number; /** * Internal reference number provided by the user, e.g. a ticket ID. * - * @generated from field: string order_number = 10; + * @generated from field: string order_number = 11; */ orderNumber: string; /** * Whether the order was placed by FITS (true) or self-service by the user (false). * - * @generated from field: bool contract = 11; + * @generated from field: bool contract = 12; */ contract: boolean; /** * Whether backup is enabled. * - * @generated from field: bool backup = 12; + * @generated from field: bool backup = 13; */ backup: boolean; /** * Availability level: v0, v1, v2, v3 (higher value = higher availability). * - * @generated from field: string availability = 13; + * @generated from field: string availability = 14; */ availability: string; /** * Service class: sz1, sz2, sz3 (higher value = higher tier). * - * @generated from field: string serviceclass = 14; + * @generated from field: string serviceclass = 15; */ serviceclass: string; /** * Status of the ongoing operation. * - * @generated from field: string status = 25; + * @generated from field: string status = 16; */ status: string; /** * Additional information about the current status. * - * @generated from field: string status_info = 16; + * @generated from field: string status_info = 17; */ statusInfo: string; @@ -151,7 +158,7 @@ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { /** * Windows-specific settings (domain + disks). * - * @generated from field: fits.api.vm.v1.WindowsDetails windows_details = 17; + * @generated from field: fits.api.vm.v1.WindowsDetails windows_details = 18; */ value: WindowsDetails; case: "windowsDetails"; @@ -159,7 +166,7 @@ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { /** * Linux-specific settings (LDAP + disks). * - * @generated from field: fits.api.vm.v1.LinuxDetails linux_details = 18; + * @generated from field: fits.api.vm.v1.LinuxDetails linux_details = 19; */ value: LinuxDetails; case: "linuxDetails"; @@ -168,14 +175,14 @@ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { /** * Network interfaces attached to the VM (IPv4 only). * - * @generated from field: repeated fits.api.vm.v1.NetworkInterface interfaces = 19; + * @generated from field: repeated fits.api.vm.v1.NetworkInterface interfaces = 20; */ interfaces: NetworkInterface[]; /** * VLAN the VM is attached to. * - * @generated from field: fits.api.vm.v1.Vlan vlan = 20; + * @generated from field: fits.api.vm.v1.Vlan vlan = 21; */ vlan?: Vlan | undefined; }; diff --git a/proto/fits/api/vm/v1/vm.proto b/proto/fits/api/vm/v1/vm.proto index 2baa7a8..4cf6423 100644 --- a/proto/fits/api/vm/v1/vm.proto +++ b/proto/fits/api/vm/v1/vm.proto @@ -54,53 +54,55 @@ message VMInstance { // FQDN of the VM. Derived from the optional name set at creation, // or generated by the backend if none was provided. string fqdn = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; + // Tenant this VM belongs to. + string tenant = 4 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; // UUID of the project this VM belongs to. - string project_uuid = 4 [(buf.validate.field).string.uuid = true]; + string project_uuid = 5 [(buf.validate.field).string.uuid = true]; // UUID of the operating system image installed on the VM. // Resolve the human-readable title via the OS endpoint. - string os_uuid = 5 [(buf.validate.field).string.uuid = true]; + string os_uuid = 6 [(buf.validate.field).string.uuid = true]; // UUID of the datacenter location. // The VM is automatically scheduled into one pod within the chosen location; // users select the city but not the specific datacenter. - string location_uuid = 6 [(buf.validate.field).string.uuid = true]; + string location_uuid = 7 [(buf.validate.field).string.uuid = true]; // TODO: Contact UUID – not yet implemented; open discussion with FCN (#23). - string contact_uuid = 7 [(buf.validate.field).string.uuid = true]; + string contact_uuid = 8 [(buf.validate.field).string.uuid = true]; // Number of CPU cores. - uint32 cpu = 8; + uint32 cpu = 9; // RAM in GB. - uint32 ram = 9; + uint32 ram = 10; // Internal reference number provided by the user, e.g. a ticket ID. - string order_number = 10; + string order_number = 11; // Whether the order was placed by FITS (true) or self-service by the user (false). - bool contract = 11; + bool contract = 12; // Whether backup is enabled. - bool backup = 12; + bool backup = 13; // Availability level: v0, v1, v2, v3 (higher value = higher availability). - string availability = 13; + string availability = 14; // Service class: sz1, sz2, sz3 (higher value = higher tier). - string serviceclass = 14; + string serviceclass = 15; // Status of the ongoing operation. - string status = 25; + string status = 16; // Additional information about the current status. - string status_info = 16; + string status_info = 17; // OS-specific configuration. Exactly one must be set. oneof details { option (buf.validate.oneof).required = true; // Windows-specific settings (domain + disks). - WindowsDetails windows_details = 17; + WindowsDetails windows_details = 18; // Linux-specific settings (LDAP + disks). - LinuxDetails linux_details = 18; + LinuxDetails linux_details = 19; } // Network interfaces attached to the VM (IPv4 only). - repeated NetworkInterface interfaces = 19; + repeated NetworkInterface interfaces = 20; // VLAN the VM is attached to. - Vlan vlan = 20; + Vlan vlan = 21; } // Linux-specific VM details. diff --git a/python/fits/api/vm/v1/vm_pb2.py b/python/fits/api/vm/v1/vm_pb2.py index 58302d0..0fae998 100644 --- a/python/fits/api/vm/v1/vm_pb2.py +++ b/python/fits/api/vm/v1/vm_pb2.py @@ -28,7 +28,7 @@ from fits.api.vm.v1 import vlan_pb2 as fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/vm.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x19\x66its/api/vm/v1/vlan.proto\"\xa8\x06\n\nVMInstance\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04\x66qdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04\x66qdn\x12+\n\x0cproject_uuid\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12!\n\x07os_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n\rlocation_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\x08 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\t \x01(\rR\x03ram\x12!\n\x0corder_number\x18\n \x01(\tR\x0borderNumber\x12\x1a\n\x08\x63ontract\x18\x0b \x01(\x08R\x08\x63ontract\x12\x16\n\x06\x62\x61\x63kup\x18\x0c \x01(\x08R\x06\x62\x61\x63kup\x12\"\n\x0c\x61vailability\x18\r \x01(\tR\x0c\x61vailability\x12\"\n\x0cserviceclass\x18\x0e \x01(\tR\x0cserviceclass\x12\x16\n\x06status\x18\x19 \x01(\tR\x06status\x12\x1f\n\x0bstatus_info\x18\x10 \x01(\tR\nstatusInfo\x12I\n\x0fwindows_details\x18\x11 \x01(\x0b\x32\x1e.fits.api.vm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12\x43\n\rlinux_details\x18\x12 \x01(\x0b\x32\x1c.fits.api.vm.v1.LinuxDetailsH\x00R\x0clinuxDetails\x12@\n\ninterfaces\x18\x13 \x03(\x0b\x32 .fits.api.vm.v1.NetworkInterfaceR\ninterfaces\x12(\n\x04vlan\x18\x14 \x01(\x0b\x32\x14.fits.api.vm.v1.VlanR\x04vlanB\x10\n\x07\x64\x65tails\x12\x05\xbaH\x02\x08\x01\"\x90\x01\n\x0cLinuxDetails\x12/\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskR\x05\x64isks\x12%\n\tldap_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12(\n\tldap_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08ldapFqdn\"\x9c\x01\n\x0eWindowsDetails\x12\x31\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskR\x05\x64isks\x12)\n\x0b\x64omain_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12,\n\x0b\x64omain_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\ndomainFqdn\"{\n\x10NetworkInterface\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n\tipaddress\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xe8\xb3\xae\xb1\x02\x01R\tipaddress\x12\x1e\n\nmacaddress\x18\x03 \x01(\tR\nmacaddress\"W\n\x13VMServiceGetRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"B\n\x14VMServiceGetResponse\x12*\n\x02vm\x18\x01 \x01(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"{\n\x1dVMServiceCreateWindowsRequest\x12)\n\x0b\x64omain_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12/\n\x04\x64isk\x18\x02 \x01(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskR\x04\x64isk\"s\n\x1bVMServiceCreateLinuxRequest\x12%\n\tldap_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12-\n\x04\x64isk\x18\x02 \x01(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskR\x04\x64isk\"\x8f\x05\n\x16VMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n\x07os_uuid\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\x07 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x08 \x01(\rR\x03ram\x12!\n\x0corder_number\x18\t \x01(\tR\x0borderNumber\x12+\n\x06labels\x18\n \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12\"\n\x0c\x61vailability\x18\x0c \x01(\tR\x0c\x61vailability\x12\"\n\x0cserviceclass\x18\r \x01(\tR\x0cserviceclass\x12I\n\x07windows\x18\x0e \x01(\x0b\x32-.fits.api.vm.v1.VMServiceCreateWindowsRequestH\x00R\x07windows\x12\x43\n\x05linux\x18\x0f \x01(\x0b\x32+.fits.api.vm.v1.VMServiceCreateLinuxRequestH\x00R\x05linuxB\x0f\n\x06vmtype\x12\x05\xbaH\x02\x08\x01\x42\x07\n\x05_name\"\xaa\x01\n\tLinuxDisk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05label\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x01R\nmountPoint\x88\x01\x01\x42\r\n\x0b_size_in_gbB\x0e\n\x0c_mount_point\"\xad\x01\n\x0bWindowsDisk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12%\n\x0b\x64riveletter\x18\x03 \x01(\tH\x01R\x0b\x64riveletter\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05labelB\r\n\x0b_size_in_gbB\x0e\n\x0c_driveletter\"\x19\n\x17VMServiceCreateResponse\"\x87\x01\n\x16VMServiceUpdateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\"\x19\n\x17VMServiceUpdateResponse\"\x81\x01\n\x14VMServiceListRequest\x12\x1b\n\x06tenant\x18\x01 \x01(\tH\x00R\x06tenant\x88\x01\x01\x12\x30\n\x0cproject_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x01R\x0bprojectUuid\x88\x01\x01\x42\t\n\x07_tenantB\x0f\n\r_project_uuid\"E\n\x15VMServiceListResponse\x12,\n\x03vms\x18\x01 \x03(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x03vms\"<\n\x16VMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x19\n\x17VMServiceDeleteResponse2\x81\x04\n\tVMService\x12]\n\x03Get\x12#.fits.api.vm.v1.VMServiceGetRequest\x1a$.fits.api.vm.v1.VMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x43reate\x12&.fits.api.vm.v1.VMServiceCreateRequest\x1a\'.fits.api.vm.v1.VMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x65\n\x06Update\x12&.fits.api.vm.v1.VMServiceUpdateRequest\x1a\'.fits.api.vm.v1.VMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12`\n\x04List\x12$.fits.api.vm.v1.VMServiceListRequest\x1a%.fits.api.vm.v1.VMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x44\x65lete\x12&.fits.api.vm.v1.VMServiceDeleteRequest\x1a\'.fits.api.vm.v1.VMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07VmProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/vm.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x19\x66its/api/vm/v1/vlan.proto\"\xcd\x06\n\nVMInstance\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04\x66qdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04\x66qdn\x12#\n\x06tenant\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n\x0cproject_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12!\n\x07os_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\t \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\n \x01(\rR\x03ram\x12!\n\x0corder_number\x18\x0b \x01(\tR\x0borderNumber\x12\x1a\n\x08\x63ontract\x18\x0c \x01(\x08R\x08\x63ontract\x12\x16\n\x06\x62\x61\x63kup\x18\r \x01(\x08R\x06\x62\x61\x63kup\x12\"\n\x0c\x61vailability\x18\x0e \x01(\tR\x0c\x61vailability\x12\"\n\x0cserviceclass\x18\x0f \x01(\tR\x0cserviceclass\x12\x16\n\x06status\x18\x10 \x01(\tR\x06status\x12\x1f\n\x0bstatus_info\x18\x11 \x01(\tR\nstatusInfo\x12I\n\x0fwindows_details\x18\x12 \x01(\x0b\x32\x1e.fits.api.vm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12\x43\n\rlinux_details\x18\x13 \x01(\x0b\x32\x1c.fits.api.vm.v1.LinuxDetailsH\x00R\x0clinuxDetails\x12@\n\ninterfaces\x18\x14 \x03(\x0b\x32 .fits.api.vm.v1.NetworkInterfaceR\ninterfaces\x12(\n\x04vlan\x18\x15 \x01(\x0b\x32\x14.fits.api.vm.v1.VlanR\x04vlanB\x10\n\x07\x64\x65tails\x12\x05\xbaH\x02\x08\x01\"\x90\x01\n\x0cLinuxDetails\x12/\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskR\x05\x64isks\x12%\n\tldap_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12(\n\tldap_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08ldapFqdn\"\x9c\x01\n\x0eWindowsDetails\x12\x31\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskR\x05\x64isks\x12)\n\x0b\x64omain_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12,\n\x0b\x64omain_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\ndomainFqdn\"{\n\x10NetworkInterface\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n\tipaddress\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xe8\xb3\xae\xb1\x02\x01R\tipaddress\x12\x1e\n\nmacaddress\x18\x03 \x01(\tR\nmacaddress\"W\n\x13VMServiceGetRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"B\n\x14VMServiceGetResponse\x12*\n\x02vm\x18\x01 \x01(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"{\n\x1dVMServiceCreateWindowsRequest\x12)\n\x0b\x64omain_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12/\n\x04\x64isk\x18\x02 \x01(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskR\x04\x64isk\"s\n\x1bVMServiceCreateLinuxRequest\x12%\n\tldap_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12-\n\x04\x64isk\x18\x02 \x01(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskR\x04\x64isk\"\x8f\x05\n\x16VMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n\x07os_uuid\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\x07 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x08 \x01(\rR\x03ram\x12!\n\x0corder_number\x18\t \x01(\tR\x0borderNumber\x12+\n\x06labels\x18\n \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12\"\n\x0c\x61vailability\x18\x0c \x01(\tR\x0c\x61vailability\x12\"\n\x0cserviceclass\x18\r \x01(\tR\x0cserviceclass\x12I\n\x07windows\x18\x0e \x01(\x0b\x32-.fits.api.vm.v1.VMServiceCreateWindowsRequestH\x00R\x07windows\x12\x43\n\x05linux\x18\x0f \x01(\x0b\x32+.fits.api.vm.v1.VMServiceCreateLinuxRequestH\x00R\x05linuxB\x0f\n\x06vmtype\x12\x05\xbaH\x02\x08\x01\x42\x07\n\x05_name\"\xaa\x01\n\tLinuxDisk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05label\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x01R\nmountPoint\x88\x01\x01\x42\r\n\x0b_size_in_gbB\x0e\n\x0c_mount_point\"\xad\x01\n\x0bWindowsDisk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12%\n\x0b\x64riveletter\x18\x03 \x01(\tH\x01R\x0b\x64riveletter\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05labelB\r\n\x0b_size_in_gbB\x0e\n\x0c_driveletter\"\x19\n\x17VMServiceCreateResponse\"\x87\x01\n\x16VMServiceUpdateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\"\x19\n\x17VMServiceUpdateResponse\"\x81\x01\n\x14VMServiceListRequest\x12\x1b\n\x06tenant\x18\x01 \x01(\tH\x00R\x06tenant\x88\x01\x01\x12\x30\n\x0cproject_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x01R\x0bprojectUuid\x88\x01\x01\x42\t\n\x07_tenantB\x0f\n\r_project_uuid\"E\n\x15VMServiceListResponse\x12,\n\x03vms\x18\x01 \x03(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x03vms\"<\n\x16VMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x19\n\x17VMServiceDeleteResponse2\x81\x04\n\tVMService\x12]\n\x03Get\x12#.fits.api.vm.v1.VMServiceGetRequest\x1a$.fits.api.vm.v1.VMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x43reate\x12&.fits.api.vm.v1.VMServiceCreateRequest\x1a\'.fits.api.vm.v1.VMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x65\n\x06Update\x12&.fits.api.vm.v1.VMServiceUpdateRequest\x1a\'.fits.api.vm.v1.VMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12`\n\x04List\x12$.fits.api.vm.v1.VMServiceListRequest\x1a%.fits.api.vm.v1.VMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x44\x65lete\x12&.fits.api.vm.v1.VMServiceDeleteRequest\x1a\'.fits.api.vm.v1.VMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07VmProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -42,6 +42,8 @@ _globals['_VMINSTANCE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VMINSTANCE'].fields_by_name['fqdn']._loaded_options = None _globals['_VMINSTANCE'].fields_by_name['fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_VMINSTANCE'].fields_by_name['tenant']._loaded_options = None + _globals['_VMINSTANCE'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_VMINSTANCE'].fields_by_name['project_uuid']._loaded_options = None _globals['_VMINSTANCE'].fields_by_name['project_uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VMINSTANCE'].fields_by_name['os_uuid']._loaded_options = None @@ -103,41 +105,41 @@ _globals['_VMSERVICE'].methods_by_name['Delete']._loaded_options = None _globals['_VMSERVICE'].methods_by_name['Delete']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' _globals['_VMINSTANCE']._serialized_start=162 - _globals['_VMINSTANCE']._serialized_end=970 - _globals['_LINUXDETAILS']._serialized_start=973 - _globals['_LINUXDETAILS']._serialized_end=1117 - _globals['_WINDOWSDETAILS']._serialized_start=1120 - _globals['_WINDOWSDETAILS']._serialized_end=1276 - _globals['_NETWORKINTERFACE']._serialized_start=1278 - _globals['_NETWORKINTERFACE']._serialized_end=1401 - _globals['_VMSERVICEGETREQUEST']._serialized_start=1403 - _globals['_VMSERVICEGETREQUEST']._serialized_end=1490 - _globals['_VMSERVICEGETRESPONSE']._serialized_start=1492 - _globals['_VMSERVICEGETRESPONSE']._serialized_end=1558 - _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_start=1560 - _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_end=1683 - _globals['_VMSERVICECREATELINUXREQUEST']._serialized_start=1685 - _globals['_VMSERVICECREATELINUXREQUEST']._serialized_end=1800 - _globals['_VMSERVICECREATEREQUEST']._serialized_start=1803 - _globals['_VMSERVICECREATEREQUEST']._serialized_end=2458 - _globals['_LINUXDISK']._serialized_start=2461 - _globals['_LINUXDISK']._serialized_end=2631 - _globals['_WINDOWSDISK']._serialized_start=2634 - _globals['_WINDOWSDISK']._serialized_end=2807 - _globals['_VMSERVICECREATERESPONSE']._serialized_start=2809 - _globals['_VMSERVICECREATERESPONSE']._serialized_end=2834 - _globals['_VMSERVICEUPDATEREQUEST']._serialized_start=2837 - _globals['_VMSERVICEUPDATEREQUEST']._serialized_end=2972 - _globals['_VMSERVICEUPDATERESPONSE']._serialized_start=2974 - _globals['_VMSERVICEUPDATERESPONSE']._serialized_end=2999 - _globals['_VMSERVICELISTREQUEST']._serialized_start=3002 - _globals['_VMSERVICELISTREQUEST']._serialized_end=3131 - _globals['_VMSERVICELISTRESPONSE']._serialized_start=3133 - _globals['_VMSERVICELISTRESPONSE']._serialized_end=3202 - _globals['_VMSERVICEDELETEREQUEST']._serialized_start=3204 - _globals['_VMSERVICEDELETEREQUEST']._serialized_end=3264 - _globals['_VMSERVICEDELETERESPONSE']._serialized_start=3266 - _globals['_VMSERVICEDELETERESPONSE']._serialized_end=3291 - _globals['_VMSERVICE']._serialized_start=3294 - _globals['_VMSERVICE']._serialized_end=3807 + _globals['_VMINSTANCE']._serialized_end=1007 + _globals['_LINUXDETAILS']._serialized_start=1010 + _globals['_LINUXDETAILS']._serialized_end=1154 + _globals['_WINDOWSDETAILS']._serialized_start=1157 + _globals['_WINDOWSDETAILS']._serialized_end=1313 + _globals['_NETWORKINTERFACE']._serialized_start=1315 + _globals['_NETWORKINTERFACE']._serialized_end=1438 + _globals['_VMSERVICEGETREQUEST']._serialized_start=1440 + _globals['_VMSERVICEGETREQUEST']._serialized_end=1527 + _globals['_VMSERVICEGETRESPONSE']._serialized_start=1529 + _globals['_VMSERVICEGETRESPONSE']._serialized_end=1595 + _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_start=1597 + _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_end=1720 + _globals['_VMSERVICECREATELINUXREQUEST']._serialized_start=1722 + _globals['_VMSERVICECREATELINUXREQUEST']._serialized_end=1837 + _globals['_VMSERVICECREATEREQUEST']._serialized_start=1840 + _globals['_VMSERVICECREATEREQUEST']._serialized_end=2495 + _globals['_LINUXDISK']._serialized_start=2498 + _globals['_LINUXDISK']._serialized_end=2668 + _globals['_WINDOWSDISK']._serialized_start=2671 + _globals['_WINDOWSDISK']._serialized_end=2844 + _globals['_VMSERVICECREATERESPONSE']._serialized_start=2846 + _globals['_VMSERVICECREATERESPONSE']._serialized_end=2871 + _globals['_VMSERVICEUPDATEREQUEST']._serialized_start=2874 + _globals['_VMSERVICEUPDATEREQUEST']._serialized_end=3009 + _globals['_VMSERVICEUPDATERESPONSE']._serialized_start=3011 + _globals['_VMSERVICEUPDATERESPONSE']._serialized_end=3036 + _globals['_VMSERVICELISTREQUEST']._serialized_start=3039 + _globals['_VMSERVICELISTREQUEST']._serialized_end=3168 + _globals['_VMSERVICELISTRESPONSE']._serialized_start=3170 + _globals['_VMSERVICELISTRESPONSE']._serialized_end=3239 + _globals['_VMSERVICEDELETEREQUEST']._serialized_start=3241 + _globals['_VMSERVICEDELETEREQUEST']._serialized_end=3301 + _globals['_VMSERVICEDELETERESPONSE']._serialized_start=3303 + _globals['_VMSERVICEDELETERESPONSE']._serialized_end=3328 + _globals['_VMSERVICE']._serialized_start=3331 + _globals['_VMSERVICE']._serialized_end=3844 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/vm_pb2.pyi b/python/fits/api/vm/v1/vm_pb2.pyi index a46f876..930c8dd 100644 --- a/python/fits/api/vm/v1/vm_pb2.pyi +++ b/python/fits/api/vm/v1/vm_pb2.pyi @@ -11,10 +11,11 @@ from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union DESCRIPTOR: _descriptor.FileDescriptor class VMInstance(_message.Message): - __slots__ = ("uuid", "meta", "fqdn", "project_uuid", "os_uuid", "location_uuid", "contact_uuid", "cpu", "ram", "order_number", "contract", "backup", "availability", "serviceclass", "status", "status_info", "windows_details", "linux_details", "interfaces", "vlan") + __slots__ = ("uuid", "meta", "fqdn", "tenant", "project_uuid", "os_uuid", "location_uuid", "contact_uuid", "cpu", "ram", "order_number", "contract", "backup", "availability", "serviceclass", "status", "status_info", "windows_details", "linux_details", "interfaces", "vlan") UUID_FIELD_NUMBER: _ClassVar[int] META_FIELD_NUMBER: _ClassVar[int] FQDN_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] PROJECT_UUID_FIELD_NUMBER: _ClassVar[int] OS_UUID_FIELD_NUMBER: _ClassVar[int] LOCATION_UUID_FIELD_NUMBER: _ClassVar[int] @@ -35,6 +36,7 @@ class VMInstance(_message.Message): uuid: str meta: _common_pb2.Meta fqdn: str + tenant: str project_uuid: str os_uuid: str location_uuid: str @@ -52,7 +54,7 @@ class VMInstance(_message.Message): linux_details: LinuxDetails interfaces: _containers.RepeatedCompositeFieldContainer[NetworkInterface] vlan: _vlan_pb2.Vlan - def __init__(self, uuid: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., fqdn: _Optional[str] = ..., project_uuid: _Optional[str] = ..., os_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., order_number: _Optional[str] = ..., contract: _Optional[bool] = ..., backup: _Optional[bool] = ..., availability: _Optional[str] = ..., serviceclass: _Optional[str] = ..., status: _Optional[str] = ..., status_info: _Optional[str] = ..., windows_details: _Optional[_Union[WindowsDetails, _Mapping]] = ..., linux_details: _Optional[_Union[LinuxDetails, _Mapping]] = ..., interfaces: _Optional[_Iterable[_Union[NetworkInterface, _Mapping]]] = ..., vlan: _Optional[_Union[_vlan_pb2.Vlan, _Mapping]] = ...) -> None: ... + def __init__(self, uuid: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., fqdn: _Optional[str] = ..., tenant: _Optional[str] = ..., project_uuid: _Optional[str] = ..., os_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., order_number: _Optional[str] = ..., contract: _Optional[bool] = ..., backup: _Optional[bool] = ..., availability: _Optional[str] = ..., serviceclass: _Optional[str] = ..., status: _Optional[str] = ..., status_info: _Optional[str] = ..., windows_details: _Optional[_Union[WindowsDetails, _Mapping]] = ..., linux_details: _Optional[_Union[LinuxDetails, _Mapping]] = ..., interfaces: _Optional[_Iterable[_Union[NetworkInterface, _Mapping]]] = ..., vlan: _Optional[_Union[_vlan_pb2.Vlan, _Mapping]] = ...) -> None: ... class LinuxDetails(_message.Message): __slots__ = ("disks", "ldap_uuid", "ldap_fqdn") From 31bdd78d70fef0d1830286d313734e718293ed81 Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Tue, 22 Sep 2026 08:32:25 +0200 Subject: [PATCH 13/21] feat: support basic VM operations --- doc/index.html | 1286 +++++-- go.mod | 3 +- go.sum | 2 - go/errorutil/errors.go | 51 + go/fits/api/v1/common.pb.go | 104 +- go/fits/api/vm/v1/location.pb.go | 9 +- go/fits/api/vm/v1/os.pb.go | 31 +- go/fits/api/vm/v1/stagetype.pb.go | 20 +- go/fits/api/vm/v1/vlan.pb.go | 111 +- go/fits/api/vm/v1/vm.pb.go | 3170 +++++++++++++---- .../api/vm/v1/vmv1connect/location.connect.go | 4 +- go/fits/api/vm/v1/vmv1connect/os.connect.go | 4 +- go/fits/api/vm/v1/vmv1connect/vm.connect.go | 355 +- go/permissions/servicepermissions.go | 218 +- js/fits/api/v1/common_pb.ts | 38 +- js/fits/api/vm/v1/location_pb.ts | 12 +- js/fits/api/vm/v1/os_pb.ts | 13 +- js/fits/api/vm/v1/stagetype_pb.ts | 10 +- js/fits/api/vm/v1/vlan_pb.ts | 54 +- js/fits/api/vm/v1/vm_pb.ts | 1319 +++++-- proto/fits/api/v1/common.proto | 11 - proto/fits/api/vm/v1/location.proto | 12 +- proto/fits/api/vm/v1/os.proto | 22 +- proto/fits/api/vm/v1/stagetype.proto | 6 +- proto/fits/api/vm/v1/vlan.proto | 46 +- proto/fits/api/vm/v1/vm.proto | 529 ++- python/fits/api/v1/common_pb2.py | 28 +- python/fits/api/v1/common_pb2.pyi | 10 - python/fits/api/vm/v1/location_pb2.py | 18 +- python/fits/api/vm/v1/os_pb2.py | 25 +- python/fits/api/vm/v1/os_pb2.pyi | 9 +- python/fits/api/vm/v1/stagetype_pb2.py | 8 +- python/fits/api/vm/v1/stagetype_pb2.pyi | 8 +- python/fits/api/vm/v1/vlan_pb2.py | 26 +- python/fits/api/vm/v1/vlan_pb2.pyi | 24 +- python/fits/api/vm/v1/vm_connect.py | 650 ++++ python/fits/api/vm/v1/vm_pb2.py | 276 +- python/fits/api/vm/v1/vm_pb2.pyi | 357 +- 38 files changed, 6783 insertions(+), 2096 deletions(-) diff --git a/doc/index.html b/doc/index.html index c3bda30..ce58cd7 100644 --- a/doc/index.html +++ b/doc/index.html @@ -269,10 +269,6 @@

      Table of Contents

      MUpdateMeta -
    • - MValidationError -
    • -
    • EAdminRole @@ -841,6 +837,10 @@

      Table of Contents

      fits/api/vm/v1/vm.proto
    • auto_extend bool

      AutoExtend if set to true the disk grows automatically

      If true, the disk grows automatically when space runs low.

      size_in_gb uint64 optional

      Size if the disk in GB - -TODO discuss how this could be optional

      Size of the disk in GB.

      driveletter string optional

      DriveLetter where this disk should be assigned

      Drive letter assigned to this disk (e.g. "D").

      label string

      Label of the disk

      Label (name) of the disk.

      tenantstring

      Tenant this VM belongs to.

      project_uuid string
      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FieldTypeLabelDescription
      locstringrepeated

      Location of the validation error within the request, e.g. ["body", "tenant_uuid"]

      msgstring

      Human readable error message

      typestring

      Type of the validation error, e.g. "value_error"

      - - - - -

      AdminRole

      @@ -4456,7 +4514,7 @@

      Location

      LocationServiceListRequest

      -

      LocationServiceListRequest is the request payload for a location list request.

      The upstream nulink API accepts no body or parameters, so this is intentionally empty.

      TODO pro tenant anders. FITS darf beide RZ, sonst nur eines, logik dazu in nu-link

      +

      LocationServiceListRequest is the request payload for a location list request.

      @@ -4469,8 +4527,7 @@

      LocationServiceListRequesttenant

      - + @@ -4511,7 +4568,7 @@

      LocationServiceListResponse<

      LocationService

      -

      LocationService lists datacenter locations available for VM instances.

      TODO wurde besprochen am 09.09.26

      TODO muss zu "Pod" werden. User erstellen eine VM nicht pro location, sondern pro Pod

      TODO Ein Pod ist fest an einer location verankert.

      +

      LocationService lists datacenter locations available for VM instances, scoped per tenant.

      string

      Tenant to list available locations for -TODO Tobias baut in nulink-api ein

      Tenant to list available locations for

      @@ -4522,7 +4579,7 @@

      LocationService

      - + @@ -4583,7 +4640,7 @@

      OS

      OSServiceListRequest

      -

      OSServiceListRequest is the request payload for a OS list request.

      The upstream nulink API accepts no body or parameters, so this is intentionally empty.

      +

      OSServiceListRequest is the request payload for a OS list request.

      @@ -4600,10 +4657,10 @@

      OSServiceListResponse

      - + - + @@ -4620,7 +4677,7 @@

      OSServiceListResponse

      OSService

      -

      OSService lists operating systems available for VM instances.

      TODO wurde besprochen am 09.09.26

      +

      OSService lists operating systems available for VM instances.

      Method NameRequest TypeResponse TypeDescription
      List LocationServiceListRequest LocationServiceListResponse

      Returns a list of all datacenter locations.

      Returns a list of all datacenter locations available for a tenant.

      ossoperating_systems OS repeated

      The available OSs

      The available operating systems

      @@ -4631,7 +4688,7 @@

      OSService

      - + @@ -4647,7 +4704,7 @@

      fits/api/vm/v1/stagetype.proto

      StageType -

      Maps to the upstream NucleusDBStageTypes model.

      +

      StageType is the definition of available stage types. (Development, Test, Integration, Production)

      Method NameRequest TypeResponse TypeDescription
      List OSServiceListRequest OSServiceListResponse

      Returns a list of all OSs.

      Returns a list of all operating systems.

      @@ -4678,7 +4735,7 @@

      StageType

      StageTypeServiceListRequest

      -

      StageTypeServiceListRequest is the request payload for a stage type list request.

      Maps to the upstream TenantInputModel.

      +

      StageTypeServiceListRequest is the request payload for a stage type list request.

      @@ -4695,7 +4752,7 @@

      StageTypeServiceListRespons

      - + @@ -4715,7 +4772,7 @@

      StageTypeServiceListRespons

      StageTypeService

      -

      StageTypeService lists stage types available for VM instances.

      TODO wurde besprochen am 09.09.26

      +

      StageTypeService lists stage types available for VM instances.

      stagetypesstage_types StageType repeated

      The available stage types

      @@ -4742,7 +4799,7 @@

      fits/api/vm/v1/vlan.proto

      Vlan -

      Vlan is a VLAN that a VM can be connected to.

      Maps to the upstream NucleusDBVlans model.

      TODO evaluate which of the uuid fields are really optional; the upstream API

      spec does not make this clear, so we validate them strictly for now.

      +

      Vlan is a VLAN that a VM can be connected to.

      Method NameRequest TypeResponse TypeDescription
      @@ -4815,24 +4872,10 @@

      Vlan

      - - - - - - - - - - - - - - - + - - + + @@ -4843,17 +4886,10 @@

      Vlan

      - - - - - - - - + - + @@ -4864,7 +4900,7 @@

      Vlan

      VlanServiceListRequest

      -

      VlanServiceListRequest is the request payload for a VLAN list request.

      Maps to the upstream TenantInputModel.

      +

      VlanServiceListRequest is the request payload for a VLAN list request.

      pod_titlestring

      Title of the pod this VLAN belongs to

      pod_uuidstring

      Uuid of the pod this VLAN belongs to

      stage_type_titlelocation_uuid string

      Title of the stage type of this VLAN

      optional

      TODO instead of the pod title, could we have the location_uuid?

      tenant_uuidstring

      Uuid of the tenant this VLAN belongs to

      tenant_titletenant string

      Title of the tenant this VLAN belongs to

      Tenant this VLAN belongs to.

      @@ -4877,10 +4913,7 @@

      VlanServiceListRequest

      - + @@ -4907,14 +4940,6 @@

      VlanServiceListResponse

      - - - - - - -
      tenant string

      Tenant to list available VLANs for - -Note: the upstream model also has a requested_by field, which is intentionally -omitted here because it is added by the auth layer from the request context.

      Tenant to list available VLANs for

      The available VLANs

      validation_errorsfits.api.v1.ValidationErrorrepeated

      Validation errors returned by the upstream API when the request is rejected (HTTP 422) -TODO this is just a test

      @@ -4929,7 +4954,7 @@

      VlanServiceListResponse

      VlanService

      -

      VLANService lists VLANs avaiable for VM instances.

      TODO wurde besprochen am 09.09.26

      +

      VLANService lists VLANs avaiable for VM instances.

      @@ -4955,6 +4980,30 @@

      fits/api/vm/v1/vm.proto

      To

      +

      ContactChange

      +

      ContactChange is the payload for changing a VM's contact person.

      + + +
      Method NameRequest TypeResponse TypeDescription
      + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      contact_uuidstring

      UUID of the new contact.

      + + + + +

      LinuxDetails

      Linux-specific VM details.

      @@ -4983,8 +5032,7 @@

      LinuxDetails

      ldap_fqdn
      string -

      Linux-specific FQDN. Derived from the optional name set at creation, -or generated by the backend if none was provided.

      +

      Linux-specific FQDN, derived from the name at creation or generated by the backend.

      @@ -5004,32 +5052,39 @@

      LinuxDisk

      + + uuid + string + optional +

      UUID of the disk; set for existing disks, unset for new ones.

      + + + + label + string + +

      Label (name) of the disk.

      + + auto_extend bool -

      If true, the disk grows automatically when space runs low.

      +

      Whether the disk grows automatically when space runs low.

      - size_in_gb + size uint64 optional

      Size of the disk in GB.

      - - label - string - -

      Label (name) of the disk.

      - - mount_point string optional -

      Filesystem path where this disk should be mounted (e.g. "/data").

      +

      Mount point (e.g. "/data").

      @@ -5069,7 +5124,62 @@

      NetworkInterface

      MAC address of this interface. -TODO validation

      +TODO: add validation

      + + + + + + + + + +

      PerformanceClassChange

      +

      PerformanceClassChange is the payload for changing a VM's CPU and RAM.

      + + + + + + + + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      cpuuint32

      Number of vCPUs (1-64).

      ramuint32

      RAM size in GB.

      + + + + + +

      ServiceClassChange

      +

      ServiceClassChange is the payload for changing a VM's service class.

      + + + + + + + + + + + + + @@ -5080,7 +5190,7 @@

      NetworkInterface

      VMInstance

      -

      VM Instance Messages

      A VM instance as returned by the API.

      +

      A VM instance as returned by the API.

      FieldTypeLabelDescription
      serviceclassServiceClass

      Target service class.

      @@ -5101,15 +5211,14 @@

      VMInstance

      +TODO: dates are available in the nulink db but not passed through yet.

      - + @@ -5130,8 +5239,7 @@

      VMInstance

      - + @@ -5139,8 +5247,7 @@

      VMInstance

      +TODO: not exposed by the upstream (nulink) VM records yet; always empty.

      @@ -5164,53 +5271,40 @@

      VMInstance

      - - - - - - - - - - - - - - - + - + - + - + - + - - + + - + - - + + - + @@ -5238,16 +5332,138 @@

      VMInstance

      - + - -
      fits.api.v1.Meta

      Metadata for this VM. -TODO dates are available in the nulink db, but not passed through yet.

      fqdn string

      FQDN of the VM. Derived from the optional name set at creation, -or generated by the backend if none was provided.

      FQDN of the VM, derived from the name at creation or generated by the backend.

      os_uuid string

      UUID of the operating system image installed on the VM. -Resolve the human-readable title via the OS endpoint.

      UUID of the OS image installed on the VM; resolve the title via the OS endpoint.

      string

      UUID of the datacenter location. -The VM is automatically scheduled into one pod within the chosen location; -users select the city but not the specific datacenter.

      RAM in GB.

      order_numberstring

      Internal reference number provided by the user, e.g. a ticket ID.

      contractbool

      Whether the order was placed by FITS (true) or self-service by the user (false).

      backup bool

      Whether backup is enabled.

      Whether backup is enabled. +TODO: the upstream (nulink) list/get models do not expose this; always false.

      availabilitystatus string

      Availability level: v0, v1, v2, v3 (higher value = higher availability).

      Status of the ongoing operation.

      serviceclassstatus_info string

      Service class: sz1, sz2, sz3 (higher value = higher tier).

      Additional information about the current status.

      statusstringavailabilityAvailability

      Status of the ongoing operation.

      Availability level.

      status_infostringserviceclassServiceClass

      Additional information about the current status.

      Service class.

      vlan Vlan

      VLAN the VM is attached to.

      VLAN the VM is attached to. +TODO: not exposed by the upstream (nulink) VM records yet; always unset.

      - - - - - + + order_number + string + +

      Internal reference number provided by the user, e.g. a ticket ID.

      + + + + contract + bool + +

      True if the order was placed by FITS, false if self-service. +TODO: maybe remove this field entirely.

      + + + + + + + + + +

      VMServiceAddDiskRequest

      +

      Request to order an additional data disk for a VM.

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      uuidstring

      UUID of the VM to attach the disk to.

      projectstring

      Project the VM belongs to.

      order_numberstring

      Order reference for this operation. +TODO: can this be optional?

      linuxLinuxDisk

      Linux data disk.

      windowsWindowsDisk

      Windows data disk.

      + + + + + +

      VMServiceAddDiskResponse

      +

      Response for AddDisk.

      + + + + + +

      VMServiceAddIPRequest

      +

      Request to order an additional IP address for a VM.

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      uuidstring

      UUID of the VM to attach the IP to.

      projectstring

      Project the VM belongs to.

      order_numberstring

      Order reference for this operation. +TODO: can this be optional?

      + + + + + +

      VMServiceAddIPResponse

      +

      Response for AddIP.

      + + + + +

      VMServiceCreateLinuxRequest

      Linux-specific create request parts.

      @@ -5262,14 +5478,14 @@

      VMServiceCreateLinuxRequest< ldap_uuid string -

      UUID of the LDAP directory the VM should integrate with. Required.

      +

      UUID of the LDAP directory the VM should integrate with.

      - disk + disks LinuxDisk - -

      Disk configuration for the Linux VM.

      + repeated +

      Disks for the Linux VM, excluding the OS disk.

      @@ -5280,7 +5496,7 @@

      VMServiceCreateLinuxRequest<

      VMServiceCreateRequest

      -

      Request to create a new VM instance.

      +

      Request to create a new VM instance.

      TODO: contract, billable and billing_start_date.

      @@ -5293,46 +5509,42 @@

      VMServiceCreateRequest

      - + - + - + - + - + - + @@ -5353,14 +5565,15 @@

      VMServiceCreateRequest

      - + - @@ -5368,22 +5581,21 @@

      VMServiceCreateRequest

      - + - + - + - + - + @@ -5408,7 +5620,7 @@

      VMServiceCreateRequest

      VMServiceCreateResponse

      -

      VMServiceCreateResponse TODO

      +

      Response for Create; an empty response means the VM was accepted.

      @@ -5428,14 +5640,14 @@

      VMServiceCreateWindowsRequ

      - + - + - - + + @@ -5445,8 +5657,8 @@

      VMServiceCreateWindowsRequ -

      VMServiceDeleteRequest

      -

      VMServiceDeleteRequest TODO

      +

      VMServiceDeleteDiskRequest

      +

      Request to cancel a data disk.

      project_uuid string

      UUID of the project this VM belongs to. Required.

      UUID of the project this VM belongs to.

      name string optional

      Optional name for the VM. The FQDN is derived from this value.

      Optional name; the FQDN is derived from it.

      os_uuid string

      UUID of the operating system image to install. Required.

      UUID of the operating system image to install.

      vlan_uuid string

      UUID of the VLAN network to attach the VM to. Required. -Obtainable via the VLAN list endpoint.

      UUID of the VLAN network to attach the VM to.

      location_uuid string

      UUID of the datacenter location. Required. -The VM is automatically scheduled into one data center within the chosen location; -users select the city but not the specific datacenter.

      UUID of the datacenter location; the VM is scheduled into one data center within it.

      contact_uuid string

      TODO: Contact UUID – open discussion with FCN on how to model responsible contacts. -GDPR considerations pending. May become a dedicated /contact endpoint.

      TODO: Contact UUID – open discussion with FCN; may become a dedicated /contact endpoint.

      order_number string

      Internal reference number provided by the user, e.g. a ticket ID. Free text. Required.

      Internal reference number provided by the user, e.g. a ticket ID. +TODO: can this be optional?

      labels fits.api.v1.Labels

      Optional key-value labels for accounting purposes +

      Optional key-value labels for accounting purposes. (e.g. contract number, transaction number, technical key, accounting key).

      backup bool

      Whether backup is enabled. Simple on/off toggle; no distinct backup plans. Required.

      Whether backup is enabled.

      availabilitystringAvailability

      Availability level: v0, v1, v2, v3 (higher value = higher availability). Required.

      Availability level.

      serviceclassstringServiceClass

      Service class: sz1, sz2, sz3 (higher value = higher tier). Required. -Only certain combinations with availability are valid; enforced by the backend.

      Service class; only certain combinations with availability are valid.

      domain_uuid string

      UUID of the Windows domain the VM should join. Required.

      UUID of the Windows domain the VM should join.

      diskdisks WindowsDisk

      Disk configuration for the Windows VM.

      repeated

      Disks for the Windows VM, excluding the OS disk.

      @@ -5455,11 +5667,33 @@

      VMServiceDeleteRequest

      + + + + + + + + + + + + + + - + + + + + + + + @@ -5469,15 +5703,15 @@

      VMServiceDeleteRequest

      -

      VMServiceDeleteResponse

      -

      VMServiceDeleteResponse TODO

      +

      VMServiceDeleteDiskResponse

      +

      Response for DeleteDisk.

      -

      VMServiceGetRequest

      -

      VMServiceGetRequest TODO

      +

      VMServiceDeleteIPRequest

      +

      Request to delete an IP address from a VM.

      uuidstring

      UUID of the VM the disk belongs to.

      disk_uuidstring

      UUID of the disk to cancel.

      project string

      Project of the VM

      Project the VM belongs to.

      order_numberstring

      Order reference for this operation. +TODO: can this be optional?

      @@ -5490,14 +5724,29 @@

      VMServiceGetRequest

      - + + + + + + + + - + + + + + + + + @@ -5507,8 +5756,15 @@

      VMServiceGetRequest

      -

      VMServiceGetResponse

      -

      VMServiceGetResponse TODO

      +

      VMServiceDeleteIPResponse

      +

      Response for DeleteIP.

      + + + + + +

      VMServiceDeleteRequest

      +

      Request to cancel a VM instance.

      uuid string

      Uuid of this VM

      UUID of the VM the IP belongs to.

      interface_uuidstring

      UUID of the network interface holding the IP.

      project string

      Project where this VM belongs to

      Project the VM belongs to.

      order_numberstring

      Order reference for this operation. +TODO: can this be optional?

      @@ -5518,10 +5774,25 @@

      VMServiceGetResponse

      - - + + - + + + + + + + + + + + + + + + @@ -5531,8 +5802,15 @@

      VMServiceGetResponse

      -

      VMServiceListRequest

      -

      VMServiceListRequest

      +

      VMServiceDeleteResponse

      +

      Response for Delete; an empty response means the cancellation was accepted.

      + + + + + +

      VMServiceGetRequest

      +

      Request to get a VM by UUID.

      vmVMInstanceprojectstring

      The VM

      Project the VM belongs to.

      uuidstring

      UUID of the VM to delete.

      order_numberstring

      Order reference for this operation. +TODO: can this be optional?

      @@ -5542,17 +5820,17 @@

      VMServiceListRequest

      - + - + - + - - + + @@ -5562,8 +5840,8 @@

      VMServiceListRequest

      -

      VMServiceListResponse

      -

      VMServiceListResponse

      +

      VMServiceGetResponse

      +

      Response containing the requested VM.

      tenantuuid string optional

      Tenant of the VM

      UUID of the VM.

      project_uuidtenant stringoptional

      Project of the VM

      Tenant of the VM.

      @@ -5573,10 +5851,10 @@

      VMServiceListResponse

      - + - - + + @@ -5586,8 +5864,8 @@

      VMServiceListResponse

      -

      VMServiceUpdateRequest

      -

      VMServiceUpdateRequest TODO

      +

      VMServiceListRequest

      +

      Request to list VMs.

      vmsvm VMInstancerepeated

      List of VM instances

      The VM.

      @@ -5597,17 +5875,10 @@

      VMServiceUpdateRequest

      - + - - - - - - - - - + + @@ -5617,15 +5888,8 @@

      VMServiceUpdateRequest

      -

      VMServiceUpdateResponse

      -

      VMServiceUpdateResponse TODO

      - - - - - -

      WindowsDetails

      -

      Windows-specific VM details.

      +

      VMServiceListResponse

      +

      Response containing the list of VMs.

      project_uuidtenant string

      Project of the VM

      update_metafits.api.v1.UpdateMeta

      UpdateMeta contains the timestamp and strategy to be used in this update request.

      optional

      Tenant of the VMs.

      @@ -5635,25 +5899,10 @@

      WindowsDetails

      - - + + - - - - - - - - - - - - - - - + @@ -5663,8 +5912,8 @@

      WindowsDetails

      -

      WindowsDisk

      -

      Disk configuration for a Windows VM.

      +

      VMServiceMoveIPRequest

      +

      Request to move an IP address from one VM to another.

      disksWindowsDiskvmsVMInstance repeated

      Disks configured on the Windows VM.

      domain_uuidstring

      UUID of the Windows domain the VM has joined.

      domain_fqdnstring

      Windows-specific FQDN. Derived from the optional name set at creation, -or generated by the backend if none was provided.

      The VM instances.

      @@ -5674,31 +5923,39 @@

      WindowsDisk

      - - + + - + - - - - + + + + - + - - + + - + - + + + + + + + + @@ -5708,14 +5965,452 @@

      WindowsDisk

      +

      VMServiceMoveIPResponse

      +

      Response for MoveIP.

      - + + + + +

      VMServiceUpdateDiskRequest

      +

      Request to change an existing data disk; only size and auto-extend are mutable.

      + + +
      auto_extendbooluuidstring

      If true, the disk grows automatically when space runs low.

      UUID of the VM the IP currently belongs to.

      size_in_gbuint64optional

      Size of the disk in GB.

      interface_uuidstring

      UUID of the network interface holding the IP.

      driveletterproject stringoptional

      Drive letter assigned to this disk (e.g. "D").

      Project the VM belongs to.

      labelorder_number string

      Label (name) of the disk.

      Order reference for this operation. +TODO: can this be optional?

      target_vm_uuidstring

      UUID of the VM to move the IP to.

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      uuidstring

      UUID of the VM the disk belongs to.

      disk_uuidstring

      UUID of the disk to change.

      projectstring

      Project the VM belongs to.

      order_numberstring

      Order reference for this operation. +TODO: can this be optional?

      auto_extendbooloptional

      New auto-extend behavior; unset keeps the current value.

      sizeuint64optional

      New size of the disk in GB; unset keeps the current value.

      + + + + + +

      VMServiceUpdateDiskResponse

      +

      Response for UpdateDisk.

      + + + + + +

      VMServiceUpdateRequest

      +

      Request to change a mutable property of an existing VM.

      Exactly one action must be set; each maps onto its own upstream endpoint.

      TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per

      action); combined changes would need

      server-side fan-out without rollback.

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      uuidstring

      UUID of the VM to update.

      projectstring

      Project the VM belongs to.

      order_numberstring

      Order reference for this operation. +TODO: can this be optional?

      update_metafits.api.v1.UpdateMeta

      Timestamp and strategy for this update.

      performance_classPerformanceClassChange

      Change the CPU/RAM performance class.

      service_classServiceClassChange

      Change the service class.

      contactContactChange

      Change the contact person.

      + + + + + +

      VMServiceUpdateResponse

      +

      Response for Update; an empty response means the change was accepted.

      + + + + + +

      VMServiceValidateAddDiskRequest

      +

      Request to validate an AddDisk without ordering anything.

      + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      add_diskVMServiceAddDiskRequest

      The add disk request to validate.

      + + + + + +

      VMServiceValidateAddDiskResponse

      +

      Response for ValidateAddDisk; violations are returned as an InvalidArgument error.

      + + + + + +

      VMServiceValidateAddIPRequest

      +

      Request to validate an AddIP without ordering anything.

      + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      add_ipVMServiceAddIPRequest

      The add IP request to validate.

      + + + + + +

      VMServiceValidateAddIPResponse

      +

      Response for ValidateAddIP; violations are returned as an InvalidArgument error.

      + + + + + +

      VMServiceValidateCreateRequest

      +

      Request to validate a VM create without creating anything.

      + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      createVMServiceCreateRequest

      The create request to validate.

      + + + + + +

      VMServiceValidateCreateResponse

      +

      Response for ValidateCreate; violations are returned as an InvalidArgument error.

      + + + + + +

      VMServiceValidateUpdateDiskRequest

      +

      Request to validate an UpdateDisk without changing anything.

      + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      update_diskVMServiceUpdateDiskRequest

      The update disk request to validate.

      + + + + + +

      VMServiceValidateUpdateDiskResponse

      +

      Response for ValidateUpdateDisk; violations are returned as an InvalidArgument error.

      + + + + + +

      WindowsDetails

      +

      Windows-specific VM details.

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      disksWindowsDiskrepeated

      Disks configured on the Windows VM.

      domain_uuidstring

      UUID of the Windows domain the VM has joined.

      domain_fqdnstring

      Windows-specific FQDN, derived from the name at creation or generated by the backend.

      + + + + + +

      WindowsDisk

      +

      Disk configuration for a Windows VM.

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      uuidstringoptional

      UUID of the disk; set for existing disks, unset for new ones.

      labelstring

      Label (name) of the disk.

      auto_extendbool

      Whether the disk grows automatically when space runs low.

      sizeuint64optional

      Size of the disk in GB.

      driveletterstringoptional

      Drive letter (e.g. "D").

      + + + + + + + +

      Availability

      +

      Availability specifies the availability level of a VM; higher value = higher availability.

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      NameNumberDescription
      AVAILABILITY_UNSPECIFIED0

      AVAILABILITY_UNSPECIFIED is not specified.

      AVAILABILITY_V01

      AVAILABILITY_V0 is availability level V0.

      AVAILABILITY_V12

      AVAILABILITY_V1 is availability level V1.

      AVAILABILITY_V23

      AVAILABILITY_V2 is availability level V2.

      AVAILABILITY_V34

      AVAILABILITY_V3 is availability level V3.

      + +

      ServiceClass

      +

      ServiceClass specifies the service tier of a VM; higher value = higher tier.

      Only certain combinations with Availability are valid.

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      NameNumberDescription
      SERVICE_CLASS_UNSPECIFIED0

      SERVICE_CLASS_UNSPECIFIED is not specified.

      SERVICE_CLASS_SZ11

      SERVICE_CLASS_SZ1 is service class SZ1.

      SERVICE_CLASS_SZ22

      SERVICE_CLASS_SZ2 is service class SZ2.

      SERVICE_CLASS_SZ33

      SERVICE_CLASS_SZ3 is service class SZ3.

      +

      VMService

      -

      VMService provides VM CRUD perations.

      +

      VMService provides VM CRUD operations.

      @@ -5757,6 +6452,77 @@

      VMService

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Method NameRequest TypeResponse TypeDescription

      Deletes a VM.

      AddDiskVMServiceAddDiskRequestVMServiceAddDiskResponse

      Orders an additional data disk for a VM.

      UpdateDiskVMServiceUpdateDiskRequestVMServiceUpdateDiskResponse

      Changes the size or auto-extend behavior of an existing data disk.

      DeleteDiskVMServiceDeleteDiskRequestVMServiceDeleteDiskResponse

      Cancels a data disk.

      AddIPVMServiceAddIPRequestVMServiceAddIPResponse

      Orders an additional IP address for a VM.

      MoveIPVMServiceMoveIPRequestVMServiceMoveIPResponse

      Moves an IP address from one VM to another.

      DeleteIPVMServiceDeleteIPRequestVMServiceDeleteIPResponse

      Deletes an IP address from a VM.

      ValidateCreateVMServiceValidateCreateRequestVMServiceValidateCreateResponse

      Validates a VM create request without creating anything. Intended for +form pre-checks; the create endpoint validates again before executing.

      ValidateAddDiskVMServiceValidateAddDiskRequestVMServiceValidateAddDiskResponse

      Validates an AddDisk request without ordering anything.

      ValidateUpdateDiskVMServiceValidateUpdateDiskRequestVMServiceValidateUpdateDiskResponse

      Validates an UpdateDisk request without changing anything.

      ValidateAddIPVMServiceValidateAddIPRequestVMServiceValidateAddIPResponse

      Validates an AddIP request without ordering anything.

      diff --git a/go.mod b/go.mod index bb7f83f..3dadd34 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ require ( github.com/google/go-cmp v0.7.0 github.com/klauspost/connect-compress/v2 v2.1.1 github.com/stretchr/testify v1.12.1 + google.golang.org/genproto/googleapis/rpc v0.0.0-20260831171406-18b4a7587f8a google.golang.org/grpc v1.83.2 google.golang.org/protobuf v1.36.12 ) @@ -22,11 +23,9 @@ require ( github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/klauspost/compress v1.19.2 // indirect github.com/minio/minlz v1.2.0 // indirect - github.com/stretchr/objx v0.5.3 // indirect go.yaml.in/yaml/v3 v3.0.5 // indirect golang.org/x/exp v0.0.0-20260824195058-e88cd73687aa // indirect golang.org/x/sys v0.47.0 // indirect golang.org/x/text v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260831171406-18b4a7587f8a // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260831171406-18b4a7587f8a // indirect ) diff --git a/go.sum b/go.sum index ad566c1..2bd2adc 100644 --- a/go.sum +++ b/go.sum @@ -30,8 +30,6 @@ github.com/minio/minlz v1.2.0 h1:6IOBuiHg04QxvbFfgFLT/9sMaO/UhL7S+ApW1mK8q5A= github.com/minio/minlz v1.2.0/go.mod h1:Ls9H7nlkASeCcdl5thjVD5Eraj6z+zGa7xtq57jIKD4= github.com/rodaine/protogofakeit v0.1.1 h1:ZKouljuRM3A+TArppfBqnH8tGZHOwM/pjvtXe9DaXH8= github.com/rodaine/protogofakeit v0.1.1/go.mod h1:pXn/AstBYMaSfc1/RqH3N82pBuxtWgejz1AlYpY1mI0= -github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4= -github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0= github.com/stretchr/testify v1.12.1 h1:EuwCh5fleGS7H32xRwO3wRGT7DxrDhLAT6FF8MpWDWE= github.com/stretchr/testify v1.12.1/go.mod h1:MDEgiDPPsNp5cuIrHPPCyornHKgEVbtFUmoNlxoYthg= go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw= diff --git a/go/errorutil/errors.go b/go/errorutil/errors.go index 3dd854a..baecd69 100644 --- a/go/errorutil/errors.go +++ b/go/errorutil/errors.go @@ -6,6 +6,7 @@ import ( "strings" "connectrpc.com/connect" + "google.golang.org/genproto/googleapis/rpc/errdetails" "google.golang.org/grpc/status" "github.com/google/go-cmp/cmp" @@ -222,6 +223,56 @@ func WrapConnectErr(c connect.Code, underlying error) *connect.Error { return connect.NewError(c, underlying) } +// ValidationError describes a single validation problem reported by an +// upstream API (e.g. an HTTP 422 body from nulink). +type ValidationError struct { + // Loc is the path of the offending field within the upstream request, + // e.g. ["body", "serviceclass"]. + Loc []string + // Msg is a human readable description of the problem. + Msg string + // Type is the upstream error type, e.g. "value_error". + Type string +} + +// UpstreamValidation builds an InvalidArgument connect.Error for upstream +// validation rejections (HTTP 422). It attaches the standard google.rpc error +// details so clients can render per-field problems uniformly: +// +// - BadRequest with one FieldViolation per error (field = dotted loc path, +// description = upstream message) +// - ErrorInfo identifying the upstream domain and the error type +// +// The top-level message stays generic; the structured content lives in the +// details. This mirrors how buf.validate failures surface locally, so clients +// see one uniform shape for "your input was wrong" regardless of which layer +// rejected it. +func UpstreamValidation(domain, op string, errs []ValidationError) *connect.Error { + err := connect.NewError(connect.CodeInvalidArgument, + fmt.Errorf("%s rejected %s with %d validation error(s)", domain, op, len(errs))) + if len(errs) == 0 { + return err + } + + violations := make([]*errdetails.BadRequest_FieldViolation, 0, len(errs)) + for _, e := range errs { + violations = append(violations, &errdetails.BadRequest_FieldViolation{ + Field: strings.Join(e.Loc, "."), + Description: e.Msg, + }) + } + if d, derr := connect.NewErrorDetail(&errdetails.BadRequest{FieldViolations: violations}); derr == nil { + err.AddDetail(d) + } + if d, derr := connect.NewErrorDetail(&errdetails.ErrorInfo{ + Reason: strings.ToUpper(errs[0].Type), + Domain: domain, + }); derr == nil { + err.AddDetail(d) + } + return err +} + // ConnectErrorComparer returns a go-cmp Option for comparing *connect.Error values. // Two errors are considered equal if they have the same error string and the same Connect code. func ConnectErrorComparer() cmp.Option { diff --git a/go/fits/api/v1/common.pb.go b/go/fits/api/v1/common.pb.go index 47d3a8e..d369aa9 100644 --- a/go/fits/api/v1/common.pb.go +++ b/go/fits/api/v1/common.pb.go @@ -647,71 +647,6 @@ func (x *UpdateMeta) GetLockingStrategy() OptimisticLockingStrategy { return OptimisticLockingStrategy_OPTIMISTIC_LOCKING_STRATEGY_UNSPECIFIED } -// ValidationError describes a single validation problem reported by an upstream API. -// Used to surface structured validation errors (e.g. HTTP 422) returned by backends. -type ValidationError struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Location of the validation error within the request, e.g. ["body", "tenant_uuid"] - Loc []string `protobuf:"bytes,1,rep,name=loc,proto3" json:"loc,omitempty"` - // Human readable error message - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - // Type of the validation error, e.g. "value_error" - Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ValidationError) Reset() { - *x = ValidationError{} - mi := &file_fits_api_v1_common_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ValidationError) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ValidationError) ProtoMessage() {} - -func (x *ValidationError) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_v1_common_proto_msgTypes[5] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ValidationError.ProtoReflect.Descriptor instead. -func (*ValidationError) Descriptor() ([]byte, []int) { - return file_fits_api_v1_common_proto_rawDescGZIP(), []int{5} -} - -func (x *ValidationError) GetLoc() []string { - if x != nil { - return x.Loc - } - return nil -} - -func (x *ValidationError) GetMsg() string { - if x != nil { - return x.Msg - } - return "" -} - -func (x *ValidationError) GetType() string { - if x != nil { - return x.Type - } - return "" -} - var file_fits_api_v1_common_proto_extTypes = []protoimpl.ExtensionInfo{ { ExtendedType: (*descriptorpb.MethodOptions)(nil), @@ -827,11 +762,7 @@ const file_fits_api_v1_common_proto_rawDesc = "" + "UpdateMeta\x129\n" + "\n" + "updated_at\x18\x01 \x01(\v2\x1a.google.protobuf.TimestampR\tupdatedAt\x12[\n" + - "\x10locking_strategy\x18\x02 \x01(\x0e2&.fits.api.v1.OptimisticLockingStrategyB\b\xbaH\x05\x82\x01\x02\x10\x01R\x0flockingStrategy\"I\n" + - "\x0fValidationError\x12\x10\n" + - "\x03loc\x18\x01 \x03(\tR\x03loc\x12\x10\n" + - "\x03msg\x18\x02 \x01(\tR\x03msg\x12\x12\n" + - "\x04type\x18\x03 \x01(\tR\x04type*\x87\x01\n" + + "\x10locking_strategy\x18\x02 \x01(\x0e2&.fits.api.v1.OptimisticLockingStrategyB\b\xbaH\x05\x82\x01\x02\x10\x01R\x0flockingStrategy*\x87\x01\n" + "\n" + "TenantRole\x12\x1b\n" + "\x17TENANT_ROLE_UNSPECIFIED\x10\x00\x12\x15\n" + @@ -885,7 +816,7 @@ func file_fits_api_v1_common_proto_rawDescGZIP() []byte { } var file_fits_api_v1_common_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_fits_api_v1_common_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_fits_api_v1_common_proto_msgTypes = make([]protoimpl.MessageInfo, 6) var file_fits_api_v1_common_proto_goTypes = []any{ (TenantRole)(0), // 0: fits.api.v1.TenantRole (ProjectRole)(0), // 1: fits.api.v1.ProjectRole @@ -898,26 +829,25 @@ var file_fits_api_v1_common_proto_goTypes = []any{ (*Meta)(nil), // 8: fits.api.v1.Meta (*UpdateLabels)(nil), // 9: fits.api.v1.UpdateLabels (*UpdateMeta)(nil), // 10: fits.api.v1.UpdateMeta - (*ValidationError)(nil), // 11: fits.api.v1.ValidationError - nil, // 12: fits.api.v1.Labels.LabelsEntry - (*timestamppb.Timestamp)(nil), // 13: google.protobuf.Timestamp - (*descriptorpb.MethodOptions)(nil), // 14: google.protobuf.MethodOptions - (*descriptorpb.EnumValueOptions)(nil), // 15: google.protobuf.EnumValueOptions + nil, // 11: fits.api.v1.Labels.LabelsEntry + (*timestamppb.Timestamp)(nil), // 12: google.protobuf.Timestamp + (*descriptorpb.MethodOptions)(nil), // 13: google.protobuf.MethodOptions + (*descriptorpb.EnumValueOptions)(nil), // 14: google.protobuf.EnumValueOptions } var file_fits_api_v1_common_proto_depIdxs = []int32{ - 12, // 0: fits.api.v1.Labels.labels:type_name -> fits.api.v1.Labels.LabelsEntry + 11, // 0: fits.api.v1.Labels.labels:type_name -> fits.api.v1.Labels.LabelsEntry 7, // 1: fits.api.v1.Meta.labels:type_name -> fits.api.v1.Labels - 13, // 2: fits.api.v1.Meta.created_at:type_name -> google.protobuf.Timestamp - 13, // 3: fits.api.v1.Meta.updated_at:type_name -> google.protobuf.Timestamp + 12, // 2: fits.api.v1.Meta.created_at:type_name -> google.protobuf.Timestamp + 12, // 3: fits.api.v1.Meta.updated_at:type_name -> google.protobuf.Timestamp 7, // 4: fits.api.v1.UpdateLabels.update:type_name -> fits.api.v1.Labels - 13, // 5: fits.api.v1.UpdateMeta.updated_at:type_name -> google.protobuf.Timestamp + 12, // 5: fits.api.v1.UpdateMeta.updated_at:type_name -> google.protobuf.Timestamp 5, // 6: fits.api.v1.UpdateMeta.locking_strategy:type_name -> fits.api.v1.OptimisticLockingStrategy - 14, // 7: fits.api.v1.tenant_roles:extendee -> google.protobuf.MethodOptions - 14, // 8: fits.api.v1.project_roles:extendee -> google.protobuf.MethodOptions - 14, // 9: fits.api.v1.admin_roles:extendee -> google.protobuf.MethodOptions - 14, // 10: fits.api.v1.visibility:extendee -> google.protobuf.MethodOptions - 14, // 11: fits.api.v1.auditing:extendee -> google.protobuf.MethodOptions - 15, // 12: fits.api.v1.enum_string_value:extendee -> google.protobuf.EnumValueOptions + 13, // 7: fits.api.v1.tenant_roles:extendee -> google.protobuf.MethodOptions + 13, // 8: fits.api.v1.project_roles:extendee -> google.protobuf.MethodOptions + 13, // 9: fits.api.v1.admin_roles:extendee -> google.protobuf.MethodOptions + 13, // 10: fits.api.v1.visibility:extendee -> google.protobuf.MethodOptions + 13, // 11: fits.api.v1.auditing:extendee -> google.protobuf.MethodOptions + 14, // 12: fits.api.v1.enum_string_value:extendee -> google.protobuf.EnumValueOptions 0, // 13: fits.api.v1.tenant_roles:type_name -> fits.api.v1.TenantRole 1, // 14: fits.api.v1.project_roles:type_name -> fits.api.v1.ProjectRole 2, // 15: fits.api.v1.admin_roles:type_name -> fits.api.v1.AdminRole @@ -944,7 +874,7 @@ func file_fits_api_v1_common_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_v1_common_proto_rawDesc), len(file_fits_api_v1_common_proto_rawDesc)), NumEnums: 6, - NumMessages: 7, + NumMessages: 6, NumExtensions: 6, NumServices: 0, }, diff --git a/go/fits/api/vm/v1/location.pb.go b/go/fits/api/vm/v1/location.pb.go index 7f6925f..4cff6a6 100644 --- a/go/fits/api/vm/v1/location.pb.go +++ b/go/fits/api/vm/v1/location.pb.go @@ -79,12 +79,9 @@ func (x *Location) GetTitle() string { } // LocationServiceListRequest is the request payload for a location list request. -// The upstream nulink API accepts no body or parameters, so this is intentionally empty. -// TODO pro tenant anders. FITS darf beide RZ, sonst nur eines, logik dazu in nu-link type LocationServiceListRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // Tenant to list available locations for - // TODO Tobias baut in nulink-api ein Tenant string `protobuf:"bytes,1,opt,name=tenant,proto3" json:"tenant,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -177,10 +174,10 @@ var File_fits_api_vm_v1_location_proto protoreflect.FileDescriptor const file_fits_api_vm_v1_location_proto_rawDesc = "" + "\n" + - "\x1dfits/api/vm/v1/location.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\">\n" + + "\x1dfits/api/vm/v1/location.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"K\n" + "\bLocation\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n" + - "\x05title\x18\x02 \x01(\tR\x05title\"A\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n" + + "\x05title\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\"A\n" + "\x1aLocationServiceListRequest\x12#\n" + "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"U\n" + "\x1bLocationServiceListResponse\x126\n" + diff --git a/go/fits/api/vm/v1/os.pb.go b/go/fits/api/vm/v1/os.pb.go index b2c5d5b..4d54777 100644 --- a/go/fits/api/vm/v1/os.pb.go +++ b/go/fits/api/vm/v1/os.pb.go @@ -97,7 +97,6 @@ func (x *OS) GetVersion() string { } // OSServiceListRequest is the request payload for a OS list request. -// The upstream nulink API accepts no body or parameters, so this is intentionally empty. type OSServiceListRequest struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields @@ -137,10 +136,10 @@ func (*OSServiceListRequest) Descriptor() ([]byte, []int) { // OSServiceListResponse is the response payload for a OS list request type OSServiceListResponse struct { state protoimpl.MessageState `protogen:"open.v1"` - // The available OSs - Oss []*OS `protobuf:"bytes,1,rep,name=oss,proto3" json:"oss,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // The available operating systems + OperatingSystems []*OS `protobuf:"bytes,1,rep,name=operating_systems,json=operatingSystems,proto3" json:"operating_systems,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *OSServiceListResponse) Reset() { @@ -173,9 +172,9 @@ func (*OSServiceListResponse) Descriptor() ([]byte, []int) { return file_fits_api_vm_v1_os_proto_rawDescGZIP(), []int{2} } -func (x *OSServiceListResponse) GetOss() []*OS { +func (x *OSServiceListResponse) GetOperatingSystems() []*OS { if x != nil { - return x.Oss + return x.OperatingSystems } return nil } @@ -184,15 +183,15 @@ var File_fits_api_vm_v1_os_proto protoreflect.FileDescriptor const file_fits_api_vm_v1_os_proto_rawDesc = "" + "\n" + - "\x17fits/api/vm/v1/os.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\"f\n" + + "\x17fits/api/vm/v1/os.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x8d\x01\n" + "\x02OS\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n" + - "\x05title\x18\x02 \x01(\tR\x05title\x12\x12\n" + - "\x04type\x18\x03 \x01(\tR\x04type\x12\x18\n" + - "\aversion\x18\x04 \x01(\tR\aversion\"\x16\n" + - "\x14OSServiceListRequest\"=\n" + - "\x15OSServiceListResponse\x12$\n" + - "\x03oss\x18\x01 \x03(\v2\x12.fits.api.vm.v1.OSR\x03oss2m\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n" + + "\x05title\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\x12\x1f\n" + + "\x04type\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04type\x12%\n" + + "\aversion\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\aversion\"\x16\n" + + "\x14OSServiceListRequest\"X\n" + + "\x15OSServiceListResponse\x12?\n" + + "\x11operating_systems\x18\x01 \x03(\v2\x12.fits.api.vm.v1.OSR\x10operatingSystems2m\n" + "\tOSService\x12`\n" + "\x04List\x12$.fits.api.vm.v1.OSServiceListRequest\x1a%.fits.api.vm.v1.OSServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xa5\x01\n" + "\x12com.fits.api.vm.v1B\aOsProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" @@ -216,7 +215,7 @@ var file_fits_api_vm_v1_os_proto_goTypes = []any{ (*OSServiceListResponse)(nil), // 2: fits.api.vm.v1.OSServiceListResponse } var file_fits_api_vm_v1_os_proto_depIdxs = []int32{ - 0, // 0: fits.api.vm.v1.OSServiceListResponse.oss:type_name -> fits.api.vm.v1.OS + 0, // 0: fits.api.vm.v1.OSServiceListResponse.operating_systems:type_name -> fits.api.vm.v1.OS 1, // 1: fits.api.vm.v1.OSService.List:input_type -> fits.api.vm.v1.OSServiceListRequest 2, // 2: fits.api.vm.v1.OSService.List:output_type -> fits.api.vm.v1.OSServiceListResponse 2, // [2:3] is the sub-list for method output_type diff --git a/go/fits/api/vm/v1/stagetype.pb.go b/go/fits/api/vm/v1/stagetype.pb.go index b3ab114..e43826c 100644 --- a/go/fits/api/vm/v1/stagetype.pb.go +++ b/go/fits/api/vm/v1/stagetype.pb.go @@ -23,7 +23,7 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// Maps to the upstream NucleusDBStageTypes model. +// StageType is the definition of available stage types. (Development, Test, Integration, Production) type StageType struct { state protoimpl.MessageState `protogen:"open.v1"` // Uuid of this stage type @@ -79,7 +79,6 @@ func (x *StageType) GetTitle() string { } // StageTypeServiceListRequest is the request payload for a stage type list request. -// Maps to the upstream TenantInputModel. type StageTypeServiceListRequest struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields @@ -120,7 +119,7 @@ func (*StageTypeServiceListRequest) Descriptor() ([]byte, []int) { type StageTypeServiceListResponse struct { state protoimpl.MessageState `protogen:"open.v1"` // The available stage types - Stagetypes []*StageType `protobuf:"bytes,1,rep,name=stagetypes,proto3" json:"stagetypes,omitempty"` + StageTypes []*StageType `protobuf:"bytes,1,rep,name=stage_types,json=stageTypes,proto3" json:"stage_types,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -155,9 +154,9 @@ func (*StageTypeServiceListResponse) Descriptor() ([]byte, []int) { return file_fits_api_vm_v1_stagetype_proto_rawDescGZIP(), []int{2} } -func (x *StageTypeServiceListResponse) GetStagetypes() []*StageType { +func (x *StageTypeServiceListResponse) GetStageTypes() []*StageType { if x != nil { - return x.Stagetypes + return x.StageTypes } return nil } @@ -170,11 +169,10 @@ const file_fits_api_vm_v1_stagetype_proto_rawDesc = "" + "\tStageType\x12\x1c\n" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n" + "\x05title\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\"\x1d\n" + - "\x1bStageTypeServiceListRequest\"Y\n" + - "\x1cStageTypeServiceListResponse\x129\n" + - "\n" + - "stagetypes\x18\x01 \x03(\v2\x19.fits.api.vm.v1.StageTypeR\n" + - "stagetypes2\x82\x01\n" + + "\x1bStageTypeServiceListRequest\"Z\n" + + "\x1cStageTypeServiceListResponse\x12:\n" + + "\vstage_types\x18\x01 \x03(\v2\x19.fits.api.vm.v1.StageTypeR\n" + + "stageTypes2\x82\x01\n" + "\x10StageTypeService\x12n\n" + "\x04List\x12+.fits.api.vm.v1.StageTypeServiceListRequest\x1a,.fits.api.vm.v1.StageTypeServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xac\x01\n" + "\x12com.fits.api.vm.v1B\x0eStagetypeProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" @@ -198,7 +196,7 @@ var file_fits_api_vm_v1_stagetype_proto_goTypes = []any{ (*StageTypeServiceListResponse)(nil), // 2: fits.api.vm.v1.StageTypeServiceListResponse } var file_fits_api_vm_v1_stagetype_proto_depIdxs = []int32{ - 0, // 0: fits.api.vm.v1.StageTypeServiceListResponse.stagetypes:type_name -> fits.api.vm.v1.StageType + 0, // 0: fits.api.vm.v1.StageTypeServiceListResponse.stage_types:type_name -> fits.api.vm.v1.StageType 1, // 1: fits.api.vm.v1.StageTypeService.List:input_type -> fits.api.vm.v1.StageTypeServiceListRequest 2, // 2: fits.api.vm.v1.StageTypeService.List:output_type -> fits.api.vm.v1.StageTypeServiceListResponse 2, // [2:3] is the sub-list for method output_type diff --git a/go/fits/api/vm/v1/vlan.pb.go b/go/fits/api/vm/v1/vlan.pb.go index e3bbc66..c968323 100644 --- a/go/fits/api/vm/v1/vlan.pb.go +++ b/go/fits/api/vm/v1/vlan.pb.go @@ -8,7 +8,7 @@ package vmv1 import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" - v1 "github.com/fi-ts/api/go/fits/api/v1" + _ "github.com/fi-ts/api/go/fits/api/v1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -24,9 +24,6 @@ const ( ) // Vlan is a VLAN that a VM can be connected to. -// Maps to the upstream NucleusDBVlans model. -// TODO evaluate which of the uuid fields are really optional; the upstream API -// spec does not make this clear, so we validate them strictly for now. type Vlan struct { state protoimpl.MessageState `protogen:"open.v1"` // Uuid of this VLAN @@ -47,18 +44,12 @@ type Vlan struct { IpRangeEnd string `protobuf:"bytes,8,opt,name=ip_range_end,json=ipRangeEnd,proto3" json:"ip_range_end,omitempty"` // Whether DHCP is used on this VLAN UseDhcp bool `protobuf:"varint,9,opt,name=use_dhcp,json=useDhcp,proto3" json:"use_dhcp,omitempty"` - // Title of the pod this VLAN belongs to - PodTitle string `protobuf:"bytes,10,opt,name=pod_title,json=podTitle,proto3" json:"pod_title,omitempty"` - // Uuid of the pod this VLAN belongs to - PodUuid string `protobuf:"bytes,11,opt,name=pod_uuid,json=podUuid,proto3" json:"pod_uuid,omitempty"` - // Title of the stage type of this VLAN - StageTypeTitle string `protobuf:"bytes,12,opt,name=stage_type_title,json=stageTypeTitle,proto3" json:"stage_type_title,omitempty"` + // TODO instead of the pod title, could we have the location_uuid? + LocationUuid *string `protobuf:"bytes,13,opt,name=location_uuid,json=locationUuid,proto3,oneof" json:"location_uuid,omitempty"` // Uuid of the stage type of this VLAN - StageTypeUuid string `protobuf:"bytes,13,opt,name=stage_type_uuid,json=stageTypeUuid,proto3" json:"stage_type_uuid,omitempty"` - // Uuid of the tenant this VLAN belongs to - TenantUuid string `protobuf:"bytes,14,opt,name=tenant_uuid,json=tenantUuid,proto3" json:"tenant_uuid,omitempty"` - // Title of the tenant this VLAN belongs to - TenantTitle string `protobuf:"bytes,15,opt,name=tenant_title,json=tenantTitle,proto3" json:"tenant_title,omitempty"` + StageTypeUuid string `protobuf:"bytes,14,opt,name=stage_type_uuid,json=stageTypeUuid,proto3" json:"stage_type_uuid,omitempty"` + // Tenant this VLAN belongs to. + Tenant string `protobuf:"bytes,15,opt,name=tenant,proto3" json:"tenant,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -156,23 +147,9 @@ func (x *Vlan) GetUseDhcp() bool { return false } -func (x *Vlan) GetPodTitle() string { - if x != nil { - return x.PodTitle - } - return "" -} - -func (x *Vlan) GetPodUuid() string { - if x != nil { - return x.PodUuid - } - return "" -} - -func (x *Vlan) GetStageTypeTitle() string { - if x != nil { - return x.StageTypeTitle +func (x *Vlan) GetLocationUuid() string { + if x != nil && x.LocationUuid != nil { + return *x.LocationUuid } return "" } @@ -184,22 +161,14 @@ func (x *Vlan) GetStageTypeUuid() string { return "" } -func (x *Vlan) GetTenantUuid() string { - if x != nil { - return x.TenantUuid - } - return "" -} - -func (x *Vlan) GetTenantTitle() string { +func (x *Vlan) GetTenant() string { if x != nil { - return x.TenantTitle + return x.Tenant } return "" } // VlanServiceListRequest is the request payload for a VLAN list request. -// Maps to the upstream TenantInputModel. type VlanServiceListRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // Tenant to list available VLANs for @@ -249,12 +218,9 @@ func (x *VlanServiceListRequest) GetTenant() string { type VlanServiceListResponse struct { state protoimpl.MessageState `protogen:"open.v1"` // The available VLANs - Vlans []*Vlan `protobuf:"bytes,1,rep,name=vlans,proto3" json:"vlans,omitempty"` - // Validation errors returned by the upstream API when the request is rejected (HTTP 422) - // TODO this is just a test - ValidationErrors []*v1.ValidationError `protobuf:"bytes,2,rep,name=validation_errors,json=validationErrors,proto3" json:"validation_errors,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + Vlans []*Vlan `protobuf:"bytes,1,rep,name=vlans,proto3" json:"vlans,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VlanServiceListResponse) Reset() { @@ -294,22 +260,15 @@ func (x *VlanServiceListResponse) GetVlans() []*Vlan { return nil } -func (x *VlanServiceListResponse) GetValidationErrors() []*v1.ValidationError { - if x != nil { - return x.ValidationErrors - } - return nil -} - var File_fits_api_vm_v1_vlan_proto protoreflect.FileDescriptor const file_fits_api_vm_v1_vlan_proto_rawDesc = "" + "\n" + - "\x19fits/api/vm/v1/vlan.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xf8\x03\n" + + "\x19fits/api/vm/v1/vlan.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xb6\x03\n" + "\x04Vlan\x12\x1c\n" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x0e\n" + - "\x02id\x18\x02 \x01(\x05R\x02id\x12!\n" + - "\fsubnet_title\x18\x03 \x01(\tR\vsubnetTitle\x12\x16\n" + + "\x02id\x18\x02 \x01(\x05R\x02id\x12.\n" + + "\fsubnet_title\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\vsubnetTitle\x12\x16\n" + "\x06subnet\x18\x04 \x01(\tR\x06subnet\x12\x1e\n" + "\n" + "subnetmask\x18\x05 \x01(\tR\n" + @@ -318,20 +277,15 @@ const file_fits_api_vm_v1_vlan_proto_rawDesc = "" + "\x0eip_range_start\x18\a \x01(\tR\fipRangeStart\x12 \n" + "\fip_range_end\x18\b \x01(\tR\n" + "ipRangeEnd\x12\x19\n" + - "\buse_dhcp\x18\t \x01(\bR\auseDhcp\x12\x1b\n" + - "\tpod_title\x18\n" + - " \x01(\tR\bpodTitle\x12#\n" + - "\bpod_uuid\x18\v \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\apodUuid\x12(\n" + - "\x10stage_type_title\x18\f \x01(\tR\x0estageTypeTitle\x120\n" + - "\x0fstage_type_uuid\x18\r \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12)\n" + - "\vtenant_uuid\x18\x0e \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\n" + - "tenantUuid\x12!\n" + - "\ftenant_title\x18\x0f \x01(\tR\vtenantTitle\"=\n" + + "\buse_dhcp\x18\t \x01(\bR\auseDhcp\x122\n" + + "\rlocation_uuid\x18\r \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\flocationUuid\x88\x01\x01\x120\n" + + "\x0fstage_type_uuid\x18\x0e \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12#\n" + + "\x06tenant\x18\x0f \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x10\n" + + "\x0e_location_uuid\"=\n" + "\x16VlanServiceListRequest\x12#\n" + - "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"\x90\x01\n" + + "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"E\n" + "\x17VlanServiceListResponse\x12*\n" + - "\x05vlans\x18\x01 \x03(\v2\x14.fits.api.vm.v1.VlanR\x05vlans\x12I\n" + - "\x11validation_errors\x18\x02 \x03(\v2\x1c.fits.api.v1.ValidationErrorR\x10validationErrors2s\n" + + "\x05vlans\x18\x01 \x03(\v2\x14.fits.api.vm.v1.VlanR\x05vlans2s\n" + "\vVlanService\x12d\n" + "\x04List\x12&.fits.api.vm.v1.VlanServiceListRequest\x1a'.fits.api.vm.v1.VlanServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xa7\x01\n" + "\x12com.fits.api.vm.v1B\tVlanProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" @@ -353,18 +307,16 @@ var file_fits_api_vm_v1_vlan_proto_goTypes = []any{ (*Vlan)(nil), // 0: fits.api.vm.v1.Vlan (*VlanServiceListRequest)(nil), // 1: fits.api.vm.v1.VlanServiceListRequest (*VlanServiceListResponse)(nil), // 2: fits.api.vm.v1.VlanServiceListResponse - (*v1.ValidationError)(nil), // 3: fits.api.v1.ValidationError } var file_fits_api_vm_v1_vlan_proto_depIdxs = []int32{ 0, // 0: fits.api.vm.v1.VlanServiceListResponse.vlans:type_name -> fits.api.vm.v1.Vlan - 3, // 1: fits.api.vm.v1.VlanServiceListResponse.validation_errors:type_name -> fits.api.v1.ValidationError - 1, // 2: fits.api.vm.v1.VlanService.List:input_type -> fits.api.vm.v1.VlanServiceListRequest - 2, // 3: fits.api.vm.v1.VlanService.List:output_type -> fits.api.vm.v1.VlanServiceListResponse - 3, // [3:4] is the sub-list for method output_type - 2, // [2:3] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name + 1, // 1: fits.api.vm.v1.VlanService.List:input_type -> fits.api.vm.v1.VlanServiceListRequest + 2, // 2: fits.api.vm.v1.VlanService.List:output_type -> fits.api.vm.v1.VlanServiceListResponse + 2, // [2:3] is the sub-list for method output_type + 1, // [1:2] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name } func init() { file_fits_api_vm_v1_vlan_proto_init() } @@ -372,6 +324,7 @@ func file_fits_api_vm_v1_vlan_proto_init() { if File_fits_api_vm_v1_vlan_proto != nil { return } + file_fits_api_vm_v1_vlan_proto_msgTypes[0].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/go/fits/api/vm/v1/vm.pb.go b/go/fits/api/vm/v1/vm.pb.go index a6cb37d..841d15f 100644 --- a/go/fits/api/vm/v1/vm.pb.go +++ b/go/fits/api/vm/v1/vm.pb.go @@ -23,270 +23,125 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// VM Instance Messages -// A VM instance as returned by the API. -type VMInstance struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of this VM. - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // Metadata for this VM. - // TODO dates are available in the nulink db, but not passed through yet. - Meta *v1.Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` - // FQDN of the VM. Derived from the optional name set at creation, - // or generated by the backend if none was provided. - Fqdn string `protobuf:"bytes,3,opt,name=fqdn,proto3" json:"fqdn,omitempty"` - // Tenant this VM belongs to. - Tenant string `protobuf:"bytes,4,opt,name=tenant,proto3" json:"tenant,omitempty"` - // UUID of the project this VM belongs to. - ProjectUuid string `protobuf:"bytes,5,opt,name=project_uuid,json=projectUuid,proto3" json:"project_uuid,omitempty"` - // UUID of the operating system image installed on the VM. - // Resolve the human-readable title via the OS endpoint. - OsUuid string `protobuf:"bytes,6,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` - // UUID of the datacenter location. - // The VM is automatically scheduled into one pod within the chosen location; - // users select the city but not the specific datacenter. - LocationUuid string `protobuf:"bytes,7,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` - // TODO: Contact UUID – not yet implemented; open discussion with FCN (#23). - ContactUuid string `protobuf:"bytes,8,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` - // Number of CPU cores. - Cpu uint32 `protobuf:"varint,9,opt,name=cpu,proto3" json:"cpu,omitempty"` - // RAM in GB. - Ram uint32 `protobuf:"varint,10,opt,name=ram,proto3" json:"ram,omitempty"` - // Internal reference number provided by the user, e.g. a ticket ID. - OrderNumber string `protobuf:"bytes,11,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` - // Whether the order was placed by FITS (true) or self-service by the user (false). - Contract bool `protobuf:"varint,12,opt,name=contract,proto3" json:"contract,omitempty"` - // Whether backup is enabled. - Backup bool `protobuf:"varint,13,opt,name=backup,proto3" json:"backup,omitempty"` - // Availability level: v0, v1, v2, v3 (higher value = higher availability). - Availability string `protobuf:"bytes,14,opt,name=availability,proto3" json:"availability,omitempty"` - // Service class: sz1, sz2, sz3 (higher value = higher tier). - Serviceclass string `protobuf:"bytes,15,opt,name=serviceclass,proto3" json:"serviceclass,omitempty"` - // Status of the ongoing operation. - Status string `protobuf:"bytes,16,opt,name=status,proto3" json:"status,omitempty"` - // Additional information about the current status. - StatusInfo string `protobuf:"bytes,17,opt,name=status_info,json=statusInfo,proto3" json:"status_info,omitempty"` - // OS-specific configuration. Exactly one must be set. - // - // Types that are valid to be assigned to Details: - // - // *VMInstance_WindowsDetails - // *VMInstance_LinuxDetails - Details isVMInstance_Details `protobuf_oneof:"details"` - // Network interfaces attached to the VM (IPv4 only). - Interfaces []*NetworkInterface `protobuf:"bytes,20,rep,name=interfaces,proto3" json:"interfaces,omitempty"` - // VLAN the VM is attached to. - Vlan *Vlan `protobuf:"bytes,21,opt,name=vlan,proto3" json:"vlan,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMInstance) Reset() { - *x = VMInstance{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMInstance) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMInstance) ProtoMessage() {} - -func (x *VMInstance) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMInstance.ProtoReflect.Descriptor instead. -func (*VMInstance) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{0} -} - -func (x *VMInstance) GetUuid() string { - if x != nil { - return x.Uuid - } - return "" -} - -func (x *VMInstance) GetMeta() *v1.Meta { - if x != nil { - return x.Meta - } - return nil -} - -func (x *VMInstance) GetFqdn() string { - if x != nil { - return x.Fqdn - } - return "" -} - -func (x *VMInstance) GetTenant() string { - if x != nil { - return x.Tenant - } - return "" -} - -func (x *VMInstance) GetProjectUuid() string { - if x != nil { - return x.ProjectUuid - } - return "" -} - -func (x *VMInstance) GetOsUuid() string { - if x != nil { - return x.OsUuid - } - return "" -} - -func (x *VMInstance) GetLocationUuid() string { - if x != nil { - return x.LocationUuid - } - return "" -} - -func (x *VMInstance) GetContactUuid() string { - if x != nil { - return x.ContactUuid - } - return "" -} +// Availability specifies the availability level of a VM; higher value = higher availability. +type Availability int32 -func (x *VMInstance) GetCpu() uint32 { - if x != nil { - return x.Cpu - } - return 0 -} +const ( + // AVAILABILITY_UNSPECIFIED is not specified. + Availability_AVAILABILITY_UNSPECIFIED Availability = 0 + // AVAILABILITY_V0 is availability level V0. + Availability_AVAILABILITY_V0 Availability = 1 + // AVAILABILITY_V1 is availability level V1. + Availability_AVAILABILITY_V1 Availability = 2 + // AVAILABILITY_V2 is availability level V2. + Availability_AVAILABILITY_V2 Availability = 3 + // AVAILABILITY_V3 is availability level V3. + Availability_AVAILABILITY_V3 Availability = 4 +) -func (x *VMInstance) GetRam() uint32 { - if x != nil { - return x.Ram +// Enum value maps for Availability. +var ( + Availability_name = map[int32]string{ + 0: "AVAILABILITY_UNSPECIFIED", + 1: "AVAILABILITY_V0", + 2: "AVAILABILITY_V1", + 3: "AVAILABILITY_V2", + 4: "AVAILABILITY_V3", + } + Availability_value = map[string]int32{ + "AVAILABILITY_UNSPECIFIED": 0, + "AVAILABILITY_V0": 1, + "AVAILABILITY_V1": 2, + "AVAILABILITY_V2": 3, + "AVAILABILITY_V3": 4, } - return 0 -} +) -func (x *VMInstance) GetOrderNumber() string { - if x != nil { - return x.OrderNumber - } - return "" +func (x Availability) Enum() *Availability { + p := new(Availability) + *p = x + return p } -func (x *VMInstance) GetContract() bool { - if x != nil { - return x.Contract - } - return false +func (x Availability) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (x *VMInstance) GetBackup() bool { - if x != nil { - return x.Backup - } - return false +func (Availability) Descriptor() protoreflect.EnumDescriptor { + return file_fits_api_vm_v1_vm_proto_enumTypes[0].Descriptor() } -func (x *VMInstance) GetAvailability() string { - if x != nil { - return x.Availability - } - return "" +func (Availability) Type() protoreflect.EnumType { + return &file_fits_api_vm_v1_vm_proto_enumTypes[0] } -func (x *VMInstance) GetServiceclass() string { - if x != nil { - return x.Serviceclass - } - return "" +func (x Availability) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (x *VMInstance) GetStatus() string { - if x != nil { - return x.Status - } - return "" +// Deprecated: Use Availability.Descriptor instead. +func (Availability) EnumDescriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{0} } -func (x *VMInstance) GetStatusInfo() string { - if x != nil { - return x.StatusInfo - } - return "" -} +// ServiceClass specifies the service tier of a VM; higher value = higher tier. +// Only certain combinations with Availability are valid. +type ServiceClass int32 -func (x *VMInstance) GetDetails() isVMInstance_Details { - if x != nil { - return x.Details - } - return nil -} +const ( + // SERVICE_CLASS_UNSPECIFIED is not specified. + ServiceClass_SERVICE_CLASS_UNSPECIFIED ServiceClass = 0 + // SERVICE_CLASS_SZ1 is service class SZ1. + ServiceClass_SERVICE_CLASS_SZ1 ServiceClass = 1 + // SERVICE_CLASS_SZ2 is service class SZ2. + ServiceClass_SERVICE_CLASS_SZ2 ServiceClass = 2 + // SERVICE_CLASS_SZ3 is service class SZ3. + ServiceClass_SERVICE_CLASS_SZ3 ServiceClass = 3 +) -func (x *VMInstance) GetWindowsDetails() *WindowsDetails { - if x != nil { - if x, ok := x.Details.(*VMInstance_WindowsDetails); ok { - return x.WindowsDetails - } +// Enum value maps for ServiceClass. +var ( + ServiceClass_name = map[int32]string{ + 0: "SERVICE_CLASS_UNSPECIFIED", + 1: "SERVICE_CLASS_SZ1", + 2: "SERVICE_CLASS_SZ2", + 3: "SERVICE_CLASS_SZ3", + } + ServiceClass_value = map[string]int32{ + "SERVICE_CLASS_UNSPECIFIED": 0, + "SERVICE_CLASS_SZ1": 1, + "SERVICE_CLASS_SZ2": 2, + "SERVICE_CLASS_SZ3": 3, } - return nil -} +) -func (x *VMInstance) GetLinuxDetails() *LinuxDetails { - if x != nil { - if x, ok := x.Details.(*VMInstance_LinuxDetails); ok { - return x.LinuxDetails - } - } - return nil +func (x ServiceClass) Enum() *ServiceClass { + p := new(ServiceClass) + *p = x + return p } -func (x *VMInstance) GetInterfaces() []*NetworkInterface { - if x != nil { - return x.Interfaces - } - return nil +func (x ServiceClass) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (x *VMInstance) GetVlan() *Vlan { - if x != nil { - return x.Vlan - } - return nil +func (ServiceClass) Descriptor() protoreflect.EnumDescriptor { + return file_fits_api_vm_v1_vm_proto_enumTypes[1].Descriptor() } -type isVMInstance_Details interface { - isVMInstance_Details() +func (ServiceClass) Type() protoreflect.EnumType { + return &file_fits_api_vm_v1_vm_proto_enumTypes[1] } -type VMInstance_WindowsDetails struct { - // Windows-specific settings (domain + disks). - WindowsDetails *WindowsDetails `protobuf:"bytes,18,opt,name=windows_details,json=windowsDetails,proto3,oneof"` +func (x ServiceClass) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -type VMInstance_LinuxDetails struct { - // Linux-specific settings (LDAP + disks). - LinuxDetails *LinuxDetails `protobuf:"bytes,19,opt,name=linux_details,json=linuxDetails,proto3,oneof"` +// Deprecated: Use ServiceClass.Descriptor instead. +func (ServiceClass) EnumDescriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{1} } -func (*VMInstance_WindowsDetails) isVMInstance_Details() {} - -func (*VMInstance_LinuxDetails) isVMInstance_Details() {} - // Linux-specific VM details. type LinuxDetails struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -294,8 +149,7 @@ type LinuxDetails struct { Disks []*LinuxDisk `protobuf:"bytes,1,rep,name=disks,proto3" json:"disks,omitempty"` // UUID of the LDAP directory the VM is integrated with. LdapUuid string `protobuf:"bytes,2,opt,name=ldap_uuid,json=ldapUuid,proto3" json:"ldap_uuid,omitempty"` - // Linux-specific FQDN. Derived from the optional name set at creation, - // or generated by the backend if none was provided. + // Linux-specific FQDN, derived from the name at creation or generated by the backend. LdapFqdn string `protobuf:"bytes,3,opt,name=ldap_fqdn,json=ldapFqdn,proto3" json:"ldap_fqdn,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -303,7 +157,7 @@ type LinuxDetails struct { func (x *LinuxDetails) Reset() { *x = LinuxDetails{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[1] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -315,7 +169,7 @@ func (x *LinuxDetails) String() string { func (*LinuxDetails) ProtoMessage() {} func (x *LinuxDetails) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[1] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -328,7 +182,7 @@ func (x *LinuxDetails) ProtoReflect() protoreflect.Message { // Deprecated: Use LinuxDetails.ProtoReflect.Descriptor instead. func (*LinuxDetails) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{1} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{0} } func (x *LinuxDetails) GetDisks() []*LinuxDisk { @@ -359,8 +213,7 @@ type WindowsDetails struct { Disks []*WindowsDisk `protobuf:"bytes,1,rep,name=disks,proto3" json:"disks,omitempty"` // UUID of the Windows domain the VM has joined. DomainUuid string `protobuf:"bytes,2,opt,name=domain_uuid,json=domainUuid,proto3" json:"domain_uuid,omitempty"` - // Windows-specific FQDN. Derived from the optional name set at creation, - // or generated by the backend if none was provided. + // Windows-specific FQDN, derived from the name at creation or generated by the backend. DomainFqdn string `protobuf:"bytes,3,opt,name=domain_fqdn,json=domainFqdn,proto3" json:"domain_fqdn,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -368,7 +221,7 @@ type WindowsDetails struct { func (x *WindowsDetails) Reset() { *x = WindowsDetails{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[2] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -380,7 +233,7 @@ func (x *WindowsDetails) String() string { func (*WindowsDetails) ProtoMessage() {} func (x *WindowsDetails) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[2] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -393,7 +246,7 @@ func (x *WindowsDetails) ProtoReflect() protoreflect.Message { // Deprecated: Use WindowsDetails.ProtoReflect.Descriptor instead. func (*WindowsDetails) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{2} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{1} } func (x *WindowsDetails) GetDisks() []*WindowsDisk { @@ -425,14 +278,14 @@ type NetworkInterface struct { // IPv4 address assigned to this interface. Ipaddress string `protobuf:"bytes,2,opt,name=ipaddress,proto3" json:"ipaddress,omitempty"` // MAC address of this interface. - Macaddress string `protobuf:"bytes,3,opt,name=macaddress,proto3" json:"macaddress,omitempty"` // TODO validation + Macaddress string `protobuf:"bytes,3,opt,name=macaddress,proto3" json:"macaddress,omitempty"` // TODO: add validation unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *NetworkInterface) Reset() { *x = NetworkInterface{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -444,7 +297,7 @@ func (x *NetworkInterface) String() string { func (*NetworkInterface) ProtoMessage() {} func (x *NetworkInterface) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -457,7 +310,7 @@ func (x *NetworkInterface) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkInterface.ProtoReflect.Descriptor instead. func (*NetworkInterface) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{3} + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{2} } func (x *NetworkInterface) GetUuid() string { @@ -481,30 +334,293 @@ func (x *NetworkInterface) GetMacaddress() string { return "" } -// VMServiceGetRequest TODO -type VMServiceGetRequest struct { +// A VM instance as returned by the API. +type VMInstance struct { state protoimpl.MessageState `protogen:"open.v1"` - // Uuid of this VM + // UUID of this VM. Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // Project where this VM belongs to - Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceGetRequest) Reset() { - *x = VMServiceGetRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceGetRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceGetRequest) ProtoMessage() {} - + // Metadata for this VM. + // TODO: dates are available in the nulink db but not passed through yet. + Meta *v1.Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` + // FQDN of the VM, derived from the name at creation or generated by the backend. + Fqdn string `protobuf:"bytes,3,opt,name=fqdn,proto3" json:"fqdn,omitempty"` + // Tenant this VM belongs to. + Tenant string `protobuf:"bytes,4,opt,name=tenant,proto3" json:"tenant,omitempty"` + // UUID of the project this VM belongs to. + ProjectUuid string `protobuf:"bytes,5,opt,name=project_uuid,json=projectUuid,proto3" json:"project_uuid,omitempty"` + // UUID of the OS image installed on the VM; resolve the title via the OS endpoint. + OsUuid string `protobuf:"bytes,6,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` + // UUID of the datacenter location. + // TODO: not exposed by the upstream (nulink) VM records yet; always empty. + LocationUuid string `protobuf:"bytes,7,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` + // TODO: Contact UUID – not yet implemented; open discussion with FCN (#23). + ContactUuid string `protobuf:"bytes,8,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` + // Number of CPU cores. + Cpu uint32 `protobuf:"varint,9,opt,name=cpu,proto3" json:"cpu,omitempty"` + // RAM in GB. + Ram uint32 `protobuf:"varint,10,opt,name=ram,proto3" json:"ram,omitempty"` + // Whether backup is enabled. + // TODO: the upstream (nulink) list/get models do not expose this; always false. + Backup bool `protobuf:"varint,11,opt,name=backup,proto3" json:"backup,omitempty"` + // Status of the ongoing operation. + Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` + // Additional information about the current status. + StatusInfo string `protobuf:"bytes,13,opt,name=status_info,json=statusInfo,proto3" json:"status_info,omitempty"` + // Availability level. + Availability Availability `protobuf:"varint,14,opt,name=availability,proto3,enum=fits.api.vm.v1.Availability" json:"availability,omitempty"` + // Service class. + Serviceclass ServiceClass `protobuf:"varint,15,opt,name=serviceclass,proto3,enum=fits.api.vm.v1.ServiceClass" json:"serviceclass,omitempty"` + // OS-specific configuration. + // + // Types that are valid to be assigned to Details: + // + // *VMInstance_WindowsDetails + // *VMInstance_LinuxDetails + Details isVMInstance_Details `protobuf_oneof:"details"` + // Network interfaces attached to the VM (IPv4 only). + Interfaces []*NetworkInterface `protobuf:"bytes,18,rep,name=interfaces,proto3" json:"interfaces,omitempty"` + // VLAN the VM is attached to. + // TODO: not exposed by the upstream (nulink) VM records yet; always unset. + Vlan *Vlan `protobuf:"bytes,19,opt,name=vlan,proto3" json:"vlan,omitempty"` + // Internal reference number provided by the user, e.g. a ticket ID. + OrderNumber string `protobuf:"bytes,20,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // True if the order was placed by FITS, false if self-service. + // TODO: maybe remove this field entirely. + Contract bool `protobuf:"varint,21,opt,name=contract,proto3" json:"contract,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMInstance) Reset() { + *x = VMInstance{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMInstance) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMInstance) ProtoMessage() {} + +func (x *VMInstance) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMInstance.ProtoReflect.Descriptor instead. +func (*VMInstance) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{3} +} + +func (x *VMInstance) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *VMInstance) GetMeta() *v1.Meta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *VMInstance) GetFqdn() string { + if x != nil { + return x.Fqdn + } + return "" +} + +func (x *VMInstance) GetTenant() string { + if x != nil { + return x.Tenant + } + return "" +} + +func (x *VMInstance) GetProjectUuid() string { + if x != nil { + return x.ProjectUuid + } + return "" +} + +func (x *VMInstance) GetOsUuid() string { + if x != nil { + return x.OsUuid + } + return "" +} + +func (x *VMInstance) GetLocationUuid() string { + if x != nil { + return x.LocationUuid + } + return "" +} + +func (x *VMInstance) GetContactUuid() string { + if x != nil { + return x.ContactUuid + } + return "" +} + +func (x *VMInstance) GetCpu() uint32 { + if x != nil { + return x.Cpu + } + return 0 +} + +func (x *VMInstance) GetRam() uint32 { + if x != nil { + return x.Ram + } + return 0 +} + +func (x *VMInstance) GetBackup() bool { + if x != nil { + return x.Backup + } + return false +} + +func (x *VMInstance) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *VMInstance) GetStatusInfo() string { + if x != nil { + return x.StatusInfo + } + return "" +} + +func (x *VMInstance) GetAvailability() Availability { + if x != nil { + return x.Availability + } + return Availability_AVAILABILITY_UNSPECIFIED +} + +func (x *VMInstance) GetServiceclass() ServiceClass { + if x != nil { + return x.Serviceclass + } + return ServiceClass_SERVICE_CLASS_UNSPECIFIED +} + +func (x *VMInstance) GetDetails() isVMInstance_Details { + if x != nil { + return x.Details + } + return nil +} + +func (x *VMInstance) GetWindowsDetails() *WindowsDetails { + if x != nil { + if x, ok := x.Details.(*VMInstance_WindowsDetails); ok { + return x.WindowsDetails + } + } + return nil +} + +func (x *VMInstance) GetLinuxDetails() *LinuxDetails { + if x != nil { + if x, ok := x.Details.(*VMInstance_LinuxDetails); ok { + return x.LinuxDetails + } + } + return nil +} + +func (x *VMInstance) GetInterfaces() []*NetworkInterface { + if x != nil { + return x.Interfaces + } + return nil +} + +func (x *VMInstance) GetVlan() *Vlan { + if x != nil { + return x.Vlan + } + return nil +} + +func (x *VMInstance) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +func (x *VMInstance) GetContract() bool { + if x != nil { + return x.Contract + } + return false +} + +type isVMInstance_Details interface { + isVMInstance_Details() +} + +type VMInstance_WindowsDetails struct { + // Windows-specific settings (domain + disks). + WindowsDetails *WindowsDetails `protobuf:"bytes,16,opt,name=windows_details,json=windowsDetails,proto3,oneof"` +} + +type VMInstance_LinuxDetails struct { + // Linux-specific settings (LDAP + disks). + LinuxDetails *LinuxDetails `protobuf:"bytes,17,opt,name=linux_details,json=linuxDetails,proto3,oneof"` +} + +func (*VMInstance_WindowsDetails) isVMInstance_Details() {} + +func (*VMInstance_LinuxDetails) isVMInstance_Details() {} + +// Request to get a VM by UUID. +type VMServiceGetRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the VM. + Uuid *string `protobuf:"bytes,1,opt,name=uuid,proto3,oneof" json:"uuid,omitempty"` + // Tenant of the VM. + Tenant string `protobuf:"bytes,2,opt,name=tenant,proto3" json:"tenant,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceGetRequest) Reset() { + *x = VMServiceGetRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceGetRequest) ProtoMessage() {} + func (x *VMServiceGetRequest) ProtoReflect() protoreflect.Message { mi := &file_fits_api_vm_v1_vm_proto_msgTypes[4] if x != nil { @@ -523,43 +639,1257 @@ func (*VMServiceGetRequest) Descriptor() ([]byte, []int) { } func (x *VMServiceGetRequest) GetUuid() string { - if x != nil { - return x.Uuid + if x != nil && x.Uuid != nil { + return *x.Uuid } return "" } -func (x *VMServiceGetRequest) GetProject() string { +func (x *VMServiceGetRequest) GetTenant() string { if x != nil { - return x.Project + return x.Tenant } return "" } -// VMServiceGetResponse TODO +// Response containing the requested VM. type VMServiceGetResponse struct { state protoimpl.MessageState `protogen:"open.v1"` - // The VM + // The VM. Vm *VMInstance `protobuf:"bytes,1,opt,name=vm,proto3" json:"vm,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *VMServiceGetResponse) Reset() { - *x = VMServiceGetResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] +func (x *VMServiceGetResponse) Reset() { + *x = VMServiceGetResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceGetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceGetResponse) ProtoMessage() {} + +func (x *VMServiceGetResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceGetResponse.ProtoReflect.Descriptor instead. +func (*VMServiceGetResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{5} +} + +func (x *VMServiceGetResponse) GetVm() *VMInstance { + if x != nil { + return x.Vm + } + return nil +} + +// Windows-specific create request parts. +type VMServiceCreateWindowsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the Windows domain the VM should join. + DomainUuid string `protobuf:"bytes,1,opt,name=domain_uuid,json=domainUuid,proto3" json:"domain_uuid,omitempty"` + // Disks for the Windows VM, excluding the OS disk. + Disks []*WindowsDisk `protobuf:"bytes,2,rep,name=disks,proto3" json:"disks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceCreateWindowsRequest) Reset() { + *x = VMServiceCreateWindowsRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceCreateWindowsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceCreateWindowsRequest) ProtoMessage() {} + +func (x *VMServiceCreateWindowsRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceCreateWindowsRequest.ProtoReflect.Descriptor instead. +func (*VMServiceCreateWindowsRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{6} +} + +func (x *VMServiceCreateWindowsRequest) GetDomainUuid() string { + if x != nil { + return x.DomainUuid + } + return "" +} + +func (x *VMServiceCreateWindowsRequest) GetDisks() []*WindowsDisk { + if x != nil { + return x.Disks + } + return nil +} + +// Linux-specific create request parts. +type VMServiceCreateLinuxRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the LDAP directory the VM should integrate with. + LdapUuid string `protobuf:"bytes,1,opt,name=ldap_uuid,json=ldapUuid,proto3" json:"ldap_uuid,omitempty"` + // Disks for the Linux VM, excluding the OS disk. + Disks []*LinuxDisk `protobuf:"bytes,2,rep,name=disks,proto3" json:"disks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceCreateLinuxRequest) Reset() { + *x = VMServiceCreateLinuxRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceCreateLinuxRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceCreateLinuxRequest) ProtoMessage() {} + +func (x *VMServiceCreateLinuxRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceCreateLinuxRequest.ProtoReflect.Descriptor instead. +func (*VMServiceCreateLinuxRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{7} +} + +func (x *VMServiceCreateLinuxRequest) GetLdapUuid() string { + if x != nil { + return x.LdapUuid + } + return "" +} + +func (x *VMServiceCreateLinuxRequest) GetDisks() []*LinuxDisk { + if x != nil { + return x.Disks + } + return nil +} + +// Request to create a new VM instance. +// TODO: contract, billable and billing_start_date. +type VMServiceCreateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the project this VM belongs to. + ProjectUuid string `protobuf:"bytes,1,opt,name=project_uuid,json=projectUuid,proto3" json:"project_uuid,omitempty"` + // Optional name; the FQDN is derived from it. + Name *string `protobuf:"bytes,2,opt,name=name,proto3,oneof" json:"name,omitempty"` + // UUID of the operating system image to install. + OsUuid string `protobuf:"bytes,3,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` + // UUID of the VLAN network to attach the VM to. + VlanUuid string `protobuf:"bytes,4,opt,name=vlan_uuid,json=vlanUuid,proto3" json:"vlan_uuid,omitempty"` + // UUID of the datacenter location; the VM is scheduled into one data center within it. + LocationUuid string `protobuf:"bytes,5,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` + // TODO: Contact UUID – open discussion with FCN; may become a dedicated /contact endpoint. + ContactUuid string `protobuf:"bytes,6,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` + // Number of CPU cores. + Cpu uint32 `protobuf:"varint,7,opt,name=cpu,proto3" json:"cpu,omitempty"` + // RAM in GB. Must be a power of 2. + Ram uint32 `protobuf:"varint,8,opt,name=ram,proto3" json:"ram,omitempty"` + // Internal reference number provided by the user, e.g. a ticket ID. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,9,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // Optional key-value labels for accounting purposes. + // (e.g. contract number, transaction number, technical key, accounting key). + Labels *v1.Labels `protobuf:"bytes,10,opt,name=labels,proto3" json:"labels,omitempty"` + // Whether backup is enabled. + Backup bool `protobuf:"varint,11,opt,name=backup,proto3" json:"backup,omitempty"` + // Availability level. + Availability Availability `protobuf:"varint,12,opt,name=availability,proto3,enum=fits.api.vm.v1.Availability" json:"availability,omitempty"` + // Service class; only certain combinations with availability are valid. + Serviceclass ServiceClass `protobuf:"varint,13,opt,name=serviceclass,proto3,enum=fits.api.vm.v1.ServiceClass" json:"serviceclass,omitempty"` + // OS type and its configuration. + // + // Types that are valid to be assigned to Vmtype: + // + // *VMServiceCreateRequest_Windows + // *VMServiceCreateRequest_Linux + Vmtype isVMServiceCreateRequest_Vmtype `protobuf_oneof:"vmtype"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceCreateRequest) Reset() { + *x = VMServiceCreateRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceCreateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceCreateRequest) ProtoMessage() {} + +func (x *VMServiceCreateRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceCreateRequest.ProtoReflect.Descriptor instead. +func (*VMServiceCreateRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{8} +} + +func (x *VMServiceCreateRequest) GetProjectUuid() string { + if x != nil { + return x.ProjectUuid + } + return "" +} + +func (x *VMServiceCreateRequest) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *VMServiceCreateRequest) GetOsUuid() string { + if x != nil { + return x.OsUuid + } + return "" +} + +func (x *VMServiceCreateRequest) GetVlanUuid() string { + if x != nil { + return x.VlanUuid + } + return "" +} + +func (x *VMServiceCreateRequest) GetLocationUuid() string { + if x != nil { + return x.LocationUuid + } + return "" +} + +func (x *VMServiceCreateRequest) GetContactUuid() string { + if x != nil { + return x.ContactUuid + } + return "" +} + +func (x *VMServiceCreateRequest) GetCpu() uint32 { + if x != nil { + return x.Cpu + } + return 0 +} + +func (x *VMServiceCreateRequest) GetRam() uint32 { + if x != nil { + return x.Ram + } + return 0 +} + +func (x *VMServiceCreateRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +func (x *VMServiceCreateRequest) GetLabels() *v1.Labels { + if x != nil { + return x.Labels + } + return nil +} + +func (x *VMServiceCreateRequest) GetBackup() bool { + if x != nil { + return x.Backup + } + return false +} + +func (x *VMServiceCreateRequest) GetAvailability() Availability { + if x != nil { + return x.Availability + } + return Availability_AVAILABILITY_UNSPECIFIED +} + +func (x *VMServiceCreateRequest) GetServiceclass() ServiceClass { + if x != nil { + return x.Serviceclass + } + return ServiceClass_SERVICE_CLASS_UNSPECIFIED +} + +func (x *VMServiceCreateRequest) GetVmtype() isVMServiceCreateRequest_Vmtype { + if x != nil { + return x.Vmtype + } + return nil +} + +func (x *VMServiceCreateRequest) GetWindows() *VMServiceCreateWindowsRequest { + if x != nil { + if x, ok := x.Vmtype.(*VMServiceCreateRequest_Windows); ok { + return x.Windows + } + } + return nil +} + +func (x *VMServiceCreateRequest) GetLinux() *VMServiceCreateLinuxRequest { + if x != nil { + if x, ok := x.Vmtype.(*VMServiceCreateRequest_Linux); ok { + return x.Linux + } + } + return nil +} + +type isVMServiceCreateRequest_Vmtype interface { + isVMServiceCreateRequest_Vmtype() +} + +type VMServiceCreateRequest_Windows struct { + // Windows-specific settings (domain + disk). + Windows *VMServiceCreateWindowsRequest `protobuf:"bytes,14,opt,name=windows,proto3,oneof"` +} + +type VMServiceCreateRequest_Linux struct { + // Linux-specific settings (LDAP + disk). + Linux *VMServiceCreateLinuxRequest `protobuf:"bytes,15,opt,name=linux,proto3,oneof"` +} + +func (*VMServiceCreateRequest_Windows) isVMServiceCreateRequest_Vmtype() {} + +func (*VMServiceCreateRequest_Linux) isVMServiceCreateRequest_Vmtype() {} + +// Disk configuration for a Linux VM. +type LinuxDisk struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the disk; set for existing disks, unset for new ones. + Uuid *string `protobuf:"bytes,1,opt,name=uuid,proto3,oneof" json:"uuid,omitempty"` + // Label (name) of the disk. + Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` + // Whether the disk grows automatically when space runs low. + AutoExtend bool `protobuf:"varint,3,opt,name=auto_extend,json=autoExtend,proto3" json:"auto_extend,omitempty"` + // Size of the disk in GB. + Size *uint64 `protobuf:"varint,4,opt,name=size,proto3,oneof" json:"size,omitempty"` + // Mount point (e.g. "/data"). + MountPoint *string `protobuf:"bytes,5,opt,name=mount_point,json=mountPoint,proto3,oneof" json:"mount_point,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LinuxDisk) Reset() { + *x = LinuxDisk{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LinuxDisk) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LinuxDisk) ProtoMessage() {} + +func (x *LinuxDisk) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LinuxDisk.ProtoReflect.Descriptor instead. +func (*LinuxDisk) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{9} +} + +func (x *LinuxDisk) GetUuid() string { + if x != nil && x.Uuid != nil { + return *x.Uuid + } + return "" +} + +func (x *LinuxDisk) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +func (x *LinuxDisk) GetAutoExtend() bool { + if x != nil { + return x.AutoExtend + } + return false +} + +func (x *LinuxDisk) GetSize() uint64 { + if x != nil && x.Size != nil { + return *x.Size + } + return 0 +} + +func (x *LinuxDisk) GetMountPoint() string { + if x != nil && x.MountPoint != nil { + return *x.MountPoint + } + return "" +} + +// Disk configuration for a Windows VM. +type WindowsDisk struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the disk; set for existing disks, unset for new ones. + Uuid *string `protobuf:"bytes,1,opt,name=uuid,proto3,oneof" json:"uuid,omitempty"` + // Label (name) of the disk. + Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` + // Whether the disk grows automatically when space runs low. + AutoExtend bool `protobuf:"varint,3,opt,name=auto_extend,json=autoExtend,proto3" json:"auto_extend,omitempty"` + // Size of the disk in GB. + Size *uint64 `protobuf:"varint,4,opt,name=size,proto3,oneof" json:"size,omitempty"` + // Drive letter (e.g. "D"). + Driveletter *string `protobuf:"bytes,5,opt,name=driveletter,proto3,oneof" json:"driveletter,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WindowsDisk) Reset() { + *x = WindowsDisk{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WindowsDisk) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WindowsDisk) ProtoMessage() {} + +func (x *WindowsDisk) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WindowsDisk.ProtoReflect.Descriptor instead. +func (*WindowsDisk) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{10} +} + +func (x *WindowsDisk) GetUuid() string { + if x != nil && x.Uuid != nil { + return *x.Uuid + } + return "" +} + +func (x *WindowsDisk) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +func (x *WindowsDisk) GetAutoExtend() bool { + if x != nil { + return x.AutoExtend + } + return false +} + +func (x *WindowsDisk) GetSize() uint64 { + if x != nil && x.Size != nil { + return *x.Size + } + return 0 +} + +func (x *WindowsDisk) GetDriveletter() string { + if x != nil && x.Driveletter != nil { + return *x.Driveletter + } + return "" +} + +// Response for Create; an empty response means the VM was accepted. +type VMServiceCreateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceCreateResponse) Reset() { + *x = VMServiceCreateResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceCreateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceCreateResponse) ProtoMessage() {} + +func (x *VMServiceCreateResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceCreateResponse.ProtoReflect.Descriptor instead. +func (*VMServiceCreateResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{11} +} + +// Request to change a mutable property of an existing VM. +// Exactly one action must be set; each maps onto its own upstream endpoint. +// TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per +// action); combined changes would need +// server-side fan-out without rollback. +type VMServiceUpdateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the VM to update. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Project the VM belongs to. + Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,3,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // Timestamp and strategy for this update. + UpdateMeta *v1.UpdateMeta `protobuf:"bytes,4,opt,name=update_meta,json=updateMeta,proto3" json:"update_meta,omitempty"` + // The change to apply. + // + // Types that are valid to be assigned to Action: + // + // *VMServiceUpdateRequest_PerformanceClass + // *VMServiceUpdateRequest_ServiceClass + // *VMServiceUpdateRequest_Contact + Action isVMServiceUpdateRequest_Action `protobuf_oneof:"action"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceUpdateRequest) Reset() { + *x = VMServiceUpdateRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceUpdateRequest) ProtoMessage() {} + +func (x *VMServiceUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceUpdateRequest.ProtoReflect.Descriptor instead. +func (*VMServiceUpdateRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{12} +} + +func (x *VMServiceUpdateRequest) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *VMServiceUpdateRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *VMServiceUpdateRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +func (x *VMServiceUpdateRequest) GetUpdateMeta() *v1.UpdateMeta { + if x != nil { + return x.UpdateMeta + } + return nil +} + +func (x *VMServiceUpdateRequest) GetAction() isVMServiceUpdateRequest_Action { + if x != nil { + return x.Action + } + return nil +} + +func (x *VMServiceUpdateRequest) GetPerformanceClass() *PerformanceClassChange { + if x != nil { + if x, ok := x.Action.(*VMServiceUpdateRequest_PerformanceClass); ok { + return x.PerformanceClass + } + } + return nil +} + +func (x *VMServiceUpdateRequest) GetServiceClass() *ServiceClassChange { + if x != nil { + if x, ok := x.Action.(*VMServiceUpdateRequest_ServiceClass); ok { + return x.ServiceClass + } + } + return nil +} + +func (x *VMServiceUpdateRequest) GetContact() *ContactChange { + if x != nil { + if x, ok := x.Action.(*VMServiceUpdateRequest_Contact); ok { + return x.Contact + } + } + return nil +} + +type isVMServiceUpdateRequest_Action interface { + isVMServiceUpdateRequest_Action() +} + +type VMServiceUpdateRequest_PerformanceClass struct { + // Change the CPU/RAM performance class. + PerformanceClass *PerformanceClassChange `protobuf:"bytes,5,opt,name=performance_class,json=performanceClass,proto3,oneof"` +} + +type VMServiceUpdateRequest_ServiceClass struct { + // Change the service class. + ServiceClass *ServiceClassChange `protobuf:"bytes,6,opt,name=service_class,json=serviceClass,proto3,oneof"` +} + +type VMServiceUpdateRequest_Contact struct { + // Change the contact person. + Contact *ContactChange `protobuf:"bytes,7,opt,name=contact,proto3,oneof"` +} + +func (*VMServiceUpdateRequest_PerformanceClass) isVMServiceUpdateRequest_Action() {} + +func (*VMServiceUpdateRequest_ServiceClass) isVMServiceUpdateRequest_Action() {} + +func (*VMServiceUpdateRequest_Contact) isVMServiceUpdateRequest_Action() {} + +// PerformanceClassChange is the payload for changing a VM's CPU and RAM. +type PerformanceClassChange struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Number of vCPUs (1-64). + Cpu uint32 `protobuf:"varint,1,opt,name=cpu,proto3" json:"cpu,omitempty"` + // RAM size in GB. + Ram uint32 `protobuf:"varint,2,opt,name=ram,proto3" json:"ram,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PerformanceClassChange) Reset() { + *x = PerformanceClassChange{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PerformanceClassChange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PerformanceClassChange) ProtoMessage() {} + +func (x *PerformanceClassChange) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PerformanceClassChange.ProtoReflect.Descriptor instead. +func (*PerformanceClassChange) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{13} +} + +func (x *PerformanceClassChange) GetCpu() uint32 { + if x != nil { + return x.Cpu + } + return 0 +} + +func (x *PerformanceClassChange) GetRam() uint32 { + if x != nil { + return x.Ram + } + return 0 +} + +// ServiceClassChange is the payload for changing a VM's service class. +type ServiceClassChange struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Target service class. + Serviceclass ServiceClass `protobuf:"varint,1,opt,name=serviceclass,proto3,enum=fits.api.vm.v1.ServiceClass" json:"serviceclass,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ServiceClassChange) Reset() { + *x = ServiceClassChange{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ServiceClassChange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceClassChange) ProtoMessage() {} + +func (x *ServiceClassChange) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServiceClassChange.ProtoReflect.Descriptor instead. +func (*ServiceClassChange) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{14} +} + +func (x *ServiceClassChange) GetServiceclass() ServiceClass { + if x != nil { + return x.Serviceclass + } + return ServiceClass_SERVICE_CLASS_UNSPECIFIED +} + +// ContactChange is the payload for changing a VM's contact person. +type ContactChange struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the new contact. + ContactUuid string `protobuf:"bytes,1,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContactChange) Reset() { + *x = ContactChange{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContactChange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContactChange) ProtoMessage() {} + +func (x *ContactChange) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContactChange.ProtoReflect.Descriptor instead. +func (*ContactChange) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{15} +} + +func (x *ContactChange) GetContactUuid() string { + if x != nil { + return x.ContactUuid + } + return "" +} + +// Response for Update; an empty response means the change was accepted. +type VMServiceUpdateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceUpdateResponse) Reset() { + *x = VMServiceUpdateResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceUpdateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceUpdateResponse) ProtoMessage() {} + +func (x *VMServiceUpdateResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceUpdateResponse.ProtoReflect.Descriptor instead. +func (*VMServiceUpdateResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{16} +} + +// Request to list VMs. +type VMServiceListRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Tenant of the VMs. + Tenant *string `protobuf:"bytes,1,opt,name=tenant,proto3,oneof" json:"tenant,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceListRequest) Reset() { + *x = VMServiceListRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceListRequest) ProtoMessage() {} + +func (x *VMServiceListRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceListRequest.ProtoReflect.Descriptor instead. +func (*VMServiceListRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{17} +} + +func (x *VMServiceListRequest) GetTenant() string { + if x != nil && x.Tenant != nil { + return *x.Tenant + } + return "" +} + +// Response containing the list of VMs. +type VMServiceListResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The VM instances. + Vms []*VMInstance `protobuf:"bytes,1,rep,name=vms,proto3" json:"vms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceListResponse) Reset() { + *x = VMServiceListResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceListResponse) ProtoMessage() {} + +func (x *VMServiceListResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceListResponse.ProtoReflect.Descriptor instead. +func (*VMServiceListResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{18} +} + +func (x *VMServiceListResponse) GetVms() []*VMInstance { + if x != nil { + return x.Vms + } + return nil +} + +// Request to cancel a VM instance. +type VMServiceDeleteRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Project the VM belongs to. + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + // UUID of the VM to delete. + Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,3,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceDeleteRequest) Reset() { + *x = VMServiceDeleteRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceDeleteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceDeleteRequest) ProtoMessage() {} + +func (x *VMServiceDeleteRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceDeleteRequest.ProtoReflect.Descriptor instead. +func (*VMServiceDeleteRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{19} +} + +func (x *VMServiceDeleteRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *VMServiceDeleteRequest) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *VMServiceDeleteRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +// Response for Delete; an empty response means the cancellation was accepted. +type VMServiceDeleteResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceDeleteResponse) Reset() { + *x = VMServiceDeleteResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceDeleteResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceDeleteResponse) ProtoMessage() {} + +func (x *VMServiceDeleteResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceDeleteResponse.ProtoReflect.Descriptor instead. +func (*VMServiceDeleteResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{20} +} + +// Request to validate a VM create without creating anything. +type VMServiceValidateCreateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The create request to validate. + Create *VMServiceCreateRequest `protobuf:"bytes,1,opt,name=create,proto3" json:"create,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceValidateCreateRequest) Reset() { + *x = VMServiceValidateCreateRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceValidateCreateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceValidateCreateRequest) ProtoMessage() {} + +func (x *VMServiceValidateCreateRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceValidateCreateRequest.ProtoReflect.Descriptor instead. +func (*VMServiceValidateCreateRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{21} +} + +func (x *VMServiceValidateCreateRequest) GetCreate() *VMServiceCreateRequest { + if x != nil { + return x.Create + } + return nil +} + +// Response for ValidateCreate; violations are returned as an InvalidArgument error. +type VMServiceValidateCreateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceValidateCreateResponse) Reset() { + *x = VMServiceValidateCreateResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceValidateCreateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceValidateCreateResponse) ProtoMessage() {} + +func (x *VMServiceValidateCreateResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceValidateCreateResponse.ProtoReflect.Descriptor instead. +func (*VMServiceValidateCreateResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{22} +} + +// Request to validate an AddDisk without ordering anything. +type VMServiceValidateAddDiskRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The add disk request to validate. + AddDisk *VMServiceAddDiskRequest `protobuf:"bytes,1,opt,name=add_disk,json=addDisk,proto3" json:"add_disk,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceValidateAddDiskRequest) Reset() { + *x = VMServiceValidateAddDiskRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceValidateAddDiskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceValidateAddDiskRequest) ProtoMessage() {} + +func (x *VMServiceValidateAddDiskRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VMServiceValidateAddDiskRequest.ProtoReflect.Descriptor instead. +func (*VMServiceValidateAddDiskRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{23} +} + +func (x *VMServiceValidateAddDiskRequest) GetAddDisk() *VMServiceAddDiskRequest { + if x != nil { + return x.AddDisk + } + return nil +} + +// Response for ValidateAddDisk; violations are returned as an InvalidArgument error. +type VMServiceValidateAddDiskResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceValidateAddDiskResponse) Reset() { + *x = VMServiceValidateAddDiskResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *VMServiceGetResponse) String() string { +func (x *VMServiceValidateAddDiskResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VMServiceGetResponse) ProtoMessage() {} +func (*VMServiceValidateAddDiskResponse) ProtoMessage() {} -func (x *VMServiceGetResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] +func (x *VMServiceValidateAddDiskResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -570,44 +1900,35 @@ func (x *VMServiceGetResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VMServiceGetResponse.ProtoReflect.Descriptor instead. -func (*VMServiceGetResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{5} -} - -func (x *VMServiceGetResponse) GetVm() *VMInstance { - if x != nil { - return x.Vm - } - return nil +// Deprecated: Use VMServiceValidateAddDiskResponse.ProtoReflect.Descriptor instead. +func (*VMServiceValidateAddDiskResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{24} } -// Windows-specific create request parts. -type VMServiceCreateWindowsRequest struct { +// Request to validate an UpdateDisk without changing anything. +type VMServiceValidateUpdateDiskRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the Windows domain the VM should join. Required. - DomainUuid string `protobuf:"bytes,1,opt,name=domain_uuid,json=domainUuid,proto3" json:"domain_uuid,omitempty"` - // Disk configuration for the Windows VM. - Disk *WindowsDisk `protobuf:"bytes,2,opt,name=disk,proto3" json:"disk,omitempty"` + // The update disk request to validate. + UpdateDisk *VMServiceUpdateDiskRequest `protobuf:"bytes,1,opt,name=update_disk,json=updateDisk,proto3" json:"update_disk,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *VMServiceCreateWindowsRequest) Reset() { - *x = VMServiceCreateWindowsRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] +func (x *VMServiceValidateUpdateDiskRequest) Reset() { + *x = VMServiceValidateUpdateDiskRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *VMServiceCreateWindowsRequest) String() string { +func (x *VMServiceValidateUpdateDiskRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VMServiceCreateWindowsRequest) ProtoMessage() {} +func (*VMServiceValidateUpdateDiskRequest) ProtoMessage() {} -func (x *VMServiceCreateWindowsRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] +func (x *VMServiceValidateUpdateDiskRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -618,51 +1939,40 @@ func (x *VMServiceCreateWindowsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VMServiceCreateWindowsRequest.ProtoReflect.Descriptor instead. -func (*VMServiceCreateWindowsRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{6} -} - -func (x *VMServiceCreateWindowsRequest) GetDomainUuid() string { - if x != nil { - return x.DomainUuid - } - return "" +// Deprecated: Use VMServiceValidateUpdateDiskRequest.ProtoReflect.Descriptor instead. +func (*VMServiceValidateUpdateDiskRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{25} } -func (x *VMServiceCreateWindowsRequest) GetDisk() *WindowsDisk { +func (x *VMServiceValidateUpdateDiskRequest) GetUpdateDisk() *VMServiceUpdateDiskRequest { if x != nil { - return x.Disk + return x.UpdateDisk } return nil } -// Linux-specific create request parts. -type VMServiceCreateLinuxRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the LDAP directory the VM should integrate with. Required. - LdapUuid string `protobuf:"bytes,1,opt,name=ldap_uuid,json=ldapUuid,proto3" json:"ldap_uuid,omitempty"` - // Disk configuration for the Linux VM. - Disk *LinuxDisk `protobuf:"bytes,2,opt,name=disk,proto3" json:"disk,omitempty"` +// Response for ValidateUpdateDisk; violations are returned as an InvalidArgument error. +type VMServiceValidateUpdateDiskResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *VMServiceCreateLinuxRequest) Reset() { - *x = VMServiceCreateLinuxRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] +func (x *VMServiceValidateUpdateDiskResponse) Reset() { + *x = VMServiceValidateUpdateDiskResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *VMServiceCreateLinuxRequest) String() string { +func (x *VMServiceValidateUpdateDiskResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VMServiceCreateLinuxRequest) ProtoMessage() {} +func (*VMServiceValidateUpdateDiskResponse) ProtoMessage() {} -func (x *VMServiceCreateLinuxRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] +func (x *VMServiceValidateUpdateDiskResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -673,86 +1983,70 @@ func (x *VMServiceCreateLinuxRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VMServiceCreateLinuxRequest.ProtoReflect.Descriptor instead. -func (*VMServiceCreateLinuxRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{7} +// Deprecated: Use VMServiceValidateUpdateDiskResponse.ProtoReflect.Descriptor instead. +func (*VMServiceValidateUpdateDiskResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{26} } -func (x *VMServiceCreateLinuxRequest) GetLdapUuid() string { - if x != nil { - return x.LdapUuid - } - return "" +// Response for AddDisk. +type VMServiceAddDiskResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VMServiceAddDiskResponse) Reset() { + *x = VMServiceAddDiskResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceAddDiskResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *VMServiceCreateLinuxRequest) GetDisk() *LinuxDisk { +func (*VMServiceAddDiskResponse) ProtoMessage() {} + +func (x *VMServiceAddDiskResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[27] if x != nil { - return x.Disk + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -// Request to create a new VM instance. -type VMServiceCreateRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the project this VM belongs to. Required. - ProjectUuid string `protobuf:"bytes,1,opt,name=project_uuid,json=projectUuid,proto3" json:"project_uuid,omitempty"` - // Optional name for the VM. The FQDN is derived from this value. - Name *string `protobuf:"bytes,2,opt,name=name,proto3,oneof" json:"name,omitempty"` - // UUID of the operating system image to install. Required. - OsUuid string `protobuf:"bytes,3,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` - // UUID of the VLAN network to attach the VM to. Required. - // Obtainable via the VLAN list endpoint. - VlanUuid string `protobuf:"bytes,4,opt,name=vlan_uuid,json=vlanUuid,proto3" json:"vlan_uuid,omitempty"` - // UUID of the datacenter location. Required. - // The VM is automatically scheduled into one data center within the chosen location; - // users select the city but not the specific datacenter. - LocationUuid string `protobuf:"bytes,5,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` - // TODO: Contact UUID – open discussion with FCN on how to model responsible contacts. - // GDPR considerations pending. May become a dedicated /contact endpoint. - ContactUuid string `protobuf:"bytes,6,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` - // Number of CPU cores. - Cpu uint32 `protobuf:"varint,7,opt,name=cpu,proto3" json:"cpu,omitempty"` - // RAM in GB. Must be a power of 2. - Ram uint32 `protobuf:"varint,8,opt,name=ram,proto3" json:"ram,omitempty"` - // Internal reference number provided by the user, e.g. a ticket ID. Free text. Required. - OrderNumber string `protobuf:"bytes,9,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` - // Optional key-value labels for accounting purposes - // (e.g. contract number, transaction number, technical key, accounting key). - Labels *v1.Labels `protobuf:"bytes,10,opt,name=labels,proto3" json:"labels,omitempty"` - // Whether backup is enabled. Simple on/off toggle; no distinct backup plans. Required. - Backup bool `protobuf:"varint,11,opt,name=backup,proto3" json:"backup,omitempty"` - // Availability level: v0, v1, v2, v3 (higher value = higher availability). Required. - Availability string `protobuf:"bytes,12,opt,name=availability,proto3" json:"availability,omitempty"` - // Service class: sz1, sz2, sz3 (higher value = higher tier). Required. - // Only certain combinations with availability are valid; enforced by the backend. - Serviceclass string `protobuf:"bytes,13,opt,name=serviceclass,proto3" json:"serviceclass,omitempty"` - // Specifies the OS type and its associated configuration. Exactly one must be set. - // - // Types that are valid to be assigned to Vmtype: - // - // *VMServiceCreateRequest_Windows - // *VMServiceCreateRequest_Linux - Vmtype isVMServiceCreateRequest_Vmtype `protobuf_oneof:"vmtype"` +// Deprecated: Use VMServiceAddDiskResponse.ProtoReflect.Descriptor instead. +func (*VMServiceAddDiskResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{27} +} + +// Response for UpdateDisk. +type VMServiceUpdateDiskResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *VMServiceCreateRequest) Reset() { - *x = VMServiceCreateRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] +func (x *VMServiceUpdateDiskResponse) Reset() { + *x = VMServiceUpdateDiskResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *VMServiceCreateRequest) String() string { +func (x *VMServiceUpdateDiskResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VMServiceCreateRequest) ProtoMessage() {} +func (*VMServiceUpdateDiskResponse) ProtoMessage() {} -func (x *VMServiceCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] +func (x *VMServiceUpdateDiskResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -763,175 +2057,198 @@ func (x *VMServiceCreateRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VMServiceCreateRequest.ProtoReflect.Descriptor instead. -func (*VMServiceCreateRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{8} +// Deprecated: Use VMServiceUpdateDiskResponse.ProtoReflect.Descriptor instead. +func (*VMServiceUpdateDiskResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{28} } -func (x *VMServiceCreateRequest) GetProjectUuid() string { - if x != nil { - return x.ProjectUuid - } - return "" +// Response for DeleteDisk. +type VMServiceDeleteDiskResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *VMServiceCreateRequest) GetName() string { - if x != nil && x.Name != nil { - return *x.Name - } - return "" +func (x *VMServiceDeleteDiskResponse) Reset() { + *x = VMServiceDeleteDiskResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *VMServiceCreateRequest) GetOsUuid() string { - if x != nil { - return x.OsUuid - } - return "" +func (x *VMServiceDeleteDiskResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *VMServiceCreateRequest) GetVlanUuid() string { +func (*VMServiceDeleteDiskResponse) ProtoMessage() {} + +func (x *VMServiceDeleteDiskResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[29] if x != nil { - return x.VlanUuid + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *VMServiceCreateRequest) GetLocationUuid() string { - if x != nil { - return x.LocationUuid - } - return "" +// Deprecated: Use VMServiceDeleteDiskResponse.ProtoReflect.Descriptor instead. +func (*VMServiceDeleteDiskResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{29} } -func (x *VMServiceCreateRequest) GetContactUuid() string { - if x != nil { - return x.ContactUuid - } - return "" +// Request to order an additional data disk for a VM. +type VMServiceAddDiskRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the VM to attach the disk to. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Project the VM belongs to. + Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,3,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // OS-specific disk specification; must match the VM's OS type. + // + // Types that are valid to be assigned to Disk: + // + // *VMServiceAddDiskRequest_Linux + // *VMServiceAddDiskRequest_Windows + Disk isVMServiceAddDiskRequest_Disk `protobuf_oneof:"disk"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *VMServiceCreateRequest) GetCpu() uint32 { - if x != nil { - return x.Cpu - } - return 0 +func (x *VMServiceAddDiskRequest) Reset() { + *x = VMServiceAddDiskRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *VMServiceCreateRequest) GetRam() uint32 { - if x != nil { - return x.Ram - } - return 0 +func (x *VMServiceAddDiskRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *VMServiceCreateRequest) GetOrderNumber() string { +func (*VMServiceAddDiskRequest) ProtoMessage() {} + +func (x *VMServiceAddDiskRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[30] if x != nil { - return x.OrderNumber + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *VMServiceCreateRequest) GetLabels() *v1.Labels { - if x != nil { - return x.Labels - } - return nil +// Deprecated: Use VMServiceAddDiskRequest.ProtoReflect.Descriptor instead. +func (*VMServiceAddDiskRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{30} } -func (x *VMServiceCreateRequest) GetBackup() bool { +func (x *VMServiceAddDiskRequest) GetUuid() string { if x != nil { - return x.Backup + return x.Uuid } - return false + return "" } -func (x *VMServiceCreateRequest) GetAvailability() string { +func (x *VMServiceAddDiskRequest) GetProject() string { if x != nil { - return x.Availability + return x.Project } return "" } -func (x *VMServiceCreateRequest) GetServiceclass() string { +func (x *VMServiceAddDiskRequest) GetOrderNumber() string { if x != nil { - return x.Serviceclass + return x.OrderNumber } return "" } -func (x *VMServiceCreateRequest) GetVmtype() isVMServiceCreateRequest_Vmtype { +func (x *VMServiceAddDiskRequest) GetDisk() isVMServiceAddDiskRequest_Disk { if x != nil { - return x.Vmtype + return x.Disk } return nil } -func (x *VMServiceCreateRequest) GetWindows() *VMServiceCreateWindowsRequest { +func (x *VMServiceAddDiskRequest) GetLinux() *LinuxDisk { if x != nil { - if x, ok := x.Vmtype.(*VMServiceCreateRequest_Windows); ok { - return x.Windows + if x, ok := x.Disk.(*VMServiceAddDiskRequest_Linux); ok { + return x.Linux } } return nil } -func (x *VMServiceCreateRequest) GetLinux() *VMServiceCreateLinuxRequest { +func (x *VMServiceAddDiskRequest) GetWindows() *WindowsDisk { if x != nil { - if x, ok := x.Vmtype.(*VMServiceCreateRequest_Linux); ok { - return x.Linux + if x, ok := x.Disk.(*VMServiceAddDiskRequest_Windows); ok { + return x.Windows } } return nil } -type isVMServiceCreateRequest_Vmtype interface { - isVMServiceCreateRequest_Vmtype() +type isVMServiceAddDiskRequest_Disk interface { + isVMServiceAddDiskRequest_Disk() } -type VMServiceCreateRequest_Windows struct { - // Windows-specific settings (domain + disk). - Windows *VMServiceCreateWindowsRequest `protobuf:"bytes,14,opt,name=windows,proto3,oneof"` +type VMServiceAddDiskRequest_Linux struct { + // Linux data disk. + Linux *LinuxDisk `protobuf:"bytes,4,opt,name=linux,proto3,oneof"` } -type VMServiceCreateRequest_Linux struct { - // Linux-specific settings (LDAP + disk). - Linux *VMServiceCreateLinuxRequest `protobuf:"bytes,15,opt,name=linux,proto3,oneof"` +type VMServiceAddDiskRequest_Windows struct { + // Windows data disk. + Windows *WindowsDisk `protobuf:"bytes,5,opt,name=windows,proto3,oneof"` } -func (*VMServiceCreateRequest_Windows) isVMServiceCreateRequest_Vmtype() {} +func (*VMServiceAddDiskRequest_Linux) isVMServiceAddDiskRequest_Disk() {} -func (*VMServiceCreateRequest_Linux) isVMServiceCreateRequest_Vmtype() {} +func (*VMServiceAddDiskRequest_Windows) isVMServiceAddDiskRequest_Disk() {} -// Disk configuration for a Linux VM. -type LinuxDisk struct { +// Request to change an existing data disk; only size and auto-extend are mutable. +type VMServiceUpdateDiskRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // If true, the disk grows automatically when space runs low. - AutoExtend bool `protobuf:"varint,1,opt,name=auto_extend,json=autoExtend,proto3" json:"auto_extend,omitempty"` - // Size of the disk in GB. - SizeInGb *uint64 `protobuf:"varint,2,opt,name=size_in_gb,json=sizeInGb,proto3,oneof" json:"size_in_gb,omitempty"` - // Label (name) of the disk. - Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"` - // Filesystem path where this disk should be mounted (e.g. "/data"). - MountPoint *string `protobuf:"bytes,5,opt,name=mount_point,json=mountPoint,proto3,oneof" json:"mount_point,omitempty"` + // UUID of the VM the disk belongs to. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // UUID of the disk to change. + DiskUuid string `protobuf:"bytes,2,opt,name=disk_uuid,json=diskUuid,proto3" json:"disk_uuid,omitempty"` + // Project the VM belongs to. + Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,4,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // New auto-extend behavior; unset keeps the current value. + AutoExtend *bool `protobuf:"varint,5,opt,name=auto_extend,json=autoExtend,proto3,oneof" json:"auto_extend,omitempty"` + // New size of the disk in GB; unset keeps the current value. + Size *uint64 `protobuf:"varint,6,opt,name=size,proto3,oneof" json:"size,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *LinuxDisk) Reset() { - *x = LinuxDisk{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] +func (x *VMServiceUpdateDiskRequest) Reset() { + *x = VMServiceUpdateDiskRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *LinuxDisk) String() string { +func (x *VMServiceUpdateDiskRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LinuxDisk) ProtoMessage() {} +func (*VMServiceUpdateDiskRequest) ProtoMessage() {} -func (x *LinuxDisk) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] +func (x *VMServiceUpdateDiskRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -942,69 +2259,84 @@ func (x *LinuxDisk) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LinuxDisk.ProtoReflect.Descriptor instead. -func (*LinuxDisk) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{9} +// Deprecated: Use VMServiceUpdateDiskRequest.ProtoReflect.Descriptor instead. +func (*VMServiceUpdateDiskRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{31} } -func (x *LinuxDisk) GetAutoExtend() bool { +func (x *VMServiceUpdateDiskRequest) GetUuid() string { if x != nil { - return x.AutoExtend + return x.Uuid } - return false + return "" } -func (x *LinuxDisk) GetSizeInGb() uint64 { - if x != nil && x.SizeInGb != nil { - return *x.SizeInGb +func (x *VMServiceUpdateDiskRequest) GetDiskUuid() string { + if x != nil { + return x.DiskUuid } - return 0 + return "" } -func (x *LinuxDisk) GetLabel() string { +func (x *VMServiceUpdateDiskRequest) GetProject() string { if x != nil { - return x.Label + return x.Project + } + return "" +} + +func (x *VMServiceUpdateDiskRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber } return "" } -func (x *LinuxDisk) GetMountPoint() string { - if x != nil && x.MountPoint != nil { - return *x.MountPoint +func (x *VMServiceUpdateDiskRequest) GetAutoExtend() bool { + if x != nil && x.AutoExtend != nil { + return *x.AutoExtend + } + return false +} + +func (x *VMServiceUpdateDiskRequest) GetSize() uint64 { + if x != nil && x.Size != nil { + return *x.Size } - return "" + return 0 } -// Disk configuration for a Windows VM. -type WindowsDisk struct { +// Request to cancel a data disk. +type VMServiceDeleteDiskRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // If true, the disk grows automatically when space runs low. - AutoExtend bool `protobuf:"varint,1,opt,name=auto_extend,json=autoExtend,proto3" json:"auto_extend,omitempty"` - // Size of the disk in GB. - SizeInGb *uint64 `protobuf:"varint,2,opt,name=size_in_gb,json=sizeInGb,proto3,oneof" json:"size_in_gb,omitempty"` - // Drive letter assigned to this disk (e.g. "D"). - Driveletter *string `protobuf:"bytes,3,opt,name=driveletter,proto3,oneof" json:"driveletter,omitempty"` - // Label (name) of the disk. - Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"` + // UUID of the VM the disk belongs to. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // UUID of the disk to cancel. + DiskUuid string `protobuf:"bytes,2,opt,name=disk_uuid,json=diskUuid,proto3" json:"disk_uuid,omitempty"` + // Project the VM belongs to. + Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,4,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *WindowsDisk) Reset() { - *x = WindowsDisk{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] +func (x *VMServiceDeleteDiskRequest) Reset() { + *x = VMServiceDeleteDiskRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *WindowsDisk) String() string { +func (x *VMServiceDeleteDiskRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*WindowsDisk) ProtoMessage() {} +func (*VMServiceDeleteDiskRequest) ProtoMessage() {} -func (x *WindowsDisk) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] +func (x *VMServiceDeleteDiskRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1015,61 +2347,61 @@ func (x *WindowsDisk) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use WindowsDisk.ProtoReflect.Descriptor instead. -func (*WindowsDisk) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{10} +// Deprecated: Use VMServiceDeleteDiskRequest.ProtoReflect.Descriptor instead. +func (*VMServiceDeleteDiskRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{32} } -func (x *WindowsDisk) GetAutoExtend() bool { +func (x *VMServiceDeleteDiskRequest) GetUuid() string { if x != nil { - return x.AutoExtend + return x.Uuid } - return false + return "" } -func (x *WindowsDisk) GetSizeInGb() uint64 { - if x != nil && x.SizeInGb != nil { - return *x.SizeInGb +func (x *VMServiceDeleteDiskRequest) GetDiskUuid() string { + if x != nil { + return x.DiskUuid } - return 0 + return "" } -func (x *WindowsDisk) GetDriveletter() string { - if x != nil && x.Driveletter != nil { - return *x.Driveletter +func (x *VMServiceDeleteDiskRequest) GetProject() string { + if x != nil { + return x.Project } return "" } -func (x *WindowsDisk) GetLabel() string { +func (x *VMServiceDeleteDiskRequest) GetOrderNumber() string { if x != nil { - return x.Label + return x.OrderNumber } return "" } -// VMServiceCreateResponse TODO -type VMServiceCreateResponse struct { +// Response for AddIP. +type VMServiceAddIPResponse struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *VMServiceCreateResponse) Reset() { - *x = VMServiceCreateResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] +func (x *VMServiceAddIPResponse) Reset() { + *x = VMServiceAddIPResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *VMServiceCreateResponse) String() string { +func (x *VMServiceAddIPResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VMServiceCreateResponse) ProtoMessage() {} +func (*VMServiceAddIPResponse) ProtoMessage() {} -func (x *VMServiceCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] +func (x *VMServiceAddIPResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1080,37 +2412,33 @@ func (x *VMServiceCreateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VMServiceCreateResponse.ProtoReflect.Descriptor instead. -func (*VMServiceCreateResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{11} +// Deprecated: Use VMServiceAddIPResponse.ProtoReflect.Descriptor instead. +func (*VMServiceAddIPResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{33} } -// VMServiceUpdateRequest TODO -type VMServiceUpdateRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Project of the VM - ProjectUuid string `protobuf:"bytes,1,opt,name=project_uuid,json=projectUuid,proto3" json:"project_uuid,omitempty"` - // UpdateMeta contains the timestamp and strategy to be used in this update request. - UpdateMeta *v1.UpdateMeta `protobuf:"bytes,2,opt,name=update_meta,json=updateMeta,proto3" json:"update_meta,omitempty"` +// Response for MoveIP. +type VMServiceMoveIPResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *VMServiceUpdateRequest) Reset() { - *x = VMServiceUpdateRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[12] +func (x *VMServiceMoveIPResponse) Reset() { + *x = VMServiceMoveIPResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *VMServiceUpdateRequest) String() string { +func (x *VMServiceMoveIPResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VMServiceUpdateRequest) ProtoMessage() {} +func (*VMServiceMoveIPResponse) ProtoMessage() {} -func (x *VMServiceUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[12] +func (x *VMServiceMoveIPResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1121,47 +2449,77 @@ func (x *VMServiceUpdateRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VMServiceUpdateRequest.ProtoReflect.Descriptor instead. -func (*VMServiceUpdateRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{12} +// Deprecated: Use VMServiceMoveIPResponse.ProtoReflect.Descriptor instead. +func (*VMServiceMoveIPResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{34} } -func (x *VMServiceUpdateRequest) GetProjectUuid() string { - if x != nil { - return x.ProjectUuid - } - return "" +// Response for DeleteIP. +type VMServiceDeleteIPResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *VMServiceUpdateRequest) GetUpdateMeta() *v1.UpdateMeta { +func (x *VMServiceDeleteIPResponse) Reset() { + *x = VMServiceDeleteIPResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VMServiceDeleteIPResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMServiceDeleteIPResponse) ProtoMessage() {} + +func (x *VMServiceDeleteIPResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[35] if x != nil { - return x.UpdateMeta + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -// VMServiceUpdateResponse TODO -type VMServiceUpdateResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` +// Deprecated: Use VMServiceDeleteIPResponse.ProtoReflect.Descriptor instead. +func (*VMServiceDeleteIPResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{35} +} + +// Request to order an additional IP address for a VM. +type VMServiceAddIPRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the VM to attach the IP to. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Project the VM belongs to. + Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,3,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *VMServiceUpdateResponse) Reset() { - *x = VMServiceUpdateResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[13] +func (x *VMServiceAddIPRequest) Reset() { + *x = VMServiceAddIPRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *VMServiceUpdateResponse) String() string { +func (x *VMServiceAddIPRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VMServiceUpdateResponse) ProtoMessage() {} +func (*VMServiceAddIPRequest) ProtoMessage() {} -func (x *VMServiceUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[13] +func (x *VMServiceAddIPRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1172,37 +2530,65 @@ func (x *VMServiceUpdateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VMServiceUpdateResponse.ProtoReflect.Descriptor instead. -func (*VMServiceUpdateResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{13} +// Deprecated: Use VMServiceAddIPRequest.ProtoReflect.Descriptor instead. +func (*VMServiceAddIPRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{36} } -// VMServiceListRequest -type VMServiceListRequest struct { +func (x *VMServiceAddIPRequest) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *VMServiceAddIPRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *VMServiceAddIPRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +// Request to move an IP address from one VM to another. +type VMServiceMoveIPRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // Tenant of the VM - Tenant *string `protobuf:"bytes,1,opt,name=tenant,proto3,oneof" json:"tenant,omitempty"` - // Project of the VM - ProjectUuid *string `protobuf:"bytes,2,opt,name=project_uuid,json=projectUuid,proto3,oneof" json:"project_uuid,omitempty"` + // UUID of the VM the IP currently belongs to. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // UUID of the network interface holding the IP. + InterfaceUuid string `protobuf:"bytes,2,opt,name=interface_uuid,json=interfaceUuid,proto3" json:"interface_uuid,omitempty"` + // Project the VM belongs to. + Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,4,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // UUID of the VM to move the IP to. + TargetVmUuid string `protobuf:"bytes,5,opt,name=target_vm_uuid,json=targetVmUuid,proto3" json:"target_vm_uuid,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *VMServiceListRequest) Reset() { - *x = VMServiceListRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[14] +func (x *VMServiceMoveIPRequest) Reset() { + *x = VMServiceMoveIPRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *VMServiceListRequest) String() string { +func (x *VMServiceMoveIPRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VMServiceListRequest) ProtoMessage() {} +func (*VMServiceMoveIPRequest) ProtoMessage() {} -func (x *VMServiceListRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[14] +func (x *VMServiceMoveIPRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1213,49 +2599,77 @@ func (x *VMServiceListRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VMServiceListRequest.ProtoReflect.Descriptor instead. -func (*VMServiceListRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{14} +// Deprecated: Use VMServiceMoveIPRequest.ProtoReflect.Descriptor instead. +func (*VMServiceMoveIPRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{37} } -func (x *VMServiceListRequest) GetTenant() string { - if x != nil && x.Tenant != nil { - return *x.Tenant +func (x *VMServiceMoveIPRequest) GetUuid() string { + if x != nil { + return x.Uuid } return "" } -func (x *VMServiceListRequest) GetProjectUuid() string { - if x != nil && x.ProjectUuid != nil { - return *x.ProjectUuid +func (x *VMServiceMoveIPRequest) GetInterfaceUuid() string { + if x != nil { + return x.InterfaceUuid } return "" } -// VMServiceListResponse -type VMServiceListResponse struct { +func (x *VMServiceMoveIPRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *VMServiceMoveIPRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +func (x *VMServiceMoveIPRequest) GetTargetVmUuid() string { + if x != nil { + return x.TargetVmUuid + } + return "" +} + +// Request to delete an IP address from a VM. +type VMServiceDeleteIPRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // List of VM instances - Vms []*VMInstance `protobuf:"bytes,1,rep,name=vms,proto3" json:"vms,omitempty"` + // UUID of the VM the IP belongs to. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // UUID of the network interface holding the IP. + InterfaceUuid string `protobuf:"bytes,2,opt,name=interface_uuid,json=interfaceUuid,proto3" json:"interface_uuid,omitempty"` + // Project the VM belongs to. + Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,4,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *VMServiceListResponse) Reset() { - *x = VMServiceListResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[15] +func (x *VMServiceDeleteIPRequest) Reset() { + *x = VMServiceDeleteIPRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *VMServiceListResponse) String() string { +func (x *VMServiceDeleteIPRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VMServiceListResponse) ProtoMessage() {} +func (*VMServiceDeleteIPRequest) ProtoMessage() {} -func (x *VMServiceListResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[15] +func (x *VMServiceDeleteIPRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1266,42 +2680,63 @@ func (x *VMServiceListResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VMServiceListResponse.ProtoReflect.Descriptor instead. -func (*VMServiceListResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{15} +// Deprecated: Use VMServiceDeleteIPRequest.ProtoReflect.Descriptor instead. +func (*VMServiceDeleteIPRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{38} } -func (x *VMServiceListResponse) GetVms() []*VMInstance { +func (x *VMServiceDeleteIPRequest) GetUuid() string { if x != nil { - return x.Vms + return x.Uuid } - return nil + return "" } -// VMServiceDeleteRequest TODO -type VMServiceDeleteRequest struct { +func (x *VMServiceDeleteIPRequest) GetInterfaceUuid() string { + if x != nil { + return x.InterfaceUuid + } + return "" +} + +func (x *VMServiceDeleteIPRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *VMServiceDeleteIPRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +// Request to validate an AddIP without ordering anything. +type VMServiceValidateAddIPRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // Project of the VM - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + // The add IP request to validate. + AddIp *VMServiceAddIPRequest `protobuf:"bytes,1,opt,name=add_ip,json=addIp,proto3" json:"add_ip,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *VMServiceDeleteRequest) Reset() { - *x = VMServiceDeleteRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[16] +func (x *VMServiceValidateAddIPRequest) Reset() { + *x = VMServiceValidateAddIPRequest{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *VMServiceDeleteRequest) String() string { +func (x *VMServiceValidateAddIPRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VMServiceDeleteRequest) ProtoMessage() {} +func (*VMServiceValidateAddIPRequest) ProtoMessage() {} -func (x *VMServiceDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[16] +func (x *VMServiceValidateAddIPRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1312,40 +2747,40 @@ func (x *VMServiceDeleteRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VMServiceDeleteRequest.ProtoReflect.Descriptor instead. -func (*VMServiceDeleteRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{16} +// Deprecated: Use VMServiceValidateAddIPRequest.ProtoReflect.Descriptor instead. +func (*VMServiceValidateAddIPRequest) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{39} } -func (x *VMServiceDeleteRequest) GetProject() string { +func (x *VMServiceValidateAddIPRequest) GetAddIp() *VMServiceAddIPRequest { if x != nil { - return x.Project + return x.AddIp } - return "" + return nil } -// VMServiceDeleteResponse TODO -type VMServiceDeleteResponse struct { +// Response for ValidateAddIP; violations are returned as an InvalidArgument error. +type VMServiceValidateAddIPResponse struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *VMServiceDeleteResponse) Reset() { - *x = VMServiceDeleteResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[17] +func (x *VMServiceValidateAddIPResponse) Reset() { + *x = VMServiceValidateAddIPResponse{} + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *VMServiceDeleteResponse) String() string { +func (x *VMServiceValidateAddIPResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VMServiceDeleteResponse) ProtoMessage() {} +func (*VMServiceValidateAddIPResponse) ProtoMessage() {} -func (x *VMServiceDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[17] +func (x *VMServiceValidateAddIPResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_vm_v1_vm_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1356,44 +2791,16 @@ func (x *VMServiceDeleteResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VMServiceDeleteResponse.ProtoReflect.Descriptor instead. -func (*VMServiceDeleteResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{17} +// Deprecated: Use VMServiceValidateAddIPResponse.ProtoReflect.Descriptor instead. +func (*VMServiceValidateAddIPResponse) Descriptor() ([]byte, []int) { + return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{40} } var File_fits_api_vm_v1_vm_proto protoreflect.FileDescriptor const file_fits_api_vm_v1_vm_proto_rawDesc = "" + "\n" + - "\x17fits/api/vm/v1/vm.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x19fits/api/vm/v1/vlan.proto\"\xcd\x06\n" + - "\n" + - "VMInstance\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n" + - "\x04meta\x18\x02 \x01(\v2\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n" + - "\x04fqdn\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04fqdn\x12#\n" + - "\x06tenant\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n" + - "\fproject_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vprojectUuid\x12!\n" + - "\aos_uuid\x18\x06 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n" + - "\rlocation_uuid\x18\a \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\flocationUuid\x12+\n" + - "\fcontact_uuid\x18\b \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\x12\x10\n" + - "\x03cpu\x18\t \x01(\rR\x03cpu\x12\x10\n" + - "\x03ram\x18\n" + - " \x01(\rR\x03ram\x12!\n" + - "\forder_number\x18\v \x01(\tR\vorderNumber\x12\x1a\n" + - "\bcontract\x18\f \x01(\bR\bcontract\x12\x16\n" + - "\x06backup\x18\r \x01(\bR\x06backup\x12\"\n" + - "\favailability\x18\x0e \x01(\tR\favailability\x12\"\n" + - "\fserviceclass\x18\x0f \x01(\tR\fserviceclass\x12\x16\n" + - "\x06status\x18\x10 \x01(\tR\x06status\x12\x1f\n" + - "\vstatus_info\x18\x11 \x01(\tR\n" + - "statusInfo\x12I\n" + - "\x0fwindows_details\x18\x12 \x01(\v2\x1e.fits.api.vm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12C\n" + - "\rlinux_details\x18\x13 \x01(\v2\x1c.fits.api.vm.v1.LinuxDetailsH\x00R\flinuxDetails\x12@\n" + - "\n" + - "interfaces\x18\x14 \x03(\v2 .fits.api.vm.v1.NetworkInterfaceR\n" + - "interfaces\x12(\n" + - "\x04vlan\x18\x15 \x01(\v2\x14.fits.api.vm.v1.VlanR\x04vlanB\x10\n" + - "\adetails\x12\x05\xbaH\x02\b\x01\"\x90\x01\n" + + "\x17fits/api/vm/v1/vm.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x19fits/api/vm/v1/vlan.proto\"\x90\x01\n" + "\fLinuxDetails\x12/\n" + "\x05disks\x18\x01 \x03(\v2\x19.fits.api.vm.v1.LinuxDiskR\x05disks\x12%\n" + "\tldap_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bldapUuid\x12(\n" + @@ -1409,19 +2816,48 @@ const file_fits_api_vm_v1_vm_proto_rawDesc = "" + "\tipaddress\x18\x02 \x01(\tB\v\xbaH\br\x06賮\xb1\x02\x01R\tipaddress\x12\x1e\n" + "\n" + "macaddress\x18\x03 \x01(\tR\n" + - "macaddress\"W\n" + - "\x13VMServiceGetRequest\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + - "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"B\n" + + "macaddress\"\x9d\a\n" + + "\n" + + "VMInstance\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n" + + "\x04meta\x18\x02 \x01(\v2\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n" + + "\x04fqdn\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04fqdn\x12#\n" + + "\x06tenant\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n" + + "\fproject_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vprojectUuid\x12!\n" + + "\aos_uuid\x18\x06 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n" + + "\rlocation_uuid\x18\a \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\flocationUuid\x12+\n" + + "\fcontact_uuid\x18\b \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\x12\x10\n" + + "\x03cpu\x18\t \x01(\rR\x03cpu\x12\x10\n" + + "\x03ram\x18\n" + + " \x01(\rR\x03ram\x12\x16\n" + + "\x06backup\x18\v \x01(\bR\x06backup\x12\x16\n" + + "\x06status\x18\f \x01(\tR\x06status\x12\x1f\n" + + "\vstatus_info\x18\r \x01(\tR\n" + + "statusInfo\x12J\n" + + "\favailability\x18\x0e \x01(\x0e2\x1c.fits.api.vm.v1.AvailabilityB\b\xbaH\x05\x82\x01\x02\x10\x01R\favailability\x12J\n" + + "\fserviceclass\x18\x0f \x01(\x0e2\x1c.fits.api.vm.v1.ServiceClassB\b\xbaH\x05\x82\x01\x02\x10\x01R\fserviceclass\x12I\n" + + "\x0fwindows_details\x18\x10 \x01(\v2\x1e.fits.api.vm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12C\n" + + "\rlinux_details\x18\x11 \x01(\v2\x1c.fits.api.vm.v1.LinuxDetailsH\x00R\flinuxDetails\x12@\n" + + "\n" + + "interfaces\x18\x12 \x03(\v2 .fits.api.vm.v1.NetworkInterfaceR\n" + + "interfaces\x12(\n" + + "\x04vlan\x18\x13 \x01(\v2\x14.fits.api.vm.v1.VlanR\x04vlan\x12!\n" + + "\forder_number\x18\x14 \x01(\tR\vorderNumber\x12\x1a\n" + + "\bcontract\x18\x15 \x01(\bR\bcontractB\x10\n" + + "\adetails\x12\x05\xbaH\x02\b\x01\"f\n" + + "\x13VMServiceGetRequest\x12!\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12#\n" + + "\x06tenant\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\a\n" + + "\x05_uuid\"B\n" + "\x14VMServiceGetResponse\x12*\n" + - "\x02vm\x18\x01 \x01(\v2\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"{\n" + + "\x02vm\x18\x01 \x01(\v2\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"\x87\x01\n" + "\x1dVMServiceCreateWindowsRequest\x12)\n" + "\vdomain_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\n" + - "domainUuid\x12/\n" + - "\x04disk\x18\x02 \x01(\v2\x1b.fits.api.vm.v1.WindowsDiskR\x04disk\"s\n" + + "domainUuid\x12;\n" + + "\x05disks\x18\x02 \x03(\v2\x1b.fits.api.vm.v1.WindowsDiskB\b\xbaH\x05\x92\x01\x02\b\x01R\x05disks\"\x7f\n" + "\x1bVMServiceCreateLinuxRequest\x12%\n" + - "\tldap_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bldapUuid\x12-\n" + - "\x04disk\x18\x02 \x01(\v2\x19.fits.api.vm.v1.LinuxDiskR\x04disk\"\x8f\x05\n" + + "\tldap_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bldapUuid\x129\n" + + "\x05disks\x18\x02 \x03(\v2\x19.fits.api.vm.v1.LinuxDiskB\b\xbaH\x05\x92\x01\x02\b\x01R\x05disks\"\xdf\x05\n" + "\x16VMServiceCreateRequest\x12+\n" + "\fproject_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vprojectUuid\x12$\n" + "\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n" + @@ -1434,48 +2870,130 @@ const file_fits_api_vm_v1_vm_proto_rawDesc = "" + "\forder_number\x18\t \x01(\tR\vorderNumber\x12+\n" + "\x06labels\x18\n" + " \x01(\v2\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n" + - "\x06backup\x18\v \x01(\bR\x06backup\x12\"\n" + - "\favailability\x18\f \x01(\tR\favailability\x12\"\n" + - "\fserviceclass\x18\r \x01(\tR\fserviceclass\x12I\n" + + "\x06backup\x18\v \x01(\bR\x06backup\x12J\n" + + "\favailability\x18\f \x01(\x0e2\x1c.fits.api.vm.v1.AvailabilityB\b\xbaH\x05\x82\x01\x02\x10\x01R\favailability\x12J\n" + + "\fserviceclass\x18\r \x01(\x0e2\x1c.fits.api.vm.v1.ServiceClassB\b\xbaH\x05\x82\x01\x02\x10\x01R\fserviceclass\x12I\n" + "\awindows\x18\x0e \x01(\v2-.fits.api.vm.v1.VMServiceCreateWindowsRequestH\x00R\awindows\x12C\n" + "\x05linux\x18\x0f \x01(\v2+.fits.api.vm.v1.VMServiceCreateLinuxRequestH\x00R\x05linuxB\x0f\n" + "\x06vmtype\x12\x05\xbaH\x02\b\x01B\a\n" + - "\x05_name\"\xaa\x01\n" + - "\tLinuxDisk\x12\x1f\n" + - "\vauto_extend\x18\x01 \x01(\bR\n" + - "autoExtend\x12!\n" + - "\n" + - "size_in_gb\x18\x02 \x01(\x04H\x00R\bsizeInGb\x88\x01\x01\x12\x14\n" + - "\x05label\x18\x04 \x01(\tR\x05label\x12$\n" + - "\vmount_point\x18\x05 \x01(\tH\x01R\n" + - "mountPoint\x88\x01\x01B\r\n" + - "\v_size_in_gbB\x0e\n" + - "\f_mount_point\"\xad\x01\n" + - "\vWindowsDisk\x12\x1f\n" + - "\vauto_extend\x18\x01 \x01(\bR\n" + - "autoExtend\x12!\n" + - "\n" + - "size_in_gb\x18\x02 \x01(\x04H\x00R\bsizeInGb\x88\x01\x01\x12%\n" + - "\vdriveletter\x18\x03 \x01(\tH\x01R\vdriveletter\x88\x01\x01\x12\x14\n" + - "\x05label\x18\x04 \x01(\tR\x05labelB\r\n" + - "\v_size_in_gbB\x0e\n" + + "\x05_name\"\xc6\x01\n" + + "\tLinuxDisk\x12!\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n" + + "\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n" + + "\vauto_extend\x18\x03 \x01(\bR\n" + + "autoExtend\x12\x17\n" + + "\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12$\n" + + "\vmount_point\x18\x05 \x01(\tH\x02R\n" + + "mountPoint\x88\x01\x01B\a\n" + + "\x05_uuidB\a\n" + + "\x05_sizeB\x0e\n" + + "\f_mount_point\"\xc9\x01\n" + + "\vWindowsDisk\x12!\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n" + + "\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n" + + "\vauto_extend\x18\x03 \x01(\bR\n" + + "autoExtend\x12\x17\n" + + "\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12%\n" + + "\vdriveletter\x18\x05 \x01(\tH\x02R\vdriveletter\x88\x01\x01B\a\n" + + "\x05_uuidB\a\n" + + "\x05_sizeB\x0e\n" + "\f_driveletter\"\x19\n" + - "\x17VMServiceCreateResponse\"\x87\x01\n" + - "\x16VMServiceUpdateRequest\x12+\n" + - "\fproject_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vprojectUuid\x12@\n" + - "\vupdate_meta\x18\x02 \x01(\v2\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\n" + - "updateMeta\"\x19\n" + - "\x17VMServiceUpdateResponse\"\x81\x01\n" + - "\x14VMServiceListRequest\x12\x1b\n" + - "\x06tenant\x18\x01 \x01(\tH\x00R\x06tenant\x88\x01\x01\x120\n" + - "\fproject_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x01R\vprojectUuid\x88\x01\x01B\t\n" + - "\a_tenantB\x0f\n" + - "\r_project_uuid\"E\n" + + "\x17VMServiceCreateResponse\"\xad\x03\n" + + "\x16VMServiceUpdateRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + + "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + + "\forder_number\x18\x03 \x01(\tR\vorderNumber\x12@\n" + + "\vupdate_meta\x18\x04 \x01(\v2\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\n" + + "updateMeta\x12U\n" + + "\x11performance_class\x18\x05 \x01(\v2&.fits.api.vm.v1.PerformanceClassChangeH\x00R\x10performanceClass\x12I\n" + + "\rservice_class\x18\x06 \x01(\v2\".fits.api.vm.v1.ServiceClassChangeH\x00R\fserviceClass\x129\n" + + "\acontact\x18\a \x01(\v2\x1d.fits.api.vm.v1.ContactChangeH\x00R\acontactB\x0f\n" + + "\x06action\x12\x05\xbaH\x02\b\x01\"P\n" + + "\x16PerformanceClassChange\x12\x1b\n" + + "\x03cpu\x18\x01 \x01(\rB\t\xbaH\x06*\x04\x18@(\x01R\x03cpu\x12\x19\n" + + "\x03ram\x18\x02 \x01(\rB\a\xbaH\x04*\x02 \x00R\x03ram\"`\n" + + "\x12ServiceClassChange\x12J\n" + + "\fserviceclass\x18\x01 \x01(\x0e2\x1c.fits.api.vm.v1.ServiceClassB\b\xbaH\x05\x82\x01\x02\x10\x01R\fserviceclass\"<\n" + + "\rContactChange\x12+\n" + + "\fcontact_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\"\x19\n" + + "\x17VMServiceUpdateResponse\"K\n" + + "\x14VMServiceListRequest\x12(\n" + + "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01B\t\n" + + "\a_tenant\"E\n" + "\x15VMServiceListResponse\x12,\n" + - "\x03vms\x18\x01 \x03(\v2\x1a.fits.api.vm.v1.VMInstanceR\x03vms\"<\n" + + "\x03vms\x18\x01 \x03(\v2\x1a.fits.api.vm.v1.VMInstanceR\x03vms\"}\n" + "\x16VMServiceDeleteRequest\x12\"\n" + - "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"\x19\n" + - "\x17VMServiceDeleteResponse2\x81\x04\n" + + "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12\x1c\n" + + "\x04uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n" + + "\forder_number\x18\x03 \x01(\tR\vorderNumber\"\x19\n" + + "\x17VMServiceDeleteResponse\"h\n" + + "\x1eVMServiceValidateCreateRequest\x12F\n" + + "\x06create\x18\x01 \x01(\v2&.fits.api.vm.v1.VMServiceCreateRequestB\x06\xbaH\x03\xc8\x01\x01R\x06create\"!\n" + + "\x1fVMServiceValidateCreateResponse\"m\n" + + "\x1fVMServiceValidateAddDiskRequest\x12J\n" + + "\badd_disk\x18\x01 \x01(\v2'.fits.api.vm.v1.VMServiceAddDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\aaddDisk\"\"\n" + + " VMServiceValidateAddDiskResponse\"y\n" + + "\"VMServiceValidateUpdateDiskRequest\x12S\n" + + "\vupdate_disk\x18\x01 \x01(\v2*.fits.api.vm.v1.VMServiceUpdateDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\n" + + "updateDisk\"%\n" + + "#VMServiceValidateUpdateDiskResponse\"\x1a\n" + + "\x18VMServiceAddDiskResponse\"\x1d\n" + + "\x1bVMServiceUpdateDiskResponse\"\x1d\n" + + "\x1bVMServiceDeleteDiskResponse\"\xf9\x01\n" + + "\x17VMServiceAddDiskRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + + "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + + "\forder_number\x18\x03 \x01(\tR\vorderNumber\x121\n" + + "\x05linux\x18\x04 \x01(\v2\x19.fits.api.vm.v1.LinuxDiskH\x00R\x05linux\x127\n" + + "\awindows\x18\x05 \x01(\v2\x1b.fits.api.vm.v1.WindowsDiskH\x00R\awindowsB\r\n" + + "\x04disk\x12\x05\xbaH\x02\b\x01\"\x80\x02\n" + + "\x1aVMServiceUpdateDiskRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n" + + "\tdisk_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bdiskUuid\x12\"\n" + + "\aproject\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + + "\forder_number\x18\x04 \x01(\tR\vorderNumber\x12$\n" + + "\vauto_extend\x18\x05 \x01(\bH\x00R\n" + + "autoExtend\x88\x01\x01\x12\x17\n" + + "\x04size\x18\x06 \x01(\x04H\x01R\x04size\x88\x01\x01B\x0e\n" + + "\f_auto_extendB\a\n" + + "\x05_size\"\xa8\x01\n" + + "\x1aVMServiceDeleteDiskRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n" + + "\tdisk_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bdiskUuid\x12\"\n" + + "\aproject\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + + "\forder_number\x18\x04 \x01(\tR\vorderNumber\"\x18\n" + + "\x16VMServiceAddIPResponse\"\x19\n" + + "\x17VMServiceMoveIPResponse\"\x1b\n" + + "\x19VMServiceDeleteIPResponse\"|\n" + + "\x15VMServiceAddIPRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + + "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + + "\forder_number\x18\x03 \x01(\tR\vorderNumber\"\xde\x01\n" + + "\x16VMServiceMoveIPRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n" + + "\x0einterface_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n" + + "\aproject\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + + "\forder_number\x18\x04 \x01(\tR\vorderNumber\x12.\n" + + "\x0etarget_vm_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\ftargetVmUuid\"\xb0\x01\n" + + "\x18VMServiceDeleteIPRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n" + + "\x0einterface_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n" + + "\aproject\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + + "\forder_number\x18\x04 \x01(\tR\vorderNumber\"e\n" + + "\x1dVMServiceValidateAddIPRequest\x12D\n" + + "\x06add_ip\x18\x01 \x01(\v2%.fits.api.vm.v1.VMServiceAddIPRequestB\x06\xbaH\x03\xc8\x01\x01R\x05addIp\" \n" + + "\x1eVMServiceValidateAddIPResponse*\xa6\x01\n" + + "\fAvailability\x12\"\n" + + "\x18AVAILABILITY_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1b\n" + + "\x0fAVAILABILITY_V0\x10\x01\x1a\x06\x82\xb2\x19\x02V0\x12\x1b\n" + + "\x0fAVAILABILITY_V1\x10\x02\x1a\x06\x82\xb2\x19\x02V1\x12\x1b\n" + + "\x0fAVAILABILITY_V2\x10\x03\x1a\x06\x82\xb2\x19\x02V2\x12\x1b\n" + + "\x0fAVAILABILITY_V3\x10\x04\x1a\x06\x82\xb2\x19\x02V3*\x93\x01\n" + + "\fServiceClass\x12#\n" + + "\x19SERVICE_CLASS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1e\n" + + "\x11SERVICE_CLASS_SZ1\x10\x01\x1a\a\x82\xb2\x19\x03SZ1\x12\x1e\n" + + "\x11SERVICE_CLASS_SZ2\x10\x02\x1a\a\x82\xb2\x19\x03SZ2\x12\x1e\n" + + "\x11SERVICE_CLASS_SZ3\x10\x03\x1a\a\x82\xb2\x19\x03SZ32\x93\r\n" + "\tVMService\x12]\n" + "\x03Get\x12#.fits.api.vm.v1.VMServiceGetRequest\x1a$.fits.api.vm.v1.VMServiceGetResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12e\n" + "\x06Create\x12&.fits.api.vm.v1.VMServiceCreateRequest\x1a'.fits.api.vm.v1.VMServiceCreateResponse\"\n" + @@ -1484,7 +3002,29 @@ const file_fits_api_vm_v1_vm_proto_rawDesc = "" + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12`\n" + "\x04List\x12$.fits.api.vm.v1.VMServiceListRequest\x1a%.fits.api.vm.v1.VMServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12e\n" + "\x06Delete\x12&.fits.api.vm.v1.VMServiceDeleteRequest\x1a'.fits.api.vm.v1.VMServiceDeleteResponse\"\n" + - "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01B\xa5\x01\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12h\n" + + "\aAddDisk\x12'.fits.api.vm.v1.VMServiceAddDiskRequest\x1a(.fits.api.vm.v1.VMServiceAddDiskResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12q\n" + + "\n" + + "UpdateDisk\x12*.fits.api.vm.v1.VMServiceUpdateDiskRequest\x1a+.fits.api.vm.v1.VMServiceUpdateDiskResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12q\n" + + "\n" + + "DeleteDisk\x12*.fits.api.vm.v1.VMServiceDeleteDiskRequest\x1a+.fits.api.vm.v1.VMServiceDeleteDiskResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12b\n" + + "\x05AddIP\x12%.fits.api.vm.v1.VMServiceAddIPRequest\x1a&.fits.api.vm.v1.VMServiceAddIPResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12e\n" + + "\x06MoveIP\x12&.fits.api.vm.v1.VMServiceMoveIPRequest\x1a'.fits.api.vm.v1.VMServiceMoveIPResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12k\n" + + "\bDeleteIP\x12(.fits.api.vm.v1.VMServiceDeleteIPRequest\x1a).fits.api.vm.v1.VMServiceDeleteIPResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12}\n" + + "\x0eValidateCreate\x12..fits.api.vm.v1.VMServiceValidateCreateRequest\x1a/.fits.api.vm.v1.VMServiceValidateCreateResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x80\x01\n" + + "\x0fValidateAddDisk\x12/.fits.api.vm.v1.VMServiceValidateAddDiskRequest\x1a0.fits.api.vm.v1.VMServiceValidateAddDiskResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x89\x01\n" + + "\x12ValidateUpdateDisk\x122.fits.api.vm.v1.VMServiceValidateUpdateDiskRequest\x1a3.fits.api.vm.v1.VMServiceValidateUpdateDiskResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12z\n" + + "\rValidateAddIP\x12-.fits.api.vm.v1.VMServiceValidateAddIPRequest\x1a..fits.api.vm.v1.VMServiceValidateAddIPResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02B\xa5\x01\n" + "\x12com.fits.api.vm.v1B\aVmProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" var ( @@ -1499,62 +3039,122 @@ func file_fits_api_vm_v1_vm_proto_rawDescGZIP() []byte { return file_fits_api_vm_v1_vm_proto_rawDescData } -var file_fits_api_vm_v1_vm_proto_msgTypes = make([]protoimpl.MessageInfo, 18) +var file_fits_api_vm_v1_vm_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_fits_api_vm_v1_vm_proto_msgTypes = make([]protoimpl.MessageInfo, 41) var file_fits_api_vm_v1_vm_proto_goTypes = []any{ - (*VMInstance)(nil), // 0: fits.api.vm.v1.VMInstance - (*LinuxDetails)(nil), // 1: fits.api.vm.v1.LinuxDetails - (*WindowsDetails)(nil), // 2: fits.api.vm.v1.WindowsDetails - (*NetworkInterface)(nil), // 3: fits.api.vm.v1.NetworkInterface - (*VMServiceGetRequest)(nil), // 4: fits.api.vm.v1.VMServiceGetRequest - (*VMServiceGetResponse)(nil), // 5: fits.api.vm.v1.VMServiceGetResponse - (*VMServiceCreateWindowsRequest)(nil), // 6: fits.api.vm.v1.VMServiceCreateWindowsRequest - (*VMServiceCreateLinuxRequest)(nil), // 7: fits.api.vm.v1.VMServiceCreateLinuxRequest - (*VMServiceCreateRequest)(nil), // 8: fits.api.vm.v1.VMServiceCreateRequest - (*LinuxDisk)(nil), // 9: fits.api.vm.v1.LinuxDisk - (*WindowsDisk)(nil), // 10: fits.api.vm.v1.WindowsDisk - (*VMServiceCreateResponse)(nil), // 11: fits.api.vm.v1.VMServiceCreateResponse - (*VMServiceUpdateRequest)(nil), // 12: fits.api.vm.v1.VMServiceUpdateRequest - (*VMServiceUpdateResponse)(nil), // 13: fits.api.vm.v1.VMServiceUpdateResponse - (*VMServiceListRequest)(nil), // 14: fits.api.vm.v1.VMServiceListRequest - (*VMServiceListResponse)(nil), // 15: fits.api.vm.v1.VMServiceListResponse - (*VMServiceDeleteRequest)(nil), // 16: fits.api.vm.v1.VMServiceDeleteRequest - (*VMServiceDeleteResponse)(nil), // 17: fits.api.vm.v1.VMServiceDeleteResponse - (*v1.Meta)(nil), // 18: fits.api.v1.Meta - (*Vlan)(nil), // 19: fits.api.vm.v1.Vlan - (*v1.Labels)(nil), // 20: fits.api.v1.Labels - (*v1.UpdateMeta)(nil), // 21: fits.api.v1.UpdateMeta + (Availability)(0), // 0: fits.api.vm.v1.Availability + (ServiceClass)(0), // 1: fits.api.vm.v1.ServiceClass + (*LinuxDetails)(nil), // 2: fits.api.vm.v1.LinuxDetails + (*WindowsDetails)(nil), // 3: fits.api.vm.v1.WindowsDetails + (*NetworkInterface)(nil), // 4: fits.api.vm.v1.NetworkInterface + (*VMInstance)(nil), // 5: fits.api.vm.v1.VMInstance + (*VMServiceGetRequest)(nil), // 6: fits.api.vm.v1.VMServiceGetRequest + (*VMServiceGetResponse)(nil), // 7: fits.api.vm.v1.VMServiceGetResponse + (*VMServiceCreateWindowsRequest)(nil), // 8: fits.api.vm.v1.VMServiceCreateWindowsRequest + (*VMServiceCreateLinuxRequest)(nil), // 9: fits.api.vm.v1.VMServiceCreateLinuxRequest + (*VMServiceCreateRequest)(nil), // 10: fits.api.vm.v1.VMServiceCreateRequest + (*LinuxDisk)(nil), // 11: fits.api.vm.v1.LinuxDisk + (*WindowsDisk)(nil), // 12: fits.api.vm.v1.WindowsDisk + (*VMServiceCreateResponse)(nil), // 13: fits.api.vm.v1.VMServiceCreateResponse + (*VMServiceUpdateRequest)(nil), // 14: fits.api.vm.v1.VMServiceUpdateRequest + (*PerformanceClassChange)(nil), // 15: fits.api.vm.v1.PerformanceClassChange + (*ServiceClassChange)(nil), // 16: fits.api.vm.v1.ServiceClassChange + (*ContactChange)(nil), // 17: fits.api.vm.v1.ContactChange + (*VMServiceUpdateResponse)(nil), // 18: fits.api.vm.v1.VMServiceUpdateResponse + (*VMServiceListRequest)(nil), // 19: fits.api.vm.v1.VMServiceListRequest + (*VMServiceListResponse)(nil), // 20: fits.api.vm.v1.VMServiceListResponse + (*VMServiceDeleteRequest)(nil), // 21: fits.api.vm.v1.VMServiceDeleteRequest + (*VMServiceDeleteResponse)(nil), // 22: fits.api.vm.v1.VMServiceDeleteResponse + (*VMServiceValidateCreateRequest)(nil), // 23: fits.api.vm.v1.VMServiceValidateCreateRequest + (*VMServiceValidateCreateResponse)(nil), // 24: fits.api.vm.v1.VMServiceValidateCreateResponse + (*VMServiceValidateAddDiskRequest)(nil), // 25: fits.api.vm.v1.VMServiceValidateAddDiskRequest + (*VMServiceValidateAddDiskResponse)(nil), // 26: fits.api.vm.v1.VMServiceValidateAddDiskResponse + (*VMServiceValidateUpdateDiskRequest)(nil), // 27: fits.api.vm.v1.VMServiceValidateUpdateDiskRequest + (*VMServiceValidateUpdateDiskResponse)(nil), // 28: fits.api.vm.v1.VMServiceValidateUpdateDiskResponse + (*VMServiceAddDiskResponse)(nil), // 29: fits.api.vm.v1.VMServiceAddDiskResponse + (*VMServiceUpdateDiskResponse)(nil), // 30: fits.api.vm.v1.VMServiceUpdateDiskResponse + (*VMServiceDeleteDiskResponse)(nil), // 31: fits.api.vm.v1.VMServiceDeleteDiskResponse + (*VMServiceAddDiskRequest)(nil), // 32: fits.api.vm.v1.VMServiceAddDiskRequest + (*VMServiceUpdateDiskRequest)(nil), // 33: fits.api.vm.v1.VMServiceUpdateDiskRequest + (*VMServiceDeleteDiskRequest)(nil), // 34: fits.api.vm.v1.VMServiceDeleteDiskRequest + (*VMServiceAddIPResponse)(nil), // 35: fits.api.vm.v1.VMServiceAddIPResponse + (*VMServiceMoveIPResponse)(nil), // 36: fits.api.vm.v1.VMServiceMoveIPResponse + (*VMServiceDeleteIPResponse)(nil), // 37: fits.api.vm.v1.VMServiceDeleteIPResponse + (*VMServiceAddIPRequest)(nil), // 38: fits.api.vm.v1.VMServiceAddIPRequest + (*VMServiceMoveIPRequest)(nil), // 39: fits.api.vm.v1.VMServiceMoveIPRequest + (*VMServiceDeleteIPRequest)(nil), // 40: fits.api.vm.v1.VMServiceDeleteIPRequest + (*VMServiceValidateAddIPRequest)(nil), // 41: fits.api.vm.v1.VMServiceValidateAddIPRequest + (*VMServiceValidateAddIPResponse)(nil), // 42: fits.api.vm.v1.VMServiceValidateAddIPResponse + (*v1.Meta)(nil), // 43: fits.api.v1.Meta + (*Vlan)(nil), // 44: fits.api.vm.v1.Vlan + (*v1.Labels)(nil), // 45: fits.api.v1.Labels + (*v1.UpdateMeta)(nil), // 46: fits.api.v1.UpdateMeta } var file_fits_api_vm_v1_vm_proto_depIdxs = []int32{ - 18, // 0: fits.api.vm.v1.VMInstance.meta:type_name -> fits.api.v1.Meta - 2, // 1: fits.api.vm.v1.VMInstance.windows_details:type_name -> fits.api.vm.v1.WindowsDetails - 1, // 2: fits.api.vm.v1.VMInstance.linux_details:type_name -> fits.api.vm.v1.LinuxDetails - 3, // 3: fits.api.vm.v1.VMInstance.interfaces:type_name -> fits.api.vm.v1.NetworkInterface - 19, // 4: fits.api.vm.v1.VMInstance.vlan:type_name -> fits.api.vm.v1.Vlan - 9, // 5: fits.api.vm.v1.LinuxDetails.disks:type_name -> fits.api.vm.v1.LinuxDisk - 10, // 6: fits.api.vm.v1.WindowsDetails.disks:type_name -> fits.api.vm.v1.WindowsDisk - 0, // 7: fits.api.vm.v1.VMServiceGetResponse.vm:type_name -> fits.api.vm.v1.VMInstance - 10, // 8: fits.api.vm.v1.VMServiceCreateWindowsRequest.disk:type_name -> fits.api.vm.v1.WindowsDisk - 9, // 9: fits.api.vm.v1.VMServiceCreateLinuxRequest.disk:type_name -> fits.api.vm.v1.LinuxDisk - 20, // 10: fits.api.vm.v1.VMServiceCreateRequest.labels:type_name -> fits.api.v1.Labels - 6, // 11: fits.api.vm.v1.VMServiceCreateRequest.windows:type_name -> fits.api.vm.v1.VMServiceCreateWindowsRequest - 7, // 12: fits.api.vm.v1.VMServiceCreateRequest.linux:type_name -> fits.api.vm.v1.VMServiceCreateLinuxRequest - 21, // 13: fits.api.vm.v1.VMServiceUpdateRequest.update_meta:type_name -> fits.api.v1.UpdateMeta - 0, // 14: fits.api.vm.v1.VMServiceListResponse.vms:type_name -> fits.api.vm.v1.VMInstance - 4, // 15: fits.api.vm.v1.VMService.Get:input_type -> fits.api.vm.v1.VMServiceGetRequest - 8, // 16: fits.api.vm.v1.VMService.Create:input_type -> fits.api.vm.v1.VMServiceCreateRequest - 12, // 17: fits.api.vm.v1.VMService.Update:input_type -> fits.api.vm.v1.VMServiceUpdateRequest - 14, // 18: fits.api.vm.v1.VMService.List:input_type -> fits.api.vm.v1.VMServiceListRequest - 16, // 19: fits.api.vm.v1.VMService.Delete:input_type -> fits.api.vm.v1.VMServiceDeleteRequest - 5, // 20: fits.api.vm.v1.VMService.Get:output_type -> fits.api.vm.v1.VMServiceGetResponse - 11, // 21: fits.api.vm.v1.VMService.Create:output_type -> fits.api.vm.v1.VMServiceCreateResponse - 13, // 22: fits.api.vm.v1.VMService.Update:output_type -> fits.api.vm.v1.VMServiceUpdateResponse - 15, // 23: fits.api.vm.v1.VMService.List:output_type -> fits.api.vm.v1.VMServiceListResponse - 17, // 24: fits.api.vm.v1.VMService.Delete:output_type -> fits.api.vm.v1.VMServiceDeleteResponse - 20, // [20:25] is the sub-list for method output_type - 15, // [15:20] is the sub-list for method input_type - 15, // [15:15] is the sub-list for extension type_name - 15, // [15:15] is the sub-list for extension extendee - 0, // [0:15] is the sub-list for field type_name + 11, // 0: fits.api.vm.v1.LinuxDetails.disks:type_name -> fits.api.vm.v1.LinuxDisk + 12, // 1: fits.api.vm.v1.WindowsDetails.disks:type_name -> fits.api.vm.v1.WindowsDisk + 43, // 2: fits.api.vm.v1.VMInstance.meta:type_name -> fits.api.v1.Meta + 0, // 3: fits.api.vm.v1.VMInstance.availability:type_name -> fits.api.vm.v1.Availability + 1, // 4: fits.api.vm.v1.VMInstance.serviceclass:type_name -> fits.api.vm.v1.ServiceClass + 3, // 5: fits.api.vm.v1.VMInstance.windows_details:type_name -> fits.api.vm.v1.WindowsDetails + 2, // 6: fits.api.vm.v1.VMInstance.linux_details:type_name -> fits.api.vm.v1.LinuxDetails + 4, // 7: fits.api.vm.v1.VMInstance.interfaces:type_name -> fits.api.vm.v1.NetworkInterface + 44, // 8: fits.api.vm.v1.VMInstance.vlan:type_name -> fits.api.vm.v1.Vlan + 5, // 9: fits.api.vm.v1.VMServiceGetResponse.vm:type_name -> fits.api.vm.v1.VMInstance + 12, // 10: fits.api.vm.v1.VMServiceCreateWindowsRequest.disks:type_name -> fits.api.vm.v1.WindowsDisk + 11, // 11: fits.api.vm.v1.VMServiceCreateLinuxRequest.disks:type_name -> fits.api.vm.v1.LinuxDisk + 45, // 12: fits.api.vm.v1.VMServiceCreateRequest.labels:type_name -> fits.api.v1.Labels + 0, // 13: fits.api.vm.v1.VMServiceCreateRequest.availability:type_name -> fits.api.vm.v1.Availability + 1, // 14: fits.api.vm.v1.VMServiceCreateRequest.serviceclass:type_name -> fits.api.vm.v1.ServiceClass + 8, // 15: fits.api.vm.v1.VMServiceCreateRequest.windows:type_name -> fits.api.vm.v1.VMServiceCreateWindowsRequest + 9, // 16: fits.api.vm.v1.VMServiceCreateRequest.linux:type_name -> fits.api.vm.v1.VMServiceCreateLinuxRequest + 46, // 17: fits.api.vm.v1.VMServiceUpdateRequest.update_meta:type_name -> fits.api.v1.UpdateMeta + 15, // 18: fits.api.vm.v1.VMServiceUpdateRequest.performance_class:type_name -> fits.api.vm.v1.PerformanceClassChange + 16, // 19: fits.api.vm.v1.VMServiceUpdateRequest.service_class:type_name -> fits.api.vm.v1.ServiceClassChange + 17, // 20: fits.api.vm.v1.VMServiceUpdateRequest.contact:type_name -> fits.api.vm.v1.ContactChange + 1, // 21: fits.api.vm.v1.ServiceClassChange.serviceclass:type_name -> fits.api.vm.v1.ServiceClass + 5, // 22: fits.api.vm.v1.VMServiceListResponse.vms:type_name -> fits.api.vm.v1.VMInstance + 10, // 23: fits.api.vm.v1.VMServiceValidateCreateRequest.create:type_name -> fits.api.vm.v1.VMServiceCreateRequest + 32, // 24: fits.api.vm.v1.VMServiceValidateAddDiskRequest.add_disk:type_name -> fits.api.vm.v1.VMServiceAddDiskRequest + 33, // 25: fits.api.vm.v1.VMServiceValidateUpdateDiskRequest.update_disk:type_name -> fits.api.vm.v1.VMServiceUpdateDiskRequest + 11, // 26: fits.api.vm.v1.VMServiceAddDiskRequest.linux:type_name -> fits.api.vm.v1.LinuxDisk + 12, // 27: fits.api.vm.v1.VMServiceAddDiskRequest.windows:type_name -> fits.api.vm.v1.WindowsDisk + 38, // 28: fits.api.vm.v1.VMServiceValidateAddIPRequest.add_ip:type_name -> fits.api.vm.v1.VMServiceAddIPRequest + 6, // 29: fits.api.vm.v1.VMService.Get:input_type -> fits.api.vm.v1.VMServiceGetRequest + 10, // 30: fits.api.vm.v1.VMService.Create:input_type -> fits.api.vm.v1.VMServiceCreateRequest + 14, // 31: fits.api.vm.v1.VMService.Update:input_type -> fits.api.vm.v1.VMServiceUpdateRequest + 19, // 32: fits.api.vm.v1.VMService.List:input_type -> fits.api.vm.v1.VMServiceListRequest + 21, // 33: fits.api.vm.v1.VMService.Delete:input_type -> fits.api.vm.v1.VMServiceDeleteRequest + 32, // 34: fits.api.vm.v1.VMService.AddDisk:input_type -> fits.api.vm.v1.VMServiceAddDiskRequest + 33, // 35: fits.api.vm.v1.VMService.UpdateDisk:input_type -> fits.api.vm.v1.VMServiceUpdateDiskRequest + 34, // 36: fits.api.vm.v1.VMService.DeleteDisk:input_type -> fits.api.vm.v1.VMServiceDeleteDiskRequest + 38, // 37: fits.api.vm.v1.VMService.AddIP:input_type -> fits.api.vm.v1.VMServiceAddIPRequest + 39, // 38: fits.api.vm.v1.VMService.MoveIP:input_type -> fits.api.vm.v1.VMServiceMoveIPRequest + 40, // 39: fits.api.vm.v1.VMService.DeleteIP:input_type -> fits.api.vm.v1.VMServiceDeleteIPRequest + 23, // 40: fits.api.vm.v1.VMService.ValidateCreate:input_type -> fits.api.vm.v1.VMServiceValidateCreateRequest + 25, // 41: fits.api.vm.v1.VMService.ValidateAddDisk:input_type -> fits.api.vm.v1.VMServiceValidateAddDiskRequest + 27, // 42: fits.api.vm.v1.VMService.ValidateUpdateDisk:input_type -> fits.api.vm.v1.VMServiceValidateUpdateDiskRequest + 41, // 43: fits.api.vm.v1.VMService.ValidateAddIP:input_type -> fits.api.vm.v1.VMServiceValidateAddIPRequest + 7, // 44: fits.api.vm.v1.VMService.Get:output_type -> fits.api.vm.v1.VMServiceGetResponse + 13, // 45: fits.api.vm.v1.VMService.Create:output_type -> fits.api.vm.v1.VMServiceCreateResponse + 18, // 46: fits.api.vm.v1.VMService.Update:output_type -> fits.api.vm.v1.VMServiceUpdateResponse + 20, // 47: fits.api.vm.v1.VMService.List:output_type -> fits.api.vm.v1.VMServiceListResponse + 22, // 48: fits.api.vm.v1.VMService.Delete:output_type -> fits.api.vm.v1.VMServiceDeleteResponse + 29, // 49: fits.api.vm.v1.VMService.AddDisk:output_type -> fits.api.vm.v1.VMServiceAddDiskResponse + 30, // 50: fits.api.vm.v1.VMService.UpdateDisk:output_type -> fits.api.vm.v1.VMServiceUpdateDiskResponse + 31, // 51: fits.api.vm.v1.VMService.DeleteDisk:output_type -> fits.api.vm.v1.VMServiceDeleteDiskResponse + 35, // 52: fits.api.vm.v1.VMService.AddIP:output_type -> fits.api.vm.v1.VMServiceAddIPResponse + 36, // 53: fits.api.vm.v1.VMService.MoveIP:output_type -> fits.api.vm.v1.VMServiceMoveIPResponse + 37, // 54: fits.api.vm.v1.VMService.DeleteIP:output_type -> fits.api.vm.v1.VMServiceDeleteIPResponse + 24, // 55: fits.api.vm.v1.VMService.ValidateCreate:output_type -> fits.api.vm.v1.VMServiceValidateCreateResponse + 26, // 56: fits.api.vm.v1.VMService.ValidateAddDisk:output_type -> fits.api.vm.v1.VMServiceValidateAddDiskResponse + 28, // 57: fits.api.vm.v1.VMService.ValidateUpdateDisk:output_type -> fits.api.vm.v1.VMServiceValidateUpdateDiskResponse + 42, // 58: fits.api.vm.v1.VMService.ValidateAddIP:output_type -> fits.api.vm.v1.VMServiceValidateAddIPResponse + 44, // [44:59] is the sub-list for method output_type + 29, // [29:44] is the sub-list for method input_type + 29, // [29:29] is the sub-list for extension type_name + 29, // [29:29] is the sub-list for extension extendee + 0, // [0:29] is the sub-list for field type_name } func init() { file_fits_api_vm_v1_vm_proto_init() } @@ -1563,29 +3163,41 @@ func file_fits_api_vm_v1_vm_proto_init() { return } file_fits_api_vm_v1_vlan_proto_init() - file_fits_api_vm_v1_vm_proto_msgTypes[0].OneofWrappers = []any{ + file_fits_api_vm_v1_vm_proto_msgTypes[3].OneofWrappers = []any{ (*VMInstance_WindowsDetails)(nil), (*VMInstance_LinuxDetails)(nil), } + file_fits_api_vm_v1_vm_proto_msgTypes[4].OneofWrappers = []any{} file_fits_api_vm_v1_vm_proto_msgTypes[8].OneofWrappers = []any{ (*VMServiceCreateRequest_Windows)(nil), (*VMServiceCreateRequest_Linux)(nil), } file_fits_api_vm_v1_vm_proto_msgTypes[9].OneofWrappers = []any{} file_fits_api_vm_v1_vm_proto_msgTypes[10].OneofWrappers = []any{} - file_fits_api_vm_v1_vm_proto_msgTypes[14].OneofWrappers = []any{} + file_fits_api_vm_v1_vm_proto_msgTypes[12].OneofWrappers = []any{ + (*VMServiceUpdateRequest_PerformanceClass)(nil), + (*VMServiceUpdateRequest_ServiceClass)(nil), + (*VMServiceUpdateRequest_Contact)(nil), + } + file_fits_api_vm_v1_vm_proto_msgTypes[17].OneofWrappers = []any{} + file_fits_api_vm_v1_vm_proto_msgTypes[30].OneofWrappers = []any{ + (*VMServiceAddDiskRequest_Linux)(nil), + (*VMServiceAddDiskRequest_Windows)(nil), + } + file_fits_api_vm_v1_vm_proto_msgTypes[31].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_vm_proto_rawDesc), len(file_fits_api_vm_v1_vm_proto_rawDesc)), - NumEnums: 0, - NumMessages: 18, + NumEnums: 2, + NumMessages: 41, NumExtensions: 0, NumServices: 1, }, GoTypes: file_fits_api_vm_v1_vm_proto_goTypes, DependencyIndexes: file_fits_api_vm_v1_vm_proto_depIdxs, + EnumInfos: file_fits_api_vm_v1_vm_proto_enumTypes, MessageInfos: file_fits_api_vm_v1_vm_proto_msgTypes, }.Build() File_fits_api_vm_v1_vm_proto = out.File diff --git a/go/fits/api/vm/v1/vmv1connect/location.connect.go b/go/fits/api/vm/v1/vmv1connect/location.connect.go index d40ad9f..c1af614 100644 --- a/go/fits/api/vm/v1/vmv1connect/location.connect.go +++ b/go/fits/api/vm/v1/vmv1connect/location.connect.go @@ -39,7 +39,7 @@ const ( // LocationServiceClient is a client for the fits.api.vm.v1.LocationService service. type LocationServiceClient interface { - // Returns a list of all datacenter locations. + // Returns a list of all datacenter locations available for a tenant. List(context.Context, *v1.LocationServiceListRequest) (*v1.LocationServiceListResponse, error) } @@ -79,7 +79,7 @@ func (c *locationServiceClient) List(ctx context.Context, req *v1.LocationServic // LocationServiceHandler is an implementation of the fits.api.vm.v1.LocationService service. type LocationServiceHandler interface { - // Returns a list of all datacenter locations. + // Returns a list of all datacenter locations available for a tenant. List(context.Context, *v1.LocationServiceListRequest) (*v1.LocationServiceListResponse, error) } diff --git a/go/fits/api/vm/v1/vmv1connect/os.connect.go b/go/fits/api/vm/v1/vmv1connect/os.connect.go index 2a64dfc..73a93e5 100644 --- a/go/fits/api/vm/v1/vmv1connect/os.connect.go +++ b/go/fits/api/vm/v1/vmv1connect/os.connect.go @@ -39,7 +39,7 @@ const ( // OSServiceClient is a client for the fits.api.vm.v1.OSService service. type OSServiceClient interface { - // Returns a list of all OSs. + // Returns a list of all operating systems. List(context.Context, *v1.OSServiceListRequest) (*v1.OSServiceListResponse, error) } @@ -79,7 +79,7 @@ func (c *oSServiceClient) List(ctx context.Context, req *v1.OSServiceListRequest // OSServiceHandler is an implementation of the fits.api.vm.v1.OSService service. type OSServiceHandler interface { - // Returns a list of all OSs. + // Returns a list of all operating systems. List(context.Context, *v1.OSServiceListRequest) (*v1.OSServiceListResponse, error) } diff --git a/go/fits/api/vm/v1/vmv1connect/vm.connect.go b/go/fits/api/vm/v1/vmv1connect/vm.connect.go index a9e5c3a..5cfdbc0 100644 --- a/go/fits/api/vm/v1/vmv1connect/vm.connect.go +++ b/go/fits/api/vm/v1/vmv1connect/vm.connect.go @@ -43,6 +43,29 @@ const ( VMServiceListProcedure = "/fits.api.vm.v1.VMService/List" // VMServiceDeleteProcedure is the fully-qualified name of the VMService's Delete RPC. VMServiceDeleteProcedure = "/fits.api.vm.v1.VMService/Delete" + // VMServiceAddDiskProcedure is the fully-qualified name of the VMService's AddDisk RPC. + VMServiceAddDiskProcedure = "/fits.api.vm.v1.VMService/AddDisk" + // VMServiceUpdateDiskProcedure is the fully-qualified name of the VMService's UpdateDisk RPC. + VMServiceUpdateDiskProcedure = "/fits.api.vm.v1.VMService/UpdateDisk" + // VMServiceDeleteDiskProcedure is the fully-qualified name of the VMService's DeleteDisk RPC. + VMServiceDeleteDiskProcedure = "/fits.api.vm.v1.VMService/DeleteDisk" + // VMServiceAddIPProcedure is the fully-qualified name of the VMService's AddIP RPC. + VMServiceAddIPProcedure = "/fits.api.vm.v1.VMService/AddIP" + // VMServiceMoveIPProcedure is the fully-qualified name of the VMService's MoveIP RPC. + VMServiceMoveIPProcedure = "/fits.api.vm.v1.VMService/MoveIP" + // VMServiceDeleteIPProcedure is the fully-qualified name of the VMService's DeleteIP RPC. + VMServiceDeleteIPProcedure = "/fits.api.vm.v1.VMService/DeleteIP" + // VMServiceValidateCreateProcedure is the fully-qualified name of the VMService's ValidateCreate + // RPC. + VMServiceValidateCreateProcedure = "/fits.api.vm.v1.VMService/ValidateCreate" + // VMServiceValidateAddDiskProcedure is the fully-qualified name of the VMService's ValidateAddDisk + // RPC. + VMServiceValidateAddDiskProcedure = "/fits.api.vm.v1.VMService/ValidateAddDisk" + // VMServiceValidateUpdateDiskProcedure is the fully-qualified name of the VMService's + // ValidateUpdateDisk RPC. + VMServiceValidateUpdateDiskProcedure = "/fits.api.vm.v1.VMService/ValidateUpdateDisk" + // VMServiceValidateAddIPProcedure is the fully-qualified name of the VMService's ValidateAddIP RPC. + VMServiceValidateAddIPProcedure = "/fits.api.vm.v1.VMService/ValidateAddIP" ) // VMServiceClient is a client for the fits.api.vm.v1.VMService service. @@ -57,6 +80,27 @@ type VMServiceClient interface { List(context.Context, *v1.VMServiceListRequest) (*v1.VMServiceListResponse, error) // Deletes a VM. Delete(context.Context, *v1.VMServiceDeleteRequest) (*v1.VMServiceDeleteResponse, error) + // Orders an additional data disk for a VM. + AddDisk(context.Context, *v1.VMServiceAddDiskRequest) (*v1.VMServiceAddDiskResponse, error) + // Changes the size or auto-extend behavior of an existing data disk. + UpdateDisk(context.Context, *v1.VMServiceUpdateDiskRequest) (*v1.VMServiceUpdateDiskResponse, error) + // Cancels a data disk. + DeleteDisk(context.Context, *v1.VMServiceDeleteDiskRequest) (*v1.VMServiceDeleteDiskResponse, error) + // Orders an additional IP address for a VM. + AddIP(context.Context, *v1.VMServiceAddIPRequest) (*v1.VMServiceAddIPResponse, error) + // Moves an IP address from one VM to another. + MoveIP(context.Context, *v1.VMServiceMoveIPRequest) (*v1.VMServiceMoveIPResponse, error) + // Deletes an IP address from a VM. + DeleteIP(context.Context, *v1.VMServiceDeleteIPRequest) (*v1.VMServiceDeleteIPResponse, error) + // Validates a VM create request without creating anything. Intended for + // form pre-checks; the create endpoint validates again before executing. + ValidateCreate(context.Context, *v1.VMServiceValidateCreateRequest) (*v1.VMServiceValidateCreateResponse, error) + // Validates an AddDisk request without ordering anything. + ValidateAddDisk(context.Context, *v1.VMServiceValidateAddDiskRequest) (*v1.VMServiceValidateAddDiskResponse, error) + // Validates an UpdateDisk request without changing anything. + ValidateUpdateDisk(context.Context, *v1.VMServiceValidateUpdateDiskRequest) (*v1.VMServiceValidateUpdateDiskResponse, error) + // Validates an AddIP request without ordering anything. + ValidateAddIP(context.Context, *v1.VMServiceValidateAddIPRequest) (*v1.VMServiceValidateAddIPResponse, error) } // NewVMServiceClient constructs a client for the fits.api.vm.v1.VMService service. By default, it @@ -100,16 +144,86 @@ func NewVMServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...c connect.WithSchema(vMServiceMethods.ByName("Delete")), connect.WithClientOptions(opts...), ), + addDisk: connect.NewClient[v1.VMServiceAddDiskRequest, v1.VMServiceAddDiskResponse]( + httpClient, + baseURL+VMServiceAddDiskProcedure, + connect.WithSchema(vMServiceMethods.ByName("AddDisk")), + connect.WithClientOptions(opts...), + ), + updateDisk: connect.NewClient[v1.VMServiceUpdateDiskRequest, v1.VMServiceUpdateDiskResponse]( + httpClient, + baseURL+VMServiceUpdateDiskProcedure, + connect.WithSchema(vMServiceMethods.ByName("UpdateDisk")), + connect.WithClientOptions(opts...), + ), + deleteDisk: connect.NewClient[v1.VMServiceDeleteDiskRequest, v1.VMServiceDeleteDiskResponse]( + httpClient, + baseURL+VMServiceDeleteDiskProcedure, + connect.WithSchema(vMServiceMethods.ByName("DeleteDisk")), + connect.WithClientOptions(opts...), + ), + addIP: connect.NewClient[v1.VMServiceAddIPRequest, v1.VMServiceAddIPResponse]( + httpClient, + baseURL+VMServiceAddIPProcedure, + connect.WithSchema(vMServiceMethods.ByName("AddIP")), + connect.WithClientOptions(opts...), + ), + moveIP: connect.NewClient[v1.VMServiceMoveIPRequest, v1.VMServiceMoveIPResponse]( + httpClient, + baseURL+VMServiceMoveIPProcedure, + connect.WithSchema(vMServiceMethods.ByName("MoveIP")), + connect.WithClientOptions(opts...), + ), + deleteIP: connect.NewClient[v1.VMServiceDeleteIPRequest, v1.VMServiceDeleteIPResponse]( + httpClient, + baseURL+VMServiceDeleteIPProcedure, + connect.WithSchema(vMServiceMethods.ByName("DeleteIP")), + connect.WithClientOptions(opts...), + ), + validateCreate: connect.NewClient[v1.VMServiceValidateCreateRequest, v1.VMServiceValidateCreateResponse]( + httpClient, + baseURL+VMServiceValidateCreateProcedure, + connect.WithSchema(vMServiceMethods.ByName("ValidateCreate")), + connect.WithClientOptions(opts...), + ), + validateAddDisk: connect.NewClient[v1.VMServiceValidateAddDiskRequest, v1.VMServiceValidateAddDiskResponse]( + httpClient, + baseURL+VMServiceValidateAddDiskProcedure, + connect.WithSchema(vMServiceMethods.ByName("ValidateAddDisk")), + connect.WithClientOptions(opts...), + ), + validateUpdateDisk: connect.NewClient[v1.VMServiceValidateUpdateDiskRequest, v1.VMServiceValidateUpdateDiskResponse]( + httpClient, + baseURL+VMServiceValidateUpdateDiskProcedure, + connect.WithSchema(vMServiceMethods.ByName("ValidateUpdateDisk")), + connect.WithClientOptions(opts...), + ), + validateAddIP: connect.NewClient[v1.VMServiceValidateAddIPRequest, v1.VMServiceValidateAddIPResponse]( + httpClient, + baseURL+VMServiceValidateAddIPProcedure, + connect.WithSchema(vMServiceMethods.ByName("ValidateAddIP")), + connect.WithClientOptions(opts...), + ), } } // vMServiceClient implements VMServiceClient. type vMServiceClient struct { - get *connect.Client[v1.VMServiceGetRequest, v1.VMServiceGetResponse] - create *connect.Client[v1.VMServiceCreateRequest, v1.VMServiceCreateResponse] - update *connect.Client[v1.VMServiceUpdateRequest, v1.VMServiceUpdateResponse] - list *connect.Client[v1.VMServiceListRequest, v1.VMServiceListResponse] - delete *connect.Client[v1.VMServiceDeleteRequest, v1.VMServiceDeleteResponse] + get *connect.Client[v1.VMServiceGetRequest, v1.VMServiceGetResponse] + create *connect.Client[v1.VMServiceCreateRequest, v1.VMServiceCreateResponse] + update *connect.Client[v1.VMServiceUpdateRequest, v1.VMServiceUpdateResponse] + list *connect.Client[v1.VMServiceListRequest, v1.VMServiceListResponse] + delete *connect.Client[v1.VMServiceDeleteRequest, v1.VMServiceDeleteResponse] + addDisk *connect.Client[v1.VMServiceAddDiskRequest, v1.VMServiceAddDiskResponse] + updateDisk *connect.Client[v1.VMServiceUpdateDiskRequest, v1.VMServiceUpdateDiskResponse] + deleteDisk *connect.Client[v1.VMServiceDeleteDiskRequest, v1.VMServiceDeleteDiskResponse] + addIP *connect.Client[v1.VMServiceAddIPRequest, v1.VMServiceAddIPResponse] + moveIP *connect.Client[v1.VMServiceMoveIPRequest, v1.VMServiceMoveIPResponse] + deleteIP *connect.Client[v1.VMServiceDeleteIPRequest, v1.VMServiceDeleteIPResponse] + validateCreate *connect.Client[v1.VMServiceValidateCreateRequest, v1.VMServiceValidateCreateResponse] + validateAddDisk *connect.Client[v1.VMServiceValidateAddDiskRequest, v1.VMServiceValidateAddDiskResponse] + validateUpdateDisk *connect.Client[v1.VMServiceValidateUpdateDiskRequest, v1.VMServiceValidateUpdateDiskResponse] + validateAddIP *connect.Client[v1.VMServiceValidateAddIPRequest, v1.VMServiceValidateAddIPResponse] } // Get calls fits.api.vm.v1.VMService.Get. @@ -157,6 +271,96 @@ func (c *vMServiceClient) Delete(ctx context.Context, req *v1.VMServiceDeleteReq return nil, err } +// AddDisk calls fits.api.vm.v1.VMService.AddDisk. +func (c *vMServiceClient) AddDisk(ctx context.Context, req *v1.VMServiceAddDiskRequest) (*v1.VMServiceAddDiskResponse, error) { + response, err := c.addDisk.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// UpdateDisk calls fits.api.vm.v1.VMService.UpdateDisk. +func (c *vMServiceClient) UpdateDisk(ctx context.Context, req *v1.VMServiceUpdateDiskRequest) (*v1.VMServiceUpdateDiskResponse, error) { + response, err := c.updateDisk.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// DeleteDisk calls fits.api.vm.v1.VMService.DeleteDisk. +func (c *vMServiceClient) DeleteDisk(ctx context.Context, req *v1.VMServiceDeleteDiskRequest) (*v1.VMServiceDeleteDiskResponse, error) { + response, err := c.deleteDisk.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// AddIP calls fits.api.vm.v1.VMService.AddIP. +func (c *vMServiceClient) AddIP(ctx context.Context, req *v1.VMServiceAddIPRequest) (*v1.VMServiceAddIPResponse, error) { + response, err := c.addIP.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// MoveIP calls fits.api.vm.v1.VMService.MoveIP. +func (c *vMServiceClient) MoveIP(ctx context.Context, req *v1.VMServiceMoveIPRequest) (*v1.VMServiceMoveIPResponse, error) { + response, err := c.moveIP.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// DeleteIP calls fits.api.vm.v1.VMService.DeleteIP. +func (c *vMServiceClient) DeleteIP(ctx context.Context, req *v1.VMServiceDeleteIPRequest) (*v1.VMServiceDeleteIPResponse, error) { + response, err := c.deleteIP.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// ValidateCreate calls fits.api.vm.v1.VMService.ValidateCreate. +func (c *vMServiceClient) ValidateCreate(ctx context.Context, req *v1.VMServiceValidateCreateRequest) (*v1.VMServiceValidateCreateResponse, error) { + response, err := c.validateCreate.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// ValidateAddDisk calls fits.api.vm.v1.VMService.ValidateAddDisk. +func (c *vMServiceClient) ValidateAddDisk(ctx context.Context, req *v1.VMServiceValidateAddDiskRequest) (*v1.VMServiceValidateAddDiskResponse, error) { + response, err := c.validateAddDisk.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// ValidateUpdateDisk calls fits.api.vm.v1.VMService.ValidateUpdateDisk. +func (c *vMServiceClient) ValidateUpdateDisk(ctx context.Context, req *v1.VMServiceValidateUpdateDiskRequest) (*v1.VMServiceValidateUpdateDiskResponse, error) { + response, err := c.validateUpdateDisk.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// ValidateAddIP calls fits.api.vm.v1.VMService.ValidateAddIP. +func (c *vMServiceClient) ValidateAddIP(ctx context.Context, req *v1.VMServiceValidateAddIPRequest) (*v1.VMServiceValidateAddIPResponse, error) { + response, err := c.validateAddIP.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + // VMServiceHandler is an implementation of the fits.api.vm.v1.VMService service. type VMServiceHandler interface { // Returns the VM with the specified UUID. @@ -169,6 +373,27 @@ type VMServiceHandler interface { List(context.Context, *v1.VMServiceListRequest) (*v1.VMServiceListResponse, error) // Deletes a VM. Delete(context.Context, *v1.VMServiceDeleteRequest) (*v1.VMServiceDeleteResponse, error) + // Orders an additional data disk for a VM. + AddDisk(context.Context, *v1.VMServiceAddDiskRequest) (*v1.VMServiceAddDiskResponse, error) + // Changes the size or auto-extend behavior of an existing data disk. + UpdateDisk(context.Context, *v1.VMServiceUpdateDiskRequest) (*v1.VMServiceUpdateDiskResponse, error) + // Cancels a data disk. + DeleteDisk(context.Context, *v1.VMServiceDeleteDiskRequest) (*v1.VMServiceDeleteDiskResponse, error) + // Orders an additional IP address for a VM. + AddIP(context.Context, *v1.VMServiceAddIPRequest) (*v1.VMServiceAddIPResponse, error) + // Moves an IP address from one VM to another. + MoveIP(context.Context, *v1.VMServiceMoveIPRequest) (*v1.VMServiceMoveIPResponse, error) + // Deletes an IP address from a VM. + DeleteIP(context.Context, *v1.VMServiceDeleteIPRequest) (*v1.VMServiceDeleteIPResponse, error) + // Validates a VM create request without creating anything. Intended for + // form pre-checks; the create endpoint validates again before executing. + ValidateCreate(context.Context, *v1.VMServiceValidateCreateRequest) (*v1.VMServiceValidateCreateResponse, error) + // Validates an AddDisk request without ordering anything. + ValidateAddDisk(context.Context, *v1.VMServiceValidateAddDiskRequest) (*v1.VMServiceValidateAddDiskResponse, error) + // Validates an UpdateDisk request without changing anything. + ValidateUpdateDisk(context.Context, *v1.VMServiceValidateUpdateDiskRequest) (*v1.VMServiceValidateUpdateDiskResponse, error) + // Validates an AddIP request without ordering anything. + ValidateAddIP(context.Context, *v1.VMServiceValidateAddIPRequest) (*v1.VMServiceValidateAddIPResponse, error) } // NewVMServiceHandler builds an HTTP handler from the service implementation. It returns the path @@ -208,6 +433,66 @@ func NewVMServiceHandler(svc VMServiceHandler, opts ...connect.HandlerOption) (s connect.WithSchema(vMServiceMethods.ByName("Delete")), connect.WithHandlerOptions(opts...), ) + vMServiceAddDiskHandler := connect.NewUnaryHandlerSimple( + VMServiceAddDiskProcedure, + svc.AddDisk, + connect.WithSchema(vMServiceMethods.ByName("AddDisk")), + connect.WithHandlerOptions(opts...), + ) + vMServiceUpdateDiskHandler := connect.NewUnaryHandlerSimple( + VMServiceUpdateDiskProcedure, + svc.UpdateDisk, + connect.WithSchema(vMServiceMethods.ByName("UpdateDisk")), + connect.WithHandlerOptions(opts...), + ) + vMServiceDeleteDiskHandler := connect.NewUnaryHandlerSimple( + VMServiceDeleteDiskProcedure, + svc.DeleteDisk, + connect.WithSchema(vMServiceMethods.ByName("DeleteDisk")), + connect.WithHandlerOptions(opts...), + ) + vMServiceAddIPHandler := connect.NewUnaryHandlerSimple( + VMServiceAddIPProcedure, + svc.AddIP, + connect.WithSchema(vMServiceMethods.ByName("AddIP")), + connect.WithHandlerOptions(opts...), + ) + vMServiceMoveIPHandler := connect.NewUnaryHandlerSimple( + VMServiceMoveIPProcedure, + svc.MoveIP, + connect.WithSchema(vMServiceMethods.ByName("MoveIP")), + connect.WithHandlerOptions(opts...), + ) + vMServiceDeleteIPHandler := connect.NewUnaryHandlerSimple( + VMServiceDeleteIPProcedure, + svc.DeleteIP, + connect.WithSchema(vMServiceMethods.ByName("DeleteIP")), + connect.WithHandlerOptions(opts...), + ) + vMServiceValidateCreateHandler := connect.NewUnaryHandlerSimple( + VMServiceValidateCreateProcedure, + svc.ValidateCreate, + connect.WithSchema(vMServiceMethods.ByName("ValidateCreate")), + connect.WithHandlerOptions(opts...), + ) + vMServiceValidateAddDiskHandler := connect.NewUnaryHandlerSimple( + VMServiceValidateAddDiskProcedure, + svc.ValidateAddDisk, + connect.WithSchema(vMServiceMethods.ByName("ValidateAddDisk")), + connect.WithHandlerOptions(opts...), + ) + vMServiceValidateUpdateDiskHandler := connect.NewUnaryHandlerSimple( + VMServiceValidateUpdateDiskProcedure, + svc.ValidateUpdateDisk, + connect.WithSchema(vMServiceMethods.ByName("ValidateUpdateDisk")), + connect.WithHandlerOptions(opts...), + ) + vMServiceValidateAddIPHandler := connect.NewUnaryHandlerSimple( + VMServiceValidateAddIPProcedure, + svc.ValidateAddIP, + connect.WithSchema(vMServiceMethods.ByName("ValidateAddIP")), + connect.WithHandlerOptions(opts...), + ) return "/fits.api.vm.v1.VMService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case VMServiceGetProcedure: @@ -220,6 +505,26 @@ func NewVMServiceHandler(svc VMServiceHandler, opts ...connect.HandlerOption) (s vMServiceListHandler.ServeHTTP(w, r) case VMServiceDeleteProcedure: vMServiceDeleteHandler.ServeHTTP(w, r) + case VMServiceAddDiskProcedure: + vMServiceAddDiskHandler.ServeHTTP(w, r) + case VMServiceUpdateDiskProcedure: + vMServiceUpdateDiskHandler.ServeHTTP(w, r) + case VMServiceDeleteDiskProcedure: + vMServiceDeleteDiskHandler.ServeHTTP(w, r) + case VMServiceAddIPProcedure: + vMServiceAddIPHandler.ServeHTTP(w, r) + case VMServiceMoveIPProcedure: + vMServiceMoveIPHandler.ServeHTTP(w, r) + case VMServiceDeleteIPProcedure: + vMServiceDeleteIPHandler.ServeHTTP(w, r) + case VMServiceValidateCreateProcedure: + vMServiceValidateCreateHandler.ServeHTTP(w, r) + case VMServiceValidateAddDiskProcedure: + vMServiceValidateAddDiskHandler.ServeHTTP(w, r) + case VMServiceValidateUpdateDiskProcedure: + vMServiceValidateUpdateDiskHandler.ServeHTTP(w, r) + case VMServiceValidateAddIPProcedure: + vMServiceValidateAddIPHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -248,3 +553,43 @@ func (UnimplementedVMServiceHandler) List(context.Context, *v1.VMServiceListRequ func (UnimplementedVMServiceHandler) Delete(context.Context, *v1.VMServiceDeleteRequest) (*v1.VMServiceDeleteResponse, error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.Delete is not implemented")) } + +func (UnimplementedVMServiceHandler) AddDisk(context.Context, *v1.VMServiceAddDiskRequest) (*v1.VMServiceAddDiskResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.AddDisk is not implemented")) +} + +func (UnimplementedVMServiceHandler) UpdateDisk(context.Context, *v1.VMServiceUpdateDiskRequest) (*v1.VMServiceUpdateDiskResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.UpdateDisk is not implemented")) +} + +func (UnimplementedVMServiceHandler) DeleteDisk(context.Context, *v1.VMServiceDeleteDiskRequest) (*v1.VMServiceDeleteDiskResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.DeleteDisk is not implemented")) +} + +func (UnimplementedVMServiceHandler) AddIP(context.Context, *v1.VMServiceAddIPRequest) (*v1.VMServiceAddIPResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.AddIP is not implemented")) +} + +func (UnimplementedVMServiceHandler) MoveIP(context.Context, *v1.VMServiceMoveIPRequest) (*v1.VMServiceMoveIPResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.MoveIP is not implemented")) +} + +func (UnimplementedVMServiceHandler) DeleteIP(context.Context, *v1.VMServiceDeleteIPRequest) (*v1.VMServiceDeleteIPResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.DeleteIP is not implemented")) +} + +func (UnimplementedVMServiceHandler) ValidateCreate(context.Context, *v1.VMServiceValidateCreateRequest) (*v1.VMServiceValidateCreateResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.ValidateCreate is not implemented")) +} + +func (UnimplementedVMServiceHandler) ValidateAddDisk(context.Context, *v1.VMServiceValidateAddDiskRequest) (*v1.VMServiceValidateAddDiskResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.ValidateAddDisk is not implemented")) +} + +func (UnimplementedVMServiceHandler) ValidateUpdateDisk(context.Context, *v1.VMServiceValidateUpdateDiskRequest) (*v1.VMServiceValidateUpdateDiskResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.ValidateUpdateDisk is not implemented")) +} + +func (UnimplementedVMServiceHandler) ValidateAddIP(context.Context, *v1.VMServiceValidateAddIPRequest) (*v1.VMServiceValidateAddIPResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.ValidateAddIP is not implemented")) +} diff --git a/go/permissions/servicepermissions.go b/go/permissions/servicepermissions.go index 0842708..6abea37 100755 --- a/go/permissions/servicepermissions.go +++ b/go/permissions/servicepermissions.go @@ -49,41 +49,61 @@ func GetServicePermissions() *ServicePermissions { }, Project: Project{ v1.ProjectRole_PROJECT_ROLE_OWNER: map[string]struct{}{ - "/fits.api.v1.IPService/Create": {}, - "/fits.api.v1.IPService/Delete": {}, - "/fits.api.v1.IPService/Get": {}, - "/fits.api.v1.IPService/List": {}, - "/fits.api.v1.IPService/Update": {}, - "/fits.api.v1.ProjectService/Delete": {}, - "/fits.api.v1.ProjectService/Get": {}, - "/fits.api.v1.ProjectService/Update": {}, - "/fits.api.vm.v1.LocationService/List": {}, - "/fits.api.vm.v1.OSService/List": {}, - "/fits.api.vm.v1.StageTypeService/List": {}, - "/fits.api.vm.v1.VMService/Create": {}, - "/fits.api.vm.v1.VMService/Delete": {}, - "/fits.api.vm.v1.VMService/Get": {}, - "/fits.api.vm.v1.VMService/List": {}, - "/fits.api.vm.v1.VMService/Update": {}, - "/fits.api.vm.v1.VlanService/List": {}, + "/fits.api.v1.IPService/Create": {}, + "/fits.api.v1.IPService/Delete": {}, + "/fits.api.v1.IPService/Get": {}, + "/fits.api.v1.IPService/List": {}, + "/fits.api.v1.IPService/Update": {}, + "/fits.api.v1.ProjectService/Delete": {}, + "/fits.api.v1.ProjectService/Get": {}, + "/fits.api.v1.ProjectService/Update": {}, + "/fits.api.vm.v1.LocationService/List": {}, + "/fits.api.vm.v1.OSService/List": {}, + "/fits.api.vm.v1.StageTypeService/List": {}, + "/fits.api.vm.v1.VMService/AddDisk": {}, + "/fits.api.vm.v1.VMService/AddIP": {}, + "/fits.api.vm.v1.VMService/Create": {}, + "/fits.api.vm.v1.VMService/Delete": {}, + "/fits.api.vm.v1.VMService/DeleteDisk": {}, + "/fits.api.vm.v1.VMService/DeleteIP": {}, + "/fits.api.vm.v1.VMService/Get": {}, + "/fits.api.vm.v1.VMService/List": {}, + "/fits.api.vm.v1.VMService/MoveIP": {}, + "/fits.api.vm.v1.VMService/Update": {}, + "/fits.api.vm.v1.VMService/UpdateDisk": {}, + "/fits.api.vm.v1.VMService/ValidateAddDisk": {}, + "/fits.api.vm.v1.VMService/ValidateAddIP": {}, + "/fits.api.vm.v1.VMService/ValidateCreate": {}, + "/fits.api.vm.v1.VMService/ValidateUpdateDisk": {}, + "/fits.api.vm.v1.VlanService/List": {}, }, v1.ProjectRole_PROJECT_ROLE_EDITOR: map[string]struct{}{ - "/fits.api.v1.IPService/Create": {}, - "/fits.api.v1.IPService/Delete": {}, - "/fits.api.v1.IPService/Get": {}, - "/fits.api.v1.IPService/List": {}, - "/fits.api.v1.IPService/Update": {}, - "/fits.api.v1.ProjectService/Get": {}, - "/fits.api.v1.ProjectService/Update": {}, - "/fits.api.vm.v1.LocationService/List": {}, - "/fits.api.vm.v1.OSService/List": {}, - "/fits.api.vm.v1.StageTypeService/List": {}, - "/fits.api.vm.v1.VMService/Create": {}, - "/fits.api.vm.v1.VMService/Delete": {}, - "/fits.api.vm.v1.VMService/Get": {}, - "/fits.api.vm.v1.VMService/List": {}, - "/fits.api.vm.v1.VMService/Update": {}, - "/fits.api.vm.v1.VlanService/List": {}, + "/fits.api.v1.IPService/Create": {}, + "/fits.api.v1.IPService/Delete": {}, + "/fits.api.v1.IPService/Get": {}, + "/fits.api.v1.IPService/List": {}, + "/fits.api.v1.IPService/Update": {}, + "/fits.api.v1.ProjectService/Get": {}, + "/fits.api.v1.ProjectService/Update": {}, + "/fits.api.vm.v1.LocationService/List": {}, + "/fits.api.vm.v1.OSService/List": {}, + "/fits.api.vm.v1.StageTypeService/List": {}, + "/fits.api.vm.v1.VMService/AddDisk": {}, + "/fits.api.vm.v1.VMService/AddIP": {}, + "/fits.api.vm.v1.VMService/Create": {}, + "/fits.api.vm.v1.VMService/Delete": {}, + "/fits.api.vm.v1.VMService/DeleteDisk": {}, + "/fits.api.vm.v1.VMService/DeleteIP": {}, + "/fits.api.vm.v1.VMService/Get": {}, + "/fits.api.vm.v1.VMService/List": {}, + "/fits.api.vm.v1.VMService/MoveIP": {}, + "/fits.api.vm.v1.VMService/Update": {}, + "/fits.api.vm.v1.VMService/UpdateDisk": {}, + "/fits.api.vm.v1.VMService/ValidateAddDisk": {}, + "/fits.api.vm.v1.VMService/ValidateAddIP": {}, + "/fits.api.vm.v1.VMService/ValidateCreate": {}, + "/fits.api.vm.v1.VMService/ValidateUpdateDisk": {}, + "/fits.api.vm.v1.VlanService/List": {}, }, v1.ProjectRole_PROJECT_ROLE_VIEWER: map[string]struct{}{ "/fits.api.v1.IPService/Get": {}, @@ -127,11 +147,21 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.vm.v1.LocationService/List": {}, "/fits.api.vm.v1.OSService/List": {}, "/fits.api.vm.v1.StageTypeService/List": {}, + "/fits.api.vm.v1.VMService/AddDisk": {}, + "/fits.api.vm.v1.VMService/AddIP": {}, "/fits.api.vm.v1.VMService/Create": {}, "/fits.api.vm.v1.VMService/Delete": {}, + "/fits.api.vm.v1.VMService/DeleteDisk": {}, + "/fits.api.vm.v1.VMService/DeleteIP": {}, "/fits.api.vm.v1.VMService/Get": {}, "/fits.api.vm.v1.VMService/List": {}, + "/fits.api.vm.v1.VMService/MoveIP": {}, "/fits.api.vm.v1.VMService/Update": {}, + "/fits.api.vm.v1.VMService/UpdateDisk": {}, + "/fits.api.vm.v1.VMService/ValidateAddDisk": {}, + "/fits.api.vm.v1.VMService/ValidateAddIP": {}, + "/fits.api.vm.v1.VMService/ValidateCreate": {}, + "/fits.api.vm.v1.VMService/ValidateUpdateDisk": {}, "/fits.api.vm.v1.VlanService/List": {}, "/grpc.reflection.v1.ServerReflection/ServerReflectionInfo": {}, "/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo": {}, @@ -164,60 +194,80 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.v1.TenantService/Update": true, }, Project: map[string]bool{ - "/fits.api.v1.IPService/Create": true, - "/fits.api.v1.IPService/Delete": true, - "/fits.api.v1.IPService/Get": true, - "/fits.api.v1.IPService/List": true, - "/fits.api.v1.IPService/Update": true, - "/fits.api.v1.ProjectService/Delete": true, - "/fits.api.v1.ProjectService/Get": true, - "/fits.api.v1.ProjectService/Update": true, - "/fits.api.vm.v1.LocationService/List": true, - "/fits.api.vm.v1.OSService/List": true, - "/fits.api.vm.v1.StageTypeService/List": true, - "/fits.api.vm.v1.VMService/Create": true, - "/fits.api.vm.v1.VMService/Delete": true, - "/fits.api.vm.v1.VMService/Get": true, - "/fits.api.vm.v1.VMService/List": true, - "/fits.api.vm.v1.VMService/Update": true, - "/fits.api.vm.v1.VlanService/List": true, + "/fits.api.v1.IPService/Create": true, + "/fits.api.v1.IPService/Delete": true, + "/fits.api.v1.IPService/Get": true, + "/fits.api.v1.IPService/List": true, + "/fits.api.v1.IPService/Update": true, + "/fits.api.v1.ProjectService/Delete": true, + "/fits.api.v1.ProjectService/Get": true, + "/fits.api.v1.ProjectService/Update": true, + "/fits.api.vm.v1.LocationService/List": true, + "/fits.api.vm.v1.OSService/List": true, + "/fits.api.vm.v1.StageTypeService/List": true, + "/fits.api.vm.v1.VMService/AddDisk": true, + "/fits.api.vm.v1.VMService/AddIP": true, + "/fits.api.vm.v1.VMService/Create": true, + "/fits.api.vm.v1.VMService/Delete": true, + "/fits.api.vm.v1.VMService/DeleteDisk": true, + "/fits.api.vm.v1.VMService/DeleteIP": true, + "/fits.api.vm.v1.VMService/Get": true, + "/fits.api.vm.v1.VMService/List": true, + "/fits.api.vm.v1.VMService/MoveIP": true, + "/fits.api.vm.v1.VMService/Update": true, + "/fits.api.vm.v1.VMService/UpdateDisk": true, + "/fits.api.vm.v1.VMService/ValidateAddDisk": true, + "/fits.api.vm.v1.VMService/ValidateAddIP": true, + "/fits.api.vm.v1.VMService/ValidateCreate": true, + "/fits.api.vm.v1.VMService/ValidateUpdateDisk": true, + "/fits.api.vm.v1.VlanService/List": true, }, }, Auditable: map[string]bool{ - "/fits.api.v1.HealthService/Get": false, - "/fits.api.v1.IPService/Create": true, - "/fits.api.v1.IPService/Delete": true, - "/fits.api.v1.IPService/Get": false, - "/fits.api.v1.IPService/List": false, - "/fits.api.v1.IPService/Update": true, - "/fits.api.v1.MethodService/List": false, - "/fits.api.v1.MethodService/TokenScopedList": false, - "/fits.api.v1.ProjectService/Create": true, - "/fits.api.v1.ProjectService/Delete": true, - "/fits.api.v1.ProjectService/Get": false, - "/fits.api.v1.ProjectService/List": false, - "/fits.api.v1.ProjectService/Update": true, - "/fits.api.v1.TenantService/Create": true, - "/fits.api.v1.TenantService/Delete": true, - "/fits.api.v1.TenantService/Get": false, - "/fits.api.v1.TenantService/List": false, - "/fits.api.v1.TenantService/Update": true, - "/fits.api.v1.TokenService/Create": true, - "/fits.api.v1.TokenService/Get": true, - "/fits.api.v1.TokenService/List": true, - "/fits.api.v1.TokenService/Refresh": true, - "/fits.api.v1.TokenService/Revoke": true, - "/fits.api.v1.TokenService/Update": true, - "/fits.api.v1.VersionService/Get": false, - "/fits.api.vm.v1.LocationService/List": false, - "/fits.api.vm.v1.OSService/List": false, - "/fits.api.vm.v1.StageTypeService/List": false, - "/fits.api.vm.v1.VMService/Create": true, - "/fits.api.vm.v1.VMService/Delete": true, - "/fits.api.vm.v1.VMService/Get": false, - "/fits.api.vm.v1.VMService/List": false, - "/fits.api.vm.v1.VMService/Update": true, - "/fits.api.vm.v1.VlanService/List": false, + "/fits.api.v1.HealthService/Get": false, + "/fits.api.v1.IPService/Create": true, + "/fits.api.v1.IPService/Delete": true, + "/fits.api.v1.IPService/Get": false, + "/fits.api.v1.IPService/List": false, + "/fits.api.v1.IPService/Update": true, + "/fits.api.v1.MethodService/List": false, + "/fits.api.v1.MethodService/TokenScopedList": false, + "/fits.api.v1.ProjectService/Create": true, + "/fits.api.v1.ProjectService/Delete": true, + "/fits.api.v1.ProjectService/Get": false, + "/fits.api.v1.ProjectService/List": false, + "/fits.api.v1.ProjectService/Update": true, + "/fits.api.v1.TenantService/Create": true, + "/fits.api.v1.TenantService/Delete": true, + "/fits.api.v1.TenantService/Get": false, + "/fits.api.v1.TenantService/List": false, + "/fits.api.v1.TenantService/Update": true, + "/fits.api.v1.TokenService/Create": true, + "/fits.api.v1.TokenService/Get": true, + "/fits.api.v1.TokenService/List": true, + "/fits.api.v1.TokenService/Refresh": true, + "/fits.api.v1.TokenService/Revoke": true, + "/fits.api.v1.TokenService/Update": true, + "/fits.api.v1.VersionService/Get": false, + "/fits.api.vm.v1.LocationService/List": false, + "/fits.api.vm.v1.OSService/List": false, + "/fits.api.vm.v1.StageTypeService/List": false, + "/fits.api.vm.v1.VMService/AddDisk": true, + "/fits.api.vm.v1.VMService/AddIP": true, + "/fits.api.vm.v1.VMService/Create": true, + "/fits.api.vm.v1.VMService/Delete": true, + "/fits.api.vm.v1.VMService/DeleteDisk": true, + "/fits.api.vm.v1.VMService/DeleteIP": true, + "/fits.api.vm.v1.VMService/Get": false, + "/fits.api.vm.v1.VMService/List": false, + "/fits.api.vm.v1.VMService/MoveIP": true, + "/fits.api.vm.v1.VMService/Update": true, + "/fits.api.vm.v1.VMService/UpdateDisk": true, + "/fits.api.vm.v1.VMService/ValidateAddDisk": false, + "/fits.api.vm.v1.VMService/ValidateAddIP": false, + "/fits.api.vm.v1.VMService/ValidateCreate": false, + "/fits.api.vm.v1.VMService/ValidateUpdateDisk": false, + "/fits.api.vm.v1.VlanService/List": false, }, } } diff --git a/js/fits/api/v1/common_pb.ts b/js/fits/api/v1/common_pb.ts index 8843609..5c6f21c 100644 --- a/js/fits/api/v1/common_pb.ts +++ b/js/fits/api/v1/common_pb.ts @@ -14,7 +14,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file fits/api/v1/common.proto. */ export const file_fits_api_v1_common: GenFile = /*@__PURE__*/ - fileDesc("ChhmaXRzL2FwaS92MS9jb21tb24ucHJvdG8SC2ZpdHMuYXBpLnYxIkIKBlBhZ2luZxIRCgRwYWdlGAEgASgESACIAQESEgoFY291bnQYAiABKARIAYgBAUIHCgVfcGFnZUIICgZfY291bnQiiAEKBkxhYmVscxJPCgZsYWJlbHMYASADKAsyHy5maXRzLmFwaS52MS5MYWJlbHMuTGFiZWxzRW50cnlCHrpIG5oBGLiVuLECASIHcgUQARiAAioHcgUQABiAAhotCgtMYWJlbHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIq8BCgRNZXRhEigKBmxhYmVscxgBIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVsc0gAiAEBEi4KCmNyZWF0ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhIKCmdlbmVyYXRpb24YBCABKARCCQoHX2xhYmVscyJDCgxVcGRhdGVMYWJlbHMSIwoGdXBkYXRlGAEgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzEg4KBnJlbW92ZRgCIAMoCSKIAQoKVXBkYXRlTWV0YRIuCgp1cGRhdGVkX2F0GAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJKChBsb2NraW5nX3N0cmF0ZWd5GAIgASgOMiYuZml0cy5hcGkudjEuT3B0aW1pc3RpY0xvY2tpbmdTdHJhdGVneUIIukgFggECEAEiOQoPVmFsaWRhdGlvbkVycm9yEgsKA2xvYxgBIAMoCRILCgNtc2cYAiABKAkSDAoEdHlwZRgDIAEoCSqHAQoKVGVuYW50Um9sZRIbChdURU5BTlRfUk9MRV9VTlNQRUNJRklFRBAAEhUKEVRFTkFOVF9ST0xFX09XTkVSEAESFgoSVEVOQU5UX1JPTEVfRURJVE9SEAISFgoSVEVOQU5UX1JPTEVfVklFV0VSEAMSFQoRVEVOQU5UX1JPTEVfR1VFU1QQBCp1CgtQcm9qZWN0Um9sZRIcChhQUk9KRUNUX1JPTEVfVU5TUEVDSUZJRUQQABIWChJQUk9KRUNUX1JPTEVfT1dORVIQARIXChNQUk9KRUNUX1JPTEVfRURJVE9SEAISFwoTUFJPSkVDVF9ST0xFX1ZJRVdFUhADKlUKCUFkbWluUm9sZRIaChZBRE1JTl9ST0xFX1VOU1BFQ0lGSUVEEAASFQoRQURNSU5fUk9MRV9FRElUT1IQARIVChFBRE1JTl9ST0xFX1ZJRVdFUhACKlQKClZpc2liaWxpdHkSGgoWVklTSUJJTElUWV9VTlNQRUNJRklFRBAAEhUKEVZJU0lCSUxJVFlfUFVCTElDEAESEwoPVklTSUJJTElUWV9TRUxGEAIqUgoIQXVkaXRpbmcSGAoUQVVESVRJTkdfVU5TUEVDSUZJRUQQABIVChFBVURJVElOR19JTkNMVURFRBABEhUKEUFVRElUSU5HX0VYQ0xVREVEEAIqmAEKGU9wdGltaXN0aWNMb2NraW5nU3RyYXRlZ3kSKwonT1BUSU1JU1RJQ19MT0NLSU5HX1NUUkFURUdZX1VOU1BFQ0lGSUVEEAASJgoiT1BUSU1JU1RJQ19MT0NLSU5HX1NUUkFURUdZX0NMSUVOVBABEiYKIk9QVElNSVNUSUNfTE9DS0lOR19TVFJBVEVHWV9TRVJWRVIQAjpcCgx0ZW5hbnRfcm9sZXMSHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxi4jgMgAygOMhcuZml0cy5hcGkudjEuVGVuYW50Um9sZVILdGVuYW50Um9sZXM6XwoNcHJvamVjdF9yb2xlcxIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGLmOAyADKA4yGC5maXRzLmFwaS52MS5Qcm9qZWN0Um9sZVIMcHJvamVjdFJvbGVzOlkKC2FkbWluX3JvbGVzEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYuo4DIAMoDjIWLmZpdHMuYXBpLnYxLkFkbWluUm9sZVIKYWRtaW5Sb2xlczpZCgp2aXNpYmlsaXR5Eh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYu44DIAEoDjIXLmZpdHMuYXBpLnYxLlZpc2liaWxpdHlSCnZpc2liaWxpdHk6UwoIYXVkaXRpbmcSHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxi8jgMgASgOMhUuZml0cy5hcGkudjEuQXVkaXRpbmdSCGF1ZGl0aW5nOk8KEWVudW1fc3RyaW5nX3ZhbHVlEiEuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMYoJYDIAEoCVIPZW51bVN0cmluZ1ZhbHVlQpcBCg9jb20uZml0cy5hcGkudjFCC0NvbW1vblByb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_predefined_rules, file_google_protobuf_descriptor, file_google_protobuf_timestamp]); + fileDesc("ChhmaXRzL2FwaS92MS9jb21tb24ucHJvdG8SC2ZpdHMuYXBpLnYxIkIKBlBhZ2luZxIRCgRwYWdlGAEgASgESACIAQESEgoFY291bnQYAiABKARIAYgBAUIHCgVfcGFnZUIICgZfY291bnQiiAEKBkxhYmVscxJPCgZsYWJlbHMYASADKAsyHy5maXRzLmFwaS52MS5MYWJlbHMuTGFiZWxzRW50cnlCHrpIG5oBGLiVuLECASIHcgUQARiAAioHcgUQABiAAhotCgtMYWJlbHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIq8BCgRNZXRhEigKBmxhYmVscxgBIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVsc0gAiAEBEi4KCmNyZWF0ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhIKCmdlbmVyYXRpb24YBCABKARCCQoHX2xhYmVscyJDCgxVcGRhdGVMYWJlbHMSIwoGdXBkYXRlGAEgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzEg4KBnJlbW92ZRgCIAMoCSKIAQoKVXBkYXRlTWV0YRIuCgp1cGRhdGVkX2F0GAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJKChBsb2NraW5nX3N0cmF0ZWd5GAIgASgOMiYuZml0cy5hcGkudjEuT3B0aW1pc3RpY0xvY2tpbmdTdHJhdGVneUIIukgFggECEAEqhwEKClRlbmFudFJvbGUSGwoXVEVOQU5UX1JPTEVfVU5TUEVDSUZJRUQQABIVChFURU5BTlRfUk9MRV9PV05FUhABEhYKElRFTkFOVF9ST0xFX0VESVRPUhACEhYKElRFTkFOVF9ST0xFX1ZJRVdFUhADEhUKEVRFTkFOVF9ST0xFX0dVRVNUEAQqdQoLUHJvamVjdFJvbGUSHAoYUFJPSkVDVF9ST0xFX1VOU1BFQ0lGSUVEEAASFgoSUFJPSkVDVF9ST0xFX09XTkVSEAESFwoTUFJPSkVDVF9ST0xFX0VESVRPUhACEhcKE1BST0pFQ1RfUk9MRV9WSUVXRVIQAypVCglBZG1pblJvbGUSGgoWQURNSU5fUk9MRV9VTlNQRUNJRklFRBAAEhUKEUFETUlOX1JPTEVfRURJVE9SEAESFQoRQURNSU5fUk9MRV9WSUVXRVIQAipUCgpWaXNpYmlsaXR5EhoKFlZJU0lCSUxJVFlfVU5TUEVDSUZJRUQQABIVChFWSVNJQklMSVRZX1BVQkxJQxABEhMKD1ZJU0lCSUxJVFlfU0VMRhACKlIKCEF1ZGl0aW5nEhgKFEFVRElUSU5HX1VOU1BFQ0lGSUVEEAASFQoRQVVESVRJTkdfSU5DTFVERUQQARIVChFBVURJVElOR19FWENMVURFRBACKpgBChlPcHRpbWlzdGljTG9ja2luZ1N0cmF0ZWd5EisKJ09QVElNSVNUSUNfTE9DS0lOR19TVFJBVEVHWV9VTlNQRUNJRklFRBAAEiYKIk9QVElNSVNUSUNfTE9DS0lOR19TVFJBVEVHWV9DTElFTlQQARImCiJPUFRJTUlTVElDX0xPQ0tJTkdfU1RSQVRFR1lfU0VSVkVSEAI6XAoMdGVuYW50X3JvbGVzEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYuI4DIAMoDjIXLmZpdHMuYXBpLnYxLlRlbmFudFJvbGVSC3RlbmFudFJvbGVzOl8KDXByb2plY3Rfcm9sZXMSHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxi5jgMgAygOMhguZml0cy5hcGkudjEuUHJvamVjdFJvbGVSDHByb2plY3RSb2xlczpZCgthZG1pbl9yb2xlcxIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGLqOAyADKA4yFi5maXRzLmFwaS52MS5BZG1pblJvbGVSCmFkbWluUm9sZXM6WQoKdmlzaWJpbGl0eRIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGLuOAyABKA4yFy5maXRzLmFwaS52MS5WaXNpYmlsaXR5Ugp2aXNpYmlsaXR5OlMKCGF1ZGl0aW5nEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYvI4DIAEoDjIVLmZpdHMuYXBpLnYxLkF1ZGl0aW5nUghhdWRpdGluZzpPChFlbnVtX3N0cmluZ192YWx1ZRIhLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zGKCWAyABKAlSD2VudW1TdHJpbmdWYWx1ZUKXAQoPY29tLmZpdHMuYXBpLnYxQgtDb21tb25Qcm90b1ABWilnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92MTthcGl2MaICA0ZBWKoCC0ZpdHMuQXBpLlYxygILRml0c1xBcGlcVjHiAhdGaXRzXEFwaVxWMVxHUEJNZXRhZGF0YeoCDUZpdHM6OkFwaTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_predefined_rules, file_google_protobuf_descriptor, file_google_protobuf_timestamp]); /** * Paging defines paging for methods with a lot of results @@ -166,42 +166,6 @@ export type UpdateMeta = Message<"fits.api.v1.UpdateMeta"> & { export const UpdateMetaSchema: GenMessage = /*@__PURE__*/ messageDesc(file_fits_api_v1_common, 4); -/** - * ValidationError describes a single validation problem reported by an upstream API. - * Used to surface structured validation errors (e.g. HTTP 422) returned by backends. - * - * @generated from message fits.api.v1.ValidationError - */ -export type ValidationError = Message<"fits.api.v1.ValidationError"> & { - /** - * Location of the validation error within the request, e.g. ["body", "tenant_uuid"] - * - * @generated from field: repeated string loc = 1; - */ - loc: string[]; - - /** - * Human readable error message - * - * @generated from field: string msg = 2; - */ - msg: string; - - /** - * Type of the validation error, e.g. "value_error" - * - * @generated from field: string type = 3; - */ - type: string; -}; - -/** - * Describes the message fits.api.v1.ValidationError. - * Use `create(ValidationErrorSchema)` to create a new message. - */ -export const ValidationErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_v1_common, 5); - /** * TenantRole specifies what role a logged in user needs to call this tenant scoped service * diff --git a/js/fits/api/vm/v1/location_pb.ts b/js/fits/api/vm/v1/location_pb.ts index d134831..410476f 100644 --- a/js/fits/api/vm/v1/location_pb.ts +++ b/js/fits/api/vm/v1/location_pb.ts @@ -13,7 +13,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file fits/api/vm/v1/location.proto. */ export const file_fits_api_vm_v1_location: GenFile = /*@__PURE__*/ - fileDesc("Ch1maXRzL2FwaS92bS92MS9sb2NhdGlvbi5wcm90bxIOZml0cy5hcGkudm0udjEiMQoITG9jYXRpb24SFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESDQoFdGl0bGUYAiABKAkiOQoaTG9jYXRpb25TZXJ2aWNlTGlzdFJlcXVlc3QSGwoGdGVuYW50GAEgASgJQgu6SAhyBsCzrrECASJKChtMb2NhdGlvblNlcnZpY2VMaXN0UmVzcG9uc2USKwoJbG9jYXRpb25zGAEgAygLMhguZml0cy5hcGkudm0udjEuTG9jYXRpb24yfwoPTG9jYXRpb25TZXJ2aWNlEmwKBExpc3QSKi5maXRzLmFwaS52bS52MS5Mb2NhdGlvblNlcnZpY2VMaXN0UmVxdWVzdBorLmZpdHMuYXBpLnZtLnYxLkxvY2F0aW9uU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAJCqwEKEmNvbS5maXRzLmFwaS52bS52MUINTG9jYXRpb25Qcm90b1ABWitnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92bS92MTt2bXYxogIDRkFWqgIORml0cy5BcGkuVm0uVjHKAg5GaXRzXEFwaVxWbVxWMeICGkZpdHNcQXBpXFZtXFYxXEdQQk1ldGFkYXRh6gIRRml0czo6QXBpOjpWbTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); + fileDesc("Ch1maXRzL2FwaS92bS92MS9sb2NhdGlvbi5wcm90bxIOZml0cy5hcGkudm0udjEiPgoITG9jYXRpb24SFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGgoFdGl0bGUYAiABKAlCC7pICHIGwLOusQIBIjkKGkxvY2F0aW9uU2VydmljZUxpc3RSZXF1ZXN0EhsKBnRlbmFudBgBIAEoCUILukgIcgbAs66xAgEiSgobTG9jYXRpb25TZXJ2aWNlTGlzdFJlc3BvbnNlEisKCWxvY2F0aW9ucxgBIAMoCzIYLmZpdHMuYXBpLnZtLnYxLkxvY2F0aW9uMn8KD0xvY2F0aW9uU2VydmljZRJsCgRMaXN0EiouZml0cy5hcGkudm0udjEuTG9jYXRpb25TZXJ2aWNlTGlzdFJlcXVlc3QaKy5maXRzLmFwaS52bS52MS5Mb2NhdGlvblNlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCQqsBChJjb20uZml0cy5hcGkudm0udjFCDUxvY2F0aW9uUHJvdG9QAVorZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdm0vdjE7dm12MaICA0ZBVqoCDkZpdHMuQXBpLlZtLlYxygIORml0c1xBcGlcVm1cVjHiAhpGaXRzXEFwaVxWbVxWMVxHUEJNZXRhZGF0YeoCEUZpdHM6OkFwaTo6Vm06OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); /** * Location is the definition of an available datacenter location for VM instances @@ -45,15 +45,12 @@ export const LocationSchema: GenMessage = /*@__PURE__*/ /** * LocationServiceListRequest is the request payload for a location list request. - * The upstream nulink API accepts no body or parameters, so this is intentionally empty. - * TODO pro tenant anders. FITS darf beide RZ, sonst nur eines, logik dazu in nu-link * * @generated from message fits.api.vm.v1.LocationServiceListRequest */ export type LocationServiceListRequest = Message<"fits.api.vm.v1.LocationServiceListRequest"> & { /** * Tenant to list available locations for - * TODO Tobias baut in nulink-api ein * * @generated from field: string tenant = 1; */ @@ -89,16 +86,13 @@ export const LocationServiceListResponseSchema: GenMessage = /*@__PURE__*/ /** * OSServiceListRequest is the request payload for a OS list request. - * The upstream nulink API accepts no body or parameters, so this is intentionally empty. * * @generated from message fits.api.vm.v1.OSServiceListRequest */ @@ -79,11 +79,11 @@ export const OSServiceListRequestSchema: GenMessage = /*@_ */ export type OSServiceListResponse = Message<"fits.api.vm.v1.OSServiceListResponse"> & { /** - * The available OSs + * The available operating systems * - * @generated from field: repeated fits.api.vm.v1.OS oss = 1; + * @generated from field: repeated fits.api.vm.v1.OS operating_systems = 1; */ - oss: OS[]; + operatingSystems: OS[]; }; /** @@ -95,13 +95,12 @@ export const OSServiceListResponseSchema: GenMessage = /* /** * OSService lists operating systems available for VM instances. - * TODO wurde besprochen am 09.09.26 * * @generated from service fits.api.vm.v1.OSService */ export const OSService: GenService<{ /** - * Returns a list of all OSs. + * Returns a list of all operating systems. * * @generated from rpc fits.api.vm.v1.OSService.List */ diff --git a/js/fits/api/vm/v1/stagetype_pb.ts b/js/fits/api/vm/v1/stagetype_pb.ts index 532ef52..8815e05 100644 --- a/js/fits/api/vm/v1/stagetype_pb.ts +++ b/js/fits/api/vm/v1/stagetype_pb.ts @@ -13,10 +13,10 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file fits/api/vm/v1/stagetype.proto. */ export const file_fits_api_vm_v1_stagetype: GenFile = /*@__PURE__*/ - fileDesc("Ch5maXRzL2FwaS92bS92MS9zdGFnZXR5cGUucHJvdG8SDmZpdHMuYXBpLnZtLnYxIj8KCVN0YWdlVHlwZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIaCgV0aXRsZRgCIAEoCUILukgIcgbAs66xAgEiHQobU3RhZ2VUeXBlU2VydmljZUxpc3RSZXF1ZXN0Ik0KHFN0YWdlVHlwZVNlcnZpY2VMaXN0UmVzcG9uc2USLQoKc3RhZ2V0eXBlcxgBIAMoCzIZLmZpdHMuYXBpLnZtLnYxLlN0YWdlVHlwZTKCAQoQU3RhZ2VUeXBlU2VydmljZRJuCgRMaXN0EisuZml0cy5hcGkudm0udjEuU3RhZ2VUeXBlU2VydmljZUxpc3RSZXF1ZXN0GiwuZml0cy5hcGkudm0udjEuU3RhZ2VUeXBlU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAJCrAEKEmNvbS5maXRzLmFwaS52bS52MUIOU3RhZ2V0eXBlUHJvdG9QAVorZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdm0vdjE7dm12MaICA0ZBVqoCDkZpdHMuQXBpLlZtLlYxygIORml0c1xBcGlcVm1cVjHiAhpGaXRzXEFwaVxWbVxWMVxHUEJNZXRhZGF0YeoCEUZpdHM6OkFwaTo6Vm06OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); + fileDesc("Ch5maXRzL2FwaS92bS92MS9zdGFnZXR5cGUucHJvdG8SDmZpdHMuYXBpLnZtLnYxIj8KCVN0YWdlVHlwZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIaCgV0aXRsZRgCIAEoCUILukgIcgbAs66xAgEiHQobU3RhZ2VUeXBlU2VydmljZUxpc3RSZXF1ZXN0Ik4KHFN0YWdlVHlwZVNlcnZpY2VMaXN0UmVzcG9uc2USLgoLc3RhZ2VfdHlwZXMYASADKAsyGS5maXRzLmFwaS52bS52MS5TdGFnZVR5cGUyggEKEFN0YWdlVHlwZVNlcnZpY2USbgoETGlzdBIrLmZpdHMuYXBpLnZtLnYxLlN0YWdlVHlwZVNlcnZpY2VMaXN0UmVxdWVzdBosLmZpdHMuYXBpLnZtLnYxLlN0YWdlVHlwZVNlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCQqwBChJjb20uZml0cy5hcGkudm0udjFCDlN0YWdldHlwZVByb3RvUAFaK2dpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3ZtL3YxO3ZtdjGiAgNGQVaqAg5GaXRzLkFwaS5WbS5WMcoCDkZpdHNcQXBpXFZtXFYx4gIaRml0c1xBcGlcVm1cVjFcR1BCTWV0YWRhdGHqAhFGaXRzOjpBcGk6OlZtOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); /** - * Maps to the upstream NucleusDBStageTypes model. + * StageType is the definition of available stage types. (Development, Test, Integration, Production) * * @generated from message fits.api.vm.v1.StageType */ @@ -45,7 +45,6 @@ export const StageTypeSchema: GenMessage = /*@__PURE__*/ /** * StageTypeServiceListRequest is the request payload for a stage type list request. - * Maps to the upstream TenantInputModel. * * @generated from message fits.api.vm.v1.StageTypeServiceListRequest */ @@ -68,9 +67,9 @@ export type StageTypeServiceListResponse = Message<"fits.api.vm.v1.StageTypeServ /** * The available stage types * - * @generated from field: repeated fits.api.vm.v1.StageType stagetypes = 1; + * @generated from field: repeated fits.api.vm.v1.StageType stage_types = 1; */ - stagetypes: StageType[]; + stageTypes: StageType[]; }; /** @@ -82,7 +81,6 @@ export const StageTypeServiceListResponseSchema: GenMessage & { useDhcp: boolean; /** - * Title of the pod this VLAN belongs to + * TODO instead of the pod title, could we have the location_uuid? * - * @generated from field: string pod_title = 10; + * @generated from field: optional string location_uuid = 13; */ - podTitle: string; - - /** - * Uuid of the pod this VLAN belongs to - * - * @generated from field: string pod_uuid = 11; - */ - podUuid: string; - - /** - * Title of the stage type of this VLAN - * - * @generated from field: string stage_type_title = 12; - */ - stageTypeTitle: string; + locationUuid?: string | undefined; /** * Uuid of the stage type of this VLAN * - * @generated from field: string stage_type_uuid = 13; + * @generated from field: string stage_type_uuid = 14; */ stageTypeUuid: string; /** - * Uuid of the tenant this VLAN belongs to - * - * @generated from field: string tenant_uuid = 14; - */ - tenantUuid: string; - - /** - * Title of the tenant this VLAN belongs to + * Tenant this VLAN belongs to. * - * @generated from field: string tenant_title = 15; + * @generated from field: string tenant = 15; */ - tenantTitle: string; + tenant: string; }; /** @@ -140,7 +115,6 @@ export const VlanSchema: GenMessage = /*@__PURE__*/ /** * VlanServiceListRequest is the request payload for a VLAN list request. - * Maps to the upstream TenantInputModel. * * @generated from message fits.api.vm.v1.VlanServiceListRequest */ @@ -148,9 +122,6 @@ export type VlanServiceListRequest = Message<"fits.api.vm.v1.VlanServiceListRequ /** * Tenant to list available VLANs for * - * Note: the upstream model also has a requested_by field, which is intentionally - * omitted here because it is added by the auth layer from the request context. - * * @generated from field: string tenant = 1; */ tenant: string; @@ -175,14 +146,6 @@ export type VlanServiceListResponse = Message<"fits.api.vm.v1.VlanServiceListRes * @generated from field: repeated fits.api.vm.v1.Vlan vlans = 1; */ vlans: Vlan[]; - - /** - * Validation errors returned by the upstream API when the request is rejected (HTTP 422) - * TODO this is just a test - * - * @generated from field: repeated fits.api.v1.ValidationError validation_errors = 2; - */ - validationErrors: ValidationError[]; }; /** @@ -194,7 +157,6 @@ export const VlanServiceListResponseSchema: GenMessage /** * VLANService lists VLANs avaiable for VM instances. - * TODO wurde besprochen am 09.09.26 * * @generated from service fits.api.vm.v1.VlanService */ diff --git a/js/fits/api/vm/v1/vm_pb.ts b/js/fits/api/vm/v1/vm_pb.ts index d2e1aed..b8bdc7c 100644 --- a/js/fits/api/vm/v1/vm_pb.ts +++ b/js/fits/api/vm/v1/vm_pb.ts @@ -2,8 +2,8 @@ // @generated from file fits/api/vm/v1/vm.proto (package fits.api.vm.v1, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; -import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; import type { Labels, Meta, UpdateMeta } from "../../v1/common_pb"; import { file_fits_api_v1_common } from "../../v1/common_pb"; @@ -16,10 +16,116 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file fits/api/vm/v1/vm.proto. */ export const file_fits_api_vm_v1_vm: GenFile = /*@__PURE__*/ - fileDesc("ChdmaXRzL2FwaS92bS92MS92bS5wcm90bxIOZml0cy5hcGkudm0udjEi+gQKClZNSW5zdGFuY2USFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEZnFkbhgDIAEoCUILukgIcgbAs66xAgESGwoGdGVuYW50GAQgASgJQgu6SAhyBsCzrrECARIeCgxwcm9qZWN0X3V1aWQYBSABKAlCCLpIBXIDsAEBEhkKB29zX3V1aWQYBiABKAlCCLpIBXIDsAEBEh8KDWxvY2F0aW9uX3V1aWQYByABKAlCCLpIBXIDsAEBEh4KDGNvbnRhY3RfdXVpZBgIIAEoCUIIukgFcgOwAQESCwoDY3B1GAkgASgNEgsKA3JhbRgKIAEoDRIUCgxvcmRlcl9udW1iZXIYCyABKAkSEAoIY29udHJhY3QYDCABKAgSDgoGYmFja3VwGA0gASgIEhQKDGF2YWlsYWJpbGl0eRgOIAEoCRIUCgxzZXJ2aWNlY2xhc3MYDyABKAkSDgoGc3RhdHVzGBAgASgJEhMKC3N0YXR1c19pbmZvGBEgASgJEjkKD3dpbmRvd3NfZGV0YWlscxgSIAEoCzIeLmZpdHMuYXBpLnZtLnYxLldpbmRvd3NEZXRhaWxzSAASNQoNbGludXhfZGV0YWlscxgTIAEoCzIcLmZpdHMuYXBpLnZtLnYxLkxpbnV4RGV0YWlsc0gAEjQKCmludGVyZmFjZXMYFCADKAsyIC5maXRzLmFwaS52bS52MS5OZXR3b3JrSW50ZXJmYWNlEiIKBHZsYW4YFSABKAsyFC5maXRzLmFwaS52bS52MS5WbGFuQhAKB2RldGFpbHMSBbpIAggBInUKDExpbnV4RGV0YWlscxIoCgVkaXNrcxgBIAMoCzIZLmZpdHMuYXBpLnZtLnYxLkxpbnV4RGlzaxIbCglsZGFwX3V1aWQYAiABKAlCCLpIBXIDsAEBEh4KCWxkYXBfZnFkbhgDIAEoCUILukgIcgbAs66xAgEifQoOV2luZG93c0RldGFpbHMSKgoFZGlza3MYASADKAsyGy5maXRzLmFwaS52bS52MS5XaW5kb3dzRGlzaxIdCgtkb21haW5fdXVpZBgCIAEoCUIIukgFcgOwAQESIAoLZG9tYWluX2ZxZG4YAyABKAlCC7pICHIGwLOusQIBIl4KEE5ldHdvcmtJbnRlcmZhY2USFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESHgoJaXBhZGRyZXNzGAIgASgJQgu6SAhyBuizrrECARISCgptYWNhZGRyZXNzGAMgASgJIkgKE1ZNU2VydmljZUdldFJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQEiPgoUVk1TZXJ2aWNlR2V0UmVzcG9uc2USJgoCdm0YASABKAsyGi5maXRzLmFwaS52bS52MS5WTUluc3RhbmNlImkKHVZNU2VydmljZUNyZWF0ZVdpbmRvd3NSZXF1ZXN0Eh0KC2RvbWFpbl91dWlkGAEgASgJQgi6SAVyA7ABARIpCgRkaXNrGAIgASgLMhsuZml0cy5hcGkudm0udjEuV2luZG93c0Rpc2siYwobVk1TZXJ2aWNlQ3JlYXRlTGludXhSZXF1ZXN0EhsKCWxkYXBfdXVpZBgBIAEoCUIIukgFcgOwAQESJwoEZGlzaxgCIAEoCzIZLmZpdHMuYXBpLnZtLnYxLkxpbnV4RGlzayL8AwoWVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBIeCgxwcm9qZWN0X3V1aWQYASABKAlCCLpIBXIDsAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESGQoHb3NfdXVpZBgDIAEoCUIIukgFcgOwAQESGwoJdmxhbl91dWlkGAQgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAUgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYBiABKAlCCLpIBXIDsAEBEgsKA2NwdRgHIAEoDRILCgNyYW0YCCABKA0SFAoMb3JkZXJfbnVtYmVyGAkgASgJEiMKBmxhYmVscxgKIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVscxIOCgZiYWNrdXAYCyABKAgSFAoMYXZhaWxhYmlsaXR5GAwgASgJEhQKDHNlcnZpY2VjbGFzcxgNIAEoCRJACgd3aW5kb3dzGA4gASgLMi0uZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQ3JlYXRlV2luZG93c1JlcXVlc3RIABI8CgVsaW51eBgPIAEoCzIrLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUNyZWF0ZUxpbnV4UmVxdWVzdEgAQg8KBnZtdHlwZRIFukgCCAFCBwoFX25hbWUigQEKCUxpbnV4RGlzaxITCgthdXRvX2V4dGVuZBgBIAEoCBIXCgpzaXplX2luX2diGAIgASgESACIAQESDQoFbGFiZWwYBCABKAkSGAoLbW91bnRfcG9pbnQYBSABKAlIAYgBAUINCgtfc2l6ZV9pbl9nYkIOCgxfbW91bnRfcG9pbnQigwEKC1dpbmRvd3NEaXNrEhMKC2F1dG9fZXh0ZW5kGAEgASgIEhcKCnNpemVfaW5fZ2IYAiABKARIAIgBARIYCgtkcml2ZWxldHRlchgDIAEoCUgBiAEBEg0KBWxhYmVsGAQgASgJQg0KC19zaXplX2luX2diQg4KDF9kcml2ZWxldHRlciIZChdWTVNlcnZpY2VDcmVhdGVSZXNwb25zZSJuChZWTVNlcnZpY2VVcGRhdGVSZXF1ZXN0Eh4KDHByb2plY3RfdXVpZBgBIAEoCUIIukgFcgOwAQESNAoLdXBkYXRlX21ldGEYAiABKAsyFy5maXRzLmFwaS52MS5VcGRhdGVNZXRhQga6SAPIAQEiGQoXVk1TZXJ2aWNlVXBkYXRlUmVzcG9uc2UibAoUVk1TZXJ2aWNlTGlzdFJlcXVlc3QSEwoGdGVuYW50GAEgASgJSACIAQESIwoMcHJvamVjdF91dWlkGAIgASgJQgi6SAVyA7ABAUgBiAEBQgkKB190ZW5hbnRCDwoNX3Byb2plY3RfdXVpZCJAChVWTVNlcnZpY2VMaXN0UmVzcG9uc2USJwoDdm1zGAEgAygLMhouZml0cy5hcGkudm0udjEuVk1JbnN0YW5jZSIzChZWTVNlcnZpY2VEZWxldGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIhkKF1ZNU2VydmljZURlbGV0ZVJlc3BvbnNlMoEECglWTVNlcnZpY2USXQoDR2V0EiMuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlR2V0UmVxdWVzdBokLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUdldFJlc3BvbnNlIgvK8xgDAQID4PMYAhJlCgZDcmVhdGUSJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VDcmVhdGVSZXF1ZXN0GicuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESZQoGVXBkYXRlEiYuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlVXBkYXRlUmVxdWVzdBonLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZVVwZGF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmAKBExpc3QSJC5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VMaXN0UmVxdWVzdBolLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAISZQoGRGVsZXRlEiYuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlRGVsZXRlUmVxdWVzdBonLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZURlbGV0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBQqUBChJjb20uZml0cy5hcGkudm0udjFCB1ZtUHJvdG9QAVorZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdm0vdjE7dm12MaICA0ZBVqoCDkZpdHMuQXBpLlZtLlYxygIORml0c1xBcGlcVm1cVjHiAhpGaXRzXEFwaVxWbVxWMVxHUEJNZXRhZGF0YeoCEUZpdHM6OkFwaTo6Vm06OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_fits_api_vm_v1_vlan]); + fileDesc("ChdmaXRzL2FwaS92bS92MS92bS5wcm90bxIOZml0cy5hcGkudm0udjEidQoMTGludXhEZXRhaWxzEigKBWRpc2tzGAEgAygLMhkuZml0cy5hcGkudm0udjEuTGludXhEaXNrEhsKCWxkYXBfdXVpZBgCIAEoCUIIukgFcgOwAQESHgoJbGRhcF9mcWRuGAMgASgJQgu6SAhyBsCzrrECASJ9Cg5XaW5kb3dzRGV0YWlscxIqCgVkaXNrcxgBIAMoCzIbLmZpdHMuYXBpLnZtLnYxLldpbmRvd3NEaXNrEh0KC2RvbWFpbl91dWlkGAIgASgJQgi6SAVyA7ABARIgCgtkb21haW5fZnFkbhgDIAEoCUILukgIcgbAs66xAgEiXgoQTmV0d29ya0ludGVyZmFjZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIeCglpcGFkZHJlc3MYAiABKAlCC7pICHIG6LOusQIBEhIKCm1hY2FkZHJlc3MYAyABKAkiygUKClZNSW5zdGFuY2USFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEZnFkbhgDIAEoCUILukgIcgbAs66xAgESGwoGdGVuYW50GAQgASgJQgu6SAhyBsCzrrECARIeCgxwcm9qZWN0X3V1aWQYBSABKAlCCLpIBXIDsAEBEhkKB29zX3V1aWQYBiABKAlCCLpIBXIDsAEBEh8KDWxvY2F0aW9uX3V1aWQYByABKAlCCLpIBXIDsAEBEh4KDGNvbnRhY3RfdXVpZBgIIAEoCUIIukgFcgOwAQESCwoDY3B1GAkgASgNEgsKA3JhbRgKIAEoDRIOCgZiYWNrdXAYCyABKAgSDgoGc3RhdHVzGAwgASgJEhMKC3N0YXR1c19pbmZvGA0gASgJEjwKDGF2YWlsYWJpbGl0eRgOIAEoDjIcLmZpdHMuYXBpLnZtLnYxLkF2YWlsYWJpbGl0eUIIukgFggECEAESPAoMc2VydmljZWNsYXNzGA8gASgOMhwuZml0cy5hcGkudm0udjEuU2VydmljZUNsYXNzQgi6SAWCAQIQARI5Cg93aW5kb3dzX2RldGFpbHMYECABKAsyHi5maXRzLmFwaS52bS52MS5XaW5kb3dzRGV0YWlsc0gAEjUKDWxpbnV4X2RldGFpbHMYESABKAsyHC5maXRzLmFwaS52bS52MS5MaW51eERldGFpbHNIABI0CgppbnRlcmZhY2VzGBIgAygLMiAuZml0cy5hcGkudm0udjEuTmV0d29ya0ludGVyZmFjZRIiCgR2bGFuGBMgASgLMhQuZml0cy5hcGkudm0udjEuVmxhbhIUCgxvcmRlcl9udW1iZXIYFCABKAkSEAoIY29udHJhY3QYFSABKAhCEAoHZGV0YWlscxIFukgCCAEiWAoTVk1TZXJ2aWNlR2V0UmVxdWVzdBIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEhsKBnRlbmFudBgCIAEoCUILukgIcgbAs66xAgFCBwoFX3V1aWQiPgoUVk1TZXJ2aWNlR2V0UmVzcG9uc2USJgoCdm0YASABKAsyGi5maXRzLmFwaS52bS52MS5WTUluc3RhbmNlInQKHVZNU2VydmljZUNyZWF0ZVdpbmRvd3NSZXF1ZXN0Eh0KC2RvbWFpbl91dWlkGAEgASgJQgi6SAVyA7ABARI0CgVkaXNrcxgCIAMoCzIbLmZpdHMuYXBpLnZtLnYxLldpbmRvd3NEaXNrQgi6SAWSAQIIASJuChtWTVNlcnZpY2VDcmVhdGVMaW51eFJlcXVlc3QSGwoJbGRhcF91dWlkGAEgASgJQgi6SAVyA7ABARIyCgVkaXNrcxgCIAMoCzIZLmZpdHMuYXBpLnZtLnYxLkxpbnV4RGlza0IIukgFkgECCAEizAQKFlZNU2VydmljZUNyZWF0ZVJlcXVlc3QSHgoMcHJvamVjdF91dWlkGAEgASgJQgi6SAVyA7ABARIeCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECAUgBiAEBEhkKB29zX3V1aWQYAyABKAlCCLpIBXIDsAEBEhsKCXZsYW5fdXVpZBgEIAEoCUIIukgFcgOwAQESHwoNbG9jYXRpb25fdXVpZBgFIAEoCUIIukgFcgOwAQESHgoMY29udGFjdF91dWlkGAYgASgJQgi6SAVyA7ABARILCgNjcHUYByABKA0SCwoDcmFtGAggASgNEhQKDG9yZGVyX251bWJlchgJIAEoCRIjCgZsYWJlbHMYCiABKAsyEy5maXRzLmFwaS52MS5MYWJlbHMSDgoGYmFja3VwGAsgASgIEjwKDGF2YWlsYWJpbGl0eRgMIAEoDjIcLmZpdHMuYXBpLnZtLnYxLkF2YWlsYWJpbGl0eUIIukgFggECEAESPAoMc2VydmljZWNsYXNzGA0gASgOMhwuZml0cy5hcGkudm0udjEuU2VydmljZUNsYXNzQgi6SAWCAQIQARJACgd3aW5kb3dzGA4gASgLMi0uZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQ3JlYXRlV2luZG93c1JlcXVlc3RIABI8CgVsaW51eBgPIAEoCzIrLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUNyZWF0ZUxpbnV4UmVxdWVzdEgAQg8KBnZtdHlwZRIFukgCCAFCBwoFX25hbWUimwEKCUxpbnV4RGlzaxIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEg0KBWxhYmVsGAIgASgJEhMKC2F1dG9fZXh0ZW5kGAMgASgIEhEKBHNpemUYBCABKARIAYgBARIYCgttb3VudF9wb2ludBgFIAEoCUgCiAEBQgcKBV91dWlkQgcKBV9zaXplQg4KDF9tb3VudF9wb2ludCKdAQoLV2luZG93c0Rpc2sSGwoEdXVpZBgBIAEoCUIIukgFcgOwAQFIAIgBARINCgVsYWJlbBgCIAEoCRITCgthdXRvX2V4dGVuZBgDIAEoCBIRCgRzaXplGAQgASgESAGIAQESGAoLZHJpdmVsZXR0ZXIYBSABKAlIAogBAUIHCgVfdXVpZEIHCgVfc2l6ZUIOCgxfZHJpdmVsZXR0ZXIiGQoXVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2Ui3AIKFlZNU2VydmljZVVwZGF0ZVJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAMgASgJEjQKC3VwZGF0ZV9tZXRhGAQgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEkMKEXBlcmZvcm1hbmNlX2NsYXNzGAUgASgLMiYuZml0cy5hcGkudm0udjEuUGVyZm9ybWFuY2VDbGFzc0NoYW5nZUgAEjsKDXNlcnZpY2VfY2xhc3MYBiABKAsyIi5maXRzLmFwaS52bS52MS5TZXJ2aWNlQ2xhc3NDaGFuZ2VIABIwCgdjb250YWN0GAcgASgLMh0uZml0cy5hcGkudm0udjEuQ29udGFjdENoYW5nZUgAQg8KBmFjdGlvbhIFukgCCAEiRgoWUGVyZm9ybWFuY2VDbGFzc0NoYW5nZRIWCgNjcHUYASABKA1CCbpIBioEGEAoARIUCgNyYW0YAiABKA1CB7pIBCoCIAAiUgoSU2VydmljZUNsYXNzQ2hhbmdlEjwKDHNlcnZpY2VjbGFzcxgBIAEoDjIcLmZpdHMuYXBpLnZtLnYxLlNlcnZpY2VDbGFzc0IIukgFggECEAEiLwoNQ29udGFjdENoYW5nZRIeCgxjb250YWN0X3V1aWQYASABKAlCCLpIBXIDsAEBIhkKF1ZNU2VydmljZVVwZGF0ZVJlc3BvbnNlIkMKFFZNU2VydmljZUxpc3RSZXF1ZXN0EiAKBnRlbmFudBgBIAEoCUILukgIcgbAs66xAgFIAIgBAUIJCgdfdGVuYW50IkAKFVZNU2VydmljZUxpc3RSZXNwb25zZRInCgN2bXMYASADKAsyGi5maXRzLmFwaS52bS52MS5WTUluc3RhbmNlImEKFlZNU2VydmljZURlbGV0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQESFgoEdXVpZBgCIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAMgASgJIhkKF1ZNU2VydmljZURlbGV0ZVJlc3BvbnNlImAKHlZNU2VydmljZVZhbGlkYXRlQ3JlYXRlUmVxdWVzdBI+CgZjcmVhdGUYASABKAsyJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VDcmVhdGVSZXF1ZXN0Qga6SAPIAQEiIQofVk1TZXJ2aWNlVmFsaWRhdGVDcmVhdGVSZXNwb25zZSJkCh9WTVNlcnZpY2VWYWxpZGF0ZUFkZERpc2tSZXF1ZXN0EkEKCGFkZF9kaXNrGAEgASgLMicuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQWRkRGlza1JlcXVlc3RCBrpIA8gBASIiCiBWTVNlcnZpY2VWYWxpZGF0ZUFkZERpc2tSZXNwb25zZSJtCiJWTVNlcnZpY2VWYWxpZGF0ZVVwZGF0ZURpc2tSZXF1ZXN0EkcKC3VwZGF0ZV9kaXNrGAEgASgLMiouZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlVXBkYXRlRGlza1JlcXVlc3RCBrpIA8gBASIlCiNWTVNlcnZpY2VWYWxpZGF0ZVVwZGF0ZURpc2tSZXNwb25zZSIaChhWTVNlcnZpY2VBZGREaXNrUmVzcG9uc2UiHQobVk1TZXJ2aWNlVXBkYXRlRGlza1Jlc3BvbnNlIh0KG1ZNU2VydmljZURlbGV0ZURpc2tSZXNwb25zZSLNAQoXVk1TZXJ2aWNlQWRkRGlza1JlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAMgASgJEioKBWxpbnV4GAQgASgLMhkuZml0cy5hcGkudm0udjEuTGludXhEaXNrSAASLgoHd2luZG93cxgFIAEoCzIbLmZpdHMuYXBpLnZtLnYxLldpbmRvd3NEaXNrSABCDQoEZGlzaxIFukgCCAEiyAEKGlZNU2VydmljZVVwZGF0ZURpc2tSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhsKCWRpc2tfdXVpZBgCIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAQgASgJEhgKC2F1dG9fZXh0ZW5kGAUgASgISACIAQESEQoEc2l6ZRgGIAEoBEgBiAEBQg4KDF9hdXRvX2V4dGVuZEIHCgVfc2l6ZSKCAQoaVk1TZXJ2aWNlRGVsZXRlRGlza1JlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGwoJZGlza191dWlkGAIgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAMgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYBCABKAkiGAoWVk1TZXJ2aWNlQWRkSVBSZXNwb25zZSIZChdWTVNlcnZpY2VNb3ZlSVBSZXNwb25zZSIbChlWTVNlcnZpY2VEZWxldGVJUFJlc3BvbnNlImAKFVZNU2VydmljZUFkZElQUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAIgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYAyABKAkipQEKFlZNU2VydmljZU1vdmVJUFJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESIAoOaW50ZXJmYWNlX3V1aWQYAiABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgEIAEoCRIgCg50YXJnZXRfdm1fdXVpZBgFIAEoCUIIukgFcgOwAQEihQEKGFZNU2VydmljZURlbGV0ZUlQUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIgCg5pbnRlcmZhY2VfdXVpZBgCIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAQgASgJIl4KHVZNU2VydmljZVZhbGlkYXRlQWRkSVBSZXF1ZXN0Ej0KBmFkZF9pcBgBIAEoCzIlLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUFkZElQUmVxdWVzdEIGukgDyAEBIiAKHlZNU2VydmljZVZhbGlkYXRlQWRkSVBSZXNwb25zZSqmAQoMQXZhaWxhYmlsaXR5EiIKGEFWQUlMQUJJTElUWV9VTlNQRUNJRklFRBAAGgSCshkAEhsKD0FWQUlMQUJJTElUWV9WMBABGgaCshkCVjASGwoPQVZBSUxBQklMSVRZX1YxEAIaBoKyGQJWMRIbCg9BVkFJTEFCSUxJVFlfVjIQAxoGgrIZAlYyEhsKD0FWQUlMQUJJTElUWV9WMxAEGgaCshkCVjMqkwEKDFNlcnZpY2VDbGFzcxIjChlTRVJWSUNFX0NMQVNTX1VOU1BFQ0lGSUVEEAAaBIKyGQASHgoRU0VSVklDRV9DTEFTU19TWjEQARoHgrIZA1NaMRIeChFTRVJWSUNFX0NMQVNTX1NaMhACGgeCshkDU1oyEh4KEVNFUlZJQ0VfQ0xBU1NfU1ozEAMaB4KyGQNTWjMykw0KCVZNU2VydmljZRJdCgNHZXQSIy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VHZXRSZXF1ZXN0GiQuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmUKBkNyZWF0ZRImLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUNyZWF0ZVJlcXVlc3QaJy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VDcmVhdGVSZXNwb25zZSIKyvMYAgEC4PMYARJlCgZVcGRhdGUSJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VVcGRhdGVSZXF1ZXN0GicuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESYAoETGlzdBIkLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUxpc3RSZXF1ZXN0GiUuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlTGlzdFJlc3BvbnNlIgvK8xgDAQID4PMYAhJlCgZEZWxldGUSJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VEZWxldGVSZXF1ZXN0GicuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlRGVsZXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESaAoHQWRkRGlzaxInLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUFkZERpc2tSZXF1ZXN0GiguZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQWRkRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgBEnEKClVwZGF0ZURpc2sSKi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VVcGRhdGVEaXNrUmVxdWVzdBorLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZVVwZGF0ZURpc2tSZXNwb25zZSIKyvMYAgEC4PMYARJxCgpEZWxldGVEaXNrEiouZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlRGVsZXRlRGlza1JlcXVlc3QaKy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VEZWxldGVEaXNrUmVzcG9uc2UiCsrzGAIBAuDzGAESYgoFQWRkSVASJS5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VBZGRJUFJlcXVlc3QaJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VBZGRJUFJlc3BvbnNlIgrK8xgCAQLg8xgBEmUKBk1vdmVJUBImLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZU1vdmVJUFJlcXVlc3QaJy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VNb3ZlSVBSZXNwb25zZSIKyvMYAgEC4PMYARJrCghEZWxldGVJUBIoLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZURlbGV0ZUlQUmVxdWVzdBopLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZURlbGV0ZUlQUmVzcG9uc2UiCsrzGAIBAuDzGAESfQoOVmFsaWRhdGVDcmVhdGUSLi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlcXVlc3QaLy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgCEoABCg9WYWxpZGF0ZUFkZERpc2sSLy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VWYWxpZGF0ZUFkZERpc2tSZXF1ZXN0GjAuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlVmFsaWRhdGVBZGREaXNrUmVzcG9uc2UiCsrzGAIBAuDzGAISiQEKElZhbGlkYXRlVXBkYXRlRGlzaxIyLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1JlcXVlc3QaMy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VWYWxpZGF0ZVVwZGF0ZURpc2tSZXNwb25zZSIKyvMYAgEC4PMYAhJ6Cg1WYWxpZGF0ZUFkZElQEi0uZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlVmFsaWRhdGVBZGRJUFJlcXVlc3QaLi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VWYWxpZGF0ZUFkZElQUmVzcG9uc2UiCsrzGAIBAuDzGAJCpQEKEmNvbS5maXRzLmFwaS52bS52MUIHVm1Qcm90b1ABWitnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92bS92MTt2bXYxogIDRkFWqgIORml0cy5BcGkuVm0uVjHKAg5GaXRzXEFwaVxWbVxWMeICGkZpdHNcQXBpXFZtXFYxXEdQQk1ldGFkYXRh6gIRRml0czo6QXBpOjpWbTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_fits_api_vm_v1_vlan]); + +/** + * Linux-specific VM details. + * + * @generated from message fits.api.vm.v1.LinuxDetails + */ +export type LinuxDetails = Message<"fits.api.vm.v1.LinuxDetails"> & { + /** + * Disks configured on the Linux VM. + * + * @generated from field: repeated fits.api.vm.v1.LinuxDisk disks = 1; + */ + disks: LinuxDisk[]; + + /** + * UUID of the LDAP directory the VM is integrated with. + * + * @generated from field: string ldap_uuid = 2; + */ + ldapUuid: string; + + /** + * Linux-specific FQDN, derived from the name at creation or generated by the backend. + * + * @generated from field: string ldap_fqdn = 3; + */ + ldapFqdn: string; +}; + +/** + * Describes the message fits.api.vm.v1.LinuxDetails. + * Use `create(LinuxDetailsSchema)` to create a new message. + */ +export const LinuxDetailsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 0); + +/** + * Windows-specific VM details. + * + * @generated from message fits.api.vm.v1.WindowsDetails + */ +export type WindowsDetails = Message<"fits.api.vm.v1.WindowsDetails"> & { + /** + * Disks configured on the Windows VM. + * + * @generated from field: repeated fits.api.vm.v1.WindowsDisk disks = 1; + */ + disks: WindowsDisk[]; + + /** + * UUID of the Windows domain the VM has joined. + * + * @generated from field: string domain_uuid = 2; + */ + domainUuid: string; + + /** + * Windows-specific FQDN, derived from the name at creation or generated by the backend. + * + * @generated from field: string domain_fqdn = 3; + */ + domainFqdn: string; +}; + +/** + * Describes the message fits.api.vm.v1.WindowsDetails. + * Use `create(WindowsDetailsSchema)` to create a new message. + */ +export const WindowsDetailsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 1); + +/** + * A network interface of a VM. IPv4 only; IPv6 is not yet supported. + * + * @generated from message fits.api.vm.v1.NetworkInterface + */ +export type NetworkInterface = Message<"fits.api.vm.v1.NetworkInterface"> & { + /** + * UUID of this interface. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * IPv4 address assigned to this interface. + * + * @generated from field: string ipaddress = 2; + */ + ipaddress: string; + + /** + * MAC address of this interface. + * + * TODO: add validation + * + * @generated from field: string macaddress = 3; + */ + macaddress: string; +}; + +/** + * Describes the message fits.api.vm.v1.NetworkInterface. + * Use `create(NetworkInterfaceSchema)` to create a new message. + */ +export const NetworkInterfaceSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 2); /** - * VM Instance Messages * A VM instance as returned by the API. * * @generated from message fits.api.vm.v1.VMInstance @@ -34,15 +140,14 @@ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { /** * Metadata for this VM. - * TODO dates are available in the nulink db, but not passed through yet. + * TODO: dates are available in the nulink db but not passed through yet. * * @generated from field: fits.api.v1.Meta meta = 2; */ meta?: Meta | undefined; /** - * FQDN of the VM. Derived from the optional name set at creation, - * or generated by the backend if none was provided. + * FQDN of the VM, derived from the name at creation or generated by the backend. * * @generated from field: string fqdn = 3; */ @@ -63,8 +168,7 @@ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { projectUuid: string; /** - * UUID of the operating system image installed on the VM. - * Resolve the human-readable title via the OS endpoint. + * UUID of the OS image installed on the VM; resolve the title via the OS endpoint. * * @generated from field: string os_uuid = 6; */ @@ -72,8 +176,7 @@ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { /** * UUID of the datacenter location. - * The VM is automatically scheduled into one pod within the chosen location; - * users select the city but not the specific datacenter. + * TODO: not exposed by the upstream (nulink) VM records yet; always empty. * * @generated from field: string location_uuid = 7; */ @@ -100,57 +203,44 @@ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { */ ram: number; - /** - * Internal reference number provided by the user, e.g. a ticket ID. - * - * @generated from field: string order_number = 11; - */ - orderNumber: string; - - /** - * Whether the order was placed by FITS (true) or self-service by the user (false). - * - * @generated from field: bool contract = 12; - */ - contract: boolean; - /** * Whether backup is enabled. + * TODO: the upstream (nulink) list/get models do not expose this; always false. * - * @generated from field: bool backup = 13; + * @generated from field: bool backup = 11; */ backup: boolean; /** - * Availability level: v0, v1, v2, v3 (higher value = higher availability). + * Status of the ongoing operation. * - * @generated from field: string availability = 14; + * @generated from field: string status = 12; */ - availability: string; + status: string; /** - * Service class: sz1, sz2, sz3 (higher value = higher tier). + * Additional information about the current status. * - * @generated from field: string serviceclass = 15; + * @generated from field: string status_info = 13; */ - serviceclass: string; + statusInfo: string; /** - * Status of the ongoing operation. + * Availability level. * - * @generated from field: string status = 16; + * @generated from field: fits.api.vm.v1.Availability availability = 14; */ - status: string; + availability: Availability; /** - * Additional information about the current status. + * Service class. * - * @generated from field: string status_info = 17; + * @generated from field: fits.api.vm.v1.ServiceClass serviceclass = 15; */ - statusInfo: string; + serviceclass: ServiceClass; /** - * OS-specific configuration. Exactly one must be set. + * OS-specific configuration. * * @generated from oneof fits.api.vm.v1.VMInstance.details */ @@ -158,7 +248,7 @@ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { /** * Windows-specific settings (domain + disks). * - * @generated from field: fits.api.vm.v1.WindowsDetails windows_details = 18; + * @generated from field: fits.api.vm.v1.WindowsDetails windows_details = 16; */ value: WindowsDetails; case: "windowsDetails"; @@ -166,7 +256,7 @@ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { /** * Linux-specific settings (LDAP + disks). * - * @generated from field: fits.api.vm.v1.LinuxDetails linux_details = 19; + * @generated from field: fits.api.vm.v1.LinuxDetails linux_details = 17; */ value: LinuxDetails; case: "linuxDetails"; @@ -175,153 +265,60 @@ export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { /** * Network interfaces attached to the VM (IPv4 only). * - * @generated from field: repeated fits.api.vm.v1.NetworkInterface interfaces = 20; + * @generated from field: repeated fits.api.vm.v1.NetworkInterface interfaces = 18; */ interfaces: NetworkInterface[]; /** * VLAN the VM is attached to. + * TODO: not exposed by the upstream (nulink) VM records yet; always unset. * - * @generated from field: fits.api.vm.v1.Vlan vlan = 21; + * @generated from field: fits.api.vm.v1.Vlan vlan = 19; */ vlan?: Vlan | undefined; -}; - -/** - * Describes the message fits.api.vm.v1.VMInstance. - * Use `create(VMInstanceSchema)` to create a new message. - */ -export const VMInstanceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 0); - -/** - * Linux-specific VM details. - * - * @generated from message fits.api.vm.v1.LinuxDetails - */ -export type LinuxDetails = Message<"fits.api.vm.v1.LinuxDetails"> & { - /** - * Disks configured on the Linux VM. - * - * @generated from field: repeated fits.api.vm.v1.LinuxDisk disks = 1; - */ - disks: LinuxDisk[]; - - /** - * UUID of the LDAP directory the VM is integrated with. - * - * @generated from field: string ldap_uuid = 2; - */ - ldapUuid: string; - - /** - * Linux-specific FQDN. Derived from the optional name set at creation, - * or generated by the backend if none was provided. - * - * @generated from field: string ldap_fqdn = 3; - */ - ldapFqdn: string; -}; - -/** - * Describes the message fits.api.vm.v1.LinuxDetails. - * Use `create(LinuxDetailsSchema)` to create a new message. - */ -export const LinuxDetailsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 1); - -/** - * Windows-specific VM details. - * - * @generated from message fits.api.vm.v1.WindowsDetails - */ -export type WindowsDetails = Message<"fits.api.vm.v1.WindowsDetails"> & { - /** - * Disks configured on the Windows VM. - * - * @generated from field: repeated fits.api.vm.v1.WindowsDisk disks = 1; - */ - disks: WindowsDisk[]; - - /** - * UUID of the Windows domain the VM has joined. - * - * @generated from field: string domain_uuid = 2; - */ - domainUuid: string; - - /** - * Windows-specific FQDN. Derived from the optional name set at creation, - * or generated by the backend if none was provided. - * - * @generated from field: string domain_fqdn = 3; - */ - domainFqdn: string; -}; - -/** - * Describes the message fits.api.vm.v1.WindowsDetails. - * Use `create(WindowsDetailsSchema)` to create a new message. - */ -export const WindowsDetailsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 2); - -/** - * A network interface of a VM. IPv4 only; IPv6 is not yet supported. - * - * @generated from message fits.api.vm.v1.NetworkInterface - */ -export type NetworkInterface = Message<"fits.api.vm.v1.NetworkInterface"> & { - /** - * UUID of this interface. - * - * @generated from field: string uuid = 1; - */ - uuid: string; /** - * IPv4 address assigned to this interface. + * Internal reference number provided by the user, e.g. a ticket ID. * - * @generated from field: string ipaddress = 2; + * @generated from field: string order_number = 20; */ - ipaddress: string; + orderNumber: string; /** - * MAC address of this interface. - * - * TODO validation + * True if the order was placed by FITS, false if self-service. + * TODO: maybe remove this field entirely. * - * @generated from field: string macaddress = 3; + * @generated from field: bool contract = 21; */ - macaddress: string; + contract: boolean; }; /** - * Describes the message fits.api.vm.v1.NetworkInterface. - * Use `create(NetworkInterfaceSchema)` to create a new message. + * Describes the message fits.api.vm.v1.VMInstance. + * Use `create(VMInstanceSchema)` to create a new message. */ -export const NetworkInterfaceSchema: GenMessage = /*@__PURE__*/ +export const VMInstanceSchema: GenMessage = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 3); /** - * VMServiceGetRequest TODO + * Request to get a VM by UUID. * * @generated from message fits.api.vm.v1.VMServiceGetRequest */ export type VMServiceGetRequest = Message<"fits.api.vm.v1.VMServiceGetRequest"> & { /** - * Uuid of this VM + * UUID of the VM. * - * @generated from field: string uuid = 1; + * @generated from field: optional string uuid = 1; */ - uuid: string; + uuid?: string | undefined; /** - * Project where this VM belongs to + * Tenant of the VM. * - * @generated from field: string project = 2; + * @generated from field: string tenant = 2; */ - project: string; + tenant: string; }; /** @@ -332,13 +329,13 @@ export const VMServiceGetRequestSchema: GenMessage = /*@__P messageDesc(file_fits_api_vm_v1_vm, 4); /** - * VMServiceGetResponse TODO + * Response containing the requested VM. * * @generated from message fits.api.vm.v1.VMServiceGetResponse */ export type VMServiceGetResponse = Message<"fits.api.vm.v1.VMServiceGetResponse"> & { /** - * The VM + * The VM. * * @generated from field: fits.api.vm.v1.VMInstance vm = 1; */ @@ -359,18 +356,18 @@ export const VMServiceGetResponseSchema: GenMessage = /*@_ */ export type VMServiceCreateWindowsRequest = Message<"fits.api.vm.v1.VMServiceCreateWindowsRequest"> & { /** - * UUID of the Windows domain the VM should join. Required. + * UUID of the Windows domain the VM should join. * * @generated from field: string domain_uuid = 1; */ domainUuid: string; /** - * Disk configuration for the Windows VM. + * Disks for the Windows VM, excluding the OS disk. * - * @generated from field: fits.api.vm.v1.WindowsDisk disk = 2; + * @generated from field: repeated fits.api.vm.v1.WindowsDisk disks = 2; */ - disk?: WindowsDisk | undefined; + disks: WindowsDisk[]; }; /** @@ -387,18 +384,18 @@ export const VMServiceCreateWindowsRequestSchema: GenMessage & { /** - * UUID of the LDAP directory the VM should integrate with. Required. + * UUID of the LDAP directory the VM should integrate with. * * @generated from field: string ldap_uuid = 1; */ ldapUuid: string; /** - * Disk configuration for the Linux VM. + * Disks for the Linux VM, excluding the OS disk. * - * @generated from field: fits.api.vm.v1.LinuxDisk disk = 2; + * @generated from field: repeated fits.api.vm.v1.LinuxDisk disks = 2; */ - disk?: LinuxDisk | undefined; + disks: LinuxDisk[]; }; /** @@ -410,51 +407,48 @@ export const VMServiceCreateLinuxRequestSchema: GenMessage & { /** - * UUID of the project this VM belongs to. Required. + * UUID of the project this VM belongs to. * * @generated from field: string project_uuid = 1; */ projectUuid: string; /** - * Optional name for the VM. The FQDN is derived from this value. + * Optional name; the FQDN is derived from it. * * @generated from field: optional string name = 2; */ name?: string | undefined; /** - * UUID of the operating system image to install. Required. + * UUID of the operating system image to install. * * @generated from field: string os_uuid = 3; */ osUuid: string; /** - * UUID of the VLAN network to attach the VM to. Required. - * Obtainable via the VLAN list endpoint. + * UUID of the VLAN network to attach the VM to. * * @generated from field: string vlan_uuid = 4; */ vlanUuid: string; /** - * UUID of the datacenter location. Required. - * The VM is automatically scheduled into one data center within the chosen location; - * users select the city but not the specific datacenter. + * UUID of the datacenter location; the VM is scheduled into one data center within it. * * @generated from field: string location_uuid = 5; */ locationUuid: string; /** - * TODO: Contact UUID – open discussion with FCN on how to model responsible contacts. - * GDPR considerations pending. May become a dedicated /contact endpoint. + * TODO: Contact UUID – open discussion with FCN; may become a dedicated /contact endpoint. * * @generated from field: string contact_uuid = 6; */ @@ -475,14 +469,15 @@ export type VMServiceCreateRequest = Message<"fits.api.vm.v1.VMServiceCreateRequ ram: number; /** - * Internal reference number provided by the user, e.g. a ticket ID. Free text. Required. + * Internal reference number provided by the user, e.g. a ticket ID. + * TODO: can this be optional? * * @generated from field: string order_number = 9; */ orderNumber: string; /** - * Optional key-value labels for accounting purposes + * Optional key-value labels for accounting purposes. * (e.g. contract number, transaction number, technical key, accounting key). * * @generated from field: fits.api.v1.Labels labels = 10; @@ -490,29 +485,28 @@ export type VMServiceCreateRequest = Message<"fits.api.vm.v1.VMServiceCreateRequ labels?: Labels | undefined; /** - * Whether backup is enabled. Simple on/off toggle; no distinct backup plans. Required. + * Whether backup is enabled. * * @generated from field: bool backup = 11; */ backup: boolean; /** - * Availability level: v0, v1, v2, v3 (higher value = higher availability). Required. + * Availability level. * - * @generated from field: string availability = 12; + * @generated from field: fits.api.vm.v1.Availability availability = 12; */ - availability: string; + availability: Availability; /** - * Service class: sz1, sz2, sz3 (higher value = higher tier). Required. - * Only certain combinations with availability are valid; enforced by the backend. + * Service class; only certain combinations with availability are valid. * - * @generated from field: string serviceclass = 13; + * @generated from field: fits.api.vm.v1.ServiceClass serviceclass = 13; */ - serviceclass: string; + serviceclass: ServiceClass; /** - * Specifies the OS type and its associated configuration. Exactly one must be set. + * OS type and its configuration. * * @generated from oneof fits.api.vm.v1.VMServiceCreateRequest.vmtype */ @@ -549,28 +543,35 @@ export const VMServiceCreateRequestSchema: GenMessage = */ export type LinuxDisk = Message<"fits.api.vm.v1.LinuxDisk"> & { /** - * If true, the disk grows automatically when space runs low. + * UUID of the disk; set for existing disks, unset for new ones. * - * @generated from field: bool auto_extend = 1; + * @generated from field: optional string uuid = 1; */ - autoExtend: boolean; + uuid?: string | undefined; /** - * Size of the disk in GB. + * Label (name) of the disk. * - * @generated from field: optional uint64 size_in_gb = 2; + * @generated from field: string label = 2; */ - sizeInGb?: bigint | undefined; + label: string; /** - * Label (name) of the disk. + * Whether the disk grows automatically when space runs low. * - * @generated from field: string label = 4; + * @generated from field: bool auto_extend = 3; */ - label: string; + autoExtend: boolean; + + /** + * Size of the disk in GB. + * + * @generated from field: optional uint64 size = 4; + */ + size?: bigint | undefined; /** - * Filesystem path where this disk should be mounted (e.g. "/data"). + * Mount point (e.g. "/data"). * * @generated from field: optional string mount_point = 5; */ @@ -591,32 +592,39 @@ export const LinuxDiskSchema: GenMessage = /*@__PURE__*/ */ export type WindowsDisk = Message<"fits.api.vm.v1.WindowsDisk"> & { /** - * If true, the disk grows automatically when space runs low. + * UUID of the disk; set for existing disks, unset for new ones. * - * @generated from field: bool auto_extend = 1; + * @generated from field: optional string uuid = 1; */ - autoExtend: boolean; + uuid?: string | undefined; /** - * Size of the disk in GB. + * Label (name) of the disk. * - * @generated from field: optional uint64 size_in_gb = 2; + * @generated from field: string label = 2; */ - sizeInGb?: bigint | undefined; + label: string; /** - * Drive letter assigned to this disk (e.g. "D"). + * Whether the disk grows automatically when space runs low. * - * @generated from field: optional string driveletter = 3; + * @generated from field: bool auto_extend = 3; */ - driveletter?: string | undefined; + autoExtend: boolean; /** - * Label (name) of the disk. + * Size of the disk in GB. * - * @generated from field: string label = 4; + * @generated from field: optional uint64 size = 4; */ - label: string; + size?: bigint | undefined; + + /** + * Drive letter (e.g. "D"). + * + * @generated from field: optional string driveletter = 5; + */ + driveletter?: string | undefined; }; /** @@ -627,7 +635,7 @@ export const WindowsDiskSchema: GenMessage = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 10); /** - * VMServiceCreateResponse TODO + * Response for Create; an empty response means the VM was accepted. * * @generated from message fits.api.vm.v1.VMServiceCreateResponse */ @@ -642,24 +650,74 @@ export const VMServiceCreateResponseSchema: GenMessage messageDesc(file_fits_api_vm_v1_vm, 11); /** - * VMServiceUpdateRequest TODO + * Request to change a mutable property of an existing VM. + * Exactly one action must be set; each maps onto its own upstream endpoint. + * TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per + * action); combined changes would need + * server-side fan-out without rollback. * * @generated from message fits.api.vm.v1.VMServiceUpdateRequest */ export type VMServiceUpdateRequest = Message<"fits.api.vm.v1.VMServiceUpdateRequest"> & { /** - * Project of the VM + * UUID of the VM to update. * - * @generated from field: string project_uuid = 1; + * @generated from field: string uuid = 1; */ - projectUuid: string; + uuid: string; + + /** + * Project the VM belongs to. + * + * @generated from field: string project = 2; + */ + project: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 3; + */ + orderNumber: string; /** - * UpdateMeta contains the timestamp and strategy to be used in this update request. + * Timestamp and strategy for this update. * - * @generated from field: fits.api.v1.UpdateMeta update_meta = 2; + * @generated from field: fits.api.v1.UpdateMeta update_meta = 4; */ updateMeta?: UpdateMeta | undefined; + + /** + * The change to apply. + * + * @generated from oneof fits.api.vm.v1.VMServiceUpdateRequest.action + */ + action: { + /** + * Change the CPU/RAM performance class. + * + * @generated from field: fits.api.vm.v1.PerformanceClassChange performance_class = 5; + */ + value: PerformanceClassChange; + case: "performanceClass"; + } | { + /** + * Change the service class. + * + * @generated from field: fits.api.vm.v1.ServiceClassChange service_class = 6; + */ + value: ServiceClassChange; + case: "serviceClass"; + } | { + /** + * Change the contact person. + * + * @generated from field: fits.api.vm.v1.ContactChange contact = 7; + */ + value: ContactChange; + case: "contact"; + } | { case: undefined; value?: undefined }; }; /** @@ -670,7 +728,77 @@ export const VMServiceUpdateRequestSchema: GenMessage = messageDesc(file_fits_api_vm_v1_vm, 12); /** - * VMServiceUpdateResponse TODO + * PerformanceClassChange is the payload for changing a VM's CPU and RAM. + * + * @generated from message fits.api.vm.v1.PerformanceClassChange + */ +export type PerformanceClassChange = Message<"fits.api.vm.v1.PerformanceClassChange"> & { + /** + * Number of vCPUs (1-64). + * + * @generated from field: uint32 cpu = 1; + */ + cpu: number; + + /** + * RAM size in GB. + * + * @generated from field: uint32 ram = 2; + */ + ram: number; +}; + +/** + * Describes the message fits.api.vm.v1.PerformanceClassChange. + * Use `create(PerformanceClassChangeSchema)` to create a new message. + */ +export const PerformanceClassChangeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 13); + +/** + * ServiceClassChange is the payload for changing a VM's service class. + * + * @generated from message fits.api.vm.v1.ServiceClassChange + */ +export type ServiceClassChange = Message<"fits.api.vm.v1.ServiceClassChange"> & { + /** + * Target service class. + * + * @generated from field: fits.api.vm.v1.ServiceClass serviceclass = 1; + */ + serviceclass: ServiceClass; +}; + +/** + * Describes the message fits.api.vm.v1.ServiceClassChange. + * Use `create(ServiceClassChangeSchema)` to create a new message. + */ +export const ServiceClassChangeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 14); + +/** + * ContactChange is the payload for changing a VM's contact person. + * + * @generated from message fits.api.vm.v1.ContactChange + */ +export type ContactChange = Message<"fits.api.vm.v1.ContactChange"> & { + /** + * UUID of the new contact. + * + * @generated from field: string contact_uuid = 1; + */ + contactUuid: string; +}; + +/** + * Describes the message fits.api.vm.v1.ContactChange. + * Use `create(ContactChangeSchema)` to create a new message. + */ +export const ContactChangeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 15); + +/** + * Response for Update; an empty response means the change was accepted. * * @generated from message fits.api.vm.v1.VMServiceUpdateResponse */ @@ -682,27 +810,20 @@ export type VMServiceUpdateResponse = Message<"fits.api.vm.v1.VMServiceUpdateRes * Use `create(VMServiceUpdateResponseSchema)` to create a new message. */ export const VMServiceUpdateResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 13); + messageDesc(file_fits_api_vm_v1_vm, 16); /** - * VMServiceListRequest + * Request to list VMs. * * @generated from message fits.api.vm.v1.VMServiceListRequest */ export type VMServiceListRequest = Message<"fits.api.vm.v1.VMServiceListRequest"> & { /** - * Tenant of the VM + * Tenant of the VMs. * * @generated from field: optional string tenant = 1; */ tenant?: string | undefined; - - /** - * Project of the VM - * - * @generated from field: optional string project_uuid = 2; - */ - projectUuid?: string | undefined; }; /** @@ -710,16 +831,16 @@ export type VMServiceListRequest = Message<"fits.api.vm.v1.VMServiceListRequest" * Use `create(VMServiceListRequestSchema)` to create a new message. */ export const VMServiceListRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 14); + messageDesc(file_fits_api_vm_v1_vm, 17); /** - * VMServiceListResponse + * Response containing the list of VMs. * * @generated from message fits.api.vm.v1.VMServiceListResponse */ export type VMServiceListResponse = Message<"fits.api.vm.v1.VMServiceListResponse"> & { /** - * List of VM instances + * The VM instances. * * @generated from field: repeated fits.api.vm.v1.VMInstance vms = 1; */ @@ -731,20 +852,35 @@ export type VMServiceListResponse = Message<"fits.api.vm.v1.VMServiceListRespons * Use `create(VMServiceListResponseSchema)` to create a new message. */ export const VMServiceListResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 15); + messageDesc(file_fits_api_vm_v1_vm, 18); /** - * VMServiceDeleteRequest TODO + * Request to cancel a VM instance. * * @generated from message fits.api.vm.v1.VMServiceDeleteRequest */ export type VMServiceDeleteRequest = Message<"fits.api.vm.v1.VMServiceDeleteRequest"> & { /** - * Project of the VM + * Project the VM belongs to. * * @generated from field: string project = 1; */ project: string; + + /** + * UUID of the VM to delete. + * + * @generated from field: string uuid = 2; + */ + uuid: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 3; + */ + orderNumber: string; }; /** @@ -752,10 +888,10 @@ export type VMServiceDeleteRequest = Message<"fits.api.vm.v1.VMServiceDeleteRequ * Use `create(VMServiceDeleteRequestSchema)` to create a new message. */ export const VMServiceDeleteRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 16); + messageDesc(file_fits_api_vm_v1_vm, 19); /** - * VMServiceDeleteResponse TODO + * Response for Delete; an empty response means the cancellation was accepted. * * @generated from message fits.api.vm.v1.VMServiceDeleteResponse */ @@ -767,10 +903,622 @@ export type VMServiceDeleteResponse = Message<"fits.api.vm.v1.VMServiceDeleteRes * Use `create(VMServiceDeleteResponseSchema)` to create a new message. */ export const VMServiceDeleteResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 17); + messageDesc(file_fits_api_vm_v1_vm, 20); + +/** + * Request to validate a VM create without creating anything. + * + * @generated from message fits.api.vm.v1.VMServiceValidateCreateRequest + */ +export type VMServiceValidateCreateRequest = Message<"fits.api.vm.v1.VMServiceValidateCreateRequest"> & { + /** + * The create request to validate. + * + * @generated from field: fits.api.vm.v1.VMServiceCreateRequest create = 1; + */ + create?: VMServiceCreateRequest | undefined; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceValidateCreateRequest. + * Use `create(VMServiceValidateCreateRequestSchema)` to create a new message. + */ +export const VMServiceValidateCreateRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 21); + +/** + * Response for ValidateCreate; violations are returned as an InvalidArgument error. + * + * @generated from message fits.api.vm.v1.VMServiceValidateCreateResponse + */ +export type VMServiceValidateCreateResponse = Message<"fits.api.vm.v1.VMServiceValidateCreateResponse"> & { +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceValidateCreateResponse. + * Use `create(VMServiceValidateCreateResponseSchema)` to create a new message. + */ +export const VMServiceValidateCreateResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 22); + +/** + * Request to validate an AddDisk without ordering anything. + * + * @generated from message fits.api.vm.v1.VMServiceValidateAddDiskRequest + */ +export type VMServiceValidateAddDiskRequest = Message<"fits.api.vm.v1.VMServiceValidateAddDiskRequest"> & { + /** + * The add disk request to validate. + * + * @generated from field: fits.api.vm.v1.VMServiceAddDiskRequest add_disk = 1; + */ + addDisk?: VMServiceAddDiskRequest | undefined; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceValidateAddDiskRequest. + * Use `create(VMServiceValidateAddDiskRequestSchema)` to create a new message. + */ +export const VMServiceValidateAddDiskRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 23); + +/** + * Response for ValidateAddDisk; violations are returned as an InvalidArgument error. + * + * @generated from message fits.api.vm.v1.VMServiceValidateAddDiskResponse + */ +export type VMServiceValidateAddDiskResponse = Message<"fits.api.vm.v1.VMServiceValidateAddDiskResponse"> & { +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceValidateAddDiskResponse. + * Use `create(VMServiceValidateAddDiskResponseSchema)` to create a new message. + */ +export const VMServiceValidateAddDiskResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 24); + +/** + * Request to validate an UpdateDisk without changing anything. + * + * @generated from message fits.api.vm.v1.VMServiceValidateUpdateDiskRequest + */ +export type VMServiceValidateUpdateDiskRequest = Message<"fits.api.vm.v1.VMServiceValidateUpdateDiskRequest"> & { + /** + * The update disk request to validate. + * + * @generated from field: fits.api.vm.v1.VMServiceUpdateDiskRequest update_disk = 1; + */ + updateDisk?: VMServiceUpdateDiskRequest | undefined; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceValidateUpdateDiskRequest. + * Use `create(VMServiceValidateUpdateDiskRequestSchema)` to create a new message. + */ +export const VMServiceValidateUpdateDiskRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 25); + +/** + * Response for ValidateUpdateDisk; violations are returned as an InvalidArgument error. + * + * @generated from message fits.api.vm.v1.VMServiceValidateUpdateDiskResponse + */ +export type VMServiceValidateUpdateDiskResponse = Message<"fits.api.vm.v1.VMServiceValidateUpdateDiskResponse"> & { +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceValidateUpdateDiskResponse. + * Use `create(VMServiceValidateUpdateDiskResponseSchema)` to create a new message. + */ +export const VMServiceValidateUpdateDiskResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 26); + +/** + * Response for AddDisk. + * + * @generated from message fits.api.vm.v1.VMServiceAddDiskResponse + */ +export type VMServiceAddDiskResponse = Message<"fits.api.vm.v1.VMServiceAddDiskResponse"> & { +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceAddDiskResponse. + * Use `create(VMServiceAddDiskResponseSchema)` to create a new message. + */ +export const VMServiceAddDiskResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 27); + +/** + * Response for UpdateDisk. + * + * @generated from message fits.api.vm.v1.VMServiceUpdateDiskResponse + */ +export type VMServiceUpdateDiskResponse = Message<"fits.api.vm.v1.VMServiceUpdateDiskResponse"> & { +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceUpdateDiskResponse. + * Use `create(VMServiceUpdateDiskResponseSchema)` to create a new message. + */ +export const VMServiceUpdateDiskResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 28); + +/** + * Response for DeleteDisk. + * + * @generated from message fits.api.vm.v1.VMServiceDeleteDiskResponse + */ +export type VMServiceDeleteDiskResponse = Message<"fits.api.vm.v1.VMServiceDeleteDiskResponse"> & { +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceDeleteDiskResponse. + * Use `create(VMServiceDeleteDiskResponseSchema)` to create a new message. + */ +export const VMServiceDeleteDiskResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 29); + +/** + * Request to order an additional data disk for a VM. + * + * @generated from message fits.api.vm.v1.VMServiceAddDiskRequest + */ +export type VMServiceAddDiskRequest = Message<"fits.api.vm.v1.VMServiceAddDiskRequest"> & { + /** + * UUID of the VM to attach the disk to. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * Project the VM belongs to. + * + * @generated from field: string project = 2; + */ + project: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 3; + */ + orderNumber: string; + + /** + * OS-specific disk specification; must match the VM's OS type. + * + * @generated from oneof fits.api.vm.v1.VMServiceAddDiskRequest.disk + */ + disk: { + /** + * Linux data disk. + * + * @generated from field: fits.api.vm.v1.LinuxDisk linux = 4; + */ + value: LinuxDisk; + case: "linux"; + } | { + /** + * Windows data disk. + * + * @generated from field: fits.api.vm.v1.WindowsDisk windows = 5; + */ + value: WindowsDisk; + case: "windows"; + } | { case: undefined; value?: undefined }; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceAddDiskRequest. + * Use `create(VMServiceAddDiskRequestSchema)` to create a new message. + */ +export const VMServiceAddDiskRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 30); + +/** + * Request to change an existing data disk; only size and auto-extend are mutable. + * + * @generated from message fits.api.vm.v1.VMServiceUpdateDiskRequest + */ +export type VMServiceUpdateDiskRequest = Message<"fits.api.vm.v1.VMServiceUpdateDiskRequest"> & { + /** + * UUID of the VM the disk belongs to. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * UUID of the disk to change. + * + * @generated from field: string disk_uuid = 2; + */ + diskUuid: string; + + /** + * Project the VM belongs to. + * + * @generated from field: string project = 3; + */ + project: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 4; + */ + orderNumber: string; + + /** + * New auto-extend behavior; unset keeps the current value. + * + * @generated from field: optional bool auto_extend = 5; + */ + autoExtend?: boolean | undefined; + + /** + * New size of the disk in GB; unset keeps the current value. + * + * @generated from field: optional uint64 size = 6; + */ + size?: bigint | undefined; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceUpdateDiskRequest. + * Use `create(VMServiceUpdateDiskRequestSchema)` to create a new message. + */ +export const VMServiceUpdateDiskRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 31); + +/** + * Request to cancel a data disk. + * + * @generated from message fits.api.vm.v1.VMServiceDeleteDiskRequest + */ +export type VMServiceDeleteDiskRequest = Message<"fits.api.vm.v1.VMServiceDeleteDiskRequest"> & { + /** + * UUID of the VM the disk belongs to. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * UUID of the disk to cancel. + * + * @generated from field: string disk_uuid = 2; + */ + diskUuid: string; + + /** + * Project the VM belongs to. + * + * @generated from field: string project = 3; + */ + project: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 4; + */ + orderNumber: string; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceDeleteDiskRequest. + * Use `create(VMServiceDeleteDiskRequestSchema)` to create a new message. + */ +export const VMServiceDeleteDiskRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 32); + +/** + * Response for AddIP. + * + * @generated from message fits.api.vm.v1.VMServiceAddIPResponse + */ +export type VMServiceAddIPResponse = Message<"fits.api.vm.v1.VMServiceAddIPResponse"> & { +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceAddIPResponse. + * Use `create(VMServiceAddIPResponseSchema)` to create a new message. + */ +export const VMServiceAddIPResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 33); + +/** + * Response for MoveIP. + * + * @generated from message fits.api.vm.v1.VMServiceMoveIPResponse + */ +export type VMServiceMoveIPResponse = Message<"fits.api.vm.v1.VMServiceMoveIPResponse"> & { +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceMoveIPResponse. + * Use `create(VMServiceMoveIPResponseSchema)` to create a new message. + */ +export const VMServiceMoveIPResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 34); + +/** + * Response for DeleteIP. + * + * @generated from message fits.api.vm.v1.VMServiceDeleteIPResponse + */ +export type VMServiceDeleteIPResponse = Message<"fits.api.vm.v1.VMServiceDeleteIPResponse"> & { +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceDeleteIPResponse. + * Use `create(VMServiceDeleteIPResponseSchema)` to create a new message. + */ +export const VMServiceDeleteIPResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 35); + +/** + * Request to order an additional IP address for a VM. + * + * @generated from message fits.api.vm.v1.VMServiceAddIPRequest + */ +export type VMServiceAddIPRequest = Message<"fits.api.vm.v1.VMServiceAddIPRequest"> & { + /** + * UUID of the VM to attach the IP to. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * Project the VM belongs to. + * + * @generated from field: string project = 2; + */ + project: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 3; + */ + orderNumber: string; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceAddIPRequest. + * Use `create(VMServiceAddIPRequestSchema)` to create a new message. + */ +export const VMServiceAddIPRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 36); + +/** + * Request to move an IP address from one VM to another. + * + * @generated from message fits.api.vm.v1.VMServiceMoveIPRequest + */ +export type VMServiceMoveIPRequest = Message<"fits.api.vm.v1.VMServiceMoveIPRequest"> & { + /** + * UUID of the VM the IP currently belongs to. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * UUID of the network interface holding the IP. + * + * @generated from field: string interface_uuid = 2; + */ + interfaceUuid: string; + + /** + * Project the VM belongs to. + * + * @generated from field: string project = 3; + */ + project: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 4; + */ + orderNumber: string; + + /** + * UUID of the VM to move the IP to. + * + * @generated from field: string target_vm_uuid = 5; + */ + targetVmUuid: string; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceMoveIPRequest. + * Use `create(VMServiceMoveIPRequestSchema)` to create a new message. + */ +export const VMServiceMoveIPRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 37); + +/** + * Request to delete an IP address from a VM. + * + * @generated from message fits.api.vm.v1.VMServiceDeleteIPRequest + */ +export type VMServiceDeleteIPRequest = Message<"fits.api.vm.v1.VMServiceDeleteIPRequest"> & { + /** + * UUID of the VM the IP belongs to. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * UUID of the network interface holding the IP. + * + * @generated from field: string interface_uuid = 2; + */ + interfaceUuid: string; + + /** + * Project the VM belongs to. + * + * @generated from field: string project = 3; + */ + project: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 4; + */ + orderNumber: string; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceDeleteIPRequest. + * Use `create(VMServiceDeleteIPRequestSchema)` to create a new message. + */ +export const VMServiceDeleteIPRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 38); + +/** + * Request to validate an AddIP without ordering anything. + * + * @generated from message fits.api.vm.v1.VMServiceValidateAddIPRequest + */ +export type VMServiceValidateAddIPRequest = Message<"fits.api.vm.v1.VMServiceValidateAddIPRequest"> & { + /** + * The add IP request to validate. + * + * @generated from field: fits.api.vm.v1.VMServiceAddIPRequest add_ip = 1; + */ + addIp?: VMServiceAddIPRequest | undefined; +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceValidateAddIPRequest. + * Use `create(VMServiceValidateAddIPRequestSchema)` to create a new message. + */ +export const VMServiceValidateAddIPRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 39); + +/** + * Response for ValidateAddIP; violations are returned as an InvalidArgument error. + * + * @generated from message fits.api.vm.v1.VMServiceValidateAddIPResponse + */ +export type VMServiceValidateAddIPResponse = Message<"fits.api.vm.v1.VMServiceValidateAddIPResponse"> & { +}; + +/** + * Describes the message fits.api.vm.v1.VMServiceValidateAddIPResponse. + * Use `create(VMServiceValidateAddIPResponseSchema)` to create a new message. + */ +export const VMServiceValidateAddIPResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_vm_v1_vm, 40); + +/** + * Availability specifies the availability level of a VM; higher value = higher availability. + * + * @generated from enum fits.api.vm.v1.Availability + */ +export enum Availability { + /** + * AVAILABILITY_UNSPECIFIED is not specified. + * + * @generated from enum value: AVAILABILITY_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * AVAILABILITY_V0 is availability level V0. + * + * @generated from enum value: AVAILABILITY_V0 = 1; + */ + V0 = 1, + + /** + * AVAILABILITY_V1 is availability level V1. + * + * @generated from enum value: AVAILABILITY_V1 = 2; + */ + V1 = 2, + + /** + * AVAILABILITY_V2 is availability level V2. + * + * @generated from enum value: AVAILABILITY_V2 = 3; + */ + V2 = 3, + + /** + * AVAILABILITY_V3 is availability level V3. + * + * @generated from enum value: AVAILABILITY_V3 = 4; + */ + V3 = 4, +} /** - * VMService provides VM CRUD perations. + * Describes the enum fits.api.vm.v1.Availability. + */ +export const AvailabilitySchema: GenEnum = /*@__PURE__*/ + enumDesc(file_fits_api_vm_v1_vm, 0); + +/** + * ServiceClass specifies the service tier of a VM; higher value = higher tier. + * Only certain combinations with Availability are valid. + * + * @generated from enum fits.api.vm.v1.ServiceClass + */ +export enum ServiceClass { + /** + * SERVICE_CLASS_UNSPECIFIED is not specified. + * + * @generated from enum value: SERVICE_CLASS_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * SERVICE_CLASS_SZ1 is service class SZ1. + * + * @generated from enum value: SERVICE_CLASS_SZ1 = 1; + */ + SZ1 = 1, + + /** + * SERVICE_CLASS_SZ2 is service class SZ2. + * + * @generated from enum value: SERVICE_CLASS_SZ2 = 2; + */ + SZ2 = 2, + + /** + * SERVICE_CLASS_SZ3 is service class SZ3. + * + * @generated from enum value: SERVICE_CLASS_SZ3 = 3; + */ + SZ3 = 3, +} + +/** + * Describes the enum fits.api.vm.v1.ServiceClass. + */ +export const ServiceClassSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_fits_api_vm_v1_vm, 1); + +/** + * VMService provides VM CRUD operations. * * @generated from service fits.api.vm.v1.VMService */ @@ -825,6 +1573,107 @@ export const VMService: GenService<{ input: typeof VMServiceDeleteRequestSchema; output: typeof VMServiceDeleteResponseSchema; }, + /** + * Orders an additional data disk for a VM. + * + * @generated from rpc fits.api.vm.v1.VMService.AddDisk + */ + addDisk: { + methodKind: "unary"; + input: typeof VMServiceAddDiskRequestSchema; + output: typeof VMServiceAddDiskResponseSchema; + }, + /** + * Changes the size or auto-extend behavior of an existing data disk. + * + * @generated from rpc fits.api.vm.v1.VMService.UpdateDisk + */ + updateDisk: { + methodKind: "unary"; + input: typeof VMServiceUpdateDiskRequestSchema; + output: typeof VMServiceUpdateDiskResponseSchema; + }, + /** + * Cancels a data disk. + * + * @generated from rpc fits.api.vm.v1.VMService.DeleteDisk + */ + deleteDisk: { + methodKind: "unary"; + input: typeof VMServiceDeleteDiskRequestSchema; + output: typeof VMServiceDeleteDiskResponseSchema; + }, + /** + * Orders an additional IP address for a VM. + * + * @generated from rpc fits.api.vm.v1.VMService.AddIP + */ + addIP: { + methodKind: "unary"; + input: typeof VMServiceAddIPRequestSchema; + output: typeof VMServiceAddIPResponseSchema; + }, + /** + * Moves an IP address from one VM to another. + * + * @generated from rpc fits.api.vm.v1.VMService.MoveIP + */ + moveIP: { + methodKind: "unary"; + input: typeof VMServiceMoveIPRequestSchema; + output: typeof VMServiceMoveIPResponseSchema; + }, + /** + * Deletes an IP address from a VM. + * + * @generated from rpc fits.api.vm.v1.VMService.DeleteIP + */ + deleteIP: { + methodKind: "unary"; + input: typeof VMServiceDeleteIPRequestSchema; + output: typeof VMServiceDeleteIPResponseSchema; + }, + /** + * Validates a VM create request without creating anything. Intended for + * form pre-checks; the create endpoint validates again before executing. + * + * @generated from rpc fits.api.vm.v1.VMService.ValidateCreate + */ + validateCreate: { + methodKind: "unary"; + input: typeof VMServiceValidateCreateRequestSchema; + output: typeof VMServiceValidateCreateResponseSchema; + }, + /** + * Validates an AddDisk request without ordering anything. + * + * @generated from rpc fits.api.vm.v1.VMService.ValidateAddDisk + */ + validateAddDisk: { + methodKind: "unary"; + input: typeof VMServiceValidateAddDiskRequestSchema; + output: typeof VMServiceValidateAddDiskResponseSchema; + }, + /** + * Validates an UpdateDisk request without changing anything. + * + * @generated from rpc fits.api.vm.v1.VMService.ValidateUpdateDisk + */ + validateUpdateDisk: { + methodKind: "unary"; + input: typeof VMServiceValidateUpdateDiskRequestSchema; + output: typeof VMServiceValidateUpdateDiskResponseSchema; + }, + /** + * Validates an AddIP request without ordering anything. + * + * @generated from rpc fits.api.vm.v1.VMService.ValidateAddIP + */ + validateAddIP: { + methodKind: "unary"; + input: typeof VMServiceValidateAddIPRequestSchema; + output: typeof VMServiceValidateAddIPResponseSchema; + }, }> = /*@__PURE__*/ serviceDesc(file_fits_api_vm_v1_vm, 0); diff --git a/proto/fits/api/v1/common.proto b/proto/fits/api/v1/common.proto index 548d276..8daf65c 100644 --- a/proto/fits/api/v1/common.proto +++ b/proto/fits/api/v1/common.proto @@ -160,14 +160,3 @@ enum OptimisticLockingStrategy { // and fetches the most recent entity before updating with the given values with the update request OPTIMISTIC_LOCKING_STRATEGY_SERVER = 2; } - -// ValidationError describes a single validation problem reported by an upstream API. -// Used to surface structured validation errors (e.g. HTTP 422) returned by backends. -message ValidationError { - // Location of the validation error within the request, e.g. ["body", "tenant_uuid"] - repeated string loc = 1; - // Human readable error message - string msg = 2; - // Type of the validation error, e.g. "value_error" - string type = 3; -} diff --git a/proto/fits/api/vm/v1/location.proto b/proto/fits/api/vm/v1/location.proto index b3abc0b..4eb9e37 100644 --- a/proto/fits/api/vm/v1/location.proto +++ b/proto/fits/api/vm/v1/location.proto @@ -6,12 +6,9 @@ import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; -// LocationService lists datacenter locations available for VM instances. -// TODO wurde besprochen am 09.09.26 -// TODO muss zu "Pod" werden. User erstellen eine VM nicht pro location, sondern pro Pod -// TODO Ein Pod ist fest an einer location verankert. +// LocationService lists datacenter locations available for VM instances, scoped per tenant. service LocationService { - // Returns a list of all datacenter locations. + // Returns a list of all datacenter locations available for a tenant. rpc List(LocationServiceListRequest) returns (LocationServiceListResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; @@ -25,15 +22,12 @@ message Location { // Uuid of this location string uuid = 1 [(buf.validate.field).string.uuid = true]; // title of the location - string title = 2; + string title = 2 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } // LocationServiceListRequest is the request payload for a location list request. -// The upstream nulink API accepts no body or parameters, so this is intentionally empty. -// TODO pro tenant anders. FITS darf beide RZ, sonst nur eines, logik dazu in nu-link message LocationServiceListRequest { // Tenant to list available locations for - // TODO Tobias baut in nulink-api ein string tenant = 1 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } diff --git a/proto/fits/api/vm/v1/os.proto b/proto/fits/api/vm/v1/os.proto index d73c22b..53d1bc2 100644 --- a/proto/fits/api/vm/v1/os.proto +++ b/proto/fits/api/vm/v1/os.proto @@ -4,11 +4,11 @@ package fits.api.vm.v1; import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; +import "fits/api/v1/predefined_rules.proto"; // OSService lists operating systems available for VM instances. -// TODO wurde besprochen am 09.09.26 service OSService { - // Returns a list of all OSs. + // Returns a list of all operating systems. rpc List(OSServiceListRequest) returns (OSServiceListResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; @@ -22,26 +22,18 @@ message OS { // Uuid of this OS string uuid = 1 [(buf.validate.field).string.uuid = true]; // Title of the OS - string title = 2; + string title = 2 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; // Type of the OS - string type = 3; + string type = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; // Version of the OS - string version = 4; - - // type NucleusDBOss struct { - // OsTitle string `json:"os_title"` - // OsType string `json:"os_type"` - // OsUuid *openapi_types.UUID `json:"os_uuid,omitempty"` - // OsVersion string `json:"os_version"` - // } + string version = 4 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } // OSServiceListRequest is the request payload for a OS list request. -// The upstream nulink API accepts no body or parameters, so this is intentionally empty. message OSServiceListRequest {} // OSServiceListResponse is the response payload for a OS list request message OSServiceListResponse { - // The available OSs - repeated OS oss = 1; + // The available operating systems + repeated OS operating_systems = 1; } diff --git a/proto/fits/api/vm/v1/stagetype.proto b/proto/fits/api/vm/v1/stagetype.proto index 35bb77f..215a12a 100644 --- a/proto/fits/api/vm/v1/stagetype.proto +++ b/proto/fits/api/vm/v1/stagetype.proto @@ -7,7 +7,6 @@ import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; // StageTypeService lists stage types available for VM instances. -// TODO wurde besprochen am 09.09.26 service StageTypeService { // Returns a list of all stage types available for a tenant. rpc List(StageTypeServiceListRequest) returns (StageTypeServiceListResponse) { @@ -18,7 +17,7 @@ service StageTypeService { } } -// Maps to the upstream NucleusDBStageTypes model. +// StageType is the definition of available stage types. (Development, Test, Integration, Production) message StageType { // Uuid of this stage type string uuid = 1 [(buf.validate.field).string.uuid = true]; @@ -27,11 +26,10 @@ message StageType { } // StageTypeServiceListRequest is the request payload for a stage type list request. -// Maps to the upstream TenantInputModel. message StageTypeServiceListRequest {} // StageTypeServiceListResponse is the response payload for a stage type list request message StageTypeServiceListResponse { // The available stage types - repeated StageType stagetypes = 1; + repeated StageType stage_types = 1; } diff --git a/proto/fits/api/vm/v1/vlan.proto b/proto/fits/api/vm/v1/vlan.proto index 7ff2b7e..085c45b 100644 --- a/proto/fits/api/vm/v1/vlan.proto +++ b/proto/fits/api/vm/v1/vlan.proto @@ -7,7 +7,6 @@ import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; // VLANService lists VLANs avaiable for VM instances. -// TODO wurde besprochen am 09.09.26 service VlanService { // Returns a list of all VLANs available for a tenant. rpc List(VlanServiceListRequest) returns (VlanServiceListResponse) { @@ -19,16 +18,13 @@ service VlanService { } // Vlan is a VLAN that a VM can be connected to. -// Maps to the upstream NucleusDBVlans model. -// TODO evaluate which of the uuid fields are really optional; the upstream API -// spec does not make this clear, so we validate them strictly for now. message Vlan { // Uuid of this VLAN string uuid = 1 [(buf.validate.field).string.uuid = true]; // Id of this VLAN int32 id = 2; // Title of the subnet this VLAN belongs to - string subnet_title = 3; + string subnet_title = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; // CIDR of the subnet this VLAN belongs to string subnet = 4; // Subnetmask of this VLAN @@ -41,52 +37,22 @@ message Vlan { string ip_range_end = 8; // Whether DHCP is used on this VLAN bool use_dhcp = 9; - // Title of the pod this VLAN belongs to - string pod_title = 10; - // Uuid of the pod this VLAN belongs to - string pod_uuid = 11 [(buf.validate.field).string.uuid = true]; - // Title of the stage type of this VLAN - string stage_type_title = 12; + // TODO instead of the pod title, could we have the location_uuid? + optional string location_uuid = 13 [(buf.validate.field).string.uuid = true]; // Uuid of the stage type of this VLAN - string stage_type_uuid = 13 [(buf.validate.field).string.uuid = true]; - // Uuid of the tenant this VLAN belongs to - string tenant_uuid = 14 [(buf.validate.field).string.uuid = true]; - // Title of the tenant this VLAN belongs to - string tenant_title = 15; - - // type NucleusDBVlans struct { - // Gateway string `json:"gateway"` - // IpRangeEnd string `json:"ip_range_end"` - // IpRangeStart string `json:"ip_range_start"` - // PodTitle string `json:"pod_title"` - // PodUuid *openapi_types.UUID `json:"pod_uuid,omitempty"` - // StageTypeTitle string `json:"stage_type_title"` - // StageTypeUuid *openapi_types.UUID `json:"stage_type_uuid,omitempty"` - // Subnet string `json:"subnet"` - // SubnetTitle string `json:"subnet_title"` - // Subnetmask string `json:"subnetmask"` - // TenantTitle string `json:"tenant_title"` - // TenantUuid string `json:"tenant_uuid"` - // UseDhcp bool `json:"use_dhcp"` - // VlanId int `json:"vlan_id"` - // VlanUuid *openapi_types.UUID `json:"vlan_uuid,omitempty"` - // } + string stage_type_uuid = 14 [(buf.validate.field).string.uuid = true]; + // Tenant this VLAN belongs to. + string tenant = 15 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } // VlanServiceListRequest is the request payload for a VLAN list request. -// Maps to the upstream TenantInputModel. message VlanServiceListRequest { // Tenant to list available VLANs for string tenant = 1 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; - // Note: the upstream model also has a requested_by field, which is intentionally - // omitted here because it is added by the auth layer from the request context. } // VlanServiceListResponse is the response payload for a VLAN list request message VlanServiceListResponse { // The available VLANs repeated Vlan vlans = 1; - // Validation errors returned by the upstream API when the request is rejected (HTTP 422) - // TODO this is just a test - repeated fits.api.v1.ValidationError validation_errors = 2; } diff --git a/proto/fits/api/vm/v1/vm.proto b/proto/fits/api/vm/v1/vm.proto index 4cf6423..fdf34ee 100644 --- a/proto/fits/api/vm/v1/vm.proto +++ b/proto/fits/api/vm/v1/vm.proto @@ -7,7 +7,7 @@ import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; import "fits/api/vm/v1/vlan.proto"; -// VMService provides VM CRUD perations. +// VMService provides VM CRUD operations. service VMService { // Returns the VM with the specified UUID. rpc Get(VMServiceGetRequest) returns (VMServiceGetResponse) { @@ -41,167 +41,242 @@ service VMService { option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_INCLUDED; } + // Orders an additional data disk for a VM. + rpc AddDisk(VMServiceAddDiskRequest) returns (VMServiceAddDiskResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.auditing) = AUDITING_INCLUDED; + } + // Changes the size or auto-extend behavior of an existing data disk. + rpc UpdateDisk(VMServiceUpdateDiskRequest) returns (VMServiceUpdateDiskResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.auditing) = AUDITING_INCLUDED; + } + // Cancels a data disk. + rpc DeleteDisk(VMServiceDeleteDiskRequest) returns (VMServiceDeleteDiskResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.auditing) = AUDITING_INCLUDED; + } + // Orders an additional IP address for a VM. + rpc AddIP(VMServiceAddIPRequest) returns (VMServiceAddIPResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.auditing) = AUDITING_INCLUDED; + } + // Moves an IP address from one VM to another. + rpc MoveIP(VMServiceMoveIPRequest) returns (VMServiceMoveIPResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.auditing) = AUDITING_INCLUDED; + } + // Deletes an IP address from a VM. + rpc DeleteIP(VMServiceDeleteIPRequest) returns (VMServiceDeleteIPResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.auditing) = AUDITING_INCLUDED; + } + // Validates a VM create request without creating anything. Intended for + // form pre-checks; the create endpoint validates again before executing. + rpc ValidateCreate(VMServiceValidateCreateRequest) returns (VMServiceValidateCreateResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.auditing) = AUDITING_EXCLUDED; + } + // Validates an AddDisk request without ordering anything. + rpc ValidateAddDisk(VMServiceValidateAddDiskRequest) returns (VMServiceValidateAddDiskResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.auditing) = AUDITING_EXCLUDED; + } + // Validates an UpdateDisk request without changing anything. + rpc ValidateUpdateDisk(VMServiceValidateUpdateDiskRequest) returns (VMServiceValidateUpdateDiskResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.auditing) = AUDITING_EXCLUDED; + } + // Validates an AddIP request without ordering anything. + rpc ValidateAddIP(VMServiceValidateAddIPRequest) returns (VMServiceValidateAddIPResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.auditing) = AUDITING_EXCLUDED; + } +} + +// Availability specifies the availability level of a VM; higher value = higher availability. +enum Availability { + // AVAILABILITY_UNSPECIFIED is not specified. + AVAILABILITY_UNSPECIFIED = 0 [(fits.api.v1.enum_string_value) = ""]; + // AVAILABILITY_V0 is availability level V0. + AVAILABILITY_V0 = 1 [(fits.api.v1.enum_string_value) = "V0"]; + // AVAILABILITY_V1 is availability level V1. + AVAILABILITY_V1 = 2 [(fits.api.v1.enum_string_value) = "V1"]; + // AVAILABILITY_V2 is availability level V2. + AVAILABILITY_V2 = 3 [(fits.api.v1.enum_string_value) = "V2"]; + // AVAILABILITY_V3 is availability level V3. + AVAILABILITY_V3 = 4 [(fits.api.v1.enum_string_value) = "V3"]; +} + +// ServiceClass specifies the service tier of a VM; higher value = higher tier. +// Only certain combinations with Availability are valid. +enum ServiceClass { + // SERVICE_CLASS_UNSPECIFIED is not specified. + SERVICE_CLASS_UNSPECIFIED = 0 [(fits.api.v1.enum_string_value) = ""]; + // SERVICE_CLASS_SZ1 is service class SZ1. + SERVICE_CLASS_SZ1 = 1 [(fits.api.v1.enum_string_value) = "SZ1"]; + // SERVICE_CLASS_SZ2 is service class SZ2. + SERVICE_CLASS_SZ2 = 2 [(fits.api.v1.enum_string_value) = "SZ2"]; + // SERVICE_CLASS_SZ3 is service class SZ3. + SERVICE_CLASS_SZ3 = 3 [(fits.api.v1.enum_string_value) = "SZ3"]; +} + +// Linux-specific VM details. +message LinuxDetails { + // Disks configured on the Linux VM. + repeated LinuxDisk disks = 1; + // UUID of the LDAP directory the VM is integrated with. + string ldap_uuid = 2 [(buf.validate.field).string.uuid = true]; + // Linux-specific FQDN, derived from the name at creation or generated by the backend. + string ldap_fqdn = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; +} + +// Windows-specific VM details. +message WindowsDetails { + // Disks configured on the Windows VM. + repeated WindowsDisk disks = 1; + // UUID of the Windows domain the VM has joined. + string domain_uuid = 2 [(buf.validate.field).string.uuid = true]; + // Windows-specific FQDN, derived from the name at creation or generated by the backend. + string domain_fqdn = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; +} + +// A network interface of a VM. IPv4 only; IPv6 is not yet supported. +message NetworkInterface { + // UUID of this interface. + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // IPv4 address assigned to this interface. + string ipaddress = 2 [(buf.validate.field).string.(fits.api.v1.is_ip_or_hostname) = true]; + // MAC address of this interface. + string macaddress = 3; // TODO: add validation } -// VM Instance Messages // A VM instance as returned by the API. message VMInstance { // UUID of this VM. string uuid = 1 [(buf.validate.field).string.uuid = true]; // Metadata for this VM. - // TODO dates are available in the nulink db, but not passed through yet. + // TODO: dates are available in the nulink db but not passed through yet. fits.api.v1.Meta meta = 2; - // FQDN of the VM. Derived from the optional name set at creation, - // or generated by the backend if none was provided. + // FQDN of the VM, derived from the name at creation or generated by the backend. string fqdn = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; // Tenant this VM belongs to. string tenant = 4 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; // UUID of the project this VM belongs to. string project_uuid = 5 [(buf.validate.field).string.uuid = true]; - // UUID of the operating system image installed on the VM. - // Resolve the human-readable title via the OS endpoint. + // UUID of the OS image installed on the VM; resolve the title via the OS endpoint. string os_uuid = 6 [(buf.validate.field).string.uuid = true]; // UUID of the datacenter location. - // The VM is automatically scheduled into one pod within the chosen location; - // users select the city but not the specific datacenter. + // TODO: not exposed by the upstream (nulink) VM records yet; always empty. string location_uuid = 7 [(buf.validate.field).string.uuid = true]; // TODO: Contact UUID – not yet implemented; open discussion with FCN (#23). string contact_uuid = 8 [(buf.validate.field).string.uuid = true]; - // Number of CPU cores. uint32 cpu = 9; // RAM in GB. uint32 ram = 10; - - // Internal reference number provided by the user, e.g. a ticket ID. - string order_number = 11; - // Whether the order was placed by FITS (true) or self-service by the user (false). - bool contract = 12; - // Whether backup is enabled. - bool backup = 13; - // Availability level: v0, v1, v2, v3 (higher value = higher availability). - string availability = 14; - // Service class: sz1, sz2, sz3 (higher value = higher tier). - string serviceclass = 15; - + // TODO: the upstream (nulink) list/get models do not expose this; always false. + bool backup = 11; // Status of the ongoing operation. - string status = 16; + string status = 12; // Additional information about the current status. - string status_info = 17; - - // OS-specific configuration. Exactly one must be set. + string status_info = 13; + // Availability level. + Availability availability = 14 [(buf.validate.field).enum.defined_only = true]; + // Service class. + ServiceClass serviceclass = 15 [(buf.validate.field).enum.defined_only = true]; + // OS-specific configuration. oneof details { option (buf.validate.oneof).required = true; // Windows-specific settings (domain + disks). - WindowsDetails windows_details = 18; + WindowsDetails windows_details = 16; // Linux-specific settings (LDAP + disks). - LinuxDetails linux_details = 19; + LinuxDetails linux_details = 17; } - // Network interfaces attached to the VM (IPv4 only). - repeated NetworkInterface interfaces = 20; + repeated NetworkInterface interfaces = 18; // VLAN the VM is attached to. - Vlan vlan = 21; -} - -// Linux-specific VM details. -message LinuxDetails { - // Disks configured on the Linux VM. - repeated LinuxDisk disks = 1; - // UUID of the LDAP directory the VM is integrated with. - string ldap_uuid = 2 [(buf.validate.field).string.uuid = true]; - // Linux-specific FQDN. Derived from the optional name set at creation, - // or generated by the backend if none was provided. - string ldap_fqdn = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; -} - -// Windows-specific VM details. -message WindowsDetails { - // Disks configured on the Windows VM. - repeated WindowsDisk disks = 1; - // UUID of the Windows domain the VM has joined. - string domain_uuid = 2 [(buf.validate.field).string.uuid = true]; - // Windows-specific FQDN. Derived from the optional name set at creation, - // or generated by the backend if none was provided. - string domain_fqdn = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; -} - -// A network interface of a VM. IPv4 only; IPv6 is not yet supported. -message NetworkInterface { - // UUID of this interface. - string uuid = 1 [(buf.validate.field).string.uuid = true]; - // IPv4 address assigned to this interface. - string ipaddress = 2 [(buf.validate.field).string.(fits.api.v1.is_ip_or_hostname) = true]; - // MAC address of this interface. - string macaddress = 3; // TODO validation + // TODO: not exposed by the upstream (nulink) VM records yet; always unset. + Vlan vlan = 19; + // Internal reference number provided by the user, e.g. a ticket ID. + string order_number = 20; + // True if the order was placed by FITS, false if self-service. + // TODO: maybe remove this field entirely. + bool contract = 21; } -// Service messages -// VMServiceGetRequest TODO +// Request to get a VM by UUID. message VMServiceGetRequest { - // Uuid of this VM - string uuid = 1 [(buf.validate.field).string.uuid = true]; - // Project where this VM belongs to - string project = 2 [(buf.validate.field).string.uuid = true]; + // UUID of the VM. + optional string uuid = 1 [(buf.validate.field).string.uuid = true]; + // Tenant of the VM. + string tenant = 2 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } -// VMServiceGetResponse TODO +// Response containing the requested VM. message VMServiceGetResponse { - // The VM + // The VM. VMInstance vm = 1; } // Windows-specific create request parts. message VMServiceCreateWindowsRequest { - // UUID of the Windows domain the VM should join. Required. + // UUID of the Windows domain the VM should join. string domain_uuid = 1 [(buf.validate.field).string.uuid = true]; - // Disk configuration for the Windows VM. - WindowsDisk disk = 2; + // Disks for the Windows VM, excluding the OS disk. + repeated WindowsDisk disks = 2 [(buf.validate.field).repeated.min_items = 1]; } // Linux-specific create request parts. message VMServiceCreateLinuxRequest { - // UUID of the LDAP directory the VM should integrate with. Required. + // UUID of the LDAP directory the VM should integrate with. string ldap_uuid = 1 [(buf.validate.field).string.uuid = true]; - // Disk configuration for the Linux VM. - LinuxDisk disk = 2; + // Disks for the Linux VM, excluding the OS disk. + repeated LinuxDisk disks = 2 [(buf.validate.field).repeated.min_items = 1]; } // Request to create a new VM instance. +// TODO: contract, billable and billing_start_date. message VMServiceCreateRequest { - // UUID of the project this VM belongs to. Required. + // UUID of the project this VM belongs to. string project_uuid = 1 [(buf.validate.field).string.uuid = true]; - // Optional name for the VM. The FQDN is derived from this value. + // Optional name; the FQDN is derived from it. optional string name = 2 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; - // UUID of the operating system image to install. Required. + // UUID of the operating system image to install. string os_uuid = 3 [(buf.validate.field).string.uuid = true]; - // UUID of the VLAN network to attach the VM to. Required. - // Obtainable via the VLAN list endpoint. + // UUID of the VLAN network to attach the VM to. string vlan_uuid = 4 [(buf.validate.field).string.uuid = true]; - // UUID of the datacenter location. Required. - // The VM is automatically scheduled into one data center within the chosen location; - // users select the city but not the specific datacenter. + // UUID of the datacenter location; the VM is scheduled into one data center within it. string location_uuid = 5 [(buf.validate.field).string.uuid = true]; - // TODO: Contact UUID – open discussion with FCN on how to model responsible contacts. - // GDPR considerations pending. May become a dedicated /contact endpoint. + // TODO: Contact UUID – open discussion with FCN; may become a dedicated /contact endpoint. string contact_uuid = 6 [(buf.validate.field).string.uuid = true]; // Number of CPU cores. uint32 cpu = 7; // RAM in GB. Must be a power of 2. uint32 ram = 8; - // Internal reference number provided by the user, e.g. a ticket ID. Free text. Required. + // Internal reference number provided by the user, e.g. a ticket ID. + // TODO: can this be optional? string order_number = 9; - // Optional key-value labels for accounting purposes + // Optional key-value labels for accounting purposes. // (e.g. contract number, transaction number, technical key, accounting key). fits.api.v1.Labels labels = 10; - // Whether backup is enabled. Simple on/off toggle; no distinct backup plans. Required. + // Whether backup is enabled. bool backup = 11; - // Availability level: v0, v1, v2, v3 (higher value = higher availability). Required. - string availability = 12; - // Service class: sz1, sz2, sz3 (higher value = higher tier). Required. - // Only certain combinations with availability are valid; enforced by the backend. - string serviceclass = 13; - // Specifies the OS type and its associated configuration. Exactly one must be set. + // Availability level. + Availability availability = 12 [(buf.validate.field).enum.defined_only = true]; + // Service class; only certain combinations with availability are valid. + ServiceClass serviceclass = 13 [(buf.validate.field).enum.defined_only = true]; + // OS type and its configuration. oneof vmtype { option (buf.validate.oneof).required = true; // Windows-specific settings (domain + disk). @@ -213,62 +288,264 @@ message VMServiceCreateRequest { // Disk configuration for a Linux VM. message LinuxDisk { - // If true, the disk grows automatically when space runs low. - bool auto_extend = 1; - // Size of the disk in GB. - optional uint64 size_in_gb = 2; + // UUID of the disk; set for existing disks, unset for new ones. + optional string uuid = 1 [(buf.validate.field).string.uuid = true]; // Label (name) of the disk. - string label = 4; - // Filesystem path where this disk should be mounted (e.g. "/data"). + string label = 2; + // Whether the disk grows automatically when space runs low. + bool auto_extend = 3; + // Size of the disk in GB. + optional uint64 size = 4; + // Mount point (e.g. "/data"). optional string mount_point = 5; } // Disk configuration for a Windows VM. message WindowsDisk { - // If true, the disk grows automatically when space runs low. - bool auto_extend = 1; - // Size of the disk in GB. - optional uint64 size_in_gb = 2; - // Drive letter assigned to this disk (e.g. "D"). - optional string driveletter = 3; + // UUID of the disk; set for existing disks, unset for new ones. + optional string uuid = 1 [(buf.validate.field).string.uuid = true]; // Label (name) of the disk. - string label = 4; + string label = 2; + // Whether the disk grows automatically when space runs low. + bool auto_extend = 3; + // Size of the disk in GB. + optional uint64 size = 4; + // Drive letter (e.g. "D"). + optional string driveletter = 5; } -// VMServiceCreateResponse TODO +// Response for Create; an empty response means the VM was accepted. message VMServiceCreateResponse {} -// VMServiceUpdateRequest TODO +// Request to change a mutable property of an existing VM. +// Exactly one action must be set; each maps onto its own upstream endpoint. +// TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per +// action); combined changes would need +// server-side fan-out without rollback. message VMServiceUpdateRequest { - // Project of the VM - string project_uuid = 1 [(buf.validate.field).string.uuid = true]; + // UUID of the VM to update. + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // Project the VM belongs to. + string project = 2 [(buf.validate.field).string.uuid = true]; + // Order reference for this operation. + // TODO: can this be optional? + string order_number = 3; + // Timestamp and strategy for this update. + fits.api.v1.UpdateMeta update_meta = 4 [(buf.validate.field).required = true]; + // The change to apply. + oneof action { + option (buf.validate.oneof).required = true; + // Change the CPU/RAM performance class. + PerformanceClassChange performance_class = 5; + // Change the service class. + ServiceClassChange service_class = 6; + // Change the contact person. + ContactChange contact = 7; + } +} - // UpdateMeta contains the timestamp and strategy to be used in this update request. - fits.api.v1.UpdateMeta update_meta = 2 [(buf.validate.field).required = true]; +// PerformanceClassChange is the payload for changing a VM's CPU and RAM. +message PerformanceClassChange { + // Number of vCPUs (1-64). + uint32 cpu = 1 [ + (buf.validate.field).uint32.gte = 1, + (buf.validate.field).uint32.lte = 64 + ]; + // RAM size in GB. + uint32 ram = 2 [(buf.validate.field).uint32.gt = 0]; } -// VMServiceUpdateResponse TODO +// ServiceClassChange is the payload for changing a VM's service class. +message ServiceClassChange { + // Target service class. + ServiceClass serviceclass = 1 [(buf.validate.field).enum.defined_only = true]; +} + +// ContactChange is the payload for changing a VM's contact person. +message ContactChange { + // UUID of the new contact. + string contact_uuid = 1 [(buf.validate.field).string.uuid = true]; +} + +// Response for Update; an empty response means the change was accepted. message VMServiceUpdateResponse {} -// VMServiceListRequest +// Request to list VMs. message VMServiceListRequest { - // Tenant of the VM - optional string tenant = 1; - // Project of the VM - optional string project_uuid = 2 [(buf.validate.field).string.uuid = true]; + // Tenant of the VMs. + optional string tenant = 1 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } -// VMServiceListResponse +// Response containing the list of VMs. message VMServiceListResponse { - // List of VM instances + // The VM instances. repeated VMInstance vms = 1; } -// VMServiceDeleteRequest TODO +// Request to cancel a VM instance. message VMServiceDeleteRequest { - // Project of the VM + // Project the VM belongs to. string project = 1 [(buf.validate.field).string.uuid = true]; + // UUID of the VM to delete. + string uuid = 2 [(buf.validate.field).string.uuid = true]; + // Order reference for this operation. + // TODO: can this be optional? + string order_number = 3; } -// VMServiceDeleteResponse TODO +// Response for Delete; an empty response means the cancellation was accepted. message VMServiceDeleteResponse {} + +// Validation messages. +// The Validate* RPCs dry-run the upstream business rules without executing the +// operation; the mutation endpoints validate again before executing. + +// Request to validate a VM create without creating anything. +message VMServiceValidateCreateRequest { + // The create request to validate. + VMServiceCreateRequest create = 1 [(buf.validate.field).required = true]; +} + +// Response for ValidateCreate; violations are returned as an InvalidArgument error. +message VMServiceValidateCreateResponse {} + +// Request to validate an AddDisk without ordering anything. +message VMServiceValidateAddDiskRequest { + // The add disk request to validate. + VMServiceAddDiskRequest add_disk = 1 [(buf.validate.field).required = true]; +} + +// Response for ValidateAddDisk; violations are returned as an InvalidArgument error. +message VMServiceValidateAddDiskResponse {} + +// Request to validate an UpdateDisk without changing anything. +message VMServiceValidateUpdateDiskRequest { + // The update disk request to validate. + VMServiceUpdateDiskRequest update_disk = 1 [(buf.validate.field).required = true]; +} + +// Response for ValidateUpdateDisk; violations are returned as an InvalidArgument error. +message VMServiceValidateUpdateDiskResponse {} + +// Disk lifecycle messages. +// A successful response means the operation was accepted; the affected disks +// can be inspected via Get. + +// Response for AddDisk. +message VMServiceAddDiskResponse {} + +// Response for UpdateDisk. +message VMServiceUpdateDiskResponse {} + +// Response for DeleteDisk. +message VMServiceDeleteDiskResponse {} + +// Request to order an additional data disk for a VM. +message VMServiceAddDiskRequest { + // UUID of the VM to attach the disk to. + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // Project the VM belongs to. + string project = 2 [(buf.validate.field).string.uuid = true]; + // Order reference for this operation. + // TODO: can this be optional? + string order_number = 3; + // OS-specific disk specification; must match the VM's OS type. + oneof disk { + option (buf.validate.oneof).required = true; + // Linux data disk. + LinuxDisk linux = 4; + // Windows data disk. + WindowsDisk windows = 5; + } +} + +// Request to change an existing data disk; only size and auto-extend are mutable. +message VMServiceUpdateDiskRequest { + // UUID of the VM the disk belongs to. + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // UUID of the disk to change. + string disk_uuid = 2 [(buf.validate.field).string.uuid = true]; + // Project the VM belongs to. + string project = 3 [(buf.validate.field).string.uuid = true]; + // Order reference for this operation. + // TODO: can this be optional? + string order_number = 4; + // New auto-extend behavior; unset keeps the current value. + optional bool auto_extend = 5; + // New size of the disk in GB; unset keeps the current value. + optional uint64 size = 6; +} + +// Request to cancel a data disk. +message VMServiceDeleteDiskRequest { + // UUID of the VM the disk belongs to. + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // UUID of the disk to cancel. + string disk_uuid = 2 [(buf.validate.field).string.uuid = true]; + // Project the VM belongs to. + string project = 3 [(buf.validate.field).string.uuid = true]; + // Order reference for this operation. + // TODO: can this be optional? + string order_number = 4; +} + +// IP lifecycle messages. +// A successful response means the operation was accepted; the affected +// interfaces can be inspected via Get. + +// Response for AddIP. +message VMServiceAddIPResponse {} + +// Response for MoveIP. +message VMServiceMoveIPResponse {} + +// Response for DeleteIP. +message VMServiceDeleteIPResponse {} + +// Request to order an additional IP address for a VM. +message VMServiceAddIPRequest { + // UUID of the VM to attach the IP to. + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // Project the VM belongs to. + string project = 2 [(buf.validate.field).string.uuid = true]; + // Order reference for this operation. + // TODO: can this be optional? + string order_number = 3; +} + +// Request to move an IP address from one VM to another. +message VMServiceMoveIPRequest { + // UUID of the VM the IP currently belongs to. + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // UUID of the network interface holding the IP. + string interface_uuid = 2 [(buf.validate.field).string.uuid = true]; + // Project the VM belongs to. + string project = 3 [(buf.validate.field).string.uuid = true]; + // Order reference for this operation. + // TODO: can this be optional? + string order_number = 4; + // UUID of the VM to move the IP to. + string target_vm_uuid = 5 [(buf.validate.field).string.uuid = true]; +} + +// Request to delete an IP address from a VM. +message VMServiceDeleteIPRequest { + // UUID of the VM the IP belongs to. + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // UUID of the network interface holding the IP. + string interface_uuid = 2 [(buf.validate.field).string.uuid = true]; + // Project the VM belongs to. + string project = 3 [(buf.validate.field).string.uuid = true]; + // Order reference for this operation. + // TODO: can this be optional? + string order_number = 4; +} + +// Request to validate an AddIP without ordering anything. +message VMServiceValidateAddIPRequest { + // The add IP request to validate. + VMServiceAddIPRequest add_ip = 1 [(buf.validate.field).required = true]; +} + +// Response for ValidateAddIP; violations are returned as an InvalidArgument error. +message VMServiceValidateAddIPResponse {} diff --git a/python/fits/api/v1/common_pb2.py b/python/fits/api/v1/common_pb2.py index 3ffe7cb..c63376a 100644 --- a/python/fits/api/v1/common_pb2.py +++ b/python/fits/api/v1/common_pb2.py @@ -28,7 +28,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66its/api/v1/common.proto\x12\x0b\x66its.api.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a google/protobuf/descriptor.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"O\n\x06Paging\x12\x17\n\x04page\x18\x01 \x01(\x04H\x00R\x04page\x88\x01\x01\x12\x19\n\x05\x63ount\x18\x02 \x01(\x04H\x01R\x05\x63ount\x88\x01\x01\x42\x07\n\x05_pageB\x08\n\x06_count\"\x9c\x01\n\x06Labels\x12W\n\x06labels\x18\x01 \x03(\x0b\x32\x1f.fits.api.v1.Labels.LabelsEntryB\x1e\xbaH\x1b\x9a\x01\x18\"\x07r\x05\x10\x01\x18\x80\x02*\x07r\x05\x10\x00\x18\x80\x02\xb8\x95\xb8\xb1\x02\x01R\x06labels\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xd9\x01\n\x04Meta\x12\x30\n\x06labels\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.LabelsH\x00R\x06labels\x88\x01\x01\x12\x39\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x1e\n\ngeneration\x18\x04 \x01(\x04R\ngenerationB\t\n\x07_labels\"S\n\x0cUpdateLabels\x12+\n\x06update\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06update\x12\x16\n\x06remove\x18\x02 \x03(\tR\x06remove\"\xa4\x01\n\nUpdateMeta\x12\x39\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12[\n\x10locking_strategy\x18\x02 \x01(\x0e\x32&.fits.api.v1.OptimisticLockingStrategyB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0flockingStrategy\"I\n\x0fValidationError\x12\x10\n\x03loc\x18\x01 \x03(\tR\x03loc\x12\x10\n\x03msg\x18\x02 \x01(\tR\x03msg\x12\x12\n\x04type\x18\x03 \x01(\tR\x04type*\x87\x01\n\nTenantRole\x12\x1b\n\x17TENANT_ROLE_UNSPECIFIED\x10\x00\x12\x15\n\x11TENANT_ROLE_OWNER\x10\x01\x12\x16\n\x12TENANT_ROLE_EDITOR\x10\x02\x12\x16\n\x12TENANT_ROLE_VIEWER\x10\x03\x12\x15\n\x11TENANT_ROLE_GUEST\x10\x04*u\n\x0bProjectRole\x12\x1c\n\x18PROJECT_ROLE_UNSPECIFIED\x10\x00\x12\x16\n\x12PROJECT_ROLE_OWNER\x10\x01\x12\x17\n\x13PROJECT_ROLE_EDITOR\x10\x02\x12\x17\n\x13PROJECT_ROLE_VIEWER\x10\x03*U\n\tAdminRole\x12\x1a\n\x16\x41\x44MIN_ROLE_UNSPECIFIED\x10\x00\x12\x15\n\x11\x41\x44MIN_ROLE_EDITOR\x10\x01\x12\x15\n\x11\x41\x44MIN_ROLE_VIEWER\x10\x02*T\n\nVisibility\x12\x1a\n\x16VISIBILITY_UNSPECIFIED\x10\x00\x12\x15\n\x11VISIBILITY_PUBLIC\x10\x01\x12\x13\n\x0fVISIBILITY_SELF\x10\x02*R\n\x08\x41uditing\x12\x18\n\x14\x41UDITING_UNSPECIFIED\x10\x00\x12\x15\n\x11\x41UDITING_INCLUDED\x10\x01\x12\x15\n\x11\x41UDITING_EXCLUDED\x10\x02*\x98\x01\n\x19OptimisticLockingStrategy\x12+\n\'OPTIMISTIC_LOCKING_STRATEGY_UNSPECIFIED\x10\x00\x12&\n\"OPTIMISTIC_LOCKING_STRATEGY_CLIENT\x10\x01\x12&\n\"OPTIMISTIC_LOCKING_STRATEGY_SERVER\x10\x02:\\\n\x0ctenant_roles\x12\x1e.google.protobuf.MethodOptions\x18\xb8\x8e\x03 \x03(\x0e\x32\x17.fits.api.v1.TenantRoleR\x0btenantRoles:_\n\rproject_roles\x12\x1e.google.protobuf.MethodOptions\x18\xb9\x8e\x03 \x03(\x0e\x32\x18.fits.api.v1.ProjectRoleR\x0cprojectRoles:Y\n\x0b\x61\x64min_roles\x12\x1e.google.protobuf.MethodOptions\x18\xba\x8e\x03 \x03(\x0e\x32\x16.fits.api.v1.AdminRoleR\nadminRoles:Y\n\nvisibility\x12\x1e.google.protobuf.MethodOptions\x18\xbb\x8e\x03 \x01(\x0e\x32\x17.fits.api.v1.VisibilityR\nvisibility:S\n\x08\x61uditing\x12\x1e.google.protobuf.MethodOptions\x18\xbc\x8e\x03 \x01(\x0e\x32\x15.fits.api.v1.AuditingR\x08\x61uditing:O\n\x11\x65num_string_value\x12!.google.protobuf.EnumValueOptions\x18\xa0\x96\x03 \x01(\tR\x0f\x65numStringValueB\x97\x01\n\x0f\x63om.fits.api.v1B\x0b\x43ommonProtoP\x01Z)github.com/fi-ts/api/go/fits/api/v1;apiv1\xa2\x02\x03\x46\x41X\xaa\x02\x0b\x46its.Api.V1\xca\x02\x0b\x46its\\Api\\V1\xe2\x02\x17\x46its\\Api\\V1\\GPBMetadata\xea\x02\rFits::Api::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66its/api/v1/common.proto\x12\x0b\x66its.api.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a google/protobuf/descriptor.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"O\n\x06Paging\x12\x17\n\x04page\x18\x01 \x01(\x04H\x00R\x04page\x88\x01\x01\x12\x19\n\x05\x63ount\x18\x02 \x01(\x04H\x01R\x05\x63ount\x88\x01\x01\x42\x07\n\x05_pageB\x08\n\x06_count\"\x9c\x01\n\x06Labels\x12W\n\x06labels\x18\x01 \x03(\x0b\x32\x1f.fits.api.v1.Labels.LabelsEntryB\x1e\xbaH\x1b\x9a\x01\x18\"\x07r\x05\x10\x01\x18\x80\x02*\x07r\x05\x10\x00\x18\x80\x02\xb8\x95\xb8\xb1\x02\x01R\x06labels\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xd9\x01\n\x04Meta\x12\x30\n\x06labels\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.LabelsH\x00R\x06labels\x88\x01\x01\x12\x39\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x1e\n\ngeneration\x18\x04 \x01(\x04R\ngenerationB\t\n\x07_labels\"S\n\x0cUpdateLabels\x12+\n\x06update\x18\x01 \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06update\x12\x16\n\x06remove\x18\x02 \x03(\tR\x06remove\"\xa4\x01\n\nUpdateMeta\x12\x39\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12[\n\x10locking_strategy\x18\x02 \x01(\x0e\x32&.fits.api.v1.OptimisticLockingStrategyB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0flockingStrategy*\x87\x01\n\nTenantRole\x12\x1b\n\x17TENANT_ROLE_UNSPECIFIED\x10\x00\x12\x15\n\x11TENANT_ROLE_OWNER\x10\x01\x12\x16\n\x12TENANT_ROLE_EDITOR\x10\x02\x12\x16\n\x12TENANT_ROLE_VIEWER\x10\x03\x12\x15\n\x11TENANT_ROLE_GUEST\x10\x04*u\n\x0bProjectRole\x12\x1c\n\x18PROJECT_ROLE_UNSPECIFIED\x10\x00\x12\x16\n\x12PROJECT_ROLE_OWNER\x10\x01\x12\x17\n\x13PROJECT_ROLE_EDITOR\x10\x02\x12\x17\n\x13PROJECT_ROLE_VIEWER\x10\x03*U\n\tAdminRole\x12\x1a\n\x16\x41\x44MIN_ROLE_UNSPECIFIED\x10\x00\x12\x15\n\x11\x41\x44MIN_ROLE_EDITOR\x10\x01\x12\x15\n\x11\x41\x44MIN_ROLE_VIEWER\x10\x02*T\n\nVisibility\x12\x1a\n\x16VISIBILITY_UNSPECIFIED\x10\x00\x12\x15\n\x11VISIBILITY_PUBLIC\x10\x01\x12\x13\n\x0fVISIBILITY_SELF\x10\x02*R\n\x08\x41uditing\x12\x18\n\x14\x41UDITING_UNSPECIFIED\x10\x00\x12\x15\n\x11\x41UDITING_INCLUDED\x10\x01\x12\x15\n\x11\x41UDITING_EXCLUDED\x10\x02*\x98\x01\n\x19OptimisticLockingStrategy\x12+\n\'OPTIMISTIC_LOCKING_STRATEGY_UNSPECIFIED\x10\x00\x12&\n\"OPTIMISTIC_LOCKING_STRATEGY_CLIENT\x10\x01\x12&\n\"OPTIMISTIC_LOCKING_STRATEGY_SERVER\x10\x02:\\\n\x0ctenant_roles\x12\x1e.google.protobuf.MethodOptions\x18\xb8\x8e\x03 \x03(\x0e\x32\x17.fits.api.v1.TenantRoleR\x0btenantRoles:_\n\rproject_roles\x12\x1e.google.protobuf.MethodOptions\x18\xb9\x8e\x03 \x03(\x0e\x32\x18.fits.api.v1.ProjectRoleR\x0cprojectRoles:Y\n\x0b\x61\x64min_roles\x12\x1e.google.protobuf.MethodOptions\x18\xba\x8e\x03 \x03(\x0e\x32\x16.fits.api.v1.AdminRoleR\nadminRoles:Y\n\nvisibility\x12\x1e.google.protobuf.MethodOptions\x18\xbb\x8e\x03 \x01(\x0e\x32\x17.fits.api.v1.VisibilityR\nvisibility:S\n\x08\x61uditing\x12\x1e.google.protobuf.MethodOptions\x18\xbc\x8e\x03 \x01(\x0e\x32\x15.fits.api.v1.AuditingR\x08\x61uditing:O\n\x11\x65num_string_value\x12!.google.protobuf.EnumValueOptions\x18\xa0\x96\x03 \x01(\tR\x0f\x65numStringValueB\x97\x01\n\x0f\x63om.fits.api.v1B\x0b\x43ommonProtoP\x01Z)github.com/fi-ts/api/go/fits/api/v1;apiv1\xa2\x02\x03\x46\x41X\xaa\x02\x0b\x46its.Api.V1\xca\x02\x0b\x46its\\Api\\V1\xe2\x02\x17\x46its\\Api\\V1\\GPBMetadata\xea\x02\rFits::Api::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -42,18 +42,18 @@ _globals['_LABELS'].fields_by_name['labels']._serialized_options = b'\272H\033\232\001\030\"\007r\005\020\001\030\200\002*\007r\005\020\000\030\200\002\270\225\270\261\002\001' _globals['_UPDATEMETA'].fields_by_name['locking_strategy']._loaded_options = None _globals['_UPDATEMETA'].fields_by_name['locking_strategy']._serialized_options = b'\272H\005\202\001\002\020\001' - _globals['_TENANTROLE']._serialized_start=961 - _globals['_TENANTROLE']._serialized_end=1096 - _globals['_PROJECTROLE']._serialized_start=1098 - _globals['_PROJECTROLE']._serialized_end=1215 - _globals['_ADMINROLE']._serialized_start=1217 - _globals['_ADMINROLE']._serialized_end=1302 - _globals['_VISIBILITY']._serialized_start=1304 - _globals['_VISIBILITY']._serialized_end=1388 - _globals['_AUDITING']._serialized_start=1390 - _globals['_AUDITING']._serialized_end=1472 - _globals['_OPTIMISTICLOCKINGSTRATEGY']._serialized_start=1475 - _globals['_OPTIMISTICLOCKINGSTRATEGY']._serialized_end=1627 + _globals['_TENANTROLE']._serialized_start=886 + _globals['_TENANTROLE']._serialized_end=1021 + _globals['_PROJECTROLE']._serialized_start=1023 + _globals['_PROJECTROLE']._serialized_end=1140 + _globals['_ADMINROLE']._serialized_start=1142 + _globals['_ADMINROLE']._serialized_end=1227 + _globals['_VISIBILITY']._serialized_start=1229 + _globals['_VISIBILITY']._serialized_end=1313 + _globals['_AUDITING']._serialized_start=1315 + _globals['_AUDITING']._serialized_end=1397 + _globals['_OPTIMISTICLOCKINGSTRATEGY']._serialized_start=1400 + _globals['_OPTIMISTICLOCKINGSTRATEGY']._serialized_end=1552 _globals['_PAGING']._serialized_start=173 _globals['_PAGING']._serialized_end=252 _globals['_LABELS']._serialized_start=255 @@ -66,6 +66,4 @@ _globals['_UPDATELABELS']._serialized_end=716 _globals['_UPDATEMETA']._serialized_start=719 _globals['_UPDATEMETA']._serialized_end=883 - _globals['_VALIDATIONERROR']._serialized_start=885 - _globals['_VALIDATIONERROR']._serialized_end=958 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/v1/common_pb2.pyi b/python/fits/api/v1/common_pb2.pyi index ba65107..7c205e5 100644 --- a/python/fits/api/v1/common_pb2.pyi +++ b/python/fits/api/v1/common_pb2.pyi @@ -133,13 +133,3 @@ class UpdateMeta(_message.Message): updated_at: _timestamp_pb2.Timestamp locking_strategy: OptimisticLockingStrategy def __init__(self, updated_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., locking_strategy: _Optional[_Union[OptimisticLockingStrategy, str]] = ...) -> None: ... - -class ValidationError(_message.Message): - __slots__ = ("loc", "msg", "type") - LOC_FIELD_NUMBER: _ClassVar[int] - MSG_FIELD_NUMBER: _ClassVar[int] - TYPE_FIELD_NUMBER: _ClassVar[int] - loc: _containers.RepeatedScalarFieldContainer[str] - msg: str - type: str - def __init__(self, loc: _Optional[_Iterable[str]] = ..., msg: _Optional[str] = ..., type: _Optional[str] = ...) -> None: ... diff --git a/python/fits/api/vm/v1/location_pb2.py b/python/fits/api/vm/v1/location_pb2.py index 239ca58..a2f6e1c 100644 --- a/python/fits/api/vm/v1/location_pb2.py +++ b/python/fits/api/vm/v1/location_pb2.py @@ -27,7 +27,7 @@ from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x66its/api/vm/v1/location.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\">\n\x08Location\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n\x05title\x18\x02 \x01(\tR\x05title\"A\n\x1aLocationServiceListRequest\x12#\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"U\n\x1bLocationServiceListResponse\x12\x36\n\tlocations\x18\x01 \x03(\x0b\x32\x18.fits.api.vm.v1.LocationR\tlocations2\x7f\n\x0fLocationService\x12l\n\x04List\x12*.fits.api.vm.v1.LocationServiceListRequest\x1a+.fits.api.vm.v1.LocationServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xab\x01\n\x12\x63om.fits.api.vm.v1B\rLocationProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x66its/api/vm/v1/location.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"K\n\x08Location\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x05title\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\"A\n\x1aLocationServiceListRequest\x12#\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"U\n\x1bLocationServiceListResponse\x12\x36\n\tlocations\x18\x01 \x03(\x0b\x32\x18.fits.api.vm.v1.LocationR\tlocations2\x7f\n\x0fLocationService\x12l\n\x04List\x12*.fits.api.vm.v1.LocationServiceListRequest\x1a+.fits.api.vm.v1.LocationServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xab\x01\n\x12\x63om.fits.api.vm.v1B\rLocationProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -37,16 +37,18 @@ _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\rLocationProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' _globals['_LOCATION'].fields_by_name['uuid']._loaded_options = None _globals['_LOCATION'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_LOCATION'].fields_by_name['title']._loaded_options = None + _globals['_LOCATION'].fields_by_name['title']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_LOCATIONSERVICELISTREQUEST'].fields_by_name['tenant']._loaded_options = None _globals['_LOCATIONSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_LOCATIONSERVICE'].methods_by_name['List']._loaded_options = None _globals['_LOCATIONSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' _globals['_LOCATION']._serialized_start=140 - _globals['_LOCATION']._serialized_end=202 - _globals['_LOCATIONSERVICELISTREQUEST']._serialized_start=204 - _globals['_LOCATIONSERVICELISTREQUEST']._serialized_end=269 - _globals['_LOCATIONSERVICELISTRESPONSE']._serialized_start=271 - _globals['_LOCATIONSERVICELISTRESPONSE']._serialized_end=356 - _globals['_LOCATIONSERVICE']._serialized_start=358 - _globals['_LOCATIONSERVICE']._serialized_end=485 + _globals['_LOCATION']._serialized_end=215 + _globals['_LOCATIONSERVICELISTREQUEST']._serialized_start=217 + _globals['_LOCATIONSERVICELISTREQUEST']._serialized_end=282 + _globals['_LOCATIONSERVICELISTRESPONSE']._serialized_start=284 + _globals['_LOCATIONSERVICELISTRESPONSE']._serialized_end=369 + _globals['_LOCATIONSERVICE']._serialized_start=371 + _globals['_LOCATIONSERVICE']._serialized_end=498 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/os_pb2.py b/python/fits/api/vm/v1/os_pb2.py index e29ddda..cd46a80 100644 --- a/python/fits/api/vm/v1/os_pb2.py +++ b/python/fits/api/vm/v1/os_pb2.py @@ -24,9 +24,10 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 +from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/os.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\"f\n\x02OS\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x14\n\x05title\x18\x02 \x01(\tR\x05title\x12\x12\n\x04type\x18\x03 \x01(\tR\x04type\x12\x18\n\x07version\x18\x04 \x01(\tR\x07version\"\x16\n\x14OSServiceListRequest\"=\n\x15OSServiceListResponse\x12$\n\x03oss\x18\x01 \x03(\x0b\x32\x12.fits.api.vm.v1.OSR\x03oss2m\n\tOSService\x12`\n\x04List\x12$.fits.api.vm.v1.OSServiceListRequest\x1a%.fits.api.vm.v1.OSServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07OsProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/os.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x8d\x01\n\x02OS\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x05title\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\x12\x1f\n\x04type\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04type\x12%\n\x07version\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07version\"\x16\n\x14OSServiceListRequest\"X\n\x15OSServiceListResponse\x12?\n\x11operating_systems\x18\x01 \x03(\x0b\x32\x12.fits.api.vm.v1.OSR\x10operatingSystems2m\n\tOSService\x12`\n\x04List\x12$.fits.api.vm.v1.OSServiceListRequest\x1a%.fits.api.vm.v1.OSServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07OsProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -36,14 +37,20 @@ _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\007OsProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' _globals['_OS'].fields_by_name['uuid']._loaded_options = None _globals['_OS'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_OS'].fields_by_name['title']._loaded_options = None + _globals['_OS'].fields_by_name['title']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_OS'].fields_by_name['type']._loaded_options = None + _globals['_OS'].fields_by_name['type']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_OS'].fields_by_name['version']._loaded_options = None + _globals['_OS'].fields_by_name['version']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_OSSERVICE'].methods_by_name['List']._loaded_options = None _globals['_OSSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' - _globals['_OS']._serialized_start=98 - _globals['_OS']._serialized_end=200 - _globals['_OSSERVICELISTREQUEST']._serialized_start=202 - _globals['_OSSERVICELISTREQUEST']._serialized_end=224 - _globals['_OSSERVICELISTRESPONSE']._serialized_start=226 - _globals['_OSSERVICELISTRESPONSE']._serialized_end=287 - _globals['_OSSERVICE']._serialized_start=289 - _globals['_OSSERVICE']._serialized_end=398 + _globals['_OS']._serialized_start=135 + _globals['_OS']._serialized_end=276 + _globals['_OSSERVICELISTREQUEST']._serialized_start=278 + _globals['_OSSERVICELISTREQUEST']._serialized_end=300 + _globals['_OSSERVICELISTRESPONSE']._serialized_start=302 + _globals['_OSSERVICELISTRESPONSE']._serialized_end=390 + _globals['_OSSERVICE']._serialized_start=392 + _globals['_OSSERVICE']._serialized_end=501 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/os_pb2.pyi b/python/fits/api/vm/v1/os_pb2.pyi index 30f3157..6be1e88 100644 --- a/python/fits/api/vm/v1/os_pb2.pyi +++ b/python/fits/api/vm/v1/os_pb2.pyi @@ -1,5 +1,6 @@ from buf.validate import validate_pb2 as _validate_pb2 from fits.api.v1 import common_pb2 as _common_pb2 +from fits.api.v1 import predefined_rules_pb2 as _predefined_rules_pb2 from google.protobuf.internal import containers as _containers from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message @@ -25,7 +26,7 @@ class OSServiceListRequest(_message.Message): def __init__(self) -> None: ... class OSServiceListResponse(_message.Message): - __slots__ = ("oss",) - OSS_FIELD_NUMBER: _ClassVar[int] - oss: _containers.RepeatedCompositeFieldContainer[OS] - def __init__(self, oss: _Optional[_Iterable[_Union[OS, _Mapping]]] = ...) -> None: ... + __slots__ = ("operating_systems",) + OPERATING_SYSTEMS_FIELD_NUMBER: _ClassVar[int] + operating_systems: _containers.RepeatedCompositeFieldContainer[OS] + def __init__(self, operating_systems: _Optional[_Iterable[_Union[OS, _Mapping]]] = ...) -> None: ... diff --git a/python/fits/api/vm/v1/stagetype_pb2.py b/python/fits/api/vm/v1/stagetype_pb2.py index eff1eaa..e8cb180 100644 --- a/python/fits/api/vm/v1/stagetype_pb2.py +++ b/python/fits/api/vm/v1/stagetype_pb2.py @@ -27,7 +27,7 @@ from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x66its/api/vm/v1/stagetype.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"L\n\tStageType\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x05title\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\"\x1d\n\x1bStageTypeServiceListRequest\"Y\n\x1cStageTypeServiceListResponse\x12\x39\n\nstagetypes\x18\x01 \x03(\x0b\x32\x19.fits.api.vm.v1.StageTypeR\nstagetypes2\x82\x01\n\x10StageTypeService\x12n\n\x04List\x12+.fits.api.vm.v1.StageTypeServiceListRequest\x1a,.fits.api.vm.v1.StageTypeServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xac\x01\n\x12\x63om.fits.api.vm.v1B\x0eStagetypeProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x66its/api/vm/v1/stagetype.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"L\n\tStageType\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x05title\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\"\x1d\n\x1bStageTypeServiceListRequest\"Z\n\x1cStageTypeServiceListResponse\x12:\n\x0bstage_types\x18\x01 \x03(\x0b\x32\x19.fits.api.vm.v1.StageTypeR\nstageTypes2\x82\x01\n\x10StageTypeService\x12n\n\x04List\x12+.fits.api.vm.v1.StageTypeServiceListRequest\x1a,.fits.api.vm.v1.StageTypeServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xac\x01\n\x12\x63om.fits.api.vm.v1B\x0eStagetypeProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -46,7 +46,7 @@ _globals['_STAGETYPESERVICELISTREQUEST']._serialized_start=219 _globals['_STAGETYPESERVICELISTREQUEST']._serialized_end=248 _globals['_STAGETYPESERVICELISTRESPONSE']._serialized_start=250 - _globals['_STAGETYPESERVICELISTRESPONSE']._serialized_end=339 - _globals['_STAGETYPESERVICE']._serialized_start=342 - _globals['_STAGETYPESERVICE']._serialized_end=472 + _globals['_STAGETYPESERVICELISTRESPONSE']._serialized_end=340 + _globals['_STAGETYPESERVICE']._serialized_start=343 + _globals['_STAGETYPESERVICE']._serialized_end=473 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/stagetype_pb2.pyi b/python/fits/api/vm/v1/stagetype_pb2.pyi index a253252..0e26a78 100644 --- a/python/fits/api/vm/v1/stagetype_pb2.pyi +++ b/python/fits/api/vm/v1/stagetype_pb2.pyi @@ -22,7 +22,7 @@ class StageTypeServiceListRequest(_message.Message): def __init__(self) -> None: ... class StageTypeServiceListResponse(_message.Message): - __slots__ = ("stagetypes",) - STAGETYPES_FIELD_NUMBER: _ClassVar[int] - stagetypes: _containers.RepeatedCompositeFieldContainer[StageType] - def __init__(self, stagetypes: _Optional[_Iterable[_Union[StageType, _Mapping]]] = ...) -> None: ... + __slots__ = ("stage_types",) + STAGE_TYPES_FIELD_NUMBER: _ClassVar[int] + stage_types: _containers.RepeatedCompositeFieldContainer[StageType] + def __init__(self, stage_types: _Optional[_Iterable[_Union[StageType, _Mapping]]] = ...) -> None: ... diff --git a/python/fits/api/vm/v1/vlan_pb2.py b/python/fits/api/vm/v1/vlan_pb2.py index fd4b32a..74c13b7 100644 --- a/python/fits/api/vm/v1/vlan_pb2.py +++ b/python/fits/api/vm/v1/vlan_pb2.py @@ -27,7 +27,7 @@ from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/vm/v1/vlan.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xf8\x03\n\x04Vlan\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x0e\n\x02id\x18\x02 \x01(\x05R\x02id\x12!\n\x0csubnet_title\x18\x03 \x01(\tR\x0bsubnetTitle\x12\x16\n\x06subnet\x18\x04 \x01(\tR\x06subnet\x12\x1e\n\nsubnetmask\x18\x05 \x01(\tR\nsubnetmask\x12\x18\n\x07gateway\x18\x06 \x01(\tR\x07gateway\x12$\n\x0eip_range_start\x18\x07 \x01(\tR\x0cipRangeStart\x12 \n\x0cip_range_end\x18\x08 \x01(\tR\nipRangeEnd\x12\x19\n\x08use_dhcp\x18\t \x01(\x08R\x07useDhcp\x12\x1b\n\tpod_title\x18\n \x01(\tR\x08podTitle\x12#\n\x08pod_uuid\x18\x0b \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07podUuid\x12(\n\x10stage_type_title\x18\x0c \x01(\tR\x0estageTypeTitle\x12\x30\n\x0fstage_type_uuid\x18\r \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12)\n\x0btenant_uuid\x18\x0e \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ntenantUuid\x12!\n\x0ctenant_title\x18\x0f \x01(\tR\x0btenantTitle\"=\n\x16VlanServiceListRequest\x12#\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"\x90\x01\n\x17VlanServiceListResponse\x12*\n\x05vlans\x18\x01 \x03(\x0b\x32\x14.fits.api.vm.v1.VlanR\x05vlans\x12I\n\x11validation_errors\x18\x02 \x03(\x0b\x32\x1c.fits.api.v1.ValidationErrorR\x10validationErrors2s\n\x0bVlanService\x12\x64\n\x04List\x12&.fits.api.vm.v1.VlanServiceListRequest\x1a\'.fits.api.vm.v1.VlanServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xa7\x01\n\x12\x63om.fits.api.vm.v1B\tVlanProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/vm/v1/vlan.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xb6\x03\n\x04Vlan\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x0e\n\x02id\x18\x02 \x01(\x05R\x02id\x12.\n\x0csubnet_title\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x0bsubnetTitle\x12\x16\n\x06subnet\x18\x04 \x01(\tR\x06subnet\x12\x1e\n\nsubnetmask\x18\x05 \x01(\tR\nsubnetmask\x12\x18\n\x07gateway\x18\x06 \x01(\tR\x07gateway\x12$\n\x0eip_range_start\x18\x07 \x01(\tR\x0cipRangeStart\x12 \n\x0cip_range_end\x18\x08 \x01(\tR\nipRangeEnd\x12\x19\n\x08use_dhcp\x18\t \x01(\x08R\x07useDhcp\x12\x32\n\rlocation_uuid\x18\r \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x0clocationUuid\x88\x01\x01\x12\x30\n\x0fstage_type_uuid\x18\x0e \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12#\n\x06tenant\x18\x0f \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x10\n\x0e_location_uuid\"=\n\x16VlanServiceListRequest\x12#\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"E\n\x17VlanServiceListResponse\x12*\n\x05vlans\x18\x01 \x03(\x0b\x32\x14.fits.api.vm.v1.VlanR\x05vlans2s\n\x0bVlanService\x12\x64\n\x04List\x12&.fits.api.vm.v1.VlanServiceListRequest\x1a\'.fits.api.vm.v1.VlanServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xa7\x01\n\x12\x63om.fits.api.vm.v1B\tVlanProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -37,22 +37,24 @@ _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\tVlanProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' _globals['_VLAN'].fields_by_name['uuid']._loaded_options = None _globals['_VLAN'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VLAN'].fields_by_name['pod_uuid']._loaded_options = None - _globals['_VLAN'].fields_by_name['pod_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VLAN'].fields_by_name['subnet_title']._loaded_options = None + _globals['_VLAN'].fields_by_name['subnet_title']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_VLAN'].fields_by_name['location_uuid']._loaded_options = None + _globals['_VLAN'].fields_by_name['location_uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VLAN'].fields_by_name['stage_type_uuid']._loaded_options = None _globals['_VLAN'].fields_by_name['stage_type_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VLAN'].fields_by_name['tenant_uuid']._loaded_options = None - _globals['_VLAN'].fields_by_name['tenant_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VLAN'].fields_by_name['tenant']._loaded_options = None + _globals['_VLAN'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_VLANSERVICELISTREQUEST'].fields_by_name['tenant']._loaded_options = None _globals['_VLANSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_VLANSERVICE'].methods_by_name['List']._loaded_options = None _globals['_VLANSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' _globals['_VLAN']._serialized_start=137 - _globals['_VLAN']._serialized_end=641 - _globals['_VLANSERVICELISTREQUEST']._serialized_start=643 - _globals['_VLANSERVICELISTREQUEST']._serialized_end=704 - _globals['_VLANSERVICELISTRESPONSE']._serialized_start=707 - _globals['_VLANSERVICELISTRESPONSE']._serialized_end=851 - _globals['_VLANSERVICE']._serialized_start=853 - _globals['_VLANSERVICE']._serialized_end=968 + _globals['_VLAN']._serialized_end=575 + _globals['_VLANSERVICELISTREQUEST']._serialized_start=577 + _globals['_VLANSERVICELISTREQUEST']._serialized_end=638 + _globals['_VLANSERVICELISTRESPONSE']._serialized_start=640 + _globals['_VLANSERVICELISTRESPONSE']._serialized_end=709 + _globals['_VLANSERVICE']._serialized_start=711 + _globals['_VLANSERVICE']._serialized_end=826 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/vlan_pb2.pyi b/python/fits/api/vm/v1/vlan_pb2.pyi index f79a7d9..8679585 100644 --- a/python/fits/api/vm/v1/vlan_pb2.pyi +++ b/python/fits/api/vm/v1/vlan_pb2.pyi @@ -10,7 +10,7 @@ from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union DESCRIPTOR: _descriptor.FileDescriptor class Vlan(_message.Message): - __slots__ = ("uuid", "id", "subnet_title", "subnet", "subnetmask", "gateway", "ip_range_start", "ip_range_end", "use_dhcp", "pod_title", "pod_uuid", "stage_type_title", "stage_type_uuid", "tenant_uuid", "tenant_title") + __slots__ = ("uuid", "id", "subnet_title", "subnet", "subnetmask", "gateway", "ip_range_start", "ip_range_end", "use_dhcp", "location_uuid", "stage_type_uuid", "tenant") UUID_FIELD_NUMBER: _ClassVar[int] ID_FIELD_NUMBER: _ClassVar[int] SUBNET_TITLE_FIELD_NUMBER: _ClassVar[int] @@ -20,12 +20,9 @@ class Vlan(_message.Message): IP_RANGE_START_FIELD_NUMBER: _ClassVar[int] IP_RANGE_END_FIELD_NUMBER: _ClassVar[int] USE_DHCP_FIELD_NUMBER: _ClassVar[int] - POD_TITLE_FIELD_NUMBER: _ClassVar[int] - POD_UUID_FIELD_NUMBER: _ClassVar[int] - STAGE_TYPE_TITLE_FIELD_NUMBER: _ClassVar[int] + LOCATION_UUID_FIELD_NUMBER: _ClassVar[int] STAGE_TYPE_UUID_FIELD_NUMBER: _ClassVar[int] - TENANT_UUID_FIELD_NUMBER: _ClassVar[int] - TENANT_TITLE_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] uuid: str id: int subnet_title: str @@ -35,13 +32,10 @@ class Vlan(_message.Message): ip_range_start: str ip_range_end: str use_dhcp: bool - pod_title: str - pod_uuid: str - stage_type_title: str + location_uuid: str stage_type_uuid: str - tenant_uuid: str - tenant_title: str - def __init__(self, uuid: _Optional[str] = ..., id: _Optional[int] = ..., subnet_title: _Optional[str] = ..., subnet: _Optional[str] = ..., subnetmask: _Optional[str] = ..., gateway: _Optional[str] = ..., ip_range_start: _Optional[str] = ..., ip_range_end: _Optional[str] = ..., use_dhcp: _Optional[bool] = ..., pod_title: _Optional[str] = ..., pod_uuid: _Optional[str] = ..., stage_type_title: _Optional[str] = ..., stage_type_uuid: _Optional[str] = ..., tenant_uuid: _Optional[str] = ..., tenant_title: _Optional[str] = ...) -> None: ... + tenant: str + def __init__(self, uuid: _Optional[str] = ..., id: _Optional[int] = ..., subnet_title: _Optional[str] = ..., subnet: _Optional[str] = ..., subnetmask: _Optional[str] = ..., gateway: _Optional[str] = ..., ip_range_start: _Optional[str] = ..., ip_range_end: _Optional[str] = ..., use_dhcp: _Optional[bool] = ..., location_uuid: _Optional[str] = ..., stage_type_uuid: _Optional[str] = ..., tenant: _Optional[str] = ...) -> None: ... class VlanServiceListRequest(_message.Message): __slots__ = ("tenant",) @@ -50,9 +44,7 @@ class VlanServiceListRequest(_message.Message): def __init__(self, tenant: _Optional[str] = ...) -> None: ... class VlanServiceListResponse(_message.Message): - __slots__ = ("vlans", "validation_errors") + __slots__ = ("vlans",) VLANS_FIELD_NUMBER: _ClassVar[int] - VALIDATION_ERRORS_FIELD_NUMBER: _ClassVar[int] vlans: _containers.RepeatedCompositeFieldContainer[Vlan] - validation_errors: _containers.RepeatedCompositeFieldContainer[_common_pb2.ValidationError] - def __init__(self, vlans: _Optional[_Iterable[_Union[Vlan, _Mapping]]] = ..., validation_errors: _Optional[_Iterable[_Union[_common_pb2.ValidationError, _Mapping]]] = ...) -> None: ... + def __init__(self, vlans: _Optional[_Iterable[_Union[Vlan, _Mapping]]] = ...) -> None: ... diff --git a/python/fits/api/vm/v1/vm_connect.py b/python/fits/api/vm/v1/vm_connect.py index ceeb0f3..c5b3cef 100644 --- a/python/fits/api/vm/v1/vm_connect.py +++ b/python/fits/api/vm/v1/vm_connect.py @@ -33,6 +33,36 @@ async def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceLi async def delete(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + async def add_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def add_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def move_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def validate_create(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def validate_add_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def validate_update_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def validate_add_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + class VMServiceASGIApplication(ConnectASGIApplication[VMService]): def __init__(self, service: VMService | AsyncGenerator[VMService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: @@ -89,6 +119,106 @@ def __init__(self, service: VMService | AsyncGenerator[VMService], *, intercepto ), function=svc.delete, ), + "/fits.api.vm.v1.VMService/AddDisk": Endpoint.unary( + method=MethodInfo( + name="AddDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.add_disk, + ), + "/fits.api.vm.v1.VMService/UpdateDisk": Endpoint.unary( + method=MethodInfo( + name="UpdateDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update_disk, + ), + "/fits.api.vm.v1.VMService/DeleteDisk": Endpoint.unary( + method=MethodInfo( + name="DeleteDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete_disk, + ), + "/fits.api.vm.v1.VMService/AddIP": Endpoint.unary( + method=MethodInfo( + name="AddIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.add_i_p, + ), + "/fits.api.vm.v1.VMService/MoveIP": Endpoint.unary( + method=MethodInfo( + name="MoveIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.move_i_p, + ), + "/fits.api.vm.v1.VMService/DeleteIP": Endpoint.unary( + method=MethodInfo( + name="DeleteIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete_i_p, + ), + "/fits.api.vm.v1.VMService/ValidateCreate": Endpoint.unary( + method=MethodInfo( + name="ValidateCreate", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.validate_create, + ), + "/fits.api.vm.v1.VMService/ValidateAddDisk": Endpoint.unary( + method=MethodInfo( + name="ValidateAddDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.validate_add_disk, + ), + "/fits.api.vm.v1.VMService/ValidateUpdateDisk": Endpoint.unary( + method=MethodInfo( + name="ValidateUpdateDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.validate_update_disk, + ), + "/fits.api.vm.v1.VMService/ValidateAddIP": Endpoint.unary( + method=MethodInfo( + name="ValidateAddIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.validate_add_i_p, + ), }, interceptors=interceptors, read_max_bytes=read_max_bytes, @@ -203,6 +333,206 @@ async def delete( timeout_ms=timeout_ms, ) + async def add_disk( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="AddDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update_disk( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete_disk( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def add_i_p( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="AddIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def move_i_p( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="MoveIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete_i_p( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def validate_create( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateCreate", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def validate_add_disk( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateAddDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def validate_update_disk( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateUpdateDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def validate_add_i_p( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateAddIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + @@ -218,6 +548,26 @@ def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") def delete(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def add_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def add_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def move_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def validate_create(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def validate_add_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def validate_update_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def validate_add_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") class VMServiceWSGIApplication(ConnectWSGIApplication): @@ -274,6 +624,106 @@ def __init__(self, service: VMServiceSync, interceptors: Iterable[InterceptorSyn ), function=service.delete, ), + "/fits.api.vm.v1.VMService/AddDisk": EndpointSync.unary( + method=MethodInfo( + name="AddDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.add_disk, + ), + "/fits.api.vm.v1.VMService/UpdateDisk": EndpointSync.unary( + method=MethodInfo( + name="UpdateDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update_disk, + ), + "/fits.api.vm.v1.VMService/DeleteDisk": EndpointSync.unary( + method=MethodInfo( + name="DeleteDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete_disk, + ), + "/fits.api.vm.v1.VMService/AddIP": EndpointSync.unary( + method=MethodInfo( + name="AddIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.add_i_p, + ), + "/fits.api.vm.v1.VMService/MoveIP": EndpointSync.unary( + method=MethodInfo( + name="MoveIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.move_i_p, + ), + "/fits.api.vm.v1.VMService/DeleteIP": EndpointSync.unary( + method=MethodInfo( + name="DeleteIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete_i_p, + ), + "/fits.api.vm.v1.VMService/ValidateCreate": EndpointSync.unary( + method=MethodInfo( + name="ValidateCreate", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.validate_create, + ), + "/fits.api.vm.v1.VMService/ValidateAddDisk": EndpointSync.unary( + method=MethodInfo( + name="ValidateAddDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.validate_add_disk, + ), + "/fits.api.vm.v1.VMService/ValidateUpdateDisk": EndpointSync.unary( + method=MethodInfo( + name="ValidateUpdateDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.validate_update_disk, + ), + "/fits.api.vm.v1.VMService/ValidateAddIP": EndpointSync.unary( + method=MethodInfo( + name="ValidateAddIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.validate_add_i_p, + ), }, interceptors=interceptors, read_max_bytes=read_max_bytes, @@ -388,4 +838,204 @@ def delete( timeout_ms=timeout_ms, ) + def add_disk( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="AddDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update_disk( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete_disk( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def add_i_p( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="AddIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def move_i_p( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="MoveIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete_i_p( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def validate_create( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateCreate", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def validate_add_disk( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateAddDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def validate_update_disk( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateUpdateDisk", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def validate_add_i_p( + self, + request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateAddIP", + service_name="fits.api.vm.v1.VMService", + input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, + output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + diff --git a/python/fits/api/vm/v1/vm_pb2.py b/python/fits/api/vm/v1/vm_pb2.py index 0fae998..38773ad 100644 --- a/python/fits/api/vm/v1/vm_pb2.py +++ b/python/fits/api/vm/v1/vm_pb2.py @@ -28,7 +28,7 @@ from fits.api.vm.v1 import vlan_pb2 as fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/vm.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x19\x66its/api/vm/v1/vlan.proto\"\xcd\x06\n\nVMInstance\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04\x66qdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04\x66qdn\x12#\n\x06tenant\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n\x0cproject_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12!\n\x07os_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\t \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\n \x01(\rR\x03ram\x12!\n\x0corder_number\x18\x0b \x01(\tR\x0borderNumber\x12\x1a\n\x08\x63ontract\x18\x0c \x01(\x08R\x08\x63ontract\x12\x16\n\x06\x62\x61\x63kup\x18\r \x01(\x08R\x06\x62\x61\x63kup\x12\"\n\x0c\x61vailability\x18\x0e \x01(\tR\x0c\x61vailability\x12\"\n\x0cserviceclass\x18\x0f \x01(\tR\x0cserviceclass\x12\x16\n\x06status\x18\x10 \x01(\tR\x06status\x12\x1f\n\x0bstatus_info\x18\x11 \x01(\tR\nstatusInfo\x12I\n\x0fwindows_details\x18\x12 \x01(\x0b\x32\x1e.fits.api.vm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12\x43\n\rlinux_details\x18\x13 \x01(\x0b\x32\x1c.fits.api.vm.v1.LinuxDetailsH\x00R\x0clinuxDetails\x12@\n\ninterfaces\x18\x14 \x03(\x0b\x32 .fits.api.vm.v1.NetworkInterfaceR\ninterfaces\x12(\n\x04vlan\x18\x15 \x01(\x0b\x32\x14.fits.api.vm.v1.VlanR\x04vlanB\x10\n\x07\x64\x65tails\x12\x05\xbaH\x02\x08\x01\"\x90\x01\n\x0cLinuxDetails\x12/\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskR\x05\x64isks\x12%\n\tldap_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12(\n\tldap_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08ldapFqdn\"\x9c\x01\n\x0eWindowsDetails\x12\x31\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskR\x05\x64isks\x12)\n\x0b\x64omain_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12,\n\x0b\x64omain_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\ndomainFqdn\"{\n\x10NetworkInterface\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n\tipaddress\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xe8\xb3\xae\xb1\x02\x01R\tipaddress\x12\x1e\n\nmacaddress\x18\x03 \x01(\tR\nmacaddress\"W\n\x13VMServiceGetRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"B\n\x14VMServiceGetResponse\x12*\n\x02vm\x18\x01 \x01(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"{\n\x1dVMServiceCreateWindowsRequest\x12)\n\x0b\x64omain_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12/\n\x04\x64isk\x18\x02 \x01(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskR\x04\x64isk\"s\n\x1bVMServiceCreateLinuxRequest\x12%\n\tldap_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12-\n\x04\x64isk\x18\x02 \x01(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskR\x04\x64isk\"\x8f\x05\n\x16VMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n\x07os_uuid\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\x07 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x08 \x01(\rR\x03ram\x12!\n\x0corder_number\x18\t \x01(\tR\x0borderNumber\x12+\n\x06labels\x18\n \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12\"\n\x0c\x61vailability\x18\x0c \x01(\tR\x0c\x61vailability\x12\"\n\x0cserviceclass\x18\r \x01(\tR\x0cserviceclass\x12I\n\x07windows\x18\x0e \x01(\x0b\x32-.fits.api.vm.v1.VMServiceCreateWindowsRequestH\x00R\x07windows\x12\x43\n\x05linux\x18\x0f \x01(\x0b\x32+.fits.api.vm.v1.VMServiceCreateLinuxRequestH\x00R\x05linuxB\x0f\n\x06vmtype\x12\x05\xbaH\x02\x08\x01\x42\x07\n\x05_name\"\xaa\x01\n\tLinuxDisk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05label\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x01R\nmountPoint\x88\x01\x01\x42\r\n\x0b_size_in_gbB\x0e\n\x0c_mount_point\"\xad\x01\n\x0bWindowsDisk\x12\x1f\n\x0b\x61uto_extend\x18\x01 \x01(\x08R\nautoExtend\x12!\n\nsize_in_gb\x18\x02 \x01(\x04H\x00R\x08sizeInGb\x88\x01\x01\x12%\n\x0b\x64riveletter\x18\x03 \x01(\tH\x01R\x0b\x64riveletter\x88\x01\x01\x12\x14\n\x05label\x18\x04 \x01(\tR\x05labelB\r\n\x0b_size_in_gbB\x0e\n\x0c_driveletter\"\x19\n\x17VMServiceCreateResponse\"\x87\x01\n\x16VMServiceUpdateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12@\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\"\x19\n\x17VMServiceUpdateResponse\"\x81\x01\n\x14VMServiceListRequest\x12\x1b\n\x06tenant\x18\x01 \x01(\tH\x00R\x06tenant\x88\x01\x01\x12\x30\n\x0cproject_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x01R\x0bprojectUuid\x88\x01\x01\x42\t\n\x07_tenantB\x0f\n\r_project_uuid\"E\n\x15VMServiceListResponse\x12,\n\x03vms\x18\x01 \x03(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x03vms\"<\n\x16VMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x19\n\x17VMServiceDeleteResponse2\x81\x04\n\tVMService\x12]\n\x03Get\x12#.fits.api.vm.v1.VMServiceGetRequest\x1a$.fits.api.vm.v1.VMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x43reate\x12&.fits.api.vm.v1.VMServiceCreateRequest\x1a\'.fits.api.vm.v1.VMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x65\n\x06Update\x12&.fits.api.vm.v1.VMServiceUpdateRequest\x1a\'.fits.api.vm.v1.VMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12`\n\x04List\x12$.fits.api.vm.v1.VMServiceListRequest\x1a%.fits.api.vm.v1.VMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x44\x65lete\x12&.fits.api.vm.v1.VMServiceDeleteRequest\x1a\'.fits.api.vm.v1.VMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07VmProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/vm.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x19\x66its/api/vm/v1/vlan.proto\"\x90\x01\n\x0cLinuxDetails\x12/\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskR\x05\x64isks\x12%\n\tldap_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12(\n\tldap_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08ldapFqdn\"\x9c\x01\n\x0eWindowsDetails\x12\x31\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskR\x05\x64isks\x12)\n\x0b\x64omain_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12,\n\x0b\x64omain_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\ndomainFqdn\"{\n\x10NetworkInterface\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n\tipaddress\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xe8\xb3\xae\xb1\x02\x01R\tipaddress\x12\x1e\n\nmacaddress\x18\x03 \x01(\tR\nmacaddress\"\x9d\x07\n\nVMInstance\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04\x66qdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04\x66qdn\x12#\n\x06tenant\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n\x0cproject_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12!\n\x07os_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\t \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\n \x01(\rR\x03ram\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12\x16\n\x06status\x18\x0c \x01(\tR\x06status\x12\x1f\n\x0bstatus_info\x18\r \x01(\tR\nstatusInfo\x12J\n\x0c\x61vailability\x18\x0e \x01(\x0e\x32\x1c.fits.api.vm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12J\n\x0cserviceclass\x18\x0f \x01(\x0e\x32\x1c.fits.api.vm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12I\n\x0fwindows_details\x18\x10 \x01(\x0b\x32\x1e.fits.api.vm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12\x43\n\rlinux_details\x18\x11 \x01(\x0b\x32\x1c.fits.api.vm.v1.LinuxDetailsH\x00R\x0clinuxDetails\x12@\n\ninterfaces\x18\x12 \x03(\x0b\x32 .fits.api.vm.v1.NetworkInterfaceR\ninterfaces\x12(\n\x04vlan\x18\x13 \x01(\x0b\x32\x14.fits.api.vm.v1.VlanR\x04vlan\x12!\n\x0corder_number\x18\x14 \x01(\tR\x0borderNumber\x12\x1a\n\x08\x63ontract\x18\x15 \x01(\x08R\x08\x63ontractB\x10\n\x07\x64\x65tails\x12\x05\xbaH\x02\x08\x01\"f\n\x13VMServiceGetRequest\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12#\n\x06tenant\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x07\n\x05_uuid\"B\n\x14VMServiceGetResponse\x12*\n\x02vm\x18\x01 \x01(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"\x87\x01\n\x1dVMServiceCreateWindowsRequest\x12)\n\x0b\x64omain_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12;\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\x7f\n\x1bVMServiceCreateLinuxRequest\x12%\n\tldap_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12\x39\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\xdf\x05\n\x16VMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n\x07os_uuid\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\x07 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x08 \x01(\rR\x03ram\x12!\n\x0corder_number\x18\t \x01(\tR\x0borderNumber\x12+\n\x06labels\x18\n \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12J\n\x0c\x61vailability\x18\x0c \x01(\x0e\x32\x1c.fits.api.vm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12J\n\x0cserviceclass\x18\r \x01(\x0e\x32\x1c.fits.api.vm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12I\n\x07windows\x18\x0e \x01(\x0b\x32-.fits.api.vm.v1.VMServiceCreateWindowsRequestH\x00R\x07windows\x12\x43\n\x05linux\x18\x0f \x01(\x0b\x32+.fits.api.vm.v1.VMServiceCreateLinuxRequestH\x00R\x05linuxB\x0f\n\x06vmtype\x12\x05\xbaH\x02\x08\x01\x42\x07\n\x05_name\"\xc6\x01\n\tLinuxDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x02R\nmountPoint\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_mount_point\"\xc9\x01\n\x0bWindowsDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12%\n\x0b\x64riveletter\x18\x05 \x01(\tH\x02R\x0b\x64riveletter\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_driveletter\"\x19\n\x17VMServiceCreateResponse\"\xad\x03\n\x16VMServiceUpdateRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12@\n\x0bupdate_meta\x18\x04 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12U\n\x11performance_class\x18\x05 \x01(\x0b\x32&.fits.api.vm.v1.PerformanceClassChangeH\x00R\x10performanceClass\x12I\n\rservice_class\x18\x06 \x01(\x0b\x32\".fits.api.vm.v1.ServiceClassChangeH\x00R\x0cserviceClass\x12\x39\n\x07\x63ontact\x18\x07 \x01(\x0b\x32\x1d.fits.api.vm.v1.ContactChangeH\x00R\x07\x63ontactB\x0f\n\x06\x61\x63tion\x12\x05\xbaH\x02\x08\x01\"P\n\x16PerformanceClassChange\x12\x1b\n\x03\x63pu\x18\x01 \x01(\rB\t\xbaH\x06*\x04\x18@(\x01R\x03\x63pu\x12\x19\n\x03ram\x18\x02 \x01(\rB\x07\xbaH\x04*\x02 \x00R\x03ram\"`\n\x12ServiceClassChange\x12J\n\x0cserviceclass\x18\x01 \x01(\x0e\x32\x1c.fits.api.vm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\"<\n\rContactChange\x12+\n\x0c\x63ontact_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\"\x19\n\x17VMServiceUpdateResponse\"K\n\x14VMServiceListRequest\x12(\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01\x42\t\n\x07_tenant\"E\n\x15VMServiceListResponse\x12,\n\x03vms\x18\x01 \x03(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x03vms\"}\n\x16VMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x1c\n\x04uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\x19\n\x17VMServiceDeleteResponse\"h\n\x1eVMServiceValidateCreateRequest\x12\x46\n\x06\x63reate\x18\x01 \x01(\x0b\x32&.fits.api.vm.v1.VMServiceCreateRequestB\x06\xbaH\x03\xc8\x01\x01R\x06\x63reate\"!\n\x1fVMServiceValidateCreateResponse\"m\n\x1fVMServiceValidateAddDiskRequest\x12J\n\x08\x61\x64\x64_disk\x18\x01 \x01(\x0b\x32\'.fits.api.vm.v1.VMServiceAddDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\x07\x61\x64\x64\x44isk\"\"\n VMServiceValidateAddDiskResponse\"y\n\"VMServiceValidateUpdateDiskRequest\x12S\n\x0bupdate_disk\x18\x01 \x01(\x0b\x32*.fits.api.vm.v1.VMServiceUpdateDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\nupdateDisk\"%\n#VMServiceValidateUpdateDiskResponse\"\x1a\n\x18VMServiceAddDiskResponse\"\x1d\n\x1bVMServiceUpdateDiskResponse\"\x1d\n\x1bVMServiceDeleteDiskResponse\"\xf9\x01\n\x17VMServiceAddDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12\x31\n\x05linux\x18\x04 \x01(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskH\x00R\x05linux\x12\x37\n\x07windows\x18\x05 \x01(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskH\x00R\x07windowsB\r\n\x04\x64isk\x12\x05\xbaH\x02\x08\x01\"\x80\x02\n\x1aVMServiceUpdateDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12$\n\x0b\x61uto_extend\x18\x05 \x01(\x08H\x00R\nautoExtend\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\x04H\x01R\x04size\x88\x01\x01\x42\x0e\n\x0c_auto_extendB\x07\n\x05_size\"\xa8\x01\n\x1aVMServiceDeleteDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\x18\n\x16VMServiceAddIPResponse\"\x19\n\x17VMServiceMoveIPResponse\"\x1b\n\x19VMServiceDeleteIPResponse\"|\n\x15VMServiceAddIPRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\xde\x01\n\x16VMServiceMoveIPRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12.\n\x0etarget_vm_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0ctargetVmUuid\"\xb0\x01\n\x18VMServiceDeleteIPRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"e\n\x1dVMServiceValidateAddIPRequest\x12\x44\n\x06\x61\x64\x64_ip\x18\x01 \x01(\x0b\x32%.fits.api.vm.v1.VMServiceAddIPRequestB\x06\xbaH\x03\xc8\x01\x01R\x05\x61\x64\x64Ip\" \n\x1eVMServiceValidateAddIPResponse*\xa6\x01\n\x0c\x41vailability\x12\"\n\x18\x41VAILABILITY_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1b\n\x0f\x41VAILABILITY_V0\x10\x01\x1a\x06\x82\xb2\x19\x02V0\x12\x1b\n\x0f\x41VAILABILITY_V1\x10\x02\x1a\x06\x82\xb2\x19\x02V1\x12\x1b\n\x0f\x41VAILABILITY_V2\x10\x03\x1a\x06\x82\xb2\x19\x02V2\x12\x1b\n\x0f\x41VAILABILITY_V3\x10\x04\x1a\x06\x82\xb2\x19\x02V3*\x93\x01\n\x0cServiceClass\x12#\n\x19SERVICE_CLASS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1e\n\x11SERVICE_CLASS_SZ1\x10\x01\x1a\x07\x82\xb2\x19\x03SZ1\x12\x1e\n\x11SERVICE_CLASS_SZ2\x10\x02\x1a\x07\x82\xb2\x19\x03SZ2\x12\x1e\n\x11SERVICE_CLASS_SZ3\x10\x03\x1a\x07\x82\xb2\x19\x03SZ32\x93\r\n\tVMService\x12]\n\x03Get\x12#.fits.api.vm.v1.VMServiceGetRequest\x1a$.fits.api.vm.v1.VMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x43reate\x12&.fits.api.vm.v1.VMServiceCreateRequest\x1a\'.fits.api.vm.v1.VMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x65\n\x06Update\x12&.fits.api.vm.v1.VMServiceUpdateRequest\x1a\'.fits.api.vm.v1.VMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12`\n\x04List\x12$.fits.api.vm.v1.VMServiceListRequest\x1a%.fits.api.vm.v1.VMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x44\x65lete\x12&.fits.api.vm.v1.VMServiceDeleteRequest\x1a\'.fits.api.vm.v1.VMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12h\n\x07\x41\x64\x64\x44isk\x12\'.fits.api.vm.v1.VMServiceAddDiskRequest\x1a(.fits.api.vm.v1.VMServiceAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12q\n\nUpdateDisk\x12*.fits.api.vm.v1.VMServiceUpdateDiskRequest\x1a+.fits.api.vm.v1.VMServiceUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12q\n\nDeleteDisk\x12*.fits.api.vm.v1.VMServiceDeleteDiskRequest\x1a+.fits.api.vm.v1.VMServiceDeleteDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x62\n\x05\x41\x64\x64IP\x12%.fits.api.vm.v1.VMServiceAddIPRequest\x1a&.fits.api.vm.v1.VMServiceAddIPResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x65\n\x06MoveIP\x12&.fits.api.vm.v1.VMServiceMoveIPRequest\x1a\'.fits.api.vm.v1.VMServiceMoveIPResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12k\n\x08\x44\x65leteIP\x12(.fits.api.vm.v1.VMServiceDeleteIPRequest\x1a).fits.api.vm.v1.VMServiceDeleteIPResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12}\n\x0eValidateCreate\x12..fits.api.vm.v1.VMServiceValidateCreateRequest\x1a/.fits.api.vm.v1.VMServiceValidateCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x80\x01\n\x0fValidateAddDisk\x12/.fits.api.vm.v1.VMServiceValidateAddDiskRequest\x1a\x30.fits.api.vm.v1.VMServiceValidateAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x89\x01\n\x12ValidateUpdateDisk\x12\x32.fits.api.vm.v1.VMServiceValidateUpdateDiskRequest\x1a\x33.fits.api.vm.v1.VMServiceValidateUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12z\n\rValidateAddIP\x12-.fits.api.vm.v1.VMServiceValidateAddIPRequest\x1a..fits.api.vm.v1.VMServiceValidateAddIPResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07VmProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -36,6 +36,36 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\007VmProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_UNSPECIFIED"]._loaded_options = None + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_UNSPECIFIED"]._serialized_options = b'\202\262\031\000' + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V0"]._loaded_options = None + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V0"]._serialized_options = b'\202\262\031\002V0' + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V1"]._loaded_options = None + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V1"]._serialized_options = b'\202\262\031\002V1' + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V2"]._loaded_options = None + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V2"]._serialized_options = b'\202\262\031\002V2' + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V3"]._loaded_options = None + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V3"]._serialized_options = b'\202\262\031\002V3' + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_UNSPECIFIED"]._loaded_options = None + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_UNSPECIFIED"]._serialized_options = b'\202\262\031\000' + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ1"]._loaded_options = None + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ1"]._serialized_options = b'\202\262\031\003SZ1' + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ2"]._loaded_options = None + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ2"]._serialized_options = b'\202\262\031\003SZ2' + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ3"]._loaded_options = None + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ3"]._serialized_options = b'\202\262\031\003SZ3' + _globals['_LINUXDETAILS'].fields_by_name['ldap_uuid']._loaded_options = None + _globals['_LINUXDETAILS'].fields_by_name['ldap_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_LINUXDETAILS'].fields_by_name['ldap_fqdn']._loaded_options = None + _globals['_LINUXDETAILS'].fields_by_name['ldap_fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_WINDOWSDETAILS'].fields_by_name['domain_uuid']._loaded_options = None + _globals['_WINDOWSDETAILS'].fields_by_name['domain_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_WINDOWSDETAILS'].fields_by_name['domain_fqdn']._loaded_options = None + _globals['_WINDOWSDETAILS'].fields_by_name['domain_fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_NETWORKINTERFACE'].fields_by_name['uuid']._loaded_options = None + _globals['_NETWORKINTERFACE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_NETWORKINTERFACE'].fields_by_name['ipaddress']._loaded_options = None + _globals['_NETWORKINTERFACE'].fields_by_name['ipaddress']._serialized_options = b'\272H\010r\006\350\263\256\261\002\001' _globals['_VMINSTANCE'].oneofs_by_name['details']._loaded_options = None _globals['_VMINSTANCE'].oneofs_by_name['details']._serialized_options = b'\272H\002\010\001' _globals['_VMINSTANCE'].fields_by_name['uuid']._loaded_options = None @@ -52,26 +82,22 @@ _globals['_VMINSTANCE'].fields_by_name['location_uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VMINSTANCE'].fields_by_name['contact_uuid']._loaded_options = None _globals['_VMINSTANCE'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_LINUXDETAILS'].fields_by_name['ldap_uuid']._loaded_options = None - _globals['_LINUXDETAILS'].fields_by_name['ldap_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_LINUXDETAILS'].fields_by_name['ldap_fqdn']._loaded_options = None - _globals['_LINUXDETAILS'].fields_by_name['ldap_fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_WINDOWSDETAILS'].fields_by_name['domain_uuid']._loaded_options = None - _globals['_WINDOWSDETAILS'].fields_by_name['domain_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_WINDOWSDETAILS'].fields_by_name['domain_fqdn']._loaded_options = None - _globals['_WINDOWSDETAILS'].fields_by_name['domain_fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_NETWORKINTERFACE'].fields_by_name['uuid']._loaded_options = None - _globals['_NETWORKINTERFACE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_NETWORKINTERFACE'].fields_by_name['ipaddress']._loaded_options = None - _globals['_NETWORKINTERFACE'].fields_by_name['ipaddress']._serialized_options = b'\272H\010r\006\350\263\256\261\002\001' + _globals['_VMINSTANCE'].fields_by_name['availability']._loaded_options = None + _globals['_VMINSTANCE'].fields_by_name['availability']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_VMINSTANCE'].fields_by_name['serviceclass']._loaded_options = None + _globals['_VMINSTANCE'].fields_by_name['serviceclass']._serialized_options = b'\272H\005\202\001\002\020\001' _globals['_VMSERVICEGETREQUEST'].fields_by_name['uuid']._loaded_options = None _globals['_VMSERVICEGETREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEGETREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_VMSERVICEGETREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEGETREQUEST'].fields_by_name['tenant']._loaded_options = None + _globals['_VMSERVICEGETREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_VMSERVICECREATEWINDOWSREQUEST'].fields_by_name['domain_uuid']._loaded_options = None _globals['_VMSERVICECREATEWINDOWSREQUEST'].fields_by_name['domain_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICECREATEWINDOWSREQUEST'].fields_by_name['disks']._loaded_options = None + _globals['_VMSERVICECREATEWINDOWSREQUEST'].fields_by_name['disks']._serialized_options = b'\272H\005\222\001\002\010\001' _globals['_VMSERVICECREATELINUXREQUEST'].fields_by_name['ldap_uuid']._loaded_options = None _globals['_VMSERVICECREATELINUXREQUEST'].fields_by_name['ldap_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICECREATELINUXREQUEST'].fields_by_name['disks']._loaded_options = None + _globals['_VMSERVICECREATELINUXREQUEST'].fields_by_name['disks']._serialized_options = b'\272H\005\222\001\002\010\001' _globals['_VMSERVICECREATEREQUEST'].oneofs_by_name['vmtype']._loaded_options = None _globals['_VMSERVICECREATEREQUEST'].oneofs_by_name['vmtype']._serialized_options = b'\272H\002\010\001' _globals['_VMSERVICECREATEREQUEST'].fields_by_name['project_uuid']._loaded_options = None @@ -86,14 +112,80 @@ _globals['_VMSERVICECREATEREQUEST'].fields_by_name['location_uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VMSERVICECREATEREQUEST'].fields_by_name['contact_uuid']._loaded_options = None _globals['_VMSERVICECREATEREQUEST'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['project_uuid']._loaded_options = None - _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['project_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['availability']._loaded_options = None + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['availability']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['serviceclass']._loaded_options = None + _globals['_VMSERVICECREATEREQUEST'].fields_by_name['serviceclass']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_LINUXDISK'].fields_by_name['uuid']._loaded_options = None + _globals['_LINUXDISK'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_WINDOWSDISK'].fields_by_name['uuid']._loaded_options = None + _globals['_WINDOWSDISK'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEUPDATEREQUEST'].oneofs_by_name['action']._loaded_options = None + _globals['_VMSERVICEUPDATEREQUEST'].oneofs_by_name['action']._serialized_options = b'\272H\002\010\001' + _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._loaded_options = None _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._serialized_options = b'\272H\003\310\001\001' - _globals['_VMSERVICELISTREQUEST'].fields_by_name['project_uuid']._loaded_options = None - _globals['_VMSERVICELISTREQUEST'].fields_by_name['project_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['cpu']._loaded_options = None + _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['cpu']._serialized_options = b'\272H\006*\004\030@(\001' + _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['ram']._loaded_options = None + _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['ram']._serialized_options = b'\272H\004*\002 \000' + _globals['_SERVICECLASSCHANGE'].fields_by_name['serviceclass']._loaded_options = None + _globals['_SERVICECLASSCHANGE'].fields_by_name['serviceclass']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_CONTACTCHANGE'].fields_by_name['contact_uuid']._loaded_options = None + _globals['_CONTACTCHANGE'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICELISTREQUEST'].fields_by_name['tenant']._loaded_options = None + _globals['_VMSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_VMSERVICEDELETEREQUEST'].fields_by_name['project']._loaded_options = None _globals['_VMSERVICEDELETEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEDELETEREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_VMSERVICEDELETEREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEVALIDATECREATEREQUEST'].fields_by_name['create']._loaded_options = None + _globals['_VMSERVICEVALIDATECREATEREQUEST'].fields_by_name['create']._serialized_options = b'\272H\003\310\001\001' + _globals['_VMSERVICEVALIDATEADDDISKREQUEST'].fields_by_name['add_disk']._loaded_options = None + _globals['_VMSERVICEVALIDATEADDDISKREQUEST'].fields_by_name['add_disk']._serialized_options = b'\272H\003\310\001\001' + _globals['_VMSERVICEVALIDATEUPDATEDISKREQUEST'].fields_by_name['update_disk']._loaded_options = None + _globals['_VMSERVICEVALIDATEUPDATEDISKREQUEST'].fields_by_name['update_disk']._serialized_options = b'\272H\003\310\001\001' + _globals['_VMSERVICEADDDISKREQUEST'].oneofs_by_name['disk']._loaded_options = None + _globals['_VMSERVICEADDDISKREQUEST'].oneofs_by_name['disk']._serialized_options = b'\272H\002\010\001' + _globals['_VMSERVICEADDDISKREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_VMSERVICEADDDISKREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEADDDISKREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_VMSERVICEADDDISKREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEUPDATEDISKREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_VMSERVICEUPDATEDISKREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEUPDATEDISKREQUEST'].fields_by_name['disk_uuid']._loaded_options = None + _globals['_VMSERVICEUPDATEDISKREQUEST'].fields_by_name['disk_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEUPDATEDISKREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_VMSERVICEUPDATEDISKREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEDELETEDISKREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_VMSERVICEDELETEDISKREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEDELETEDISKREQUEST'].fields_by_name['disk_uuid']._loaded_options = None + _globals['_VMSERVICEDELETEDISKREQUEST'].fields_by_name['disk_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEDELETEDISKREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_VMSERVICEDELETEDISKREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEADDIPREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_VMSERVICEADDIPREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEADDIPREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_VMSERVICEADDIPREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['interface_uuid']._loaded_options = None + _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['interface_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['target_vm_uuid']._loaded_options = None + _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['target_vm_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEDELETEIPREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_VMSERVICEDELETEIPREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEDELETEIPREQUEST'].fields_by_name['interface_uuid']._loaded_options = None + _globals['_VMSERVICEDELETEIPREQUEST'].fields_by_name['interface_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEDELETEIPREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_VMSERVICEDELETEIPREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VMSERVICEVALIDATEADDIPREQUEST'].fields_by_name['add_ip']._loaded_options = None + _globals['_VMSERVICEVALIDATEADDIPREQUEST'].fields_by_name['add_ip']._serialized_options = b'\272H\003\310\001\001' _globals['_VMSERVICE'].methods_by_name['Get']._loaded_options = None _globals['_VMSERVICE'].methods_by_name['Get']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' _globals['_VMSERVICE'].methods_by_name['Create']._loaded_options = None @@ -104,42 +196,112 @@ _globals['_VMSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' _globals['_VMSERVICE'].methods_by_name['Delete']._loaded_options = None _globals['_VMSERVICE'].methods_by_name['Delete']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' - _globals['_VMINSTANCE']._serialized_start=162 - _globals['_VMINSTANCE']._serialized_end=1007 - _globals['_LINUXDETAILS']._serialized_start=1010 - _globals['_LINUXDETAILS']._serialized_end=1154 - _globals['_WINDOWSDETAILS']._serialized_start=1157 - _globals['_WINDOWSDETAILS']._serialized_end=1313 - _globals['_NETWORKINTERFACE']._serialized_start=1315 - _globals['_NETWORKINTERFACE']._serialized_end=1438 - _globals['_VMSERVICEGETREQUEST']._serialized_start=1440 - _globals['_VMSERVICEGETREQUEST']._serialized_end=1527 - _globals['_VMSERVICEGETRESPONSE']._serialized_start=1529 - _globals['_VMSERVICEGETRESPONSE']._serialized_end=1595 - _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_start=1597 - _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_end=1720 - _globals['_VMSERVICECREATELINUXREQUEST']._serialized_start=1722 - _globals['_VMSERVICECREATELINUXREQUEST']._serialized_end=1837 - _globals['_VMSERVICECREATEREQUEST']._serialized_start=1840 - _globals['_VMSERVICECREATEREQUEST']._serialized_end=2495 - _globals['_LINUXDISK']._serialized_start=2498 - _globals['_LINUXDISK']._serialized_end=2668 - _globals['_WINDOWSDISK']._serialized_start=2671 - _globals['_WINDOWSDISK']._serialized_end=2844 - _globals['_VMSERVICECREATERESPONSE']._serialized_start=2846 - _globals['_VMSERVICECREATERESPONSE']._serialized_end=2871 - _globals['_VMSERVICEUPDATEREQUEST']._serialized_start=2874 - _globals['_VMSERVICEUPDATEREQUEST']._serialized_end=3009 - _globals['_VMSERVICEUPDATERESPONSE']._serialized_start=3011 - _globals['_VMSERVICEUPDATERESPONSE']._serialized_end=3036 - _globals['_VMSERVICELISTREQUEST']._serialized_start=3039 - _globals['_VMSERVICELISTREQUEST']._serialized_end=3168 - _globals['_VMSERVICELISTRESPONSE']._serialized_start=3170 - _globals['_VMSERVICELISTRESPONSE']._serialized_end=3239 - _globals['_VMSERVICEDELETEREQUEST']._serialized_start=3241 - _globals['_VMSERVICEDELETEREQUEST']._serialized_end=3301 - _globals['_VMSERVICEDELETERESPONSE']._serialized_start=3303 - _globals['_VMSERVICEDELETERESPONSE']._serialized_end=3328 - _globals['_VMSERVICE']._serialized_start=3331 - _globals['_VMSERVICE']._serialized_end=3844 + _globals['_VMSERVICE'].methods_by_name['AddDisk']._loaded_options = None + _globals['_VMSERVICE'].methods_by_name['AddDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_VMSERVICE'].methods_by_name['UpdateDisk']._loaded_options = None + _globals['_VMSERVICE'].methods_by_name['UpdateDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_VMSERVICE'].methods_by_name['DeleteDisk']._loaded_options = None + _globals['_VMSERVICE'].methods_by_name['DeleteDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_VMSERVICE'].methods_by_name['AddIP']._loaded_options = None + _globals['_VMSERVICE'].methods_by_name['AddIP']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_VMSERVICE'].methods_by_name['MoveIP']._loaded_options = None + _globals['_VMSERVICE'].methods_by_name['MoveIP']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_VMSERVICE'].methods_by_name['DeleteIP']._loaded_options = None + _globals['_VMSERVICE'].methods_by_name['DeleteIP']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_VMSERVICE'].methods_by_name['ValidateCreate']._loaded_options = None + _globals['_VMSERVICE'].methods_by_name['ValidateCreate']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' + _globals['_VMSERVICE'].methods_by_name['ValidateAddDisk']._loaded_options = None + _globals['_VMSERVICE'].methods_by_name['ValidateAddDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' + _globals['_VMSERVICE'].methods_by_name['ValidateUpdateDisk']._loaded_options = None + _globals['_VMSERVICE'].methods_by_name['ValidateUpdateDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' + _globals['_VMSERVICE'].methods_by_name['ValidateAddIP']._loaded_options = None + _globals['_VMSERVICE'].methods_by_name['ValidateAddIP']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' + _globals['_AVAILABILITY']._serialized_start=6104 + _globals['_AVAILABILITY']._serialized_end=6270 + _globals['_SERVICECLASS']._serialized_start=6273 + _globals['_SERVICECLASS']._serialized_end=6420 + _globals['_LINUXDETAILS']._serialized_start=162 + _globals['_LINUXDETAILS']._serialized_end=306 + _globals['_WINDOWSDETAILS']._serialized_start=309 + _globals['_WINDOWSDETAILS']._serialized_end=465 + _globals['_NETWORKINTERFACE']._serialized_start=467 + _globals['_NETWORKINTERFACE']._serialized_end=590 + _globals['_VMINSTANCE']._serialized_start=593 + _globals['_VMINSTANCE']._serialized_end=1518 + _globals['_VMSERVICEGETREQUEST']._serialized_start=1520 + _globals['_VMSERVICEGETREQUEST']._serialized_end=1622 + _globals['_VMSERVICEGETRESPONSE']._serialized_start=1624 + _globals['_VMSERVICEGETRESPONSE']._serialized_end=1690 + _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_start=1693 + _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_end=1828 + _globals['_VMSERVICECREATELINUXREQUEST']._serialized_start=1830 + _globals['_VMSERVICECREATELINUXREQUEST']._serialized_end=1957 + _globals['_VMSERVICECREATEREQUEST']._serialized_start=1960 + _globals['_VMSERVICECREATEREQUEST']._serialized_end=2695 + _globals['_LINUXDISK']._serialized_start=2698 + _globals['_LINUXDISK']._serialized_end=2896 + _globals['_WINDOWSDISK']._serialized_start=2899 + _globals['_WINDOWSDISK']._serialized_end=3100 + _globals['_VMSERVICECREATERESPONSE']._serialized_start=3102 + _globals['_VMSERVICECREATERESPONSE']._serialized_end=3127 + _globals['_VMSERVICEUPDATEREQUEST']._serialized_start=3130 + _globals['_VMSERVICEUPDATEREQUEST']._serialized_end=3559 + _globals['_PERFORMANCECLASSCHANGE']._serialized_start=3561 + _globals['_PERFORMANCECLASSCHANGE']._serialized_end=3641 + _globals['_SERVICECLASSCHANGE']._serialized_start=3643 + _globals['_SERVICECLASSCHANGE']._serialized_end=3739 + _globals['_CONTACTCHANGE']._serialized_start=3741 + _globals['_CONTACTCHANGE']._serialized_end=3801 + _globals['_VMSERVICEUPDATERESPONSE']._serialized_start=3803 + _globals['_VMSERVICEUPDATERESPONSE']._serialized_end=3828 + _globals['_VMSERVICELISTREQUEST']._serialized_start=3830 + _globals['_VMSERVICELISTREQUEST']._serialized_end=3905 + _globals['_VMSERVICELISTRESPONSE']._serialized_start=3907 + _globals['_VMSERVICELISTRESPONSE']._serialized_end=3976 + _globals['_VMSERVICEDELETEREQUEST']._serialized_start=3978 + _globals['_VMSERVICEDELETEREQUEST']._serialized_end=4103 + _globals['_VMSERVICEDELETERESPONSE']._serialized_start=4105 + _globals['_VMSERVICEDELETERESPONSE']._serialized_end=4130 + _globals['_VMSERVICEVALIDATECREATEREQUEST']._serialized_start=4132 + _globals['_VMSERVICEVALIDATECREATEREQUEST']._serialized_end=4236 + _globals['_VMSERVICEVALIDATECREATERESPONSE']._serialized_start=4238 + _globals['_VMSERVICEVALIDATECREATERESPONSE']._serialized_end=4271 + _globals['_VMSERVICEVALIDATEADDDISKREQUEST']._serialized_start=4273 + _globals['_VMSERVICEVALIDATEADDDISKREQUEST']._serialized_end=4382 + _globals['_VMSERVICEVALIDATEADDDISKRESPONSE']._serialized_start=4384 + _globals['_VMSERVICEVALIDATEADDDISKRESPONSE']._serialized_end=4418 + _globals['_VMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_start=4420 + _globals['_VMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_end=4541 + _globals['_VMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_start=4543 + _globals['_VMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_end=4580 + _globals['_VMSERVICEADDDISKRESPONSE']._serialized_start=4582 + _globals['_VMSERVICEADDDISKRESPONSE']._serialized_end=4608 + _globals['_VMSERVICEUPDATEDISKRESPONSE']._serialized_start=4610 + _globals['_VMSERVICEUPDATEDISKRESPONSE']._serialized_end=4639 + _globals['_VMSERVICEDELETEDISKRESPONSE']._serialized_start=4641 + _globals['_VMSERVICEDELETEDISKRESPONSE']._serialized_end=4670 + _globals['_VMSERVICEADDDISKREQUEST']._serialized_start=4673 + _globals['_VMSERVICEADDDISKREQUEST']._serialized_end=4922 + _globals['_VMSERVICEUPDATEDISKREQUEST']._serialized_start=4925 + _globals['_VMSERVICEUPDATEDISKREQUEST']._serialized_end=5181 + _globals['_VMSERVICEDELETEDISKREQUEST']._serialized_start=5184 + _globals['_VMSERVICEDELETEDISKREQUEST']._serialized_end=5352 + _globals['_VMSERVICEADDIPRESPONSE']._serialized_start=5354 + _globals['_VMSERVICEADDIPRESPONSE']._serialized_end=5378 + _globals['_VMSERVICEMOVEIPRESPONSE']._serialized_start=5380 + _globals['_VMSERVICEMOVEIPRESPONSE']._serialized_end=5405 + _globals['_VMSERVICEDELETEIPRESPONSE']._serialized_start=5407 + _globals['_VMSERVICEDELETEIPRESPONSE']._serialized_end=5434 + _globals['_VMSERVICEADDIPREQUEST']._serialized_start=5436 + _globals['_VMSERVICEADDIPREQUEST']._serialized_end=5560 + _globals['_VMSERVICEMOVEIPREQUEST']._serialized_start=5563 + _globals['_VMSERVICEMOVEIPREQUEST']._serialized_end=5785 + _globals['_VMSERVICEDELETEIPREQUEST']._serialized_start=5788 + _globals['_VMSERVICEDELETEIPREQUEST']._serialized_end=5964 + _globals['_VMSERVICEVALIDATEADDIPREQUEST']._serialized_start=5966 + _globals['_VMSERVICEVALIDATEADDIPREQUEST']._serialized_end=6067 + _globals['_VMSERVICEVALIDATEADDIPRESPONSE']._serialized_start=6069 + _globals['_VMSERVICEVALIDATEADDIPRESPONSE']._serialized_end=6101 + _globals['_VMSERVICE']._serialized_start=6423 + _globals['_VMSERVICE']._serialized_end=8106 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/vm_pb2.pyi b/python/fits/api/vm/v1/vm_pb2.pyi index 930c8dd..2da9562 100644 --- a/python/fits/api/vm/v1/vm_pb2.pyi +++ b/python/fits/api/vm/v1/vm_pb2.pyi @@ -3,6 +3,7 @@ from fits.api.v1 import common_pb2 as _common_pb2 from fits.api.v1 import predefined_rules_pb2 as _predefined_rules_pb2 from fits.api.vm.v1 import vlan_pb2 as _vlan_pb2 from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from collections.abc import Iterable as _Iterable, Mapping as _Mapping @@ -10,8 +11,62 @@ from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union DESCRIPTOR: _descriptor.FileDescriptor +class Availability(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + AVAILABILITY_UNSPECIFIED: _ClassVar[Availability] + AVAILABILITY_V0: _ClassVar[Availability] + AVAILABILITY_V1: _ClassVar[Availability] + AVAILABILITY_V2: _ClassVar[Availability] + AVAILABILITY_V3: _ClassVar[Availability] + +class ServiceClass(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + SERVICE_CLASS_UNSPECIFIED: _ClassVar[ServiceClass] + SERVICE_CLASS_SZ1: _ClassVar[ServiceClass] + SERVICE_CLASS_SZ2: _ClassVar[ServiceClass] + SERVICE_CLASS_SZ3: _ClassVar[ServiceClass] +AVAILABILITY_UNSPECIFIED: Availability +AVAILABILITY_V0: Availability +AVAILABILITY_V1: Availability +AVAILABILITY_V2: Availability +AVAILABILITY_V3: Availability +SERVICE_CLASS_UNSPECIFIED: ServiceClass +SERVICE_CLASS_SZ1: ServiceClass +SERVICE_CLASS_SZ2: ServiceClass +SERVICE_CLASS_SZ3: ServiceClass + +class LinuxDetails(_message.Message): + __slots__ = ("disks", "ldap_uuid", "ldap_fqdn") + DISKS_FIELD_NUMBER: _ClassVar[int] + LDAP_UUID_FIELD_NUMBER: _ClassVar[int] + LDAP_FQDN_FIELD_NUMBER: _ClassVar[int] + disks: _containers.RepeatedCompositeFieldContainer[LinuxDisk] + ldap_uuid: str + ldap_fqdn: str + def __init__(self, disks: _Optional[_Iterable[_Union[LinuxDisk, _Mapping]]] = ..., ldap_uuid: _Optional[str] = ..., ldap_fqdn: _Optional[str] = ...) -> None: ... + +class WindowsDetails(_message.Message): + __slots__ = ("disks", "domain_uuid", "domain_fqdn") + DISKS_FIELD_NUMBER: _ClassVar[int] + DOMAIN_UUID_FIELD_NUMBER: _ClassVar[int] + DOMAIN_FQDN_FIELD_NUMBER: _ClassVar[int] + disks: _containers.RepeatedCompositeFieldContainer[WindowsDisk] + domain_uuid: str + domain_fqdn: str + def __init__(self, disks: _Optional[_Iterable[_Union[WindowsDisk, _Mapping]]] = ..., domain_uuid: _Optional[str] = ..., domain_fqdn: _Optional[str] = ...) -> None: ... + +class NetworkInterface(_message.Message): + __slots__ = ("uuid", "ipaddress", "macaddress") + UUID_FIELD_NUMBER: _ClassVar[int] + IPADDRESS_FIELD_NUMBER: _ClassVar[int] + MACADDRESS_FIELD_NUMBER: _ClassVar[int] + uuid: str + ipaddress: str + macaddress: str + def __init__(self, uuid: _Optional[str] = ..., ipaddress: _Optional[str] = ..., macaddress: _Optional[str] = ...) -> None: ... + class VMInstance(_message.Message): - __slots__ = ("uuid", "meta", "fqdn", "tenant", "project_uuid", "os_uuid", "location_uuid", "contact_uuid", "cpu", "ram", "order_number", "contract", "backup", "availability", "serviceclass", "status", "status_info", "windows_details", "linux_details", "interfaces", "vlan") + __slots__ = ("uuid", "meta", "fqdn", "tenant", "project_uuid", "os_uuid", "location_uuid", "contact_uuid", "cpu", "ram", "backup", "status", "status_info", "availability", "serviceclass", "windows_details", "linux_details", "interfaces", "vlan", "order_number", "contract") UUID_FIELD_NUMBER: _ClassVar[int] META_FIELD_NUMBER: _ClassVar[int] FQDN_FIELD_NUMBER: _ClassVar[int] @@ -22,17 +77,17 @@ class VMInstance(_message.Message): CONTACT_UUID_FIELD_NUMBER: _ClassVar[int] CPU_FIELD_NUMBER: _ClassVar[int] RAM_FIELD_NUMBER: _ClassVar[int] - ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] - CONTRACT_FIELD_NUMBER: _ClassVar[int] BACKUP_FIELD_NUMBER: _ClassVar[int] - AVAILABILITY_FIELD_NUMBER: _ClassVar[int] - SERVICECLASS_FIELD_NUMBER: _ClassVar[int] STATUS_FIELD_NUMBER: _ClassVar[int] STATUS_INFO_FIELD_NUMBER: _ClassVar[int] + AVAILABILITY_FIELD_NUMBER: _ClassVar[int] + SERVICECLASS_FIELD_NUMBER: _ClassVar[int] WINDOWS_DETAILS_FIELD_NUMBER: _ClassVar[int] LINUX_DETAILS_FIELD_NUMBER: _ClassVar[int] INTERFACES_FIELD_NUMBER: _ClassVar[int] VLAN_FIELD_NUMBER: _ClassVar[int] + ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] + CONTRACT_FIELD_NUMBER: _ClassVar[int] uuid: str meta: _common_pb2.Meta fqdn: str @@ -43,56 +98,26 @@ class VMInstance(_message.Message): contact_uuid: str cpu: int ram: int - order_number: str - contract: bool backup: bool - availability: str - serviceclass: str status: str status_info: str + availability: Availability + serviceclass: ServiceClass windows_details: WindowsDetails linux_details: LinuxDetails interfaces: _containers.RepeatedCompositeFieldContainer[NetworkInterface] vlan: _vlan_pb2.Vlan - def __init__(self, uuid: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., fqdn: _Optional[str] = ..., tenant: _Optional[str] = ..., project_uuid: _Optional[str] = ..., os_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., order_number: _Optional[str] = ..., contract: _Optional[bool] = ..., backup: _Optional[bool] = ..., availability: _Optional[str] = ..., serviceclass: _Optional[str] = ..., status: _Optional[str] = ..., status_info: _Optional[str] = ..., windows_details: _Optional[_Union[WindowsDetails, _Mapping]] = ..., linux_details: _Optional[_Union[LinuxDetails, _Mapping]] = ..., interfaces: _Optional[_Iterable[_Union[NetworkInterface, _Mapping]]] = ..., vlan: _Optional[_Union[_vlan_pb2.Vlan, _Mapping]] = ...) -> None: ... - -class LinuxDetails(_message.Message): - __slots__ = ("disks", "ldap_uuid", "ldap_fqdn") - DISKS_FIELD_NUMBER: _ClassVar[int] - LDAP_UUID_FIELD_NUMBER: _ClassVar[int] - LDAP_FQDN_FIELD_NUMBER: _ClassVar[int] - disks: _containers.RepeatedCompositeFieldContainer[LinuxDisk] - ldap_uuid: str - ldap_fqdn: str - def __init__(self, disks: _Optional[_Iterable[_Union[LinuxDisk, _Mapping]]] = ..., ldap_uuid: _Optional[str] = ..., ldap_fqdn: _Optional[str] = ...) -> None: ... - -class WindowsDetails(_message.Message): - __slots__ = ("disks", "domain_uuid", "domain_fqdn") - DISKS_FIELD_NUMBER: _ClassVar[int] - DOMAIN_UUID_FIELD_NUMBER: _ClassVar[int] - DOMAIN_FQDN_FIELD_NUMBER: _ClassVar[int] - disks: _containers.RepeatedCompositeFieldContainer[WindowsDisk] - domain_uuid: str - domain_fqdn: str - def __init__(self, disks: _Optional[_Iterable[_Union[WindowsDisk, _Mapping]]] = ..., domain_uuid: _Optional[str] = ..., domain_fqdn: _Optional[str] = ...) -> None: ... - -class NetworkInterface(_message.Message): - __slots__ = ("uuid", "ipaddress", "macaddress") - UUID_FIELD_NUMBER: _ClassVar[int] - IPADDRESS_FIELD_NUMBER: _ClassVar[int] - MACADDRESS_FIELD_NUMBER: _ClassVar[int] - uuid: str - ipaddress: str - macaddress: str - def __init__(self, uuid: _Optional[str] = ..., ipaddress: _Optional[str] = ..., macaddress: _Optional[str] = ...) -> None: ... + order_number: str + contract: bool + def __init__(self, uuid: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., fqdn: _Optional[str] = ..., tenant: _Optional[str] = ..., project_uuid: _Optional[str] = ..., os_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., backup: _Optional[bool] = ..., status: _Optional[str] = ..., status_info: _Optional[str] = ..., availability: _Optional[_Union[Availability, str]] = ..., serviceclass: _Optional[_Union[ServiceClass, str]] = ..., windows_details: _Optional[_Union[WindowsDetails, _Mapping]] = ..., linux_details: _Optional[_Union[LinuxDetails, _Mapping]] = ..., interfaces: _Optional[_Iterable[_Union[NetworkInterface, _Mapping]]] = ..., vlan: _Optional[_Union[_vlan_pb2.Vlan, _Mapping]] = ..., order_number: _Optional[str] = ..., contract: _Optional[bool] = ...) -> None: ... class VMServiceGetRequest(_message.Message): - __slots__ = ("uuid", "project") + __slots__ = ("uuid", "tenant") UUID_FIELD_NUMBER: _ClassVar[int] - PROJECT_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] uuid: str - project: str - def __init__(self, uuid: _Optional[str] = ..., project: _Optional[str] = ...) -> None: ... + tenant: str + def __init__(self, uuid: _Optional[str] = ..., tenant: _Optional[str] = ...) -> None: ... class VMServiceGetResponse(_message.Message): __slots__ = ("vm",) @@ -101,20 +126,20 @@ class VMServiceGetResponse(_message.Message): def __init__(self, vm: _Optional[_Union[VMInstance, _Mapping]] = ...) -> None: ... class VMServiceCreateWindowsRequest(_message.Message): - __slots__ = ("domain_uuid", "disk") + __slots__ = ("domain_uuid", "disks") DOMAIN_UUID_FIELD_NUMBER: _ClassVar[int] - DISK_FIELD_NUMBER: _ClassVar[int] + DISKS_FIELD_NUMBER: _ClassVar[int] domain_uuid: str - disk: WindowsDisk - def __init__(self, domain_uuid: _Optional[str] = ..., disk: _Optional[_Union[WindowsDisk, _Mapping]] = ...) -> None: ... + disks: _containers.RepeatedCompositeFieldContainer[WindowsDisk] + def __init__(self, domain_uuid: _Optional[str] = ..., disks: _Optional[_Iterable[_Union[WindowsDisk, _Mapping]]] = ...) -> None: ... class VMServiceCreateLinuxRequest(_message.Message): - __slots__ = ("ldap_uuid", "disk") + __slots__ = ("ldap_uuid", "disks") LDAP_UUID_FIELD_NUMBER: _ClassVar[int] - DISK_FIELD_NUMBER: _ClassVar[int] + DISKS_FIELD_NUMBER: _ClassVar[int] ldap_uuid: str - disk: LinuxDisk - def __init__(self, ldap_uuid: _Optional[str] = ..., disk: _Optional[_Union[LinuxDisk, _Mapping]] = ...) -> None: ... + disks: _containers.RepeatedCompositeFieldContainer[LinuxDisk] + def __init__(self, ldap_uuid: _Optional[str] = ..., disks: _Optional[_Iterable[_Union[LinuxDisk, _Mapping]]] = ...) -> None: ... class VMServiceCreateRequest(_message.Message): __slots__ = ("project_uuid", "name", "os_uuid", "vlan_uuid", "location_uuid", "contact_uuid", "cpu", "ram", "order_number", "labels", "backup", "availability", "serviceclass", "windows", "linux") @@ -144,59 +169,91 @@ class VMServiceCreateRequest(_message.Message): order_number: str labels: _common_pb2.Labels backup: bool - availability: str - serviceclass: str + availability: Availability + serviceclass: ServiceClass windows: VMServiceCreateWindowsRequest linux: VMServiceCreateLinuxRequest - def __init__(self, project_uuid: _Optional[str] = ..., name: _Optional[str] = ..., os_uuid: _Optional[str] = ..., vlan_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., order_number: _Optional[str] = ..., labels: _Optional[_Union[_common_pb2.Labels, _Mapping]] = ..., backup: _Optional[bool] = ..., availability: _Optional[str] = ..., serviceclass: _Optional[str] = ..., windows: _Optional[_Union[VMServiceCreateWindowsRequest, _Mapping]] = ..., linux: _Optional[_Union[VMServiceCreateLinuxRequest, _Mapping]] = ...) -> None: ... + def __init__(self, project_uuid: _Optional[str] = ..., name: _Optional[str] = ..., os_uuid: _Optional[str] = ..., vlan_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., order_number: _Optional[str] = ..., labels: _Optional[_Union[_common_pb2.Labels, _Mapping]] = ..., backup: _Optional[bool] = ..., availability: _Optional[_Union[Availability, str]] = ..., serviceclass: _Optional[_Union[ServiceClass, str]] = ..., windows: _Optional[_Union[VMServiceCreateWindowsRequest, _Mapping]] = ..., linux: _Optional[_Union[VMServiceCreateLinuxRequest, _Mapping]] = ...) -> None: ... class LinuxDisk(_message.Message): - __slots__ = ("auto_extend", "size_in_gb", "label", "mount_point") - AUTO_EXTEND_FIELD_NUMBER: _ClassVar[int] - SIZE_IN_GB_FIELD_NUMBER: _ClassVar[int] + __slots__ = ("uuid", "label", "auto_extend", "size", "mount_point") + UUID_FIELD_NUMBER: _ClassVar[int] LABEL_FIELD_NUMBER: _ClassVar[int] + AUTO_EXTEND_FIELD_NUMBER: _ClassVar[int] + SIZE_FIELD_NUMBER: _ClassVar[int] MOUNT_POINT_FIELD_NUMBER: _ClassVar[int] - auto_extend: bool - size_in_gb: int + uuid: str label: str + auto_extend: bool + size: int mount_point: str - def __init__(self, auto_extend: _Optional[bool] = ..., size_in_gb: _Optional[int] = ..., label: _Optional[str] = ..., mount_point: _Optional[str] = ...) -> None: ... + def __init__(self, uuid: _Optional[str] = ..., label: _Optional[str] = ..., auto_extend: _Optional[bool] = ..., size: _Optional[int] = ..., mount_point: _Optional[str] = ...) -> None: ... class WindowsDisk(_message.Message): - __slots__ = ("auto_extend", "size_in_gb", "driveletter", "label") + __slots__ = ("uuid", "label", "auto_extend", "size", "driveletter") + UUID_FIELD_NUMBER: _ClassVar[int] + LABEL_FIELD_NUMBER: _ClassVar[int] AUTO_EXTEND_FIELD_NUMBER: _ClassVar[int] - SIZE_IN_GB_FIELD_NUMBER: _ClassVar[int] + SIZE_FIELD_NUMBER: _ClassVar[int] DRIVELETTER_FIELD_NUMBER: _ClassVar[int] - LABEL_FIELD_NUMBER: _ClassVar[int] + uuid: str + label: str auto_extend: bool - size_in_gb: int + size: int driveletter: str - label: str - def __init__(self, auto_extend: _Optional[bool] = ..., size_in_gb: _Optional[int] = ..., driveletter: _Optional[str] = ..., label: _Optional[str] = ...) -> None: ... + def __init__(self, uuid: _Optional[str] = ..., label: _Optional[str] = ..., auto_extend: _Optional[bool] = ..., size: _Optional[int] = ..., driveletter: _Optional[str] = ...) -> None: ... class VMServiceCreateResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... class VMServiceUpdateRequest(_message.Message): - __slots__ = ("project_uuid", "update_meta") - PROJECT_UUID_FIELD_NUMBER: _ClassVar[int] + __slots__ = ("uuid", "project", "order_number", "update_meta", "performance_class", "service_class", "contact") + UUID_FIELD_NUMBER: _ClassVar[int] + PROJECT_FIELD_NUMBER: _ClassVar[int] + ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] UPDATE_META_FIELD_NUMBER: _ClassVar[int] - project_uuid: str + PERFORMANCE_CLASS_FIELD_NUMBER: _ClassVar[int] + SERVICE_CLASS_FIELD_NUMBER: _ClassVar[int] + CONTACT_FIELD_NUMBER: _ClassVar[int] + uuid: str + project: str + order_number: str update_meta: _common_pb2.UpdateMeta - def __init__(self, project_uuid: _Optional[str] = ..., update_meta: _Optional[_Union[_common_pb2.UpdateMeta, _Mapping]] = ...) -> None: ... + performance_class: PerformanceClassChange + service_class: ServiceClassChange + contact: ContactChange + def __init__(self, uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ..., update_meta: _Optional[_Union[_common_pb2.UpdateMeta, _Mapping]] = ..., performance_class: _Optional[_Union[PerformanceClassChange, _Mapping]] = ..., service_class: _Optional[_Union[ServiceClassChange, _Mapping]] = ..., contact: _Optional[_Union[ContactChange, _Mapping]] = ...) -> None: ... + +class PerformanceClassChange(_message.Message): + __slots__ = ("cpu", "ram") + CPU_FIELD_NUMBER: _ClassVar[int] + RAM_FIELD_NUMBER: _ClassVar[int] + cpu: int + ram: int + def __init__(self, cpu: _Optional[int] = ..., ram: _Optional[int] = ...) -> None: ... + +class ServiceClassChange(_message.Message): + __slots__ = ("serviceclass",) + SERVICECLASS_FIELD_NUMBER: _ClassVar[int] + serviceclass: ServiceClass + def __init__(self, serviceclass: _Optional[_Union[ServiceClass, str]] = ...) -> None: ... + +class ContactChange(_message.Message): + __slots__ = ("contact_uuid",) + CONTACT_UUID_FIELD_NUMBER: _ClassVar[int] + contact_uuid: str + def __init__(self, contact_uuid: _Optional[str] = ...) -> None: ... class VMServiceUpdateResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... class VMServiceListRequest(_message.Message): - __slots__ = ("tenant", "project_uuid") + __slots__ = ("tenant",) TENANT_FIELD_NUMBER: _ClassVar[int] - PROJECT_UUID_FIELD_NUMBER: _ClassVar[int] tenant: str - project_uuid: str - def __init__(self, tenant: _Optional[str] = ..., project_uuid: _Optional[str] = ...) -> None: ... + def __init__(self, tenant: _Optional[str] = ...) -> None: ... class VMServiceListResponse(_message.Message): __slots__ = ("vms",) @@ -205,11 +262,157 @@ class VMServiceListResponse(_message.Message): def __init__(self, vms: _Optional[_Iterable[_Union[VMInstance, _Mapping]]] = ...) -> None: ... class VMServiceDeleteRequest(_message.Message): - __slots__ = ("project",) + __slots__ = ("project", "uuid", "order_number") PROJECT_FIELD_NUMBER: _ClassVar[int] + UUID_FIELD_NUMBER: _ClassVar[int] + ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] project: str - def __init__(self, project: _Optional[str] = ...) -> None: ... + uuid: str + order_number: str + def __init__(self, project: _Optional[str] = ..., uuid: _Optional[str] = ..., order_number: _Optional[str] = ...) -> None: ... class VMServiceDeleteResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... + +class VMServiceValidateCreateRequest(_message.Message): + __slots__ = ("create",) + CREATE_FIELD_NUMBER: _ClassVar[int] + create: VMServiceCreateRequest + def __init__(self, create: _Optional[_Union[VMServiceCreateRequest, _Mapping]] = ...) -> None: ... + +class VMServiceValidateCreateResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class VMServiceValidateAddDiskRequest(_message.Message): + __slots__ = ("add_disk",) + ADD_DISK_FIELD_NUMBER: _ClassVar[int] + add_disk: VMServiceAddDiskRequest + def __init__(self, add_disk: _Optional[_Union[VMServiceAddDiskRequest, _Mapping]] = ...) -> None: ... + +class VMServiceValidateAddDiskResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class VMServiceValidateUpdateDiskRequest(_message.Message): + __slots__ = ("update_disk",) + UPDATE_DISK_FIELD_NUMBER: _ClassVar[int] + update_disk: VMServiceUpdateDiskRequest + def __init__(self, update_disk: _Optional[_Union[VMServiceUpdateDiskRequest, _Mapping]] = ...) -> None: ... + +class VMServiceValidateUpdateDiskResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class VMServiceAddDiskResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class VMServiceUpdateDiskResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class VMServiceDeleteDiskResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class VMServiceAddDiskRequest(_message.Message): + __slots__ = ("uuid", "project", "order_number", "linux", "windows") + UUID_FIELD_NUMBER: _ClassVar[int] + PROJECT_FIELD_NUMBER: _ClassVar[int] + ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] + LINUX_FIELD_NUMBER: _ClassVar[int] + WINDOWS_FIELD_NUMBER: _ClassVar[int] + uuid: str + project: str + order_number: str + linux: LinuxDisk + windows: WindowsDisk + def __init__(self, uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ..., linux: _Optional[_Union[LinuxDisk, _Mapping]] = ..., windows: _Optional[_Union[WindowsDisk, _Mapping]] = ...) -> None: ... + +class VMServiceUpdateDiskRequest(_message.Message): + __slots__ = ("uuid", "disk_uuid", "project", "order_number", "auto_extend", "size") + UUID_FIELD_NUMBER: _ClassVar[int] + DISK_UUID_FIELD_NUMBER: _ClassVar[int] + PROJECT_FIELD_NUMBER: _ClassVar[int] + ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] + AUTO_EXTEND_FIELD_NUMBER: _ClassVar[int] + SIZE_FIELD_NUMBER: _ClassVar[int] + uuid: str + disk_uuid: str + project: str + order_number: str + auto_extend: bool + size: int + def __init__(self, uuid: _Optional[str] = ..., disk_uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ..., auto_extend: _Optional[bool] = ..., size: _Optional[int] = ...) -> None: ... + +class VMServiceDeleteDiskRequest(_message.Message): + __slots__ = ("uuid", "disk_uuid", "project", "order_number") + UUID_FIELD_NUMBER: _ClassVar[int] + DISK_UUID_FIELD_NUMBER: _ClassVar[int] + PROJECT_FIELD_NUMBER: _ClassVar[int] + ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] + uuid: str + disk_uuid: str + project: str + order_number: str + def __init__(self, uuid: _Optional[str] = ..., disk_uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ...) -> None: ... + +class VMServiceAddIPResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class VMServiceMoveIPResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class VMServiceDeleteIPResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class VMServiceAddIPRequest(_message.Message): + __slots__ = ("uuid", "project", "order_number") + UUID_FIELD_NUMBER: _ClassVar[int] + PROJECT_FIELD_NUMBER: _ClassVar[int] + ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] + uuid: str + project: str + order_number: str + def __init__(self, uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ...) -> None: ... + +class VMServiceMoveIPRequest(_message.Message): + __slots__ = ("uuid", "interface_uuid", "project", "order_number", "target_vm_uuid") + UUID_FIELD_NUMBER: _ClassVar[int] + INTERFACE_UUID_FIELD_NUMBER: _ClassVar[int] + PROJECT_FIELD_NUMBER: _ClassVar[int] + ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] + TARGET_VM_UUID_FIELD_NUMBER: _ClassVar[int] + uuid: str + interface_uuid: str + project: str + order_number: str + target_vm_uuid: str + def __init__(self, uuid: _Optional[str] = ..., interface_uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ..., target_vm_uuid: _Optional[str] = ...) -> None: ... + +class VMServiceDeleteIPRequest(_message.Message): + __slots__ = ("uuid", "interface_uuid", "project", "order_number") + UUID_FIELD_NUMBER: _ClassVar[int] + INTERFACE_UUID_FIELD_NUMBER: _ClassVar[int] + PROJECT_FIELD_NUMBER: _ClassVar[int] + ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] + uuid: str + interface_uuid: str + project: str + order_number: str + def __init__(self, uuid: _Optional[str] = ..., interface_uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ...) -> None: ... + +class VMServiceValidateAddIPRequest(_message.Message): + __slots__ = ("add_ip",) + ADD_IP_FIELD_NUMBER: _ClassVar[int] + add_ip: VMServiceAddIPRequest + def __init__(self, add_ip: _Optional[_Union[VMServiceAddIPRequest, _Mapping]] = ...) -> None: ... + +class VMServiceValidateAddIPResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... From 2044779830a81726140c53e9c2c82f46fbcc2269 Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Tue, 22 Sep 2026 08:34:26 +0200 Subject: [PATCH 14/21] fix: typo --- proto/fits/api/vm/v1/vlan.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/fits/api/vm/v1/vlan.proto b/proto/fits/api/vm/v1/vlan.proto index 085c45b..1d9c481 100644 --- a/proto/fits/api/vm/v1/vlan.proto +++ b/proto/fits/api/vm/v1/vlan.proto @@ -6,7 +6,7 @@ import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; -// VLANService lists VLANs avaiable for VM instances. +// VLANService lists VLANs available for VM instances. service VlanService { // Returns a list of all VLANs available for a tenant. rpc List(VlanServiceListRequest) returns (VlanServiceListResponse) { From b6ee263296f19befa6375bf7fe427625b9681535 Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Thu, 24 Sep 2026 08:15:51 +0200 Subject: [PATCH 15/21] feat: rename to managed VM (MVM) and nulink v0.3.0 support --- doc/index.html | 5718 +++++++++-------- go/client/client.go | 136 +- go/fits/api/{vm => mvm}/v1/location.pb.go | 92 +- go/fits/api/mvm/v1/mvm.pb.go | 3351 ++++++++++ .../v1/mvmv1connect}/location.connect.go | 26 +- .../api/mvm/v1/mvmv1connect/mvm.connect.go | 603 ++ .../v1/mvmv1connect}/os.connect.go | 26 +- .../v1/mvmv1connect}/stagetype.connect.go | 30 +- .../v1/mvmv1connect}/vlan.connect.go | 76 +- go/fits/api/{vm => mvm}/v1/os.pb.go | 92 +- go/fits/api/{vm => mvm}/v1/stagetype.pb.go | 92 +- go/fits/api/{vm => mvm}/v1/vlan.pb.go | 180 +- go/fits/api/vm/v1/service.pb.go | 231 - go/fits/api/vm/v1/vm.pb.go | 3206 --------- .../api/vm/v1/vmv1connect/service.connect.go | 114 - go/fits/api/vm/v1/vmv1connect/vm.connect.go | 595 -- go/permissions/servicepermissions.go | 314 +- js/client.ts | 184 +- js/fits/api/mvm/v1/location_pb.ts | 106 + js/fits/api/mvm/v1/mvm_pb.ts | 1788 ++++++ js/fits/api/mvm/v1/os_pb.ts | 114 + js/fits/api/mvm/v1/stagetype_pb.ts | 100 + js/fits/api/mvm/v1/vlan_pb.ts | 176 + js/fits/api/vm/v1/location_pb.ts | 106 - js/fits/api/vm/v1/os_pb.d.ts | 25 - js/fits/api/vm/v1/os_pb.js | 14 - js/fits/api/vm/v1/os_pb.ts | 114 - js/fits/api/vm/v1/service_pb.ts | 105 - js/fits/api/vm/v1/stagetype_pb.ts | 100 - js/fits/api/vm/v1/vlan_pb.ts | 176 - js/fits/api/vm/v1/vm_pb.d.ts | 361 -- js/fits/api/vm/v1/vm_pb.js | 77 - js/fits/api/vm/v1/vm_pb.ts | 1679 ----- proto/fits/api/{vm => mvm}/v1/location.proto | 6 +- .../api/{vm/v1/vm.proto => mvm/v1/mvm.proto} | 384 +- proto/fits/api/{vm => mvm}/v1/os.proto | 6 +- proto/fits/api/{vm => mvm}/v1/stagetype.proto | 4 +- proto/fits/api/{vm => mvm}/v1/vlan.proto | 22 +- python/fits/api/{vm => mvm}/__init__.py | 0 python/fits/api/{vm => mvm}/v1/__init__.py | 0 .../api/{vm => mvm}/v1/location_connect.py | 48 +- .../fits/api/{vm => mvm}/v1/location_pb2.py | 26 +- .../fits/api/{vm => mvm}/v1/location_pb2.pyi | 0 python/fits/api/mvm/v1/mvm_connect.py | 1041 +++ python/fits/api/mvm/v1/mvm_pb2.py | 321 + .../{vm/v1/vm_pb2.pyi => mvm/v1/mvm_pb2.pyi} | 145 +- python/fits/api/{vm => mvm}/v1/os_connect.py | 48 +- python/fits/api/{vm => mvm}/v1/os_pb2.py | 26 +- python/fits/api/{vm => mvm}/v1/os_pb2.pyi | 0 .../api/{vm => mvm}/v1/stagetype_connect.py | 48 +- python/fits/api/mvm/v1/stagetype_pb2.py | 52 + .../fits/api/{vm => mvm}/v1/stagetype_pb2.pyi | 0 .../fits/api/{vm => mvm}/v1/vlan_connect.py | 64 +- python/fits/api/mvm/v1/vlan_pb2.py | 60 + python/fits/api/{vm => mvm}/v1/vlan_pb2.pyi | 10 +- python/fits/api/vm/v1/stagetype_pb2.py | 52 - python/fits/api/vm/v1/vlan_pb2.py | 60 - python/fits/api/vm/v1/vm_connect.py | 1041 --- python/fits/api/vm/v1/vm_pb2.py | 307 - python/fits/client/client.py | 62 +- 60 files changed, 11723 insertions(+), 12217 deletions(-) rename go/fits/api/{vm => mvm}/v1/location.pb.go (59%) create mode 100644 go/fits/api/mvm/v1/mvm.pb.go rename go/fits/api/{vm/v1/vmv1connect => mvm/v1/mvmv1connect}/location.connect.go (82%) create mode 100644 go/fits/api/mvm/v1/mvmv1connect/mvm.connect.go rename go/fits/api/{vm/v1/vmv1connect => mvm/v1/mvmv1connect}/os.connect.go (81%) rename go/fits/api/{vm/v1/vmv1connect => mvm/v1/mvmv1connect}/stagetype.connect.go (79%) rename go/fits/api/{vm/v1/vmv1connect => mvm/v1/mvmv1connect}/vlan.connect.go (50%) rename go/fits/api/{vm => mvm}/v1/os.pb.go (62%) rename go/fits/api/{vm => mvm}/v1/stagetype.pb.go (58%) rename go/fits/api/{vm => mvm}/v1/vlan.pb.go (53%) delete mode 100644 go/fits/api/vm/v1/service.pb.go delete mode 100644 go/fits/api/vm/v1/vm.pb.go delete mode 100644 go/fits/api/vm/v1/vmv1connect/service.connect.go delete mode 100644 go/fits/api/vm/v1/vmv1connect/vm.connect.go create mode 100644 js/fits/api/mvm/v1/location_pb.ts create mode 100644 js/fits/api/mvm/v1/mvm_pb.ts create mode 100644 js/fits/api/mvm/v1/os_pb.ts create mode 100644 js/fits/api/mvm/v1/stagetype_pb.ts create mode 100644 js/fits/api/mvm/v1/vlan_pb.ts delete mode 100644 js/fits/api/vm/v1/location_pb.ts delete mode 100644 js/fits/api/vm/v1/os_pb.d.ts delete mode 100644 js/fits/api/vm/v1/os_pb.js delete mode 100644 js/fits/api/vm/v1/os_pb.ts delete mode 100644 js/fits/api/vm/v1/service_pb.ts delete mode 100644 js/fits/api/vm/v1/stagetype_pb.ts delete mode 100644 js/fits/api/vm/v1/vlan_pb.ts delete mode 100644 js/fits/api/vm/v1/vm_pb.d.ts delete mode 100644 js/fits/api/vm/v1/vm_pb.js delete mode 100644 js/fits/api/vm/v1/vm_pb.ts rename proto/fits/api/{vm => mvm}/v1/location.proto (89%) rename proto/fits/api/{vm/v1/vm.proto => mvm/v1/mvm.proto} (55%) rename proto/fits/api/{vm => mvm}/v1/os.proto (87%) rename proto/fits/api/{vm => mvm}/v1/stagetype.proto (91%) rename proto/fits/api/{vm => mvm}/v1/vlan.proto (77%) rename python/fits/api/{vm => mvm}/__init__.py (100%) rename python/fits/api/{vm => mvm}/v1/__init__.py (100%) rename python/fits/api/{vm => mvm}/v1/location_connect.py (62%) rename python/fits/api/{vm => mvm}/v1/location_pb2.py (50%) rename python/fits/api/{vm => mvm}/v1/location_pb2.pyi (100%) create mode 100644 python/fits/api/mvm/v1/mvm_connect.py create mode 100644 python/fits/api/mvm/v1/mvm_pb2.py rename python/fits/api/{vm/v1/vm_pb2.pyi => mvm/v1/mvm_pb2.pyi} (78%) rename python/fits/api/{vm => mvm}/v1/os_connect.py (65%) rename python/fits/api/{vm => mvm}/v1/os_pb2.py (51%) rename python/fits/api/{vm => mvm}/v1/os_pb2.pyi (100%) rename python/fits/api/{vm => mvm}/v1/stagetype_connect.py (62%) create mode 100644 python/fits/api/mvm/v1/stagetype_pb2.py rename python/fits/api/{vm => mvm}/v1/stagetype_pb2.pyi (100%) rename python/fits/api/{vm => mvm}/v1/vlan_connect.py (56%) create mode 100644 python/fits/api/mvm/v1/vlan_pb2.py rename python/fits/api/{vm => mvm}/v1/vlan_pb2.pyi (89%) delete mode 100644 python/fits/api/vm/v1/stagetype_pb2.py delete mode 100644 python/fits/api/vm/v1/vlan_pb2.py delete mode 100644 python/fits/api/vm/v1/vm_connect.py delete mode 100644 python/fits/api/vm/v1/vm_pb2.py diff --git a/doc/index.html b/doc/index.html index ce58cd7..c0d1d2f 100644 --- a/doc/index.html +++ b/doc/index.html @@ -324,6 +324,305 @@

      Table of Contents

      +
    • + fits/api/mvm/v1/location.proto + +
    • + + +
    • + fits/api/mvm/v1/vlan.proto + +
    • + + +
    • + fits/api/mvm/v1/mvm.proto + +
    • + + +
    • + fits/api/mvm/v1/os.proto + +
    • + + +
    • + fits/api/mvm/v1/stagetype.proto + +
    • + +
    • fits/api/v1/health.proto
        @@ -724,301 +1023,6 @@

        Table of Contents

    • - -
    • - fits/api/vm/v1/location.proto - -
    • - - -
    • - fits/api/vm/v1/os.proto - -
    • - - -
    • - fits/api/vm/v1/stagetype.proto - -
    • - - -
    • - fits/api/vm/v1/vlan.proto - -
    • - - -
    • - fits/api/vm/v1/vm.proto - -
    • -
    • Scalar Value Types
    @@ -1625,13 +1629,13 @@

    File-level Extensions

    -

    fits/api/v1/health.proto

    Top +

    fits/api/mvm/v1/location.proto

    Top

    -

    Health

    -

    Health reports the health status of all services.

    +

    Location

    +

    Location is the definition of an available datacenter location for MVM instances.

    @@ -1641,10 +1645,17 @@

    Health

    - - - - + + + + + + + + + + + @@ -1654,15 +1665,8 @@

    Health

    -

    HealthServiceGetRequest

    -

    HealthServiceGetRequest is the request payload for getting the health of the system.

    - - - - - -

    HealthServiceGetResponse

    -

    HealthServiceGetResponse is the response payload for getting the health of the system.

    +

    LocationServiceListRequest

    +

    LocationServiceListRequest is the request payload for a location list request.

    servicesHealthStatusrepeated

    Services contains the health of all individual services

    uuidstring

    Uuid of this location

    titlestring

    title of the location

    @@ -1672,10 +1676,10 @@

    HealthServiceGetResponse

    - - + + - + @@ -1685,8 +1689,8 @@

    HealthServiceGetResponse

    -

    HealthStatus

    -

    HealthStatus represents the health status of one service.

    +

    LocationServiceListResponse

    +

    LocationServiceListResponse is the response payload for a location list request

    healthHealthtenantstring

    Health contains the overall health of the system

    Tenant to list available locations for

    @@ -1696,93 +1700,10 @@

    HealthStatus

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    nameService

    Name is the name of the service

    statusServiceStatus

    Status is the status of this service

    messagestring

    Message describes the reason for the unhealthy status if possible

    partitionsHealthStatus.PartitionsEntryrepeated

    Partitions describes the health of the service by partition

    - - - - - -

    HealthStatus.PartitionsEntry

    -

    - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    keystring

    valuePartitionHealth

    - - - - - -

    PartitionHealth

    -

    PartitionHealth represents the status of a specific service in this partition.

    - - - - - - - - - - - - - - - - - - - - + + + + @@ -1794,70 +1715,12 @@

    PartitionHealth

    -

    Service

    -

    Service defines the service for which the healthiness is reported.

    -
    FieldTypeLabelDescription
    statusServiceStatus

    Status is the health status of the service in this partition

    messagestring

    Message describes the reason for the unhealthy status if possible

    locationsLocationrepeated

    The available locations

    - - - - - - - - - - - - - - - - - - -
    NameNumberDescription
    SERVICE_UNSPECIFIED0

    SERVICE_UNSPECIFIED is a unknown service

    SERVICE_K8S1

    SERVICE_K8S the kubernetes service

    - -

    ServiceStatus

    -

    ServiceStatus defines the status of a service.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameNumberDescription
    SERVICE_STATUS_UNSPECIFIED0

    SERVICE_STATUS_UNSPECIFIED service status is not known or unspecified

    SERVICE_STATUS_DEGRADED1

    SERVICE_STATUS_DEGRADED the service is in degraded status, not the whole functionality is available

    SERVICE_STATUS_UNHEALTHY2

    SERVICE_STATUS_UNHEALTHY the service is in unhealthy status, serious impact is expected

    SERVICE_STATUS_HEALTHY3

    SERVICE_STATUS_HEALTHY the service is in healthy status, for example fully functional

    - -

    HealthService

    -

    HealthService provides health status monitoring operations.

    +

    LocationService

    +

    LocationService lists datacenter locations available for managed VM (MVM) instances, scoped per tenant.

    @@ -1865,10 +1728,10 @@

    HealthService

    - - - - + + + + @@ -1878,13 +1741,13 @@

    HealthService

    -

    fits/api/v1/ip.proto

    Top +

    fits/api/mvm/v1/vlan.proto

    Top

    -

    IP

    -

    IP is a ip address which can be used as loadbalancer addresses

    +

    VLAN

    +

    VLAN is a VLAN that a MVM can be connected to.

    Method NameRequest TypeResponse TypeDescription
    GetHealthServiceGetRequestHealthServiceGetResponse

    Returns the health status of the platform.

    ListLocationServiceListRequestLocationServiceListResponse

    Returns a list of all datacenter locations available for a tenant.

    @@ -1897,64 +1760,84 @@

    IP

    - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + + + + + + + + - + + + + + + + + + + + + + + + @@ -1964,8 +1847,8 @@

    IP

    -

    IPQuery

    -

    IPQuery can be used to query a IP or a list of IP

    +

    VLANServiceListRequest

    +

    VLANServiceListRequest is the request payload for a VLAN list request.

    uuid string

    Uuid of this ip

    Uuid of this VLAN

    metaMetaidint32

    Meta for this ip

    Id of this VLAN

    ipsubnet_title string

    Ip is either ipv4 or ipv6 address

    Title of the subnet this VLAN belongs to

    namesubnet string

    Name of this ip

    CIDR of the subnet this VLAN belongs to

    descriptionsubnetmask string

    Description of this ip

    Subnetmask of this VLAN

    networkgateway string

    Network is the network this ip belongs to

    Gateway of this VLAN

    projectip_range_start string

    Project where this ip address belongs to

    Start of the usable IP range of this VLAN

    typeIPTypeip_range_endstring

    Type of this ip

    End of the usable IP range of this VLAN

    namespaceuse_dhcpbool

    Whether DHCP is used on this VLAN

    location_uuid string optional

    Namespace if specified this ip is from a namespaced network and can therefore overlap with others -Will be equal with project most of the time

    TODO instead of the pod title, could we have the location_uuid?

    stage_type_uuidstring

    Uuid of the stage type of this VLAN

    tenantstring

    Tenant this VLAN belongs to.

    @@ -1975,73 +1858,34 @@

    IPQuery

    - - - - - - - - - - - - - - - + - - + + - - - - - - + +
    ipstringoptional

    Ip the ip to list

    networkstringoptional

    Network from where the ips to list

    projecttenant stringoptional

    Project of the ips to list

    Tenant to list available VLANs for

    namestringoptional

    Name of this ip

    + + + + + +

    VLANServiceListResponse

    +

    VLANServiceListResponse is the response payload for a VLAN list request

    + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -2051,88 +1895,41 @@

    IPQuery

    -

    IPServiceCreateRequest

    -

    IPServiceCreateRequest is the request payload for a ip create request

    - -
    FieldTypeLabelDescription
    uuidstringoptional

    Uuid for which this ips should get filtered

    machinestringoptional

    Machine for which this ips should get filtered

    parent_prefix_cidrstringoptional

    ParentPrefixCidr for which this ips should get filtered

    labelsLabelsoptional

    Labels for which this ips should get filtered

    typeIPTypeoptional

    Static if set to true, this will be a Static ip

    address_familyIPAddressFamilyoptional

    Addressfamily of the IPs to list, defaults to all addressfamilies

    vlansVLANrepeated

    The available VLANs

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    networkstring

    Network from which the IP should be created

    projectstring

    Project of the ip

    namestringoptional

    Name of the ip

    descriptionstringoptional

    Description of the ip

    ipstringoptional

    IP if given try to create this ip if still available

    machinestringoptional

    Machine for which this ip should get created

    labelsLabelsoptional

    Labels to put onto the ip

    typeIPTypeoptional

    Type of the IP, ether ephemeral (default), or static

    address_familyIPAddressFamilyoptional

    Addressfamily of the IP to create, defaults to ipv4

    + - + + + +

    VLANService

    +

    VLANService lists VLANs available for managed VM (MVM) instances.

    + + + + + + + + + + + + + + +
    Method NameRequest TypeResponse TypeDescription
    ListVLANServiceListRequestVLANServiceListResponse

    Returns a list of all VLANs available for a tenant.

    + -

    IPServiceCreateResponse

    -

    IPServiceCreateResponse is the response payload for a ip create request

    +
    +

    fits/api/mvm/v1/mvm.proto

    Top +
    +

    + + +

    ContactChange

    +

    ContactChange is the payload for changing a MVM's contact person.

    @@ -2142,10 +1939,10 @@

    IPServiceCreateResponse

    - - + + - + @@ -2155,8 +1952,8 @@

    IPServiceCreateResponse

    -

    IPServiceDeleteRequest

    -

    IPServiceDeleteRequest is the request payload for a ip delete request

    +

    LinuxDetails

    +

    Linux-specific MVM details.

    ipIPcontact_uuidstring

    Ip the ip

    UUID of the new contact.

    @@ -2166,17 +1963,24 @@

    IPServiceDeleteRequest

    - + + + + + + + + - + - + - + @@ -2186,8 +1990,8 @@

    IPServiceDeleteRequest

    -

    IPServiceDeleteResponse

    -

    IPServiceDeleteResponse is the response payload for a ip delete request

    +

    LinuxDisk

    +

    Disk configuration for a Linux MVM. See DiskType for the kinds of disks

    (os, system, data) and their lifecycle rules.

    ipdisksLinuxDiskrepeated

    Disks configured on the Linux MVM.

    ldap_uuid string

    IP of the ip to delete

    UUID of the LDAP directory the MVM is integrated with.

    projectldap_fqdn string

    Project of the ip

    Linux-specific FQDN, derived from the name at creation or generated by the backend.

    @@ -2197,72 +2001,50 @@

    IPServiceDeleteResponse

    - - - - + + + + - -
    ipIP

    Ip the ip

    uuidstringoptional

    UUID of the disk; set for existing disks, unset for new ones.

    - - - - - -

    IPServiceGetRequest

    -

    IPServiceGetRequest is the request payload for a ip get request

    - - - - - - - - - + - + - - + + - + - - + + - + - -
    FieldTypeLabelDescription
    iplabel string

    IP of the ip to get

    Label (name) of the disk.

    projectstringauto_extendbool

    Project of the ip

    Whether the disk grows automatically when space runs low.

    namespacestringsizeuint64 optional

    Namespace can be specified to get the ip of a namespace.

    Size of the disk in GB; defaults to 50 when unset.

    - - - - - -

    IPServiceGetResponse

    -

    IPServiceGetResponse is the response payload for a ip get request

    - - - - - - - + + + + + + - - - - + + + + @@ -2272,8 +2054,8 @@

    IPServiceGetResponse

    -

    IPServiceListRequest

    -

    IPServiceListRequest is the request payload for a ip list request

    +

    MVMInstance

    +

    A managed VM (MVM) instance as returned by the API.

    FieldTypeLabelDescription
    mount_pointstringoptional

    Mount point (e.g. "/data"). Fixed to "/appdata" for the system disk; +free-form for data disks.

    ipIP

    Ip the ip

    disk_typeDiskTypeoptional

    Kind of the disk; determines which operations are allowed on it. +Provided by the client in create/add requests and populated by the +API in responses. +TODO: talk to FCE that we will provide the disk type in create/add +requests.

    @@ -2283,41 +2065,156 @@

    IPServiceListRequest

    - + - + - - + + - + - -
    projectuuid string

    Project of the ips to list

    UUID of this MVM.

    queryIPQuerymetafits.api.v1.Meta

    Query to list one ore more ips

    Metadata for this MVM. +TODO: dates are available in the nulink db but not passed through yet.

    - - - - - -

    IPServiceListResponse

    -

    IPServiceListResponse is the response payload for a ip list request

    - - - - - - - + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + @@ -2327,8 +2224,8 @@

    IPServiceListResponse

    -

    IPServiceUpdateRequest

    -

    IPServiceUpdateRequest is the request payload for a ip update request

    +

    MVMServiceAddDiskRequest

    +

    Request to order an additional data disk for a MVM.

    FieldTypeLabelDescription
    fqdnstring

    FQDN of the MVM, derived from the name at creation or generated by the backend.

    ipsIPtenantstring

    Tenant this MVM belongs to.

    project_uuidstring

    UUID of the project this MVM belongs to.

    os_uuidstring

    UUID of the OS image installed on the MVM; resolve the title via the OS endpoint.

    location_uuidstring

    UUID of the datacenter location.

    contact_uuidstring

    TODO: Contact UUID – not yet implemented; open discussion with FCN (#23).

    cpuuint32

    Number of CPU cores.

    ramuint32

    RAM in GB.

    backupbool

    Whether backup is enabled. +TODO: the upstream (nulink) list/get models do not expose this; always false.

    statusstring

    Status of the ongoing operation. +TODO: can we have an ENUM here? Active, Are deleted ones there? Are stopped ones accounted? +Would have to be part of openapi spec, otherwise breaking changes couldn't be detected

    status_infostring

    Additional information about the current status.

    availabilityAvailability

    Availability level.

    serviceclassServiceClass

    Service class.

    windows_detailsWindowsDetails

    Windows-specific settings (domain + disks).

    linux_detailsLinuxDetails

    Linux-specific settings (LDAP + disks).

    interfacesNetworkInterface repeated

    Ips the ips

    Network interfaces attached to the MVM (IPv4 only).

    vlanVLAN

    VLAN the MVM is attached to. +TODO: not exposed by the upstream (nulink) MVM records yet; always unset.

    order_numberstring

    Internal reference number provided by the user, e.g. a ticket ID.

    contractbool

    True if the order was placed by FITS, false if self-service. +TODO: maybe remove this field entirely.

    @@ -2338,52 +2235,85 @@

    IPServiceUpdateRequest

    - + - + - - + + - + - + - + - - - - + + + + - + + + + + + + +
    ipuuid string

    Ip the ip to update

    UUID of the MVM to attach the disk to.

    update_metaUpdateMetaprojectstring

    UpdateMeta contains the timestamp and strategy to be used in this update request

    Project the MVM belongs to.

    projectorder_number string

    Project id of the ip

    Order reference for this operation. +TODO: can this be optional?

    namestringoptional

    Name of this ip

    linuxLinuxDisk

    Linux data disk.

    descriptionwindowsWindowsDisk

    Windows data disk.

    + + + + + +

    MVMServiceAddDiskResponse

    +

    Response for AddDisk.

    + + + + + +

    MVMServiceAddNetworkInterfaceRequest

    +

    Request to order an additional network interface for a MVM.

    Nulink treats interface and IP as a 1:1 relation; move and delete

    operate on the interface_uuid.

    + + + + + + + + + + - - + + - - - - + + + + - - - - + + + + @@ -2393,8 +2323,15 @@

    IPServiceUpdateRequest

    -

    IPServiceUpdateResponse

    -

    IPServiceUpdateResponse is the response payload for a ip update request

    +

    MVMServiceAddNetworkInterfaceResponse

    +

    Response for AddNetworkInterface.

    + + + + + +

    MVMServiceCreateLinuxRequest

    +

    Linux-specific create request parts.

    FieldTypeLabelDescription
    uuid stringoptional

    Description of this ip

    UUID of the MVM to attach the interface to.

    typeIPTypeoptional

    Type of this ip

    projectstring

    Project the MVM belongs to.

    labelsUpdateLabelsoptional

    Labels on this ip

    order_numberstring

    Order reference for this operation. +TODO: can this be optional?

    @@ -2404,10 +2341,18 @@

    IPServiceUpdateResponse

    - - + + - + + + + + + + + @@ -2417,127 +2362,8 @@

    IPServiceUpdateResponse

    - - -

    IPAddressFamily

    -

    IPAddressFamily defines either IPv4 or IPv6 Addressfamily

    -
    ipIPldap_uuidstring

    Ip the ip

    UUID of the LDAP directory the MVM should integrate with.

    disksLinuxDiskrepeated

    Disks for the Linux MVM, excluding the OS disk; must contain exactly +one system disk plus any number of data disks (see DiskType).

    - - - - - - - - - - - - - - - - - - - - - - - - -
    NameNumberDescription
    IP_ADDRESS_FAMILY_UNSPECIFIED0

    IP_ADDRESS_FAMILY_UNSPECIFIED is not specified

    IP_ADDRESS_FAMILY_V41

    IP_ADDRESS_FAMILY_V4 defines a IPv4 address

    IP_ADDRESS_FAMILY_V62

    IP_ADDRESS_FAMILY_V6 defines a IPv6 address

    - -

    IPType

    -

    IPType specifies different ip address types

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameNumberDescription
    IP_TYPE_UNSPECIFIED0

    IP_TYPE_UNSPECIFIED is not specified

    IP_TYPE_EPHEMERAL1

    IP_TYPE_EPHEMERAL defines a ephemeral ip address which is freed/deleted after usage

    IP_TYPE_STATIC2

    IP_TYPE_STATIC defines a static ip address which must be freed/deleted explicitly

    - - - - - -

    IPService

    -

    IPService provides IP address management operations.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Method NameRequest TypeResponse TypeDescription
    GetIPServiceGetRequestIPServiceGetResponse

    Returns the IP address with the specified IP.

    CreateIPServiceCreateRequestIPServiceCreateResponse

    Creates a new IP address.

    UpdateIPServiceUpdateRequestIPServiceUpdateResponse

    Updates an IP address.

    ListIPServiceListRequestIPServiceListResponse

    Returns the list of all IP addresses.

    DeleteIPServiceDeleteRequestIPServiceDeleteResponse

    Deletes an IP address.

    - - - - -
    -

    fits/api/v1/token.proto

    Top -
    -

    - - -

    MethodPermission

    -

    MethodPermission is a mapping from a subject/project to a service method

    +

    MVMServiceCreateRequest

    +

    Request to create a new MVM instance.

    TODO: contract, billable and billing_start_date.

    @@ -2547,116 +2373,110 @@

    MethodPermission

    - + - + - + - - + + - -
    subjectproject_uuid string

    Subject maybe either the project or the tenant -for which the methods should be allowed - -asterisk (*) can be specified to match any subject -empty string ("") can be specified for requests that do not require a subject, e.g. partition list -otherwise either a projectid or a tenant login should be specified

    UUID of the project this MVM belongs to.

    methodsname stringrepeated

    Methods which should be accessible

    optional

    Optional name; the FQDN is derived from it.

    - - - - - -

    Token

    -

    Token generates a jwt authentication token to access the api

    There are two different types of tokens, api- and user- tokens

    A user token is used to authenticate end user requests for example from a cli.

    The configured roles in a user token are expanded in the api server

    based on the memberships in other projects and tenants based on the role granted there.

    User tokens will never contain permissions.

    Permissions are always derived from the tenant and project roles and memberships.

    The api token should be used to authenticate services.

    In contrast to a user token, the api token permissions and roles apply as configured during the token create process.

    - - - - - - - - - + - + - + - + - - + + - + - + - + - - - - + + + + - - + + - + - - + + - + - - + + - + - - - - + + + + - - - - + + + + - - - - + + + + + + + + + + + + + + + + + + @@ -2666,8 +2486,15 @@

    Token

    -

    Token.ProjectRolesEntry

    -

    +

    MVMServiceCreateResponse

    +

    Response for Create; an empty response means the MVM was accepted.

    + + + + + +

    MVMServiceCreateWindowsRequest

    +

    Windows-specific create request parts.

    FieldTypeLabelDescription
    uuidos_uuid string

    Uuid of the jwt token, used to reference it by revoke

    UUID of the operating system image to install.

    uservlan_uuid string

    User who created this token

    UUID of the VLAN network to attach the MVM to.

    metaMetalocation_uuidstring

    Meta for this token

    UUID of the datacenter location; the MVM is scheduled into one data center within it.

    descriptioncontact_uuid string

    Description is a user given description of this token.

    TODO: Contact UUID – open discussion with FCN; may become a dedicated /contact endpoint.

    permissionsMethodPermissionrepeated

    Permissions is a list of service methods this token can be used for

    cpuuint32

    Number of CPU cores.

    expiresgoogle.protobuf.Timestampramuint32

    Expires gives the date in the future after which this token can not be used anymore

    RAM in GB. Must be a power of 2.

    issued_atgoogle.protobuf.Timestamporder_numberstring

    IssuedAt gives the date when this token was created

    Internal reference number provided by the user, e.g. a ticket ID. +TODO: can this be optional?

    token_typeTokenTypelabelsfits.api.v1.Labels

    TokenType describes the type of this token

    Optional key-value labels for accounting purposes. +(e.g. contract number, transaction number, technical key, accounting key).

    project_rolesToken.ProjectRolesEntryrepeated

    ProjectRoles associates a project id with the corresponding role of the token owner

    backupbool

    Whether backup is enabled.

    tenant_rolesToken.TenantRolesEntryrepeated

    TenantRoles associates a tenant id with the corresponding role of the token owner

    availabilityAvailability

    Availability level.

    admin_roleAdminRoleoptional

    AdminRole defines the admin role of the token owner

    serviceclassServiceClass

    Service class; only certain combinations with availability are valid.

    windowsMVMServiceCreateWindowsRequest

    Windows-specific settings (domain + disk).

    linuxMVMServiceCreateLinuxRequest

    Linux-specific settings (LDAP + disk).

    @@ -2677,17 +2504,18 @@

    Token.ProjectRolesEntry

    - + - + - - - - + + + + @@ -2697,8 +2525,8 @@

    Token.ProjectRolesEntry

    -

    Token.TenantRolesEntry

    -

    +

    MVMServiceDeleteDiskRequest

    +

    Request to cancel a data disk; OS and system disks are rejected by the

    upstream.

    keydomain_uuid string

    UUID of the Windows domain the MVM should join.

    valueProjectRole

    disksWindowsDiskrepeated

    Disks for the Windows MVM, excluding the OS disk; must contain exactly +one system disk plus any number of data disks (see DiskType).

    @@ -2708,17 +2536,32 @@

    Token.TenantRolesEntry

    - + - + - - + + - + + + + + + + + + + + + + + + @@ -2728,8 +2571,15 @@

    Token.TenantRolesEntry

    -

    TokenServiceCreateRequest

    -

    TokenServiceCreateRequest is the request payload to create a token

    +

    MVMServiceDeleteDiskResponse

    +

    Response for DeleteDisk.

    + + + + + +

    MVMServiceDeleteNetworkInterfaceRequest

    +

    Request to delete a network interface from a MVM.

    keyuuid string

    UUID of the MVM the disk belongs to.

    valueTenantRoledisk_uuidstring

    UUID of the disk to cancel.

    projectstring

    Project the MVM belongs to.

    order_numberstring

    Order reference for this operation. +TODO: can this be optional?

    @@ -2739,52 +2589,32 @@

    TokenServiceCreateRequest

    - + - + - - - - + + + + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -2794,8 +2624,15 @@

    TokenServiceCreateRequest

    -

    TokenServiceCreateRequest.ProjectRolesEntry

    -

    +

    MVMServiceDeleteNetworkInterfaceResponse

    +

    Response for DeleteNetworkInterface.

    + + + + + +

    MVMServiceDeleteRequest

    +

    Request to cancel a MVM instance.

    descriptionuuid string

    Description of the token

    UUID of the MVM the interface belongs to.

    permissionsMethodPermissionrepeated

    Permissions is a list of service methods this token can be used for

    interface_uuidstring

    UUID of the network interface holding the IP.

    expiresgoogle.protobuf.Durationprojectstring

    Expires gives the duration since now, after which this token can not be used anymore

    Project the MVM belongs to.

    project_rolesTokenServiceCreateRequest.ProjectRolesEntryrepeated

    ProjectRoles associates a project id with the corresponding role of the token owner

    tenant_rolesTokenServiceCreateRequest.TenantRolesEntryrepeated

    TenantRoles_associates a tenant id with the corresponding role of the token owner

    admin_roleAdminRoleoptional

    AdminRole defines the admin role of the token owner

    labelsLabels

    Labels on this token

    order_numberstring

    Order reference for this operation. +TODO: can this be optional?

    @@ -2805,17 +2642,25 @@

    TokenServiceCre

    - + - + - - + + - + + + + + + + + @@ -2825,8 +2670,15 @@

    TokenServiceCre -

    TokenServiceCreateRequest.TenantRolesEntry

    -

    +

    MVMServiceDeleteResponse

    +

    Response for Delete; an empty response means the cancellation was accepted.

    + + + + + +

    MVMServiceGetRequest

    +

    Request to get a MVM by UUID.

    keyproject string

    Project the MVM belongs to.

    valueProjectRoleuuidstring

    UUID of the MVM to delete.

    order_numberstring

    Order reference for this operation. +TODO: can this be optional?

    @@ -2836,17 +2688,17 @@

    TokenServiceCrea

    - + - - + + - - + + - + @@ -2856,8 +2708,8 @@

    TokenServiceCrea -

    TokenServiceCreateResponse

    -

    TokenServiceCreateResponse is the response payload of a token create request

    +

    MVMServiceGetResponse

    +

    Response containing the requested MVM.

    keyuuid string

    optional

    UUID of the MVM.

    valueTenantRoletenantstring

    Tenant of the MVM.

    @@ -2867,17 +2719,10 @@

    TokenServiceCreateResponse

    - - - - - - - - - + + - + @@ -2887,8 +2732,8 @@

    TokenServiceCreateResponse

    -

    TokenServiceGetRequest

    -

    TokenServiceGetRequest is the request payload of a token get request

    +

    MVMServiceListRequest

    +

    Request to list MVMs.

    tokenToken

    Token which was created

    secretstringmvmMVMInstance

    Secret is the body if the jwt token, should be used in api requests as bearer token

    The MVM.

    @@ -2898,10 +2743,10 @@

    TokenServiceGetRequest

    - + - - + + @@ -2911,8 +2756,8 @@

    TokenServiceGetRequest

    -

    TokenServiceGetResponse

    -

    TokenServiceGetResponse is the response payload of a token get request

    +

    MVMServiceListResponse

    +

    Response containing the list of MVMs.

    uuidtenant string

    Uuid of the token to get

    optional

    Tenant of the MVMs.

    @@ -2922,10 +2767,10 @@

    TokenServiceGetResponse

    - - - - + + + + @@ -2935,15 +2780,8 @@

    TokenServiceGetResponse

    -

    TokenServiceListRequest

    -

    TokenServiceListRequest is the request payload to list tokens

    - - - - - -

    TokenServiceListResponse

    -

    TokenServiceListResponse is the response payload of a token list request

    +

    MVMServiceMoveNetworkInterfaceRequest

    +

    Request to move a network interface from one MVM to another.

    tokenToken

    Token is the token

    mvmsMVMInstancerepeated

    The MVM instances.

    @@ -2953,10 +2791,39 @@

    TokenServiceListResponse

    - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2966,15 +2833,15 @@

    TokenServiceListResponse

    -

    TokenServiceRefreshRequest

    -

    TokenServiceRefreshRequest is the request payload of a token refresh request

    Permissions, Roles and Expiration duration and all other properties are inherited from the calling token.

    The expiration duration will be calculated from the existing token (exp - iat)

    +

    MVMServiceMoveNetworkInterfaceResponse

    +

    Response for MoveNetworkInterface.

    -

    TokenServiceRefreshResponse

    -

    TokenServiceRefreshResponse is the response payload of a token refresh request

    +

    MVMServiceUpdateDiskRequest

    +

    Request to change an existing disk; only size and auto-extend are

    mutable (see DiskType for applicability per disk kind).

    tokensTokenrepeated

    Tokens is a list of tokens without the secrets

    uuidstring

    UUID of the MVM the interface currently belongs to.

    interface_uuidstring

    UUID of the network interface holding the IP.

    projectstring

    Project the MVM belongs to.

    order_numberstring

    Order reference for this operation. +TODO: can this be optional?

    target_mvm_uuidstring

    UUID of the MVM to move the interface to.

    @@ -2984,41 +2851,46 @@

    TokenServiceRefreshResponse

    - - + + - + - + - + - -
    tokenTokenuuidstring

    Token which was refreshed

    UUID of the MVM the disk belongs to.

    secretdisk_uuid string

    Secret is the body if the jwt token, should be used in api requests as bearer token

    UUID of the disk to change.

    - - - - - -

    TokenServiceRevokeRequest

    -

    TokenServiceRevokeRequest is the request payload of a token revoke request

    - - - - - - - + + + + + + - + - + + + + + + + + + + + + + + + @@ -3028,15 +2900,15 @@

    TokenServiceRevokeRequest

    -

    TokenServiceRevokeResponse

    -

    TokenServiceRevokeResponse is the response payload of a token revoke request

    +

    MVMServiceUpdateDiskResponse

    +

    Response for UpdateDisk.

    -

    TokenServiceUpdateRequest

    -

    TokenServiceUpdateRequest is the request payload of a token update request

    +

    MVMServiceUpdateRequest

    +

    Request to change a mutable property of an existing MVM.

    Exactly one action must be set; each maps onto its own upstream endpoint.

    TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per

    action); combined changes would need

    server-side fan-out without rollback.

    TODO: clarify async semantics — this is a queued "request to update", not an

    immediate update (e.g. disk changes are applied overnight). Consider

    renaming to reflect that.

    TODO: differentiate between fire-and-forget and queued actions in the API.

    TODO: is it possible to expose the pending-change queue (list/cancel) to the caller?

    TODO: clarify who enqueues the request and whether a pending change blocks

    further edits (e.g. after AddDisk, until the change executes).

    FieldTypeLabelDescription
    projectstring

    Project the MVM belongs to.

    uuidorder_number string

    Uuid of the token to revoke

    Order reference for this operation. +TODO: can this be optional?

    auto_extendbooloptional

    New auto-extend behavior; unset keeps the current value.

    sizeuint64optional

    New size of the disk in GB; unset keeps the current value.

    @@ -3049,57 +2921,50 @@

    TokenServiceUpdateRequest

    - + - - + + - + - + - - - - - - - - - + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - + @@ -3109,8 +2974,15 @@

    TokenServiceUpdateRequest

    -

    TokenServiceUpdateRequest.ProjectRolesEntry

    -

    +

    MVMServiceUpdateResponse

    +

    Response for Update; an empty response means the change was accepted.

    + + + + + +

    MVMServiceValidateAddDiskRequest

    +

    Request to validate an AddDisk without ordering anything.

    uuid string

    Uuid of the token to update

    UUID of the MVM to update.

    update_metaUpdateMetaprojectstring

    UpdateMeta contains the timestamp and strategy to be used in this update request -TokenUpdate is not guarded with optlock in the backend

    Project the MVM belongs to.

    descriptionorder_number stringoptional

    Description is a user given description of this token.

    permissionsMethodPermissionrepeated

    Permissions is a list of service methods this token can be used for

    Order reference for this operation. +TODO: can this be optional?

    project_rolesTokenServiceUpdateRequest.ProjectRolesEntryrepeated

    ProjectRoles associates a project id with the corresponding role of the token owner

    update_metafits.api.v1.UpdateMeta

    Timestamp and strategy for this update.

    tenant_rolesTokenServiceUpdateRequest.TenantRolesEntryrepeated

    TenantRoles associates a tenant id with the corresponding role of the token owner

    performance_classPerformanceClassChange

    Change the CPU/RAM performance class.

    admin_roleAdminRoleoptional

    AdminRole defines the admin role of the token owner

    service_classServiceClassChange

    Change the service class.

    labelsUpdateLabelscontactContactChange

    Labels on this token

    Change the contact person.

    @@ -3120,17 +2992,10 @@

    TokenServiceUpd

    - - - - - - - - - + + - + @@ -3140,28 +3005,28 @@

    TokenServiceUpd -

    TokenServiceUpdateRequest.TenantRolesEntry

    -

    +

    MVMServiceValidateAddDiskResponse

    +

    Response for ValidateAddDisk; violations are returned as an InvalidArgument error.

    -
    keystring

    valueProjectRoleadd_diskMVMServiceAddDiskRequest

    The add disk request to validate.

    - + + + +

    MVMServiceValidateAddNetworkInterfaceRequest

    +

    Request to validate an AddNetworkInterface without ordering anything.

    + + +
    + - - - - - - - - - + + - + @@ -3171,8 +3036,15 @@

    TokenServiceUpda -

    TokenServiceUpdateResponse

    -

    TokenServiceUpdateResponse is the response payload of a token update request

    +

    MVMServiceValidateAddNetworkInterfaceResponse

    +

    Response for ValidateAddNetworkInterface; violations are returned as an InvalidArgument error.

    + + + + + +

    MVMServiceValidateCreateRequest

    +

    Request to validate a MVM create without creating anything.

    FieldTypeLabelDescription
    keystring

    valueTenantRoleadd_network_interfaceMVMServiceAddNetworkInterfaceRequest

    The add network interface request to validate.

    @@ -3182,10 +3054,10 @@

    TokenServiceUpdateResponse

    - - + + - + @@ -3195,112 +3067,15 @@

    TokenServiceUpdateResponse

    - - -

    TokenType

    -

    TokenType specifies different use cases of tokens

    -
    tokenTokencreateMVMServiceCreateRequest

    Token is the updated token

    The create request to validate.

    - - - - - - - - - - - - - - - - - - - - - - - - -
    NameNumberDescription
    TOKEN_TYPE_UNSPECIFIED0

    TOKEN_TYPE_UNSPECIFIED is not specified

    TOKEN_TYPE_API1

    TOKEN_TYPE_API is a token for api usage

    TOKEN_TYPE_USER2

    TOKEN_TYPE_USER is a token to access the api with cli, a web application or other user induced actions.

    - - - - - -

    TokenService

    -

    TokenService provides token management operations.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Method NameRequest TypeResponse TypeDescription
    GetTokenServiceGetRequestTokenServiceGetResponse

    Returns the token with the specified UUID.

    CreateTokenServiceCreateRequestTokenServiceCreateResponse

    Creates a token to authenticate against the platform, the secret will be only visible in the response.

    UpdateTokenServiceUpdateRequestTokenServiceUpdateResponse

    Updates a token.

    ListTokenServiceListRequestTokenServiceListResponse

    Returns the list of all user tokens.

    RevokeTokenServiceRevokeRequestTokenServiceRevokeResponse

    Revokes a token, no further usage is possible afterwards.

    RefreshTokenServiceRefreshRequestTokenServiceRefreshResponse

    Refreshes a token, this will create a new token with the exact same permissions as the calling token contains.

    - - - - -
    -

    fits/api/v1/method.proto

    Top -
    -

    - - -

    MethodServiceListRequest

    -

    MethodServiceListRequest is the request payload for listing all public methods.

    +

    MVMServiceValidateCreateResponse

    +

    Response for ValidateCreate; violations are returned as an InvalidArgument error.

    -

    MethodServiceListResponse

    -

    MethodServiceListResponse is the response payload for listing all public methods.

    +

    MVMServiceValidateUpdateDiskRequest

    +

    Request to validate an UpdateDisk without changing anything.

    @@ -3310,10 +3085,10 @@

    MethodServiceListResponse

    - - - - + + + + @@ -3323,15 +3098,15 @@

    MethodServiceListResponse

    -

    MethodServiceTokenScopedListRequest

    -

    MethodServiceTokenScopedListRequest is the request payload for listing all methods callable with the token present in the request.

    +

    MVMServiceValidateUpdateDiskResponse

    +

    Response for ValidateUpdateDisk; violations are returned as an InvalidArgument error.

    -

    MethodServiceTokenScopedListResponse

    -

    MethodServiceTokenScopedListResponse is the response payload which contains all methods which are callable with the given token.

    +

    NetworkInterface

    +

    A network interface of a MVM. IPv4 only; IPv6 is not yet supported.

    methodsstringrepeated

    Methods is a list of methods public callable

    update_diskMVMServiceUpdateDiskRequest

    The update disk request to validate.

    @@ -3341,31 +3116,26 @@

    MethodServiceTokenScop

    - - - - - - - - - - - + + + + - - - - + + + + - - - - + + + + @@ -3375,8 +3145,8 @@

    MethodServiceTokenScop -

    MethodServiceTokenScopedListResponse.ProjectRolesEntry

    -

    +

    PerformanceClassChange

    +

    PerformanceClassChange is the payload for changing a MVM's CPU and RAM.

    permissionsMethodPermissionrepeated

    Permissions contains a list of methods which can be called

    project_rolesMethodServiceTokenScopedListResponse.ProjectRolesEntryrepeated

    ProjectRoles associates a project ID with the corresponding role of the token owner

    uuidstring

    UUID of this interface.

    tenant_rolesMethodServiceTokenScopedListResponse.TenantRolesEntryrepeated

    TenantRoles associates a tenant ID with the corresponding role of the token owner

    ipaddressstring

    IPv4 address assigned to this interface.

    admin_roleAdminRoleoptional

    AdminRole defines the admin role of the token owner

    macaddressstring

    MAC address of this interface. + +TODO: add validation

    @@ -3386,17 +3156,17 @@

    Meth

    - - + + - + - - + + - + @@ -3406,8 +3176,8 @@

    Meth -

    MethodServiceTokenScopedListResponse.TenantRolesEntry

    -

    +

    ServiceClassChange

    +

    ServiceClassChange is the payload for changing a MVM's service class.

    keystringcpuuint32

    Number of vCPUs (1-64).

    valueProjectRoleramuint32

    RAM size in GB.

    @@ -3417,17 +3187,10 @@

    Metho

    - - - - - - - - - + + - + @@ -3437,48 +3200,8 @@

    Metho - - - - - - -

    MethodService

    -

    MethodService provides method discovery operations.

    Methods are functions in services.

    -
    keystring

    valueTenantRoleserviceclassServiceClass

    Target service class.

    - - - - - - - - - - - - - - - - - - - - -
    Method NameRequest TypeResponse TypeDescription
    ListMethodServiceListRequestMethodServiceListResponse

    Returns the list of all public visible methods.

    TokenScopedListMethodServiceTokenScopedListRequestMethodServiceTokenScopedListResponse

    TokenScopedList returns all methods callable with the token present in the request.

    - - - - -
    -

    fits/api/v1/project.proto

    Top -
    -

    - - -

    Project

    -

    Project defines a group of resources belonging to a tenant

    a tenant can have multiple projects

    +

    WindowsDetails

    +

    Windows-specific MVM details.

    @@ -3488,45 +3211,88 @@

    Project

    - + + + + + + + + - + - - + + - + + +
    uuiddisksWindowsDiskrepeated

    Disks configured on the Windows MVM.

    domain_uuid string

    Uuid of this project

    UUID of the Windows domain the MVM has joined.

    metaMetadomain_fqdnstring

    Meta for this project

    Windows-specific FQDN, derived from the name at creation or generated by the backend.

    + + + + + +

    WindowsDisk

    +

    Disk configuration for a Windows MVM. See DiskType for the kinds of

    disks (os, system, data) and their lifecycle rules.

    + + + + + + + + - + - - + + - + - + - - + + - + - + + + + + + + + - + + + + + + + + @@ -3536,8 +3302,257 @@

    Project

    -

    ProjectServiceCreateRequest

    -

    ProjectServiceCreateRequest is the request payload to Create a project

    + + +

    Availability

    +

    Availability specifies the availability level of a MVM; higher value = higher availability.

    +
    FieldTypeLabelDescription
    nameuuid string

    Name of this project must be unique per tenant

    optional

    UUID of the disk; set for existing disks, unset for new ones.

    descriptionlabel string

    Description of this project

    Label (name) of the disk.

    tenantstringauto_extendbool

    Tenant this project belongs to

    Whether the disk grows automatically when space runs low.

    avatar_urlsizeuint64optional

    Size of the disk in GB; defaults to 50 when unset.

    driveletter string optional

    AvatarUrl of the Project

    Drive letter (e.g. "D"). Fixed to "F" for the system disk; free-form +for data disks.

    disk_typeDiskTypeoptional

    Kind of the disk; determines which operations are allowed on it. +Provided by the client in create/add requests and populated by the +API in responses. +TODO: talk to FCE that we will provide the disk type in create/add +requests.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameNumberDescription
    AVAILABILITY_UNSPECIFIED0

    AVAILABILITY_UNSPECIFIED is not specified.

    AVAILABILITY_V01

    AVAILABILITY_V0 is availability level V0.

    AVAILABILITY_V12

    AVAILABILITY_V1 is availability level V1.

    AVAILABILITY_V23

    AVAILABILITY_V2 is availability level V2.

    AVAILABILITY_V34

    AVAILABILITY_V3 is availability level V3.

    + +

    DiskType

    +

    DiskType classifies a MVM disk by its lifecycle rules.

    The upstream (nulink) API returns every disk of a MVM, including the

    backend-provisioned OS disk, so that oversized OS disks stay billable.

    Lifecycle per kind:

    - OS: provisioned by the backend and never part of create/add

    requests; resizable via UpdateDisk, never deletable.

    - SYSTEM: exactly one per MVM (drive letter F on Windows, mount point

    /appdata on Linux), whose letter/mount point is fixed; must be

    included in the create request; resizable via UpdateDisk, never

    deletable.

    - DATA: fully controllable (letter/mount point, size, auto-extend)

    and deletable; may be included at creation or added later via

    AddDisk.

    Whether auto-extend is supported for OS and SYSTEM disks is not yet

    known; only DATA disks are documented as supporting it.

    These rules are enforced by the upstream (nulink) API at creation and

    edit time (e.g. duplicate drive letters, deleting a system disk);

    fco-api does not re-validate them locally and surfaces upstream

    violations as InvalidArgument errors. Use the Validate* RPCs to

    pre-check a request against the upstream rules.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameNumberDescription
    DISK_TYPE_UNSPECIFIED0

    DISK_TYPE_UNSPECIFIED is not specified.

    DISK_TYPE_OS1

    DISK_TYPE_OS is the operating system disk; provisioned by the backend, +resizable, never deletable.

    DISK_TYPE_SYSTEM2

    DISK_TYPE_SYSTEM is the additional system disk (volume F on Windows, +/appdata on Linux); the letter/mount point is fixed, the size is +resizable, never deletable.

    DISK_TYPE_DATA3

    DISK_TYPE_DATA is a user-managed data disk; fully controllable and +deletable.

    + +

    ServiceClass

    +

    ServiceClass specifies the service tier of a MVM; higher value = higher tier.

    Only certain combinations with Availability are valid.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameNumberDescription
    SERVICE_CLASS_UNSPECIFIED0

    SERVICE_CLASS_UNSPECIFIED is not specified.

    SERVICE_CLASS_SZ11

    SERVICE_CLASS_SZ1 is service class SZ1.

    SERVICE_CLASS_SZ22

    SERVICE_CLASS_SZ2 is service class SZ2.

    SERVICE_CLASS_SZ33

    SERVICE_CLASS_SZ3 is service class SZ3.

    + + + + + +

    MVMService

    +

    MVMService provides managed VM (MVM) operations.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Method NameRequest TypeResponse TypeDescription
    GetMVMServiceGetRequestMVMServiceGetResponse

    Returns the MVM with the specified UUID.

    CreateMVMServiceCreateRequestMVMServiceCreateResponse

    Creates a new MVM.

    UpdateMVMServiceUpdateRequestMVMServiceUpdateResponse

    Updates a MVM.

    ListMVMServiceListRequestMVMServiceListResponse

    Returns the list of all MVMs.

    DeleteMVMServiceDeleteRequestMVMServiceDeleteResponse

    Deletes a MVM.

    AddDiskMVMServiceAddDiskRequestMVMServiceAddDiskResponse

    Orders an additional data disk for a MVM. System disks are ordered at +MVM creation and cannot be added later.

    UpdateDiskMVMServiceUpdateDiskRequestMVMServiceUpdateDiskResponse

    Changes the size or auto-extend behavior of an existing disk; see +DiskType for which operations apply per disk kind.

    DeleteDiskMVMServiceDeleteDiskRequestMVMServiceDeleteDiskResponse

    Cancels a data disk. OS and system disks cannot be deleted.

    AddNetworkInterfaceMVMServiceAddNetworkInterfaceRequestMVMServiceAddNetworkInterfaceResponse

    Orders an additional network interface for a MVM.

    MoveNetworkInterfaceMVMServiceMoveNetworkInterfaceRequestMVMServiceMoveNetworkInterfaceResponse

    Moves a network interface from one MVM to another.

    DeleteNetworkInterfaceMVMServiceDeleteNetworkInterfaceRequestMVMServiceDeleteNetworkInterfaceResponse

    Deletes a network interface from a MVM.

    ValidateCreateMVMServiceValidateCreateRequestMVMServiceValidateCreateResponse

    Validates a MVM create request without creating anything. Intended for +form pre-checks; the create endpoint validates again before executing.

    ValidateAddDiskMVMServiceValidateAddDiskRequestMVMServiceValidateAddDiskResponse

    Validates an AddDisk request without ordering anything.

    ValidateUpdateDiskMVMServiceValidateUpdateDiskRequestMVMServiceValidateUpdateDiskResponse

    Validates an UpdateDisk request without changing anything.

    ValidateAddNetworkInterfaceMVMServiceValidateAddNetworkInterfaceRequestMVMServiceValidateAddNetworkInterfaceResponse

    Validates an AddNetworkInterface request without ordering anything.

    + + + + +
    +

    fits/api/mvm/v1/os.proto

    Top +
    +

    + + +

    OS

    +

    OS is the definition of an available OS for MVM instances.

    @@ -3547,39 +3562,31 @@

    ProjectServiceCreateRequest

    - + - + - + - + - + - + - + - - - - - - - - + @@ -3589,8 +3596,15 @@

    ProjectServiceCreateRequest

    ProjectServiceCreateResponse -

    ProjectServiceCreateResponse is the response payload of creation of a project

    +

    OSServiceListRequest

    +

    OSServiceListRequest is the request payload for a OS list request.

    + + + + + +

    OSServiceListResponse

    +

    OSServiceListResponse is the response payload for a OS list request

    loginuuid string

    Login is the tenant of this project -TODO: is login really a good name?

    Uuid of this OS

    nametitle string

    Name of this project, unique per tenant

    Title of the OS

    descriptiontype string

    Description of this project

    Type of the OS

    avatar_urlversion stringoptional

    Avatar URL of the project

    labelsLabels

    Labels on the project

    Version of the OS

    @@ -3600,10 +3614,10 @@

    ProjectServiceCreateResponse

    - - - - + + + + @@ -3613,8 +3627,41 @@

    ProjectServiceCreateResponseProjectServiceDeleteRequest

    -

    ProjectServiceDeleteRequest is the request payload to delete a project

    + + + + + + +

    OSService

    +

    OSService lists operating systems available for managed VM (MVM) instances.

    +
    projectProject

    Project is the project

    operating_systemsOSrepeated

    The available operating systems

    + + + + + + + + + + + + + +
    Method NameRequest TypeResponse TypeDescription
    ListOSServiceListRequestOSServiceListResponse

    Returns a list of all operating systems.

    + + + + +
    +

    fits/api/mvm/v1/stagetype.proto

    Top +
    +

    + + +

    StageType

    +

    StageType is the definition of available stage types. (Development, Test, Integration, Production)

    @@ -3624,10 +3671,17 @@

    ProjectServiceDeleteRequest

    - + - + + + + + + + + @@ -3637,8 +3691,15 @@

    ProjectServiceDeleteRequest

    ProjectServiceDeleteResponse -

    ProjectServiceDeleteResponse is the response payload to delete a project

    +

    StageTypeServiceListRequest

    +

    StageTypeServiceListRequest is the request payload for a stage type list request.

    + + + + + +

    StageTypeServiceListResponse

    +

    StageTypeServiceListResponse is the response payload for a stage type list request

    projectuuid string

    Project is the uuid of the project to get

    Uuid of this stage type

    titlestring

    title of the stage type

    @@ -3648,10 +3709,10 @@

    ProjectServiceDeleteResponse

    - - - - + + + + @@ -3661,8 +3722,41 @@

    ProjectServiceDeleteResponseProjectServiceGetRequest

    -

    ProjectServiceGetRequest is the request payload to get a project

    + + + + + + +

    StageTypeService

    +

    StageTypeService lists stage types available for managed VM (MVM) instances.

    +
    projectProject

    Project is the project

    stage_typesStageTyperepeated

    The available stage types

    + + + + + + + + + + + + + +
    Method NameRequest TypeResponse TypeDescription
    ListStageTypeServiceListRequestStageTypeServiceListResponse

    Returns a list of all stage types available for a tenant.

    + + + + +
    +

    fits/api/v1/health.proto

    Top +
    +

    + + +

    Health

    +

    Health reports the health status of all services.

    @@ -3672,10 +3766,10 @@

    ProjectServiceGetRequest

    - - - - + + + + @@ -3685,8 +3779,15 @@

    ProjectServiceGetRequest

    -

    ProjectServiceGetResponse

    -

    ProjectServiceGetResponse is the response payload to get a projects

    +

    HealthServiceGetRequest

    +

    HealthServiceGetRequest is the request payload for getting the health of the system.

    + + + + + +

    HealthServiceGetResponse

    +

    HealthServiceGetResponse is the response payload for getting the health of the system.

    projectstring

    Project is the uuid of the project to get

    servicesHealthStatusrepeated

    Services contains the health of all individual services

    @@ -3696,10 +3797,10 @@

    ProjectServiceGetResponse

    - - + + - + @@ -3709,8 +3810,8 @@

    ProjectServiceGetResponse

    -

    ProjectServiceListRequest

    -

    ProjectServiceListRequest is the request payload to list all projects

    +

    HealthStatus

    +

    HealthStatus represents the health status of one service.

    projectProjecthealthHealth

    Project is the project

    Health contains the overall health of the system

    @@ -3719,56 +3820,32 @@

    ProjectServiceListRequest

    - - - - - - - - - - + + + - - - - + + + + - - - - + + + + - -
    idstringoptional

    Id lists only projects with this id

    namestringoptional

    Name lists only projects with this name

    Service

    Name is the name of the service

    tenantstringoptional

    Tenant lists only projects of this tenant

    statusServiceStatus

    Status is the status of this service

    labelsLabelsoptional

    Labels lists only projects containing the given labels

    messagestring

    Message describes the reason for the unhealthy status if possible

    - - - - - -

    ProjectServiceListResponse

    -

    ProjectServiceListResponse is the response payload to list all projects

    - - - - - - - - - - + + - + @@ -3778,8 +3855,8 @@

    ProjectServiceListResponse

    -

    ProjectServiceUpdateRequest

    -

    ProjectServiceUpdateRequest is the request payload to update a project

    +

    HealthStatus.PartitionsEntry

    +

    FieldTypeLabelDescription
    projectsProjectpartitionsHealthStatus.PartitionsEntry repeated

    Projects is a list of all your projects

    Partitions describes the health of the service by partition

    @@ -3789,45 +3866,17 @@

    ProjectServiceUpdateRequest

    - + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -3837,8 +3886,8 @@

    ProjectServiceUpdateRequest

    ProjectServiceUpdateResponse -

    ProjectServiceUpdateResponse is the response payload to update a project

    +

    PartitionHealth

    +

    PartitionHealth represents the status of a specific service in this partition.

    projectkey string

    Project is the uuid of the project to get

    update_metaUpdateMetavaluePartitionHealth

    UpdateMeta contains the timestamp and strategy to be used in this update request

    namestringoptional

    Name of this project unique per tenant

    descriptionstringoptional

    Description of this project

    avatar_urlstringoptional

    Avatar URL of the project

    labelsUpdateLabelsoptional

    Labels on this project

    @@ -3848,10 +3897,17 @@

    ProjectServiceUpdateResponse

    - - + + - + + + + + + + + @@ -3863,51 +3919,81 @@

    ProjectServiceUpdateResponseProjectService

    -

    ProjectService provides project management operations.

    +

    Service

    +

    Service defines the service for which the healthiness is reported.

    projectProjectstatusServiceStatus

    Project is the project

    Status is the health status of the service in this partition

    messagestring

    Message describes the reason for the unhealthy status if possible

    - + - - - - + + + - - - - + + + + +
    Method NameRequest TypeResponse TypeDescription
    NameNumberDescription
    ListProjectServiceListRequestProjectServiceListResponse

    Returns the list of all accessible projects.

    SERVICE_UNSPECIFIED0

    SERVICE_UNSPECIFIED is a unknown service

    GetProjectServiceGetRequestProjectServiceGetResponse

    Returns the project with the specified UUID.

    SERVICE_K8S1

    SERVICE_K8S the kubernetes service

    + +

    ServiceStatus

    +

    ServiceStatus defines the status of a service.

    + + + + + + - - - - + + + - - - - + + + - - - - + + + + + + + + + + + + +
    NameNumberDescription
    CreateProjectServiceCreateRequestProjectServiceCreateResponse

    Create a project

    SERVICE_STATUS_UNSPECIFIED0

    SERVICE_STATUS_UNSPECIFIED service status is not known or unspecified

    DeleteProjectServiceDeleteRequestProjectServiceDeleteResponse

    Delete a project

    SERVICE_STATUS_DEGRADED1

    SERVICE_STATUS_DEGRADED the service is in degraded status, not the whole functionality is available

    UpdateProjectServiceUpdateRequestProjectServiceUpdateResponse

    Update a project

    SERVICE_STATUS_UNHEALTHY2

    SERVICE_STATUS_UNHEALTHY the service is in unhealthy status, serious impact is expected

    SERVICE_STATUS_HEALTHY3

    SERVICE_STATUS_HEALTHY the service is in healthy status, for example fully functional

    + + + + + +

    HealthService

    +

    HealthService provides health status monitoring operations.

    + + + + + + + + + + + @@ -3917,13 +4003,13 @@

    ProjectService

    -

    fits/api/v1/tenant.proto

    Top +

    fits/api/v1/ip.proto

    Top

    -

    Tenant

    -

    Tenant is a customer of the platform

    +

    IP

    +

    IP is a ip address which can be used as loadbalancer addresses

    Method NameRequest TypeResponse TypeDescription
    GetHealthServiceGetRequestHealthServiceGetResponse

    Returns the health status of the platform.

    @@ -3933,52 +4019,67 @@

    Tenant

    - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + @@ -3988,8 +4089,8 @@

    Tenant

    -

    TenantServiceCreateRequest

    -

    TenantServiceCreateRequest is the request payload of the tenant create request

    +

    IPQuery

    +

    IPQuery can be used to query a IP or a list of IP

    loginuuid string

    Login of the tenant

    Uuid of this ip

    meta Meta

    Meta for this tenant

    Meta for this ip

    nameip string

    Name of the tenant

    Ip is either ipv4 or ipv6 address

    emailname string

    Email of the tenant

    Name of this ip

    description string

    Description of this tenant

    Description of this ip

    avatar_urlnetwork string

    AvatarUrl of the tenant

    Network is the network this ip belongs to

    created_byproject string

    CreatedBy stores who created this tenant

    Project where this ip address belongs to

    typeIPType

    Type of this ip

    namespacestringoptional

    Namespace if specified this ip is from a namespaced network and can therefore overlap with others +Will be equal with project most of the time

    @@ -3998,39 +4099,74 @@

    TenantServiceCreateRequest

    + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - + - + - + - + - - + + + + + + + + + + + + + + + + @@ -4040,8 +4176,8 @@

    TenantServiceCreateRequest

    -

    TenantServiceCreateResponse

    -

    TenantServiceCreateResponse is the response payload of the tenant create request

    +

    IPServiceCreateRequest

    +

    IPServiceCreateRequest is the request payload for a ip create request

    ipstringoptional

    Ip the ip to list

    networkstringoptional

    Network from where the ips to list

    projectstringoptional

    Project of the ips to list

    name string

    Name of this tenant

    optional

    Name of this ip

    descriptionuuid string optional

    Description of this tenant

    Uuid for which this ips should get filtered

    emailmachine string optional

    Email of the tenant, if not set will be inherited from the creator

    Machine for which this ips should get filtered

    avatar_urlparent_prefix_cidr string optional

    AvatarUrl of the tenant

    ParentPrefixCidr for which this ips should get filtered

    labels Labels

    Labels on the tenant

    optional

    Labels for which this ips should get filtered

    typeIPTypeoptional

    Static if set to true, this will be a Static ip

    address_familyIPAddressFamilyoptional

    Addressfamily of the IPs to list, defaults to all addressfamilies

    @@ -4051,10 +4187,66 @@

    TenantServiceCreateResponse

    - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4064,8 +4256,8 @@

    TenantServiceCreateResponse

    TenantServiceDeleteRequest -

    TenantServiceDeleteRequest is the request payload of the tenant delete request

    +

    IPServiceCreateResponse

    +

    IPServiceCreateResponse is the response payload for a ip create request

    tenantTenantnetworkstring

    Tenant is the tenant

    Network from which the IP should be created

    projectstring

    Project of the ip

    namestringoptional

    Name of the ip

    descriptionstringoptional

    Description of the ip

    ipstringoptional

    IP if given try to create this ip if still available

    machinestringoptional

    Machine for which this ip should get created

    labelsLabelsoptional

    Labels to put onto the ip

    typeIPTypeoptional

    Type of the IP, ether ephemeral (default), or static

    address_familyIPAddressFamilyoptional

    Addressfamily of the IP to create, defaults to ipv4

    @@ -4075,10 +4267,10 @@

    TenantServiceDeleteRequest

    - - + + - + @@ -4088,9 +4280,9 @@

    TenantServiceDeleteRequest

    -

    TenantServiceDeleteResponse

    -

    TenantServiceDeleteResponse is the response payload of the tenant delete request

    - +

    IPServiceDeleteRequest

    +

    IPServiceDeleteRequest is the request payload for a ip delete request

    +
    loginstringipIP

    Login of the tenant

    Ip the ip

    @@ -4099,10 +4291,17 @@

    TenantServiceDeleteResponse

    - - + + - + + + + + + + + @@ -4112,8 +4311,8 @@

    TenantServiceDeleteResponse

    TenantServiceGetRequest -

    TenantServiceGetRequest is the request payload of the tenant get request

    +

    IPServiceDeleteResponse

    +

    IPServiceDeleteResponse is the response payload for a ip delete request

    tenantTenantipstring

    Tenant is the tenant

    IP of the ip to delete

    projectstring

    Project of the ip

    @@ -4123,10 +4322,10 @@

    TenantServiceGetRequest

    - - + + - + @@ -4136,8 +4335,8 @@

    TenantServiceGetRequest

    -

    TenantServiceGetResponse

    -

    TenantServiceGetResponse is the response payload of the tenant get request

    +

    IPServiceGetRequest

    +

    IPServiceGetRequest is the request payload for a ip get request

    loginstringipIP

    Login of the tenant

    Ip the ip

    @@ -4147,10 +4346,24 @@

    TenantServiceGetResponse

    - - + + - + + + + + + + + + + + + + + + @@ -4160,8 +4373,8 @@

    TenantServiceGetResponse

    -

    TenantServiceListRequest

    -

    TenantServiceListRequest is the request payload of the tenant list request

    +

    IPServiceGetResponse

    +

    IPServiceGetResponse is the response payload for a ip get request

    tenantTenantipstring

    Tenant is the tenant

    IP of the ip to get

    projectstring

    Project of the ip

    namespacestringoptional

    Namespace can be specified to get the ip of a namespace.

    @@ -4171,24 +4384,41 @@

    TenantServiceListRequest

    - - - - + + + + + +
    idstringoptional

    Id filters tenants by id

    ipIP

    Ip the ip

    + + + + + +

    IPServiceListRequest

    +

    IPServiceListRequest is the request payload for a ip list request

    + + + + + + + + - + - - + + - - - - + + + + @@ -4198,8 +4428,8 @@

    TenantServiceListRequest

    -

    TenantServiceListResponse

    -

    TenantServiceListResponse is the response payload of the tenant list request

    +

    IPServiceListResponse

    +

    IPServiceListResponse is the response payload for a ip list request

    FieldTypeLabelDescription
    nameproject stringoptional

    Name filters tenants by name

    Project of the ips to list

    labelsLabelsoptional

    Labels lists only projects containing the given labels

    queryIPQuery

    Query to list one ore more ips

    @@ -4209,10 +4439,10 @@

    TenantServiceListResponse

    - - + + - + @@ -4222,8 +4452,8 @@

    TenantServiceListResponse

    -

    TenantServiceUpdateRequest

    -

    TenantServiceUpdateRequest is the request payload of the tenant update request

    +

    IPServiceUpdateRequest

    +

    IPServiceUpdateRequest is the request payload for a ip update request

    tenantsTenantipsIP repeated

    Tenants is the list of tenants

    Ips the ips

    @@ -4233,10 +4463,10 @@

    TenantServiceUpdateRequest

    - + - + @@ -4247,38 +4477,38 @@

    TenantServiceUpdateRequest

    - + - - + + - + - + - + - - + + - + - + @@ -4288,8 +4518,8 @@

    TenantServiceUpdateRequest

    -

    TenantServiceUpdateResponse

    -

    TenantServiceUpdateResponse is the response payload of the tenant update request

    +

    IPServiceUpdateResponse

    +

    IPServiceUpdateResponse is the response payload for a ip update request

    loginip string

    Login of the tenant

    Ip the ip to update

    nameproject stringoptional

    Name of the tenant

    Project id of the ip

    emailname string optional

    Email of the tenant

    Name of this ip

    description string optional

    Description of this tenant

    Description of this ip

    avatar_urlstringtypeIPType optional

    AvatarUrl of the tenant

    Type of this ip

    labels UpdateLabels optional

    Labels on the tenant

    Labels on this ip

    @@ -4299,10 +4529,10 @@

    TenantServiceUpdateResponse

    - - + + - + @@ -4314,12 +4544,70 @@

    TenantServiceUpdateResponse

    IPAddressFamily +

    IPAddressFamily defines either IPv4 or IPv6 Addressfamily

    +
    tenantTenantipIP

    Tenant is the tenant

    Ip the ip

    + + + + + + + + + + + + + + + + + + + + + + + + +
    NameNumberDescription
    IP_ADDRESS_FAMILY_UNSPECIFIED0

    IP_ADDRESS_FAMILY_UNSPECIFIED is not specified

    IP_ADDRESS_FAMILY_V41

    IP_ADDRESS_FAMILY_V4 defines a IPv4 address

    IP_ADDRESS_FAMILY_V62

    IP_ADDRESS_FAMILY_V6 defines a IPv6 address

    + +

    IPType

    +

    IPType specifies different ip address types

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameNumberDescription
    IP_TYPE_UNSPECIFIED0

    IP_TYPE_UNSPECIFIED is not specified

    IP_TYPE_EPHEMERAL1

    IP_TYPE_EPHEMERAL defines a ephemeral ip address which is freed/deleted after usage

    IP_TYPE_STATIC2

    IP_TYPE_STATIC defines a static ip address which must be freed/deleted explicitly

    + -

    TenantService

    -

    TenantService provides tenant management operations.

    +

    IPService

    +

    IPService provides IP address management operations.

    @@ -4327,38 +4615,38 @@

    TenantService

    - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + @@ -4368,13 +4656,13 @@

    TenantService

    -

    fits/api/v1/version.proto

    Top +

    fits/api/v1/token.proto

    Top

    -

    Version

    -

    Version represents the version of the application.

    +

    MethodPermission

    +

    MethodPermission is a mapping from a subject/project to a service method

    Method NameRequest TypeResponse TypeDescription
    CreateTenantServiceCreateRequestTenantServiceCreateResponse

    Creates a new tenant.

    GetIPServiceGetRequestIPServiceGetResponse

    Returns the IP address with the specified IP.

    ListTenantServiceListRequestTenantServiceListResponse

    Returns the list of tenants.

    CreateIPServiceCreateRequestIPServiceCreateResponse

    Creates a new IP address.

    GetTenantServiceGetRequestTenantServiceGetResponse

    Get a tenant

    UpdateIPServiceUpdateRequestIPServiceUpdateResponse

    Updates an IP address.

    UpdateTenantServiceUpdateRequestTenantServiceUpdateResponse

    Update a tenant

    ListIPServiceListRequestIPServiceListResponse

    Returns the list of all IP addresses.

    DeleteTenantServiceDeleteRequestTenantServiceDeleteResponse

    Delete a tenant

    IPServiceDeleteRequestIPServiceDeleteResponse

    Deletes an IP address.

    @@ -4384,31 +4672,116 @@

    Version

    - + - + - + + + + + + + +
    versionsubject string

    Version of the application

    Subject maybe either the project or the tenant +for which the methods should be allowed + +asterisk (*) can be specified to match any subject +empty string ("") can be specified for requests that do not require a subject, e.g. partition list +otherwise either a projectid or a tenant login should be specified

    revisionmethodsstringrepeated

    Methods which should be accessible

    + + + + + +

    Token

    +

    Token generates a jwt authentication token to access the api

    There are two different types of tokens, api- and user- tokens

    A user token is used to authenticate end user requests for example from a cli.

    The configured roles in a user token are expanded in the api server

    based on the memberships in other projects and tenants based on the role granted there.

    User tokens will never contain permissions.

    Permissions are always derived from the tenant and project roles and memberships.

    The api token should be used to authenticate services.

    In contrast to a user token, the api token permissions and roles apply as configured during the token create process.

    + + + + + + + + + + - + - + - + - + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4418,15 +4791,8 @@

    Version

    -

    VersionServiceGetRequest

    -

    VersionServiceGetRequest is the request payload for getting the version.

    - - - - - -

    VersionServiceGetResponse

    -

    VersionServiceGetResponse is the response payload for getting the version.

    +

    Token.ProjectRolesEntry

    +

    FieldTypeLabelDescription
    uuid string

    Revision of the application

    Uuid of the jwt token, used to reference it by revoke

    git_sha1user string

    GitSHA1 of the application

    User who created this token

    build_datemetaMeta

    Meta for this token

    description string

    BuildDate of the application

    Description is a user given description of this token.

    permissionsMethodPermissionrepeated

    Permissions is a list of service methods this token can be used for

    expiresgoogle.protobuf.Timestamp

    Expires gives the date in the future after which this token can not be used anymore

    issued_atgoogle.protobuf.Timestamp

    IssuedAt gives the date when this token was created

    token_typeTokenType

    TokenType describes the type of this token

    project_rolesToken.ProjectRolesEntryrepeated

    ProjectRoles associates a project id with the corresponding role of the token owner

    tenant_rolesToken.TenantRolesEntryrepeated

    TenantRoles associates a tenant id with the corresponding role of the token owner

    admin_roleAdminRoleoptional

    AdminRole defines the admin role of the token owner

    @@ -4436,10 +4802,17 @@

    VersionServiceGetResponse

    - - + + - + + + + + + + + @@ -4449,41 +4822,8 @@

    VersionServiceGetResponse

    - - - - - - -

    VersionService

    -

    VersionService provides version information operations.

    -
    versionVersionkeystring

    Version contains the version of the application

    valueProjectRole

    - - - - - - - - - - - - - -
    Method NameRequest TypeResponse TypeDescription
    GetVersionServiceGetRequestVersionServiceGetResponse

    Returns the version of the application.

    - - - - -
    -

    fits/api/vm/v1/location.proto

    Top -
    -

    - - -

    Location

    -

    Location is the definition of an available datacenter location for VM instances

    +

    Token.TenantRolesEntry

    +

    @@ -4493,17 +4833,17 @@

    Location

    - + - + - - + + - + @@ -4513,8 +4853,8 @@

    Location

    -

    LocationServiceListRequest

    -

    LocationServiceListRequest is the request payload for a location list request.

    +

    TokenServiceCreateRequest

    +

    TokenServiceCreateRequest is the request payload to create a token

    uuidkey string

    Uuid of this location

    titlestringvalueTenantRole

    title of the location

    @@ -4524,10 +4864,52 @@

    LocationServiceListRequest

    - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4537,8 +4919,8 @@

    LocationServiceListRequestLocationServiceListResponse

    -

    LocationServiceListResponse is the response payload for a location list request

    +

    TokenServiceCreateRequest.ProjectRolesEntry

    +

    tenantdescription string

    Tenant to list available locations for

    Description of the token

    permissionsMethodPermissionrepeated

    Permissions is a list of service methods this token can be used for

    expiresgoogle.protobuf.Duration

    Expires gives the duration since now, after which this token can not be used anymore

    project_rolesTokenServiceCreateRequest.ProjectRolesEntryrepeated

    ProjectRoles associates a project id with the corresponding role of the token owner

    tenant_rolesTokenServiceCreateRequest.TenantRolesEntryrepeated

    TenantRoles_associates a tenant id with the corresponding role of the token owner

    admin_roleAdminRoleoptional

    AdminRole defines the admin role of the token owner

    labelsLabels

    Labels on this token

    @@ -4548,10 +4930,17 @@

    LocationServiceListResponse<

    - - - - + + + + + + + + + + + @@ -4561,41 +4950,8 @@

    LocationServiceListResponse< - - - - - - -

    LocationService

    -

    LocationService lists datacenter locations available for VM instances, scoped per tenant.

    -
    locationsLocationrepeated

    The available locations

    keystring

    valueProjectRole

    - - - - - - - - - - - - - -
    Method NameRequest TypeResponse TypeDescription
    ListLocationServiceListRequestLocationServiceListResponse

    Returns a list of all datacenter locations available for a tenant.

    - - - - -
    -

    fits/api/vm/v1/os.proto

    Top -
    -

    - - -

    OS

    -

    OS is the definition of an available OS for VM instances

    +

    TokenServiceCreateRequest.TenantRolesEntry

    +

    @@ -4605,31 +4961,48 @@

    OS

    - + - + - - + + - + + +
    uuidkey string

    Uuid of this OS

    titlestringvalueTenantRole

    Title of the OS

    + + + + + +

    TokenServiceCreateResponse

    +

    TokenServiceCreateResponse is the response payload of a token create request

    + + + + + + + + - - + + - + - + - + @@ -4639,15 +5012,32 @@

    OS

    -

    OSServiceListRequest

    -

    OSServiceListRequest is the request payload for a OS list request.

    +

    TokenServiceGetRequest

    +

    TokenServiceGetRequest is the request payload of a token get request

    +
    FieldTypeLabelDescription
    typestringtokenToken

    Type of the OS

    Token which was created

    versionsecret string

    Version of the OS

    Secret is the body if the jwt token, should be used in api requests as bearer token

    + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    uuidstring

    Uuid of the token to get

    + + -

    OSServiceListResponse

    -

    OSServiceListResponse is the response payload for a OS list request

    +

    TokenServiceGetResponse

    +

    TokenServiceGetResponse is the response payload of a token get request

    @@ -4657,10 +5047,10 @@

    OSServiceListResponse

    - - - - + + + + @@ -4670,41 +5060,46 @@

    OSServiceListResponse

    +

    TokenServiceListRequest

    +

    TokenServiceListRequest is the request payload to list tokens

    - + + +

    TokenServiceListResponse

    +

    TokenServiceListResponse is the response payload of a token list request

    - -

    OSService

    -

    OSService lists operating systems available for VM instances.

    -
    operating_systemsOSrepeated

    The available operating systems

    tokenToken

    Token is the token

    - - - - - - - - - - - - - -
    Method NameRequest TypeResponse TypeDescription
    ListOSServiceListRequestOSServiceListResponse

    Returns a list of all operating systems.

    + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    tokensTokenrepeated

    Tokens is a list of tokens without the secrets

    + + - -
    -

    fits/api/vm/v1/stagetype.proto

    Top -
    -

    +

    TokenServiceRefreshRequest

    +

    TokenServiceRefreshRequest is the request payload of a token refresh request

    Permissions, Roles and Expiration duration and all other properties are inherited from the calling token.

    The expiration duration will be calculated from the existing token (exp - iat)

    + + + -

    StageType

    -

    StageType is the definition of available stage types. (Development, Test, Integration, Production)

    +

    TokenServiceRefreshResponse

    +

    TokenServiceRefreshResponse is the response payload of a token refresh request

    @@ -4714,17 +5109,17 @@

    StageType

    - - + + - + - + - + @@ -4734,15 +5129,8 @@

    StageType

    -

    StageTypeServiceListRequest

    -

    StageTypeServiceListRequest is the request payload for a stage type list request.

    - - - - - -

    StageTypeServiceListResponse

    -

    StageTypeServiceListResponse is the response payload for a stage type list request

    +

    TokenServiceRevokeRequest

    +

    TokenServiceRevokeRequest is the request payload of a token revoke request

    uuidstringtokenToken

    Uuid of this stage type

    Token which was refreshed

    titlesecret string

    title of the stage type

    Secret is the body if the jwt token, should be used in api requests as bearer token

    @@ -4752,10 +5140,10 @@

    StageTypeServiceListRespons

    - - - - + + + + @@ -4765,41 +5153,15 @@

    StageTypeServiceListRespons - - - - - - -

    StageTypeService

    -

    StageTypeService lists stage types available for VM instances.

    -
    stage_typesStageTyperepeated

    The available stage types

    uuidstring

    Uuid of the token to revoke

    - - - - - - - - - - - - - -
    Method NameRequest TypeResponse TypeDescription
    ListStageTypeServiceListRequestStageTypeServiceListResponse

    Returns a list of all stage types available for a tenant.

    +

    TokenServiceRevokeResponse

    +

    TokenServiceRevokeResponse is the response payload of a token revoke request

    - - -
    -

    fits/api/vm/v1/vlan.proto

    Top -
    -

    + -

    Vlan

    -

    Vlan is a VLAN that a VM can be connected to.

    +

    TokenServiceUpdateRequest

    +

    TokenServiceUpdateRequest is the request payload of a token update request

    @@ -4812,84 +5174,57 @@

    Vlan

    - - - - - - - - - - - - - - - - - - - - - - + - - + + - + - + - - + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - - - - - - - + - - + + - + @@ -4899,8 +5234,8 @@

    Vlan

    -

    VlanServiceListRequest

    -

    VlanServiceListRequest is the request payload for a VLAN list request.

    +

    TokenServiceUpdateRequest.ProjectRolesEntry

    +

    uuid string

    Uuid of this VLAN

    idint32

    Id of this VLAN

    subnet_titlestring

    Title of the subnet this VLAN belongs to

    subnetstring

    CIDR of the subnet this VLAN belongs to

    Uuid of the token to update

    subnetmaskstringupdate_metaUpdateMeta

    Subnetmask of this VLAN

    UpdateMeta contains the timestamp and strategy to be used in this update request +TokenUpdate is not guarded with optlock in the backend

    gatewaydescription string

    Gateway of this VLAN

    optional

    Description is a user given description of this token.

    ip_range_startstring

    Start of the usable IP range of this VLAN

    permissionsMethodPermissionrepeated

    Permissions is a list of service methods this token can be used for

    ip_range_endstring

    End of the usable IP range of this VLAN

    project_rolesTokenServiceUpdateRequest.ProjectRolesEntryrepeated

    ProjectRoles associates a project id with the corresponding role of the token owner

    use_dhcpbool

    Whether DHCP is used on this VLAN

    tenant_rolesTokenServiceUpdateRequest.TenantRolesEntryrepeated

    TenantRoles associates a tenant id with the corresponding role of the token owner

    location_uuidstringadmin_roleAdminRole optional

    TODO instead of the pod title, could we have the location_uuid?

    stage_type_uuidstring

    Uuid of the stage type of this VLAN

    AdminRole defines the admin role of the token owner

    tenantstringlabelsUpdateLabels

    Tenant this VLAN belongs to.

    Labels on this token

    @@ -4910,91 +5245,17 @@

    VlanServiceListRequest

    - + - - - - -
    tenantkey string

    Tenant to list available VLANs for

    - - - - - -

    VlanServiceListResponse

    -

    VlanServiceListResponse is the response payload for a VLAN list request

    - - - - - - - - - - - - - + - -
    FieldTypeLabelDescription
    vlansVlanrepeated

    The available VLANs

    - - - - - - - - - - - -

    VlanService

    -

    VLANService lists VLANs avaiable for VM instances.

    - - - - - - - - - - - - - - -
    Method NameRequest TypeResponse TypeDescription
    ListVlanServiceListRequestVlanServiceListResponse

    Returns a list of all VLANs available for a tenant.

    - - - - -
    -

    fits/api/vm/v1/vm.proto

    Top -
    -

    - - -

    ContactChange

    -

    ContactChange is the payload for changing a VM's contact person.

    - - - - - - - - - - + + - + @@ -5004,8 +5265,8 @@

    ContactChange

    -

    LinuxDetails

    -

    Linux-specific VM details.

    +

    TokenServiceUpdateRequest.TenantRolesEntry

    +

    FieldTypeLabelDescription
    contact_uuidstringvalueProjectRole

    UUID of the new contact.

    @@ -5015,24 +5276,17 @@

    LinuxDetails

    - - - - - - - - + - + - - + + - + @@ -5042,8 +5296,8 @@

    LinuxDetails

    -

    LinuxDisk

    -

    Disk configuration for a Linux VM.

    +

    TokenServiceUpdateResponse

    +

    TokenServiceUpdateResponse is the response payload of a token update request

    disksLinuxDiskrepeated

    Disks configured on the Linux VM.

    ldap_uuidkey string

    UUID of the LDAP directory the VM is integrated with.

    ldap_fqdnstringvalueTenantRole

    Linux-specific FQDN, derived from the name at creation or generated by the backend.

    @@ -5053,38 +5307,10 @@

    LinuxDisk

    - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - + @@ -5094,79 +5320,112 @@

    LinuxDisk

    -

    NetworkInterface

    -

    A network interface of a VM. IPv4 only; IPv6 is not yet supported.

    - -
    uuidstringoptional

    UUID of the disk; set for existing disks, unset for new ones.

    labelstring

    Label (name) of the disk.

    auto_extendbooltokenToken

    Whether the disk grows automatically when space runs low.

    sizeuint64optional

    Size of the disk in GB.

    mount_pointstringoptional

    Mount point (e.g. "/data").

    Token is the updated token

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    uuidstring

    UUID of this interface.

    ipaddressstring

    IPv4 address assigned to this interface.

    macaddressstring

    MAC address of this interface. + +

    TokenType

    +

    TokenType specifies different use cases of tokens

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameNumberDescription
    TOKEN_TYPE_UNSPECIFIED0

    TOKEN_TYPE_UNSPECIFIED is not specified

    TOKEN_TYPE_API1

    TOKEN_TYPE_API is a token for api usage

    TOKEN_TYPE_USER2

    TOKEN_TYPE_USER is a token to access the api with cli, a web application or other user induced actions.

    + -TODO: add validation

    + - + +

    TokenService

    +

    TokenService provides token management operations.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Method NameRequest TypeResponse TypeDescription
    GetTokenServiceGetRequestTokenServiceGetResponse

    Returns the token with the specified UUID.

    CreateTokenServiceCreateRequestTokenServiceCreateResponse

    Creates a token to authenticate against the platform, the secret will be only visible in the response.

    UpdateTokenServiceUpdateRequestTokenServiceUpdateResponse

    Updates a token.

    ListTokenServiceListRequestTokenServiceListResponse

    Returns the list of all user tokens.

    RevokeTokenServiceRevokeRequestTokenServiceRevokeResponse

    Revokes a token, no further usage is possible afterwards.

    RefreshTokenServiceRefreshRequestTokenServiceRefreshResponse

    Refreshes a token, this will create a new token with the exact same permissions as the calling token contains.

    + -

    PerformanceClassChange

    -

    PerformanceClassChange is the payload for changing a VM's CPU and RAM.

    +
    +

    fits/api/v1/method.proto

    Top +
    +

    - - - - - - - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    cpuuint32

    Number of vCPUs (1-64).

    ramuint32

    RAM size in GB.

    + +

    MethodServiceListRequest

    +

    MethodServiceListRequest is the request payload for listing all public methods.

    - + -

    ServiceClassChange

    -

    ServiceClassChange is the payload for changing a VM's service class.

    +

    MethodServiceListResponse

    +

    MethodServiceListResponse is the response payload for listing all public methods.

    @@ -5176,10 +5435,10 @@

    ServiceClassChange

    - - - - + + + + @@ -5189,177 +5448,15 @@

    ServiceClassChange

    -

    VMInstance

    -

    A VM instance as returned by the API.

    +

    MethodServiceTokenScopedListRequest

    +

    MethodServiceTokenScopedListRequest is the request payload for listing all methods callable with the token present in the request.

    -
    serviceclassServiceClass

    Target service class.

    methodsstringrepeated

    Methods is a list of methods public callable

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    uuidstring

    UUID of this VM.

    metafits.api.v1.Meta

    Metadata for this VM. -TODO: dates are available in the nulink db but not passed through yet.

    fqdnstring

    FQDN of the VM, derived from the name at creation or generated by the backend.

    tenantstring

    Tenant this VM belongs to.

    project_uuidstring

    UUID of the project this VM belongs to.

    os_uuidstring

    UUID of the OS image installed on the VM; resolve the title via the OS endpoint.

    location_uuidstring

    UUID of the datacenter location. -TODO: not exposed by the upstream (nulink) VM records yet; always empty.

    contact_uuidstring

    TODO: Contact UUID – not yet implemented; open discussion with FCN (#23).

    cpuuint32

    Number of CPU cores.

    ramuint32

    RAM in GB.

    backupbool

    Whether backup is enabled. -TODO: the upstream (nulink) list/get models do not expose this; always false.

    statusstring

    Status of the ongoing operation.

    status_infostring

    Additional information about the current status.

    availabilityAvailability

    Availability level.

    serviceclassServiceClass

    Service class.

    windows_detailsWindowsDetails

    Windows-specific settings (domain + disks).

    linux_detailsLinuxDetails

    Linux-specific settings (LDAP + disks).

    interfacesNetworkInterfacerepeated

    Network interfaces attached to the VM (IPv4 only).

    vlanVlan

    VLAN the VM is attached to. -TODO: not exposed by the upstream (nulink) VM records yet; always unset.

    order_numberstring

    Internal reference number provided by the user, e.g. a ticket ID.

    contractbool

    True if the order was placed by FITS, false if self-service. -TODO: maybe remove this field entirely.

    - - -

    VMServiceAddDiskRequest

    -

    Request to order an additional data disk for a VM.

    +

    MethodServiceTokenScopedListResponse

    +

    MethodServiceTokenScopedListResponse is the response payload which contains all methods which are callable with the given token.

    @@ -5369,39 +5466,31 @@

    VMServiceAddDiskRequest

    - - - - - - - - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - + + + + @@ -5411,15 +5500,8 @@

    VMServiceAddDiskRequest

    -

    VMServiceAddDiskResponse

    -

    Response for AddDisk.

    - - - - - -

    VMServiceAddIPRequest

    -

    Request to order an additional IP address for a VM.

    +

    MethodServiceTokenScopedListResponse.ProjectRolesEntry

    +

    uuidstring

    UUID of the VM to attach the disk to.

    projectstring

    Project the VM belongs to.

    permissionsMethodPermissionrepeated

    Permissions contains a list of methods which can be called

    order_numberstring

    Order reference for this operation. -TODO: can this be optional?

    project_rolesMethodServiceTokenScopedListResponse.ProjectRolesEntryrepeated

    ProjectRoles associates a project ID with the corresponding role of the token owner

    linuxLinuxDisk

    Linux data disk.

    tenant_rolesMethodServiceTokenScopedListResponse.TenantRolesEntryrepeated

    TenantRoles associates a tenant ID with the corresponding role of the token owner

    windowsWindowsDisk

    Windows data disk.

    admin_roleAdminRoleoptional

    AdminRole defines the admin role of the token owner

    @@ -5429,25 +5511,17 @@

    VMServiceAddIPRequest

    - - - - - - - - + - + - - + + - + @@ -5457,15 +5531,8 @@

    VMServiceAddIPRequest

    -

    VMServiceAddIPResponse

    -

    Response for AddIP.

    - - - - - -

    VMServiceCreateLinuxRequest

    -

    Linux-specific create request parts.

    +

    MethodServiceTokenScopedListResponse.TenantRolesEntry

    +

    uuidstring

    UUID of the VM to attach the IP to.

    projectkey string

    Project the VM belongs to.

    order_numberstringvalueProjectRole

    Order reference for this operation. -TODO: can this be optional?

    @@ -5475,17 +5542,17 @@

    VMServiceCreateLinuxRequest<

    - + - + - - - - + + + + @@ -5495,8 +5562,48 @@

    VMServiceCreateLinuxRequest< -

    VMServiceCreateRequest

    -

    Request to create a new VM instance.

    TODO: contract, billable and billing_start_date.

    + + + + + + +

    MethodService

    +

    MethodService provides method discovery operations.

    Methods are functions in services.

    +
    ldap_uuidkey string

    UUID of the LDAP directory the VM should integrate with.

    disksLinuxDiskrepeated

    Disks for the Linux VM, excluding the OS disk.

    valueTenantRole

    + + + + + + + + + + + + + + + + + + + + +
    Method NameRequest TypeResponse TypeDescription
    ListMethodServiceListRequestMethodServiceListResponse

    Returns the list of all public visible methods.

    TokenScopedListMethodServiceTokenScopedListRequestMethodServiceTokenScopedListResponse

    TokenScopedList returns all methods callable with the token present in the request.

    + + + + +
    +

    fits/api/v1/project.proto

    Top +
    +

    + + +

    Project

    +

    Project defines a group of resources belonging to a tenant

    a tenant can have multiple projects

    @@ -5506,110 +5613,194 @@

    VMServiceCreateRequest

    - + - + - - - - + + + + - + - + - + - + - + - + - + - - + + + +
    project_uuiduuid string

    UUID of the project this VM belongs to.

    Uuid of this project

    namestringoptional

    Optional name; the FQDN is derived from it.

    metaMeta

    Meta for this project

    os_uuidname string

    UUID of the operating system image to install.

    Name of this project must be unique per tenant

    vlan_uuiddescription string

    UUID of the VLAN network to attach the VM to.

    Description of this project

    location_uuidtenant string

    UUID of the datacenter location; the VM is scheduled into one data center within it.

    Tenant this project belongs to

    contact_uuidavatar_url string

    TODO: Contact UUID – open discussion with FCN; may become a dedicated /contact endpoint.

    optional

    AvatarUrl of the Project

    + + + + + +

    ProjectServiceCreateRequest

    +

    ProjectServiceCreateRequest is the request payload to Create a project

    + + + + + + + + - - + + - + - - + + - + - + - + - - - - + + + + - - + + - + + +
    FieldTypeLabelDescription
    cpuuint32loginstring

    Number of CPU cores.

    Login is the tenant of this project +TODO: is login really a good name?

    ramuint32namestring

    RAM in GB. Must be a power of 2.

    Name of this project, unique per tenant

    order_numberdescription string

    Internal reference number provided by the user, e.g. a ticket ID. -TODO: can this be optional?

    Description of this project

    labelsfits.api.v1.Labels

    Optional key-value labels for accounting purposes. -(e.g. contract number, transaction number, technical key, accounting key).

    avatar_urlstringoptional

    Avatar URL of the project

    backupboollabelsLabels

    Whether backup is enabled.

    Labels on the project

    + + + + + +

    ProjectServiceCreateResponse

    +

    ProjectServiceCreateResponse is the response payload of creation of a project

    + + + + + + + + - - + + - + + +
    FieldTypeLabelDescription
    availabilityAvailabilityprojectProject

    Availability level.

    Project is the project

    + + + + + +

    ProjectServiceDeleteRequest

    +

    ProjectServiceDeleteRequest is the request payload to delete a project

    + + + + + + + + - - + + - + + +
    FieldTypeLabelDescription
    serviceclassServiceClassprojectstring

    Service class; only certain combinations with availability are valid.

    Project is the uuid of the project to get

    + + + + + +

    ProjectServiceDeleteResponse

    +

    ProjectServiceDeleteResponse is the response payload to delete a project

    + + + + + + + + - - + + - + + +
    FieldTypeLabelDescription
    windowsVMServiceCreateWindowsRequestprojectProject

    Windows-specific settings (domain + disk).

    Project is the project

    + + + + + +

    ProjectServiceGetRequest

    +

    ProjectServiceGetRequest is the request payload to get a project

    + + + + + + + + - - + + - + @@ -5619,15 +5810,8 @@

    VMServiceCreateRequest

    -

    VMServiceCreateResponse

    -

    Response for Create; an empty response means the VM was accepted.

    - - - - - -

    VMServiceCreateWindowsRequest

    -

    Windows-specific create request parts.

    +

    ProjectServiceGetResponse

    +

    ProjectServiceGetResponse is the response payload to get a projects

    FieldTypeLabelDescription
    linuxVMServiceCreateLinuxRequestprojectstring

    Linux-specific settings (LDAP + disk).

    Project is the uuid of the project to get

    @@ -5637,17 +5821,10 @@

    VMServiceCreateWindowsRequ

    - - + + - - - - - - - - + @@ -5657,8 +5834,8 @@

    VMServiceCreateWindowsRequ -

    VMServiceDeleteDiskRequest

    -

    Request to cancel a data disk.

    +

    ProjectServiceListRequest

    +

    ProjectServiceListRequest is the request payload to list all projects

    domain_uuidstringprojectProject

    UUID of the Windows domain the VM should join.

    disksWindowsDiskrepeated

    Disks for the Windows VM, excluding the OS disk.

    Project is the project

    @@ -5668,32 +5845,31 @@

    VMServiceDeleteDiskRequest

    - + - - + + - + - - + + - + - - + + - - - - + + + + @@ -5703,15 +5879,32 @@

    VMServiceDeleteDiskRequestVMServiceDeleteDiskResponse

    -

    Response for DeleteDisk.

    +

    ProjectServiceListResponse

    +

    ProjectServiceListResponse is the response payload to list all projects

    +
    uuidid string

    UUID of the VM the disk belongs to.

    optional

    Id lists only projects with this id

    disk_uuidname string

    UUID of the disk to cancel.

    optional

    Name lists only projects with this name

    projecttenant string

    Project the VM belongs to.

    optional

    Tenant lists only projects of this tenant

    order_numberstring

    Order reference for this operation. -TODO: can this be optional?

    labelsLabelsoptional

    Labels lists only projects containing the given labels

    + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    projectsProjectrepeated

    Projects is a list of all your projects

    + + -

    VMServiceDeleteIPRequest

    -

    Request to delete an IP address from a VM.

    +

    ProjectServiceUpdateRequest

    +

    ProjectServiceUpdateRequest is the request payload to update a project

    @@ -5721,32 +5914,45 @@

    VMServiceDeleteIPRequest

    - + - + - - + + - + - + - - + + - + - - + + + + + + + + + + + + + + + + @@ -5756,15 +5962,93 @@

    VMServiceDeleteIPRequest

    -

    VMServiceDeleteIPResponse

    -

    Response for DeleteIP.

    +

    ProjectServiceUpdateResponse

    +

    ProjectServiceUpdateResponse is the response payload to update a project

    + + +
    uuidproject string

    UUID of the VM the IP belongs to.

    Project is the uuid of the project to get

    interface_uuidstringupdate_metaUpdateMeta

    UUID of the network interface holding the IP.

    UpdateMeta contains the timestamp and strategy to be used in this update request

    projectname string

    Project the VM belongs to.

    optional

    Name of this project unique per tenant

    order_numberdescription string

    Order reference for this operation. -TODO: can this be optional?

    optional

    Description of this project

    avatar_urlstringoptional

    Avatar URL of the project

    labelsUpdateLabelsoptional

    Labels on this project

    + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    projectProject

    Project is the project

    + + + + + + + + + +

    ProjectService

    +

    ProjectService provides project management operations.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Method NameRequest TypeResponse TypeDescription
    ListProjectServiceListRequestProjectServiceListResponse

    Returns the list of all accessible projects.

    GetProjectServiceGetRequestProjectServiceGetResponse

    Returns the project with the specified UUID.

    CreateProjectServiceCreateRequestProjectServiceCreateResponse

    Create a project

    DeleteProjectServiceDeleteRequestProjectServiceDeleteResponse

    Delete a project

    UpdateProjectServiceUpdateRequestProjectServiceUpdateResponse

    Update a project

    + + +
    +

    fits/api/v1/tenant.proto

    Top +
    +

    + -

    VMServiceDeleteRequest

    -

    Request to cancel a VM instance.

    +

    Tenant

    +

    Tenant is a customer of the platform

    @@ -5774,25 +6058,52 @@

    VMServiceDeleteRequest

    - + - + - + + + + + + + + - + - + - + + + + + + + + + + + + + + + + + + + + + + @@ -5802,15 +6113,8 @@

    VMServiceDeleteRequest

    -

    VMServiceDeleteResponse

    -

    Response for Delete; an empty response means the cancellation was accepted.

    - - - - - -

    VMServiceGetRequest

    -

    Request to get a VM by UUID.

    +

    TenantServiceCreateRequest

    +

    TenantServiceCreateRequest is the request payload of the tenant create request

    projectlogin string

    Project the VM belongs to.

    Login of the tenant

    uuidmetaMeta

    Meta for this tenant

    name string

    UUID of the VM to delete.

    Name of the tenant

    order_numberemail string

    Order reference for this operation. -TODO: can this be optional?

    Email of the tenant

    descriptionstring

    Description of this tenant

    avatar_urlstring

    AvatarUrl of the tenant

    created_bystring

    CreatedBy stores who created this tenant

    @@ -5820,17 +6124,38 @@

    VMServiceGetRequest

    - + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + @@ -5840,8 +6165,8 @@

    VMServiceGetRequest

    -

    VMServiceGetResponse

    -

    Response containing the requested VM.

    +

    TenantServiceCreateResponse

    +

    TenantServiceCreateResponse is the response payload of the tenant create request

    uuidnamestring

    Name of this tenant

    descriptionstringoptional

    Description of this tenant

    emailstringoptional

    Email of the tenant, if not set will be inherited from the creator

    avatar_url string optional

    UUID of the VM.

    AvatarUrl of the tenant

    tenantstringlabelsLabels

    Tenant of the VM.

    Labels on the tenant

    @@ -5851,10 +6176,10 @@

    VMServiceGetResponse

    - - + + - + @@ -5864,8 +6189,8 @@

    VMServiceGetResponse

    -

    VMServiceListRequest

    -

    Request to list VMs.

    +

    TenantServiceDeleteRequest

    +

    TenantServiceDeleteRequest is the request payload of the tenant delete request

    vmVMInstancetenantTenant

    The VM.

    Tenant is the tenant

    @@ -5875,10 +6200,10 @@

    VMServiceListRequest

    - + - - + + @@ -5888,8 +6213,8 @@

    VMServiceListRequest

    -

    VMServiceListResponse

    -

    Response containing the list of VMs.

    +

    TenantServiceDeleteResponse

    +

    TenantServiceDeleteResponse is the response payload of the tenant delete request

    tenantlogin stringoptional

    Tenant of the VMs.

    Login of the tenant

    @@ -5899,10 +6224,10 @@

    VMServiceListResponse

    - - - - + + + + @@ -5912,8 +6237,8 @@

    VMServiceListResponse

    -

    VMServiceMoveIPRequest

    -

    Request to move an IP address from one VM to another.

    +

    TenantServiceGetRequest

    +

    TenantServiceGetRequest is the request payload of the tenant get request

    vmsVMInstancerepeated

    The VM instances.

    tenantTenant

    Tenant is the tenant

    @@ -5923,39 +6248,10 @@

    VMServiceMoveIPRequest

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + @@ -5965,15 +6261,8 @@

    VMServiceMoveIPRequest

    -

    VMServiceMoveIPResponse

    -

    Response for MoveIP.

    - - - - - -

    VMServiceUpdateDiskRequest

    -

    Request to change an existing data disk; only size and auto-extend are mutable.

    +

    TenantServiceGetResponse

    +

    TenantServiceGetResponse is the response payload of the tenant get request

    uuidstring

    UUID of the VM the IP currently belongs to.

    interface_uuidstring

    UUID of the network interface holding the IP.

    projectstring

    Project the VM belongs to.

    order_numberstring

    Order reference for this operation. -TODO: can this be optional?

    target_vm_uuidlogin string

    UUID of the VM to move the IP to.

    Login of the tenant

    @@ -5983,46 +6272,10 @@

    VMServiceUpdateDiskRequest

    - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - + @@ -6032,15 +6285,8 @@

    VMServiceUpdateDiskRequestVMServiceUpdateDiskResponse

    -

    Response for UpdateDisk.

    - - - - - -

    VMServiceUpdateRequest

    -

    Request to change a mutable property of an existing VM.

    Exactly one action must be set; each maps onto its own upstream endpoint.

    TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per

    action); combined changes would need

    server-side fan-out without rollback.

    +

    TenantServiceListRequest

    +

    TenantServiceListRequest is the request payload of the tenant list request

    uuidstring

    UUID of the VM the disk belongs to.

    disk_uuidstring

    UUID of the disk to change.

    projectstring

    Project the VM belongs to.

    order_numberstringtenantTenant

    Order reference for this operation. -TODO: can this be optional?

    auto_extendbooloptional

    New auto-extend behavior; unset keeps the current value.

    sizeuint64optional

    New size of the disk in GB; unset keeps the current value.

    Tenant is the tenant

    @@ -6050,53 +6296,24 @@

    VMServiceUpdateRequest

    - - - - - - - - + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - + + - - - - + + + + @@ -6106,15 +6323,8 @@

    VMServiceUpdateRequest

    -

    VMServiceUpdateResponse

    -

    Response for Update; an empty response means the change was accepted.

    - - - - - -

    VMServiceValidateAddDiskRequest

    -

    Request to validate an AddDisk without ordering anything.

    +

    TenantServiceListResponse

    +

    TenantServiceListResponse is the response payload of the tenant list request

    uuidstring

    UUID of the VM to update.

    projectid string

    Project the VM belongs to.

    optional

    Id filters tenants by id

    order_numbername string

    Order reference for this operation. -TODO: can this be optional?

    update_metafits.api.v1.UpdateMeta

    Timestamp and strategy for this update.

    performance_classPerformanceClassChange

    Change the CPU/RAM performance class.

    service_classServiceClassChange

    Change the service class.

    optional

    Name filters tenants by name

    contactContactChange

    Change the contact person.

    labelsLabelsoptional

    Labels lists only projects containing the given labels

    @@ -6124,10 +6334,10 @@

    VMServiceValidateAddDisk

    - - - - + + + + @@ -6137,15 +6347,8 @@

    VMServiceValidateAddDisk -

    VMServiceValidateAddDiskResponse

    -

    Response for ValidateAddDisk; violations are returned as an InvalidArgument error.

    - - - - - -

    VMServiceValidateAddIPRequest

    -

    Request to validate an AddIP without ordering anything.

    +

    TenantServiceUpdateRequest

    +

    TenantServiceUpdateRequest is the request payload of the tenant update request

    add_diskVMServiceAddDiskRequest

    The add disk request to validate.

    tenantsTenantrepeated

    Tenants is the list of tenants

    @@ -6155,41 +6358,52 @@

    VMServiceValidateAddIPRequ

    - - + + - + - -
    add_ipVMServiceAddIPRequestloginstring

    The add IP request to validate.

    Login of the tenant

    - - - - - -

    VMServiceValidateAddIPResponse

    -

    Response for ValidateAddIP; violations are returned as an InvalidArgument error.

    - - - - - -

    VMServiceValidateCreateRequest

    -

    Request to validate a VM create without creating anything.

    - - - - - - - - - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6199,15 +6413,8 @@

    VMServiceValidateCreateRe -

    VMServiceValidateCreateResponse

    -

    Response for ValidateCreate; violations are returned as an InvalidArgument error.

    - - - - - -

    VMServiceValidateUpdateDiskRequest

    -

    Request to validate an UpdateDisk without changing anything.

    +

    TenantServiceUpdateResponse

    +

    TenantServiceUpdateResponse is the response payload of the tenant update request

    FieldTypeLabelDescription
    createVMServiceCreateRequestupdate_metaUpdateMeta

    The create request to validate.

    UpdateMeta contains the timestamp and strategy to be used in this update request

    namestringoptional

    Name of the tenant

    emailstringoptional

    Email of the tenant

    descriptionstringoptional

    Description of this tenant

    avatar_urlstringoptional

    AvatarUrl of the tenant

    labelsUpdateLabelsoptional

    Labels on the tenant

    @@ -6217,10 +6424,10 @@

    VMServiceValidateUpda

    - - + + - + @@ -6230,15 +6437,69 @@

    VMServiceValidateUpda -

    VMServiceValidateUpdateDiskResponse

    -

    Response for ValidateUpdateDisk; violations are returned as an InvalidArgument error.

    - + + + + + +

    TenantService

    +

    TenantService provides tenant management operations.

    +
    update_diskVMServiceUpdateDiskRequesttenantTenant

    The update disk request to validate.

    Tenant is the tenant

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Method NameRequest TypeResponse TypeDescription
    CreateTenantServiceCreateRequestTenantServiceCreateResponse

    Creates a new tenant.

    ListTenantServiceListRequestTenantServiceListResponse

    Returns the list of tenants.

    GetTenantServiceGetRequestTenantServiceGetResponse

    Get a tenant

    UpdateTenantServiceUpdateRequestTenantServiceUpdateResponse

    Update a tenant

    DeleteTenantServiceDeleteRequestTenantServiceDeleteResponse

    Delete a tenant

    + + +
    +

    fits/api/v1/version.proto

    Top +
    +

    + -

    WindowsDetails

    -

    Windows-specific VM details.

    +

    Version

    +

    Version represents the version of the application.

    @@ -6248,24 +6509,31 @@

    WindowsDetails

    - - - - + + + + - + - + - + - + + + + + + + + @@ -6275,8 +6543,15 @@

    WindowsDetails

    -

    WindowsDisk

    -

    Disk configuration for a Windows VM.

    +

    VersionServiceGetRequest

    +

    VersionServiceGetRequest is the request payload for getting the version.

    + + + + + +

    VersionServiceGetResponse

    +

    VersionServiceGetResponse is the response payload for getting the version.

    disksWindowsDiskrepeated

    Disks configured on the Windows VM.

    versionstring

    Version of the application

    domain_uuidrevision string

    UUID of the Windows domain the VM has joined.

    Revision of the application

    domain_fqdngit_sha1 string

    Windows-specific FQDN, derived from the name at creation or generated by the backend.

    GitSHA1 of the application

    build_datestring

    BuildDate of the application

    @@ -6286,38 +6561,10 @@

    WindowsDisk

    - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - + @@ -6329,88 +6576,12 @@

    WindowsDisk

    -

    Availability

    -

    Availability specifies the availability level of a VM; higher value = higher availability.

    -
    uuidstringoptional

    UUID of the disk; set for existing disks, unset for new ones.

    labelstring

    Label (name) of the disk.

    auto_extendboolversionVersion

    Whether the disk grows automatically when space runs low.

    sizeuint64optional

    Size of the disk in GB.

    driveletterstringoptional

    Drive letter (e.g. "D").

    Version contains the version of the application

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameNumberDescription
    AVAILABILITY_UNSPECIFIED0

    AVAILABILITY_UNSPECIFIED is not specified.

    AVAILABILITY_V01

    AVAILABILITY_V0 is availability level V0.

    AVAILABILITY_V12

    AVAILABILITY_V1 is availability level V1.

    AVAILABILITY_V23

    AVAILABILITY_V2 is availability level V2.

    AVAILABILITY_V34

    AVAILABILITY_V3 is availability level V3.

    - -

    ServiceClass

    -

    ServiceClass specifies the service tier of a VM; higher value = higher tier.

    Only certain combinations with Availability are valid.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameNumberDescription
    SERVICE_CLASS_UNSPECIFIED0

    SERVICE_CLASS_UNSPECIFIED is not specified.

    SERVICE_CLASS_SZ11

    SERVICE_CLASS_SZ1 is service class SZ1.

    SERVICE_CLASS_SZ22

    SERVICE_CLASS_SZ2 is service class SZ2.

    SERVICE_CLASS_SZ33

    SERVICE_CLASS_SZ3 is service class SZ3.

    - -

    VMService

    -

    VMService provides VM CRUD operations.

    +

    VersionService

    +

    VersionService provides version information operations.

    @@ -6419,108 +6590,9 @@

    VMService

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + diff --git a/go/client/client.go b/go/client/client.go index 42eabba..9f7a9ae 100755 --- a/go/client/client.go +++ b/go/client/client.go @@ -5,20 +5,36 @@ import ( "connectrpc.com/connect" compress "github.com/klauspost/connect-compress/v2" + "github.com/fi-ts/api/go/fits/api/mvm/v1/mvmv1connect" "github.com/fi-ts/api/go/fits/api/v1/apiv1connect" - "github.com/fi-ts/api/go/fits/api/vm/v1/vmv1connect" ) type ( Client interface { + Apimvmv1() Apimvmv1 Apiv1() Apiv1 - Apivmv1() Apivmv1 } client struct { config *DialConfig interceptors []connect.Interceptor } + Apimvmv1 interface { + Location() mvmv1connect.LocationServiceClient + MVM() mvmv1connect.MVMServiceClient + OS() mvmv1connect.OSServiceClient + StageType() mvmv1connect.StageTypeServiceClient + VLAN() mvmv1connect.VLANServiceClient + } + + apimvmv1 struct { + locationservice mvmv1connect.LocationServiceClient + mvmservice mvmv1connect.MVMServiceClient + osservice mvmv1connect.OSServiceClient + stagetypeservice mvmv1connect.StageTypeServiceClient + vlanservice mvmv1connect.VLANServiceClient + } + Apiv1 interface { Health() apiv1connect.HealthServiceClient IP() apiv1connect.IPServiceClient @@ -38,23 +54,59 @@ type ( tokenservice apiv1connect.TokenServiceClient versionservice apiv1connect.VersionServiceClient } +) - Apivmv1 interface { - Location() vmv1connect.LocationServiceClient - OS() vmv1connect.OSServiceClient - StageType() vmv1connect.StageTypeServiceClient - Vlan() vmv1connect.VlanServiceClient - VM() vmv1connect.VMServiceClient +func (c *client) Apimvmv1() Apimvmv1 { + a := &apimvmv1{ + locationservice: mvmv1connect.NewLocationServiceClient( + c.config.HttpClient(), + c.config.BaseURL, + connect.WithInterceptors(c.interceptors...), + compress.WithAll(compress.LevelBalanced), + ), + mvmservice: mvmv1connect.NewMVMServiceClient( + c.config.HttpClient(), + c.config.BaseURL, + connect.WithInterceptors(c.interceptors...), + compress.WithAll(compress.LevelBalanced), + ), + osservice: mvmv1connect.NewOSServiceClient( + c.config.HttpClient(), + c.config.BaseURL, + connect.WithInterceptors(c.interceptors...), + compress.WithAll(compress.LevelBalanced), + ), + stagetypeservice: mvmv1connect.NewStageTypeServiceClient( + c.config.HttpClient(), + c.config.BaseURL, + connect.WithInterceptors(c.interceptors...), + compress.WithAll(compress.LevelBalanced), + ), + vlanservice: mvmv1connect.NewVLANServiceClient( + c.config.HttpClient(), + c.config.BaseURL, + connect.WithInterceptors(c.interceptors...), + compress.WithAll(compress.LevelBalanced), + ), } + return a +} - apivmv1 struct { - locationservice vmv1connect.LocationServiceClient - osservice vmv1connect.OSServiceClient - stagetypeservice vmv1connect.StageTypeServiceClient - vlanservice vmv1connect.VlanServiceClient - vmservice vmv1connect.VMServiceClient - } -) +func (c *apimvmv1) Location() mvmv1connect.LocationServiceClient { + return c.locationservice +} +func (c *apimvmv1) MVM() mvmv1connect.MVMServiceClient { + return c.mvmservice +} +func (c *apimvmv1) OS() mvmv1connect.OSServiceClient { + return c.osservice +} +func (c *apimvmv1) StageType() mvmv1connect.StageTypeServiceClient { + return c.stagetypeservice +} +func (c *apimvmv1) VLAN() mvmv1connect.VLANServiceClient { + return c.vlanservice +} func (c *client) Apiv1() Apiv1 { a := &apiv1{ @@ -125,55 +177,3 @@ func (c *apiv1) Token() apiv1connect.TokenServiceClient { func (c *apiv1) Version() apiv1connect.VersionServiceClient { return c.versionservice } - -func (c *client) Apivmv1() Apivmv1 { - a := &apivmv1{ - locationservice: vmv1connect.NewLocationServiceClient( - c.config.HttpClient(), - c.config.BaseURL, - connect.WithInterceptors(c.interceptors...), - compress.WithAll(compress.LevelBalanced), - ), - osservice: vmv1connect.NewOSServiceClient( - c.config.HttpClient(), - c.config.BaseURL, - connect.WithInterceptors(c.interceptors...), - compress.WithAll(compress.LevelBalanced), - ), - stagetypeservice: vmv1connect.NewStageTypeServiceClient( - c.config.HttpClient(), - c.config.BaseURL, - connect.WithInterceptors(c.interceptors...), - compress.WithAll(compress.LevelBalanced), - ), - vlanservice: vmv1connect.NewVlanServiceClient( - c.config.HttpClient(), - c.config.BaseURL, - connect.WithInterceptors(c.interceptors...), - compress.WithAll(compress.LevelBalanced), - ), - vmservice: vmv1connect.NewVMServiceClient( - c.config.HttpClient(), - c.config.BaseURL, - connect.WithInterceptors(c.interceptors...), - compress.WithAll(compress.LevelBalanced), - ), - } - return a -} - -func (c *apivmv1) Location() vmv1connect.LocationServiceClient { - return c.locationservice -} -func (c *apivmv1) OS() vmv1connect.OSServiceClient { - return c.osservice -} -func (c *apivmv1) StageType() vmv1connect.StageTypeServiceClient { - return c.stagetypeservice -} -func (c *apivmv1) Vlan() vmv1connect.VlanServiceClient { - return c.vlanservice -} -func (c *apivmv1) VM() vmv1connect.VMServiceClient { - return c.vmservice -} diff --git a/go/fits/api/vm/v1/location.pb.go b/go/fits/api/mvm/v1/location.pb.go similarity index 59% rename from go/fits/api/vm/v1/location.pb.go rename to go/fits/api/mvm/v1/location.pb.go index 4cff6a6..c27daa2 100644 --- a/go/fits/api/vm/v1/location.pb.go +++ b/go/fits/api/mvm/v1/location.pb.go @@ -2,9 +2,9 @@ // versions: // protoc-gen-go v1.36.12 // protoc (unknown) -// source: fits/api/vm/v1/location.proto +// source: fits/api/mvm/v1/location.proto -package vmv1 +package mvmv1 import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" @@ -23,7 +23,7 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// Location is the definition of an available datacenter location for VM instances +// Location is the definition of an available datacenter location for MVM instances. type Location struct { state protoimpl.MessageState `protogen:"open.v1"` // Uuid of this location @@ -36,7 +36,7 @@ type Location struct { func (x *Location) Reset() { *x = Location{} - mi := &file_fits_api_vm_v1_location_proto_msgTypes[0] + mi := &file_fits_api_mvm_v1_location_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -48,7 +48,7 @@ func (x *Location) String() string { func (*Location) ProtoMessage() {} func (x *Location) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_location_proto_msgTypes[0] + mi := &file_fits_api_mvm_v1_location_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -61,7 +61,7 @@ func (x *Location) ProtoReflect() protoreflect.Message { // Deprecated: Use Location.ProtoReflect.Descriptor instead. func (*Location) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_location_proto_rawDescGZIP(), []int{0} + return file_fits_api_mvm_v1_location_proto_rawDescGZIP(), []int{0} } func (x *Location) GetUuid() string { @@ -89,7 +89,7 @@ type LocationServiceListRequest struct { func (x *LocationServiceListRequest) Reset() { *x = LocationServiceListRequest{} - mi := &file_fits_api_vm_v1_location_proto_msgTypes[1] + mi := &file_fits_api_mvm_v1_location_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -101,7 +101,7 @@ func (x *LocationServiceListRequest) String() string { func (*LocationServiceListRequest) ProtoMessage() {} func (x *LocationServiceListRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_location_proto_msgTypes[1] + mi := &file_fits_api_mvm_v1_location_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -114,7 +114,7 @@ func (x *LocationServiceListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LocationServiceListRequest.ProtoReflect.Descriptor instead. func (*LocationServiceListRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_location_proto_rawDescGZIP(), []int{1} + return file_fits_api_mvm_v1_location_proto_rawDescGZIP(), []int{1} } func (x *LocationServiceListRequest) GetTenant() string { @@ -135,7 +135,7 @@ type LocationServiceListResponse struct { func (x *LocationServiceListResponse) Reset() { *x = LocationServiceListResponse{} - mi := &file_fits_api_vm_v1_location_proto_msgTypes[2] + mi := &file_fits_api_mvm_v1_location_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -147,7 +147,7 @@ func (x *LocationServiceListResponse) String() string { func (*LocationServiceListResponse) ProtoMessage() {} func (x *LocationServiceListResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_location_proto_msgTypes[2] + mi := &file_fits_api_mvm_v1_location_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -160,7 +160,7 @@ func (x *LocationServiceListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LocationServiceListResponse.ProtoReflect.Descriptor instead. func (*LocationServiceListResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_location_proto_rawDescGZIP(), []int{2} + return file_fits_api_mvm_v1_location_proto_rawDescGZIP(), []int{2} } func (x *LocationServiceListResponse) GetLocations() []*Location { @@ -170,44 +170,44 @@ func (x *LocationServiceListResponse) GetLocations() []*Location { return nil } -var File_fits_api_vm_v1_location_proto protoreflect.FileDescriptor +var File_fits_api_mvm_v1_location_proto protoreflect.FileDescriptor -const file_fits_api_vm_v1_location_proto_rawDesc = "" + +const file_fits_api_mvm_v1_location_proto_rawDesc = "" + "\n" + - "\x1dfits/api/vm/v1/location.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"K\n" + + "\x1efits/api/mvm/v1/location.proto\x12\x0ffits.api.mvm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"K\n" + "\bLocation\x12\x1c\n" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n" + "\x05title\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\"A\n" + "\x1aLocationServiceListRequest\x12#\n" + - "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"U\n" + - "\x1bLocationServiceListResponse\x126\n" + - "\tlocations\x18\x01 \x03(\v2\x18.fits.api.vm.v1.LocationR\tlocations2\x7f\n" + - "\x0fLocationService\x12l\n" + - "\x04List\x12*.fits.api.vm.v1.LocationServiceListRequest\x1a+.fits.api.vm.v1.LocationServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xab\x01\n" + - "\x12com.fits.api.vm.v1B\rLocationProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" + "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"V\n" + + "\x1bLocationServiceListResponse\x127\n" + + "\tlocations\x18\x01 \x03(\v2\x19.fits.api.mvm.v1.LocationR\tlocations2\x81\x01\n" + + "\x0fLocationService\x12n\n" + + "\x04List\x12+.fits.api.mvm.v1.LocationServiceListRequest\x1a,.fits.api.mvm.v1.LocationServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xb2\x01\n" + + "\x13com.fits.api.mvm.v1B\rLocationProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03FAM\xaa\x02\x0fFits.Api.Mvm.V1\xca\x02\x0fFits\\Api\\Mvm\\V1\xe2\x02\x1bFits\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12Fits::Api::Mvm::V1b\x06proto3" var ( - file_fits_api_vm_v1_location_proto_rawDescOnce sync.Once - file_fits_api_vm_v1_location_proto_rawDescData []byte + file_fits_api_mvm_v1_location_proto_rawDescOnce sync.Once + file_fits_api_mvm_v1_location_proto_rawDescData []byte ) -func file_fits_api_vm_v1_location_proto_rawDescGZIP() []byte { - file_fits_api_vm_v1_location_proto_rawDescOnce.Do(func() { - file_fits_api_vm_v1_location_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_location_proto_rawDesc), len(file_fits_api_vm_v1_location_proto_rawDesc))) +func file_fits_api_mvm_v1_location_proto_rawDescGZIP() []byte { + file_fits_api_mvm_v1_location_proto_rawDescOnce.Do(func() { + file_fits_api_mvm_v1_location_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_mvm_v1_location_proto_rawDesc), len(file_fits_api_mvm_v1_location_proto_rawDesc))) }) - return file_fits_api_vm_v1_location_proto_rawDescData + return file_fits_api_mvm_v1_location_proto_rawDescData } -var file_fits_api_vm_v1_location_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_fits_api_vm_v1_location_proto_goTypes = []any{ - (*Location)(nil), // 0: fits.api.vm.v1.Location - (*LocationServiceListRequest)(nil), // 1: fits.api.vm.v1.LocationServiceListRequest - (*LocationServiceListResponse)(nil), // 2: fits.api.vm.v1.LocationServiceListResponse +var file_fits_api_mvm_v1_location_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_fits_api_mvm_v1_location_proto_goTypes = []any{ + (*Location)(nil), // 0: fits.api.mvm.v1.Location + (*LocationServiceListRequest)(nil), // 1: fits.api.mvm.v1.LocationServiceListRequest + (*LocationServiceListResponse)(nil), // 2: fits.api.mvm.v1.LocationServiceListResponse } -var file_fits_api_vm_v1_location_proto_depIdxs = []int32{ - 0, // 0: fits.api.vm.v1.LocationServiceListResponse.locations:type_name -> fits.api.vm.v1.Location - 1, // 1: fits.api.vm.v1.LocationService.List:input_type -> fits.api.vm.v1.LocationServiceListRequest - 2, // 2: fits.api.vm.v1.LocationService.List:output_type -> fits.api.vm.v1.LocationServiceListResponse +var file_fits_api_mvm_v1_location_proto_depIdxs = []int32{ + 0, // 0: fits.api.mvm.v1.LocationServiceListResponse.locations:type_name -> fits.api.mvm.v1.Location + 1, // 1: fits.api.mvm.v1.LocationService.List:input_type -> fits.api.mvm.v1.LocationServiceListRequest + 2, // 2: fits.api.mvm.v1.LocationService.List:output_type -> fits.api.mvm.v1.LocationServiceListResponse 2, // [2:3] is the sub-list for method output_type 1, // [1:2] is the sub-list for method input_type 1, // [1:1] is the sub-list for extension type_name @@ -215,26 +215,26 @@ var file_fits_api_vm_v1_location_proto_depIdxs = []int32{ 0, // [0:1] is the sub-list for field type_name } -func init() { file_fits_api_vm_v1_location_proto_init() } -func file_fits_api_vm_v1_location_proto_init() { - if File_fits_api_vm_v1_location_proto != nil { +func init() { file_fits_api_mvm_v1_location_proto_init() } +func file_fits_api_mvm_v1_location_proto_init() { + if File_fits_api_mvm_v1_location_proto != nil { return } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_location_proto_rawDesc), len(file_fits_api_vm_v1_location_proto_rawDesc)), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_mvm_v1_location_proto_rawDesc), len(file_fits_api_mvm_v1_location_proto_rawDesc)), NumEnums: 0, NumMessages: 3, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_fits_api_vm_v1_location_proto_goTypes, - DependencyIndexes: file_fits_api_vm_v1_location_proto_depIdxs, - MessageInfos: file_fits_api_vm_v1_location_proto_msgTypes, + GoTypes: file_fits_api_mvm_v1_location_proto_goTypes, + DependencyIndexes: file_fits_api_mvm_v1_location_proto_depIdxs, + MessageInfos: file_fits_api_mvm_v1_location_proto_msgTypes, }.Build() - File_fits_api_vm_v1_location_proto = out.File - file_fits_api_vm_v1_location_proto_goTypes = nil - file_fits_api_vm_v1_location_proto_depIdxs = nil + File_fits_api_mvm_v1_location_proto = out.File + file_fits_api_mvm_v1_location_proto_goTypes = nil + file_fits_api_mvm_v1_location_proto_depIdxs = nil } diff --git a/go/fits/api/mvm/v1/mvm.pb.go b/go/fits/api/mvm/v1/mvm.pb.go new file mode 100644 index 0000000..8aae6d5 --- /dev/null +++ b/go/fits/api/mvm/v1/mvm.pb.go @@ -0,0 +1,3351 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.12 +// protoc (unknown) +// source: fits/api/mvm/v1/mvm.proto + +package mvmv1 + +import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" + v1 "github.com/fi-ts/api/go/fits/api/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Availability specifies the availability level of a MVM; higher value = higher availability. +type Availability int32 + +const ( + // AVAILABILITY_UNSPECIFIED is not specified. + Availability_AVAILABILITY_UNSPECIFIED Availability = 0 + // AVAILABILITY_V0 is availability level V0. + Availability_AVAILABILITY_V0 Availability = 1 + // AVAILABILITY_V1 is availability level V1. + Availability_AVAILABILITY_V1 Availability = 2 + // AVAILABILITY_V2 is availability level V2. + Availability_AVAILABILITY_V2 Availability = 3 + // AVAILABILITY_V3 is availability level V3. + Availability_AVAILABILITY_V3 Availability = 4 +) + +// Enum value maps for Availability. +var ( + Availability_name = map[int32]string{ + 0: "AVAILABILITY_UNSPECIFIED", + 1: "AVAILABILITY_V0", + 2: "AVAILABILITY_V1", + 3: "AVAILABILITY_V2", + 4: "AVAILABILITY_V3", + } + Availability_value = map[string]int32{ + "AVAILABILITY_UNSPECIFIED": 0, + "AVAILABILITY_V0": 1, + "AVAILABILITY_V1": 2, + "AVAILABILITY_V2": 3, + "AVAILABILITY_V3": 4, + } +) + +func (x Availability) Enum() *Availability { + p := new(Availability) + *p = x + return p +} + +func (x Availability) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Availability) Descriptor() protoreflect.EnumDescriptor { + return file_fits_api_mvm_v1_mvm_proto_enumTypes[0].Descriptor() +} + +func (Availability) Type() protoreflect.EnumType { + return &file_fits_api_mvm_v1_mvm_proto_enumTypes[0] +} + +func (x Availability) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Availability.Descriptor instead. +func (Availability) EnumDescriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{0} +} + +// ServiceClass specifies the service tier of a MVM; higher value = higher tier. +// Only certain combinations with Availability are valid. +type ServiceClass int32 + +const ( + // SERVICE_CLASS_UNSPECIFIED is not specified. + ServiceClass_SERVICE_CLASS_UNSPECIFIED ServiceClass = 0 + // SERVICE_CLASS_SZ1 is service class SZ1. + ServiceClass_SERVICE_CLASS_SZ1 ServiceClass = 1 + // SERVICE_CLASS_SZ2 is service class SZ2. + ServiceClass_SERVICE_CLASS_SZ2 ServiceClass = 2 + // SERVICE_CLASS_SZ3 is service class SZ3. + ServiceClass_SERVICE_CLASS_SZ3 ServiceClass = 3 +) + +// Enum value maps for ServiceClass. +var ( + ServiceClass_name = map[int32]string{ + 0: "SERVICE_CLASS_UNSPECIFIED", + 1: "SERVICE_CLASS_SZ1", + 2: "SERVICE_CLASS_SZ2", + 3: "SERVICE_CLASS_SZ3", + } + ServiceClass_value = map[string]int32{ + "SERVICE_CLASS_UNSPECIFIED": 0, + "SERVICE_CLASS_SZ1": 1, + "SERVICE_CLASS_SZ2": 2, + "SERVICE_CLASS_SZ3": 3, + } +) + +func (x ServiceClass) Enum() *ServiceClass { + p := new(ServiceClass) + *p = x + return p +} + +func (x ServiceClass) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ServiceClass) Descriptor() protoreflect.EnumDescriptor { + return file_fits_api_mvm_v1_mvm_proto_enumTypes[1].Descriptor() +} + +func (ServiceClass) Type() protoreflect.EnumType { + return &file_fits_api_mvm_v1_mvm_proto_enumTypes[1] +} + +func (x ServiceClass) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ServiceClass.Descriptor instead. +func (ServiceClass) EnumDescriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{1} +} + +// DiskType classifies a MVM disk by its lifecycle rules. +// The upstream (nulink) API returns every disk of a MVM, including the +// backend-provisioned OS disk, so that oversized OS disks stay billable. +// +// Lifecycle per kind: +// - OS: provisioned by the backend and never part of create/add +// requests; resizable via UpdateDisk, never deletable. +// - SYSTEM: exactly one per MVM (drive letter F on Windows, mount point +// /appdata on Linux), whose letter/mount point is fixed; must be +// included in the create request; resizable via UpdateDisk, never +// deletable. +// - DATA: fully controllable (letter/mount point, size, auto-extend) +// and deletable; may be included at creation or added later via +// AddDisk. +// +// Whether auto-extend is supported for OS and SYSTEM disks is not yet +// known; only DATA disks are documented as supporting it. +// +// These rules are enforced by the upstream (nulink) API at creation and +// edit time (e.g. duplicate drive letters, deleting a system disk); +// fco-api does not re-validate them locally and surfaces upstream +// violations as InvalidArgument errors. Use the Validate* RPCs to +// pre-check a request against the upstream rules. +type DiskType int32 + +const ( + // DISK_TYPE_UNSPECIFIED is not specified. + DiskType_DISK_TYPE_UNSPECIFIED DiskType = 0 + // DISK_TYPE_OS is the operating system disk; provisioned by the backend, + // resizable, never deletable. + DiskType_DISK_TYPE_OS DiskType = 1 + // DISK_TYPE_SYSTEM is the additional system disk (volume F on Windows, + // /appdata on Linux); the letter/mount point is fixed, the size is + // resizable, never deletable. + DiskType_DISK_TYPE_SYSTEM DiskType = 2 + // DISK_TYPE_DATA is a user-managed data disk; fully controllable and + // deletable. + DiskType_DISK_TYPE_DATA DiskType = 3 +) + +// Enum value maps for DiskType. +var ( + DiskType_name = map[int32]string{ + 0: "DISK_TYPE_UNSPECIFIED", + 1: "DISK_TYPE_OS", + 2: "DISK_TYPE_SYSTEM", + 3: "DISK_TYPE_DATA", + } + DiskType_value = map[string]int32{ + "DISK_TYPE_UNSPECIFIED": 0, + "DISK_TYPE_OS": 1, + "DISK_TYPE_SYSTEM": 2, + "DISK_TYPE_DATA": 3, + } +) + +func (x DiskType) Enum() *DiskType { + p := new(DiskType) + *p = x + return p +} + +func (x DiskType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DiskType) Descriptor() protoreflect.EnumDescriptor { + return file_fits_api_mvm_v1_mvm_proto_enumTypes[2].Descriptor() +} + +func (DiskType) Type() protoreflect.EnumType { + return &file_fits_api_mvm_v1_mvm_proto_enumTypes[2] +} + +func (x DiskType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use DiskType.Descriptor instead. +func (DiskType) EnumDescriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{2} +} + +// Linux-specific MVM details. +type LinuxDetails struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Disks configured on the Linux MVM. + Disks []*LinuxDisk `protobuf:"bytes,1,rep,name=disks,proto3" json:"disks,omitempty"` + // UUID of the LDAP directory the MVM is integrated with. + LdapUuid string `protobuf:"bytes,2,opt,name=ldap_uuid,json=ldapUuid,proto3" json:"ldap_uuid,omitempty"` + // Linux-specific FQDN, derived from the name at creation or generated by the backend. + LdapFqdn string `protobuf:"bytes,3,opt,name=ldap_fqdn,json=ldapFqdn,proto3" json:"ldap_fqdn,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LinuxDetails) Reset() { + *x = LinuxDetails{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LinuxDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LinuxDetails) ProtoMessage() {} + +func (x *LinuxDetails) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LinuxDetails.ProtoReflect.Descriptor instead. +func (*LinuxDetails) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{0} +} + +func (x *LinuxDetails) GetDisks() []*LinuxDisk { + if x != nil { + return x.Disks + } + return nil +} + +func (x *LinuxDetails) GetLdapUuid() string { + if x != nil { + return x.LdapUuid + } + return "" +} + +func (x *LinuxDetails) GetLdapFqdn() string { + if x != nil { + return x.LdapFqdn + } + return "" +} + +// Windows-specific MVM details. +type WindowsDetails struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Disks configured on the Windows MVM. + Disks []*WindowsDisk `protobuf:"bytes,1,rep,name=disks,proto3" json:"disks,omitempty"` + // UUID of the Windows domain the MVM has joined. + DomainUuid string `protobuf:"bytes,2,opt,name=domain_uuid,json=domainUuid,proto3" json:"domain_uuid,omitempty"` + // Windows-specific FQDN, derived from the name at creation or generated by the backend. + DomainFqdn string `protobuf:"bytes,3,opt,name=domain_fqdn,json=domainFqdn,proto3" json:"domain_fqdn,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WindowsDetails) Reset() { + *x = WindowsDetails{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WindowsDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WindowsDetails) ProtoMessage() {} + +func (x *WindowsDetails) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WindowsDetails.ProtoReflect.Descriptor instead. +func (*WindowsDetails) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{1} +} + +func (x *WindowsDetails) GetDisks() []*WindowsDisk { + if x != nil { + return x.Disks + } + return nil +} + +func (x *WindowsDetails) GetDomainUuid() string { + if x != nil { + return x.DomainUuid + } + return "" +} + +func (x *WindowsDetails) GetDomainFqdn() string { + if x != nil { + return x.DomainFqdn + } + return "" +} + +// A network interface of a MVM. IPv4 only; IPv6 is not yet supported. +type NetworkInterface struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of this interface. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // IPv4 address assigned to this interface. + Ipaddress string `protobuf:"bytes,2,opt,name=ipaddress,proto3" json:"ipaddress,omitempty"` + // MAC address of this interface. + Macaddress string `protobuf:"bytes,3,opt,name=macaddress,proto3" json:"macaddress,omitempty"` // TODO: add validation + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NetworkInterface) Reset() { + *x = NetworkInterface{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NetworkInterface) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NetworkInterface) ProtoMessage() {} + +func (x *NetworkInterface) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NetworkInterface.ProtoReflect.Descriptor instead. +func (*NetworkInterface) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{2} +} + +func (x *NetworkInterface) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *NetworkInterface) GetIpaddress() string { + if x != nil { + return x.Ipaddress + } + return "" +} + +func (x *NetworkInterface) GetMacaddress() string { + if x != nil { + return x.Macaddress + } + return "" +} + +// A managed VM (MVM) instance as returned by the API. +type MVMInstance struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of this MVM. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Metadata for this MVM. + // TODO: dates are available in the nulink db but not passed through yet. + Meta *v1.Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` + // FQDN of the MVM, derived from the name at creation or generated by the backend. + Fqdn string `protobuf:"bytes,3,opt,name=fqdn,proto3" json:"fqdn,omitempty"` + // Tenant this MVM belongs to. + Tenant string `protobuf:"bytes,4,opt,name=tenant,proto3" json:"tenant,omitempty"` + // UUID of the project this MVM belongs to. + ProjectUuid string `protobuf:"bytes,5,opt,name=project_uuid,json=projectUuid,proto3" json:"project_uuid,omitempty"` + // UUID of the OS image installed on the MVM; resolve the title via the OS endpoint. + OsUuid string `protobuf:"bytes,6,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` + // UUID of the datacenter location. + LocationUuid string `protobuf:"bytes,7,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` + // TODO: Contact UUID – not yet implemented; open discussion with FCN (#23). + ContactUuid string `protobuf:"bytes,8,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` + // Number of CPU cores. + Cpu uint32 `protobuf:"varint,9,opt,name=cpu,proto3" json:"cpu,omitempty"` + // RAM in GB. + Ram uint32 `protobuf:"varint,10,opt,name=ram,proto3" json:"ram,omitempty"` + // Whether backup is enabled. + // TODO: the upstream (nulink) list/get models do not expose this; always false. + Backup bool `protobuf:"varint,11,opt,name=backup,proto3" json:"backup,omitempty"` + // Status of the ongoing operation. + // TODO: can we have an ENUM here? Active, Are deleted ones there? Are stopped ones accounted? + // Would have to be part of openapi spec, otherwise breaking changes couldn't be detected + Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` + // Additional information about the current status. + StatusInfo string `protobuf:"bytes,13,opt,name=status_info,json=statusInfo,proto3" json:"status_info,omitempty"` + // Availability level. + Availability Availability `protobuf:"varint,14,opt,name=availability,proto3,enum=fits.api.mvm.v1.Availability" json:"availability,omitempty"` + // Service class. + Serviceclass ServiceClass `protobuf:"varint,15,opt,name=serviceclass,proto3,enum=fits.api.mvm.v1.ServiceClass" json:"serviceclass,omitempty"` + // OS-specific configuration. + // + // Types that are valid to be assigned to Details: + // + // *MVMInstance_WindowsDetails + // *MVMInstance_LinuxDetails + Details isMVMInstance_Details `protobuf_oneof:"details"` + // Network interfaces attached to the MVM (IPv4 only). + Interfaces []*NetworkInterface `protobuf:"bytes,18,rep,name=interfaces,proto3" json:"interfaces,omitempty"` + // VLAN the MVM is attached to. + // TODO: not exposed by the upstream (nulink) MVM records yet; always unset. + Vlan *VLAN `protobuf:"bytes,19,opt,name=vlan,proto3" json:"vlan,omitempty"` + // Internal reference number provided by the user, e.g. a ticket ID. + OrderNumber string `protobuf:"bytes,20,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // True if the order was placed by FITS, false if self-service. + // TODO: maybe remove this field entirely. + Contract bool `protobuf:"varint,21,opt,name=contract,proto3" json:"contract,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMInstance) Reset() { + *x = MVMInstance{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMInstance) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMInstance) ProtoMessage() {} + +func (x *MVMInstance) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMInstance.ProtoReflect.Descriptor instead. +func (*MVMInstance) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{3} +} + +func (x *MVMInstance) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *MVMInstance) GetMeta() *v1.Meta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *MVMInstance) GetFqdn() string { + if x != nil { + return x.Fqdn + } + return "" +} + +func (x *MVMInstance) GetTenant() string { + if x != nil { + return x.Tenant + } + return "" +} + +func (x *MVMInstance) GetProjectUuid() string { + if x != nil { + return x.ProjectUuid + } + return "" +} + +func (x *MVMInstance) GetOsUuid() string { + if x != nil { + return x.OsUuid + } + return "" +} + +func (x *MVMInstance) GetLocationUuid() string { + if x != nil { + return x.LocationUuid + } + return "" +} + +func (x *MVMInstance) GetContactUuid() string { + if x != nil { + return x.ContactUuid + } + return "" +} + +func (x *MVMInstance) GetCpu() uint32 { + if x != nil { + return x.Cpu + } + return 0 +} + +func (x *MVMInstance) GetRam() uint32 { + if x != nil { + return x.Ram + } + return 0 +} + +func (x *MVMInstance) GetBackup() bool { + if x != nil { + return x.Backup + } + return false +} + +func (x *MVMInstance) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *MVMInstance) GetStatusInfo() string { + if x != nil { + return x.StatusInfo + } + return "" +} + +func (x *MVMInstance) GetAvailability() Availability { + if x != nil { + return x.Availability + } + return Availability_AVAILABILITY_UNSPECIFIED +} + +func (x *MVMInstance) GetServiceclass() ServiceClass { + if x != nil { + return x.Serviceclass + } + return ServiceClass_SERVICE_CLASS_UNSPECIFIED +} + +func (x *MVMInstance) GetDetails() isMVMInstance_Details { + if x != nil { + return x.Details + } + return nil +} + +func (x *MVMInstance) GetWindowsDetails() *WindowsDetails { + if x != nil { + if x, ok := x.Details.(*MVMInstance_WindowsDetails); ok { + return x.WindowsDetails + } + } + return nil +} + +func (x *MVMInstance) GetLinuxDetails() *LinuxDetails { + if x != nil { + if x, ok := x.Details.(*MVMInstance_LinuxDetails); ok { + return x.LinuxDetails + } + } + return nil +} + +func (x *MVMInstance) GetInterfaces() []*NetworkInterface { + if x != nil { + return x.Interfaces + } + return nil +} + +func (x *MVMInstance) GetVlan() *VLAN { + if x != nil { + return x.Vlan + } + return nil +} + +func (x *MVMInstance) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +func (x *MVMInstance) GetContract() bool { + if x != nil { + return x.Contract + } + return false +} + +type isMVMInstance_Details interface { + isMVMInstance_Details() +} + +type MVMInstance_WindowsDetails struct { + // Windows-specific settings (domain + disks). + WindowsDetails *WindowsDetails `protobuf:"bytes,16,opt,name=windows_details,json=windowsDetails,proto3,oneof"` +} + +type MVMInstance_LinuxDetails struct { + // Linux-specific settings (LDAP + disks). + LinuxDetails *LinuxDetails `protobuf:"bytes,17,opt,name=linux_details,json=linuxDetails,proto3,oneof"` +} + +func (*MVMInstance_WindowsDetails) isMVMInstance_Details() {} + +func (*MVMInstance_LinuxDetails) isMVMInstance_Details() {} + +// Request to get a MVM by UUID. +type MVMServiceGetRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the MVM. + Uuid *string `protobuf:"bytes,1,opt,name=uuid,proto3,oneof" json:"uuid,omitempty"` + // Tenant of the MVM. + Tenant string `protobuf:"bytes,2,opt,name=tenant,proto3" json:"tenant,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceGetRequest) Reset() { + *x = MVMServiceGetRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceGetRequest) ProtoMessage() {} + +func (x *MVMServiceGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceGetRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceGetRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{4} +} + +func (x *MVMServiceGetRequest) GetUuid() string { + if x != nil && x.Uuid != nil { + return *x.Uuid + } + return "" +} + +func (x *MVMServiceGetRequest) GetTenant() string { + if x != nil { + return x.Tenant + } + return "" +} + +// Response containing the requested MVM. +type MVMServiceGetResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The MVM. + Mvm *MVMInstance `protobuf:"bytes,1,opt,name=mvm,proto3" json:"mvm,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceGetResponse) Reset() { + *x = MVMServiceGetResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceGetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceGetResponse) ProtoMessage() {} + +func (x *MVMServiceGetResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceGetResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceGetResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{5} +} + +func (x *MVMServiceGetResponse) GetMvm() *MVMInstance { + if x != nil { + return x.Mvm + } + return nil +} + +// Windows-specific create request parts. +type MVMServiceCreateWindowsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the Windows domain the MVM should join. + DomainUuid string `protobuf:"bytes,1,opt,name=domain_uuid,json=domainUuid,proto3" json:"domain_uuid,omitempty"` + // Disks for the Windows MVM, excluding the OS disk; must contain exactly + // one system disk plus any number of data disks (see DiskType). + Disks []*WindowsDisk `protobuf:"bytes,2,rep,name=disks,proto3" json:"disks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceCreateWindowsRequest) Reset() { + *x = MVMServiceCreateWindowsRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceCreateWindowsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceCreateWindowsRequest) ProtoMessage() {} + +func (x *MVMServiceCreateWindowsRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceCreateWindowsRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceCreateWindowsRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{6} +} + +func (x *MVMServiceCreateWindowsRequest) GetDomainUuid() string { + if x != nil { + return x.DomainUuid + } + return "" +} + +func (x *MVMServiceCreateWindowsRequest) GetDisks() []*WindowsDisk { + if x != nil { + return x.Disks + } + return nil +} + +// Linux-specific create request parts. +type MVMServiceCreateLinuxRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the LDAP directory the MVM should integrate with. + LdapUuid string `protobuf:"bytes,1,opt,name=ldap_uuid,json=ldapUuid,proto3" json:"ldap_uuid,omitempty"` + // Disks for the Linux MVM, excluding the OS disk; must contain exactly + // one system disk plus any number of data disks (see DiskType). + Disks []*LinuxDisk `protobuf:"bytes,2,rep,name=disks,proto3" json:"disks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceCreateLinuxRequest) Reset() { + *x = MVMServiceCreateLinuxRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceCreateLinuxRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceCreateLinuxRequest) ProtoMessage() {} + +func (x *MVMServiceCreateLinuxRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceCreateLinuxRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceCreateLinuxRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{7} +} + +func (x *MVMServiceCreateLinuxRequest) GetLdapUuid() string { + if x != nil { + return x.LdapUuid + } + return "" +} + +func (x *MVMServiceCreateLinuxRequest) GetDisks() []*LinuxDisk { + if x != nil { + return x.Disks + } + return nil +} + +// Request to create a new MVM instance. +// TODO: contract, billable and billing_start_date. +type MVMServiceCreateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the project this MVM belongs to. + ProjectUuid string `protobuf:"bytes,1,opt,name=project_uuid,json=projectUuid,proto3" json:"project_uuid,omitempty"` + // Optional name; the FQDN is derived from it. + Name *string `protobuf:"bytes,2,opt,name=name,proto3,oneof" json:"name,omitempty"` + // UUID of the operating system image to install. + OsUuid string `protobuf:"bytes,3,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` + // UUID of the VLAN network to attach the MVM to. + VlanUuid string `protobuf:"bytes,4,opt,name=vlan_uuid,json=vlanUuid,proto3" json:"vlan_uuid,omitempty"` + // UUID of the datacenter location; the MVM is scheduled into one data center within it. + LocationUuid string `protobuf:"bytes,5,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` + // TODO: Contact UUID – open discussion with FCN; may become a dedicated /contact endpoint. + ContactUuid string `protobuf:"bytes,6,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` + // Number of CPU cores. + Cpu uint32 `protobuf:"varint,7,opt,name=cpu,proto3" json:"cpu,omitempty"` + // RAM in GB. Must be a power of 2. + Ram uint32 `protobuf:"varint,8,opt,name=ram,proto3" json:"ram,omitempty"` + // Internal reference number provided by the user, e.g. a ticket ID. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,9,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // Optional key-value labels for accounting purposes. + // (e.g. contract number, transaction number, technical key, accounting key). + Labels *v1.Labels `protobuf:"bytes,10,opt,name=labels,proto3" json:"labels,omitempty"` + // Whether backup is enabled. + Backup bool `protobuf:"varint,11,opt,name=backup,proto3" json:"backup,omitempty"` + // Availability level. + Availability Availability `protobuf:"varint,12,opt,name=availability,proto3,enum=fits.api.mvm.v1.Availability" json:"availability,omitempty"` + // Service class; only certain combinations with availability are valid. + Serviceclass ServiceClass `protobuf:"varint,13,opt,name=serviceclass,proto3,enum=fits.api.mvm.v1.ServiceClass" json:"serviceclass,omitempty"` + // OS type and its configuration. + // + // Types that are valid to be assigned to Mvmtype: + // + // *MVMServiceCreateRequest_Windows + // *MVMServiceCreateRequest_Linux + Mvmtype isMVMServiceCreateRequest_Mvmtype `protobuf_oneof:"mvmtype"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceCreateRequest) Reset() { + *x = MVMServiceCreateRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceCreateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceCreateRequest) ProtoMessage() {} + +func (x *MVMServiceCreateRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceCreateRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceCreateRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{8} +} + +func (x *MVMServiceCreateRequest) GetProjectUuid() string { + if x != nil { + return x.ProjectUuid + } + return "" +} + +func (x *MVMServiceCreateRequest) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *MVMServiceCreateRequest) GetOsUuid() string { + if x != nil { + return x.OsUuid + } + return "" +} + +func (x *MVMServiceCreateRequest) GetVlanUuid() string { + if x != nil { + return x.VlanUuid + } + return "" +} + +func (x *MVMServiceCreateRequest) GetLocationUuid() string { + if x != nil { + return x.LocationUuid + } + return "" +} + +func (x *MVMServiceCreateRequest) GetContactUuid() string { + if x != nil { + return x.ContactUuid + } + return "" +} + +func (x *MVMServiceCreateRequest) GetCpu() uint32 { + if x != nil { + return x.Cpu + } + return 0 +} + +func (x *MVMServiceCreateRequest) GetRam() uint32 { + if x != nil { + return x.Ram + } + return 0 +} + +func (x *MVMServiceCreateRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +func (x *MVMServiceCreateRequest) GetLabels() *v1.Labels { + if x != nil { + return x.Labels + } + return nil +} + +func (x *MVMServiceCreateRequest) GetBackup() bool { + if x != nil { + return x.Backup + } + return false +} + +func (x *MVMServiceCreateRequest) GetAvailability() Availability { + if x != nil { + return x.Availability + } + return Availability_AVAILABILITY_UNSPECIFIED +} + +func (x *MVMServiceCreateRequest) GetServiceclass() ServiceClass { + if x != nil { + return x.Serviceclass + } + return ServiceClass_SERVICE_CLASS_UNSPECIFIED +} + +func (x *MVMServiceCreateRequest) GetMvmtype() isMVMServiceCreateRequest_Mvmtype { + if x != nil { + return x.Mvmtype + } + return nil +} + +func (x *MVMServiceCreateRequest) GetWindows() *MVMServiceCreateWindowsRequest { + if x != nil { + if x, ok := x.Mvmtype.(*MVMServiceCreateRequest_Windows); ok { + return x.Windows + } + } + return nil +} + +func (x *MVMServiceCreateRequest) GetLinux() *MVMServiceCreateLinuxRequest { + if x != nil { + if x, ok := x.Mvmtype.(*MVMServiceCreateRequest_Linux); ok { + return x.Linux + } + } + return nil +} + +type isMVMServiceCreateRequest_Mvmtype interface { + isMVMServiceCreateRequest_Mvmtype() +} + +type MVMServiceCreateRequest_Windows struct { + // Windows-specific settings (domain + disk). + Windows *MVMServiceCreateWindowsRequest `protobuf:"bytes,14,opt,name=windows,proto3,oneof"` +} + +type MVMServiceCreateRequest_Linux struct { + // Linux-specific settings (LDAP + disk). + Linux *MVMServiceCreateLinuxRequest `protobuf:"bytes,15,opt,name=linux,proto3,oneof"` +} + +func (*MVMServiceCreateRequest_Windows) isMVMServiceCreateRequest_Mvmtype() {} + +func (*MVMServiceCreateRequest_Linux) isMVMServiceCreateRequest_Mvmtype() {} + +// Disk configuration for a Linux MVM. See DiskType for the kinds of disks +// (os, system, data) and their lifecycle rules. +type LinuxDisk struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the disk; set for existing disks, unset for new ones. + Uuid *string `protobuf:"bytes,1,opt,name=uuid,proto3,oneof" json:"uuid,omitempty"` + // Label (name) of the disk. + Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` + // Whether the disk grows automatically when space runs low. + AutoExtend bool `protobuf:"varint,3,opt,name=auto_extend,json=autoExtend,proto3" json:"auto_extend,omitempty"` + // Size of the disk in GB; defaults to 50 when unset. + Size *uint64 `protobuf:"varint,4,opt,name=size,proto3,oneof" json:"size,omitempty"` + // Mount point (e.g. "/data"). Fixed to "/appdata" for the system disk; + // free-form for data disks. + MountPoint *string `protobuf:"bytes,5,opt,name=mount_point,json=mountPoint,proto3,oneof" json:"mount_point,omitempty"` + // Kind of the disk; determines which operations are allowed on it. + // Provided by the client in create/add requests and populated by the + // API in responses. + // TODO: talk to FCE that we will provide the disk type in create/add + // requests. + DiskType *DiskType `protobuf:"varint,6,opt,name=disk_type,json=diskType,proto3,enum=fits.api.mvm.v1.DiskType,oneof" json:"disk_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LinuxDisk) Reset() { + *x = LinuxDisk{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LinuxDisk) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LinuxDisk) ProtoMessage() {} + +func (x *LinuxDisk) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LinuxDisk.ProtoReflect.Descriptor instead. +func (*LinuxDisk) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{9} +} + +func (x *LinuxDisk) GetUuid() string { + if x != nil && x.Uuid != nil { + return *x.Uuid + } + return "" +} + +func (x *LinuxDisk) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +func (x *LinuxDisk) GetAutoExtend() bool { + if x != nil { + return x.AutoExtend + } + return false +} + +func (x *LinuxDisk) GetSize() uint64 { + if x != nil && x.Size != nil { + return *x.Size + } + return 0 +} + +func (x *LinuxDisk) GetMountPoint() string { + if x != nil && x.MountPoint != nil { + return *x.MountPoint + } + return "" +} + +func (x *LinuxDisk) GetDiskType() DiskType { + if x != nil && x.DiskType != nil { + return *x.DiskType + } + return DiskType_DISK_TYPE_UNSPECIFIED +} + +// Disk configuration for a Windows MVM. See DiskType for the kinds of +// disks (os, system, data) and their lifecycle rules. +type WindowsDisk struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the disk; set for existing disks, unset for new ones. + Uuid *string `protobuf:"bytes,1,opt,name=uuid,proto3,oneof" json:"uuid,omitempty"` + // Label (name) of the disk. + Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` + // Whether the disk grows automatically when space runs low. + AutoExtend bool `protobuf:"varint,3,opt,name=auto_extend,json=autoExtend,proto3" json:"auto_extend,omitempty"` + // Size of the disk in GB; defaults to 50 when unset. + Size *uint64 `protobuf:"varint,4,opt,name=size,proto3,oneof" json:"size,omitempty"` + // Drive letter (e.g. "D"). Fixed to "F" for the system disk; free-form + // for data disks. + Driveletter *string `protobuf:"bytes,5,opt,name=driveletter,proto3,oneof" json:"driveletter,omitempty"` + // Kind of the disk; determines which operations are allowed on it. + // Provided by the client in create/add requests and populated by the + // API in responses. + // TODO: talk to FCE that we will provide the disk type in create/add + // requests. + DiskType *DiskType `protobuf:"varint,6,opt,name=disk_type,json=diskType,proto3,enum=fits.api.mvm.v1.DiskType,oneof" json:"disk_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WindowsDisk) Reset() { + *x = WindowsDisk{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WindowsDisk) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WindowsDisk) ProtoMessage() {} + +func (x *WindowsDisk) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WindowsDisk.ProtoReflect.Descriptor instead. +func (*WindowsDisk) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{10} +} + +func (x *WindowsDisk) GetUuid() string { + if x != nil && x.Uuid != nil { + return *x.Uuid + } + return "" +} + +func (x *WindowsDisk) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +func (x *WindowsDisk) GetAutoExtend() bool { + if x != nil { + return x.AutoExtend + } + return false +} + +func (x *WindowsDisk) GetSize() uint64 { + if x != nil && x.Size != nil { + return *x.Size + } + return 0 +} + +func (x *WindowsDisk) GetDriveletter() string { + if x != nil && x.Driveletter != nil { + return *x.Driveletter + } + return "" +} + +func (x *WindowsDisk) GetDiskType() DiskType { + if x != nil && x.DiskType != nil { + return *x.DiskType + } + return DiskType_DISK_TYPE_UNSPECIFIED +} + +// Response for Create; an empty response means the MVM was accepted. +type MVMServiceCreateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceCreateResponse) Reset() { + *x = MVMServiceCreateResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceCreateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceCreateResponse) ProtoMessage() {} + +func (x *MVMServiceCreateResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceCreateResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceCreateResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{11} +} + +// Request to change a mutable property of an existing MVM. +// Exactly one action must be set; each maps onto its own upstream endpoint. +// TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per +// action); combined changes would need +// server-side fan-out without rollback. +// TODO: clarify async semantics — this is a queued "request to update", not an +// +// immediate update (e.g. disk changes are applied overnight). Consider +// renaming to reflect that. +// +// TODO: differentiate between fire-and-forget and queued actions in the API. +// TODO: is it possible to expose the pending-change queue (list/cancel) to the caller? +// TODO: clarify who enqueues the request and whether a pending change blocks +// +// further edits (e.g. after AddDisk, until the change executes). +type MVMServiceUpdateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the MVM to update. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Project the MVM belongs to. + Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,3,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // Timestamp and strategy for this update. + UpdateMeta *v1.UpdateMeta `protobuf:"bytes,4,opt,name=update_meta,json=updateMeta,proto3" json:"update_meta,omitempty"` + // The change to apply. + // + // Types that are valid to be assigned to Action: + // + // *MVMServiceUpdateRequest_PerformanceClass + // *MVMServiceUpdateRequest_ServiceClass + // *MVMServiceUpdateRequest_Contact + Action isMVMServiceUpdateRequest_Action `protobuf_oneof:"action"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceUpdateRequest) Reset() { + *x = MVMServiceUpdateRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceUpdateRequest) ProtoMessage() {} + +func (x *MVMServiceUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceUpdateRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceUpdateRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{12} +} + +func (x *MVMServiceUpdateRequest) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *MVMServiceUpdateRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *MVMServiceUpdateRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +func (x *MVMServiceUpdateRequest) GetUpdateMeta() *v1.UpdateMeta { + if x != nil { + return x.UpdateMeta + } + return nil +} + +func (x *MVMServiceUpdateRequest) GetAction() isMVMServiceUpdateRequest_Action { + if x != nil { + return x.Action + } + return nil +} + +func (x *MVMServiceUpdateRequest) GetPerformanceClass() *PerformanceClassChange { + if x != nil { + if x, ok := x.Action.(*MVMServiceUpdateRequest_PerformanceClass); ok { + return x.PerformanceClass + } + } + return nil +} + +func (x *MVMServiceUpdateRequest) GetServiceClass() *ServiceClassChange { + if x != nil { + if x, ok := x.Action.(*MVMServiceUpdateRequest_ServiceClass); ok { + return x.ServiceClass + } + } + return nil +} + +func (x *MVMServiceUpdateRequest) GetContact() *ContactChange { + if x != nil { + if x, ok := x.Action.(*MVMServiceUpdateRequest_Contact); ok { + return x.Contact + } + } + return nil +} + +type isMVMServiceUpdateRequest_Action interface { + isMVMServiceUpdateRequest_Action() +} + +type MVMServiceUpdateRequest_PerformanceClass struct { + // Change the CPU/RAM performance class. + PerformanceClass *PerformanceClassChange `protobuf:"bytes,5,opt,name=performance_class,json=performanceClass,proto3,oneof"` +} + +type MVMServiceUpdateRequest_ServiceClass struct { + // Change the service class. + ServiceClass *ServiceClassChange `protobuf:"bytes,6,opt,name=service_class,json=serviceClass,proto3,oneof"` +} + +type MVMServiceUpdateRequest_Contact struct { + // Change the contact person. + Contact *ContactChange `protobuf:"bytes,7,opt,name=contact,proto3,oneof"` +} + +func (*MVMServiceUpdateRequest_PerformanceClass) isMVMServiceUpdateRequest_Action() {} + +func (*MVMServiceUpdateRequest_ServiceClass) isMVMServiceUpdateRequest_Action() {} + +func (*MVMServiceUpdateRequest_Contact) isMVMServiceUpdateRequest_Action() {} + +// PerformanceClassChange is the payload for changing a MVM's CPU and RAM. +type PerformanceClassChange struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Number of vCPUs (1-64). + Cpu uint32 `protobuf:"varint,1,opt,name=cpu,proto3" json:"cpu,omitempty"` + // RAM size in GB. + Ram uint32 `protobuf:"varint,2,opt,name=ram,proto3" json:"ram,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PerformanceClassChange) Reset() { + *x = PerformanceClassChange{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PerformanceClassChange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PerformanceClassChange) ProtoMessage() {} + +func (x *PerformanceClassChange) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PerformanceClassChange.ProtoReflect.Descriptor instead. +func (*PerformanceClassChange) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{13} +} + +func (x *PerformanceClassChange) GetCpu() uint32 { + if x != nil { + return x.Cpu + } + return 0 +} + +func (x *PerformanceClassChange) GetRam() uint32 { + if x != nil { + return x.Ram + } + return 0 +} + +// ServiceClassChange is the payload for changing a MVM's service class. +type ServiceClassChange struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Target service class. + Serviceclass ServiceClass `protobuf:"varint,1,opt,name=serviceclass,proto3,enum=fits.api.mvm.v1.ServiceClass" json:"serviceclass,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ServiceClassChange) Reset() { + *x = ServiceClassChange{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ServiceClassChange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceClassChange) ProtoMessage() {} + +func (x *ServiceClassChange) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServiceClassChange.ProtoReflect.Descriptor instead. +func (*ServiceClassChange) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{14} +} + +func (x *ServiceClassChange) GetServiceclass() ServiceClass { + if x != nil { + return x.Serviceclass + } + return ServiceClass_SERVICE_CLASS_UNSPECIFIED +} + +// ContactChange is the payload for changing a MVM's contact person. +type ContactChange struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the new contact. + ContactUuid string `protobuf:"bytes,1,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContactChange) Reset() { + *x = ContactChange{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContactChange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContactChange) ProtoMessage() {} + +func (x *ContactChange) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContactChange.ProtoReflect.Descriptor instead. +func (*ContactChange) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{15} +} + +func (x *ContactChange) GetContactUuid() string { + if x != nil { + return x.ContactUuid + } + return "" +} + +// Response for Update; an empty response means the change was accepted. +type MVMServiceUpdateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceUpdateResponse) Reset() { + *x = MVMServiceUpdateResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceUpdateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceUpdateResponse) ProtoMessage() {} + +func (x *MVMServiceUpdateResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceUpdateResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceUpdateResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{16} +} + +// Request to list MVMs. +type MVMServiceListRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Tenant of the MVMs. + Tenant *string `protobuf:"bytes,1,opt,name=tenant,proto3,oneof" json:"tenant,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceListRequest) Reset() { + *x = MVMServiceListRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceListRequest) ProtoMessage() {} + +func (x *MVMServiceListRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceListRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceListRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{17} +} + +func (x *MVMServiceListRequest) GetTenant() string { + if x != nil && x.Tenant != nil { + return *x.Tenant + } + return "" +} + +// Response containing the list of MVMs. +type MVMServiceListResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The MVM instances. + Mvms []*MVMInstance `protobuf:"bytes,1,rep,name=mvms,proto3" json:"mvms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceListResponse) Reset() { + *x = MVMServiceListResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceListResponse) ProtoMessage() {} + +func (x *MVMServiceListResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceListResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceListResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{18} +} + +func (x *MVMServiceListResponse) GetMvms() []*MVMInstance { + if x != nil { + return x.Mvms + } + return nil +} + +// Request to cancel a MVM instance. +type MVMServiceDeleteRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Project the MVM belongs to. + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + // UUID of the MVM to delete. + Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,3,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceDeleteRequest) Reset() { + *x = MVMServiceDeleteRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceDeleteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceDeleteRequest) ProtoMessage() {} + +func (x *MVMServiceDeleteRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceDeleteRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceDeleteRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{19} +} + +func (x *MVMServiceDeleteRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *MVMServiceDeleteRequest) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *MVMServiceDeleteRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +// Response for Delete; an empty response means the cancellation was accepted. +type MVMServiceDeleteResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceDeleteResponse) Reset() { + *x = MVMServiceDeleteResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceDeleteResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceDeleteResponse) ProtoMessage() {} + +func (x *MVMServiceDeleteResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceDeleteResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceDeleteResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{20} +} + +// Request to validate a MVM create without creating anything. +type MVMServiceValidateCreateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The create request to validate. + Create *MVMServiceCreateRequest `protobuf:"bytes,1,opt,name=create,proto3" json:"create,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceValidateCreateRequest) Reset() { + *x = MVMServiceValidateCreateRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceValidateCreateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceValidateCreateRequest) ProtoMessage() {} + +func (x *MVMServiceValidateCreateRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceValidateCreateRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceValidateCreateRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{21} +} + +func (x *MVMServiceValidateCreateRequest) GetCreate() *MVMServiceCreateRequest { + if x != nil { + return x.Create + } + return nil +} + +// Response for ValidateCreate; violations are returned as an InvalidArgument error. +type MVMServiceValidateCreateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceValidateCreateResponse) Reset() { + *x = MVMServiceValidateCreateResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceValidateCreateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceValidateCreateResponse) ProtoMessage() {} + +func (x *MVMServiceValidateCreateResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceValidateCreateResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceValidateCreateResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{22} +} + +// Request to validate an AddDisk without ordering anything. +type MVMServiceValidateAddDiskRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The add disk request to validate. + AddDisk *MVMServiceAddDiskRequest `protobuf:"bytes,1,opt,name=add_disk,json=addDisk,proto3" json:"add_disk,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceValidateAddDiskRequest) Reset() { + *x = MVMServiceValidateAddDiskRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceValidateAddDiskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceValidateAddDiskRequest) ProtoMessage() {} + +func (x *MVMServiceValidateAddDiskRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceValidateAddDiskRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceValidateAddDiskRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{23} +} + +func (x *MVMServiceValidateAddDiskRequest) GetAddDisk() *MVMServiceAddDiskRequest { + if x != nil { + return x.AddDisk + } + return nil +} + +// Response for ValidateAddDisk; violations are returned as an InvalidArgument error. +type MVMServiceValidateAddDiskResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceValidateAddDiskResponse) Reset() { + *x = MVMServiceValidateAddDiskResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceValidateAddDiskResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceValidateAddDiskResponse) ProtoMessage() {} + +func (x *MVMServiceValidateAddDiskResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[24] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceValidateAddDiskResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceValidateAddDiskResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{24} +} + +// Request to validate an UpdateDisk without changing anything. +type MVMServiceValidateUpdateDiskRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The update disk request to validate. + UpdateDisk *MVMServiceUpdateDiskRequest `protobuf:"bytes,1,opt,name=update_disk,json=updateDisk,proto3" json:"update_disk,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceValidateUpdateDiskRequest) Reset() { + *x = MVMServiceValidateUpdateDiskRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceValidateUpdateDiskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceValidateUpdateDiskRequest) ProtoMessage() {} + +func (x *MVMServiceValidateUpdateDiskRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[25] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceValidateUpdateDiskRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceValidateUpdateDiskRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{25} +} + +func (x *MVMServiceValidateUpdateDiskRequest) GetUpdateDisk() *MVMServiceUpdateDiskRequest { + if x != nil { + return x.UpdateDisk + } + return nil +} + +// Response for ValidateUpdateDisk; violations are returned as an InvalidArgument error. +type MVMServiceValidateUpdateDiskResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceValidateUpdateDiskResponse) Reset() { + *x = MVMServiceValidateUpdateDiskResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceValidateUpdateDiskResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceValidateUpdateDiskResponse) ProtoMessage() {} + +func (x *MVMServiceValidateUpdateDiskResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[26] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceValidateUpdateDiskResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceValidateUpdateDiskResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{26} +} + +// Response for AddDisk. +type MVMServiceAddDiskResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceAddDiskResponse) Reset() { + *x = MVMServiceAddDiskResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceAddDiskResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceAddDiskResponse) ProtoMessage() {} + +func (x *MVMServiceAddDiskResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[27] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceAddDiskResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceAddDiskResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{27} +} + +// Response for UpdateDisk. +type MVMServiceUpdateDiskResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceUpdateDiskResponse) Reset() { + *x = MVMServiceUpdateDiskResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceUpdateDiskResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceUpdateDiskResponse) ProtoMessage() {} + +func (x *MVMServiceUpdateDiskResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[28] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceUpdateDiskResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceUpdateDiskResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{28} +} + +// Response for DeleteDisk. +type MVMServiceDeleteDiskResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceDeleteDiskResponse) Reset() { + *x = MVMServiceDeleteDiskResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceDeleteDiskResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceDeleteDiskResponse) ProtoMessage() {} + +func (x *MVMServiceDeleteDiskResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[29] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceDeleteDiskResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceDeleteDiskResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{29} +} + +// Request to order an additional data disk for a MVM. +type MVMServiceAddDiskRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the MVM to attach the disk to. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Project the MVM belongs to. + Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,3,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // OS-specific disk specification; must match the MVM's OS type. + // + // Types that are valid to be assigned to Disk: + // + // *MVMServiceAddDiskRequest_Linux + // *MVMServiceAddDiskRequest_Windows + Disk isMVMServiceAddDiskRequest_Disk `protobuf_oneof:"disk"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceAddDiskRequest) Reset() { + *x = MVMServiceAddDiskRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceAddDiskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceAddDiskRequest) ProtoMessage() {} + +func (x *MVMServiceAddDiskRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[30] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceAddDiskRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceAddDiskRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{30} +} + +func (x *MVMServiceAddDiskRequest) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *MVMServiceAddDiskRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *MVMServiceAddDiskRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +func (x *MVMServiceAddDiskRequest) GetDisk() isMVMServiceAddDiskRequest_Disk { + if x != nil { + return x.Disk + } + return nil +} + +func (x *MVMServiceAddDiskRequest) GetLinux() *LinuxDisk { + if x != nil { + if x, ok := x.Disk.(*MVMServiceAddDiskRequest_Linux); ok { + return x.Linux + } + } + return nil +} + +func (x *MVMServiceAddDiskRequest) GetWindows() *WindowsDisk { + if x != nil { + if x, ok := x.Disk.(*MVMServiceAddDiskRequest_Windows); ok { + return x.Windows + } + } + return nil +} + +type isMVMServiceAddDiskRequest_Disk interface { + isMVMServiceAddDiskRequest_Disk() +} + +type MVMServiceAddDiskRequest_Linux struct { + // Linux data disk. + Linux *LinuxDisk `protobuf:"bytes,4,opt,name=linux,proto3,oneof"` +} + +type MVMServiceAddDiskRequest_Windows struct { + // Windows data disk. + Windows *WindowsDisk `protobuf:"bytes,5,opt,name=windows,proto3,oneof"` +} + +func (*MVMServiceAddDiskRequest_Linux) isMVMServiceAddDiskRequest_Disk() {} + +func (*MVMServiceAddDiskRequest_Windows) isMVMServiceAddDiskRequest_Disk() {} + +// Request to change an existing disk; only size and auto-extend are +// mutable (see DiskType for applicability per disk kind). +type MVMServiceUpdateDiskRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the MVM the disk belongs to. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // UUID of the disk to change. + DiskUuid string `protobuf:"bytes,2,opt,name=disk_uuid,json=diskUuid,proto3" json:"disk_uuid,omitempty"` + // Project the MVM belongs to. + Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,4,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // New auto-extend behavior; unset keeps the current value. + AutoExtend *bool `protobuf:"varint,5,opt,name=auto_extend,json=autoExtend,proto3,oneof" json:"auto_extend,omitempty"` + // New size of the disk in GB; unset keeps the current value. + Size *uint64 `protobuf:"varint,6,opt,name=size,proto3,oneof" json:"size,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceUpdateDiskRequest) Reset() { + *x = MVMServiceUpdateDiskRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceUpdateDiskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceUpdateDiskRequest) ProtoMessage() {} + +func (x *MVMServiceUpdateDiskRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[31] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceUpdateDiskRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceUpdateDiskRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{31} +} + +func (x *MVMServiceUpdateDiskRequest) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *MVMServiceUpdateDiskRequest) GetDiskUuid() string { + if x != nil { + return x.DiskUuid + } + return "" +} + +func (x *MVMServiceUpdateDiskRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *MVMServiceUpdateDiskRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +func (x *MVMServiceUpdateDiskRequest) GetAutoExtend() bool { + if x != nil && x.AutoExtend != nil { + return *x.AutoExtend + } + return false +} + +func (x *MVMServiceUpdateDiskRequest) GetSize() uint64 { + if x != nil && x.Size != nil { + return *x.Size + } + return 0 +} + +// Request to cancel a data disk; OS and system disks are rejected by the +// upstream. +type MVMServiceDeleteDiskRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the MVM the disk belongs to. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // UUID of the disk to cancel. + DiskUuid string `protobuf:"bytes,2,opt,name=disk_uuid,json=diskUuid,proto3" json:"disk_uuid,omitempty"` + // Project the MVM belongs to. + Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,4,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceDeleteDiskRequest) Reset() { + *x = MVMServiceDeleteDiskRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceDeleteDiskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceDeleteDiskRequest) ProtoMessage() {} + +func (x *MVMServiceDeleteDiskRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[32] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceDeleteDiskRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceDeleteDiskRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{32} +} + +func (x *MVMServiceDeleteDiskRequest) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *MVMServiceDeleteDiskRequest) GetDiskUuid() string { + if x != nil { + return x.DiskUuid + } + return "" +} + +func (x *MVMServiceDeleteDiskRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *MVMServiceDeleteDiskRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +// Response for AddNetworkInterface. +type MVMServiceAddNetworkInterfaceResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceAddNetworkInterfaceResponse) Reset() { + *x = MVMServiceAddNetworkInterfaceResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceAddNetworkInterfaceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceAddNetworkInterfaceResponse) ProtoMessage() {} + +func (x *MVMServiceAddNetworkInterfaceResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[33] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceAddNetworkInterfaceResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceAddNetworkInterfaceResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{33} +} + +// Response for MoveNetworkInterface. +type MVMServiceMoveNetworkInterfaceResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceMoveNetworkInterfaceResponse) Reset() { + *x = MVMServiceMoveNetworkInterfaceResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceMoveNetworkInterfaceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceMoveNetworkInterfaceResponse) ProtoMessage() {} + +func (x *MVMServiceMoveNetworkInterfaceResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[34] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceMoveNetworkInterfaceResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceMoveNetworkInterfaceResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{34} +} + +// Response for DeleteNetworkInterface. +type MVMServiceDeleteNetworkInterfaceResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceDeleteNetworkInterfaceResponse) Reset() { + *x = MVMServiceDeleteNetworkInterfaceResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceDeleteNetworkInterfaceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceDeleteNetworkInterfaceResponse) ProtoMessage() {} + +func (x *MVMServiceDeleteNetworkInterfaceResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[35] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceDeleteNetworkInterfaceResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceDeleteNetworkInterfaceResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{35} +} + +// Request to order an additional network interface for a MVM. +// Nulink treats interface and IP as a 1:1 relation; move and delete +// operate on the interface_uuid. +type MVMServiceAddNetworkInterfaceRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the MVM to attach the interface to. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Project the MVM belongs to. + Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,3,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceAddNetworkInterfaceRequest) Reset() { + *x = MVMServiceAddNetworkInterfaceRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceAddNetworkInterfaceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceAddNetworkInterfaceRequest) ProtoMessage() {} + +func (x *MVMServiceAddNetworkInterfaceRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[36] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceAddNetworkInterfaceRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceAddNetworkInterfaceRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{36} +} + +func (x *MVMServiceAddNetworkInterfaceRequest) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *MVMServiceAddNetworkInterfaceRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *MVMServiceAddNetworkInterfaceRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +// Request to move a network interface from one MVM to another. +type MVMServiceMoveNetworkInterfaceRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the MVM the interface currently belongs to. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // UUID of the network interface holding the IP. + InterfaceUuid string `protobuf:"bytes,2,opt,name=interface_uuid,json=interfaceUuid,proto3" json:"interface_uuid,omitempty"` + // Project the MVM belongs to. + Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,4,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // UUID of the MVM to move the interface to. + TargetMvmUuid string `protobuf:"bytes,5,opt,name=target_mvm_uuid,json=targetMvmUuid,proto3" json:"target_mvm_uuid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceMoveNetworkInterfaceRequest) Reset() { + *x = MVMServiceMoveNetworkInterfaceRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceMoveNetworkInterfaceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceMoveNetworkInterfaceRequest) ProtoMessage() {} + +func (x *MVMServiceMoveNetworkInterfaceRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[37] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceMoveNetworkInterfaceRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceMoveNetworkInterfaceRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{37} +} + +func (x *MVMServiceMoveNetworkInterfaceRequest) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *MVMServiceMoveNetworkInterfaceRequest) GetInterfaceUuid() string { + if x != nil { + return x.InterfaceUuid + } + return "" +} + +func (x *MVMServiceMoveNetworkInterfaceRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *MVMServiceMoveNetworkInterfaceRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +func (x *MVMServiceMoveNetworkInterfaceRequest) GetTargetMvmUuid() string { + if x != nil { + return x.TargetMvmUuid + } + return "" +} + +// Request to delete a network interface from a MVM. +type MVMServiceDeleteNetworkInterfaceRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the MVM the interface belongs to. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // UUID of the network interface holding the IP. + InterfaceUuid string `protobuf:"bytes,2,opt,name=interface_uuid,json=interfaceUuid,proto3" json:"interface_uuid,omitempty"` + // Project the MVM belongs to. + Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,4,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceDeleteNetworkInterfaceRequest) Reset() { + *x = MVMServiceDeleteNetworkInterfaceRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceDeleteNetworkInterfaceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceDeleteNetworkInterfaceRequest) ProtoMessage() {} + +func (x *MVMServiceDeleteNetworkInterfaceRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[38] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceDeleteNetworkInterfaceRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceDeleteNetworkInterfaceRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{38} +} + +func (x *MVMServiceDeleteNetworkInterfaceRequest) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *MVMServiceDeleteNetworkInterfaceRequest) GetInterfaceUuid() string { + if x != nil { + return x.InterfaceUuid + } + return "" +} + +func (x *MVMServiceDeleteNetworkInterfaceRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *MVMServiceDeleteNetworkInterfaceRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +// Request to validate an AddNetworkInterface without ordering anything. +type MVMServiceValidateAddNetworkInterfaceRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The add network interface request to validate. + AddNetworkInterface *MVMServiceAddNetworkInterfaceRequest `protobuf:"bytes,1,opt,name=add_network_interface,json=addNetworkInterface,proto3" json:"add_network_interface,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceValidateAddNetworkInterfaceRequest) Reset() { + *x = MVMServiceValidateAddNetworkInterfaceRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceValidateAddNetworkInterfaceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceValidateAddNetworkInterfaceRequest) ProtoMessage() {} + +func (x *MVMServiceValidateAddNetworkInterfaceRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[39] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceValidateAddNetworkInterfaceRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceValidateAddNetworkInterfaceRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{39} +} + +func (x *MVMServiceValidateAddNetworkInterfaceRequest) GetAddNetworkInterface() *MVMServiceAddNetworkInterfaceRequest { + if x != nil { + return x.AddNetworkInterface + } + return nil +} + +// Response for ValidateAddNetworkInterface; violations are returned as an InvalidArgument error. +type MVMServiceValidateAddNetworkInterfaceResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceValidateAddNetworkInterfaceResponse) Reset() { + *x = MVMServiceValidateAddNetworkInterfaceResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceValidateAddNetworkInterfaceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceValidateAddNetworkInterfaceResponse) ProtoMessage() {} + +func (x *MVMServiceValidateAddNetworkInterfaceResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[40] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceValidateAddNetworkInterfaceResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceValidateAddNetworkInterfaceResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{40} +} + +var File_fits_api_mvm_v1_mvm_proto protoreflect.FileDescriptor + +const file_fits_api_mvm_v1_mvm_proto_rawDesc = "" + + "\n" + + "\x19fits/api/mvm/v1/mvm.proto\x12\x0ffits.api.mvm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x1afits/api/mvm/v1/vlan.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x91\x01\n" + + "\fLinuxDetails\x120\n" + + "\x05disks\x18\x01 \x03(\v2\x1a.fits.api.mvm.v1.LinuxDiskR\x05disks\x12%\n" + + "\tldap_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bldapUuid\x12(\n" + + "\tldap_fqdn\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\bldapFqdn\"\x9d\x01\n" + + "\x0eWindowsDetails\x122\n" + + "\x05disks\x18\x01 \x03(\v2\x1c.fits.api.mvm.v1.WindowsDiskR\x05disks\x12)\n" + + "\vdomain_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\n" + + "domainUuid\x12,\n" + + "\vdomain_fqdn\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\n" + + "domainFqdn\"{\n" + + "\x10NetworkInterface\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n" + + "\tipaddress\x18\x02 \x01(\tB\v\xbaH\br\x06賮\xb1\x02\x01R\tipaddress\x12\x1e\n" + + "\n" + + "macaddress\x18\x03 \x01(\tR\n" + + "macaddress\"\xa4\a\n" + + "\vMVMInstance\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n" + + "\x04meta\x18\x02 \x01(\v2\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n" + + "\x04fqdn\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04fqdn\x12#\n" + + "\x06tenant\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n" + + "\fproject_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vprojectUuid\x12!\n" + + "\aos_uuid\x18\x06 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n" + + "\rlocation_uuid\x18\a \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\flocationUuid\x12+\n" + + "\fcontact_uuid\x18\b \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\x12\x10\n" + + "\x03cpu\x18\t \x01(\rR\x03cpu\x12\x10\n" + + "\x03ram\x18\n" + + " \x01(\rR\x03ram\x12\x16\n" + + "\x06backup\x18\v \x01(\bR\x06backup\x12\x16\n" + + "\x06status\x18\f \x01(\tR\x06status\x12\x1f\n" + + "\vstatus_info\x18\r \x01(\tR\n" + + "statusInfo\x12K\n" + + "\favailability\x18\x0e \x01(\x0e2\x1d.fits.api.mvm.v1.AvailabilityB\b\xbaH\x05\x82\x01\x02\x10\x01R\favailability\x12K\n" + + "\fserviceclass\x18\x0f \x01(\x0e2\x1d.fits.api.mvm.v1.ServiceClassB\b\xbaH\x05\x82\x01\x02\x10\x01R\fserviceclass\x12J\n" + + "\x0fwindows_details\x18\x10 \x01(\v2\x1f.fits.api.mvm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12D\n" + + "\rlinux_details\x18\x11 \x01(\v2\x1d.fits.api.mvm.v1.LinuxDetailsH\x00R\flinuxDetails\x12A\n" + + "\n" + + "interfaces\x18\x12 \x03(\v2!.fits.api.mvm.v1.NetworkInterfaceR\n" + + "interfaces\x12)\n" + + "\x04vlan\x18\x13 \x01(\v2\x15.fits.api.mvm.v1.VLANR\x04vlan\x12!\n" + + "\forder_number\x18\x14 \x01(\tR\vorderNumber\x12\x1a\n" + + "\bcontract\x18\x15 \x01(\bR\bcontractB\x10\n" + + "\adetails\x12\x05\xbaH\x02\b\x01\"g\n" + + "\x14MVMServiceGetRequest\x12!\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12#\n" + + "\x06tenant\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\a\n" + + "\x05_uuid\"G\n" + + "\x15MVMServiceGetResponse\x12.\n" + + "\x03mvm\x18\x01 \x01(\v2\x1c.fits.api.mvm.v1.MVMInstanceR\x03mvm\"\x89\x01\n" + + "\x1eMVMServiceCreateWindowsRequest\x12)\n" + + "\vdomain_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\n" + + "domainUuid\x12<\n" + + "\x05disks\x18\x02 \x03(\v2\x1c.fits.api.mvm.v1.WindowsDiskB\b\xbaH\x05\x92\x01\x02\b\x01R\x05disks\"\x81\x01\n" + + "\x1cMVMServiceCreateLinuxRequest\x12%\n" + + "\tldap_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bldapUuid\x12:\n" + + "\x05disks\x18\x02 \x03(\v2\x1a.fits.api.mvm.v1.LinuxDiskB\b\xbaH\x05\x92\x01\x02\b\x01R\x05disks\"\xe7\x05\n" + + "\x17MVMServiceCreateRequest\x12+\n" + + "\fproject_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vprojectUuid\x12$\n" + + "\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n" + + "\aos_uuid\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n" + + "\tvlan_uuid\x18\x04 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bvlanUuid\x12-\n" + + "\rlocation_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\flocationUuid\x12+\n" + + "\fcontact_uuid\x18\x06 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\x12\x10\n" + + "\x03cpu\x18\a \x01(\rR\x03cpu\x12\x10\n" + + "\x03ram\x18\b \x01(\rR\x03ram\x12!\n" + + "\forder_number\x18\t \x01(\tR\vorderNumber\x12+\n" + + "\x06labels\x18\n" + + " \x01(\v2\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n" + + "\x06backup\x18\v \x01(\bR\x06backup\x12K\n" + + "\favailability\x18\f \x01(\x0e2\x1d.fits.api.mvm.v1.AvailabilityB\b\xbaH\x05\x82\x01\x02\x10\x01R\favailability\x12K\n" + + "\fserviceclass\x18\r \x01(\x0e2\x1d.fits.api.mvm.v1.ServiceClassB\b\xbaH\x05\x82\x01\x02\x10\x01R\fserviceclass\x12K\n" + + "\awindows\x18\x0e \x01(\v2/.fits.api.mvm.v1.MVMServiceCreateWindowsRequestH\x00R\awindows\x12E\n" + + "\x05linux\x18\x0f \x01(\v2-.fits.api.mvm.v1.MVMServiceCreateLinuxRequestH\x00R\x05linuxB\x10\n" + + "\amvmtype\x12\x05\xbaH\x02\b\x01B\a\n" + + "\x05_name\"\x9b\x02\n" + + "\tLinuxDisk\x12!\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n" + + "\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n" + + "\vauto_extend\x18\x03 \x01(\bR\n" + + "autoExtend\x12\x17\n" + + "\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12$\n" + + "\vmount_point\x18\x05 \x01(\tH\x02R\n" + + "mountPoint\x88\x01\x01\x12E\n" + + "\tdisk_type\x18\x06 \x01(\x0e2\x19.fits.api.mvm.v1.DiskTypeB\b\xbaH\x05\x82\x01\x02\x10\x01H\x03R\bdiskType\x88\x01\x01B\a\n" + + "\x05_uuidB\a\n" + + "\x05_sizeB\x0e\n" + + "\f_mount_pointB\f\n" + + "\n" + + "_disk_type\"\x9e\x02\n" + + "\vWindowsDisk\x12!\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n" + + "\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n" + + "\vauto_extend\x18\x03 \x01(\bR\n" + + "autoExtend\x12\x17\n" + + "\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12%\n" + + "\vdriveletter\x18\x05 \x01(\tH\x02R\vdriveletter\x88\x01\x01\x12E\n" + + "\tdisk_type\x18\x06 \x01(\x0e2\x19.fits.api.mvm.v1.DiskTypeB\b\xbaH\x05\x82\x01\x02\x10\x01H\x03R\bdiskType\x88\x01\x01B\a\n" + + "\x05_uuidB\a\n" + + "\x05_sizeB\x0e\n" + + "\f_driveletterB\f\n" + + "\n" + + "_disk_type\"\x1a\n" + + "\x18MVMServiceCreateResponse\"\xb1\x03\n" + + "\x17MVMServiceUpdateRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + + "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + + "\forder_number\x18\x03 \x01(\tR\vorderNumber\x12@\n" + + "\vupdate_meta\x18\x04 \x01(\v2\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\n" + + "updateMeta\x12V\n" + + "\x11performance_class\x18\x05 \x01(\v2'.fits.api.mvm.v1.PerformanceClassChangeH\x00R\x10performanceClass\x12J\n" + + "\rservice_class\x18\x06 \x01(\v2#.fits.api.mvm.v1.ServiceClassChangeH\x00R\fserviceClass\x12:\n" + + "\acontact\x18\a \x01(\v2\x1e.fits.api.mvm.v1.ContactChangeH\x00R\acontactB\x0f\n" + + "\x06action\x12\x05\xbaH\x02\b\x01\"P\n" + + "\x16PerformanceClassChange\x12\x1b\n" + + "\x03cpu\x18\x01 \x01(\rB\t\xbaH\x06*\x04\x18@(\x01R\x03cpu\x12\x19\n" + + "\x03ram\x18\x02 \x01(\rB\a\xbaH\x04*\x02 \x00R\x03ram\"a\n" + + "\x12ServiceClassChange\x12K\n" + + "\fserviceclass\x18\x01 \x01(\x0e2\x1d.fits.api.mvm.v1.ServiceClassB\b\xbaH\x05\x82\x01\x02\x10\x01R\fserviceclass\"<\n" + + "\rContactChange\x12+\n" + + "\fcontact_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\"\x1a\n" + + "\x18MVMServiceUpdateResponse\"L\n" + + "\x15MVMServiceListRequest\x12(\n" + + "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01B\t\n" + + "\a_tenant\"J\n" + + "\x16MVMServiceListResponse\x120\n" + + "\x04mvms\x18\x01 \x03(\v2\x1c.fits.api.mvm.v1.MVMInstanceR\x04mvms\"~\n" + + "\x17MVMServiceDeleteRequest\x12\"\n" + + "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12\x1c\n" + + "\x04uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n" + + "\forder_number\x18\x03 \x01(\tR\vorderNumber\"\x1a\n" + + "\x18MVMServiceDeleteResponse\"k\n" + + "\x1fMVMServiceValidateCreateRequest\x12H\n" + + "\x06create\x18\x01 \x01(\v2(.fits.api.mvm.v1.MVMServiceCreateRequestB\x06\xbaH\x03\xc8\x01\x01R\x06create\"\"\n" + + " MVMServiceValidateCreateResponse\"p\n" + + " MVMServiceValidateAddDiskRequest\x12L\n" + + "\badd_disk\x18\x01 \x01(\v2).fits.api.mvm.v1.MVMServiceAddDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\aaddDisk\"#\n" + + "!MVMServiceValidateAddDiskResponse\"|\n" + + "#MVMServiceValidateUpdateDiskRequest\x12U\n" + + "\vupdate_disk\x18\x01 \x01(\v2,.fits.api.mvm.v1.MVMServiceUpdateDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\n" + + "updateDisk\"&\n" + + "$MVMServiceValidateUpdateDiskResponse\"\x1b\n" + + "\x19MVMServiceAddDiskResponse\"\x1e\n" + + "\x1cMVMServiceUpdateDiskResponse\"\x1e\n" + + "\x1cMVMServiceDeleteDiskResponse\"\xfc\x01\n" + + "\x18MVMServiceAddDiskRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + + "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + + "\forder_number\x18\x03 \x01(\tR\vorderNumber\x122\n" + + "\x05linux\x18\x04 \x01(\v2\x1a.fits.api.mvm.v1.LinuxDiskH\x00R\x05linux\x128\n" + + "\awindows\x18\x05 \x01(\v2\x1c.fits.api.mvm.v1.WindowsDiskH\x00R\awindowsB\r\n" + + "\x04disk\x12\x05\xbaH\x02\b\x01\"\x81\x02\n" + + "\x1bMVMServiceUpdateDiskRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n" + + "\tdisk_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bdiskUuid\x12\"\n" + + "\aproject\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + + "\forder_number\x18\x04 \x01(\tR\vorderNumber\x12$\n" + + "\vauto_extend\x18\x05 \x01(\bH\x00R\n" + + "autoExtend\x88\x01\x01\x12\x17\n" + + "\x04size\x18\x06 \x01(\x04H\x01R\x04size\x88\x01\x01B\x0e\n" + + "\f_auto_extendB\a\n" + + "\x05_size\"\xa9\x01\n" + + "\x1bMVMServiceDeleteDiskRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n" + + "\tdisk_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bdiskUuid\x12\"\n" + + "\aproject\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + + "\forder_number\x18\x04 \x01(\tR\vorderNumber\"'\n" + + "%MVMServiceAddNetworkInterfaceResponse\"(\n" + + "&MVMServiceMoveNetworkInterfaceResponse\"*\n" + + "(MVMServiceDeleteNetworkInterfaceResponse\"\x8b\x01\n" + + "$MVMServiceAddNetworkInterfaceRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + + "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + + "\forder_number\x18\x03 \x01(\tR\vorderNumber\"\xef\x01\n" + + "%MVMServiceMoveNetworkInterfaceRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n" + + "\x0einterface_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n" + + "\aproject\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + + "\forder_number\x18\x04 \x01(\tR\vorderNumber\x120\n" + + "\x0ftarget_mvm_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\rtargetMvmUuid\"\xbf\x01\n" + + "'MVMServiceDeleteNetworkInterfaceRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n" + + "\x0einterface_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n" + + "\aproject\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + + "\forder_number\x18\x04 \x01(\tR\vorderNumber\"\xa1\x01\n" + + ",MVMServiceValidateAddNetworkInterfaceRequest\x12q\n" + + "\x15add_network_interface\x18\x01 \x01(\v25.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequestB\x06\xbaH\x03\xc8\x01\x01R\x13addNetworkInterface\"/\n" + + "-MVMServiceValidateAddNetworkInterfaceResponse*\xa6\x01\n" + + "\fAvailability\x12\"\n" + + "\x18AVAILABILITY_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1b\n" + + "\x0fAVAILABILITY_V0\x10\x01\x1a\x06\x82\xb2\x19\x02V0\x12\x1b\n" + + "\x0fAVAILABILITY_V1\x10\x02\x1a\x06\x82\xb2\x19\x02V1\x12\x1b\n" + + "\x0fAVAILABILITY_V2\x10\x03\x1a\x06\x82\xb2\x19\x02V2\x12\x1b\n" + + "\x0fAVAILABILITY_V3\x10\x04\x1a\x06\x82\xb2\x19\x02V3*\x93\x01\n" + + "\fServiceClass\x12#\n" + + "\x19SERVICE_CLASS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1e\n" + + "\x11SERVICE_CLASS_SZ1\x10\x01\x1a\a\x82\xb2\x19\x03SZ1\x12\x1e\n" + + "\x11SERVICE_CLASS_SZ2\x10\x02\x1a\a\x82\xb2\x19\x03SZ2\x12\x1e\n" + + "\x11SERVICE_CLASS_SZ3\x10\x03\x1a\a\x82\xb2\x19\x03SZ3*\x85\x01\n" + + "\bDiskType\x12\x1f\n" + + "\x15DISK_TYPE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x18\n" + + "\fDISK_TYPE_OS\x10\x01\x1a\x06\x82\xb2\x19\x02os\x12 \n" + + "\x10DISK_TYPE_SYSTEM\x10\x02\x1a\n" + + "\x82\xb2\x19\x06system\x12\x1c\n" + + "\x0eDISK_TYPE_DATA\x10\x03\x1a\b\x82\xb2\x19\x04data2\xfd\x0e\n" + + "\n" + + "MVMService\x12a\n" + + "\x03Get\x12%.fits.api.mvm.v1.MVMServiceGetRequest\x1a&.fits.api.mvm.v1.MVMServiceGetResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n" + + "\x06Create\x12(.fits.api.mvm.v1.MVMServiceCreateRequest\x1a).fits.api.mvm.v1.MVMServiceCreateResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12i\n" + + "\x06Update\x12(.fits.api.mvm.v1.MVMServiceUpdateRequest\x1a).fits.api.mvm.v1.MVMServiceUpdateResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12d\n" + + "\x04List\x12&.fits.api.mvm.v1.MVMServiceListRequest\x1a'.fits.api.mvm.v1.MVMServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n" + + "\x06Delete\x12(.fits.api.mvm.v1.MVMServiceDeleteRequest\x1a).fits.api.mvm.v1.MVMServiceDeleteResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12l\n" + + "\aAddDisk\x12).fits.api.mvm.v1.MVMServiceAddDiskRequest\x1a*.fits.api.mvm.v1.MVMServiceAddDiskResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n" + + "\n" + + "UpdateDisk\x12,.fits.api.mvm.v1.MVMServiceUpdateDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceUpdateDiskResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n" + + "\n" + + "DeleteDisk\x12,.fits.api.mvm.v1.MVMServiceDeleteDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceDeleteDiskResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x90\x01\n" + + "\x13AddNetworkInterface\x125.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest\x1a6.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x93\x01\n" + + "\x14MoveNetworkInterface\x126.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest\x1a7.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x99\x01\n" + + "\x16DeleteNetworkInterface\x128.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest\x1a9.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x81\x01\n" + + "\x0eValidateCreate\x120.fits.api.mvm.v1.MVMServiceValidateCreateRequest\x1a1.fits.api.mvm.v1.MVMServiceValidateCreateResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x84\x01\n" + + "\x0fValidateAddDisk\x121.fits.api.mvm.v1.MVMServiceValidateAddDiskRequest\x1a2.fits.api.mvm.v1.MVMServiceValidateAddDiskResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x8d\x01\n" + + "\x12ValidateUpdateDisk\x124.fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest\x1a5.fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\xa8\x01\n" + + "\x1bValidateAddNetworkInterface\x12=.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest\x1a>.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02B\xad\x01\n" + + "\x13com.fits.api.mvm.v1B\bMvmProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03FAM\xaa\x02\x0fFits.Api.Mvm.V1\xca\x02\x0fFits\\Api\\Mvm\\V1\xe2\x02\x1bFits\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12Fits::Api::Mvm::V1b\x06proto3" + +var ( + file_fits_api_mvm_v1_mvm_proto_rawDescOnce sync.Once + file_fits_api_mvm_v1_mvm_proto_rawDescData []byte +) + +func file_fits_api_mvm_v1_mvm_proto_rawDescGZIP() []byte { + file_fits_api_mvm_v1_mvm_proto_rawDescOnce.Do(func() { + file_fits_api_mvm_v1_mvm_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_mvm_v1_mvm_proto_rawDesc), len(file_fits_api_mvm_v1_mvm_proto_rawDesc))) + }) + return file_fits_api_mvm_v1_mvm_proto_rawDescData +} + +var file_fits_api_mvm_v1_mvm_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_fits_api_mvm_v1_mvm_proto_msgTypes = make([]protoimpl.MessageInfo, 41) +var file_fits_api_mvm_v1_mvm_proto_goTypes = []any{ + (Availability)(0), // 0: fits.api.mvm.v1.Availability + (ServiceClass)(0), // 1: fits.api.mvm.v1.ServiceClass + (DiskType)(0), // 2: fits.api.mvm.v1.DiskType + (*LinuxDetails)(nil), // 3: fits.api.mvm.v1.LinuxDetails + (*WindowsDetails)(nil), // 4: fits.api.mvm.v1.WindowsDetails + (*NetworkInterface)(nil), // 5: fits.api.mvm.v1.NetworkInterface + (*MVMInstance)(nil), // 6: fits.api.mvm.v1.MVMInstance + (*MVMServiceGetRequest)(nil), // 7: fits.api.mvm.v1.MVMServiceGetRequest + (*MVMServiceGetResponse)(nil), // 8: fits.api.mvm.v1.MVMServiceGetResponse + (*MVMServiceCreateWindowsRequest)(nil), // 9: fits.api.mvm.v1.MVMServiceCreateWindowsRequest + (*MVMServiceCreateLinuxRequest)(nil), // 10: fits.api.mvm.v1.MVMServiceCreateLinuxRequest + (*MVMServiceCreateRequest)(nil), // 11: fits.api.mvm.v1.MVMServiceCreateRequest + (*LinuxDisk)(nil), // 12: fits.api.mvm.v1.LinuxDisk + (*WindowsDisk)(nil), // 13: fits.api.mvm.v1.WindowsDisk + (*MVMServiceCreateResponse)(nil), // 14: fits.api.mvm.v1.MVMServiceCreateResponse + (*MVMServiceUpdateRequest)(nil), // 15: fits.api.mvm.v1.MVMServiceUpdateRequest + (*PerformanceClassChange)(nil), // 16: fits.api.mvm.v1.PerformanceClassChange + (*ServiceClassChange)(nil), // 17: fits.api.mvm.v1.ServiceClassChange + (*ContactChange)(nil), // 18: fits.api.mvm.v1.ContactChange + (*MVMServiceUpdateResponse)(nil), // 19: fits.api.mvm.v1.MVMServiceUpdateResponse + (*MVMServiceListRequest)(nil), // 20: fits.api.mvm.v1.MVMServiceListRequest + (*MVMServiceListResponse)(nil), // 21: fits.api.mvm.v1.MVMServiceListResponse + (*MVMServiceDeleteRequest)(nil), // 22: fits.api.mvm.v1.MVMServiceDeleteRequest + (*MVMServiceDeleteResponse)(nil), // 23: fits.api.mvm.v1.MVMServiceDeleteResponse + (*MVMServiceValidateCreateRequest)(nil), // 24: fits.api.mvm.v1.MVMServiceValidateCreateRequest + (*MVMServiceValidateCreateResponse)(nil), // 25: fits.api.mvm.v1.MVMServiceValidateCreateResponse + (*MVMServiceValidateAddDiskRequest)(nil), // 26: fits.api.mvm.v1.MVMServiceValidateAddDiskRequest + (*MVMServiceValidateAddDiskResponse)(nil), // 27: fits.api.mvm.v1.MVMServiceValidateAddDiskResponse + (*MVMServiceValidateUpdateDiskRequest)(nil), // 28: fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest + (*MVMServiceValidateUpdateDiskResponse)(nil), // 29: fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse + (*MVMServiceAddDiskResponse)(nil), // 30: fits.api.mvm.v1.MVMServiceAddDiskResponse + (*MVMServiceUpdateDiskResponse)(nil), // 31: fits.api.mvm.v1.MVMServiceUpdateDiskResponse + (*MVMServiceDeleteDiskResponse)(nil), // 32: fits.api.mvm.v1.MVMServiceDeleteDiskResponse + (*MVMServiceAddDiskRequest)(nil), // 33: fits.api.mvm.v1.MVMServiceAddDiskRequest + (*MVMServiceUpdateDiskRequest)(nil), // 34: fits.api.mvm.v1.MVMServiceUpdateDiskRequest + (*MVMServiceDeleteDiskRequest)(nil), // 35: fits.api.mvm.v1.MVMServiceDeleteDiskRequest + (*MVMServiceAddNetworkInterfaceResponse)(nil), // 36: fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse + (*MVMServiceMoveNetworkInterfaceResponse)(nil), // 37: fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse + (*MVMServiceDeleteNetworkInterfaceResponse)(nil), // 38: fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse + (*MVMServiceAddNetworkInterfaceRequest)(nil), // 39: fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest + (*MVMServiceMoveNetworkInterfaceRequest)(nil), // 40: fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest + (*MVMServiceDeleteNetworkInterfaceRequest)(nil), // 41: fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest + (*MVMServiceValidateAddNetworkInterfaceRequest)(nil), // 42: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest + (*MVMServiceValidateAddNetworkInterfaceResponse)(nil), // 43: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse + (*v1.Meta)(nil), // 44: fits.api.v1.Meta + (*VLAN)(nil), // 45: fits.api.mvm.v1.VLAN + (*v1.Labels)(nil), // 46: fits.api.v1.Labels + (*v1.UpdateMeta)(nil), // 47: fits.api.v1.UpdateMeta +} +var file_fits_api_mvm_v1_mvm_proto_depIdxs = []int32{ + 12, // 0: fits.api.mvm.v1.LinuxDetails.disks:type_name -> fits.api.mvm.v1.LinuxDisk + 13, // 1: fits.api.mvm.v1.WindowsDetails.disks:type_name -> fits.api.mvm.v1.WindowsDisk + 44, // 2: fits.api.mvm.v1.MVMInstance.meta:type_name -> fits.api.v1.Meta + 0, // 3: fits.api.mvm.v1.MVMInstance.availability:type_name -> fits.api.mvm.v1.Availability + 1, // 4: fits.api.mvm.v1.MVMInstance.serviceclass:type_name -> fits.api.mvm.v1.ServiceClass + 4, // 5: fits.api.mvm.v1.MVMInstance.windows_details:type_name -> fits.api.mvm.v1.WindowsDetails + 3, // 6: fits.api.mvm.v1.MVMInstance.linux_details:type_name -> fits.api.mvm.v1.LinuxDetails + 5, // 7: fits.api.mvm.v1.MVMInstance.interfaces:type_name -> fits.api.mvm.v1.NetworkInterface + 45, // 8: fits.api.mvm.v1.MVMInstance.vlan:type_name -> fits.api.mvm.v1.VLAN + 6, // 9: fits.api.mvm.v1.MVMServiceGetResponse.mvm:type_name -> fits.api.mvm.v1.MVMInstance + 13, // 10: fits.api.mvm.v1.MVMServiceCreateWindowsRequest.disks:type_name -> fits.api.mvm.v1.WindowsDisk + 12, // 11: fits.api.mvm.v1.MVMServiceCreateLinuxRequest.disks:type_name -> fits.api.mvm.v1.LinuxDisk + 46, // 12: fits.api.mvm.v1.MVMServiceCreateRequest.labels:type_name -> fits.api.v1.Labels + 0, // 13: fits.api.mvm.v1.MVMServiceCreateRequest.availability:type_name -> fits.api.mvm.v1.Availability + 1, // 14: fits.api.mvm.v1.MVMServiceCreateRequest.serviceclass:type_name -> fits.api.mvm.v1.ServiceClass + 9, // 15: fits.api.mvm.v1.MVMServiceCreateRequest.windows:type_name -> fits.api.mvm.v1.MVMServiceCreateWindowsRequest + 10, // 16: fits.api.mvm.v1.MVMServiceCreateRequest.linux:type_name -> fits.api.mvm.v1.MVMServiceCreateLinuxRequest + 2, // 17: fits.api.mvm.v1.LinuxDisk.disk_type:type_name -> fits.api.mvm.v1.DiskType + 2, // 18: fits.api.mvm.v1.WindowsDisk.disk_type:type_name -> fits.api.mvm.v1.DiskType + 47, // 19: fits.api.mvm.v1.MVMServiceUpdateRequest.update_meta:type_name -> fits.api.v1.UpdateMeta + 16, // 20: fits.api.mvm.v1.MVMServiceUpdateRequest.performance_class:type_name -> fits.api.mvm.v1.PerformanceClassChange + 17, // 21: fits.api.mvm.v1.MVMServiceUpdateRequest.service_class:type_name -> fits.api.mvm.v1.ServiceClassChange + 18, // 22: fits.api.mvm.v1.MVMServiceUpdateRequest.contact:type_name -> fits.api.mvm.v1.ContactChange + 1, // 23: fits.api.mvm.v1.ServiceClassChange.serviceclass:type_name -> fits.api.mvm.v1.ServiceClass + 6, // 24: fits.api.mvm.v1.MVMServiceListResponse.mvms:type_name -> fits.api.mvm.v1.MVMInstance + 11, // 25: fits.api.mvm.v1.MVMServiceValidateCreateRequest.create:type_name -> fits.api.mvm.v1.MVMServiceCreateRequest + 33, // 26: fits.api.mvm.v1.MVMServiceValidateAddDiskRequest.add_disk:type_name -> fits.api.mvm.v1.MVMServiceAddDiskRequest + 34, // 27: fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest.update_disk:type_name -> fits.api.mvm.v1.MVMServiceUpdateDiskRequest + 12, // 28: fits.api.mvm.v1.MVMServiceAddDiskRequest.linux:type_name -> fits.api.mvm.v1.LinuxDisk + 13, // 29: fits.api.mvm.v1.MVMServiceAddDiskRequest.windows:type_name -> fits.api.mvm.v1.WindowsDisk + 39, // 30: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest.add_network_interface:type_name -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest + 7, // 31: fits.api.mvm.v1.MVMService.Get:input_type -> fits.api.mvm.v1.MVMServiceGetRequest + 11, // 32: fits.api.mvm.v1.MVMService.Create:input_type -> fits.api.mvm.v1.MVMServiceCreateRequest + 15, // 33: fits.api.mvm.v1.MVMService.Update:input_type -> fits.api.mvm.v1.MVMServiceUpdateRequest + 20, // 34: fits.api.mvm.v1.MVMService.List:input_type -> fits.api.mvm.v1.MVMServiceListRequest + 22, // 35: fits.api.mvm.v1.MVMService.Delete:input_type -> fits.api.mvm.v1.MVMServiceDeleteRequest + 33, // 36: fits.api.mvm.v1.MVMService.AddDisk:input_type -> fits.api.mvm.v1.MVMServiceAddDiskRequest + 34, // 37: fits.api.mvm.v1.MVMService.UpdateDisk:input_type -> fits.api.mvm.v1.MVMServiceUpdateDiskRequest + 35, // 38: fits.api.mvm.v1.MVMService.DeleteDisk:input_type -> fits.api.mvm.v1.MVMServiceDeleteDiskRequest + 39, // 39: fits.api.mvm.v1.MVMService.AddNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest + 40, // 40: fits.api.mvm.v1.MVMService.MoveNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest + 41, // 41: fits.api.mvm.v1.MVMService.DeleteNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest + 24, // 42: fits.api.mvm.v1.MVMService.ValidateCreate:input_type -> fits.api.mvm.v1.MVMServiceValidateCreateRequest + 26, // 43: fits.api.mvm.v1.MVMService.ValidateAddDisk:input_type -> fits.api.mvm.v1.MVMServiceValidateAddDiskRequest + 28, // 44: fits.api.mvm.v1.MVMService.ValidateUpdateDisk:input_type -> fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest + 42, // 45: fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest + 8, // 46: fits.api.mvm.v1.MVMService.Get:output_type -> fits.api.mvm.v1.MVMServiceGetResponse + 14, // 47: fits.api.mvm.v1.MVMService.Create:output_type -> fits.api.mvm.v1.MVMServiceCreateResponse + 19, // 48: fits.api.mvm.v1.MVMService.Update:output_type -> fits.api.mvm.v1.MVMServiceUpdateResponse + 21, // 49: fits.api.mvm.v1.MVMService.List:output_type -> fits.api.mvm.v1.MVMServiceListResponse + 23, // 50: fits.api.mvm.v1.MVMService.Delete:output_type -> fits.api.mvm.v1.MVMServiceDeleteResponse + 30, // 51: fits.api.mvm.v1.MVMService.AddDisk:output_type -> fits.api.mvm.v1.MVMServiceAddDiskResponse + 31, // 52: fits.api.mvm.v1.MVMService.UpdateDisk:output_type -> fits.api.mvm.v1.MVMServiceUpdateDiskResponse + 32, // 53: fits.api.mvm.v1.MVMService.DeleteDisk:output_type -> fits.api.mvm.v1.MVMServiceDeleteDiskResponse + 36, // 54: fits.api.mvm.v1.MVMService.AddNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse + 37, // 55: fits.api.mvm.v1.MVMService.MoveNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse + 38, // 56: fits.api.mvm.v1.MVMService.DeleteNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse + 25, // 57: fits.api.mvm.v1.MVMService.ValidateCreate:output_type -> fits.api.mvm.v1.MVMServiceValidateCreateResponse + 27, // 58: fits.api.mvm.v1.MVMService.ValidateAddDisk:output_type -> fits.api.mvm.v1.MVMServiceValidateAddDiskResponse + 29, // 59: fits.api.mvm.v1.MVMService.ValidateUpdateDisk:output_type -> fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse + 43, // 60: fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse + 46, // [46:61] is the sub-list for method output_type + 31, // [31:46] is the sub-list for method input_type + 31, // [31:31] is the sub-list for extension type_name + 31, // [31:31] is the sub-list for extension extendee + 0, // [0:31] is the sub-list for field type_name +} + +func init() { file_fits_api_mvm_v1_mvm_proto_init() } +func file_fits_api_mvm_v1_mvm_proto_init() { + if File_fits_api_mvm_v1_mvm_proto != nil { + return + } + file_fits_api_mvm_v1_vlan_proto_init() + file_fits_api_mvm_v1_mvm_proto_msgTypes[3].OneofWrappers = []any{ + (*MVMInstance_WindowsDetails)(nil), + (*MVMInstance_LinuxDetails)(nil), + } + file_fits_api_mvm_v1_mvm_proto_msgTypes[4].OneofWrappers = []any{} + file_fits_api_mvm_v1_mvm_proto_msgTypes[8].OneofWrappers = []any{ + (*MVMServiceCreateRequest_Windows)(nil), + (*MVMServiceCreateRequest_Linux)(nil), + } + file_fits_api_mvm_v1_mvm_proto_msgTypes[9].OneofWrappers = []any{} + file_fits_api_mvm_v1_mvm_proto_msgTypes[10].OneofWrappers = []any{} + file_fits_api_mvm_v1_mvm_proto_msgTypes[12].OneofWrappers = []any{ + (*MVMServiceUpdateRequest_PerformanceClass)(nil), + (*MVMServiceUpdateRequest_ServiceClass)(nil), + (*MVMServiceUpdateRequest_Contact)(nil), + } + file_fits_api_mvm_v1_mvm_proto_msgTypes[17].OneofWrappers = []any{} + file_fits_api_mvm_v1_mvm_proto_msgTypes[30].OneofWrappers = []any{ + (*MVMServiceAddDiskRequest_Linux)(nil), + (*MVMServiceAddDiskRequest_Windows)(nil), + } + file_fits_api_mvm_v1_mvm_proto_msgTypes[31].OneofWrappers = []any{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_mvm_v1_mvm_proto_rawDesc), len(file_fits_api_mvm_v1_mvm_proto_rawDesc)), + NumEnums: 3, + NumMessages: 41, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_fits_api_mvm_v1_mvm_proto_goTypes, + DependencyIndexes: file_fits_api_mvm_v1_mvm_proto_depIdxs, + EnumInfos: file_fits_api_mvm_v1_mvm_proto_enumTypes, + MessageInfos: file_fits_api_mvm_v1_mvm_proto_msgTypes, + }.Build() + File_fits_api_mvm_v1_mvm_proto = out.File + file_fits_api_mvm_v1_mvm_proto_goTypes = nil + file_fits_api_mvm_v1_mvm_proto_depIdxs = nil +} diff --git a/go/fits/api/vm/v1/vmv1connect/location.connect.go b/go/fits/api/mvm/v1/mvmv1connect/location.connect.go similarity index 82% rename from go/fits/api/vm/v1/vmv1connect/location.connect.go rename to go/fits/api/mvm/v1/mvmv1connect/location.connect.go index c1af614..7bca223 100644 --- a/go/fits/api/vm/v1/vmv1connect/location.connect.go +++ b/go/fits/api/mvm/v1/mvmv1connect/location.connect.go @@ -1,14 +1,14 @@ // Code generated by protoc-gen-connect-go. DO NOT EDIT. // -// Source: fits/api/vm/v1/location.proto +// Source: fits/api/mvm/v1/location.proto -package vmv1connect +package mvmv1connect import ( connect "connectrpc.com/connect" context "context" errors "errors" - v1 "github.com/fi-ts/api/go/fits/api/vm/v1" + v1 "github.com/fi-ts/api/go/fits/api/mvm/v1" http "net/http" strings "strings" ) @@ -22,7 +22,7 @@ const _ = connect.IsAtLeastVersion1_13_0 const ( // LocationServiceName is the fully-qualified name of the LocationService service. - LocationServiceName = "fits.api.vm.v1.LocationService" + LocationServiceName = "fits.api.mvm.v1.LocationService" ) // These constants are the fully-qualified names of the RPCs defined in this package. They're @@ -34,16 +34,16 @@ const ( // period. const ( // LocationServiceListProcedure is the fully-qualified name of the LocationService's List RPC. - LocationServiceListProcedure = "/fits.api.vm.v1.LocationService/List" + LocationServiceListProcedure = "/fits.api.mvm.v1.LocationService/List" ) -// LocationServiceClient is a client for the fits.api.vm.v1.LocationService service. +// LocationServiceClient is a client for the fits.api.mvm.v1.LocationService service. type LocationServiceClient interface { // Returns a list of all datacenter locations available for a tenant. List(context.Context, *v1.LocationServiceListRequest) (*v1.LocationServiceListResponse, error) } -// NewLocationServiceClient constructs a client for the fits.api.vm.v1.LocationService service. By +// NewLocationServiceClient constructs a client for the fits.api.mvm.v1.LocationService service. By // default, it uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, // and sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the // connect.WithGRPC() or connect.WithGRPCWeb() options. @@ -52,7 +52,7 @@ type LocationServiceClient interface { // http://api.acme.com or https://acme.com/grpc). func NewLocationServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) LocationServiceClient { baseURL = strings.TrimRight(baseURL, "/") - locationServiceMethods := v1.File_fits_api_vm_v1_location_proto.Services().ByName("LocationService").Methods() + locationServiceMethods := v1.File_fits_api_mvm_v1_location_proto.Services().ByName("LocationService").Methods() return &locationServiceClient{ list: connect.NewClient[v1.LocationServiceListRequest, v1.LocationServiceListResponse]( httpClient, @@ -68,7 +68,7 @@ type locationServiceClient struct { list *connect.Client[v1.LocationServiceListRequest, v1.LocationServiceListResponse] } -// List calls fits.api.vm.v1.LocationService.List. +// List calls fits.api.mvm.v1.LocationService.List. func (c *locationServiceClient) List(ctx context.Context, req *v1.LocationServiceListRequest) (*v1.LocationServiceListResponse, error) { response, err := c.list.CallUnary(ctx, connect.NewRequest(req)) if response != nil { @@ -77,7 +77,7 @@ func (c *locationServiceClient) List(ctx context.Context, req *v1.LocationServic return nil, err } -// LocationServiceHandler is an implementation of the fits.api.vm.v1.LocationService service. +// LocationServiceHandler is an implementation of the fits.api.mvm.v1.LocationService service. type LocationServiceHandler interface { // Returns a list of all datacenter locations available for a tenant. List(context.Context, *v1.LocationServiceListRequest) (*v1.LocationServiceListResponse, error) @@ -89,14 +89,14 @@ type LocationServiceHandler interface { // By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf // and JSON codecs. They also support gzip compression. func NewLocationServiceHandler(svc LocationServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { - locationServiceMethods := v1.File_fits_api_vm_v1_location_proto.Services().ByName("LocationService").Methods() + locationServiceMethods := v1.File_fits_api_mvm_v1_location_proto.Services().ByName("LocationService").Methods() locationServiceListHandler := connect.NewUnaryHandlerSimple( LocationServiceListProcedure, svc.List, connect.WithSchema(locationServiceMethods.ByName("List")), connect.WithHandlerOptions(opts...), ) - return "/fits.api.vm.v1.LocationService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + return "/fits.api.mvm.v1.LocationService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case LocationServiceListProcedure: locationServiceListHandler.ServeHTTP(w, r) @@ -110,5 +110,5 @@ func NewLocationServiceHandler(svc LocationServiceHandler, opts ...connect.Handl type UnimplementedLocationServiceHandler struct{} func (UnimplementedLocationServiceHandler) List(context.Context, *v1.LocationServiceListRequest) (*v1.LocationServiceListResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.LocationService.List is not implemented")) + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.LocationService.List is not implemented")) } diff --git a/go/fits/api/mvm/v1/mvmv1connect/mvm.connect.go b/go/fits/api/mvm/v1/mvmv1connect/mvm.connect.go new file mode 100644 index 0000000..383fe8d --- /dev/null +++ b/go/fits/api/mvm/v1/mvmv1connect/mvm.connect.go @@ -0,0 +1,603 @@ +// Code generated by protoc-gen-connect-go. DO NOT EDIT. +// +// Source: fits/api/mvm/v1/mvm.proto + +package mvmv1connect + +import ( + connect "connectrpc.com/connect" + context "context" + errors "errors" + v1 "github.com/fi-ts/api/go/fits/api/mvm/v1" + http "net/http" + strings "strings" +) + +// This is a compile-time assertion to ensure that this generated file and the connect package are +// compatible. If you get a compiler error that this constant is not defined, this code was +// generated with a version of connect newer than the one compiled into your binary. You can fix the +// problem by either regenerating this code with an older version of connect or updating the connect +// version compiled into your binary. +const _ = connect.IsAtLeastVersion1_13_0 + +const ( + // MVMServiceName is the fully-qualified name of the MVMService service. + MVMServiceName = "fits.api.mvm.v1.MVMService" +) + +// These constants are the fully-qualified names of the RPCs defined in this package. They're +// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route. +// +// Note that these are different from the fully-qualified method names used by +// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to +// reflection-formatted method names, remove the leading slash and convert the remaining slash to a +// period. +const ( + // MVMServiceGetProcedure is the fully-qualified name of the MVMService's Get RPC. + MVMServiceGetProcedure = "/fits.api.mvm.v1.MVMService/Get" + // MVMServiceCreateProcedure is the fully-qualified name of the MVMService's Create RPC. + MVMServiceCreateProcedure = "/fits.api.mvm.v1.MVMService/Create" + // MVMServiceUpdateProcedure is the fully-qualified name of the MVMService's Update RPC. + MVMServiceUpdateProcedure = "/fits.api.mvm.v1.MVMService/Update" + // MVMServiceListProcedure is the fully-qualified name of the MVMService's List RPC. + MVMServiceListProcedure = "/fits.api.mvm.v1.MVMService/List" + // MVMServiceDeleteProcedure is the fully-qualified name of the MVMService's Delete RPC. + MVMServiceDeleteProcedure = "/fits.api.mvm.v1.MVMService/Delete" + // MVMServiceAddDiskProcedure is the fully-qualified name of the MVMService's AddDisk RPC. + MVMServiceAddDiskProcedure = "/fits.api.mvm.v1.MVMService/AddDisk" + // MVMServiceUpdateDiskProcedure is the fully-qualified name of the MVMService's UpdateDisk RPC. + MVMServiceUpdateDiskProcedure = "/fits.api.mvm.v1.MVMService/UpdateDisk" + // MVMServiceDeleteDiskProcedure is the fully-qualified name of the MVMService's DeleteDisk RPC. + MVMServiceDeleteDiskProcedure = "/fits.api.mvm.v1.MVMService/DeleteDisk" + // MVMServiceAddNetworkInterfaceProcedure is the fully-qualified name of the MVMService's + // AddNetworkInterface RPC. + MVMServiceAddNetworkInterfaceProcedure = "/fits.api.mvm.v1.MVMService/AddNetworkInterface" + // MVMServiceMoveNetworkInterfaceProcedure is the fully-qualified name of the MVMService's + // MoveNetworkInterface RPC. + MVMServiceMoveNetworkInterfaceProcedure = "/fits.api.mvm.v1.MVMService/MoveNetworkInterface" + // MVMServiceDeleteNetworkInterfaceProcedure is the fully-qualified name of the MVMService's + // DeleteNetworkInterface RPC. + MVMServiceDeleteNetworkInterfaceProcedure = "/fits.api.mvm.v1.MVMService/DeleteNetworkInterface" + // MVMServiceValidateCreateProcedure is the fully-qualified name of the MVMService's ValidateCreate + // RPC. + MVMServiceValidateCreateProcedure = "/fits.api.mvm.v1.MVMService/ValidateCreate" + // MVMServiceValidateAddDiskProcedure is the fully-qualified name of the MVMService's + // ValidateAddDisk RPC. + MVMServiceValidateAddDiskProcedure = "/fits.api.mvm.v1.MVMService/ValidateAddDisk" + // MVMServiceValidateUpdateDiskProcedure is the fully-qualified name of the MVMService's + // ValidateUpdateDisk RPC. + MVMServiceValidateUpdateDiskProcedure = "/fits.api.mvm.v1.MVMService/ValidateUpdateDisk" + // MVMServiceValidateAddNetworkInterfaceProcedure is the fully-qualified name of the MVMService's + // ValidateAddNetworkInterface RPC. + MVMServiceValidateAddNetworkInterfaceProcedure = "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface" +) + +// MVMServiceClient is a client for the fits.api.mvm.v1.MVMService service. +type MVMServiceClient interface { + // Returns the MVM with the specified UUID. + Get(context.Context, *v1.MVMServiceGetRequest) (*v1.MVMServiceGetResponse, error) + // Creates a new MVM. + Create(context.Context, *v1.MVMServiceCreateRequest) (*v1.MVMServiceCreateResponse, error) + // Updates a MVM. + Update(context.Context, *v1.MVMServiceUpdateRequest) (*v1.MVMServiceUpdateResponse, error) + // Returns the list of all MVMs. + List(context.Context, *v1.MVMServiceListRequest) (*v1.MVMServiceListResponse, error) + // Deletes a MVM. + Delete(context.Context, *v1.MVMServiceDeleteRequest) (*v1.MVMServiceDeleteResponse, error) + // Orders an additional data disk for a MVM. System disks are ordered at + // MVM creation and cannot be added later. + AddDisk(context.Context, *v1.MVMServiceAddDiskRequest) (*v1.MVMServiceAddDiskResponse, error) + // Changes the size or auto-extend behavior of an existing disk; see + // DiskType for which operations apply per disk kind. + UpdateDisk(context.Context, *v1.MVMServiceUpdateDiskRequest) (*v1.MVMServiceUpdateDiskResponse, error) + // Cancels a data disk. OS and system disks cannot be deleted. + DeleteDisk(context.Context, *v1.MVMServiceDeleteDiskRequest) (*v1.MVMServiceDeleteDiskResponse, error) + // Orders an additional network interface for a MVM. + AddNetworkInterface(context.Context, *v1.MVMServiceAddNetworkInterfaceRequest) (*v1.MVMServiceAddNetworkInterfaceResponse, error) + // Moves a network interface from one MVM to another. + MoveNetworkInterface(context.Context, *v1.MVMServiceMoveNetworkInterfaceRequest) (*v1.MVMServiceMoveNetworkInterfaceResponse, error) + // Deletes a network interface from a MVM. + DeleteNetworkInterface(context.Context, *v1.MVMServiceDeleteNetworkInterfaceRequest) (*v1.MVMServiceDeleteNetworkInterfaceResponse, error) + // Validates a MVM create request without creating anything. Intended for + // form pre-checks; the create endpoint validates again before executing. + ValidateCreate(context.Context, *v1.MVMServiceValidateCreateRequest) (*v1.MVMServiceValidateCreateResponse, error) + // Validates an AddDisk request without ordering anything. + ValidateAddDisk(context.Context, *v1.MVMServiceValidateAddDiskRequest) (*v1.MVMServiceValidateAddDiskResponse, error) + // Validates an UpdateDisk request without changing anything. + ValidateUpdateDisk(context.Context, *v1.MVMServiceValidateUpdateDiskRequest) (*v1.MVMServiceValidateUpdateDiskResponse, error) + // Validates an AddNetworkInterface request without ordering anything. + ValidateAddNetworkInterface(context.Context, *v1.MVMServiceValidateAddNetworkInterfaceRequest) (*v1.MVMServiceValidateAddNetworkInterfaceResponse, error) +} + +// NewMVMServiceClient constructs a client for the fits.api.mvm.v1.MVMService service. By default, +// it uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and +// sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() +// or connect.WithGRPCWeb() options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewMVMServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) MVMServiceClient { + baseURL = strings.TrimRight(baseURL, "/") + mVMServiceMethods := v1.File_fits_api_mvm_v1_mvm_proto.Services().ByName("MVMService").Methods() + return &mVMServiceClient{ + get: connect.NewClient[v1.MVMServiceGetRequest, v1.MVMServiceGetResponse]( + httpClient, + baseURL+MVMServiceGetProcedure, + connect.WithSchema(mVMServiceMethods.ByName("Get")), + connect.WithClientOptions(opts...), + ), + create: connect.NewClient[v1.MVMServiceCreateRequest, v1.MVMServiceCreateResponse]( + httpClient, + baseURL+MVMServiceCreateProcedure, + connect.WithSchema(mVMServiceMethods.ByName("Create")), + connect.WithClientOptions(opts...), + ), + update: connect.NewClient[v1.MVMServiceUpdateRequest, v1.MVMServiceUpdateResponse]( + httpClient, + baseURL+MVMServiceUpdateProcedure, + connect.WithSchema(mVMServiceMethods.ByName("Update")), + connect.WithClientOptions(opts...), + ), + list: connect.NewClient[v1.MVMServiceListRequest, v1.MVMServiceListResponse]( + httpClient, + baseURL+MVMServiceListProcedure, + connect.WithSchema(mVMServiceMethods.ByName("List")), + connect.WithClientOptions(opts...), + ), + delete: connect.NewClient[v1.MVMServiceDeleteRequest, v1.MVMServiceDeleteResponse]( + httpClient, + baseURL+MVMServiceDeleteProcedure, + connect.WithSchema(mVMServiceMethods.ByName("Delete")), + connect.WithClientOptions(opts...), + ), + addDisk: connect.NewClient[v1.MVMServiceAddDiskRequest, v1.MVMServiceAddDiskResponse]( + httpClient, + baseURL+MVMServiceAddDiskProcedure, + connect.WithSchema(mVMServiceMethods.ByName("AddDisk")), + connect.WithClientOptions(opts...), + ), + updateDisk: connect.NewClient[v1.MVMServiceUpdateDiskRequest, v1.MVMServiceUpdateDiskResponse]( + httpClient, + baseURL+MVMServiceUpdateDiskProcedure, + connect.WithSchema(mVMServiceMethods.ByName("UpdateDisk")), + connect.WithClientOptions(opts...), + ), + deleteDisk: connect.NewClient[v1.MVMServiceDeleteDiskRequest, v1.MVMServiceDeleteDiskResponse]( + httpClient, + baseURL+MVMServiceDeleteDiskProcedure, + connect.WithSchema(mVMServiceMethods.ByName("DeleteDisk")), + connect.WithClientOptions(opts...), + ), + addNetworkInterface: connect.NewClient[v1.MVMServiceAddNetworkInterfaceRequest, v1.MVMServiceAddNetworkInterfaceResponse]( + httpClient, + baseURL+MVMServiceAddNetworkInterfaceProcedure, + connect.WithSchema(mVMServiceMethods.ByName("AddNetworkInterface")), + connect.WithClientOptions(opts...), + ), + moveNetworkInterface: connect.NewClient[v1.MVMServiceMoveNetworkInterfaceRequest, v1.MVMServiceMoveNetworkInterfaceResponse]( + httpClient, + baseURL+MVMServiceMoveNetworkInterfaceProcedure, + connect.WithSchema(mVMServiceMethods.ByName("MoveNetworkInterface")), + connect.WithClientOptions(opts...), + ), + deleteNetworkInterface: connect.NewClient[v1.MVMServiceDeleteNetworkInterfaceRequest, v1.MVMServiceDeleteNetworkInterfaceResponse]( + httpClient, + baseURL+MVMServiceDeleteNetworkInterfaceProcedure, + connect.WithSchema(mVMServiceMethods.ByName("DeleteNetworkInterface")), + connect.WithClientOptions(opts...), + ), + validateCreate: connect.NewClient[v1.MVMServiceValidateCreateRequest, v1.MVMServiceValidateCreateResponse]( + httpClient, + baseURL+MVMServiceValidateCreateProcedure, + connect.WithSchema(mVMServiceMethods.ByName("ValidateCreate")), + connect.WithClientOptions(opts...), + ), + validateAddDisk: connect.NewClient[v1.MVMServiceValidateAddDiskRequest, v1.MVMServiceValidateAddDiskResponse]( + httpClient, + baseURL+MVMServiceValidateAddDiskProcedure, + connect.WithSchema(mVMServiceMethods.ByName("ValidateAddDisk")), + connect.WithClientOptions(opts...), + ), + validateUpdateDisk: connect.NewClient[v1.MVMServiceValidateUpdateDiskRequest, v1.MVMServiceValidateUpdateDiskResponse]( + httpClient, + baseURL+MVMServiceValidateUpdateDiskProcedure, + connect.WithSchema(mVMServiceMethods.ByName("ValidateUpdateDisk")), + connect.WithClientOptions(opts...), + ), + validateAddNetworkInterface: connect.NewClient[v1.MVMServiceValidateAddNetworkInterfaceRequest, v1.MVMServiceValidateAddNetworkInterfaceResponse]( + httpClient, + baseURL+MVMServiceValidateAddNetworkInterfaceProcedure, + connect.WithSchema(mVMServiceMethods.ByName("ValidateAddNetworkInterface")), + connect.WithClientOptions(opts...), + ), + } +} + +// mVMServiceClient implements MVMServiceClient. +type mVMServiceClient struct { + get *connect.Client[v1.MVMServiceGetRequest, v1.MVMServiceGetResponse] + create *connect.Client[v1.MVMServiceCreateRequest, v1.MVMServiceCreateResponse] + update *connect.Client[v1.MVMServiceUpdateRequest, v1.MVMServiceUpdateResponse] + list *connect.Client[v1.MVMServiceListRequest, v1.MVMServiceListResponse] + delete *connect.Client[v1.MVMServiceDeleteRequest, v1.MVMServiceDeleteResponse] + addDisk *connect.Client[v1.MVMServiceAddDiskRequest, v1.MVMServiceAddDiskResponse] + updateDisk *connect.Client[v1.MVMServiceUpdateDiskRequest, v1.MVMServiceUpdateDiskResponse] + deleteDisk *connect.Client[v1.MVMServiceDeleteDiskRequest, v1.MVMServiceDeleteDiskResponse] + addNetworkInterface *connect.Client[v1.MVMServiceAddNetworkInterfaceRequest, v1.MVMServiceAddNetworkInterfaceResponse] + moveNetworkInterface *connect.Client[v1.MVMServiceMoveNetworkInterfaceRequest, v1.MVMServiceMoveNetworkInterfaceResponse] + deleteNetworkInterface *connect.Client[v1.MVMServiceDeleteNetworkInterfaceRequest, v1.MVMServiceDeleteNetworkInterfaceResponse] + validateCreate *connect.Client[v1.MVMServiceValidateCreateRequest, v1.MVMServiceValidateCreateResponse] + validateAddDisk *connect.Client[v1.MVMServiceValidateAddDiskRequest, v1.MVMServiceValidateAddDiskResponse] + validateUpdateDisk *connect.Client[v1.MVMServiceValidateUpdateDiskRequest, v1.MVMServiceValidateUpdateDiskResponse] + validateAddNetworkInterface *connect.Client[v1.MVMServiceValidateAddNetworkInterfaceRequest, v1.MVMServiceValidateAddNetworkInterfaceResponse] +} + +// Get calls fits.api.mvm.v1.MVMService.Get. +func (c *mVMServiceClient) Get(ctx context.Context, req *v1.MVMServiceGetRequest) (*v1.MVMServiceGetResponse, error) { + response, err := c.get.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// Create calls fits.api.mvm.v1.MVMService.Create. +func (c *mVMServiceClient) Create(ctx context.Context, req *v1.MVMServiceCreateRequest) (*v1.MVMServiceCreateResponse, error) { + response, err := c.create.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// Update calls fits.api.mvm.v1.MVMService.Update. +func (c *mVMServiceClient) Update(ctx context.Context, req *v1.MVMServiceUpdateRequest) (*v1.MVMServiceUpdateResponse, error) { + response, err := c.update.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// List calls fits.api.mvm.v1.MVMService.List. +func (c *mVMServiceClient) List(ctx context.Context, req *v1.MVMServiceListRequest) (*v1.MVMServiceListResponse, error) { + response, err := c.list.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// Delete calls fits.api.mvm.v1.MVMService.Delete. +func (c *mVMServiceClient) Delete(ctx context.Context, req *v1.MVMServiceDeleteRequest) (*v1.MVMServiceDeleteResponse, error) { + response, err := c.delete.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// AddDisk calls fits.api.mvm.v1.MVMService.AddDisk. +func (c *mVMServiceClient) AddDisk(ctx context.Context, req *v1.MVMServiceAddDiskRequest) (*v1.MVMServiceAddDiskResponse, error) { + response, err := c.addDisk.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// UpdateDisk calls fits.api.mvm.v1.MVMService.UpdateDisk. +func (c *mVMServiceClient) UpdateDisk(ctx context.Context, req *v1.MVMServiceUpdateDiskRequest) (*v1.MVMServiceUpdateDiskResponse, error) { + response, err := c.updateDisk.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// DeleteDisk calls fits.api.mvm.v1.MVMService.DeleteDisk. +func (c *mVMServiceClient) DeleteDisk(ctx context.Context, req *v1.MVMServiceDeleteDiskRequest) (*v1.MVMServiceDeleteDiskResponse, error) { + response, err := c.deleteDisk.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// AddNetworkInterface calls fits.api.mvm.v1.MVMService.AddNetworkInterface. +func (c *mVMServiceClient) AddNetworkInterface(ctx context.Context, req *v1.MVMServiceAddNetworkInterfaceRequest) (*v1.MVMServiceAddNetworkInterfaceResponse, error) { + response, err := c.addNetworkInterface.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// MoveNetworkInterface calls fits.api.mvm.v1.MVMService.MoveNetworkInterface. +func (c *mVMServiceClient) MoveNetworkInterface(ctx context.Context, req *v1.MVMServiceMoveNetworkInterfaceRequest) (*v1.MVMServiceMoveNetworkInterfaceResponse, error) { + response, err := c.moveNetworkInterface.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// DeleteNetworkInterface calls fits.api.mvm.v1.MVMService.DeleteNetworkInterface. +func (c *mVMServiceClient) DeleteNetworkInterface(ctx context.Context, req *v1.MVMServiceDeleteNetworkInterfaceRequest) (*v1.MVMServiceDeleteNetworkInterfaceResponse, error) { + response, err := c.deleteNetworkInterface.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// ValidateCreate calls fits.api.mvm.v1.MVMService.ValidateCreate. +func (c *mVMServiceClient) ValidateCreate(ctx context.Context, req *v1.MVMServiceValidateCreateRequest) (*v1.MVMServiceValidateCreateResponse, error) { + response, err := c.validateCreate.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// ValidateAddDisk calls fits.api.mvm.v1.MVMService.ValidateAddDisk. +func (c *mVMServiceClient) ValidateAddDisk(ctx context.Context, req *v1.MVMServiceValidateAddDiskRequest) (*v1.MVMServiceValidateAddDiskResponse, error) { + response, err := c.validateAddDisk.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// ValidateUpdateDisk calls fits.api.mvm.v1.MVMService.ValidateUpdateDisk. +func (c *mVMServiceClient) ValidateUpdateDisk(ctx context.Context, req *v1.MVMServiceValidateUpdateDiskRequest) (*v1.MVMServiceValidateUpdateDiskResponse, error) { + response, err := c.validateUpdateDisk.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// ValidateAddNetworkInterface calls fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface. +func (c *mVMServiceClient) ValidateAddNetworkInterface(ctx context.Context, req *v1.MVMServiceValidateAddNetworkInterfaceRequest) (*v1.MVMServiceValidateAddNetworkInterfaceResponse, error) { + response, err := c.validateAddNetworkInterface.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + +// MVMServiceHandler is an implementation of the fits.api.mvm.v1.MVMService service. +type MVMServiceHandler interface { + // Returns the MVM with the specified UUID. + Get(context.Context, *v1.MVMServiceGetRequest) (*v1.MVMServiceGetResponse, error) + // Creates a new MVM. + Create(context.Context, *v1.MVMServiceCreateRequest) (*v1.MVMServiceCreateResponse, error) + // Updates a MVM. + Update(context.Context, *v1.MVMServiceUpdateRequest) (*v1.MVMServiceUpdateResponse, error) + // Returns the list of all MVMs. + List(context.Context, *v1.MVMServiceListRequest) (*v1.MVMServiceListResponse, error) + // Deletes a MVM. + Delete(context.Context, *v1.MVMServiceDeleteRequest) (*v1.MVMServiceDeleteResponse, error) + // Orders an additional data disk for a MVM. System disks are ordered at + // MVM creation and cannot be added later. + AddDisk(context.Context, *v1.MVMServiceAddDiskRequest) (*v1.MVMServiceAddDiskResponse, error) + // Changes the size or auto-extend behavior of an existing disk; see + // DiskType for which operations apply per disk kind. + UpdateDisk(context.Context, *v1.MVMServiceUpdateDiskRequest) (*v1.MVMServiceUpdateDiskResponse, error) + // Cancels a data disk. OS and system disks cannot be deleted. + DeleteDisk(context.Context, *v1.MVMServiceDeleteDiskRequest) (*v1.MVMServiceDeleteDiskResponse, error) + // Orders an additional network interface for a MVM. + AddNetworkInterface(context.Context, *v1.MVMServiceAddNetworkInterfaceRequest) (*v1.MVMServiceAddNetworkInterfaceResponse, error) + // Moves a network interface from one MVM to another. + MoveNetworkInterface(context.Context, *v1.MVMServiceMoveNetworkInterfaceRequest) (*v1.MVMServiceMoveNetworkInterfaceResponse, error) + // Deletes a network interface from a MVM. + DeleteNetworkInterface(context.Context, *v1.MVMServiceDeleteNetworkInterfaceRequest) (*v1.MVMServiceDeleteNetworkInterfaceResponse, error) + // Validates a MVM create request without creating anything. Intended for + // form pre-checks; the create endpoint validates again before executing. + ValidateCreate(context.Context, *v1.MVMServiceValidateCreateRequest) (*v1.MVMServiceValidateCreateResponse, error) + // Validates an AddDisk request without ordering anything. + ValidateAddDisk(context.Context, *v1.MVMServiceValidateAddDiskRequest) (*v1.MVMServiceValidateAddDiskResponse, error) + // Validates an UpdateDisk request without changing anything. + ValidateUpdateDisk(context.Context, *v1.MVMServiceValidateUpdateDiskRequest) (*v1.MVMServiceValidateUpdateDiskResponse, error) + // Validates an AddNetworkInterface request without ordering anything. + ValidateAddNetworkInterface(context.Context, *v1.MVMServiceValidateAddNetworkInterfaceRequest) (*v1.MVMServiceValidateAddNetworkInterfaceResponse, error) +} + +// NewMVMServiceHandler builds an HTTP handler from the service implementation. It returns the path +// on which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewMVMServiceHandler(svc MVMServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { + mVMServiceMethods := v1.File_fits_api_mvm_v1_mvm_proto.Services().ByName("MVMService").Methods() + mVMServiceGetHandler := connect.NewUnaryHandlerSimple( + MVMServiceGetProcedure, + svc.Get, + connect.WithSchema(mVMServiceMethods.ByName("Get")), + connect.WithHandlerOptions(opts...), + ) + mVMServiceCreateHandler := connect.NewUnaryHandlerSimple( + MVMServiceCreateProcedure, + svc.Create, + connect.WithSchema(mVMServiceMethods.ByName("Create")), + connect.WithHandlerOptions(opts...), + ) + mVMServiceUpdateHandler := connect.NewUnaryHandlerSimple( + MVMServiceUpdateProcedure, + svc.Update, + connect.WithSchema(mVMServiceMethods.ByName("Update")), + connect.WithHandlerOptions(opts...), + ) + mVMServiceListHandler := connect.NewUnaryHandlerSimple( + MVMServiceListProcedure, + svc.List, + connect.WithSchema(mVMServiceMethods.ByName("List")), + connect.WithHandlerOptions(opts...), + ) + mVMServiceDeleteHandler := connect.NewUnaryHandlerSimple( + MVMServiceDeleteProcedure, + svc.Delete, + connect.WithSchema(mVMServiceMethods.ByName("Delete")), + connect.WithHandlerOptions(opts...), + ) + mVMServiceAddDiskHandler := connect.NewUnaryHandlerSimple( + MVMServiceAddDiskProcedure, + svc.AddDisk, + connect.WithSchema(mVMServiceMethods.ByName("AddDisk")), + connect.WithHandlerOptions(opts...), + ) + mVMServiceUpdateDiskHandler := connect.NewUnaryHandlerSimple( + MVMServiceUpdateDiskProcedure, + svc.UpdateDisk, + connect.WithSchema(mVMServiceMethods.ByName("UpdateDisk")), + connect.WithHandlerOptions(opts...), + ) + mVMServiceDeleteDiskHandler := connect.NewUnaryHandlerSimple( + MVMServiceDeleteDiskProcedure, + svc.DeleteDisk, + connect.WithSchema(mVMServiceMethods.ByName("DeleteDisk")), + connect.WithHandlerOptions(opts...), + ) + mVMServiceAddNetworkInterfaceHandler := connect.NewUnaryHandlerSimple( + MVMServiceAddNetworkInterfaceProcedure, + svc.AddNetworkInterface, + connect.WithSchema(mVMServiceMethods.ByName("AddNetworkInterface")), + connect.WithHandlerOptions(opts...), + ) + mVMServiceMoveNetworkInterfaceHandler := connect.NewUnaryHandlerSimple( + MVMServiceMoveNetworkInterfaceProcedure, + svc.MoveNetworkInterface, + connect.WithSchema(mVMServiceMethods.ByName("MoveNetworkInterface")), + connect.WithHandlerOptions(opts...), + ) + mVMServiceDeleteNetworkInterfaceHandler := connect.NewUnaryHandlerSimple( + MVMServiceDeleteNetworkInterfaceProcedure, + svc.DeleteNetworkInterface, + connect.WithSchema(mVMServiceMethods.ByName("DeleteNetworkInterface")), + connect.WithHandlerOptions(opts...), + ) + mVMServiceValidateCreateHandler := connect.NewUnaryHandlerSimple( + MVMServiceValidateCreateProcedure, + svc.ValidateCreate, + connect.WithSchema(mVMServiceMethods.ByName("ValidateCreate")), + connect.WithHandlerOptions(opts...), + ) + mVMServiceValidateAddDiskHandler := connect.NewUnaryHandlerSimple( + MVMServiceValidateAddDiskProcedure, + svc.ValidateAddDisk, + connect.WithSchema(mVMServiceMethods.ByName("ValidateAddDisk")), + connect.WithHandlerOptions(opts...), + ) + mVMServiceValidateUpdateDiskHandler := connect.NewUnaryHandlerSimple( + MVMServiceValidateUpdateDiskProcedure, + svc.ValidateUpdateDisk, + connect.WithSchema(mVMServiceMethods.ByName("ValidateUpdateDisk")), + connect.WithHandlerOptions(opts...), + ) + mVMServiceValidateAddNetworkInterfaceHandler := connect.NewUnaryHandlerSimple( + MVMServiceValidateAddNetworkInterfaceProcedure, + svc.ValidateAddNetworkInterface, + connect.WithSchema(mVMServiceMethods.ByName("ValidateAddNetworkInterface")), + connect.WithHandlerOptions(opts...), + ) + return "/fits.api.mvm.v1.MVMService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case MVMServiceGetProcedure: + mVMServiceGetHandler.ServeHTTP(w, r) + case MVMServiceCreateProcedure: + mVMServiceCreateHandler.ServeHTTP(w, r) + case MVMServiceUpdateProcedure: + mVMServiceUpdateHandler.ServeHTTP(w, r) + case MVMServiceListProcedure: + mVMServiceListHandler.ServeHTTP(w, r) + case MVMServiceDeleteProcedure: + mVMServiceDeleteHandler.ServeHTTP(w, r) + case MVMServiceAddDiskProcedure: + mVMServiceAddDiskHandler.ServeHTTP(w, r) + case MVMServiceUpdateDiskProcedure: + mVMServiceUpdateDiskHandler.ServeHTTP(w, r) + case MVMServiceDeleteDiskProcedure: + mVMServiceDeleteDiskHandler.ServeHTTP(w, r) + case MVMServiceAddNetworkInterfaceProcedure: + mVMServiceAddNetworkInterfaceHandler.ServeHTTP(w, r) + case MVMServiceMoveNetworkInterfaceProcedure: + mVMServiceMoveNetworkInterfaceHandler.ServeHTTP(w, r) + case MVMServiceDeleteNetworkInterfaceProcedure: + mVMServiceDeleteNetworkInterfaceHandler.ServeHTTP(w, r) + case MVMServiceValidateCreateProcedure: + mVMServiceValidateCreateHandler.ServeHTTP(w, r) + case MVMServiceValidateAddDiskProcedure: + mVMServiceValidateAddDiskHandler.ServeHTTP(w, r) + case MVMServiceValidateUpdateDiskProcedure: + mVMServiceValidateUpdateDiskHandler.ServeHTTP(w, r) + case MVMServiceValidateAddNetworkInterfaceProcedure: + mVMServiceValidateAddNetworkInterfaceHandler.ServeHTTP(w, r) + default: + http.NotFound(w, r) + } + }) +} + +// UnimplementedMVMServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedMVMServiceHandler struct{} + +func (UnimplementedMVMServiceHandler) Get(context.Context, *v1.MVMServiceGetRequest) (*v1.MVMServiceGetResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.Get is not implemented")) +} + +func (UnimplementedMVMServiceHandler) Create(context.Context, *v1.MVMServiceCreateRequest) (*v1.MVMServiceCreateResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.Create is not implemented")) +} + +func (UnimplementedMVMServiceHandler) Update(context.Context, *v1.MVMServiceUpdateRequest) (*v1.MVMServiceUpdateResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.Update is not implemented")) +} + +func (UnimplementedMVMServiceHandler) List(context.Context, *v1.MVMServiceListRequest) (*v1.MVMServiceListResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.List is not implemented")) +} + +func (UnimplementedMVMServiceHandler) Delete(context.Context, *v1.MVMServiceDeleteRequest) (*v1.MVMServiceDeleteResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.Delete is not implemented")) +} + +func (UnimplementedMVMServiceHandler) AddDisk(context.Context, *v1.MVMServiceAddDiskRequest) (*v1.MVMServiceAddDiskResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.AddDisk is not implemented")) +} + +func (UnimplementedMVMServiceHandler) UpdateDisk(context.Context, *v1.MVMServiceUpdateDiskRequest) (*v1.MVMServiceUpdateDiskResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.UpdateDisk is not implemented")) +} + +func (UnimplementedMVMServiceHandler) DeleteDisk(context.Context, *v1.MVMServiceDeleteDiskRequest) (*v1.MVMServiceDeleteDiskResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.DeleteDisk is not implemented")) +} + +func (UnimplementedMVMServiceHandler) AddNetworkInterface(context.Context, *v1.MVMServiceAddNetworkInterfaceRequest) (*v1.MVMServiceAddNetworkInterfaceResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.AddNetworkInterface is not implemented")) +} + +func (UnimplementedMVMServiceHandler) MoveNetworkInterface(context.Context, *v1.MVMServiceMoveNetworkInterfaceRequest) (*v1.MVMServiceMoveNetworkInterfaceResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.MoveNetworkInterface is not implemented")) +} + +func (UnimplementedMVMServiceHandler) DeleteNetworkInterface(context.Context, *v1.MVMServiceDeleteNetworkInterfaceRequest) (*v1.MVMServiceDeleteNetworkInterfaceResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.DeleteNetworkInterface is not implemented")) +} + +func (UnimplementedMVMServiceHandler) ValidateCreate(context.Context, *v1.MVMServiceValidateCreateRequest) (*v1.MVMServiceValidateCreateResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.ValidateCreate is not implemented")) +} + +func (UnimplementedMVMServiceHandler) ValidateAddDisk(context.Context, *v1.MVMServiceValidateAddDiskRequest) (*v1.MVMServiceValidateAddDiskResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.ValidateAddDisk is not implemented")) +} + +func (UnimplementedMVMServiceHandler) ValidateUpdateDisk(context.Context, *v1.MVMServiceValidateUpdateDiskRequest) (*v1.MVMServiceValidateUpdateDiskResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.ValidateUpdateDisk is not implemented")) +} + +func (UnimplementedMVMServiceHandler) ValidateAddNetworkInterface(context.Context, *v1.MVMServiceValidateAddNetworkInterfaceRequest) (*v1.MVMServiceValidateAddNetworkInterfaceResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface is not implemented")) +} diff --git a/go/fits/api/vm/v1/vmv1connect/os.connect.go b/go/fits/api/mvm/v1/mvmv1connect/os.connect.go similarity index 81% rename from go/fits/api/vm/v1/vmv1connect/os.connect.go rename to go/fits/api/mvm/v1/mvmv1connect/os.connect.go index 73a93e5..ab4dae1 100644 --- a/go/fits/api/vm/v1/vmv1connect/os.connect.go +++ b/go/fits/api/mvm/v1/mvmv1connect/os.connect.go @@ -1,14 +1,14 @@ // Code generated by protoc-gen-connect-go. DO NOT EDIT. // -// Source: fits/api/vm/v1/os.proto +// Source: fits/api/mvm/v1/os.proto -package vmv1connect +package mvmv1connect import ( connect "connectrpc.com/connect" context "context" errors "errors" - v1 "github.com/fi-ts/api/go/fits/api/vm/v1" + v1 "github.com/fi-ts/api/go/fits/api/mvm/v1" http "net/http" strings "strings" ) @@ -22,7 +22,7 @@ const _ = connect.IsAtLeastVersion1_13_0 const ( // OSServiceName is the fully-qualified name of the OSService service. - OSServiceName = "fits.api.vm.v1.OSService" + OSServiceName = "fits.api.mvm.v1.OSService" ) // These constants are the fully-qualified names of the RPCs defined in this package. They're @@ -34,16 +34,16 @@ const ( // period. const ( // OSServiceListProcedure is the fully-qualified name of the OSService's List RPC. - OSServiceListProcedure = "/fits.api.vm.v1.OSService/List" + OSServiceListProcedure = "/fits.api.mvm.v1.OSService/List" ) -// OSServiceClient is a client for the fits.api.vm.v1.OSService service. +// OSServiceClient is a client for the fits.api.mvm.v1.OSService service. type OSServiceClient interface { // Returns a list of all operating systems. List(context.Context, *v1.OSServiceListRequest) (*v1.OSServiceListResponse, error) } -// NewOSServiceClient constructs a client for the fits.api.vm.v1.OSService service. By default, it +// NewOSServiceClient constructs a client for the fits.api.mvm.v1.OSService service. By default, it // uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends // uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or // connect.WithGRPCWeb() options. @@ -52,7 +52,7 @@ type OSServiceClient interface { // http://api.acme.com or https://acme.com/grpc). func NewOSServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) OSServiceClient { baseURL = strings.TrimRight(baseURL, "/") - oSServiceMethods := v1.File_fits_api_vm_v1_os_proto.Services().ByName("OSService").Methods() + oSServiceMethods := v1.File_fits_api_mvm_v1_os_proto.Services().ByName("OSService").Methods() return &oSServiceClient{ list: connect.NewClient[v1.OSServiceListRequest, v1.OSServiceListResponse]( httpClient, @@ -68,7 +68,7 @@ type oSServiceClient struct { list *connect.Client[v1.OSServiceListRequest, v1.OSServiceListResponse] } -// List calls fits.api.vm.v1.OSService.List. +// List calls fits.api.mvm.v1.OSService.List. func (c *oSServiceClient) List(ctx context.Context, req *v1.OSServiceListRequest) (*v1.OSServiceListResponse, error) { response, err := c.list.CallUnary(ctx, connect.NewRequest(req)) if response != nil { @@ -77,7 +77,7 @@ func (c *oSServiceClient) List(ctx context.Context, req *v1.OSServiceListRequest return nil, err } -// OSServiceHandler is an implementation of the fits.api.vm.v1.OSService service. +// OSServiceHandler is an implementation of the fits.api.mvm.v1.OSService service. type OSServiceHandler interface { // Returns a list of all operating systems. List(context.Context, *v1.OSServiceListRequest) (*v1.OSServiceListResponse, error) @@ -89,14 +89,14 @@ type OSServiceHandler interface { // By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf // and JSON codecs. They also support gzip compression. func NewOSServiceHandler(svc OSServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { - oSServiceMethods := v1.File_fits_api_vm_v1_os_proto.Services().ByName("OSService").Methods() + oSServiceMethods := v1.File_fits_api_mvm_v1_os_proto.Services().ByName("OSService").Methods() oSServiceListHandler := connect.NewUnaryHandlerSimple( OSServiceListProcedure, svc.List, connect.WithSchema(oSServiceMethods.ByName("List")), connect.WithHandlerOptions(opts...), ) - return "/fits.api.vm.v1.OSService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + return "/fits.api.mvm.v1.OSService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case OSServiceListProcedure: oSServiceListHandler.ServeHTTP(w, r) @@ -110,5 +110,5 @@ func NewOSServiceHandler(svc OSServiceHandler, opts ...connect.HandlerOption) (s type UnimplementedOSServiceHandler struct{} func (UnimplementedOSServiceHandler) List(context.Context, *v1.OSServiceListRequest) (*v1.OSServiceListResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.OSService.List is not implemented")) + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.OSService.List is not implemented")) } diff --git a/go/fits/api/vm/v1/vmv1connect/stagetype.connect.go b/go/fits/api/mvm/v1/mvmv1connect/stagetype.connect.go similarity index 79% rename from go/fits/api/vm/v1/vmv1connect/stagetype.connect.go rename to go/fits/api/mvm/v1/mvmv1connect/stagetype.connect.go index fba4637..84a92af 100644 --- a/go/fits/api/vm/v1/vmv1connect/stagetype.connect.go +++ b/go/fits/api/mvm/v1/mvmv1connect/stagetype.connect.go @@ -1,14 +1,14 @@ // Code generated by protoc-gen-connect-go. DO NOT EDIT. // -// Source: fits/api/vm/v1/stagetype.proto +// Source: fits/api/mvm/v1/stagetype.proto -package vmv1connect +package mvmv1connect import ( connect "connectrpc.com/connect" context "context" errors "errors" - v1 "github.com/fi-ts/api/go/fits/api/vm/v1" + v1 "github.com/fi-ts/api/go/fits/api/mvm/v1" http "net/http" strings "strings" ) @@ -22,7 +22,7 @@ const _ = connect.IsAtLeastVersion1_13_0 const ( // StageTypeServiceName is the fully-qualified name of the StageTypeService service. - StageTypeServiceName = "fits.api.vm.v1.StageTypeService" + StageTypeServiceName = "fits.api.mvm.v1.StageTypeService" ) // These constants are the fully-qualified names of the RPCs defined in this package. They're @@ -34,25 +34,25 @@ const ( // period. const ( // StageTypeServiceListProcedure is the fully-qualified name of the StageTypeService's List RPC. - StageTypeServiceListProcedure = "/fits.api.vm.v1.StageTypeService/List" + StageTypeServiceListProcedure = "/fits.api.mvm.v1.StageTypeService/List" ) -// StageTypeServiceClient is a client for the fits.api.vm.v1.StageTypeService service. +// StageTypeServiceClient is a client for the fits.api.mvm.v1.StageTypeService service. type StageTypeServiceClient interface { // Returns a list of all stage types available for a tenant. List(context.Context, *v1.StageTypeServiceListRequest) (*v1.StageTypeServiceListResponse, error) } -// NewStageTypeServiceClient constructs a client for the fits.api.vm.v1.StageTypeService service. By -// default, it uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, -// and sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the +// NewStageTypeServiceClient constructs a client for the fits.api.mvm.v1.StageTypeService service. +// By default, it uses the Connect protocol with the binary Protobuf Codec, asks for gzipped +// responses, and sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the // connect.WithGRPC() or connect.WithGRPCWeb() options. // // The URL supplied here should be the base URL for the Connect or gRPC server (for example, // http://api.acme.com or https://acme.com/grpc). func NewStageTypeServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) StageTypeServiceClient { baseURL = strings.TrimRight(baseURL, "/") - stageTypeServiceMethods := v1.File_fits_api_vm_v1_stagetype_proto.Services().ByName("StageTypeService").Methods() + stageTypeServiceMethods := v1.File_fits_api_mvm_v1_stagetype_proto.Services().ByName("StageTypeService").Methods() return &stageTypeServiceClient{ list: connect.NewClient[v1.StageTypeServiceListRequest, v1.StageTypeServiceListResponse]( httpClient, @@ -68,7 +68,7 @@ type stageTypeServiceClient struct { list *connect.Client[v1.StageTypeServiceListRequest, v1.StageTypeServiceListResponse] } -// List calls fits.api.vm.v1.StageTypeService.List. +// List calls fits.api.mvm.v1.StageTypeService.List. func (c *stageTypeServiceClient) List(ctx context.Context, req *v1.StageTypeServiceListRequest) (*v1.StageTypeServiceListResponse, error) { response, err := c.list.CallUnary(ctx, connect.NewRequest(req)) if response != nil { @@ -77,7 +77,7 @@ func (c *stageTypeServiceClient) List(ctx context.Context, req *v1.StageTypeServ return nil, err } -// StageTypeServiceHandler is an implementation of the fits.api.vm.v1.StageTypeService service. +// StageTypeServiceHandler is an implementation of the fits.api.mvm.v1.StageTypeService service. type StageTypeServiceHandler interface { // Returns a list of all stage types available for a tenant. List(context.Context, *v1.StageTypeServiceListRequest) (*v1.StageTypeServiceListResponse, error) @@ -89,14 +89,14 @@ type StageTypeServiceHandler interface { // By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf // and JSON codecs. They also support gzip compression. func NewStageTypeServiceHandler(svc StageTypeServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { - stageTypeServiceMethods := v1.File_fits_api_vm_v1_stagetype_proto.Services().ByName("StageTypeService").Methods() + stageTypeServiceMethods := v1.File_fits_api_mvm_v1_stagetype_proto.Services().ByName("StageTypeService").Methods() stageTypeServiceListHandler := connect.NewUnaryHandlerSimple( StageTypeServiceListProcedure, svc.List, connect.WithSchema(stageTypeServiceMethods.ByName("List")), connect.WithHandlerOptions(opts...), ) - return "/fits.api.vm.v1.StageTypeService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + return "/fits.api.mvm.v1.StageTypeService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case StageTypeServiceListProcedure: stageTypeServiceListHandler.ServeHTTP(w, r) @@ -110,5 +110,5 @@ func NewStageTypeServiceHandler(svc StageTypeServiceHandler, opts ...connect.Han type UnimplementedStageTypeServiceHandler struct{} func (UnimplementedStageTypeServiceHandler) List(context.Context, *v1.StageTypeServiceListRequest) (*v1.StageTypeServiceListResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.StageTypeService.List is not implemented")) + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.StageTypeService.List is not implemented")) } diff --git a/go/fits/api/vm/v1/vmv1connect/vlan.connect.go b/go/fits/api/mvm/v1/mvmv1connect/vlan.connect.go similarity index 50% rename from go/fits/api/vm/v1/vmv1connect/vlan.connect.go rename to go/fits/api/mvm/v1/mvmv1connect/vlan.connect.go index 323f4e4..820b019 100644 --- a/go/fits/api/vm/v1/vmv1connect/vlan.connect.go +++ b/go/fits/api/mvm/v1/mvmv1connect/vlan.connect.go @@ -1,14 +1,14 @@ // Code generated by protoc-gen-connect-go. DO NOT EDIT. // -// Source: fits/api/vm/v1/vlan.proto +// Source: fits/api/mvm/v1/vlan.proto -package vmv1connect +package mvmv1connect import ( connect "connectrpc.com/connect" context "context" errors "errors" - v1 "github.com/fi-ts/api/go/fits/api/vm/v1" + v1 "github.com/fi-ts/api/go/fits/api/mvm/v1" http "net/http" strings "strings" ) @@ -21,8 +21,8 @@ import ( const _ = connect.IsAtLeastVersion1_13_0 const ( - // VlanServiceName is the fully-qualified name of the VlanService service. - VlanServiceName = "fits.api.vm.v1.VlanService" + // VLANServiceName is the fully-qualified name of the VLANService service. + VLANServiceName = "fits.api.mvm.v1.VLANService" ) // These constants are the fully-qualified names of the RPCs defined in this package. They're @@ -33,43 +33,43 @@ const ( // reflection-formatted method names, remove the leading slash and convert the remaining slash to a // period. const ( - // VlanServiceListProcedure is the fully-qualified name of the VlanService's List RPC. - VlanServiceListProcedure = "/fits.api.vm.v1.VlanService/List" + // VLANServiceListProcedure is the fully-qualified name of the VLANService's List RPC. + VLANServiceListProcedure = "/fits.api.mvm.v1.VLANService/List" ) -// VlanServiceClient is a client for the fits.api.vm.v1.VlanService service. -type VlanServiceClient interface { +// VLANServiceClient is a client for the fits.api.mvm.v1.VLANService service. +type VLANServiceClient interface { // Returns a list of all VLANs available for a tenant. - List(context.Context, *v1.VlanServiceListRequest) (*v1.VlanServiceListResponse, error) + List(context.Context, *v1.VLANServiceListRequest) (*v1.VLANServiceListResponse, error) } -// NewVlanServiceClient constructs a client for the fits.api.vm.v1.VlanService service. By default, +// NewVLANServiceClient constructs a client for the fits.api.mvm.v1.VLANService service. By default, // it uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and // sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() // or connect.WithGRPCWeb() options. // // The URL supplied here should be the base URL for the Connect or gRPC server (for example, // http://api.acme.com or https://acme.com/grpc). -func NewVlanServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) VlanServiceClient { +func NewVLANServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) VLANServiceClient { baseURL = strings.TrimRight(baseURL, "/") - vlanServiceMethods := v1.File_fits_api_vm_v1_vlan_proto.Services().ByName("VlanService").Methods() - return &vlanServiceClient{ - list: connect.NewClient[v1.VlanServiceListRequest, v1.VlanServiceListResponse]( + vLANServiceMethods := v1.File_fits_api_mvm_v1_vlan_proto.Services().ByName("VLANService").Methods() + return &vLANServiceClient{ + list: connect.NewClient[v1.VLANServiceListRequest, v1.VLANServiceListResponse]( httpClient, - baseURL+VlanServiceListProcedure, - connect.WithSchema(vlanServiceMethods.ByName("List")), + baseURL+VLANServiceListProcedure, + connect.WithSchema(vLANServiceMethods.ByName("List")), connect.WithClientOptions(opts...), ), } } -// vlanServiceClient implements VlanServiceClient. -type vlanServiceClient struct { - list *connect.Client[v1.VlanServiceListRequest, v1.VlanServiceListResponse] +// vLANServiceClient implements VLANServiceClient. +type vLANServiceClient struct { + list *connect.Client[v1.VLANServiceListRequest, v1.VLANServiceListResponse] } -// List calls fits.api.vm.v1.VlanService.List. -func (c *vlanServiceClient) List(ctx context.Context, req *v1.VlanServiceListRequest) (*v1.VlanServiceListResponse, error) { +// List calls fits.api.mvm.v1.VLANService.List. +func (c *vLANServiceClient) List(ctx context.Context, req *v1.VLANServiceListRequest) (*v1.VLANServiceListResponse, error) { response, err := c.list.CallUnary(ctx, connect.NewRequest(req)) if response != nil { return response.Msg, err @@ -77,38 +77,38 @@ func (c *vlanServiceClient) List(ctx context.Context, req *v1.VlanServiceListReq return nil, err } -// VlanServiceHandler is an implementation of the fits.api.vm.v1.VlanService service. -type VlanServiceHandler interface { +// VLANServiceHandler is an implementation of the fits.api.mvm.v1.VLANService service. +type VLANServiceHandler interface { // Returns a list of all VLANs available for a tenant. - List(context.Context, *v1.VlanServiceListRequest) (*v1.VlanServiceListResponse, error) + List(context.Context, *v1.VLANServiceListRequest) (*v1.VLANServiceListResponse, error) } -// NewVlanServiceHandler builds an HTTP handler from the service implementation. It returns the path +// NewVLANServiceHandler builds an HTTP handler from the service implementation. It returns the path // on which to mount the handler and the handler itself. // // By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf // and JSON codecs. They also support gzip compression. -func NewVlanServiceHandler(svc VlanServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { - vlanServiceMethods := v1.File_fits_api_vm_v1_vlan_proto.Services().ByName("VlanService").Methods() - vlanServiceListHandler := connect.NewUnaryHandlerSimple( - VlanServiceListProcedure, +func NewVLANServiceHandler(svc VLANServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { + vLANServiceMethods := v1.File_fits_api_mvm_v1_vlan_proto.Services().ByName("VLANService").Methods() + vLANServiceListHandler := connect.NewUnaryHandlerSimple( + VLANServiceListProcedure, svc.List, - connect.WithSchema(vlanServiceMethods.ByName("List")), + connect.WithSchema(vLANServiceMethods.ByName("List")), connect.WithHandlerOptions(opts...), ) - return "/fits.api.vm.v1.VlanService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + return "/fits.api.mvm.v1.VLANService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { - case VlanServiceListProcedure: - vlanServiceListHandler.ServeHTTP(w, r) + case VLANServiceListProcedure: + vLANServiceListHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } }) } -// UnimplementedVlanServiceHandler returns CodeUnimplemented from all methods. -type UnimplementedVlanServiceHandler struct{} +// UnimplementedVLANServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedVLANServiceHandler struct{} -func (UnimplementedVlanServiceHandler) List(context.Context, *v1.VlanServiceListRequest) (*v1.VlanServiceListResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VlanService.List is not implemented")) +func (UnimplementedVLANServiceHandler) List(context.Context, *v1.VLANServiceListRequest) (*v1.VLANServiceListResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.VLANService.List is not implemented")) } diff --git a/go/fits/api/vm/v1/os.pb.go b/go/fits/api/mvm/v1/os.pb.go similarity index 62% rename from go/fits/api/vm/v1/os.pb.go rename to go/fits/api/mvm/v1/os.pb.go index 4d54777..3730fd6 100644 --- a/go/fits/api/vm/v1/os.pb.go +++ b/go/fits/api/mvm/v1/os.pb.go @@ -2,9 +2,9 @@ // versions: // protoc-gen-go v1.36.12 // protoc (unknown) -// source: fits/api/vm/v1/os.proto +// source: fits/api/mvm/v1/os.proto -package vmv1 +package mvmv1 import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" @@ -23,7 +23,7 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// OS is the definition of an available OS for VM instances +// OS is the definition of an available OS for MVM instances. type OS struct { state protoimpl.MessageState `protogen:"open.v1"` // Uuid of this OS @@ -40,7 +40,7 @@ type OS struct { func (x *OS) Reset() { *x = OS{} - mi := &file_fits_api_vm_v1_os_proto_msgTypes[0] + mi := &file_fits_api_mvm_v1_os_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -52,7 +52,7 @@ func (x *OS) String() string { func (*OS) ProtoMessage() {} func (x *OS) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_os_proto_msgTypes[0] + mi := &file_fits_api_mvm_v1_os_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -65,7 +65,7 @@ func (x *OS) ProtoReflect() protoreflect.Message { // Deprecated: Use OS.ProtoReflect.Descriptor instead. func (*OS) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_os_proto_rawDescGZIP(), []int{0} + return file_fits_api_mvm_v1_os_proto_rawDescGZIP(), []int{0} } func (x *OS) GetUuid() string { @@ -105,7 +105,7 @@ type OSServiceListRequest struct { func (x *OSServiceListRequest) Reset() { *x = OSServiceListRequest{} - mi := &file_fits_api_vm_v1_os_proto_msgTypes[1] + mi := &file_fits_api_mvm_v1_os_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -117,7 +117,7 @@ func (x *OSServiceListRequest) String() string { func (*OSServiceListRequest) ProtoMessage() {} func (x *OSServiceListRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_os_proto_msgTypes[1] + mi := &file_fits_api_mvm_v1_os_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -130,7 +130,7 @@ func (x *OSServiceListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OSServiceListRequest.ProtoReflect.Descriptor instead. func (*OSServiceListRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_os_proto_rawDescGZIP(), []int{1} + return file_fits_api_mvm_v1_os_proto_rawDescGZIP(), []int{1} } // OSServiceListResponse is the response payload for a OS list request @@ -144,7 +144,7 @@ type OSServiceListResponse struct { func (x *OSServiceListResponse) Reset() { *x = OSServiceListResponse{} - mi := &file_fits_api_vm_v1_os_proto_msgTypes[2] + mi := &file_fits_api_mvm_v1_os_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -156,7 +156,7 @@ func (x *OSServiceListResponse) String() string { func (*OSServiceListResponse) ProtoMessage() {} func (x *OSServiceListResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_os_proto_msgTypes[2] + mi := &file_fits_api_mvm_v1_os_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -169,7 +169,7 @@ func (x *OSServiceListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use OSServiceListResponse.ProtoReflect.Descriptor instead. func (*OSServiceListResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_os_proto_rawDescGZIP(), []int{2} + return file_fits_api_mvm_v1_os_proto_rawDescGZIP(), []int{2} } func (x *OSServiceListResponse) GetOperatingSystems() []*OS { @@ -179,45 +179,45 @@ func (x *OSServiceListResponse) GetOperatingSystems() []*OS { return nil } -var File_fits_api_vm_v1_os_proto protoreflect.FileDescriptor +var File_fits_api_mvm_v1_os_proto protoreflect.FileDescriptor -const file_fits_api_vm_v1_os_proto_rawDesc = "" + +const file_fits_api_mvm_v1_os_proto_rawDesc = "" + "\n" + - "\x17fits/api/vm/v1/os.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x8d\x01\n" + + "\x18fits/api/mvm/v1/os.proto\x12\x0ffits.api.mvm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x8d\x01\n" + "\x02OS\x12\x1c\n" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n" + "\x05title\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\x12\x1f\n" + "\x04type\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04type\x12%\n" + "\aversion\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\aversion\"\x16\n" + - "\x14OSServiceListRequest\"X\n" + - "\x15OSServiceListResponse\x12?\n" + - "\x11operating_systems\x18\x01 \x03(\v2\x12.fits.api.vm.v1.OSR\x10operatingSystems2m\n" + - "\tOSService\x12`\n" + - "\x04List\x12$.fits.api.vm.v1.OSServiceListRequest\x1a%.fits.api.vm.v1.OSServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xa5\x01\n" + - "\x12com.fits.api.vm.v1B\aOsProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" + "\x14OSServiceListRequest\"Y\n" + + "\x15OSServiceListResponse\x12@\n" + + "\x11operating_systems\x18\x01 \x03(\v2\x13.fits.api.mvm.v1.OSR\x10operatingSystems2o\n" + + "\tOSService\x12b\n" + + "\x04List\x12%.fits.api.mvm.v1.OSServiceListRequest\x1a&.fits.api.mvm.v1.OSServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xac\x01\n" + + "\x13com.fits.api.mvm.v1B\aOsProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03FAM\xaa\x02\x0fFits.Api.Mvm.V1\xca\x02\x0fFits\\Api\\Mvm\\V1\xe2\x02\x1bFits\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12Fits::Api::Mvm::V1b\x06proto3" var ( - file_fits_api_vm_v1_os_proto_rawDescOnce sync.Once - file_fits_api_vm_v1_os_proto_rawDescData []byte + file_fits_api_mvm_v1_os_proto_rawDescOnce sync.Once + file_fits_api_mvm_v1_os_proto_rawDescData []byte ) -func file_fits_api_vm_v1_os_proto_rawDescGZIP() []byte { - file_fits_api_vm_v1_os_proto_rawDescOnce.Do(func() { - file_fits_api_vm_v1_os_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_os_proto_rawDesc), len(file_fits_api_vm_v1_os_proto_rawDesc))) +func file_fits_api_mvm_v1_os_proto_rawDescGZIP() []byte { + file_fits_api_mvm_v1_os_proto_rawDescOnce.Do(func() { + file_fits_api_mvm_v1_os_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_mvm_v1_os_proto_rawDesc), len(file_fits_api_mvm_v1_os_proto_rawDesc))) }) - return file_fits_api_vm_v1_os_proto_rawDescData + return file_fits_api_mvm_v1_os_proto_rawDescData } -var file_fits_api_vm_v1_os_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_fits_api_vm_v1_os_proto_goTypes = []any{ - (*OS)(nil), // 0: fits.api.vm.v1.OS - (*OSServiceListRequest)(nil), // 1: fits.api.vm.v1.OSServiceListRequest - (*OSServiceListResponse)(nil), // 2: fits.api.vm.v1.OSServiceListResponse +var file_fits_api_mvm_v1_os_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_fits_api_mvm_v1_os_proto_goTypes = []any{ + (*OS)(nil), // 0: fits.api.mvm.v1.OS + (*OSServiceListRequest)(nil), // 1: fits.api.mvm.v1.OSServiceListRequest + (*OSServiceListResponse)(nil), // 2: fits.api.mvm.v1.OSServiceListResponse } -var file_fits_api_vm_v1_os_proto_depIdxs = []int32{ - 0, // 0: fits.api.vm.v1.OSServiceListResponse.operating_systems:type_name -> fits.api.vm.v1.OS - 1, // 1: fits.api.vm.v1.OSService.List:input_type -> fits.api.vm.v1.OSServiceListRequest - 2, // 2: fits.api.vm.v1.OSService.List:output_type -> fits.api.vm.v1.OSServiceListResponse +var file_fits_api_mvm_v1_os_proto_depIdxs = []int32{ + 0, // 0: fits.api.mvm.v1.OSServiceListResponse.operating_systems:type_name -> fits.api.mvm.v1.OS + 1, // 1: fits.api.mvm.v1.OSService.List:input_type -> fits.api.mvm.v1.OSServiceListRequest + 2, // 2: fits.api.mvm.v1.OSService.List:output_type -> fits.api.mvm.v1.OSServiceListResponse 2, // [2:3] is the sub-list for method output_type 1, // [1:2] is the sub-list for method input_type 1, // [1:1] is the sub-list for extension type_name @@ -225,26 +225,26 @@ var file_fits_api_vm_v1_os_proto_depIdxs = []int32{ 0, // [0:1] is the sub-list for field type_name } -func init() { file_fits_api_vm_v1_os_proto_init() } -func file_fits_api_vm_v1_os_proto_init() { - if File_fits_api_vm_v1_os_proto != nil { +func init() { file_fits_api_mvm_v1_os_proto_init() } +func file_fits_api_mvm_v1_os_proto_init() { + if File_fits_api_mvm_v1_os_proto != nil { return } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_os_proto_rawDesc), len(file_fits_api_vm_v1_os_proto_rawDesc)), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_mvm_v1_os_proto_rawDesc), len(file_fits_api_mvm_v1_os_proto_rawDesc)), NumEnums: 0, NumMessages: 3, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_fits_api_vm_v1_os_proto_goTypes, - DependencyIndexes: file_fits_api_vm_v1_os_proto_depIdxs, - MessageInfos: file_fits_api_vm_v1_os_proto_msgTypes, + GoTypes: file_fits_api_mvm_v1_os_proto_goTypes, + DependencyIndexes: file_fits_api_mvm_v1_os_proto_depIdxs, + MessageInfos: file_fits_api_mvm_v1_os_proto_msgTypes, }.Build() - File_fits_api_vm_v1_os_proto = out.File - file_fits_api_vm_v1_os_proto_goTypes = nil - file_fits_api_vm_v1_os_proto_depIdxs = nil + File_fits_api_mvm_v1_os_proto = out.File + file_fits_api_mvm_v1_os_proto_goTypes = nil + file_fits_api_mvm_v1_os_proto_depIdxs = nil } diff --git a/go/fits/api/vm/v1/stagetype.pb.go b/go/fits/api/mvm/v1/stagetype.pb.go similarity index 58% rename from go/fits/api/vm/v1/stagetype.pb.go rename to go/fits/api/mvm/v1/stagetype.pb.go index e43826c..6a37d05 100644 --- a/go/fits/api/vm/v1/stagetype.pb.go +++ b/go/fits/api/mvm/v1/stagetype.pb.go @@ -2,9 +2,9 @@ // versions: // protoc-gen-go v1.36.12 // protoc (unknown) -// source: fits/api/vm/v1/stagetype.proto +// source: fits/api/mvm/v1/stagetype.proto -package vmv1 +package mvmv1 import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" @@ -36,7 +36,7 @@ type StageType struct { func (x *StageType) Reset() { *x = StageType{} - mi := &file_fits_api_vm_v1_stagetype_proto_msgTypes[0] + mi := &file_fits_api_mvm_v1_stagetype_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -48,7 +48,7 @@ func (x *StageType) String() string { func (*StageType) ProtoMessage() {} func (x *StageType) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_stagetype_proto_msgTypes[0] + mi := &file_fits_api_mvm_v1_stagetype_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -61,7 +61,7 @@ func (x *StageType) ProtoReflect() protoreflect.Message { // Deprecated: Use StageType.ProtoReflect.Descriptor instead. func (*StageType) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_stagetype_proto_rawDescGZIP(), []int{0} + return file_fits_api_mvm_v1_stagetype_proto_rawDescGZIP(), []int{0} } func (x *StageType) GetUuid() string { @@ -87,7 +87,7 @@ type StageTypeServiceListRequest struct { func (x *StageTypeServiceListRequest) Reset() { *x = StageTypeServiceListRequest{} - mi := &file_fits_api_vm_v1_stagetype_proto_msgTypes[1] + mi := &file_fits_api_mvm_v1_stagetype_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -99,7 +99,7 @@ func (x *StageTypeServiceListRequest) String() string { func (*StageTypeServiceListRequest) ProtoMessage() {} func (x *StageTypeServiceListRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_stagetype_proto_msgTypes[1] + mi := &file_fits_api_mvm_v1_stagetype_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -112,7 +112,7 @@ func (x *StageTypeServiceListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StageTypeServiceListRequest.ProtoReflect.Descriptor instead. func (*StageTypeServiceListRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_stagetype_proto_rawDescGZIP(), []int{1} + return file_fits_api_mvm_v1_stagetype_proto_rawDescGZIP(), []int{1} } // StageTypeServiceListResponse is the response payload for a stage type list request @@ -126,7 +126,7 @@ type StageTypeServiceListResponse struct { func (x *StageTypeServiceListResponse) Reset() { *x = StageTypeServiceListResponse{} - mi := &file_fits_api_vm_v1_stagetype_proto_msgTypes[2] + mi := &file_fits_api_mvm_v1_stagetype_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -138,7 +138,7 @@ func (x *StageTypeServiceListResponse) String() string { func (*StageTypeServiceListResponse) ProtoMessage() {} func (x *StageTypeServiceListResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_stagetype_proto_msgTypes[2] + mi := &file_fits_api_mvm_v1_stagetype_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -151,7 +151,7 @@ func (x *StageTypeServiceListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StageTypeServiceListResponse.ProtoReflect.Descriptor instead. func (*StageTypeServiceListResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_stagetype_proto_rawDescGZIP(), []int{2} + return file_fits_api_mvm_v1_stagetype_proto_rawDescGZIP(), []int{2} } func (x *StageTypeServiceListResponse) GetStageTypes() []*StageType { @@ -161,44 +161,44 @@ func (x *StageTypeServiceListResponse) GetStageTypes() []*StageType { return nil } -var File_fits_api_vm_v1_stagetype_proto protoreflect.FileDescriptor +var File_fits_api_mvm_v1_stagetype_proto protoreflect.FileDescriptor -const file_fits_api_vm_v1_stagetype_proto_rawDesc = "" + +const file_fits_api_mvm_v1_stagetype_proto_rawDesc = "" + "\n" + - "\x1efits/api/vm/v1/stagetype.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"L\n" + + "\x1ffits/api/mvm/v1/stagetype.proto\x12\x0ffits.api.mvm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"L\n" + "\tStageType\x12\x1c\n" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n" + "\x05title\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\"\x1d\n" + - "\x1bStageTypeServiceListRequest\"Z\n" + - "\x1cStageTypeServiceListResponse\x12:\n" + - "\vstage_types\x18\x01 \x03(\v2\x19.fits.api.vm.v1.StageTypeR\n" + - "stageTypes2\x82\x01\n" + - "\x10StageTypeService\x12n\n" + - "\x04List\x12+.fits.api.vm.v1.StageTypeServiceListRequest\x1a,.fits.api.vm.v1.StageTypeServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xac\x01\n" + - "\x12com.fits.api.vm.v1B\x0eStagetypeProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" + "\x1bStageTypeServiceListRequest\"[\n" + + "\x1cStageTypeServiceListResponse\x12;\n" + + "\vstage_types\x18\x01 \x03(\v2\x1a.fits.api.mvm.v1.StageTypeR\n" + + "stageTypes2\x84\x01\n" + + "\x10StageTypeService\x12p\n" + + "\x04List\x12,.fits.api.mvm.v1.StageTypeServiceListRequest\x1a-.fits.api.mvm.v1.StageTypeServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xb3\x01\n" + + "\x13com.fits.api.mvm.v1B\x0eStagetypeProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03FAM\xaa\x02\x0fFits.Api.Mvm.V1\xca\x02\x0fFits\\Api\\Mvm\\V1\xe2\x02\x1bFits\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12Fits::Api::Mvm::V1b\x06proto3" var ( - file_fits_api_vm_v1_stagetype_proto_rawDescOnce sync.Once - file_fits_api_vm_v1_stagetype_proto_rawDescData []byte + file_fits_api_mvm_v1_stagetype_proto_rawDescOnce sync.Once + file_fits_api_mvm_v1_stagetype_proto_rawDescData []byte ) -func file_fits_api_vm_v1_stagetype_proto_rawDescGZIP() []byte { - file_fits_api_vm_v1_stagetype_proto_rawDescOnce.Do(func() { - file_fits_api_vm_v1_stagetype_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_stagetype_proto_rawDesc), len(file_fits_api_vm_v1_stagetype_proto_rawDesc))) +func file_fits_api_mvm_v1_stagetype_proto_rawDescGZIP() []byte { + file_fits_api_mvm_v1_stagetype_proto_rawDescOnce.Do(func() { + file_fits_api_mvm_v1_stagetype_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_mvm_v1_stagetype_proto_rawDesc), len(file_fits_api_mvm_v1_stagetype_proto_rawDesc))) }) - return file_fits_api_vm_v1_stagetype_proto_rawDescData + return file_fits_api_mvm_v1_stagetype_proto_rawDescData } -var file_fits_api_vm_v1_stagetype_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_fits_api_vm_v1_stagetype_proto_goTypes = []any{ - (*StageType)(nil), // 0: fits.api.vm.v1.StageType - (*StageTypeServiceListRequest)(nil), // 1: fits.api.vm.v1.StageTypeServiceListRequest - (*StageTypeServiceListResponse)(nil), // 2: fits.api.vm.v1.StageTypeServiceListResponse +var file_fits_api_mvm_v1_stagetype_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_fits_api_mvm_v1_stagetype_proto_goTypes = []any{ + (*StageType)(nil), // 0: fits.api.mvm.v1.StageType + (*StageTypeServiceListRequest)(nil), // 1: fits.api.mvm.v1.StageTypeServiceListRequest + (*StageTypeServiceListResponse)(nil), // 2: fits.api.mvm.v1.StageTypeServiceListResponse } -var file_fits_api_vm_v1_stagetype_proto_depIdxs = []int32{ - 0, // 0: fits.api.vm.v1.StageTypeServiceListResponse.stage_types:type_name -> fits.api.vm.v1.StageType - 1, // 1: fits.api.vm.v1.StageTypeService.List:input_type -> fits.api.vm.v1.StageTypeServiceListRequest - 2, // 2: fits.api.vm.v1.StageTypeService.List:output_type -> fits.api.vm.v1.StageTypeServiceListResponse +var file_fits_api_mvm_v1_stagetype_proto_depIdxs = []int32{ + 0, // 0: fits.api.mvm.v1.StageTypeServiceListResponse.stage_types:type_name -> fits.api.mvm.v1.StageType + 1, // 1: fits.api.mvm.v1.StageTypeService.List:input_type -> fits.api.mvm.v1.StageTypeServiceListRequest + 2, // 2: fits.api.mvm.v1.StageTypeService.List:output_type -> fits.api.mvm.v1.StageTypeServiceListResponse 2, // [2:3] is the sub-list for method output_type 1, // [1:2] is the sub-list for method input_type 1, // [1:1] is the sub-list for extension type_name @@ -206,26 +206,26 @@ var file_fits_api_vm_v1_stagetype_proto_depIdxs = []int32{ 0, // [0:1] is the sub-list for field type_name } -func init() { file_fits_api_vm_v1_stagetype_proto_init() } -func file_fits_api_vm_v1_stagetype_proto_init() { - if File_fits_api_vm_v1_stagetype_proto != nil { +func init() { file_fits_api_mvm_v1_stagetype_proto_init() } +func file_fits_api_mvm_v1_stagetype_proto_init() { + if File_fits_api_mvm_v1_stagetype_proto != nil { return } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_stagetype_proto_rawDesc), len(file_fits_api_vm_v1_stagetype_proto_rawDesc)), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_mvm_v1_stagetype_proto_rawDesc), len(file_fits_api_mvm_v1_stagetype_proto_rawDesc)), NumEnums: 0, NumMessages: 3, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_fits_api_vm_v1_stagetype_proto_goTypes, - DependencyIndexes: file_fits_api_vm_v1_stagetype_proto_depIdxs, - MessageInfos: file_fits_api_vm_v1_stagetype_proto_msgTypes, + GoTypes: file_fits_api_mvm_v1_stagetype_proto_goTypes, + DependencyIndexes: file_fits_api_mvm_v1_stagetype_proto_depIdxs, + MessageInfos: file_fits_api_mvm_v1_stagetype_proto_msgTypes, }.Build() - File_fits_api_vm_v1_stagetype_proto = out.File - file_fits_api_vm_v1_stagetype_proto_goTypes = nil - file_fits_api_vm_v1_stagetype_proto_depIdxs = nil + File_fits_api_mvm_v1_stagetype_proto = out.File + file_fits_api_mvm_v1_stagetype_proto_goTypes = nil + file_fits_api_mvm_v1_stagetype_proto_depIdxs = nil } diff --git a/go/fits/api/vm/v1/vlan.pb.go b/go/fits/api/mvm/v1/vlan.pb.go similarity index 53% rename from go/fits/api/vm/v1/vlan.pb.go rename to go/fits/api/mvm/v1/vlan.pb.go index c968323..57253f3 100644 --- a/go/fits/api/vm/v1/vlan.pb.go +++ b/go/fits/api/mvm/v1/vlan.pb.go @@ -2,9 +2,9 @@ // versions: // protoc-gen-go v1.36.12 // protoc (unknown) -// source: fits/api/vm/v1/vlan.proto +// source: fits/api/mvm/v1/vlan.proto -package vmv1 +package mvmv1 import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" @@ -23,8 +23,8 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// Vlan is a VLAN that a VM can be connected to. -type Vlan struct { +// VLAN is a VLAN that a MVM can be connected to. +type VLAN struct { state protoimpl.MessageState `protogen:"open.v1"` // Uuid of this VLAN Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` @@ -54,21 +54,21 @@ type Vlan struct { sizeCache protoimpl.SizeCache } -func (x *Vlan) Reset() { - *x = Vlan{} - mi := &file_fits_api_vm_v1_vlan_proto_msgTypes[0] +func (x *VLAN) Reset() { + *x = VLAN{} + mi := &file_fits_api_mvm_v1_vlan_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Vlan) String() string { +func (x *VLAN) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Vlan) ProtoMessage() {} +func (*VLAN) ProtoMessage() {} -func (x *Vlan) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vlan_proto_msgTypes[0] +func (x *VLAN) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_vlan_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -79,97 +79,97 @@ func (x *Vlan) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Vlan.ProtoReflect.Descriptor instead. -func (*Vlan) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vlan_proto_rawDescGZIP(), []int{0} +// Deprecated: Use VLAN.ProtoReflect.Descriptor instead. +func (*VLAN) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_vlan_proto_rawDescGZIP(), []int{0} } -func (x *Vlan) GetUuid() string { +func (x *VLAN) GetUuid() string { if x != nil { return x.Uuid } return "" } -func (x *Vlan) GetId() int32 { +func (x *VLAN) GetId() int32 { if x != nil { return x.Id } return 0 } -func (x *Vlan) GetSubnetTitle() string { +func (x *VLAN) GetSubnetTitle() string { if x != nil { return x.SubnetTitle } return "" } -func (x *Vlan) GetSubnet() string { +func (x *VLAN) GetSubnet() string { if x != nil { return x.Subnet } return "" } -func (x *Vlan) GetSubnetmask() string { +func (x *VLAN) GetSubnetmask() string { if x != nil { return x.Subnetmask } return "" } -func (x *Vlan) GetGateway() string { +func (x *VLAN) GetGateway() string { if x != nil { return x.Gateway } return "" } -func (x *Vlan) GetIpRangeStart() string { +func (x *VLAN) GetIpRangeStart() string { if x != nil { return x.IpRangeStart } return "" } -func (x *Vlan) GetIpRangeEnd() string { +func (x *VLAN) GetIpRangeEnd() string { if x != nil { return x.IpRangeEnd } return "" } -func (x *Vlan) GetUseDhcp() bool { +func (x *VLAN) GetUseDhcp() bool { if x != nil { return x.UseDhcp } return false } -func (x *Vlan) GetLocationUuid() string { +func (x *VLAN) GetLocationUuid() string { if x != nil && x.LocationUuid != nil { return *x.LocationUuid } return "" } -func (x *Vlan) GetStageTypeUuid() string { +func (x *VLAN) GetStageTypeUuid() string { if x != nil { return x.StageTypeUuid } return "" } -func (x *Vlan) GetTenant() string { +func (x *VLAN) GetTenant() string { if x != nil { return x.Tenant } return "" } -// VlanServiceListRequest is the request payload for a VLAN list request. -type VlanServiceListRequest struct { +// VLANServiceListRequest is the request payload for a VLAN list request. +type VLANServiceListRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // Tenant to list available VLANs for Tenant string `protobuf:"bytes,1,opt,name=tenant,proto3" json:"tenant,omitempty"` @@ -177,21 +177,21 @@ type VlanServiceListRequest struct { sizeCache protoimpl.SizeCache } -func (x *VlanServiceListRequest) Reset() { - *x = VlanServiceListRequest{} - mi := &file_fits_api_vm_v1_vlan_proto_msgTypes[1] +func (x *VLANServiceListRequest) Reset() { + *x = VLANServiceListRequest{} + mi := &file_fits_api_mvm_v1_vlan_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *VlanServiceListRequest) String() string { +func (x *VLANServiceListRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VlanServiceListRequest) ProtoMessage() {} +func (*VLANServiceListRequest) ProtoMessage() {} -func (x *VlanServiceListRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vlan_proto_msgTypes[1] +func (x *VLANServiceListRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_vlan_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -202,42 +202,42 @@ func (x *VlanServiceListRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VlanServiceListRequest.ProtoReflect.Descriptor instead. -func (*VlanServiceListRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vlan_proto_rawDescGZIP(), []int{1} +// Deprecated: Use VLANServiceListRequest.ProtoReflect.Descriptor instead. +func (*VLANServiceListRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_vlan_proto_rawDescGZIP(), []int{1} } -func (x *VlanServiceListRequest) GetTenant() string { +func (x *VLANServiceListRequest) GetTenant() string { if x != nil { return x.Tenant } return "" } -// VlanServiceListResponse is the response payload for a VLAN list request -type VlanServiceListResponse struct { +// VLANServiceListResponse is the response payload for a VLAN list request +type VLANServiceListResponse struct { state protoimpl.MessageState `protogen:"open.v1"` // The available VLANs - Vlans []*Vlan `protobuf:"bytes,1,rep,name=vlans,proto3" json:"vlans,omitempty"` + Vlans []*VLAN `protobuf:"bytes,1,rep,name=vlans,proto3" json:"vlans,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *VlanServiceListResponse) Reset() { - *x = VlanServiceListResponse{} - mi := &file_fits_api_vm_v1_vlan_proto_msgTypes[2] +func (x *VLANServiceListResponse) Reset() { + *x = VLANServiceListResponse{} + mi := &file_fits_api_mvm_v1_vlan_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *VlanServiceListResponse) String() string { +func (x *VLANServiceListResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VlanServiceListResponse) ProtoMessage() {} +func (*VLANServiceListResponse) ProtoMessage() {} -func (x *VlanServiceListResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vlan_proto_msgTypes[2] +func (x *VLANServiceListResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_vlan_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -248,24 +248,24 @@ func (x *VlanServiceListResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VlanServiceListResponse.ProtoReflect.Descriptor instead. -func (*VlanServiceListResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vlan_proto_rawDescGZIP(), []int{2} +// Deprecated: Use VLANServiceListResponse.ProtoReflect.Descriptor instead. +func (*VLANServiceListResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_vlan_proto_rawDescGZIP(), []int{2} } -func (x *VlanServiceListResponse) GetVlans() []*Vlan { +func (x *VLANServiceListResponse) GetVlans() []*VLAN { if x != nil { return x.Vlans } return nil } -var File_fits_api_vm_v1_vlan_proto protoreflect.FileDescriptor +var File_fits_api_mvm_v1_vlan_proto protoreflect.FileDescriptor -const file_fits_api_vm_v1_vlan_proto_rawDesc = "" + +const file_fits_api_mvm_v1_vlan_proto_rawDesc = "" + "\n" + - "\x19fits/api/vm/v1/vlan.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xb6\x03\n" + - "\x04Vlan\x12\x1c\n" + + "\x1afits/api/mvm/v1/vlan.proto\x12\x0ffits.api.mvm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xb6\x03\n" + + "\x04VLAN\x12\x1c\n" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x0e\n" + "\x02id\x18\x02 \x01(\x05R\x02id\x12.\n" + "\fsubnet_title\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\vsubnetTitle\x12\x16\n" + @@ -282,36 +282,36 @@ const file_fits_api_vm_v1_vlan_proto_rawDesc = "" + "\x0fstage_type_uuid\x18\x0e \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12#\n" + "\x06tenant\x18\x0f \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x10\n" + "\x0e_location_uuid\"=\n" + - "\x16VlanServiceListRequest\x12#\n" + - "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"E\n" + - "\x17VlanServiceListResponse\x12*\n" + - "\x05vlans\x18\x01 \x03(\v2\x14.fits.api.vm.v1.VlanR\x05vlans2s\n" + - "\vVlanService\x12d\n" + - "\x04List\x12&.fits.api.vm.v1.VlanServiceListRequest\x1a'.fits.api.vm.v1.VlanServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xa7\x01\n" + - "\x12com.fits.api.vm.v1B\tVlanProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" + "\x16VLANServiceListRequest\x12#\n" + + "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"F\n" + + "\x17VLANServiceListResponse\x12+\n" + + "\x05vlans\x18\x01 \x03(\v2\x15.fits.api.mvm.v1.VLANR\x05vlans2u\n" + + "\vVLANService\x12f\n" + + "\x04List\x12'.fits.api.mvm.v1.VLANServiceListRequest\x1a(.fits.api.mvm.v1.VLANServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xae\x01\n" + + "\x13com.fits.api.mvm.v1B\tVlanProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03FAM\xaa\x02\x0fFits.Api.Mvm.V1\xca\x02\x0fFits\\Api\\Mvm\\V1\xe2\x02\x1bFits\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12Fits::Api::Mvm::V1b\x06proto3" var ( - file_fits_api_vm_v1_vlan_proto_rawDescOnce sync.Once - file_fits_api_vm_v1_vlan_proto_rawDescData []byte + file_fits_api_mvm_v1_vlan_proto_rawDescOnce sync.Once + file_fits_api_mvm_v1_vlan_proto_rawDescData []byte ) -func file_fits_api_vm_v1_vlan_proto_rawDescGZIP() []byte { - file_fits_api_vm_v1_vlan_proto_rawDescOnce.Do(func() { - file_fits_api_vm_v1_vlan_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_vlan_proto_rawDesc), len(file_fits_api_vm_v1_vlan_proto_rawDesc))) +func file_fits_api_mvm_v1_vlan_proto_rawDescGZIP() []byte { + file_fits_api_mvm_v1_vlan_proto_rawDescOnce.Do(func() { + file_fits_api_mvm_v1_vlan_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_mvm_v1_vlan_proto_rawDesc), len(file_fits_api_mvm_v1_vlan_proto_rawDesc))) }) - return file_fits_api_vm_v1_vlan_proto_rawDescData + return file_fits_api_mvm_v1_vlan_proto_rawDescData } -var file_fits_api_vm_v1_vlan_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_fits_api_vm_v1_vlan_proto_goTypes = []any{ - (*Vlan)(nil), // 0: fits.api.vm.v1.Vlan - (*VlanServiceListRequest)(nil), // 1: fits.api.vm.v1.VlanServiceListRequest - (*VlanServiceListResponse)(nil), // 2: fits.api.vm.v1.VlanServiceListResponse +var file_fits_api_mvm_v1_vlan_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_fits_api_mvm_v1_vlan_proto_goTypes = []any{ + (*VLAN)(nil), // 0: fits.api.mvm.v1.VLAN + (*VLANServiceListRequest)(nil), // 1: fits.api.mvm.v1.VLANServiceListRequest + (*VLANServiceListResponse)(nil), // 2: fits.api.mvm.v1.VLANServiceListResponse } -var file_fits_api_vm_v1_vlan_proto_depIdxs = []int32{ - 0, // 0: fits.api.vm.v1.VlanServiceListResponse.vlans:type_name -> fits.api.vm.v1.Vlan - 1, // 1: fits.api.vm.v1.VlanService.List:input_type -> fits.api.vm.v1.VlanServiceListRequest - 2, // 2: fits.api.vm.v1.VlanService.List:output_type -> fits.api.vm.v1.VlanServiceListResponse +var file_fits_api_mvm_v1_vlan_proto_depIdxs = []int32{ + 0, // 0: fits.api.mvm.v1.VLANServiceListResponse.vlans:type_name -> fits.api.mvm.v1.VLAN + 1, // 1: fits.api.mvm.v1.VLANService.List:input_type -> fits.api.mvm.v1.VLANServiceListRequest + 2, // 2: fits.api.mvm.v1.VLANService.List:output_type -> fits.api.mvm.v1.VLANServiceListResponse 2, // [2:3] is the sub-list for method output_type 1, // [1:2] is the sub-list for method input_type 1, // [1:1] is the sub-list for extension type_name @@ -319,27 +319,27 @@ var file_fits_api_vm_v1_vlan_proto_depIdxs = []int32{ 0, // [0:1] is the sub-list for field type_name } -func init() { file_fits_api_vm_v1_vlan_proto_init() } -func file_fits_api_vm_v1_vlan_proto_init() { - if File_fits_api_vm_v1_vlan_proto != nil { +func init() { file_fits_api_mvm_v1_vlan_proto_init() } +func file_fits_api_mvm_v1_vlan_proto_init() { + if File_fits_api_mvm_v1_vlan_proto != nil { return } - file_fits_api_vm_v1_vlan_proto_msgTypes[0].OneofWrappers = []any{} + file_fits_api_mvm_v1_vlan_proto_msgTypes[0].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_vlan_proto_rawDesc), len(file_fits_api_vm_v1_vlan_proto_rawDesc)), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_mvm_v1_vlan_proto_rawDesc), len(file_fits_api_mvm_v1_vlan_proto_rawDesc)), NumEnums: 0, NumMessages: 3, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_fits_api_vm_v1_vlan_proto_goTypes, - DependencyIndexes: file_fits_api_vm_v1_vlan_proto_depIdxs, - MessageInfos: file_fits_api_vm_v1_vlan_proto_msgTypes, + GoTypes: file_fits_api_mvm_v1_vlan_proto_goTypes, + DependencyIndexes: file_fits_api_mvm_v1_vlan_proto_depIdxs, + MessageInfos: file_fits_api_mvm_v1_vlan_proto_msgTypes, }.Build() - File_fits_api_vm_v1_vlan_proto = out.File - file_fits_api_vm_v1_vlan_proto_goTypes = nil - file_fits_api_vm_v1_vlan_proto_depIdxs = nil + File_fits_api_mvm_v1_vlan_proto = out.File + file_fits_api_mvm_v1_vlan_proto_goTypes = nil + file_fits_api_mvm_v1_vlan_proto_depIdxs = nil } diff --git a/go/fits/api/vm/v1/service.pb.go b/go/fits/api/vm/v1/service.pb.go deleted file mode 100644 index 628f4ad..0000000 --- a/go/fits/api/vm/v1/service.pb.go +++ /dev/null @@ -1,231 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.36.12 -// protoc (unknown) -// source: fits/api/vm/v1/service.proto - -package vmv1 - -import ( - _ "github.com/fi-ts/api/go/fits/api/v1" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" - unsafe "unsafe" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// TODO what is a service? -type Service struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Uuid of this Service - // TODO this is actually not a UUID, but a string. It can be "special-customer" e.g. - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // title of the Service - Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *Service) Reset() { - *x = Service{} - mi := &file_fits_api_vm_v1_service_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Service) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Service) ProtoMessage() {} - -func (x *Service) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_service_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Service.ProtoReflect.Descriptor instead. -func (*Service) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_service_proto_rawDescGZIP(), []int{0} -} - -func (x *Service) GetUuid() string { - if x != nil { - return x.Uuid - } - return "" -} - -func (x *Service) GetTitle() string { - if x != nil { - return x.Title - } - return "" -} - -// ServiceServiceListRequest is the request payload for a service list request. -// The upstream nulink API accepts no body or parameters, so this is intentionally empty. -type ServiceServiceListRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ServiceServiceListRequest) Reset() { - *x = ServiceServiceListRequest{} - mi := &file_fits_api_vm_v1_service_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ServiceServiceListRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceServiceListRequest) ProtoMessage() {} - -func (x *ServiceServiceListRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_service_proto_msgTypes[1] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServiceServiceListRequest.ProtoReflect.Descriptor instead. -func (*ServiceServiceListRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_service_proto_rawDescGZIP(), []int{1} -} - -// ServiceServiceListResponse is the response payload for a service list request -type ServiceServiceListResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - // The available services - Services []*Service `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ServiceServiceListResponse) Reset() { - *x = ServiceServiceListResponse{} - mi := &file_fits_api_vm_v1_service_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ServiceServiceListResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceServiceListResponse) ProtoMessage() {} - -func (x *ServiceServiceListResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_service_proto_msgTypes[2] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServiceServiceListResponse.ProtoReflect.Descriptor instead. -func (*ServiceServiceListResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_service_proto_rawDescGZIP(), []int{2} -} - -func (x *ServiceServiceListResponse) GetServices() []*Service { - if x != nil { - return x.Services - } - return nil -} - -var File_fits_api_vm_v1_service_proto protoreflect.FileDescriptor - -const file_fits_api_vm_v1_service_proto_rawDesc = "" + - "\n" + - "\x1cfits/api/vm/v1/service.proto\x12\x0efits.api.vm.v1\x1a\x18fits/api/v1/common.proto\"3\n" + - "\aService\x12\x12\n" + - "\x04uuid\x18\x01 \x01(\tR\x04uuid\x12\x14\n" + - "\x05title\x18\x02 \x01(\tR\x05title\"\x1b\n" + - "\x19ServiceServiceListRequest\"Q\n" + - "\x1aServiceServiceListResponse\x123\n" + - "\bservices\x18\x01 \x03(\v2\x17.fits.api.vm.v1.ServiceR\bservices2|\n" + - "\x0eServiceService\x12j\n" + - "\x04List\x12).fits.api.vm.v1.ServiceServiceListRequest\x1a*.fits.api.vm.v1.ServiceServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xaa\x01\n" + - "\x12com.fits.api.vm.v1B\fServiceProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" - -var ( - file_fits_api_vm_v1_service_proto_rawDescOnce sync.Once - file_fits_api_vm_v1_service_proto_rawDescData []byte -) - -func file_fits_api_vm_v1_service_proto_rawDescGZIP() []byte { - file_fits_api_vm_v1_service_proto_rawDescOnce.Do(func() { - file_fits_api_vm_v1_service_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_service_proto_rawDesc), len(file_fits_api_vm_v1_service_proto_rawDesc))) - }) - return file_fits_api_vm_v1_service_proto_rawDescData -} - -var file_fits_api_vm_v1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_fits_api_vm_v1_service_proto_goTypes = []any{ - (*Service)(nil), // 0: fits.api.vm.v1.Service - (*ServiceServiceListRequest)(nil), // 1: fits.api.vm.v1.ServiceServiceListRequest - (*ServiceServiceListResponse)(nil), // 2: fits.api.vm.v1.ServiceServiceListResponse -} -var file_fits_api_vm_v1_service_proto_depIdxs = []int32{ - 0, // 0: fits.api.vm.v1.ServiceServiceListResponse.services:type_name -> fits.api.vm.v1.Service - 1, // 1: fits.api.vm.v1.ServiceService.List:input_type -> fits.api.vm.v1.ServiceServiceListRequest - 2, // 2: fits.api.vm.v1.ServiceService.List:output_type -> fits.api.vm.v1.ServiceServiceListResponse - 2, // [2:3] is the sub-list for method output_type - 1, // [1:2] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_fits_api_vm_v1_service_proto_init() } -func file_fits_api_vm_v1_service_proto_init() { - if File_fits_api_vm_v1_service_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_service_proto_rawDesc), len(file_fits_api_vm_v1_service_proto_rawDesc)), - NumEnums: 0, - NumMessages: 3, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_fits_api_vm_v1_service_proto_goTypes, - DependencyIndexes: file_fits_api_vm_v1_service_proto_depIdxs, - MessageInfos: file_fits_api_vm_v1_service_proto_msgTypes, - }.Build() - File_fits_api_vm_v1_service_proto = out.File - file_fits_api_vm_v1_service_proto_goTypes = nil - file_fits_api_vm_v1_service_proto_depIdxs = nil -} diff --git a/go/fits/api/vm/v1/vm.pb.go b/go/fits/api/vm/v1/vm.pb.go deleted file mode 100644 index 841d15f..0000000 --- a/go/fits/api/vm/v1/vm.pb.go +++ /dev/null @@ -1,3206 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.36.12 -// protoc (unknown) -// source: fits/api/vm/v1/vm.proto - -package vmv1 - -import ( - _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" - v1 "github.com/fi-ts/api/go/fits/api/v1" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" - unsafe "unsafe" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Availability specifies the availability level of a VM; higher value = higher availability. -type Availability int32 - -const ( - // AVAILABILITY_UNSPECIFIED is not specified. - Availability_AVAILABILITY_UNSPECIFIED Availability = 0 - // AVAILABILITY_V0 is availability level V0. - Availability_AVAILABILITY_V0 Availability = 1 - // AVAILABILITY_V1 is availability level V1. - Availability_AVAILABILITY_V1 Availability = 2 - // AVAILABILITY_V2 is availability level V2. - Availability_AVAILABILITY_V2 Availability = 3 - // AVAILABILITY_V3 is availability level V3. - Availability_AVAILABILITY_V3 Availability = 4 -) - -// Enum value maps for Availability. -var ( - Availability_name = map[int32]string{ - 0: "AVAILABILITY_UNSPECIFIED", - 1: "AVAILABILITY_V0", - 2: "AVAILABILITY_V1", - 3: "AVAILABILITY_V2", - 4: "AVAILABILITY_V3", - } - Availability_value = map[string]int32{ - "AVAILABILITY_UNSPECIFIED": 0, - "AVAILABILITY_V0": 1, - "AVAILABILITY_V1": 2, - "AVAILABILITY_V2": 3, - "AVAILABILITY_V3": 4, - } -) - -func (x Availability) Enum() *Availability { - p := new(Availability) - *p = x - return p -} - -func (x Availability) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Availability) Descriptor() protoreflect.EnumDescriptor { - return file_fits_api_vm_v1_vm_proto_enumTypes[0].Descriptor() -} - -func (Availability) Type() protoreflect.EnumType { - return &file_fits_api_vm_v1_vm_proto_enumTypes[0] -} - -func (x Availability) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Availability.Descriptor instead. -func (Availability) EnumDescriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{0} -} - -// ServiceClass specifies the service tier of a VM; higher value = higher tier. -// Only certain combinations with Availability are valid. -type ServiceClass int32 - -const ( - // SERVICE_CLASS_UNSPECIFIED is not specified. - ServiceClass_SERVICE_CLASS_UNSPECIFIED ServiceClass = 0 - // SERVICE_CLASS_SZ1 is service class SZ1. - ServiceClass_SERVICE_CLASS_SZ1 ServiceClass = 1 - // SERVICE_CLASS_SZ2 is service class SZ2. - ServiceClass_SERVICE_CLASS_SZ2 ServiceClass = 2 - // SERVICE_CLASS_SZ3 is service class SZ3. - ServiceClass_SERVICE_CLASS_SZ3 ServiceClass = 3 -) - -// Enum value maps for ServiceClass. -var ( - ServiceClass_name = map[int32]string{ - 0: "SERVICE_CLASS_UNSPECIFIED", - 1: "SERVICE_CLASS_SZ1", - 2: "SERVICE_CLASS_SZ2", - 3: "SERVICE_CLASS_SZ3", - } - ServiceClass_value = map[string]int32{ - "SERVICE_CLASS_UNSPECIFIED": 0, - "SERVICE_CLASS_SZ1": 1, - "SERVICE_CLASS_SZ2": 2, - "SERVICE_CLASS_SZ3": 3, - } -) - -func (x ServiceClass) Enum() *ServiceClass { - p := new(ServiceClass) - *p = x - return p -} - -func (x ServiceClass) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ServiceClass) Descriptor() protoreflect.EnumDescriptor { - return file_fits_api_vm_v1_vm_proto_enumTypes[1].Descriptor() -} - -func (ServiceClass) Type() protoreflect.EnumType { - return &file_fits_api_vm_v1_vm_proto_enumTypes[1] -} - -func (x ServiceClass) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ServiceClass.Descriptor instead. -func (ServiceClass) EnumDescriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{1} -} - -// Linux-specific VM details. -type LinuxDetails struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Disks configured on the Linux VM. - Disks []*LinuxDisk `protobuf:"bytes,1,rep,name=disks,proto3" json:"disks,omitempty"` - // UUID of the LDAP directory the VM is integrated with. - LdapUuid string `protobuf:"bytes,2,opt,name=ldap_uuid,json=ldapUuid,proto3" json:"ldap_uuid,omitempty"` - // Linux-specific FQDN, derived from the name at creation or generated by the backend. - LdapFqdn string `protobuf:"bytes,3,opt,name=ldap_fqdn,json=ldapFqdn,proto3" json:"ldap_fqdn,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *LinuxDetails) Reset() { - *x = LinuxDetails{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *LinuxDetails) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LinuxDetails) ProtoMessage() {} - -func (x *LinuxDetails) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LinuxDetails.ProtoReflect.Descriptor instead. -func (*LinuxDetails) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{0} -} - -func (x *LinuxDetails) GetDisks() []*LinuxDisk { - if x != nil { - return x.Disks - } - return nil -} - -func (x *LinuxDetails) GetLdapUuid() string { - if x != nil { - return x.LdapUuid - } - return "" -} - -func (x *LinuxDetails) GetLdapFqdn() string { - if x != nil { - return x.LdapFqdn - } - return "" -} - -// Windows-specific VM details. -type WindowsDetails struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Disks configured on the Windows VM. - Disks []*WindowsDisk `protobuf:"bytes,1,rep,name=disks,proto3" json:"disks,omitempty"` - // UUID of the Windows domain the VM has joined. - DomainUuid string `protobuf:"bytes,2,opt,name=domain_uuid,json=domainUuid,proto3" json:"domain_uuid,omitempty"` - // Windows-specific FQDN, derived from the name at creation or generated by the backend. - DomainFqdn string `protobuf:"bytes,3,opt,name=domain_fqdn,json=domainFqdn,proto3" json:"domain_fqdn,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *WindowsDetails) Reset() { - *x = WindowsDetails{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *WindowsDetails) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WindowsDetails) ProtoMessage() {} - -func (x *WindowsDetails) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[1] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WindowsDetails.ProtoReflect.Descriptor instead. -func (*WindowsDetails) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{1} -} - -func (x *WindowsDetails) GetDisks() []*WindowsDisk { - if x != nil { - return x.Disks - } - return nil -} - -func (x *WindowsDetails) GetDomainUuid() string { - if x != nil { - return x.DomainUuid - } - return "" -} - -func (x *WindowsDetails) GetDomainFqdn() string { - if x != nil { - return x.DomainFqdn - } - return "" -} - -// A network interface of a VM. IPv4 only; IPv6 is not yet supported. -type NetworkInterface struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of this interface. - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // IPv4 address assigned to this interface. - Ipaddress string `protobuf:"bytes,2,opt,name=ipaddress,proto3" json:"ipaddress,omitempty"` - // MAC address of this interface. - Macaddress string `protobuf:"bytes,3,opt,name=macaddress,proto3" json:"macaddress,omitempty"` // TODO: add validation - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *NetworkInterface) Reset() { - *x = NetworkInterface{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *NetworkInterface) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NetworkInterface) ProtoMessage() {} - -func (x *NetworkInterface) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[2] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NetworkInterface.ProtoReflect.Descriptor instead. -func (*NetworkInterface) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{2} -} - -func (x *NetworkInterface) GetUuid() string { - if x != nil { - return x.Uuid - } - return "" -} - -func (x *NetworkInterface) GetIpaddress() string { - if x != nil { - return x.Ipaddress - } - return "" -} - -func (x *NetworkInterface) GetMacaddress() string { - if x != nil { - return x.Macaddress - } - return "" -} - -// A VM instance as returned by the API. -type VMInstance struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of this VM. - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // Metadata for this VM. - // TODO: dates are available in the nulink db but not passed through yet. - Meta *v1.Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` - // FQDN of the VM, derived from the name at creation or generated by the backend. - Fqdn string `protobuf:"bytes,3,opt,name=fqdn,proto3" json:"fqdn,omitempty"` - // Tenant this VM belongs to. - Tenant string `protobuf:"bytes,4,opt,name=tenant,proto3" json:"tenant,omitempty"` - // UUID of the project this VM belongs to. - ProjectUuid string `protobuf:"bytes,5,opt,name=project_uuid,json=projectUuid,proto3" json:"project_uuid,omitempty"` - // UUID of the OS image installed on the VM; resolve the title via the OS endpoint. - OsUuid string `protobuf:"bytes,6,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` - // UUID of the datacenter location. - // TODO: not exposed by the upstream (nulink) VM records yet; always empty. - LocationUuid string `protobuf:"bytes,7,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` - // TODO: Contact UUID – not yet implemented; open discussion with FCN (#23). - ContactUuid string `protobuf:"bytes,8,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` - // Number of CPU cores. - Cpu uint32 `protobuf:"varint,9,opt,name=cpu,proto3" json:"cpu,omitempty"` - // RAM in GB. - Ram uint32 `protobuf:"varint,10,opt,name=ram,proto3" json:"ram,omitempty"` - // Whether backup is enabled. - // TODO: the upstream (nulink) list/get models do not expose this; always false. - Backup bool `protobuf:"varint,11,opt,name=backup,proto3" json:"backup,omitempty"` - // Status of the ongoing operation. - Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` - // Additional information about the current status. - StatusInfo string `protobuf:"bytes,13,opt,name=status_info,json=statusInfo,proto3" json:"status_info,omitempty"` - // Availability level. - Availability Availability `protobuf:"varint,14,opt,name=availability,proto3,enum=fits.api.vm.v1.Availability" json:"availability,omitempty"` - // Service class. - Serviceclass ServiceClass `protobuf:"varint,15,opt,name=serviceclass,proto3,enum=fits.api.vm.v1.ServiceClass" json:"serviceclass,omitempty"` - // OS-specific configuration. - // - // Types that are valid to be assigned to Details: - // - // *VMInstance_WindowsDetails - // *VMInstance_LinuxDetails - Details isVMInstance_Details `protobuf_oneof:"details"` - // Network interfaces attached to the VM (IPv4 only). - Interfaces []*NetworkInterface `protobuf:"bytes,18,rep,name=interfaces,proto3" json:"interfaces,omitempty"` - // VLAN the VM is attached to. - // TODO: not exposed by the upstream (nulink) VM records yet; always unset. - Vlan *Vlan `protobuf:"bytes,19,opt,name=vlan,proto3" json:"vlan,omitempty"` - // Internal reference number provided by the user, e.g. a ticket ID. - OrderNumber string `protobuf:"bytes,20,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` - // True if the order was placed by FITS, false if self-service. - // TODO: maybe remove this field entirely. - Contract bool `protobuf:"varint,21,opt,name=contract,proto3" json:"contract,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMInstance) Reset() { - *x = VMInstance{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMInstance) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMInstance) ProtoMessage() {} - -func (x *VMInstance) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[3] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMInstance.ProtoReflect.Descriptor instead. -func (*VMInstance) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{3} -} - -func (x *VMInstance) GetUuid() string { - if x != nil { - return x.Uuid - } - return "" -} - -func (x *VMInstance) GetMeta() *v1.Meta { - if x != nil { - return x.Meta - } - return nil -} - -func (x *VMInstance) GetFqdn() string { - if x != nil { - return x.Fqdn - } - return "" -} - -func (x *VMInstance) GetTenant() string { - if x != nil { - return x.Tenant - } - return "" -} - -func (x *VMInstance) GetProjectUuid() string { - if x != nil { - return x.ProjectUuid - } - return "" -} - -func (x *VMInstance) GetOsUuid() string { - if x != nil { - return x.OsUuid - } - return "" -} - -func (x *VMInstance) GetLocationUuid() string { - if x != nil { - return x.LocationUuid - } - return "" -} - -func (x *VMInstance) GetContactUuid() string { - if x != nil { - return x.ContactUuid - } - return "" -} - -func (x *VMInstance) GetCpu() uint32 { - if x != nil { - return x.Cpu - } - return 0 -} - -func (x *VMInstance) GetRam() uint32 { - if x != nil { - return x.Ram - } - return 0 -} - -func (x *VMInstance) GetBackup() bool { - if x != nil { - return x.Backup - } - return false -} - -func (x *VMInstance) GetStatus() string { - if x != nil { - return x.Status - } - return "" -} - -func (x *VMInstance) GetStatusInfo() string { - if x != nil { - return x.StatusInfo - } - return "" -} - -func (x *VMInstance) GetAvailability() Availability { - if x != nil { - return x.Availability - } - return Availability_AVAILABILITY_UNSPECIFIED -} - -func (x *VMInstance) GetServiceclass() ServiceClass { - if x != nil { - return x.Serviceclass - } - return ServiceClass_SERVICE_CLASS_UNSPECIFIED -} - -func (x *VMInstance) GetDetails() isVMInstance_Details { - if x != nil { - return x.Details - } - return nil -} - -func (x *VMInstance) GetWindowsDetails() *WindowsDetails { - if x != nil { - if x, ok := x.Details.(*VMInstance_WindowsDetails); ok { - return x.WindowsDetails - } - } - return nil -} - -func (x *VMInstance) GetLinuxDetails() *LinuxDetails { - if x != nil { - if x, ok := x.Details.(*VMInstance_LinuxDetails); ok { - return x.LinuxDetails - } - } - return nil -} - -func (x *VMInstance) GetInterfaces() []*NetworkInterface { - if x != nil { - return x.Interfaces - } - return nil -} - -func (x *VMInstance) GetVlan() *Vlan { - if x != nil { - return x.Vlan - } - return nil -} - -func (x *VMInstance) GetOrderNumber() string { - if x != nil { - return x.OrderNumber - } - return "" -} - -func (x *VMInstance) GetContract() bool { - if x != nil { - return x.Contract - } - return false -} - -type isVMInstance_Details interface { - isVMInstance_Details() -} - -type VMInstance_WindowsDetails struct { - // Windows-specific settings (domain + disks). - WindowsDetails *WindowsDetails `protobuf:"bytes,16,opt,name=windows_details,json=windowsDetails,proto3,oneof"` -} - -type VMInstance_LinuxDetails struct { - // Linux-specific settings (LDAP + disks). - LinuxDetails *LinuxDetails `protobuf:"bytes,17,opt,name=linux_details,json=linuxDetails,proto3,oneof"` -} - -func (*VMInstance_WindowsDetails) isVMInstance_Details() {} - -func (*VMInstance_LinuxDetails) isVMInstance_Details() {} - -// Request to get a VM by UUID. -type VMServiceGetRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the VM. - Uuid *string `protobuf:"bytes,1,opt,name=uuid,proto3,oneof" json:"uuid,omitempty"` - // Tenant of the VM. - Tenant string `protobuf:"bytes,2,opt,name=tenant,proto3" json:"tenant,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceGetRequest) Reset() { - *x = VMServiceGetRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceGetRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceGetRequest) ProtoMessage() {} - -func (x *VMServiceGetRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[4] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceGetRequest.ProtoReflect.Descriptor instead. -func (*VMServiceGetRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{4} -} - -func (x *VMServiceGetRequest) GetUuid() string { - if x != nil && x.Uuid != nil { - return *x.Uuid - } - return "" -} - -func (x *VMServiceGetRequest) GetTenant() string { - if x != nil { - return x.Tenant - } - return "" -} - -// Response containing the requested VM. -type VMServiceGetResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - // The VM. - Vm *VMInstance `protobuf:"bytes,1,opt,name=vm,proto3" json:"vm,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceGetResponse) Reset() { - *x = VMServiceGetResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceGetResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceGetResponse) ProtoMessage() {} - -func (x *VMServiceGetResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[5] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceGetResponse.ProtoReflect.Descriptor instead. -func (*VMServiceGetResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{5} -} - -func (x *VMServiceGetResponse) GetVm() *VMInstance { - if x != nil { - return x.Vm - } - return nil -} - -// Windows-specific create request parts. -type VMServiceCreateWindowsRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the Windows domain the VM should join. - DomainUuid string `protobuf:"bytes,1,opt,name=domain_uuid,json=domainUuid,proto3" json:"domain_uuid,omitempty"` - // Disks for the Windows VM, excluding the OS disk. - Disks []*WindowsDisk `protobuf:"bytes,2,rep,name=disks,proto3" json:"disks,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceCreateWindowsRequest) Reset() { - *x = VMServiceCreateWindowsRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceCreateWindowsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceCreateWindowsRequest) ProtoMessage() {} - -func (x *VMServiceCreateWindowsRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[6] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceCreateWindowsRequest.ProtoReflect.Descriptor instead. -func (*VMServiceCreateWindowsRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{6} -} - -func (x *VMServiceCreateWindowsRequest) GetDomainUuid() string { - if x != nil { - return x.DomainUuid - } - return "" -} - -func (x *VMServiceCreateWindowsRequest) GetDisks() []*WindowsDisk { - if x != nil { - return x.Disks - } - return nil -} - -// Linux-specific create request parts. -type VMServiceCreateLinuxRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the LDAP directory the VM should integrate with. - LdapUuid string `protobuf:"bytes,1,opt,name=ldap_uuid,json=ldapUuid,proto3" json:"ldap_uuid,omitempty"` - // Disks for the Linux VM, excluding the OS disk. - Disks []*LinuxDisk `protobuf:"bytes,2,rep,name=disks,proto3" json:"disks,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceCreateLinuxRequest) Reset() { - *x = VMServiceCreateLinuxRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceCreateLinuxRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceCreateLinuxRequest) ProtoMessage() {} - -func (x *VMServiceCreateLinuxRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[7] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceCreateLinuxRequest.ProtoReflect.Descriptor instead. -func (*VMServiceCreateLinuxRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{7} -} - -func (x *VMServiceCreateLinuxRequest) GetLdapUuid() string { - if x != nil { - return x.LdapUuid - } - return "" -} - -func (x *VMServiceCreateLinuxRequest) GetDisks() []*LinuxDisk { - if x != nil { - return x.Disks - } - return nil -} - -// Request to create a new VM instance. -// TODO: contract, billable and billing_start_date. -type VMServiceCreateRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the project this VM belongs to. - ProjectUuid string `protobuf:"bytes,1,opt,name=project_uuid,json=projectUuid,proto3" json:"project_uuid,omitempty"` - // Optional name; the FQDN is derived from it. - Name *string `protobuf:"bytes,2,opt,name=name,proto3,oneof" json:"name,omitempty"` - // UUID of the operating system image to install. - OsUuid string `protobuf:"bytes,3,opt,name=os_uuid,json=osUuid,proto3" json:"os_uuid,omitempty"` - // UUID of the VLAN network to attach the VM to. - VlanUuid string `protobuf:"bytes,4,opt,name=vlan_uuid,json=vlanUuid,proto3" json:"vlan_uuid,omitempty"` - // UUID of the datacenter location; the VM is scheduled into one data center within it. - LocationUuid string `protobuf:"bytes,5,opt,name=location_uuid,json=locationUuid,proto3" json:"location_uuid,omitempty"` - // TODO: Contact UUID – open discussion with FCN; may become a dedicated /contact endpoint. - ContactUuid string `protobuf:"bytes,6,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` - // Number of CPU cores. - Cpu uint32 `protobuf:"varint,7,opt,name=cpu,proto3" json:"cpu,omitempty"` - // RAM in GB. Must be a power of 2. - Ram uint32 `protobuf:"varint,8,opt,name=ram,proto3" json:"ram,omitempty"` - // Internal reference number provided by the user, e.g. a ticket ID. - // TODO: can this be optional? - OrderNumber string `protobuf:"bytes,9,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` - // Optional key-value labels for accounting purposes. - // (e.g. contract number, transaction number, technical key, accounting key). - Labels *v1.Labels `protobuf:"bytes,10,opt,name=labels,proto3" json:"labels,omitempty"` - // Whether backup is enabled. - Backup bool `protobuf:"varint,11,opt,name=backup,proto3" json:"backup,omitempty"` - // Availability level. - Availability Availability `protobuf:"varint,12,opt,name=availability,proto3,enum=fits.api.vm.v1.Availability" json:"availability,omitempty"` - // Service class; only certain combinations with availability are valid. - Serviceclass ServiceClass `protobuf:"varint,13,opt,name=serviceclass,proto3,enum=fits.api.vm.v1.ServiceClass" json:"serviceclass,omitempty"` - // OS type and its configuration. - // - // Types that are valid to be assigned to Vmtype: - // - // *VMServiceCreateRequest_Windows - // *VMServiceCreateRequest_Linux - Vmtype isVMServiceCreateRequest_Vmtype `protobuf_oneof:"vmtype"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceCreateRequest) Reset() { - *x = VMServiceCreateRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceCreateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceCreateRequest) ProtoMessage() {} - -func (x *VMServiceCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[8] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceCreateRequest.ProtoReflect.Descriptor instead. -func (*VMServiceCreateRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{8} -} - -func (x *VMServiceCreateRequest) GetProjectUuid() string { - if x != nil { - return x.ProjectUuid - } - return "" -} - -func (x *VMServiceCreateRequest) GetName() string { - if x != nil && x.Name != nil { - return *x.Name - } - return "" -} - -func (x *VMServiceCreateRequest) GetOsUuid() string { - if x != nil { - return x.OsUuid - } - return "" -} - -func (x *VMServiceCreateRequest) GetVlanUuid() string { - if x != nil { - return x.VlanUuid - } - return "" -} - -func (x *VMServiceCreateRequest) GetLocationUuid() string { - if x != nil { - return x.LocationUuid - } - return "" -} - -func (x *VMServiceCreateRequest) GetContactUuid() string { - if x != nil { - return x.ContactUuid - } - return "" -} - -func (x *VMServiceCreateRequest) GetCpu() uint32 { - if x != nil { - return x.Cpu - } - return 0 -} - -func (x *VMServiceCreateRequest) GetRam() uint32 { - if x != nil { - return x.Ram - } - return 0 -} - -func (x *VMServiceCreateRequest) GetOrderNumber() string { - if x != nil { - return x.OrderNumber - } - return "" -} - -func (x *VMServiceCreateRequest) GetLabels() *v1.Labels { - if x != nil { - return x.Labels - } - return nil -} - -func (x *VMServiceCreateRequest) GetBackup() bool { - if x != nil { - return x.Backup - } - return false -} - -func (x *VMServiceCreateRequest) GetAvailability() Availability { - if x != nil { - return x.Availability - } - return Availability_AVAILABILITY_UNSPECIFIED -} - -func (x *VMServiceCreateRequest) GetServiceclass() ServiceClass { - if x != nil { - return x.Serviceclass - } - return ServiceClass_SERVICE_CLASS_UNSPECIFIED -} - -func (x *VMServiceCreateRequest) GetVmtype() isVMServiceCreateRequest_Vmtype { - if x != nil { - return x.Vmtype - } - return nil -} - -func (x *VMServiceCreateRequest) GetWindows() *VMServiceCreateWindowsRequest { - if x != nil { - if x, ok := x.Vmtype.(*VMServiceCreateRequest_Windows); ok { - return x.Windows - } - } - return nil -} - -func (x *VMServiceCreateRequest) GetLinux() *VMServiceCreateLinuxRequest { - if x != nil { - if x, ok := x.Vmtype.(*VMServiceCreateRequest_Linux); ok { - return x.Linux - } - } - return nil -} - -type isVMServiceCreateRequest_Vmtype interface { - isVMServiceCreateRequest_Vmtype() -} - -type VMServiceCreateRequest_Windows struct { - // Windows-specific settings (domain + disk). - Windows *VMServiceCreateWindowsRequest `protobuf:"bytes,14,opt,name=windows,proto3,oneof"` -} - -type VMServiceCreateRequest_Linux struct { - // Linux-specific settings (LDAP + disk). - Linux *VMServiceCreateLinuxRequest `protobuf:"bytes,15,opt,name=linux,proto3,oneof"` -} - -func (*VMServiceCreateRequest_Windows) isVMServiceCreateRequest_Vmtype() {} - -func (*VMServiceCreateRequest_Linux) isVMServiceCreateRequest_Vmtype() {} - -// Disk configuration for a Linux VM. -type LinuxDisk struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the disk; set for existing disks, unset for new ones. - Uuid *string `protobuf:"bytes,1,opt,name=uuid,proto3,oneof" json:"uuid,omitempty"` - // Label (name) of the disk. - Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` - // Whether the disk grows automatically when space runs low. - AutoExtend bool `protobuf:"varint,3,opt,name=auto_extend,json=autoExtend,proto3" json:"auto_extend,omitempty"` - // Size of the disk in GB. - Size *uint64 `protobuf:"varint,4,opt,name=size,proto3,oneof" json:"size,omitempty"` - // Mount point (e.g. "/data"). - MountPoint *string `protobuf:"bytes,5,opt,name=mount_point,json=mountPoint,proto3,oneof" json:"mount_point,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *LinuxDisk) Reset() { - *x = LinuxDisk{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *LinuxDisk) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LinuxDisk) ProtoMessage() {} - -func (x *LinuxDisk) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[9] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LinuxDisk.ProtoReflect.Descriptor instead. -func (*LinuxDisk) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{9} -} - -func (x *LinuxDisk) GetUuid() string { - if x != nil && x.Uuid != nil { - return *x.Uuid - } - return "" -} - -func (x *LinuxDisk) GetLabel() string { - if x != nil { - return x.Label - } - return "" -} - -func (x *LinuxDisk) GetAutoExtend() bool { - if x != nil { - return x.AutoExtend - } - return false -} - -func (x *LinuxDisk) GetSize() uint64 { - if x != nil && x.Size != nil { - return *x.Size - } - return 0 -} - -func (x *LinuxDisk) GetMountPoint() string { - if x != nil && x.MountPoint != nil { - return *x.MountPoint - } - return "" -} - -// Disk configuration for a Windows VM. -type WindowsDisk struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the disk; set for existing disks, unset for new ones. - Uuid *string `protobuf:"bytes,1,opt,name=uuid,proto3,oneof" json:"uuid,omitempty"` - // Label (name) of the disk. - Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` - // Whether the disk grows automatically when space runs low. - AutoExtend bool `protobuf:"varint,3,opt,name=auto_extend,json=autoExtend,proto3" json:"auto_extend,omitempty"` - // Size of the disk in GB. - Size *uint64 `protobuf:"varint,4,opt,name=size,proto3,oneof" json:"size,omitempty"` - // Drive letter (e.g. "D"). - Driveletter *string `protobuf:"bytes,5,opt,name=driveletter,proto3,oneof" json:"driveletter,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *WindowsDisk) Reset() { - *x = WindowsDisk{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *WindowsDisk) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WindowsDisk) ProtoMessage() {} - -func (x *WindowsDisk) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[10] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WindowsDisk.ProtoReflect.Descriptor instead. -func (*WindowsDisk) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{10} -} - -func (x *WindowsDisk) GetUuid() string { - if x != nil && x.Uuid != nil { - return *x.Uuid - } - return "" -} - -func (x *WindowsDisk) GetLabel() string { - if x != nil { - return x.Label - } - return "" -} - -func (x *WindowsDisk) GetAutoExtend() bool { - if x != nil { - return x.AutoExtend - } - return false -} - -func (x *WindowsDisk) GetSize() uint64 { - if x != nil && x.Size != nil { - return *x.Size - } - return 0 -} - -func (x *WindowsDisk) GetDriveletter() string { - if x != nil && x.Driveletter != nil { - return *x.Driveletter - } - return "" -} - -// Response for Create; an empty response means the VM was accepted. -type VMServiceCreateResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceCreateResponse) Reset() { - *x = VMServiceCreateResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceCreateResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceCreateResponse) ProtoMessage() {} - -func (x *VMServiceCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[11] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceCreateResponse.ProtoReflect.Descriptor instead. -func (*VMServiceCreateResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{11} -} - -// Request to change a mutable property of an existing VM. -// Exactly one action must be set; each maps onto its own upstream endpoint. -// TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per -// action); combined changes would need -// server-side fan-out without rollback. -type VMServiceUpdateRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the VM to update. - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // Project the VM belongs to. - Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` - // Order reference for this operation. - // TODO: can this be optional? - OrderNumber string `protobuf:"bytes,3,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` - // Timestamp and strategy for this update. - UpdateMeta *v1.UpdateMeta `protobuf:"bytes,4,opt,name=update_meta,json=updateMeta,proto3" json:"update_meta,omitempty"` - // The change to apply. - // - // Types that are valid to be assigned to Action: - // - // *VMServiceUpdateRequest_PerformanceClass - // *VMServiceUpdateRequest_ServiceClass - // *VMServiceUpdateRequest_Contact - Action isVMServiceUpdateRequest_Action `protobuf_oneof:"action"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceUpdateRequest) Reset() { - *x = VMServiceUpdateRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceUpdateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceUpdateRequest) ProtoMessage() {} - -func (x *VMServiceUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[12] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceUpdateRequest.ProtoReflect.Descriptor instead. -func (*VMServiceUpdateRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{12} -} - -func (x *VMServiceUpdateRequest) GetUuid() string { - if x != nil { - return x.Uuid - } - return "" -} - -func (x *VMServiceUpdateRequest) GetProject() string { - if x != nil { - return x.Project - } - return "" -} - -func (x *VMServiceUpdateRequest) GetOrderNumber() string { - if x != nil { - return x.OrderNumber - } - return "" -} - -func (x *VMServiceUpdateRequest) GetUpdateMeta() *v1.UpdateMeta { - if x != nil { - return x.UpdateMeta - } - return nil -} - -func (x *VMServiceUpdateRequest) GetAction() isVMServiceUpdateRequest_Action { - if x != nil { - return x.Action - } - return nil -} - -func (x *VMServiceUpdateRequest) GetPerformanceClass() *PerformanceClassChange { - if x != nil { - if x, ok := x.Action.(*VMServiceUpdateRequest_PerformanceClass); ok { - return x.PerformanceClass - } - } - return nil -} - -func (x *VMServiceUpdateRequest) GetServiceClass() *ServiceClassChange { - if x != nil { - if x, ok := x.Action.(*VMServiceUpdateRequest_ServiceClass); ok { - return x.ServiceClass - } - } - return nil -} - -func (x *VMServiceUpdateRequest) GetContact() *ContactChange { - if x != nil { - if x, ok := x.Action.(*VMServiceUpdateRequest_Contact); ok { - return x.Contact - } - } - return nil -} - -type isVMServiceUpdateRequest_Action interface { - isVMServiceUpdateRequest_Action() -} - -type VMServiceUpdateRequest_PerformanceClass struct { - // Change the CPU/RAM performance class. - PerformanceClass *PerformanceClassChange `protobuf:"bytes,5,opt,name=performance_class,json=performanceClass,proto3,oneof"` -} - -type VMServiceUpdateRequest_ServiceClass struct { - // Change the service class. - ServiceClass *ServiceClassChange `protobuf:"bytes,6,opt,name=service_class,json=serviceClass,proto3,oneof"` -} - -type VMServiceUpdateRequest_Contact struct { - // Change the contact person. - Contact *ContactChange `protobuf:"bytes,7,opt,name=contact,proto3,oneof"` -} - -func (*VMServiceUpdateRequest_PerformanceClass) isVMServiceUpdateRequest_Action() {} - -func (*VMServiceUpdateRequest_ServiceClass) isVMServiceUpdateRequest_Action() {} - -func (*VMServiceUpdateRequest_Contact) isVMServiceUpdateRequest_Action() {} - -// PerformanceClassChange is the payload for changing a VM's CPU and RAM. -type PerformanceClassChange struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Number of vCPUs (1-64). - Cpu uint32 `protobuf:"varint,1,opt,name=cpu,proto3" json:"cpu,omitempty"` - // RAM size in GB. - Ram uint32 `protobuf:"varint,2,opt,name=ram,proto3" json:"ram,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *PerformanceClassChange) Reset() { - *x = PerformanceClassChange{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *PerformanceClassChange) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PerformanceClassChange) ProtoMessage() {} - -func (x *PerformanceClassChange) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[13] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PerformanceClassChange.ProtoReflect.Descriptor instead. -func (*PerformanceClassChange) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{13} -} - -func (x *PerformanceClassChange) GetCpu() uint32 { - if x != nil { - return x.Cpu - } - return 0 -} - -func (x *PerformanceClassChange) GetRam() uint32 { - if x != nil { - return x.Ram - } - return 0 -} - -// ServiceClassChange is the payload for changing a VM's service class. -type ServiceClassChange struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Target service class. - Serviceclass ServiceClass `protobuf:"varint,1,opt,name=serviceclass,proto3,enum=fits.api.vm.v1.ServiceClass" json:"serviceclass,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ServiceClassChange) Reset() { - *x = ServiceClassChange{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ServiceClassChange) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceClassChange) ProtoMessage() {} - -func (x *ServiceClassChange) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[14] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServiceClassChange.ProtoReflect.Descriptor instead. -func (*ServiceClassChange) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{14} -} - -func (x *ServiceClassChange) GetServiceclass() ServiceClass { - if x != nil { - return x.Serviceclass - } - return ServiceClass_SERVICE_CLASS_UNSPECIFIED -} - -// ContactChange is the payload for changing a VM's contact person. -type ContactChange struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the new contact. - ContactUuid string `protobuf:"bytes,1,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ContactChange) Reset() { - *x = ContactChange{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ContactChange) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ContactChange) ProtoMessage() {} - -func (x *ContactChange) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[15] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ContactChange.ProtoReflect.Descriptor instead. -func (*ContactChange) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{15} -} - -func (x *ContactChange) GetContactUuid() string { - if x != nil { - return x.ContactUuid - } - return "" -} - -// Response for Update; an empty response means the change was accepted. -type VMServiceUpdateResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceUpdateResponse) Reset() { - *x = VMServiceUpdateResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceUpdateResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceUpdateResponse) ProtoMessage() {} - -func (x *VMServiceUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[16] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceUpdateResponse.ProtoReflect.Descriptor instead. -func (*VMServiceUpdateResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{16} -} - -// Request to list VMs. -type VMServiceListRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Tenant of the VMs. - Tenant *string `protobuf:"bytes,1,opt,name=tenant,proto3,oneof" json:"tenant,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceListRequest) Reset() { - *x = VMServiceListRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceListRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceListRequest) ProtoMessage() {} - -func (x *VMServiceListRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[17] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceListRequest.ProtoReflect.Descriptor instead. -func (*VMServiceListRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{17} -} - -func (x *VMServiceListRequest) GetTenant() string { - if x != nil && x.Tenant != nil { - return *x.Tenant - } - return "" -} - -// Response containing the list of VMs. -type VMServiceListResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - // The VM instances. - Vms []*VMInstance `protobuf:"bytes,1,rep,name=vms,proto3" json:"vms,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceListResponse) Reset() { - *x = VMServiceListResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceListResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceListResponse) ProtoMessage() {} - -func (x *VMServiceListResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[18] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceListResponse.ProtoReflect.Descriptor instead. -func (*VMServiceListResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{18} -} - -func (x *VMServiceListResponse) GetVms() []*VMInstance { - if x != nil { - return x.Vms - } - return nil -} - -// Request to cancel a VM instance. -type VMServiceDeleteRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Project the VM belongs to. - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - // UUID of the VM to delete. - Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3" json:"uuid,omitempty"` - // Order reference for this operation. - // TODO: can this be optional? - OrderNumber string `protobuf:"bytes,3,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceDeleteRequest) Reset() { - *x = VMServiceDeleteRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceDeleteRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceDeleteRequest) ProtoMessage() {} - -func (x *VMServiceDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[19] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceDeleteRequest.ProtoReflect.Descriptor instead. -func (*VMServiceDeleteRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{19} -} - -func (x *VMServiceDeleteRequest) GetProject() string { - if x != nil { - return x.Project - } - return "" -} - -func (x *VMServiceDeleteRequest) GetUuid() string { - if x != nil { - return x.Uuid - } - return "" -} - -func (x *VMServiceDeleteRequest) GetOrderNumber() string { - if x != nil { - return x.OrderNumber - } - return "" -} - -// Response for Delete; an empty response means the cancellation was accepted. -type VMServiceDeleteResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceDeleteResponse) Reset() { - *x = VMServiceDeleteResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceDeleteResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceDeleteResponse) ProtoMessage() {} - -func (x *VMServiceDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[20] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceDeleteResponse.ProtoReflect.Descriptor instead. -func (*VMServiceDeleteResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{20} -} - -// Request to validate a VM create without creating anything. -type VMServiceValidateCreateRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // The create request to validate. - Create *VMServiceCreateRequest `protobuf:"bytes,1,opt,name=create,proto3" json:"create,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceValidateCreateRequest) Reset() { - *x = VMServiceValidateCreateRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceValidateCreateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceValidateCreateRequest) ProtoMessage() {} - -func (x *VMServiceValidateCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[21] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceValidateCreateRequest.ProtoReflect.Descriptor instead. -func (*VMServiceValidateCreateRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{21} -} - -func (x *VMServiceValidateCreateRequest) GetCreate() *VMServiceCreateRequest { - if x != nil { - return x.Create - } - return nil -} - -// Response for ValidateCreate; violations are returned as an InvalidArgument error. -type VMServiceValidateCreateResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceValidateCreateResponse) Reset() { - *x = VMServiceValidateCreateResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceValidateCreateResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceValidateCreateResponse) ProtoMessage() {} - -func (x *VMServiceValidateCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[22] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceValidateCreateResponse.ProtoReflect.Descriptor instead. -func (*VMServiceValidateCreateResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{22} -} - -// Request to validate an AddDisk without ordering anything. -type VMServiceValidateAddDiskRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // The add disk request to validate. - AddDisk *VMServiceAddDiskRequest `protobuf:"bytes,1,opt,name=add_disk,json=addDisk,proto3" json:"add_disk,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceValidateAddDiskRequest) Reset() { - *x = VMServiceValidateAddDiskRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceValidateAddDiskRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceValidateAddDiskRequest) ProtoMessage() {} - -func (x *VMServiceValidateAddDiskRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[23] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceValidateAddDiskRequest.ProtoReflect.Descriptor instead. -func (*VMServiceValidateAddDiskRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{23} -} - -func (x *VMServiceValidateAddDiskRequest) GetAddDisk() *VMServiceAddDiskRequest { - if x != nil { - return x.AddDisk - } - return nil -} - -// Response for ValidateAddDisk; violations are returned as an InvalidArgument error. -type VMServiceValidateAddDiskResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceValidateAddDiskResponse) Reset() { - *x = VMServiceValidateAddDiskResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceValidateAddDiskResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceValidateAddDiskResponse) ProtoMessage() {} - -func (x *VMServiceValidateAddDiskResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[24] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceValidateAddDiskResponse.ProtoReflect.Descriptor instead. -func (*VMServiceValidateAddDiskResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{24} -} - -// Request to validate an UpdateDisk without changing anything. -type VMServiceValidateUpdateDiskRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // The update disk request to validate. - UpdateDisk *VMServiceUpdateDiskRequest `protobuf:"bytes,1,opt,name=update_disk,json=updateDisk,proto3" json:"update_disk,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceValidateUpdateDiskRequest) Reset() { - *x = VMServiceValidateUpdateDiskRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceValidateUpdateDiskRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceValidateUpdateDiskRequest) ProtoMessage() {} - -func (x *VMServiceValidateUpdateDiskRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[25] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceValidateUpdateDiskRequest.ProtoReflect.Descriptor instead. -func (*VMServiceValidateUpdateDiskRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{25} -} - -func (x *VMServiceValidateUpdateDiskRequest) GetUpdateDisk() *VMServiceUpdateDiskRequest { - if x != nil { - return x.UpdateDisk - } - return nil -} - -// Response for ValidateUpdateDisk; violations are returned as an InvalidArgument error. -type VMServiceValidateUpdateDiskResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceValidateUpdateDiskResponse) Reset() { - *x = VMServiceValidateUpdateDiskResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceValidateUpdateDiskResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceValidateUpdateDiskResponse) ProtoMessage() {} - -func (x *VMServiceValidateUpdateDiskResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[26] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceValidateUpdateDiskResponse.ProtoReflect.Descriptor instead. -func (*VMServiceValidateUpdateDiskResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{26} -} - -// Response for AddDisk. -type VMServiceAddDiskResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceAddDiskResponse) Reset() { - *x = VMServiceAddDiskResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceAddDiskResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceAddDiskResponse) ProtoMessage() {} - -func (x *VMServiceAddDiskResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[27] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceAddDiskResponse.ProtoReflect.Descriptor instead. -func (*VMServiceAddDiskResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{27} -} - -// Response for UpdateDisk. -type VMServiceUpdateDiskResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceUpdateDiskResponse) Reset() { - *x = VMServiceUpdateDiskResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceUpdateDiskResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceUpdateDiskResponse) ProtoMessage() {} - -func (x *VMServiceUpdateDiskResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[28] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceUpdateDiskResponse.ProtoReflect.Descriptor instead. -func (*VMServiceUpdateDiskResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{28} -} - -// Response for DeleteDisk. -type VMServiceDeleteDiskResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceDeleteDiskResponse) Reset() { - *x = VMServiceDeleteDiskResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceDeleteDiskResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceDeleteDiskResponse) ProtoMessage() {} - -func (x *VMServiceDeleteDiskResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[29] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceDeleteDiskResponse.ProtoReflect.Descriptor instead. -func (*VMServiceDeleteDiskResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{29} -} - -// Request to order an additional data disk for a VM. -type VMServiceAddDiskRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the VM to attach the disk to. - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // Project the VM belongs to. - Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` - // Order reference for this operation. - // TODO: can this be optional? - OrderNumber string `protobuf:"bytes,3,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` - // OS-specific disk specification; must match the VM's OS type. - // - // Types that are valid to be assigned to Disk: - // - // *VMServiceAddDiskRequest_Linux - // *VMServiceAddDiskRequest_Windows - Disk isVMServiceAddDiskRequest_Disk `protobuf_oneof:"disk"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceAddDiskRequest) Reset() { - *x = VMServiceAddDiskRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceAddDiskRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceAddDiskRequest) ProtoMessage() {} - -func (x *VMServiceAddDiskRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[30] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceAddDiskRequest.ProtoReflect.Descriptor instead. -func (*VMServiceAddDiskRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{30} -} - -func (x *VMServiceAddDiskRequest) GetUuid() string { - if x != nil { - return x.Uuid - } - return "" -} - -func (x *VMServiceAddDiskRequest) GetProject() string { - if x != nil { - return x.Project - } - return "" -} - -func (x *VMServiceAddDiskRequest) GetOrderNumber() string { - if x != nil { - return x.OrderNumber - } - return "" -} - -func (x *VMServiceAddDiskRequest) GetDisk() isVMServiceAddDiskRequest_Disk { - if x != nil { - return x.Disk - } - return nil -} - -func (x *VMServiceAddDiskRequest) GetLinux() *LinuxDisk { - if x != nil { - if x, ok := x.Disk.(*VMServiceAddDiskRequest_Linux); ok { - return x.Linux - } - } - return nil -} - -func (x *VMServiceAddDiskRequest) GetWindows() *WindowsDisk { - if x != nil { - if x, ok := x.Disk.(*VMServiceAddDiskRequest_Windows); ok { - return x.Windows - } - } - return nil -} - -type isVMServiceAddDiskRequest_Disk interface { - isVMServiceAddDiskRequest_Disk() -} - -type VMServiceAddDiskRequest_Linux struct { - // Linux data disk. - Linux *LinuxDisk `protobuf:"bytes,4,opt,name=linux,proto3,oneof"` -} - -type VMServiceAddDiskRequest_Windows struct { - // Windows data disk. - Windows *WindowsDisk `protobuf:"bytes,5,opt,name=windows,proto3,oneof"` -} - -func (*VMServiceAddDiskRequest_Linux) isVMServiceAddDiskRequest_Disk() {} - -func (*VMServiceAddDiskRequest_Windows) isVMServiceAddDiskRequest_Disk() {} - -// Request to change an existing data disk; only size and auto-extend are mutable. -type VMServiceUpdateDiskRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the VM the disk belongs to. - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // UUID of the disk to change. - DiskUuid string `protobuf:"bytes,2,opt,name=disk_uuid,json=diskUuid,proto3" json:"disk_uuid,omitempty"` - // Project the VM belongs to. - Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` - // Order reference for this operation. - // TODO: can this be optional? - OrderNumber string `protobuf:"bytes,4,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` - // New auto-extend behavior; unset keeps the current value. - AutoExtend *bool `protobuf:"varint,5,opt,name=auto_extend,json=autoExtend,proto3,oneof" json:"auto_extend,omitempty"` - // New size of the disk in GB; unset keeps the current value. - Size *uint64 `protobuf:"varint,6,opt,name=size,proto3,oneof" json:"size,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceUpdateDiskRequest) Reset() { - *x = VMServiceUpdateDiskRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceUpdateDiskRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceUpdateDiskRequest) ProtoMessage() {} - -func (x *VMServiceUpdateDiskRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[31] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceUpdateDiskRequest.ProtoReflect.Descriptor instead. -func (*VMServiceUpdateDiskRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{31} -} - -func (x *VMServiceUpdateDiskRequest) GetUuid() string { - if x != nil { - return x.Uuid - } - return "" -} - -func (x *VMServiceUpdateDiskRequest) GetDiskUuid() string { - if x != nil { - return x.DiskUuid - } - return "" -} - -func (x *VMServiceUpdateDiskRequest) GetProject() string { - if x != nil { - return x.Project - } - return "" -} - -func (x *VMServiceUpdateDiskRequest) GetOrderNumber() string { - if x != nil { - return x.OrderNumber - } - return "" -} - -func (x *VMServiceUpdateDiskRequest) GetAutoExtend() bool { - if x != nil && x.AutoExtend != nil { - return *x.AutoExtend - } - return false -} - -func (x *VMServiceUpdateDiskRequest) GetSize() uint64 { - if x != nil && x.Size != nil { - return *x.Size - } - return 0 -} - -// Request to cancel a data disk. -type VMServiceDeleteDiskRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the VM the disk belongs to. - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // UUID of the disk to cancel. - DiskUuid string `protobuf:"bytes,2,opt,name=disk_uuid,json=diskUuid,proto3" json:"disk_uuid,omitempty"` - // Project the VM belongs to. - Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` - // Order reference for this operation. - // TODO: can this be optional? - OrderNumber string `protobuf:"bytes,4,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceDeleteDiskRequest) Reset() { - *x = VMServiceDeleteDiskRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceDeleteDiskRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceDeleteDiskRequest) ProtoMessage() {} - -func (x *VMServiceDeleteDiskRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[32] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceDeleteDiskRequest.ProtoReflect.Descriptor instead. -func (*VMServiceDeleteDiskRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{32} -} - -func (x *VMServiceDeleteDiskRequest) GetUuid() string { - if x != nil { - return x.Uuid - } - return "" -} - -func (x *VMServiceDeleteDiskRequest) GetDiskUuid() string { - if x != nil { - return x.DiskUuid - } - return "" -} - -func (x *VMServiceDeleteDiskRequest) GetProject() string { - if x != nil { - return x.Project - } - return "" -} - -func (x *VMServiceDeleteDiskRequest) GetOrderNumber() string { - if x != nil { - return x.OrderNumber - } - return "" -} - -// Response for AddIP. -type VMServiceAddIPResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceAddIPResponse) Reset() { - *x = VMServiceAddIPResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceAddIPResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceAddIPResponse) ProtoMessage() {} - -func (x *VMServiceAddIPResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[33] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceAddIPResponse.ProtoReflect.Descriptor instead. -func (*VMServiceAddIPResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{33} -} - -// Response for MoveIP. -type VMServiceMoveIPResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceMoveIPResponse) Reset() { - *x = VMServiceMoveIPResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceMoveIPResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceMoveIPResponse) ProtoMessage() {} - -func (x *VMServiceMoveIPResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[34] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceMoveIPResponse.ProtoReflect.Descriptor instead. -func (*VMServiceMoveIPResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{34} -} - -// Response for DeleteIP. -type VMServiceDeleteIPResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceDeleteIPResponse) Reset() { - *x = VMServiceDeleteIPResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceDeleteIPResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceDeleteIPResponse) ProtoMessage() {} - -func (x *VMServiceDeleteIPResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[35] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceDeleteIPResponse.ProtoReflect.Descriptor instead. -func (*VMServiceDeleteIPResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{35} -} - -// Request to order an additional IP address for a VM. -type VMServiceAddIPRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the VM to attach the IP to. - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // Project the VM belongs to. - Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` - // Order reference for this operation. - // TODO: can this be optional? - OrderNumber string `protobuf:"bytes,3,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceAddIPRequest) Reset() { - *x = VMServiceAddIPRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceAddIPRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceAddIPRequest) ProtoMessage() {} - -func (x *VMServiceAddIPRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[36] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceAddIPRequest.ProtoReflect.Descriptor instead. -func (*VMServiceAddIPRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{36} -} - -func (x *VMServiceAddIPRequest) GetUuid() string { - if x != nil { - return x.Uuid - } - return "" -} - -func (x *VMServiceAddIPRequest) GetProject() string { - if x != nil { - return x.Project - } - return "" -} - -func (x *VMServiceAddIPRequest) GetOrderNumber() string { - if x != nil { - return x.OrderNumber - } - return "" -} - -// Request to move an IP address from one VM to another. -type VMServiceMoveIPRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the VM the IP currently belongs to. - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // UUID of the network interface holding the IP. - InterfaceUuid string `protobuf:"bytes,2,opt,name=interface_uuid,json=interfaceUuid,proto3" json:"interface_uuid,omitempty"` - // Project the VM belongs to. - Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` - // Order reference for this operation. - // TODO: can this be optional? - OrderNumber string `protobuf:"bytes,4,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` - // UUID of the VM to move the IP to. - TargetVmUuid string `protobuf:"bytes,5,opt,name=target_vm_uuid,json=targetVmUuid,proto3" json:"target_vm_uuid,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceMoveIPRequest) Reset() { - *x = VMServiceMoveIPRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceMoveIPRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceMoveIPRequest) ProtoMessage() {} - -func (x *VMServiceMoveIPRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[37] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceMoveIPRequest.ProtoReflect.Descriptor instead. -func (*VMServiceMoveIPRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{37} -} - -func (x *VMServiceMoveIPRequest) GetUuid() string { - if x != nil { - return x.Uuid - } - return "" -} - -func (x *VMServiceMoveIPRequest) GetInterfaceUuid() string { - if x != nil { - return x.InterfaceUuid - } - return "" -} - -func (x *VMServiceMoveIPRequest) GetProject() string { - if x != nil { - return x.Project - } - return "" -} - -func (x *VMServiceMoveIPRequest) GetOrderNumber() string { - if x != nil { - return x.OrderNumber - } - return "" -} - -func (x *VMServiceMoveIPRequest) GetTargetVmUuid() string { - if x != nil { - return x.TargetVmUuid - } - return "" -} - -// Request to delete an IP address from a VM. -type VMServiceDeleteIPRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the VM the IP belongs to. - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // UUID of the network interface holding the IP. - InterfaceUuid string `protobuf:"bytes,2,opt,name=interface_uuid,json=interfaceUuid,proto3" json:"interface_uuid,omitempty"` - // Project the VM belongs to. - Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` - // Order reference for this operation. - // TODO: can this be optional? - OrderNumber string `protobuf:"bytes,4,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceDeleteIPRequest) Reset() { - *x = VMServiceDeleteIPRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceDeleteIPRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceDeleteIPRequest) ProtoMessage() {} - -func (x *VMServiceDeleteIPRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[38] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceDeleteIPRequest.ProtoReflect.Descriptor instead. -func (*VMServiceDeleteIPRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{38} -} - -func (x *VMServiceDeleteIPRequest) GetUuid() string { - if x != nil { - return x.Uuid - } - return "" -} - -func (x *VMServiceDeleteIPRequest) GetInterfaceUuid() string { - if x != nil { - return x.InterfaceUuid - } - return "" -} - -func (x *VMServiceDeleteIPRequest) GetProject() string { - if x != nil { - return x.Project - } - return "" -} - -func (x *VMServiceDeleteIPRequest) GetOrderNumber() string { - if x != nil { - return x.OrderNumber - } - return "" -} - -// Request to validate an AddIP without ordering anything. -type VMServiceValidateAddIPRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // The add IP request to validate. - AddIp *VMServiceAddIPRequest `protobuf:"bytes,1,opt,name=add_ip,json=addIp,proto3" json:"add_ip,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceValidateAddIPRequest) Reset() { - *x = VMServiceValidateAddIPRequest{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceValidateAddIPRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceValidateAddIPRequest) ProtoMessage() {} - -func (x *VMServiceValidateAddIPRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[39] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceValidateAddIPRequest.ProtoReflect.Descriptor instead. -func (*VMServiceValidateAddIPRequest) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{39} -} - -func (x *VMServiceValidateAddIPRequest) GetAddIp() *VMServiceAddIPRequest { - if x != nil { - return x.AddIp - } - return nil -} - -// Response for ValidateAddIP; violations are returned as an InvalidArgument error. -type VMServiceValidateAddIPResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *VMServiceValidateAddIPResponse) Reset() { - *x = VMServiceValidateAddIPResponse{} - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[40] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *VMServiceValidateAddIPResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VMServiceValidateAddIPResponse) ProtoMessage() {} - -func (x *VMServiceValidateAddIPResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_vm_v1_vm_proto_msgTypes[40] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VMServiceValidateAddIPResponse.ProtoReflect.Descriptor instead. -func (*VMServiceValidateAddIPResponse) Descriptor() ([]byte, []int) { - return file_fits_api_vm_v1_vm_proto_rawDescGZIP(), []int{40} -} - -var File_fits_api_vm_v1_vm_proto protoreflect.FileDescriptor - -const file_fits_api_vm_v1_vm_proto_rawDesc = "" + - "\n" + - "\x17fits/api/vm/v1/vm.proto\x12\x0efits.api.vm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x19fits/api/vm/v1/vlan.proto\"\x90\x01\n" + - "\fLinuxDetails\x12/\n" + - "\x05disks\x18\x01 \x03(\v2\x19.fits.api.vm.v1.LinuxDiskR\x05disks\x12%\n" + - "\tldap_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bldapUuid\x12(\n" + - "\tldap_fqdn\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\bldapFqdn\"\x9c\x01\n" + - "\x0eWindowsDetails\x121\n" + - "\x05disks\x18\x01 \x03(\v2\x1b.fits.api.vm.v1.WindowsDiskR\x05disks\x12)\n" + - "\vdomain_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\n" + - "domainUuid\x12,\n" + - "\vdomain_fqdn\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\n" + - "domainFqdn\"{\n" + - "\x10NetworkInterface\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n" + - "\tipaddress\x18\x02 \x01(\tB\v\xbaH\br\x06賮\xb1\x02\x01R\tipaddress\x12\x1e\n" + - "\n" + - "macaddress\x18\x03 \x01(\tR\n" + - "macaddress\"\x9d\a\n" + - "\n" + - "VMInstance\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n" + - "\x04meta\x18\x02 \x01(\v2\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n" + - "\x04fqdn\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04fqdn\x12#\n" + - "\x06tenant\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n" + - "\fproject_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vprojectUuid\x12!\n" + - "\aos_uuid\x18\x06 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n" + - "\rlocation_uuid\x18\a \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\flocationUuid\x12+\n" + - "\fcontact_uuid\x18\b \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\x12\x10\n" + - "\x03cpu\x18\t \x01(\rR\x03cpu\x12\x10\n" + - "\x03ram\x18\n" + - " \x01(\rR\x03ram\x12\x16\n" + - "\x06backup\x18\v \x01(\bR\x06backup\x12\x16\n" + - "\x06status\x18\f \x01(\tR\x06status\x12\x1f\n" + - "\vstatus_info\x18\r \x01(\tR\n" + - "statusInfo\x12J\n" + - "\favailability\x18\x0e \x01(\x0e2\x1c.fits.api.vm.v1.AvailabilityB\b\xbaH\x05\x82\x01\x02\x10\x01R\favailability\x12J\n" + - "\fserviceclass\x18\x0f \x01(\x0e2\x1c.fits.api.vm.v1.ServiceClassB\b\xbaH\x05\x82\x01\x02\x10\x01R\fserviceclass\x12I\n" + - "\x0fwindows_details\x18\x10 \x01(\v2\x1e.fits.api.vm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12C\n" + - "\rlinux_details\x18\x11 \x01(\v2\x1c.fits.api.vm.v1.LinuxDetailsH\x00R\flinuxDetails\x12@\n" + - "\n" + - "interfaces\x18\x12 \x03(\v2 .fits.api.vm.v1.NetworkInterfaceR\n" + - "interfaces\x12(\n" + - "\x04vlan\x18\x13 \x01(\v2\x14.fits.api.vm.v1.VlanR\x04vlan\x12!\n" + - "\forder_number\x18\x14 \x01(\tR\vorderNumber\x12\x1a\n" + - "\bcontract\x18\x15 \x01(\bR\bcontractB\x10\n" + - "\adetails\x12\x05\xbaH\x02\b\x01\"f\n" + - "\x13VMServiceGetRequest\x12!\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12#\n" + - "\x06tenant\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\a\n" + - "\x05_uuid\"B\n" + - "\x14VMServiceGetResponse\x12*\n" + - "\x02vm\x18\x01 \x01(\v2\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"\x87\x01\n" + - "\x1dVMServiceCreateWindowsRequest\x12)\n" + - "\vdomain_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\n" + - "domainUuid\x12;\n" + - "\x05disks\x18\x02 \x03(\v2\x1b.fits.api.vm.v1.WindowsDiskB\b\xbaH\x05\x92\x01\x02\b\x01R\x05disks\"\x7f\n" + - "\x1bVMServiceCreateLinuxRequest\x12%\n" + - "\tldap_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bldapUuid\x129\n" + - "\x05disks\x18\x02 \x03(\v2\x19.fits.api.vm.v1.LinuxDiskB\b\xbaH\x05\x92\x01\x02\b\x01R\x05disks\"\xdf\x05\n" + - "\x16VMServiceCreateRequest\x12+\n" + - "\fproject_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vprojectUuid\x12$\n" + - "\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n" + - "\aos_uuid\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n" + - "\tvlan_uuid\x18\x04 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bvlanUuid\x12-\n" + - "\rlocation_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\flocationUuid\x12+\n" + - "\fcontact_uuid\x18\x06 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\x12\x10\n" + - "\x03cpu\x18\a \x01(\rR\x03cpu\x12\x10\n" + - "\x03ram\x18\b \x01(\rR\x03ram\x12!\n" + - "\forder_number\x18\t \x01(\tR\vorderNumber\x12+\n" + - "\x06labels\x18\n" + - " \x01(\v2\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n" + - "\x06backup\x18\v \x01(\bR\x06backup\x12J\n" + - "\favailability\x18\f \x01(\x0e2\x1c.fits.api.vm.v1.AvailabilityB\b\xbaH\x05\x82\x01\x02\x10\x01R\favailability\x12J\n" + - "\fserviceclass\x18\r \x01(\x0e2\x1c.fits.api.vm.v1.ServiceClassB\b\xbaH\x05\x82\x01\x02\x10\x01R\fserviceclass\x12I\n" + - "\awindows\x18\x0e \x01(\v2-.fits.api.vm.v1.VMServiceCreateWindowsRequestH\x00R\awindows\x12C\n" + - "\x05linux\x18\x0f \x01(\v2+.fits.api.vm.v1.VMServiceCreateLinuxRequestH\x00R\x05linuxB\x0f\n" + - "\x06vmtype\x12\x05\xbaH\x02\b\x01B\a\n" + - "\x05_name\"\xc6\x01\n" + - "\tLinuxDisk\x12!\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n" + - "\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n" + - "\vauto_extend\x18\x03 \x01(\bR\n" + - "autoExtend\x12\x17\n" + - "\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12$\n" + - "\vmount_point\x18\x05 \x01(\tH\x02R\n" + - "mountPoint\x88\x01\x01B\a\n" + - "\x05_uuidB\a\n" + - "\x05_sizeB\x0e\n" + - "\f_mount_point\"\xc9\x01\n" + - "\vWindowsDisk\x12!\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n" + - "\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n" + - "\vauto_extend\x18\x03 \x01(\bR\n" + - "autoExtend\x12\x17\n" + - "\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12%\n" + - "\vdriveletter\x18\x05 \x01(\tH\x02R\vdriveletter\x88\x01\x01B\a\n" + - "\x05_uuidB\a\n" + - "\x05_sizeB\x0e\n" + - "\f_driveletter\"\x19\n" + - "\x17VMServiceCreateResponse\"\xad\x03\n" + - "\x16VMServiceUpdateRequest\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + - "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + - "\forder_number\x18\x03 \x01(\tR\vorderNumber\x12@\n" + - "\vupdate_meta\x18\x04 \x01(\v2\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\n" + - "updateMeta\x12U\n" + - "\x11performance_class\x18\x05 \x01(\v2&.fits.api.vm.v1.PerformanceClassChangeH\x00R\x10performanceClass\x12I\n" + - "\rservice_class\x18\x06 \x01(\v2\".fits.api.vm.v1.ServiceClassChangeH\x00R\fserviceClass\x129\n" + - "\acontact\x18\a \x01(\v2\x1d.fits.api.vm.v1.ContactChangeH\x00R\acontactB\x0f\n" + - "\x06action\x12\x05\xbaH\x02\b\x01\"P\n" + - "\x16PerformanceClassChange\x12\x1b\n" + - "\x03cpu\x18\x01 \x01(\rB\t\xbaH\x06*\x04\x18@(\x01R\x03cpu\x12\x19\n" + - "\x03ram\x18\x02 \x01(\rB\a\xbaH\x04*\x02 \x00R\x03ram\"`\n" + - "\x12ServiceClassChange\x12J\n" + - "\fserviceclass\x18\x01 \x01(\x0e2\x1c.fits.api.vm.v1.ServiceClassB\b\xbaH\x05\x82\x01\x02\x10\x01R\fserviceclass\"<\n" + - "\rContactChange\x12+\n" + - "\fcontact_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\"\x19\n" + - "\x17VMServiceUpdateResponse\"K\n" + - "\x14VMServiceListRequest\x12(\n" + - "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01B\t\n" + - "\a_tenant\"E\n" + - "\x15VMServiceListResponse\x12,\n" + - "\x03vms\x18\x01 \x03(\v2\x1a.fits.api.vm.v1.VMInstanceR\x03vms\"}\n" + - "\x16VMServiceDeleteRequest\x12\"\n" + - "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12\x1c\n" + - "\x04uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n" + - "\forder_number\x18\x03 \x01(\tR\vorderNumber\"\x19\n" + - "\x17VMServiceDeleteResponse\"h\n" + - "\x1eVMServiceValidateCreateRequest\x12F\n" + - "\x06create\x18\x01 \x01(\v2&.fits.api.vm.v1.VMServiceCreateRequestB\x06\xbaH\x03\xc8\x01\x01R\x06create\"!\n" + - "\x1fVMServiceValidateCreateResponse\"m\n" + - "\x1fVMServiceValidateAddDiskRequest\x12J\n" + - "\badd_disk\x18\x01 \x01(\v2'.fits.api.vm.v1.VMServiceAddDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\aaddDisk\"\"\n" + - " VMServiceValidateAddDiskResponse\"y\n" + - "\"VMServiceValidateUpdateDiskRequest\x12S\n" + - "\vupdate_disk\x18\x01 \x01(\v2*.fits.api.vm.v1.VMServiceUpdateDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\n" + - "updateDisk\"%\n" + - "#VMServiceValidateUpdateDiskResponse\"\x1a\n" + - "\x18VMServiceAddDiskResponse\"\x1d\n" + - "\x1bVMServiceUpdateDiskResponse\"\x1d\n" + - "\x1bVMServiceDeleteDiskResponse\"\xf9\x01\n" + - "\x17VMServiceAddDiskRequest\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + - "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + - "\forder_number\x18\x03 \x01(\tR\vorderNumber\x121\n" + - "\x05linux\x18\x04 \x01(\v2\x19.fits.api.vm.v1.LinuxDiskH\x00R\x05linux\x127\n" + - "\awindows\x18\x05 \x01(\v2\x1b.fits.api.vm.v1.WindowsDiskH\x00R\awindowsB\r\n" + - "\x04disk\x12\x05\xbaH\x02\b\x01\"\x80\x02\n" + - "\x1aVMServiceUpdateDiskRequest\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n" + - "\tdisk_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bdiskUuid\x12\"\n" + - "\aproject\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + - "\forder_number\x18\x04 \x01(\tR\vorderNumber\x12$\n" + - "\vauto_extend\x18\x05 \x01(\bH\x00R\n" + - "autoExtend\x88\x01\x01\x12\x17\n" + - "\x04size\x18\x06 \x01(\x04H\x01R\x04size\x88\x01\x01B\x0e\n" + - "\f_auto_extendB\a\n" + - "\x05_size\"\xa8\x01\n" + - "\x1aVMServiceDeleteDiskRequest\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n" + - "\tdisk_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\bdiskUuid\x12\"\n" + - "\aproject\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + - "\forder_number\x18\x04 \x01(\tR\vorderNumber\"\x18\n" + - "\x16VMServiceAddIPResponse\"\x19\n" + - "\x17VMServiceMoveIPResponse\"\x1b\n" + - "\x19VMServiceDeleteIPResponse\"|\n" + - "\x15VMServiceAddIPRequest\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + - "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + - "\forder_number\x18\x03 \x01(\tR\vorderNumber\"\xde\x01\n" + - "\x16VMServiceMoveIPRequest\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n" + - "\x0einterface_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n" + - "\aproject\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + - "\forder_number\x18\x04 \x01(\tR\vorderNumber\x12.\n" + - "\x0etarget_vm_uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\ftargetVmUuid\"\xb0\x01\n" + - "\x18VMServiceDeleteIPRequest\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n" + - "\x0einterface_uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n" + - "\aproject\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + - "\forder_number\x18\x04 \x01(\tR\vorderNumber\"e\n" + - "\x1dVMServiceValidateAddIPRequest\x12D\n" + - "\x06add_ip\x18\x01 \x01(\v2%.fits.api.vm.v1.VMServiceAddIPRequestB\x06\xbaH\x03\xc8\x01\x01R\x05addIp\" \n" + - "\x1eVMServiceValidateAddIPResponse*\xa6\x01\n" + - "\fAvailability\x12\"\n" + - "\x18AVAILABILITY_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1b\n" + - "\x0fAVAILABILITY_V0\x10\x01\x1a\x06\x82\xb2\x19\x02V0\x12\x1b\n" + - "\x0fAVAILABILITY_V1\x10\x02\x1a\x06\x82\xb2\x19\x02V1\x12\x1b\n" + - "\x0fAVAILABILITY_V2\x10\x03\x1a\x06\x82\xb2\x19\x02V2\x12\x1b\n" + - "\x0fAVAILABILITY_V3\x10\x04\x1a\x06\x82\xb2\x19\x02V3*\x93\x01\n" + - "\fServiceClass\x12#\n" + - "\x19SERVICE_CLASS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1e\n" + - "\x11SERVICE_CLASS_SZ1\x10\x01\x1a\a\x82\xb2\x19\x03SZ1\x12\x1e\n" + - "\x11SERVICE_CLASS_SZ2\x10\x02\x1a\a\x82\xb2\x19\x03SZ2\x12\x1e\n" + - "\x11SERVICE_CLASS_SZ3\x10\x03\x1a\a\x82\xb2\x19\x03SZ32\x93\r\n" + - "\tVMService\x12]\n" + - "\x03Get\x12#.fits.api.vm.v1.VMServiceGetRequest\x1a$.fits.api.vm.v1.VMServiceGetResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12e\n" + - "\x06Create\x12&.fits.api.vm.v1.VMServiceCreateRequest\x1a'.fits.api.vm.v1.VMServiceCreateResponse\"\n" + - "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12e\n" + - "\x06Update\x12&.fits.api.vm.v1.VMServiceUpdateRequest\x1a'.fits.api.vm.v1.VMServiceUpdateResponse\"\n" + - "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12`\n" + - "\x04List\x12$.fits.api.vm.v1.VMServiceListRequest\x1a%.fits.api.vm.v1.VMServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12e\n" + - "\x06Delete\x12&.fits.api.vm.v1.VMServiceDeleteRequest\x1a'.fits.api.vm.v1.VMServiceDeleteResponse\"\n" + - "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12h\n" + - "\aAddDisk\x12'.fits.api.vm.v1.VMServiceAddDiskRequest\x1a(.fits.api.vm.v1.VMServiceAddDiskResponse\"\n" + - "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12q\n" + - "\n" + - "UpdateDisk\x12*.fits.api.vm.v1.VMServiceUpdateDiskRequest\x1a+.fits.api.vm.v1.VMServiceUpdateDiskResponse\"\n" + - "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12q\n" + - "\n" + - "DeleteDisk\x12*.fits.api.vm.v1.VMServiceDeleteDiskRequest\x1a+.fits.api.vm.v1.VMServiceDeleteDiskResponse\"\n" + - "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12b\n" + - "\x05AddIP\x12%.fits.api.vm.v1.VMServiceAddIPRequest\x1a&.fits.api.vm.v1.VMServiceAddIPResponse\"\n" + - "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12e\n" + - "\x06MoveIP\x12&.fits.api.vm.v1.VMServiceMoveIPRequest\x1a'.fits.api.vm.v1.VMServiceMoveIPResponse\"\n" + - "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12k\n" + - "\bDeleteIP\x12(.fits.api.vm.v1.VMServiceDeleteIPRequest\x1a).fits.api.vm.v1.VMServiceDeleteIPResponse\"\n" + - "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12}\n" + - "\x0eValidateCreate\x12..fits.api.vm.v1.VMServiceValidateCreateRequest\x1a/.fits.api.vm.v1.VMServiceValidateCreateResponse\"\n" + - "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x80\x01\n" + - "\x0fValidateAddDisk\x12/.fits.api.vm.v1.VMServiceValidateAddDiskRequest\x1a0.fits.api.vm.v1.VMServiceValidateAddDiskResponse\"\n" + - "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x89\x01\n" + - "\x12ValidateUpdateDisk\x122.fits.api.vm.v1.VMServiceValidateUpdateDiskRequest\x1a3.fits.api.vm.v1.VMServiceValidateUpdateDiskResponse\"\n" + - "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12z\n" + - "\rValidateAddIP\x12-.fits.api.vm.v1.VMServiceValidateAddIPRequest\x1a..fits.api.vm.v1.VMServiceValidateAddIPResponse\"\n" + - "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02B\xa5\x01\n" + - "\x12com.fits.api.vm.v1B\aVmProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03FAV\xaa\x02\x0eFits.Api.Vm.V1\xca\x02\x0eFits\\Api\\Vm\\V1\xe2\x02\x1aFits\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11Fits::Api::Vm::V1b\x06proto3" - -var ( - file_fits_api_vm_v1_vm_proto_rawDescOnce sync.Once - file_fits_api_vm_v1_vm_proto_rawDescData []byte -) - -func file_fits_api_vm_v1_vm_proto_rawDescGZIP() []byte { - file_fits_api_vm_v1_vm_proto_rawDescOnce.Do(func() { - file_fits_api_vm_v1_vm_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_vm_proto_rawDesc), len(file_fits_api_vm_v1_vm_proto_rawDesc))) - }) - return file_fits_api_vm_v1_vm_proto_rawDescData -} - -var file_fits_api_vm_v1_vm_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_fits_api_vm_v1_vm_proto_msgTypes = make([]protoimpl.MessageInfo, 41) -var file_fits_api_vm_v1_vm_proto_goTypes = []any{ - (Availability)(0), // 0: fits.api.vm.v1.Availability - (ServiceClass)(0), // 1: fits.api.vm.v1.ServiceClass - (*LinuxDetails)(nil), // 2: fits.api.vm.v1.LinuxDetails - (*WindowsDetails)(nil), // 3: fits.api.vm.v1.WindowsDetails - (*NetworkInterface)(nil), // 4: fits.api.vm.v1.NetworkInterface - (*VMInstance)(nil), // 5: fits.api.vm.v1.VMInstance - (*VMServiceGetRequest)(nil), // 6: fits.api.vm.v1.VMServiceGetRequest - (*VMServiceGetResponse)(nil), // 7: fits.api.vm.v1.VMServiceGetResponse - (*VMServiceCreateWindowsRequest)(nil), // 8: fits.api.vm.v1.VMServiceCreateWindowsRequest - (*VMServiceCreateLinuxRequest)(nil), // 9: fits.api.vm.v1.VMServiceCreateLinuxRequest - (*VMServiceCreateRequest)(nil), // 10: fits.api.vm.v1.VMServiceCreateRequest - (*LinuxDisk)(nil), // 11: fits.api.vm.v1.LinuxDisk - (*WindowsDisk)(nil), // 12: fits.api.vm.v1.WindowsDisk - (*VMServiceCreateResponse)(nil), // 13: fits.api.vm.v1.VMServiceCreateResponse - (*VMServiceUpdateRequest)(nil), // 14: fits.api.vm.v1.VMServiceUpdateRequest - (*PerformanceClassChange)(nil), // 15: fits.api.vm.v1.PerformanceClassChange - (*ServiceClassChange)(nil), // 16: fits.api.vm.v1.ServiceClassChange - (*ContactChange)(nil), // 17: fits.api.vm.v1.ContactChange - (*VMServiceUpdateResponse)(nil), // 18: fits.api.vm.v1.VMServiceUpdateResponse - (*VMServiceListRequest)(nil), // 19: fits.api.vm.v1.VMServiceListRequest - (*VMServiceListResponse)(nil), // 20: fits.api.vm.v1.VMServiceListResponse - (*VMServiceDeleteRequest)(nil), // 21: fits.api.vm.v1.VMServiceDeleteRequest - (*VMServiceDeleteResponse)(nil), // 22: fits.api.vm.v1.VMServiceDeleteResponse - (*VMServiceValidateCreateRequest)(nil), // 23: fits.api.vm.v1.VMServiceValidateCreateRequest - (*VMServiceValidateCreateResponse)(nil), // 24: fits.api.vm.v1.VMServiceValidateCreateResponse - (*VMServiceValidateAddDiskRequest)(nil), // 25: fits.api.vm.v1.VMServiceValidateAddDiskRequest - (*VMServiceValidateAddDiskResponse)(nil), // 26: fits.api.vm.v1.VMServiceValidateAddDiskResponse - (*VMServiceValidateUpdateDiskRequest)(nil), // 27: fits.api.vm.v1.VMServiceValidateUpdateDiskRequest - (*VMServiceValidateUpdateDiskResponse)(nil), // 28: fits.api.vm.v1.VMServiceValidateUpdateDiskResponse - (*VMServiceAddDiskResponse)(nil), // 29: fits.api.vm.v1.VMServiceAddDiskResponse - (*VMServiceUpdateDiskResponse)(nil), // 30: fits.api.vm.v1.VMServiceUpdateDiskResponse - (*VMServiceDeleteDiskResponse)(nil), // 31: fits.api.vm.v1.VMServiceDeleteDiskResponse - (*VMServiceAddDiskRequest)(nil), // 32: fits.api.vm.v1.VMServiceAddDiskRequest - (*VMServiceUpdateDiskRequest)(nil), // 33: fits.api.vm.v1.VMServiceUpdateDiskRequest - (*VMServiceDeleteDiskRequest)(nil), // 34: fits.api.vm.v1.VMServiceDeleteDiskRequest - (*VMServiceAddIPResponse)(nil), // 35: fits.api.vm.v1.VMServiceAddIPResponse - (*VMServiceMoveIPResponse)(nil), // 36: fits.api.vm.v1.VMServiceMoveIPResponse - (*VMServiceDeleteIPResponse)(nil), // 37: fits.api.vm.v1.VMServiceDeleteIPResponse - (*VMServiceAddIPRequest)(nil), // 38: fits.api.vm.v1.VMServiceAddIPRequest - (*VMServiceMoveIPRequest)(nil), // 39: fits.api.vm.v1.VMServiceMoveIPRequest - (*VMServiceDeleteIPRequest)(nil), // 40: fits.api.vm.v1.VMServiceDeleteIPRequest - (*VMServiceValidateAddIPRequest)(nil), // 41: fits.api.vm.v1.VMServiceValidateAddIPRequest - (*VMServiceValidateAddIPResponse)(nil), // 42: fits.api.vm.v1.VMServiceValidateAddIPResponse - (*v1.Meta)(nil), // 43: fits.api.v1.Meta - (*Vlan)(nil), // 44: fits.api.vm.v1.Vlan - (*v1.Labels)(nil), // 45: fits.api.v1.Labels - (*v1.UpdateMeta)(nil), // 46: fits.api.v1.UpdateMeta -} -var file_fits_api_vm_v1_vm_proto_depIdxs = []int32{ - 11, // 0: fits.api.vm.v1.LinuxDetails.disks:type_name -> fits.api.vm.v1.LinuxDisk - 12, // 1: fits.api.vm.v1.WindowsDetails.disks:type_name -> fits.api.vm.v1.WindowsDisk - 43, // 2: fits.api.vm.v1.VMInstance.meta:type_name -> fits.api.v1.Meta - 0, // 3: fits.api.vm.v1.VMInstance.availability:type_name -> fits.api.vm.v1.Availability - 1, // 4: fits.api.vm.v1.VMInstance.serviceclass:type_name -> fits.api.vm.v1.ServiceClass - 3, // 5: fits.api.vm.v1.VMInstance.windows_details:type_name -> fits.api.vm.v1.WindowsDetails - 2, // 6: fits.api.vm.v1.VMInstance.linux_details:type_name -> fits.api.vm.v1.LinuxDetails - 4, // 7: fits.api.vm.v1.VMInstance.interfaces:type_name -> fits.api.vm.v1.NetworkInterface - 44, // 8: fits.api.vm.v1.VMInstance.vlan:type_name -> fits.api.vm.v1.Vlan - 5, // 9: fits.api.vm.v1.VMServiceGetResponse.vm:type_name -> fits.api.vm.v1.VMInstance - 12, // 10: fits.api.vm.v1.VMServiceCreateWindowsRequest.disks:type_name -> fits.api.vm.v1.WindowsDisk - 11, // 11: fits.api.vm.v1.VMServiceCreateLinuxRequest.disks:type_name -> fits.api.vm.v1.LinuxDisk - 45, // 12: fits.api.vm.v1.VMServiceCreateRequest.labels:type_name -> fits.api.v1.Labels - 0, // 13: fits.api.vm.v1.VMServiceCreateRequest.availability:type_name -> fits.api.vm.v1.Availability - 1, // 14: fits.api.vm.v1.VMServiceCreateRequest.serviceclass:type_name -> fits.api.vm.v1.ServiceClass - 8, // 15: fits.api.vm.v1.VMServiceCreateRequest.windows:type_name -> fits.api.vm.v1.VMServiceCreateWindowsRequest - 9, // 16: fits.api.vm.v1.VMServiceCreateRequest.linux:type_name -> fits.api.vm.v1.VMServiceCreateLinuxRequest - 46, // 17: fits.api.vm.v1.VMServiceUpdateRequest.update_meta:type_name -> fits.api.v1.UpdateMeta - 15, // 18: fits.api.vm.v1.VMServiceUpdateRequest.performance_class:type_name -> fits.api.vm.v1.PerformanceClassChange - 16, // 19: fits.api.vm.v1.VMServiceUpdateRequest.service_class:type_name -> fits.api.vm.v1.ServiceClassChange - 17, // 20: fits.api.vm.v1.VMServiceUpdateRequest.contact:type_name -> fits.api.vm.v1.ContactChange - 1, // 21: fits.api.vm.v1.ServiceClassChange.serviceclass:type_name -> fits.api.vm.v1.ServiceClass - 5, // 22: fits.api.vm.v1.VMServiceListResponse.vms:type_name -> fits.api.vm.v1.VMInstance - 10, // 23: fits.api.vm.v1.VMServiceValidateCreateRequest.create:type_name -> fits.api.vm.v1.VMServiceCreateRequest - 32, // 24: fits.api.vm.v1.VMServiceValidateAddDiskRequest.add_disk:type_name -> fits.api.vm.v1.VMServiceAddDiskRequest - 33, // 25: fits.api.vm.v1.VMServiceValidateUpdateDiskRequest.update_disk:type_name -> fits.api.vm.v1.VMServiceUpdateDiskRequest - 11, // 26: fits.api.vm.v1.VMServiceAddDiskRequest.linux:type_name -> fits.api.vm.v1.LinuxDisk - 12, // 27: fits.api.vm.v1.VMServiceAddDiskRequest.windows:type_name -> fits.api.vm.v1.WindowsDisk - 38, // 28: fits.api.vm.v1.VMServiceValidateAddIPRequest.add_ip:type_name -> fits.api.vm.v1.VMServiceAddIPRequest - 6, // 29: fits.api.vm.v1.VMService.Get:input_type -> fits.api.vm.v1.VMServiceGetRequest - 10, // 30: fits.api.vm.v1.VMService.Create:input_type -> fits.api.vm.v1.VMServiceCreateRequest - 14, // 31: fits.api.vm.v1.VMService.Update:input_type -> fits.api.vm.v1.VMServiceUpdateRequest - 19, // 32: fits.api.vm.v1.VMService.List:input_type -> fits.api.vm.v1.VMServiceListRequest - 21, // 33: fits.api.vm.v1.VMService.Delete:input_type -> fits.api.vm.v1.VMServiceDeleteRequest - 32, // 34: fits.api.vm.v1.VMService.AddDisk:input_type -> fits.api.vm.v1.VMServiceAddDiskRequest - 33, // 35: fits.api.vm.v1.VMService.UpdateDisk:input_type -> fits.api.vm.v1.VMServiceUpdateDiskRequest - 34, // 36: fits.api.vm.v1.VMService.DeleteDisk:input_type -> fits.api.vm.v1.VMServiceDeleteDiskRequest - 38, // 37: fits.api.vm.v1.VMService.AddIP:input_type -> fits.api.vm.v1.VMServiceAddIPRequest - 39, // 38: fits.api.vm.v1.VMService.MoveIP:input_type -> fits.api.vm.v1.VMServiceMoveIPRequest - 40, // 39: fits.api.vm.v1.VMService.DeleteIP:input_type -> fits.api.vm.v1.VMServiceDeleteIPRequest - 23, // 40: fits.api.vm.v1.VMService.ValidateCreate:input_type -> fits.api.vm.v1.VMServiceValidateCreateRequest - 25, // 41: fits.api.vm.v1.VMService.ValidateAddDisk:input_type -> fits.api.vm.v1.VMServiceValidateAddDiskRequest - 27, // 42: fits.api.vm.v1.VMService.ValidateUpdateDisk:input_type -> fits.api.vm.v1.VMServiceValidateUpdateDiskRequest - 41, // 43: fits.api.vm.v1.VMService.ValidateAddIP:input_type -> fits.api.vm.v1.VMServiceValidateAddIPRequest - 7, // 44: fits.api.vm.v1.VMService.Get:output_type -> fits.api.vm.v1.VMServiceGetResponse - 13, // 45: fits.api.vm.v1.VMService.Create:output_type -> fits.api.vm.v1.VMServiceCreateResponse - 18, // 46: fits.api.vm.v1.VMService.Update:output_type -> fits.api.vm.v1.VMServiceUpdateResponse - 20, // 47: fits.api.vm.v1.VMService.List:output_type -> fits.api.vm.v1.VMServiceListResponse - 22, // 48: fits.api.vm.v1.VMService.Delete:output_type -> fits.api.vm.v1.VMServiceDeleteResponse - 29, // 49: fits.api.vm.v1.VMService.AddDisk:output_type -> fits.api.vm.v1.VMServiceAddDiskResponse - 30, // 50: fits.api.vm.v1.VMService.UpdateDisk:output_type -> fits.api.vm.v1.VMServiceUpdateDiskResponse - 31, // 51: fits.api.vm.v1.VMService.DeleteDisk:output_type -> fits.api.vm.v1.VMServiceDeleteDiskResponse - 35, // 52: fits.api.vm.v1.VMService.AddIP:output_type -> fits.api.vm.v1.VMServiceAddIPResponse - 36, // 53: fits.api.vm.v1.VMService.MoveIP:output_type -> fits.api.vm.v1.VMServiceMoveIPResponse - 37, // 54: fits.api.vm.v1.VMService.DeleteIP:output_type -> fits.api.vm.v1.VMServiceDeleteIPResponse - 24, // 55: fits.api.vm.v1.VMService.ValidateCreate:output_type -> fits.api.vm.v1.VMServiceValidateCreateResponse - 26, // 56: fits.api.vm.v1.VMService.ValidateAddDisk:output_type -> fits.api.vm.v1.VMServiceValidateAddDiskResponse - 28, // 57: fits.api.vm.v1.VMService.ValidateUpdateDisk:output_type -> fits.api.vm.v1.VMServiceValidateUpdateDiskResponse - 42, // 58: fits.api.vm.v1.VMService.ValidateAddIP:output_type -> fits.api.vm.v1.VMServiceValidateAddIPResponse - 44, // [44:59] is the sub-list for method output_type - 29, // [29:44] is the sub-list for method input_type - 29, // [29:29] is the sub-list for extension type_name - 29, // [29:29] is the sub-list for extension extendee - 0, // [0:29] is the sub-list for field type_name -} - -func init() { file_fits_api_vm_v1_vm_proto_init() } -func file_fits_api_vm_v1_vm_proto_init() { - if File_fits_api_vm_v1_vm_proto != nil { - return - } - file_fits_api_vm_v1_vlan_proto_init() - file_fits_api_vm_v1_vm_proto_msgTypes[3].OneofWrappers = []any{ - (*VMInstance_WindowsDetails)(nil), - (*VMInstance_LinuxDetails)(nil), - } - file_fits_api_vm_v1_vm_proto_msgTypes[4].OneofWrappers = []any{} - file_fits_api_vm_v1_vm_proto_msgTypes[8].OneofWrappers = []any{ - (*VMServiceCreateRequest_Windows)(nil), - (*VMServiceCreateRequest_Linux)(nil), - } - file_fits_api_vm_v1_vm_proto_msgTypes[9].OneofWrappers = []any{} - file_fits_api_vm_v1_vm_proto_msgTypes[10].OneofWrappers = []any{} - file_fits_api_vm_v1_vm_proto_msgTypes[12].OneofWrappers = []any{ - (*VMServiceUpdateRequest_PerformanceClass)(nil), - (*VMServiceUpdateRequest_ServiceClass)(nil), - (*VMServiceUpdateRequest_Contact)(nil), - } - file_fits_api_vm_v1_vm_proto_msgTypes[17].OneofWrappers = []any{} - file_fits_api_vm_v1_vm_proto_msgTypes[30].OneofWrappers = []any{ - (*VMServiceAddDiskRequest_Linux)(nil), - (*VMServiceAddDiskRequest_Windows)(nil), - } - file_fits_api_vm_v1_vm_proto_msgTypes[31].OneofWrappers = []any{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_vm_v1_vm_proto_rawDesc), len(file_fits_api_vm_v1_vm_proto_rawDesc)), - NumEnums: 2, - NumMessages: 41, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_fits_api_vm_v1_vm_proto_goTypes, - DependencyIndexes: file_fits_api_vm_v1_vm_proto_depIdxs, - EnumInfos: file_fits_api_vm_v1_vm_proto_enumTypes, - MessageInfos: file_fits_api_vm_v1_vm_proto_msgTypes, - }.Build() - File_fits_api_vm_v1_vm_proto = out.File - file_fits_api_vm_v1_vm_proto_goTypes = nil - file_fits_api_vm_v1_vm_proto_depIdxs = nil -} diff --git a/go/fits/api/vm/v1/vmv1connect/service.connect.go b/go/fits/api/vm/v1/vmv1connect/service.connect.go deleted file mode 100644 index be54e37..0000000 --- a/go/fits/api/vm/v1/vmv1connect/service.connect.go +++ /dev/null @@ -1,114 +0,0 @@ -// Code generated by protoc-gen-connect-go. DO NOT EDIT. -// -// Source: fits/api/vm/v1/service.proto - -package vmv1connect - -import ( - connect "connectrpc.com/connect" - context "context" - errors "errors" - v1 "github.com/fi-ts/api/go/fits/api/vm/v1" - http "net/http" - strings "strings" -) - -// This is a compile-time assertion to ensure that this generated file and the connect package are -// compatible. If you get a compiler error that this constant is not defined, this code was -// generated with a version of connect newer than the one compiled into your binary. You can fix the -// problem by either regenerating this code with an older version of connect or updating the connect -// version compiled into your binary. -const _ = connect.IsAtLeastVersion1_13_0 - -const ( - // ServiceServiceName is the fully-qualified name of the ServiceService service. - ServiceServiceName = "fits.api.vm.v1.ServiceService" -) - -// These constants are the fully-qualified names of the RPCs defined in this package. They're -// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route. -// -// Note that these are different from the fully-qualified method names used by -// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to -// reflection-formatted method names, remove the leading slash and convert the remaining slash to a -// period. -const ( - // ServiceServiceListProcedure is the fully-qualified name of the ServiceService's List RPC. - ServiceServiceListProcedure = "/fits.api.vm.v1.ServiceService/List" -) - -// ServiceServiceClient is a client for the fits.api.vm.v1.ServiceService service. -type ServiceServiceClient interface { - // Returns a list of all services. - List(context.Context, *v1.ServiceServiceListRequest) (*v1.ServiceServiceListResponse, error) -} - -// NewServiceServiceClient constructs a client for the fits.api.vm.v1.ServiceService service. By -// default, it uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, -// and sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the -// connect.WithGRPC() or connect.WithGRPCWeb() options. -// -// The URL supplied here should be the base URL for the Connect or gRPC server (for example, -// http://api.acme.com or https://acme.com/grpc). -func NewServiceServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) ServiceServiceClient { - baseURL = strings.TrimRight(baseURL, "/") - serviceServiceMethods := v1.File_fits_api_vm_v1_service_proto.Services().ByName("ServiceService").Methods() - return &serviceServiceClient{ - list: connect.NewClient[v1.ServiceServiceListRequest, v1.ServiceServiceListResponse]( - httpClient, - baseURL+ServiceServiceListProcedure, - connect.WithSchema(serviceServiceMethods.ByName("List")), - connect.WithClientOptions(opts...), - ), - } -} - -// serviceServiceClient implements ServiceServiceClient. -type serviceServiceClient struct { - list *connect.Client[v1.ServiceServiceListRequest, v1.ServiceServiceListResponse] -} - -// List calls fits.api.vm.v1.ServiceService.List. -func (c *serviceServiceClient) List(ctx context.Context, req *v1.ServiceServiceListRequest) (*v1.ServiceServiceListResponse, error) { - response, err := c.list.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// ServiceServiceHandler is an implementation of the fits.api.vm.v1.ServiceService service. -type ServiceServiceHandler interface { - // Returns a list of all services. - List(context.Context, *v1.ServiceServiceListRequest) (*v1.ServiceServiceListResponse, error) -} - -// NewServiceServiceHandler builds an HTTP handler from the service implementation. It returns the -// path on which to mount the handler and the handler itself. -// -// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf -// and JSON codecs. They also support gzip compression. -func NewServiceServiceHandler(svc ServiceServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { - serviceServiceMethods := v1.File_fits_api_vm_v1_service_proto.Services().ByName("ServiceService").Methods() - serviceServiceListHandler := connect.NewUnaryHandlerSimple( - ServiceServiceListProcedure, - svc.List, - connect.WithSchema(serviceServiceMethods.ByName("List")), - connect.WithHandlerOptions(opts...), - ) - return "/fits.api.vm.v1.ServiceService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - switch r.URL.Path { - case ServiceServiceListProcedure: - serviceServiceListHandler.ServeHTTP(w, r) - default: - http.NotFound(w, r) - } - }) -} - -// UnimplementedServiceServiceHandler returns CodeUnimplemented from all methods. -type UnimplementedServiceServiceHandler struct{} - -func (UnimplementedServiceServiceHandler) List(context.Context, *v1.ServiceServiceListRequest) (*v1.ServiceServiceListResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.ServiceService.List is not implemented")) -} diff --git a/go/fits/api/vm/v1/vmv1connect/vm.connect.go b/go/fits/api/vm/v1/vmv1connect/vm.connect.go deleted file mode 100644 index 5cfdbc0..0000000 --- a/go/fits/api/vm/v1/vmv1connect/vm.connect.go +++ /dev/null @@ -1,595 +0,0 @@ -// Code generated by protoc-gen-connect-go. DO NOT EDIT. -// -// Source: fits/api/vm/v1/vm.proto - -package vmv1connect - -import ( - connect "connectrpc.com/connect" - context "context" - errors "errors" - v1 "github.com/fi-ts/api/go/fits/api/vm/v1" - http "net/http" - strings "strings" -) - -// This is a compile-time assertion to ensure that this generated file and the connect package are -// compatible. If you get a compiler error that this constant is not defined, this code was -// generated with a version of connect newer than the one compiled into your binary. You can fix the -// problem by either regenerating this code with an older version of connect or updating the connect -// version compiled into your binary. -const _ = connect.IsAtLeastVersion1_13_0 - -const ( - // VMServiceName is the fully-qualified name of the VMService service. - VMServiceName = "fits.api.vm.v1.VMService" -) - -// These constants are the fully-qualified names of the RPCs defined in this package. They're -// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route. -// -// Note that these are different from the fully-qualified method names used by -// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to -// reflection-formatted method names, remove the leading slash and convert the remaining slash to a -// period. -const ( - // VMServiceGetProcedure is the fully-qualified name of the VMService's Get RPC. - VMServiceGetProcedure = "/fits.api.vm.v1.VMService/Get" - // VMServiceCreateProcedure is the fully-qualified name of the VMService's Create RPC. - VMServiceCreateProcedure = "/fits.api.vm.v1.VMService/Create" - // VMServiceUpdateProcedure is the fully-qualified name of the VMService's Update RPC. - VMServiceUpdateProcedure = "/fits.api.vm.v1.VMService/Update" - // VMServiceListProcedure is the fully-qualified name of the VMService's List RPC. - VMServiceListProcedure = "/fits.api.vm.v1.VMService/List" - // VMServiceDeleteProcedure is the fully-qualified name of the VMService's Delete RPC. - VMServiceDeleteProcedure = "/fits.api.vm.v1.VMService/Delete" - // VMServiceAddDiskProcedure is the fully-qualified name of the VMService's AddDisk RPC. - VMServiceAddDiskProcedure = "/fits.api.vm.v1.VMService/AddDisk" - // VMServiceUpdateDiskProcedure is the fully-qualified name of the VMService's UpdateDisk RPC. - VMServiceUpdateDiskProcedure = "/fits.api.vm.v1.VMService/UpdateDisk" - // VMServiceDeleteDiskProcedure is the fully-qualified name of the VMService's DeleteDisk RPC. - VMServiceDeleteDiskProcedure = "/fits.api.vm.v1.VMService/DeleteDisk" - // VMServiceAddIPProcedure is the fully-qualified name of the VMService's AddIP RPC. - VMServiceAddIPProcedure = "/fits.api.vm.v1.VMService/AddIP" - // VMServiceMoveIPProcedure is the fully-qualified name of the VMService's MoveIP RPC. - VMServiceMoveIPProcedure = "/fits.api.vm.v1.VMService/MoveIP" - // VMServiceDeleteIPProcedure is the fully-qualified name of the VMService's DeleteIP RPC. - VMServiceDeleteIPProcedure = "/fits.api.vm.v1.VMService/DeleteIP" - // VMServiceValidateCreateProcedure is the fully-qualified name of the VMService's ValidateCreate - // RPC. - VMServiceValidateCreateProcedure = "/fits.api.vm.v1.VMService/ValidateCreate" - // VMServiceValidateAddDiskProcedure is the fully-qualified name of the VMService's ValidateAddDisk - // RPC. - VMServiceValidateAddDiskProcedure = "/fits.api.vm.v1.VMService/ValidateAddDisk" - // VMServiceValidateUpdateDiskProcedure is the fully-qualified name of the VMService's - // ValidateUpdateDisk RPC. - VMServiceValidateUpdateDiskProcedure = "/fits.api.vm.v1.VMService/ValidateUpdateDisk" - // VMServiceValidateAddIPProcedure is the fully-qualified name of the VMService's ValidateAddIP RPC. - VMServiceValidateAddIPProcedure = "/fits.api.vm.v1.VMService/ValidateAddIP" -) - -// VMServiceClient is a client for the fits.api.vm.v1.VMService service. -type VMServiceClient interface { - // Returns the VM with the specified UUID. - Get(context.Context, *v1.VMServiceGetRequest) (*v1.VMServiceGetResponse, error) - // Creates a new VM. - Create(context.Context, *v1.VMServiceCreateRequest) (*v1.VMServiceCreateResponse, error) - // Updates a VM. - Update(context.Context, *v1.VMServiceUpdateRequest) (*v1.VMServiceUpdateResponse, error) - // Returns the list of all VMs. - List(context.Context, *v1.VMServiceListRequest) (*v1.VMServiceListResponse, error) - // Deletes a VM. - Delete(context.Context, *v1.VMServiceDeleteRequest) (*v1.VMServiceDeleteResponse, error) - // Orders an additional data disk for a VM. - AddDisk(context.Context, *v1.VMServiceAddDiskRequest) (*v1.VMServiceAddDiskResponse, error) - // Changes the size or auto-extend behavior of an existing data disk. - UpdateDisk(context.Context, *v1.VMServiceUpdateDiskRequest) (*v1.VMServiceUpdateDiskResponse, error) - // Cancels a data disk. - DeleteDisk(context.Context, *v1.VMServiceDeleteDiskRequest) (*v1.VMServiceDeleteDiskResponse, error) - // Orders an additional IP address for a VM. - AddIP(context.Context, *v1.VMServiceAddIPRequest) (*v1.VMServiceAddIPResponse, error) - // Moves an IP address from one VM to another. - MoveIP(context.Context, *v1.VMServiceMoveIPRequest) (*v1.VMServiceMoveIPResponse, error) - // Deletes an IP address from a VM. - DeleteIP(context.Context, *v1.VMServiceDeleteIPRequest) (*v1.VMServiceDeleteIPResponse, error) - // Validates a VM create request without creating anything. Intended for - // form pre-checks; the create endpoint validates again before executing. - ValidateCreate(context.Context, *v1.VMServiceValidateCreateRequest) (*v1.VMServiceValidateCreateResponse, error) - // Validates an AddDisk request without ordering anything. - ValidateAddDisk(context.Context, *v1.VMServiceValidateAddDiskRequest) (*v1.VMServiceValidateAddDiskResponse, error) - // Validates an UpdateDisk request without changing anything. - ValidateUpdateDisk(context.Context, *v1.VMServiceValidateUpdateDiskRequest) (*v1.VMServiceValidateUpdateDiskResponse, error) - // Validates an AddIP request without ordering anything. - ValidateAddIP(context.Context, *v1.VMServiceValidateAddIPRequest) (*v1.VMServiceValidateAddIPResponse, error) -} - -// NewVMServiceClient constructs a client for the fits.api.vm.v1.VMService service. By default, it -// uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends -// uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or -// connect.WithGRPCWeb() options. -// -// The URL supplied here should be the base URL for the Connect or gRPC server (for example, -// http://api.acme.com or https://acme.com/grpc). -func NewVMServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) VMServiceClient { - baseURL = strings.TrimRight(baseURL, "/") - vMServiceMethods := v1.File_fits_api_vm_v1_vm_proto.Services().ByName("VMService").Methods() - return &vMServiceClient{ - get: connect.NewClient[v1.VMServiceGetRequest, v1.VMServiceGetResponse]( - httpClient, - baseURL+VMServiceGetProcedure, - connect.WithSchema(vMServiceMethods.ByName("Get")), - connect.WithClientOptions(opts...), - ), - create: connect.NewClient[v1.VMServiceCreateRequest, v1.VMServiceCreateResponse]( - httpClient, - baseURL+VMServiceCreateProcedure, - connect.WithSchema(vMServiceMethods.ByName("Create")), - connect.WithClientOptions(opts...), - ), - update: connect.NewClient[v1.VMServiceUpdateRequest, v1.VMServiceUpdateResponse]( - httpClient, - baseURL+VMServiceUpdateProcedure, - connect.WithSchema(vMServiceMethods.ByName("Update")), - connect.WithClientOptions(opts...), - ), - list: connect.NewClient[v1.VMServiceListRequest, v1.VMServiceListResponse]( - httpClient, - baseURL+VMServiceListProcedure, - connect.WithSchema(vMServiceMethods.ByName("List")), - connect.WithClientOptions(opts...), - ), - delete: connect.NewClient[v1.VMServiceDeleteRequest, v1.VMServiceDeleteResponse]( - httpClient, - baseURL+VMServiceDeleteProcedure, - connect.WithSchema(vMServiceMethods.ByName("Delete")), - connect.WithClientOptions(opts...), - ), - addDisk: connect.NewClient[v1.VMServiceAddDiskRequest, v1.VMServiceAddDiskResponse]( - httpClient, - baseURL+VMServiceAddDiskProcedure, - connect.WithSchema(vMServiceMethods.ByName("AddDisk")), - connect.WithClientOptions(opts...), - ), - updateDisk: connect.NewClient[v1.VMServiceUpdateDiskRequest, v1.VMServiceUpdateDiskResponse]( - httpClient, - baseURL+VMServiceUpdateDiskProcedure, - connect.WithSchema(vMServiceMethods.ByName("UpdateDisk")), - connect.WithClientOptions(opts...), - ), - deleteDisk: connect.NewClient[v1.VMServiceDeleteDiskRequest, v1.VMServiceDeleteDiskResponse]( - httpClient, - baseURL+VMServiceDeleteDiskProcedure, - connect.WithSchema(vMServiceMethods.ByName("DeleteDisk")), - connect.WithClientOptions(opts...), - ), - addIP: connect.NewClient[v1.VMServiceAddIPRequest, v1.VMServiceAddIPResponse]( - httpClient, - baseURL+VMServiceAddIPProcedure, - connect.WithSchema(vMServiceMethods.ByName("AddIP")), - connect.WithClientOptions(opts...), - ), - moveIP: connect.NewClient[v1.VMServiceMoveIPRequest, v1.VMServiceMoveIPResponse]( - httpClient, - baseURL+VMServiceMoveIPProcedure, - connect.WithSchema(vMServiceMethods.ByName("MoveIP")), - connect.WithClientOptions(opts...), - ), - deleteIP: connect.NewClient[v1.VMServiceDeleteIPRequest, v1.VMServiceDeleteIPResponse]( - httpClient, - baseURL+VMServiceDeleteIPProcedure, - connect.WithSchema(vMServiceMethods.ByName("DeleteIP")), - connect.WithClientOptions(opts...), - ), - validateCreate: connect.NewClient[v1.VMServiceValidateCreateRequest, v1.VMServiceValidateCreateResponse]( - httpClient, - baseURL+VMServiceValidateCreateProcedure, - connect.WithSchema(vMServiceMethods.ByName("ValidateCreate")), - connect.WithClientOptions(opts...), - ), - validateAddDisk: connect.NewClient[v1.VMServiceValidateAddDiskRequest, v1.VMServiceValidateAddDiskResponse]( - httpClient, - baseURL+VMServiceValidateAddDiskProcedure, - connect.WithSchema(vMServiceMethods.ByName("ValidateAddDisk")), - connect.WithClientOptions(opts...), - ), - validateUpdateDisk: connect.NewClient[v1.VMServiceValidateUpdateDiskRequest, v1.VMServiceValidateUpdateDiskResponse]( - httpClient, - baseURL+VMServiceValidateUpdateDiskProcedure, - connect.WithSchema(vMServiceMethods.ByName("ValidateUpdateDisk")), - connect.WithClientOptions(opts...), - ), - validateAddIP: connect.NewClient[v1.VMServiceValidateAddIPRequest, v1.VMServiceValidateAddIPResponse]( - httpClient, - baseURL+VMServiceValidateAddIPProcedure, - connect.WithSchema(vMServiceMethods.ByName("ValidateAddIP")), - connect.WithClientOptions(opts...), - ), - } -} - -// vMServiceClient implements VMServiceClient. -type vMServiceClient struct { - get *connect.Client[v1.VMServiceGetRequest, v1.VMServiceGetResponse] - create *connect.Client[v1.VMServiceCreateRequest, v1.VMServiceCreateResponse] - update *connect.Client[v1.VMServiceUpdateRequest, v1.VMServiceUpdateResponse] - list *connect.Client[v1.VMServiceListRequest, v1.VMServiceListResponse] - delete *connect.Client[v1.VMServiceDeleteRequest, v1.VMServiceDeleteResponse] - addDisk *connect.Client[v1.VMServiceAddDiskRequest, v1.VMServiceAddDiskResponse] - updateDisk *connect.Client[v1.VMServiceUpdateDiskRequest, v1.VMServiceUpdateDiskResponse] - deleteDisk *connect.Client[v1.VMServiceDeleteDiskRequest, v1.VMServiceDeleteDiskResponse] - addIP *connect.Client[v1.VMServiceAddIPRequest, v1.VMServiceAddIPResponse] - moveIP *connect.Client[v1.VMServiceMoveIPRequest, v1.VMServiceMoveIPResponse] - deleteIP *connect.Client[v1.VMServiceDeleteIPRequest, v1.VMServiceDeleteIPResponse] - validateCreate *connect.Client[v1.VMServiceValidateCreateRequest, v1.VMServiceValidateCreateResponse] - validateAddDisk *connect.Client[v1.VMServiceValidateAddDiskRequest, v1.VMServiceValidateAddDiskResponse] - validateUpdateDisk *connect.Client[v1.VMServiceValidateUpdateDiskRequest, v1.VMServiceValidateUpdateDiskResponse] - validateAddIP *connect.Client[v1.VMServiceValidateAddIPRequest, v1.VMServiceValidateAddIPResponse] -} - -// Get calls fits.api.vm.v1.VMService.Get. -func (c *vMServiceClient) Get(ctx context.Context, req *v1.VMServiceGetRequest) (*v1.VMServiceGetResponse, error) { - response, err := c.get.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// Create calls fits.api.vm.v1.VMService.Create. -func (c *vMServiceClient) Create(ctx context.Context, req *v1.VMServiceCreateRequest) (*v1.VMServiceCreateResponse, error) { - response, err := c.create.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// Update calls fits.api.vm.v1.VMService.Update. -func (c *vMServiceClient) Update(ctx context.Context, req *v1.VMServiceUpdateRequest) (*v1.VMServiceUpdateResponse, error) { - response, err := c.update.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// List calls fits.api.vm.v1.VMService.List. -func (c *vMServiceClient) List(ctx context.Context, req *v1.VMServiceListRequest) (*v1.VMServiceListResponse, error) { - response, err := c.list.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// Delete calls fits.api.vm.v1.VMService.Delete. -func (c *vMServiceClient) Delete(ctx context.Context, req *v1.VMServiceDeleteRequest) (*v1.VMServiceDeleteResponse, error) { - response, err := c.delete.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// AddDisk calls fits.api.vm.v1.VMService.AddDisk. -func (c *vMServiceClient) AddDisk(ctx context.Context, req *v1.VMServiceAddDiskRequest) (*v1.VMServiceAddDiskResponse, error) { - response, err := c.addDisk.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// UpdateDisk calls fits.api.vm.v1.VMService.UpdateDisk. -func (c *vMServiceClient) UpdateDisk(ctx context.Context, req *v1.VMServiceUpdateDiskRequest) (*v1.VMServiceUpdateDiskResponse, error) { - response, err := c.updateDisk.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// DeleteDisk calls fits.api.vm.v1.VMService.DeleteDisk. -func (c *vMServiceClient) DeleteDisk(ctx context.Context, req *v1.VMServiceDeleteDiskRequest) (*v1.VMServiceDeleteDiskResponse, error) { - response, err := c.deleteDisk.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// AddIP calls fits.api.vm.v1.VMService.AddIP. -func (c *vMServiceClient) AddIP(ctx context.Context, req *v1.VMServiceAddIPRequest) (*v1.VMServiceAddIPResponse, error) { - response, err := c.addIP.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// MoveIP calls fits.api.vm.v1.VMService.MoveIP. -func (c *vMServiceClient) MoveIP(ctx context.Context, req *v1.VMServiceMoveIPRequest) (*v1.VMServiceMoveIPResponse, error) { - response, err := c.moveIP.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// DeleteIP calls fits.api.vm.v1.VMService.DeleteIP. -func (c *vMServiceClient) DeleteIP(ctx context.Context, req *v1.VMServiceDeleteIPRequest) (*v1.VMServiceDeleteIPResponse, error) { - response, err := c.deleteIP.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// ValidateCreate calls fits.api.vm.v1.VMService.ValidateCreate. -func (c *vMServiceClient) ValidateCreate(ctx context.Context, req *v1.VMServiceValidateCreateRequest) (*v1.VMServiceValidateCreateResponse, error) { - response, err := c.validateCreate.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// ValidateAddDisk calls fits.api.vm.v1.VMService.ValidateAddDisk. -func (c *vMServiceClient) ValidateAddDisk(ctx context.Context, req *v1.VMServiceValidateAddDiskRequest) (*v1.VMServiceValidateAddDiskResponse, error) { - response, err := c.validateAddDisk.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// ValidateUpdateDisk calls fits.api.vm.v1.VMService.ValidateUpdateDisk. -func (c *vMServiceClient) ValidateUpdateDisk(ctx context.Context, req *v1.VMServiceValidateUpdateDiskRequest) (*v1.VMServiceValidateUpdateDiskResponse, error) { - response, err := c.validateUpdateDisk.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// ValidateAddIP calls fits.api.vm.v1.VMService.ValidateAddIP. -func (c *vMServiceClient) ValidateAddIP(ctx context.Context, req *v1.VMServiceValidateAddIPRequest) (*v1.VMServiceValidateAddIPResponse, error) { - response, err := c.validateAddIP.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - -// VMServiceHandler is an implementation of the fits.api.vm.v1.VMService service. -type VMServiceHandler interface { - // Returns the VM with the specified UUID. - Get(context.Context, *v1.VMServiceGetRequest) (*v1.VMServiceGetResponse, error) - // Creates a new VM. - Create(context.Context, *v1.VMServiceCreateRequest) (*v1.VMServiceCreateResponse, error) - // Updates a VM. - Update(context.Context, *v1.VMServiceUpdateRequest) (*v1.VMServiceUpdateResponse, error) - // Returns the list of all VMs. - List(context.Context, *v1.VMServiceListRequest) (*v1.VMServiceListResponse, error) - // Deletes a VM. - Delete(context.Context, *v1.VMServiceDeleteRequest) (*v1.VMServiceDeleteResponse, error) - // Orders an additional data disk for a VM. - AddDisk(context.Context, *v1.VMServiceAddDiskRequest) (*v1.VMServiceAddDiskResponse, error) - // Changes the size or auto-extend behavior of an existing data disk. - UpdateDisk(context.Context, *v1.VMServiceUpdateDiskRequest) (*v1.VMServiceUpdateDiskResponse, error) - // Cancels a data disk. - DeleteDisk(context.Context, *v1.VMServiceDeleteDiskRequest) (*v1.VMServiceDeleteDiskResponse, error) - // Orders an additional IP address for a VM. - AddIP(context.Context, *v1.VMServiceAddIPRequest) (*v1.VMServiceAddIPResponse, error) - // Moves an IP address from one VM to another. - MoveIP(context.Context, *v1.VMServiceMoveIPRequest) (*v1.VMServiceMoveIPResponse, error) - // Deletes an IP address from a VM. - DeleteIP(context.Context, *v1.VMServiceDeleteIPRequest) (*v1.VMServiceDeleteIPResponse, error) - // Validates a VM create request without creating anything. Intended for - // form pre-checks; the create endpoint validates again before executing. - ValidateCreate(context.Context, *v1.VMServiceValidateCreateRequest) (*v1.VMServiceValidateCreateResponse, error) - // Validates an AddDisk request without ordering anything. - ValidateAddDisk(context.Context, *v1.VMServiceValidateAddDiskRequest) (*v1.VMServiceValidateAddDiskResponse, error) - // Validates an UpdateDisk request without changing anything. - ValidateUpdateDisk(context.Context, *v1.VMServiceValidateUpdateDiskRequest) (*v1.VMServiceValidateUpdateDiskResponse, error) - // Validates an AddIP request without ordering anything. - ValidateAddIP(context.Context, *v1.VMServiceValidateAddIPRequest) (*v1.VMServiceValidateAddIPResponse, error) -} - -// NewVMServiceHandler builds an HTTP handler from the service implementation. It returns the path -// on which to mount the handler and the handler itself. -// -// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf -// and JSON codecs. They also support gzip compression. -func NewVMServiceHandler(svc VMServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { - vMServiceMethods := v1.File_fits_api_vm_v1_vm_proto.Services().ByName("VMService").Methods() - vMServiceGetHandler := connect.NewUnaryHandlerSimple( - VMServiceGetProcedure, - svc.Get, - connect.WithSchema(vMServiceMethods.ByName("Get")), - connect.WithHandlerOptions(opts...), - ) - vMServiceCreateHandler := connect.NewUnaryHandlerSimple( - VMServiceCreateProcedure, - svc.Create, - connect.WithSchema(vMServiceMethods.ByName("Create")), - connect.WithHandlerOptions(opts...), - ) - vMServiceUpdateHandler := connect.NewUnaryHandlerSimple( - VMServiceUpdateProcedure, - svc.Update, - connect.WithSchema(vMServiceMethods.ByName("Update")), - connect.WithHandlerOptions(opts...), - ) - vMServiceListHandler := connect.NewUnaryHandlerSimple( - VMServiceListProcedure, - svc.List, - connect.WithSchema(vMServiceMethods.ByName("List")), - connect.WithHandlerOptions(opts...), - ) - vMServiceDeleteHandler := connect.NewUnaryHandlerSimple( - VMServiceDeleteProcedure, - svc.Delete, - connect.WithSchema(vMServiceMethods.ByName("Delete")), - connect.WithHandlerOptions(opts...), - ) - vMServiceAddDiskHandler := connect.NewUnaryHandlerSimple( - VMServiceAddDiskProcedure, - svc.AddDisk, - connect.WithSchema(vMServiceMethods.ByName("AddDisk")), - connect.WithHandlerOptions(opts...), - ) - vMServiceUpdateDiskHandler := connect.NewUnaryHandlerSimple( - VMServiceUpdateDiskProcedure, - svc.UpdateDisk, - connect.WithSchema(vMServiceMethods.ByName("UpdateDisk")), - connect.WithHandlerOptions(opts...), - ) - vMServiceDeleteDiskHandler := connect.NewUnaryHandlerSimple( - VMServiceDeleteDiskProcedure, - svc.DeleteDisk, - connect.WithSchema(vMServiceMethods.ByName("DeleteDisk")), - connect.WithHandlerOptions(opts...), - ) - vMServiceAddIPHandler := connect.NewUnaryHandlerSimple( - VMServiceAddIPProcedure, - svc.AddIP, - connect.WithSchema(vMServiceMethods.ByName("AddIP")), - connect.WithHandlerOptions(opts...), - ) - vMServiceMoveIPHandler := connect.NewUnaryHandlerSimple( - VMServiceMoveIPProcedure, - svc.MoveIP, - connect.WithSchema(vMServiceMethods.ByName("MoveIP")), - connect.WithHandlerOptions(opts...), - ) - vMServiceDeleteIPHandler := connect.NewUnaryHandlerSimple( - VMServiceDeleteIPProcedure, - svc.DeleteIP, - connect.WithSchema(vMServiceMethods.ByName("DeleteIP")), - connect.WithHandlerOptions(opts...), - ) - vMServiceValidateCreateHandler := connect.NewUnaryHandlerSimple( - VMServiceValidateCreateProcedure, - svc.ValidateCreate, - connect.WithSchema(vMServiceMethods.ByName("ValidateCreate")), - connect.WithHandlerOptions(opts...), - ) - vMServiceValidateAddDiskHandler := connect.NewUnaryHandlerSimple( - VMServiceValidateAddDiskProcedure, - svc.ValidateAddDisk, - connect.WithSchema(vMServiceMethods.ByName("ValidateAddDisk")), - connect.WithHandlerOptions(opts...), - ) - vMServiceValidateUpdateDiskHandler := connect.NewUnaryHandlerSimple( - VMServiceValidateUpdateDiskProcedure, - svc.ValidateUpdateDisk, - connect.WithSchema(vMServiceMethods.ByName("ValidateUpdateDisk")), - connect.WithHandlerOptions(opts...), - ) - vMServiceValidateAddIPHandler := connect.NewUnaryHandlerSimple( - VMServiceValidateAddIPProcedure, - svc.ValidateAddIP, - connect.WithSchema(vMServiceMethods.ByName("ValidateAddIP")), - connect.WithHandlerOptions(opts...), - ) - return "/fits.api.vm.v1.VMService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - switch r.URL.Path { - case VMServiceGetProcedure: - vMServiceGetHandler.ServeHTTP(w, r) - case VMServiceCreateProcedure: - vMServiceCreateHandler.ServeHTTP(w, r) - case VMServiceUpdateProcedure: - vMServiceUpdateHandler.ServeHTTP(w, r) - case VMServiceListProcedure: - vMServiceListHandler.ServeHTTP(w, r) - case VMServiceDeleteProcedure: - vMServiceDeleteHandler.ServeHTTP(w, r) - case VMServiceAddDiskProcedure: - vMServiceAddDiskHandler.ServeHTTP(w, r) - case VMServiceUpdateDiskProcedure: - vMServiceUpdateDiskHandler.ServeHTTP(w, r) - case VMServiceDeleteDiskProcedure: - vMServiceDeleteDiskHandler.ServeHTTP(w, r) - case VMServiceAddIPProcedure: - vMServiceAddIPHandler.ServeHTTP(w, r) - case VMServiceMoveIPProcedure: - vMServiceMoveIPHandler.ServeHTTP(w, r) - case VMServiceDeleteIPProcedure: - vMServiceDeleteIPHandler.ServeHTTP(w, r) - case VMServiceValidateCreateProcedure: - vMServiceValidateCreateHandler.ServeHTTP(w, r) - case VMServiceValidateAddDiskProcedure: - vMServiceValidateAddDiskHandler.ServeHTTP(w, r) - case VMServiceValidateUpdateDiskProcedure: - vMServiceValidateUpdateDiskHandler.ServeHTTP(w, r) - case VMServiceValidateAddIPProcedure: - vMServiceValidateAddIPHandler.ServeHTTP(w, r) - default: - http.NotFound(w, r) - } - }) -} - -// UnimplementedVMServiceHandler returns CodeUnimplemented from all methods. -type UnimplementedVMServiceHandler struct{} - -func (UnimplementedVMServiceHandler) Get(context.Context, *v1.VMServiceGetRequest) (*v1.VMServiceGetResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.Get is not implemented")) -} - -func (UnimplementedVMServiceHandler) Create(context.Context, *v1.VMServiceCreateRequest) (*v1.VMServiceCreateResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.Create is not implemented")) -} - -func (UnimplementedVMServiceHandler) Update(context.Context, *v1.VMServiceUpdateRequest) (*v1.VMServiceUpdateResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.Update is not implemented")) -} - -func (UnimplementedVMServiceHandler) List(context.Context, *v1.VMServiceListRequest) (*v1.VMServiceListResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.List is not implemented")) -} - -func (UnimplementedVMServiceHandler) Delete(context.Context, *v1.VMServiceDeleteRequest) (*v1.VMServiceDeleteResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.Delete is not implemented")) -} - -func (UnimplementedVMServiceHandler) AddDisk(context.Context, *v1.VMServiceAddDiskRequest) (*v1.VMServiceAddDiskResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.AddDisk is not implemented")) -} - -func (UnimplementedVMServiceHandler) UpdateDisk(context.Context, *v1.VMServiceUpdateDiskRequest) (*v1.VMServiceUpdateDiskResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.UpdateDisk is not implemented")) -} - -func (UnimplementedVMServiceHandler) DeleteDisk(context.Context, *v1.VMServiceDeleteDiskRequest) (*v1.VMServiceDeleteDiskResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.DeleteDisk is not implemented")) -} - -func (UnimplementedVMServiceHandler) AddIP(context.Context, *v1.VMServiceAddIPRequest) (*v1.VMServiceAddIPResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.AddIP is not implemented")) -} - -func (UnimplementedVMServiceHandler) MoveIP(context.Context, *v1.VMServiceMoveIPRequest) (*v1.VMServiceMoveIPResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.MoveIP is not implemented")) -} - -func (UnimplementedVMServiceHandler) DeleteIP(context.Context, *v1.VMServiceDeleteIPRequest) (*v1.VMServiceDeleteIPResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.DeleteIP is not implemented")) -} - -func (UnimplementedVMServiceHandler) ValidateCreate(context.Context, *v1.VMServiceValidateCreateRequest) (*v1.VMServiceValidateCreateResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.ValidateCreate is not implemented")) -} - -func (UnimplementedVMServiceHandler) ValidateAddDisk(context.Context, *v1.VMServiceValidateAddDiskRequest) (*v1.VMServiceValidateAddDiskResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.ValidateAddDisk is not implemented")) -} - -func (UnimplementedVMServiceHandler) ValidateUpdateDisk(context.Context, *v1.VMServiceValidateUpdateDiskRequest) (*v1.VMServiceValidateUpdateDiskResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.ValidateUpdateDisk is not implemented")) -} - -func (UnimplementedVMServiceHandler) ValidateAddIP(context.Context, *v1.VMServiceValidateAddIPRequest) (*v1.VMServiceValidateAddIPResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.vm.v1.VMService.ValidateAddIP is not implemented")) -} diff --git a/go/permissions/servicepermissions.go b/go/permissions/servicepermissions.go index 6abea37..9607ffb 100755 --- a/go/permissions/servicepermissions.go +++ b/go/permissions/servicepermissions.go @@ -8,6 +8,11 @@ import ( func GetServices() []string { return []string{ + "fits.api.mvm.v1.LocationService", + "fits.api.mvm.v1.MVMService", + "fits.api.mvm.v1.OSService", + "fits.api.mvm.v1.StageTypeService", + "fits.api.mvm.v1.VLANService", "fits.api.v1.HealthService", "fits.api.v1.IPService", "fits.api.v1.MethodService", @@ -15,11 +20,6 @@ func GetServices() []string { "fits.api.v1.TenantService", "fits.api.v1.TokenService", "fits.api.v1.VersionService", - "fits.api.vm.v1.LocationService", - "fits.api.vm.v1.OSService", - "fits.api.vm.v1.StageTypeService", - "fits.api.vm.v1.VMService", - "fits.api.vm.v1.VlanService", } } @@ -49,76 +49,95 @@ func GetServicePermissions() *ServicePermissions { }, Project: Project{ v1.ProjectRole_PROJECT_ROLE_OWNER: map[string]struct{}{ - "/fits.api.v1.IPService/Create": {}, - "/fits.api.v1.IPService/Delete": {}, - "/fits.api.v1.IPService/Get": {}, - "/fits.api.v1.IPService/List": {}, - "/fits.api.v1.IPService/Update": {}, - "/fits.api.v1.ProjectService/Delete": {}, - "/fits.api.v1.ProjectService/Get": {}, - "/fits.api.v1.ProjectService/Update": {}, - "/fits.api.vm.v1.LocationService/List": {}, - "/fits.api.vm.v1.OSService/List": {}, - "/fits.api.vm.v1.StageTypeService/List": {}, - "/fits.api.vm.v1.VMService/AddDisk": {}, - "/fits.api.vm.v1.VMService/AddIP": {}, - "/fits.api.vm.v1.VMService/Create": {}, - "/fits.api.vm.v1.VMService/Delete": {}, - "/fits.api.vm.v1.VMService/DeleteDisk": {}, - "/fits.api.vm.v1.VMService/DeleteIP": {}, - "/fits.api.vm.v1.VMService/Get": {}, - "/fits.api.vm.v1.VMService/List": {}, - "/fits.api.vm.v1.VMService/MoveIP": {}, - "/fits.api.vm.v1.VMService/Update": {}, - "/fits.api.vm.v1.VMService/UpdateDisk": {}, - "/fits.api.vm.v1.VMService/ValidateAddDisk": {}, - "/fits.api.vm.v1.VMService/ValidateAddIP": {}, - "/fits.api.vm.v1.VMService/ValidateCreate": {}, - "/fits.api.vm.v1.VMService/ValidateUpdateDisk": {}, - "/fits.api.vm.v1.VlanService/List": {}, + "/fits.api.mvm.v1.LocationService/List": {}, + "/fits.api.mvm.v1.MVMService/AddDisk": {}, + "/fits.api.mvm.v1.MVMService/AddNetworkInterface": {}, + "/fits.api.mvm.v1.MVMService/Create": {}, + "/fits.api.mvm.v1.MVMService/Delete": {}, + "/fits.api.mvm.v1.MVMService/DeleteDisk": {}, + "/fits.api.mvm.v1.MVMService/DeleteNetworkInterface": {}, + "/fits.api.mvm.v1.MVMService/Get": {}, + "/fits.api.mvm.v1.MVMService/List": {}, + "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": {}, + "/fits.api.mvm.v1.MVMService/Update": {}, + "/fits.api.mvm.v1.MVMService/UpdateDisk": {}, + "/fits.api.mvm.v1.MVMService/ValidateAddDisk": {}, + "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": {}, + "/fits.api.mvm.v1.MVMService/ValidateCreate": {}, + "/fits.api.mvm.v1.MVMService/ValidateUpdateDisk": {}, + "/fits.api.mvm.v1.OSService/List": {}, + "/fits.api.mvm.v1.StageTypeService/List": {}, + "/fits.api.mvm.v1.VLANService/List": {}, + "/fits.api.v1.IPService/Create": {}, + "/fits.api.v1.IPService/Delete": {}, + "/fits.api.v1.IPService/Get": {}, + "/fits.api.v1.IPService/List": {}, + "/fits.api.v1.IPService/Update": {}, + "/fits.api.v1.ProjectService/Delete": {}, + "/fits.api.v1.ProjectService/Get": {}, + "/fits.api.v1.ProjectService/Update": {}, }, v1.ProjectRole_PROJECT_ROLE_EDITOR: map[string]struct{}{ - "/fits.api.v1.IPService/Create": {}, - "/fits.api.v1.IPService/Delete": {}, - "/fits.api.v1.IPService/Get": {}, - "/fits.api.v1.IPService/List": {}, - "/fits.api.v1.IPService/Update": {}, - "/fits.api.v1.ProjectService/Get": {}, - "/fits.api.v1.ProjectService/Update": {}, - "/fits.api.vm.v1.LocationService/List": {}, - "/fits.api.vm.v1.OSService/List": {}, - "/fits.api.vm.v1.StageTypeService/List": {}, - "/fits.api.vm.v1.VMService/AddDisk": {}, - "/fits.api.vm.v1.VMService/AddIP": {}, - "/fits.api.vm.v1.VMService/Create": {}, - "/fits.api.vm.v1.VMService/Delete": {}, - "/fits.api.vm.v1.VMService/DeleteDisk": {}, - "/fits.api.vm.v1.VMService/DeleteIP": {}, - "/fits.api.vm.v1.VMService/Get": {}, - "/fits.api.vm.v1.VMService/List": {}, - "/fits.api.vm.v1.VMService/MoveIP": {}, - "/fits.api.vm.v1.VMService/Update": {}, - "/fits.api.vm.v1.VMService/UpdateDisk": {}, - "/fits.api.vm.v1.VMService/ValidateAddDisk": {}, - "/fits.api.vm.v1.VMService/ValidateAddIP": {}, - "/fits.api.vm.v1.VMService/ValidateCreate": {}, - "/fits.api.vm.v1.VMService/ValidateUpdateDisk": {}, - "/fits.api.vm.v1.VlanService/List": {}, + "/fits.api.mvm.v1.LocationService/List": {}, + "/fits.api.mvm.v1.MVMService/AddDisk": {}, + "/fits.api.mvm.v1.MVMService/AddNetworkInterface": {}, + "/fits.api.mvm.v1.MVMService/Create": {}, + "/fits.api.mvm.v1.MVMService/Delete": {}, + "/fits.api.mvm.v1.MVMService/DeleteDisk": {}, + "/fits.api.mvm.v1.MVMService/DeleteNetworkInterface": {}, + "/fits.api.mvm.v1.MVMService/Get": {}, + "/fits.api.mvm.v1.MVMService/List": {}, + "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": {}, + "/fits.api.mvm.v1.MVMService/Update": {}, + "/fits.api.mvm.v1.MVMService/UpdateDisk": {}, + "/fits.api.mvm.v1.MVMService/ValidateAddDisk": {}, + "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": {}, + "/fits.api.mvm.v1.MVMService/ValidateCreate": {}, + "/fits.api.mvm.v1.MVMService/ValidateUpdateDisk": {}, + "/fits.api.mvm.v1.OSService/List": {}, + "/fits.api.mvm.v1.StageTypeService/List": {}, + "/fits.api.mvm.v1.VLANService/List": {}, + "/fits.api.v1.IPService/Create": {}, + "/fits.api.v1.IPService/Delete": {}, + "/fits.api.v1.IPService/Get": {}, + "/fits.api.v1.IPService/List": {}, + "/fits.api.v1.IPService/Update": {}, + "/fits.api.v1.ProjectService/Get": {}, + "/fits.api.v1.ProjectService/Update": {}, }, v1.ProjectRole_PROJECT_ROLE_VIEWER: map[string]struct{}{ - "/fits.api.v1.IPService/Get": {}, - "/fits.api.v1.IPService/List": {}, - "/fits.api.v1.ProjectService/Get": {}, - "/fits.api.vm.v1.LocationService/List": {}, - "/fits.api.vm.v1.OSService/List": {}, - "/fits.api.vm.v1.StageTypeService/List": {}, - "/fits.api.vm.v1.VMService/Get": {}, - "/fits.api.vm.v1.VMService/List": {}, - "/fits.api.vm.v1.VlanService/List": {}, + "/fits.api.mvm.v1.LocationService/List": {}, + "/fits.api.mvm.v1.MVMService/Get": {}, + "/fits.api.mvm.v1.MVMService/List": {}, + "/fits.api.mvm.v1.OSService/List": {}, + "/fits.api.mvm.v1.StageTypeService/List": {}, + "/fits.api.mvm.v1.VLANService/List": {}, + "/fits.api.v1.IPService/Get": {}, + "/fits.api.v1.IPService/List": {}, + "/fits.api.v1.ProjectService/Get": {}, }, }, }, Methods: map[string]struct{}{ + "/fits.api.mvm.v1.LocationService/List": {}, + "/fits.api.mvm.v1.MVMService/AddDisk": {}, + "/fits.api.mvm.v1.MVMService/AddNetworkInterface": {}, + "/fits.api.mvm.v1.MVMService/Create": {}, + "/fits.api.mvm.v1.MVMService/Delete": {}, + "/fits.api.mvm.v1.MVMService/DeleteDisk": {}, + "/fits.api.mvm.v1.MVMService/DeleteNetworkInterface": {}, + "/fits.api.mvm.v1.MVMService/Get": {}, + "/fits.api.mvm.v1.MVMService/List": {}, + "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": {}, + "/fits.api.mvm.v1.MVMService/Update": {}, + "/fits.api.mvm.v1.MVMService/UpdateDisk": {}, + "/fits.api.mvm.v1.MVMService/ValidateAddDisk": {}, + "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": {}, + "/fits.api.mvm.v1.MVMService/ValidateCreate": {}, + "/fits.api.mvm.v1.MVMService/ValidateUpdateDisk": {}, + "/fits.api.mvm.v1.OSService/List": {}, + "/fits.api.mvm.v1.StageTypeService/List": {}, + "/fits.api.mvm.v1.VLANService/List": {}, "/fits.api.v1.HealthService/Get": {}, "/fits.api.v1.IPService/Create": {}, "/fits.api.v1.IPService/Delete": {}, @@ -144,25 +163,6 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.v1.TokenService/Revoke": {}, "/fits.api.v1.TokenService/Update": {}, "/fits.api.v1.VersionService/Get": {}, - "/fits.api.vm.v1.LocationService/List": {}, - "/fits.api.vm.v1.OSService/List": {}, - "/fits.api.vm.v1.StageTypeService/List": {}, - "/fits.api.vm.v1.VMService/AddDisk": {}, - "/fits.api.vm.v1.VMService/AddIP": {}, - "/fits.api.vm.v1.VMService/Create": {}, - "/fits.api.vm.v1.VMService/Delete": {}, - "/fits.api.vm.v1.VMService/DeleteDisk": {}, - "/fits.api.vm.v1.VMService/DeleteIP": {}, - "/fits.api.vm.v1.VMService/Get": {}, - "/fits.api.vm.v1.VMService/List": {}, - "/fits.api.vm.v1.VMService/MoveIP": {}, - "/fits.api.vm.v1.VMService/Update": {}, - "/fits.api.vm.v1.VMService/UpdateDisk": {}, - "/fits.api.vm.v1.VMService/ValidateAddDisk": {}, - "/fits.api.vm.v1.VMService/ValidateAddIP": {}, - "/fits.api.vm.v1.VMService/ValidateCreate": {}, - "/fits.api.vm.v1.VMService/ValidateUpdateDisk": {}, - "/fits.api.vm.v1.VlanService/List": {}, "/grpc.reflection.v1.ServerReflection/ServerReflectionInfo": {}, "/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo": {}, }, @@ -194,80 +194,80 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.v1.TenantService/Update": true, }, Project: map[string]bool{ - "/fits.api.v1.IPService/Create": true, - "/fits.api.v1.IPService/Delete": true, - "/fits.api.v1.IPService/Get": true, - "/fits.api.v1.IPService/List": true, - "/fits.api.v1.IPService/Update": true, - "/fits.api.v1.ProjectService/Delete": true, - "/fits.api.v1.ProjectService/Get": true, - "/fits.api.v1.ProjectService/Update": true, - "/fits.api.vm.v1.LocationService/List": true, - "/fits.api.vm.v1.OSService/List": true, - "/fits.api.vm.v1.StageTypeService/List": true, - "/fits.api.vm.v1.VMService/AddDisk": true, - "/fits.api.vm.v1.VMService/AddIP": true, - "/fits.api.vm.v1.VMService/Create": true, - "/fits.api.vm.v1.VMService/Delete": true, - "/fits.api.vm.v1.VMService/DeleteDisk": true, - "/fits.api.vm.v1.VMService/DeleteIP": true, - "/fits.api.vm.v1.VMService/Get": true, - "/fits.api.vm.v1.VMService/List": true, - "/fits.api.vm.v1.VMService/MoveIP": true, - "/fits.api.vm.v1.VMService/Update": true, - "/fits.api.vm.v1.VMService/UpdateDisk": true, - "/fits.api.vm.v1.VMService/ValidateAddDisk": true, - "/fits.api.vm.v1.VMService/ValidateAddIP": true, - "/fits.api.vm.v1.VMService/ValidateCreate": true, - "/fits.api.vm.v1.VMService/ValidateUpdateDisk": true, - "/fits.api.vm.v1.VlanService/List": true, + "/fits.api.mvm.v1.LocationService/List": true, + "/fits.api.mvm.v1.MVMService/AddDisk": true, + "/fits.api.mvm.v1.MVMService/AddNetworkInterface": true, + "/fits.api.mvm.v1.MVMService/Create": true, + "/fits.api.mvm.v1.MVMService/Delete": true, + "/fits.api.mvm.v1.MVMService/DeleteDisk": true, + "/fits.api.mvm.v1.MVMService/DeleteNetworkInterface": true, + "/fits.api.mvm.v1.MVMService/Get": true, + "/fits.api.mvm.v1.MVMService/List": true, + "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": true, + "/fits.api.mvm.v1.MVMService/Update": true, + "/fits.api.mvm.v1.MVMService/UpdateDisk": true, + "/fits.api.mvm.v1.MVMService/ValidateAddDisk": true, + "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": true, + "/fits.api.mvm.v1.MVMService/ValidateCreate": true, + "/fits.api.mvm.v1.MVMService/ValidateUpdateDisk": true, + "/fits.api.mvm.v1.OSService/List": true, + "/fits.api.mvm.v1.StageTypeService/List": true, + "/fits.api.mvm.v1.VLANService/List": true, + "/fits.api.v1.IPService/Create": true, + "/fits.api.v1.IPService/Delete": true, + "/fits.api.v1.IPService/Get": true, + "/fits.api.v1.IPService/List": true, + "/fits.api.v1.IPService/Update": true, + "/fits.api.v1.ProjectService/Delete": true, + "/fits.api.v1.ProjectService/Get": true, + "/fits.api.v1.ProjectService/Update": true, }, }, Auditable: map[string]bool{ - "/fits.api.v1.HealthService/Get": false, - "/fits.api.v1.IPService/Create": true, - "/fits.api.v1.IPService/Delete": true, - "/fits.api.v1.IPService/Get": false, - "/fits.api.v1.IPService/List": false, - "/fits.api.v1.IPService/Update": true, - "/fits.api.v1.MethodService/List": false, - "/fits.api.v1.MethodService/TokenScopedList": false, - "/fits.api.v1.ProjectService/Create": true, - "/fits.api.v1.ProjectService/Delete": true, - "/fits.api.v1.ProjectService/Get": false, - "/fits.api.v1.ProjectService/List": false, - "/fits.api.v1.ProjectService/Update": true, - "/fits.api.v1.TenantService/Create": true, - "/fits.api.v1.TenantService/Delete": true, - "/fits.api.v1.TenantService/Get": false, - "/fits.api.v1.TenantService/List": false, - "/fits.api.v1.TenantService/Update": true, - "/fits.api.v1.TokenService/Create": true, - "/fits.api.v1.TokenService/Get": true, - "/fits.api.v1.TokenService/List": true, - "/fits.api.v1.TokenService/Refresh": true, - "/fits.api.v1.TokenService/Revoke": true, - "/fits.api.v1.TokenService/Update": true, - "/fits.api.v1.VersionService/Get": false, - "/fits.api.vm.v1.LocationService/List": false, - "/fits.api.vm.v1.OSService/List": false, - "/fits.api.vm.v1.StageTypeService/List": false, - "/fits.api.vm.v1.VMService/AddDisk": true, - "/fits.api.vm.v1.VMService/AddIP": true, - "/fits.api.vm.v1.VMService/Create": true, - "/fits.api.vm.v1.VMService/Delete": true, - "/fits.api.vm.v1.VMService/DeleteDisk": true, - "/fits.api.vm.v1.VMService/DeleteIP": true, - "/fits.api.vm.v1.VMService/Get": false, - "/fits.api.vm.v1.VMService/List": false, - "/fits.api.vm.v1.VMService/MoveIP": true, - "/fits.api.vm.v1.VMService/Update": true, - "/fits.api.vm.v1.VMService/UpdateDisk": true, - "/fits.api.vm.v1.VMService/ValidateAddDisk": false, - "/fits.api.vm.v1.VMService/ValidateAddIP": false, - "/fits.api.vm.v1.VMService/ValidateCreate": false, - "/fits.api.vm.v1.VMService/ValidateUpdateDisk": false, - "/fits.api.vm.v1.VlanService/List": false, + "/fits.api.mvm.v1.LocationService/List": false, + "/fits.api.mvm.v1.MVMService/AddDisk": true, + "/fits.api.mvm.v1.MVMService/AddNetworkInterface": true, + "/fits.api.mvm.v1.MVMService/Create": true, + "/fits.api.mvm.v1.MVMService/Delete": true, + "/fits.api.mvm.v1.MVMService/DeleteDisk": true, + "/fits.api.mvm.v1.MVMService/DeleteNetworkInterface": true, + "/fits.api.mvm.v1.MVMService/Get": false, + "/fits.api.mvm.v1.MVMService/List": false, + "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": true, + "/fits.api.mvm.v1.MVMService/Update": true, + "/fits.api.mvm.v1.MVMService/UpdateDisk": true, + "/fits.api.mvm.v1.MVMService/ValidateAddDisk": false, + "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": false, + "/fits.api.mvm.v1.MVMService/ValidateCreate": false, + "/fits.api.mvm.v1.MVMService/ValidateUpdateDisk": false, + "/fits.api.mvm.v1.OSService/List": false, + "/fits.api.mvm.v1.StageTypeService/List": false, + "/fits.api.mvm.v1.VLANService/List": false, + "/fits.api.v1.HealthService/Get": false, + "/fits.api.v1.IPService/Create": true, + "/fits.api.v1.IPService/Delete": true, + "/fits.api.v1.IPService/Get": false, + "/fits.api.v1.IPService/List": false, + "/fits.api.v1.IPService/Update": true, + "/fits.api.v1.MethodService/List": false, + "/fits.api.v1.MethodService/TokenScopedList": false, + "/fits.api.v1.ProjectService/Create": true, + "/fits.api.v1.ProjectService/Delete": true, + "/fits.api.v1.ProjectService/Get": false, + "/fits.api.v1.ProjectService/List": false, + "/fits.api.v1.ProjectService/Update": true, + "/fits.api.v1.TenantService/Create": true, + "/fits.api.v1.TenantService/Delete": true, + "/fits.api.v1.TenantService/Get": false, + "/fits.api.v1.TenantService/List": false, + "/fits.api.v1.TenantService/Update": true, + "/fits.api.v1.TokenService/Create": true, + "/fits.api.v1.TokenService/Get": true, + "/fits.api.v1.TokenService/List": true, + "/fits.api.v1.TokenService/Refresh": true, + "/fits.api.v1.TokenService/Revoke": true, + "/fits.api.v1.TokenService/Update": true, + "/fits.api.v1.VersionService/Get": false, }, } } diff --git a/js/client.ts b/js/client.ts index 8d1756f..3e4becc 100755 --- a/js/client.ts +++ b/js/client.ts @@ -5,31 +5,31 @@ import type { Client as ConnectClient } from "@connectrpc/connect"; import { createConnectTransport } from "@connectrpc/connect-web"; -import { HealthService as Apiv1HealthService } from "./fits/api/v1/health_pb"; +import { LocationService as Apimvmv1LocationService } from "./fits/api/mvm/v1/location_pb"; -import { IPService as Apiv1IPService } from "./fits/api/v1/ip_pb"; +import { MVMService as Apimvmv1MVMService } from "./fits/api/mvm/v1/mvm_pb"; -import { MethodService as Apiv1MethodService } from "./fits/api/v1/method_pb"; +import { OSService as Apimvmv1OSService } from "./fits/api/mvm/v1/os_pb"; -import { ProjectService as Apiv1ProjectService } from "./fits/api/v1/project_pb"; +import { StageTypeService as Apimvmv1StageTypeService } from "./fits/api/mvm/v1/stagetype_pb"; -import { TenantService as Apiv1TenantService } from "./fits/api/v1/tenant_pb"; +import { VLANService as Apimvmv1VLANService } from "./fits/api/mvm/v1/vlan_pb"; -import { TokenService as Apiv1TokenService } from "./fits/api/v1/token_pb"; -import { VersionService as Apiv1VersionService } from "./fits/api/v1/version_pb"; +import { HealthService as Apiv1HealthService } from "./fits/api/v1/health_pb"; +import { IPService as Apiv1IPService } from "./fits/api/v1/ip_pb"; -import { LocationService as Apivmv1LocationService } from "./fits/api/vm/v1/location_pb"; +import { MethodService as Apiv1MethodService } from "./fits/api/v1/method_pb"; -import { OSService as Apivmv1OSService } from "./fits/api/vm/v1/os_pb"; +import { ProjectService as Apiv1ProjectService } from "./fits/api/v1/project_pb"; -import { StageTypeService as Apivmv1StageTypeService } from "./fits/api/vm/v1/stagetype_pb"; +import { TenantService as Apiv1TenantService } from "./fits/api/v1/tenant_pb"; -import { VlanService as Apivmv1VlanService } from "./fits/api/vm/v1/vlan_pb"; +import { TokenService as Apiv1TokenService } from "./fits/api/v1/token_pb"; -import { VMService as Apivmv1VMService } from "./fits/api/vm/v1/vm_pb"; +import { VersionService as Apiv1VersionService } from "./fits/api/v1/version_pb"; @@ -41,9 +41,24 @@ export interface ClientConfig { export interface Client { + apimvmv1(): Apimvmv1; + apiv1(): Apiv1; - apivmv1(): Apivmv1; +} + + +export interface Apimvmv1 { + + location(): ConnectClient; + + mvm(): ConnectClient; + + os(): ConnectClient; + + stageType(): ConnectClient; + + vlan(): ConnectClient; } @@ -67,21 +82,6 @@ export interface Apiv1 { } -export interface Apivmv1 { - - location(): ConnectClient; - - os(): ConnectClient; - - stageType(): ConnectClient; - - vlan(): ConnectClient; - - vm(): ConnectClient; - -} - - function authInterceptor(token: string): Interceptor { return (next) => async (req) => { @@ -117,9 +117,9 @@ class ClientImpl implements Client { private transport: Transport; - private _apiv1?: Apiv1Impl; + private _apimvmv1?: Apimvmv1Impl; - private _apivmv1?: Apivmv1Impl; + private _apiv1?: Apiv1Impl; constructor(transport: Transport) { @@ -127,6 +127,13 @@ class ClientImpl implements Client { } + apimvmv1(): Apimvmv1 { + if (!this._apimvmv1) { + this._apimvmv1 = new Apimvmv1Impl(this.transport); + } + return this._apimvmv1; + } + apiv1(): Apiv1 { if (!this._apiv1) { this._apiv1 = new Apiv1Impl(this.transport); @@ -134,11 +141,62 @@ class ClientImpl implements Client { return this._apiv1; } - apivmv1(): Apivmv1 { - if (!this._apivmv1) { - this._apivmv1 = new Apivmv1Impl(this.transport); +} + + +class Apimvmv1Impl implements Apimvmv1 { + private transport: Transport; + + + private _location?: ConnectClient; + + private _mvm?: ConnectClient; + + private _os?: ConnectClient; + + private _stageType?: ConnectClient; + + private _vlan?: ConnectClient; + + + constructor(transport: Transport) { + this.transport = transport; + } + + + location(): ConnectClient { + if (!this._location) { + this._location = createClient(Apimvmv1LocationService, this.transport); + } + return this._location; + } + + mvm(): ConnectClient { + if (!this._mvm) { + this._mvm = createClient(Apimvmv1MVMService, this.transport); + } + return this._mvm; + } + + os(): ConnectClient { + if (!this._os) { + this._os = createClient(Apimvmv1OSService, this.transport); } - return this._apivmv1; + return this._os; + } + + stageType(): ConnectClient { + if (!this._stageType) { + this._stageType = createClient(Apimvmv1StageTypeService, this.transport); + } + return this._stageType; + } + + vlan(): ConnectClient { + if (!this._vlan) { + this._vlan = createClient(Apimvmv1VLANService, this.transport); + } + return this._vlan; } } @@ -220,61 +278,3 @@ class Apiv1Impl implements Apiv1 { } -class Apivmv1Impl implements Apivmv1 { - private transport: Transport; - - - private _location?: ConnectClient; - - private _os?: ConnectClient; - - private _stageType?: ConnectClient; - - private _vlan?: ConnectClient; - - private _vm?: ConnectClient; - - - constructor(transport: Transport) { - this.transport = transport; - } - - - location(): ConnectClient { - if (!this._location) { - this._location = createClient(Apivmv1LocationService, this.transport); - } - return this._location; - } - - os(): ConnectClient { - if (!this._os) { - this._os = createClient(Apivmv1OSService, this.transport); - } - return this._os; - } - - stageType(): ConnectClient { - if (!this._stageType) { - this._stageType = createClient(Apivmv1StageTypeService, this.transport); - } - return this._stageType; - } - - vlan(): ConnectClient { - if (!this._vlan) { - this._vlan = createClient(Apivmv1VlanService, this.transport); - } - return this._vlan; - } - - vm(): ConnectClient { - if (!this._vm) { - this._vm = createClient(Apivmv1VMService, this.transport); - } - return this._vm; - } - -} - - diff --git a/js/fits/api/mvm/v1/location_pb.ts b/js/fits/api/mvm/v1/location_pb.ts new file mode 100644 index 0000000..91000df --- /dev/null +++ b/js/fits/api/mvm/v1/location_pb.ts @@ -0,0 +1,106 @@ +// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" +// @generated from file fits/api/mvm/v1/location.proto (package fits.api.mvm.v1, syntax proto3) +/* eslint-disable */ + +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; +import { file_fits_api_v1_common } from "../../v1/common_pb"; +import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file fits/api/mvm/v1/location.proto. + */ +export const file_fits_api_mvm_v1_location: GenFile = /*@__PURE__*/ + fileDesc("Ch5maXRzL2FwaS9tdm0vdjEvbG9jYXRpb24ucHJvdG8SD2ZpdHMuYXBpLm12bS52MSI+CghMb2NhdGlvbhIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIaCgV0aXRsZRgCIAEoCUILukgIcgbAs66xAgEiOQoaTG9jYXRpb25TZXJ2aWNlTGlzdFJlcXVlc3QSGwoGdGVuYW50GAEgASgJQgu6SAhyBsCzrrECASJLChtMb2NhdGlvblNlcnZpY2VMaXN0UmVzcG9uc2USLAoJbG9jYXRpb25zGAEgAygLMhkuZml0cy5hcGkubXZtLnYxLkxvY2F0aW9uMoEBCg9Mb2NhdGlvblNlcnZpY2USbgoETGlzdBIrLmZpdHMuYXBpLm12bS52MS5Mb2NhdGlvblNlcnZpY2VMaXN0UmVxdWVzdBosLmZpdHMuYXBpLm12bS52MS5Mb2NhdGlvblNlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCQrIBChNjb20uZml0cy5hcGkubXZtLnYxQg1Mb2NhdGlvblByb3RvUAFaLWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL212bS92MTttdm12MaICA0ZBTaoCD0ZpdHMuQXBpLk12bS5WMcoCD0ZpdHNcQXBpXE12bVxWMeICG0ZpdHNcQXBpXE12bVxWMVxHUEJNZXRhZGF0YeoCEkZpdHM6OkFwaTo6TXZtOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); + +/** + * Location is the definition of an available datacenter location for MVM instances. + * + * @generated from message fits.api.mvm.v1.Location + */ +export type Location = Message<"fits.api.mvm.v1.Location"> & { + /** + * Uuid of this location + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * title of the location + * + * @generated from field: string title = 2; + */ + title: string; +}; + +/** + * Describes the message fits.api.mvm.v1.Location. + * Use `create(LocationSchema)` to create a new message. + */ +export const LocationSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_location, 0); + +/** + * LocationServiceListRequest is the request payload for a location list request. + * + * @generated from message fits.api.mvm.v1.LocationServiceListRequest + */ +export type LocationServiceListRequest = Message<"fits.api.mvm.v1.LocationServiceListRequest"> & { + /** + * Tenant to list available locations for + * + * @generated from field: string tenant = 1; + */ + tenant: string; +}; + +/** + * Describes the message fits.api.mvm.v1.LocationServiceListRequest. + * Use `create(LocationServiceListRequestSchema)` to create a new message. + */ +export const LocationServiceListRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_location, 1); + +/** + * LocationServiceListResponse is the response payload for a location list request + * + * @generated from message fits.api.mvm.v1.LocationServiceListResponse + */ +export type LocationServiceListResponse = Message<"fits.api.mvm.v1.LocationServiceListResponse"> & { + /** + * The available locations + * + * @generated from field: repeated fits.api.mvm.v1.Location locations = 1; + */ + locations: Location[]; +}; + +/** + * Describes the message fits.api.mvm.v1.LocationServiceListResponse. + * Use `create(LocationServiceListResponseSchema)` to create a new message. + */ +export const LocationServiceListResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_location, 2); + +/** + * LocationService lists datacenter locations available for managed VM (MVM) instances, scoped per tenant. + * + * @generated from service fits.api.mvm.v1.LocationService + */ +export const LocationService: GenService<{ + /** + * Returns a list of all datacenter locations available for a tenant. + * + * @generated from rpc fits.api.mvm.v1.LocationService.List + */ + list: { + methodKind: "unary"; + input: typeof LocationServiceListRequestSchema; + output: typeof LocationServiceListResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_fits_api_mvm_v1_location, 0); + diff --git a/js/fits/api/mvm/v1/mvm_pb.ts b/js/fits/api/mvm/v1/mvm_pb.ts new file mode 100644 index 0000000..21c2790 --- /dev/null +++ b/js/fits/api/mvm/v1/mvm_pb.ts @@ -0,0 +1,1788 @@ +// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" +// @generated from file fits/api/mvm/v1/mvm.proto (package fits.api.mvm.v1, syntax proto3) +/* eslint-disable */ + +import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; +import type { VLAN } from "./vlan_pb"; +import { file_fits_api_mvm_v1_vlan } from "./vlan_pb"; +import type { Labels, Meta, UpdateMeta } from "../../v1/common_pb"; +import { file_fits_api_v1_common } from "../../v1/common_pb"; +import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file fits/api/mvm/v1/mvm.proto. + */ +export const file_fits_api_mvm_v1_mvm: GenFile = /*@__PURE__*/ + fileDesc("ChlmaXRzL2FwaS9tdm0vdjEvbXZtLnByb3RvEg9maXRzLmFwaS5tdm0udjEidgoMTGludXhEZXRhaWxzEikKBWRpc2tzGAEgAygLMhouZml0cy5hcGkubXZtLnYxLkxpbnV4RGlzaxIbCglsZGFwX3V1aWQYAiABKAlCCLpIBXIDsAEBEh4KCWxkYXBfZnFkbhgDIAEoCUILukgIcgbAs66xAgEifgoOV2luZG93c0RldGFpbHMSKwoFZGlza3MYASADKAsyHC5maXRzLmFwaS5tdm0udjEuV2luZG93c0Rpc2sSHQoLZG9tYWluX3V1aWQYAiABKAlCCLpIBXIDsAEBEiAKC2RvbWFpbl9mcWRuGAMgASgJQgu6SAhyBsCzrrECASJeChBOZXR3b3JrSW50ZXJmYWNlEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEh4KCWlwYWRkcmVzcxgCIAEoCUILukgIcgbos66xAgESEgoKbWFjYWRkcmVzcxgDIAEoCSLRBQoLTVZNSW5zdGFuY2USFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEZnFkbhgDIAEoCUILukgIcgbAs66xAgESGwoGdGVuYW50GAQgASgJQgu6SAhyBsCzrrECARIeCgxwcm9qZWN0X3V1aWQYBSABKAlCCLpIBXIDsAEBEhkKB29zX3V1aWQYBiABKAlCCLpIBXIDsAEBEh8KDWxvY2F0aW9uX3V1aWQYByABKAlCCLpIBXIDsAEBEh4KDGNvbnRhY3RfdXVpZBgIIAEoCUIIukgFcgOwAQESCwoDY3B1GAkgASgNEgsKA3JhbRgKIAEoDRIOCgZiYWNrdXAYCyABKAgSDgoGc3RhdHVzGAwgASgJEhMKC3N0YXR1c19pbmZvGA0gASgJEj0KDGF2YWlsYWJpbGl0eRgOIAEoDjIdLmZpdHMuYXBpLm12bS52MS5BdmFpbGFiaWxpdHlCCLpIBYIBAhABEj0KDHNlcnZpY2VjbGFzcxgPIAEoDjIdLmZpdHMuYXBpLm12bS52MS5TZXJ2aWNlQ2xhc3NCCLpIBYIBAhABEjoKD3dpbmRvd3NfZGV0YWlscxgQIAEoCzIfLmZpdHMuYXBpLm12bS52MS5XaW5kb3dzRGV0YWlsc0gAEjYKDWxpbnV4X2RldGFpbHMYESABKAsyHS5maXRzLmFwaS5tdm0udjEuTGludXhEZXRhaWxzSAASNQoKaW50ZXJmYWNlcxgSIAMoCzIhLmZpdHMuYXBpLm12bS52MS5OZXR3b3JrSW50ZXJmYWNlEiMKBHZsYW4YEyABKAsyFS5maXRzLmFwaS5tdm0udjEuVkxBThIUCgxvcmRlcl9udW1iZXIYFCABKAkSEAoIY29udHJhY3QYFSABKAhCEAoHZGV0YWlscxIFukgCCAEiWQoUTVZNU2VydmljZUdldFJlcXVlc3QSGwoEdXVpZBgBIAEoCUIIukgFcgOwAQFIAIgBARIbCgZ0ZW5hbnQYAiABKAlCC7pICHIGwLOusQIBQgcKBV91dWlkIkIKFU1WTVNlcnZpY2VHZXRSZXNwb25zZRIpCgNtdm0YASABKAsyHC5maXRzLmFwaS5tdm0udjEuTVZNSW5zdGFuY2UidgoeTVZNU2VydmljZUNyZWF0ZVdpbmRvd3NSZXF1ZXN0Eh0KC2RvbWFpbl91dWlkGAEgASgJQgi6SAVyA7ABARI1CgVkaXNrcxgCIAMoCzIcLmZpdHMuYXBpLm12bS52MS5XaW5kb3dzRGlza0IIukgFkgECCAEicAocTVZNU2VydmljZUNyZWF0ZUxpbnV4UmVxdWVzdBIbCglsZGFwX3V1aWQYASABKAlCCLpIBXIDsAEBEjMKBWRpc2tzGAIgAygLMhouZml0cy5hcGkubXZtLnYxLkxpbnV4RGlza0IIukgFkgECCAEi1AQKF01WTVNlcnZpY2VDcmVhdGVSZXF1ZXN0Eh4KDHByb2plY3RfdXVpZBgBIAEoCUIIukgFcgOwAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIZCgdvc191dWlkGAMgASgJQgi6SAVyA7ABARIbCgl2bGFuX3V1aWQYBCABKAlCCLpIBXIDsAEBEh8KDWxvY2F0aW9uX3V1aWQYBSABKAlCCLpIBXIDsAEBEh4KDGNvbnRhY3RfdXVpZBgGIAEoCUIIukgFcgOwAQESCwoDY3B1GAcgASgNEgsKA3JhbRgIIAEoDRIUCgxvcmRlcl9udW1iZXIYCSABKAkSIwoGbGFiZWxzGAogASgLMhMuZml0cy5hcGkudjEuTGFiZWxzEg4KBmJhY2t1cBgLIAEoCBI9CgxhdmFpbGFiaWxpdHkYDCABKA4yHS5maXRzLmFwaS5tdm0udjEuQXZhaWxhYmlsaXR5Qgi6SAWCAQIQARI9CgxzZXJ2aWNlY2xhc3MYDSABKA4yHS5maXRzLmFwaS5tdm0udjEuU2VydmljZUNsYXNzQgi6SAWCAQIQARJCCgd3aW5kb3dzGA4gASgLMi8uZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VDcmVhdGVXaW5kb3dzUmVxdWVzdEgAEj4KBWxpbnV4GA8gASgLMi0uZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VDcmVhdGVMaW51eFJlcXVlc3RIAEIQCgdtdm10eXBlEgW6SAIIAUIHCgVfbmFtZSLmAQoJTGludXhEaXNrEhsKBHV1aWQYASABKAlCCLpIBXIDsAEBSACIAQESDQoFbGFiZWwYAiABKAkSEwoLYXV0b19leHRlbmQYAyABKAgSEQoEc2l6ZRgEIAEoBEgBiAEBEhgKC21vdW50X3BvaW50GAUgASgJSAKIAQESOwoJZGlza190eXBlGAYgASgOMhkuZml0cy5hcGkubXZtLnYxLkRpc2tUeXBlQgi6SAWCAQIQAUgDiAEBQgcKBV91dWlkQgcKBV9zaXplQg4KDF9tb3VudF9wb2ludEIMCgpfZGlza190eXBlIugBCgtXaW5kb3dzRGlzaxIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEg0KBWxhYmVsGAIgASgJEhMKC2F1dG9fZXh0ZW5kGAMgASgIEhEKBHNpemUYBCABKARIAYgBARIYCgtkcml2ZWxldHRlchgFIAEoCUgCiAEBEjsKCWRpc2tfdHlwZRgGIAEoDjIZLmZpdHMuYXBpLm12bS52MS5EaXNrVHlwZUIIukgFggECEAFIA4gBAUIHCgVfdXVpZEIHCgVfc2l6ZUIOCgxfZHJpdmVsZXR0ZXJCDAoKX2Rpc2tfdHlwZSIaChhNVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2Ui4AIKF01WTVNlcnZpY2VVcGRhdGVSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgDIAEoCRI0Cgt1cGRhdGVfbWV0YRgEIAEoCzIXLmZpdHMuYXBpLnYxLlVwZGF0ZU1ldGFCBrpIA8gBARJEChFwZXJmb3JtYW5jZV9jbGFzcxgFIAEoCzInLmZpdHMuYXBpLm12bS52MS5QZXJmb3JtYW5jZUNsYXNzQ2hhbmdlSAASPAoNc2VydmljZV9jbGFzcxgGIAEoCzIjLmZpdHMuYXBpLm12bS52MS5TZXJ2aWNlQ2xhc3NDaGFuZ2VIABIxCgdjb250YWN0GAcgASgLMh4uZml0cy5hcGkubXZtLnYxLkNvbnRhY3RDaGFuZ2VIAEIPCgZhY3Rpb24SBbpIAggBIkYKFlBlcmZvcm1hbmNlQ2xhc3NDaGFuZ2USFgoDY3B1GAEgASgNQgm6SAYqBBhAKAESFAoDcmFtGAIgASgNQge6SAQqAiAAIlMKElNlcnZpY2VDbGFzc0NoYW5nZRI9CgxzZXJ2aWNlY2xhc3MYASABKA4yHS5maXRzLmFwaS5tdm0udjEuU2VydmljZUNsYXNzQgi6SAWCAQIQASIvCg1Db250YWN0Q2hhbmdlEh4KDGNvbnRhY3RfdXVpZBgBIAEoCUIIukgFcgOwAQEiGgoYTVZNU2VydmljZVVwZGF0ZVJlc3BvbnNlIkQKFU1WTVNlcnZpY2VMaXN0UmVxdWVzdBIgCgZ0ZW5hbnQYASABKAlCC7pICHIGwLOusQIBSACIAQFCCQoHX3RlbmFudCJEChZNVk1TZXJ2aWNlTGlzdFJlc3BvbnNlEioKBG12bXMYASADKAsyHC5maXRzLmFwaS5tdm0udjEuTVZNSW5zdGFuY2UiYgoXTVZNU2VydmljZURlbGV0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQESFgoEdXVpZBgCIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAMgASgJIhoKGE1WTVNlcnZpY2VEZWxldGVSZXNwb25zZSJjCh9NVk1TZXJ2aWNlVmFsaWRhdGVDcmVhdGVSZXF1ZXN0EkAKBmNyZWF0ZRgBIAEoCzIoLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdEIGukgDyAEBIiIKIE1WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlc3BvbnNlImcKIE1WTVNlcnZpY2VWYWxpZGF0ZUFkZERpc2tSZXF1ZXN0EkMKCGFkZF9kaXNrGAEgASgLMikuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGREaXNrUmVxdWVzdEIGukgDyAEBIiMKIU1WTVNlcnZpY2VWYWxpZGF0ZUFkZERpc2tSZXNwb25zZSJwCiNNVk1TZXJ2aWNlVmFsaWRhdGVVcGRhdGVEaXNrUmVxdWVzdBJJCgt1cGRhdGVfZGlzaxgBIAEoCzIsLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVXBkYXRlRGlza1JlcXVlc3RCBrpIA8gBASImCiRNVk1TZXJ2aWNlVmFsaWRhdGVVcGRhdGVEaXNrUmVzcG9uc2UiGwoZTVZNU2VydmljZUFkZERpc2tSZXNwb25zZSIeChxNVk1TZXJ2aWNlVXBkYXRlRGlza1Jlc3BvbnNlIh4KHE1WTVNlcnZpY2VEZWxldGVEaXNrUmVzcG9uc2Ui0AEKGE1WTVNlcnZpY2VBZGREaXNrUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAIgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYAyABKAkSKwoFbGludXgYBCABKAsyGi5maXRzLmFwaS5tdm0udjEuTGludXhEaXNrSAASLwoHd2luZG93cxgFIAEoCzIcLmZpdHMuYXBpLm12bS52MS5XaW5kb3dzRGlza0gAQg0KBGRpc2sSBbpIAggBIskBChtNVk1TZXJ2aWNlVXBkYXRlRGlza1JlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGwoJZGlza191dWlkGAIgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAMgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYBCABKAkSGAoLYXV0b19leHRlbmQYBSABKAhIAIgBARIRCgRzaXplGAYgASgESAGIAQFCDgoMX2F1dG9fZXh0ZW5kQgcKBV9zaXplIoMBChtNVk1TZXJ2aWNlRGVsZXRlRGlza1JlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGwoJZGlza191dWlkGAIgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAMgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYBCABKAkiJwolTVZNU2VydmljZUFkZE5ldHdvcmtJbnRlcmZhY2VSZXNwb25zZSIoCiZNVk1TZXJ2aWNlTW92ZU5ldHdvcmtJbnRlcmZhY2VSZXNwb25zZSIqCihNVk1TZXJ2aWNlRGVsZXRlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIm8KJE1WTVNlcnZpY2VBZGROZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAIgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYAyABKAkitQEKJU1WTVNlcnZpY2VNb3ZlTmV0d29ya0ludGVyZmFjZVJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESIAoOaW50ZXJmYWNlX3V1aWQYAiABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgEIAEoCRIhCg90YXJnZXRfbXZtX3V1aWQYBSABKAlCCLpIBXIDsAEBIpQBCidNVk1TZXJ2aWNlRGVsZXRlTmV0d29ya0ludGVyZmFjZVJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESIAoOaW50ZXJmYWNlX3V1aWQYAiABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgEIAEoCSKMAQosTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlcXVlc3QSXAoVYWRkX25ldHdvcmtfaW50ZXJmYWNlGAEgASgLMjUuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGROZXR3b3JrSW50ZXJmYWNlUmVxdWVzdEIGukgDyAEBIi8KLU1WTVNlcnZpY2VWYWxpZGF0ZUFkZE5ldHdvcmtJbnRlcmZhY2VSZXNwb25zZSqmAQoMQXZhaWxhYmlsaXR5EiIKGEFWQUlMQUJJTElUWV9VTlNQRUNJRklFRBAAGgSCshkAEhsKD0FWQUlMQUJJTElUWV9WMBABGgaCshkCVjASGwoPQVZBSUxBQklMSVRZX1YxEAIaBoKyGQJWMRIbCg9BVkFJTEFCSUxJVFlfVjIQAxoGgrIZAlYyEhsKD0FWQUlMQUJJTElUWV9WMxAEGgaCshkCVjMqkwEKDFNlcnZpY2VDbGFzcxIjChlTRVJWSUNFX0NMQVNTX1VOU1BFQ0lGSUVEEAAaBIKyGQASHgoRU0VSVklDRV9DTEFTU19TWjEQARoHgrIZA1NaMRIeChFTRVJWSUNFX0NMQVNTX1NaMhACGgeCshkDU1oyEh4KEVNFUlZJQ0VfQ0xBU1NfU1ozEAMaB4KyGQNTWjMqhQEKCERpc2tUeXBlEh8KFURJU0tfVFlQRV9VTlNQRUNJRklFRBAAGgSCshkAEhgKDERJU0tfVFlQRV9PUxABGgaCshkCb3MSIAoQRElTS19UWVBFX1NZU1RFTRACGgqCshkGc3lzdGVtEhwKDkRJU0tfVFlQRV9EQVRBEAMaCIKyGQRkYXRhMv0OCgpNVk1TZXJ2aWNlEmEKA0dldBIlLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlR2V0UmVxdWVzdBomLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmkKBkNyZWF0ZRIoLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBopLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESaQoGVXBkYXRlEiguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VVcGRhdGVSZXF1ZXN0GikuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VVcGRhdGVSZXNwb25zZSIKyvMYAgEC4PMYARJkCgRMaXN0EiYuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VMaXN0UmVxdWVzdBonLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlTGlzdFJlc3BvbnNlIgvK8xgDAQID4PMYAhJpCgZEZWxldGUSKC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZURlbGV0ZVJlcXVlc3QaKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZURlbGV0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmwKB0FkZERpc2sSKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZUFkZERpc2tSZXF1ZXN0GiouZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGREaXNrUmVzcG9uc2UiCsrzGAIBAuDzGAESdQoKVXBkYXRlRGlzaxIsLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVXBkYXRlRGlza1JlcXVlc3QaLS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVVwZGF0ZURpc2tSZXNwb25zZSIKyvMYAgEC4PMYARJ1CgpEZWxldGVEaXNrEiwuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VEZWxldGVEaXNrUmVxdWVzdBotLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlRGVsZXRlRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgBEpABChNBZGROZXR3b3JrSW50ZXJmYWNlEjUuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGROZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBo2LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEpMBChRNb3ZlTmV0d29ya0ludGVyZmFjZRI2LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlTW92ZU5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0GjcuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VNb3ZlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEpkBChZEZWxldGVOZXR3b3JrSW50ZXJmYWNlEjguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VEZWxldGVOZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBo5LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlRGVsZXRlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEoEBCg5WYWxpZGF0ZUNyZWF0ZRIwLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVmFsaWRhdGVDcmVhdGVSZXF1ZXN0GjEuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgCEoQBCg9WYWxpZGF0ZUFkZERpc2sSMS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1JlcXVlc3QaMi5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgCEo0BChJWYWxpZGF0ZVVwZGF0ZURpc2sSNC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1JlcXVlc3QaNS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgCEqgBChtWYWxpZGF0ZUFkZE5ldHdvcmtJbnRlcmZhY2USPS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlcXVlc3QaPi5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgCQq0BChNjb20uZml0cy5hcGkubXZtLnYxQghNdm1Qcm90b1ABWi1naXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS9tdm0vdjE7bXZtdjGiAgNGQU2qAg9GaXRzLkFwaS5Ndm0uVjHKAg9GaXRzXEFwaVxNdm1cVjHiAhtGaXRzXEFwaVxNdm1cVjFcR1BCTWV0YWRhdGHqAhJGaXRzOjpBcGk6Ok12bTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_mvm_v1_vlan, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); + +/** + * Linux-specific MVM details. + * + * @generated from message fits.api.mvm.v1.LinuxDetails + */ +export type LinuxDetails = Message<"fits.api.mvm.v1.LinuxDetails"> & { + /** + * Disks configured on the Linux MVM. + * + * @generated from field: repeated fits.api.mvm.v1.LinuxDisk disks = 1; + */ + disks: LinuxDisk[]; + + /** + * UUID of the LDAP directory the MVM is integrated with. + * + * @generated from field: string ldap_uuid = 2; + */ + ldapUuid: string; + + /** + * Linux-specific FQDN, derived from the name at creation or generated by the backend. + * + * @generated from field: string ldap_fqdn = 3; + */ + ldapFqdn: string; +}; + +/** + * Describes the message fits.api.mvm.v1.LinuxDetails. + * Use `create(LinuxDetailsSchema)` to create a new message. + */ +export const LinuxDetailsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 0); + +/** + * Windows-specific MVM details. + * + * @generated from message fits.api.mvm.v1.WindowsDetails + */ +export type WindowsDetails = Message<"fits.api.mvm.v1.WindowsDetails"> & { + /** + * Disks configured on the Windows MVM. + * + * @generated from field: repeated fits.api.mvm.v1.WindowsDisk disks = 1; + */ + disks: WindowsDisk[]; + + /** + * UUID of the Windows domain the MVM has joined. + * + * @generated from field: string domain_uuid = 2; + */ + domainUuid: string; + + /** + * Windows-specific FQDN, derived from the name at creation or generated by the backend. + * + * @generated from field: string domain_fqdn = 3; + */ + domainFqdn: string; +}; + +/** + * Describes the message fits.api.mvm.v1.WindowsDetails. + * Use `create(WindowsDetailsSchema)` to create a new message. + */ +export const WindowsDetailsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 1); + +/** + * A network interface of a MVM. IPv4 only; IPv6 is not yet supported. + * + * @generated from message fits.api.mvm.v1.NetworkInterface + */ +export type NetworkInterface = Message<"fits.api.mvm.v1.NetworkInterface"> & { + /** + * UUID of this interface. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * IPv4 address assigned to this interface. + * + * @generated from field: string ipaddress = 2; + */ + ipaddress: string; + + /** + * MAC address of this interface. + * + * TODO: add validation + * + * @generated from field: string macaddress = 3; + */ + macaddress: string; +}; + +/** + * Describes the message fits.api.mvm.v1.NetworkInterface. + * Use `create(NetworkInterfaceSchema)` to create a new message. + */ +export const NetworkInterfaceSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 2); + +/** + * A managed VM (MVM) instance as returned by the API. + * + * @generated from message fits.api.mvm.v1.MVMInstance + */ +export type MVMInstance = Message<"fits.api.mvm.v1.MVMInstance"> & { + /** + * UUID of this MVM. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * Metadata for this MVM. + * TODO: dates are available in the nulink db but not passed through yet. + * + * @generated from field: fits.api.v1.Meta meta = 2; + */ + meta?: Meta | undefined; + + /** + * FQDN of the MVM, derived from the name at creation or generated by the backend. + * + * @generated from field: string fqdn = 3; + */ + fqdn: string; + + /** + * Tenant this MVM belongs to. + * + * @generated from field: string tenant = 4; + */ + tenant: string; + + /** + * UUID of the project this MVM belongs to. + * + * @generated from field: string project_uuid = 5; + */ + projectUuid: string; + + /** + * UUID of the OS image installed on the MVM; resolve the title via the OS endpoint. + * + * @generated from field: string os_uuid = 6; + */ + osUuid: string; + + /** + * UUID of the datacenter location. + * + * @generated from field: string location_uuid = 7; + */ + locationUuid: string; + + /** + * TODO: Contact UUID – not yet implemented; open discussion with FCN (#23). + * + * @generated from field: string contact_uuid = 8; + */ + contactUuid: string; + + /** + * Number of CPU cores. + * + * @generated from field: uint32 cpu = 9; + */ + cpu: number; + + /** + * RAM in GB. + * + * @generated from field: uint32 ram = 10; + */ + ram: number; + + /** + * Whether backup is enabled. + * TODO: the upstream (nulink) list/get models do not expose this; always false. + * + * @generated from field: bool backup = 11; + */ + backup: boolean; + + /** + * Status of the ongoing operation. + * TODO: can we have an ENUM here? Active, Are deleted ones there? Are stopped ones accounted? + * Would have to be part of openapi spec, otherwise breaking changes couldn't be detected + * + * @generated from field: string status = 12; + */ + status: string; + + /** + * Additional information about the current status. + * + * @generated from field: string status_info = 13; + */ + statusInfo: string; + + /** + * Availability level. + * + * @generated from field: fits.api.mvm.v1.Availability availability = 14; + */ + availability: Availability; + + /** + * Service class. + * + * @generated from field: fits.api.mvm.v1.ServiceClass serviceclass = 15; + */ + serviceclass: ServiceClass; + + /** + * OS-specific configuration. + * + * @generated from oneof fits.api.mvm.v1.MVMInstance.details + */ + details: { + /** + * Windows-specific settings (domain + disks). + * + * @generated from field: fits.api.mvm.v1.WindowsDetails windows_details = 16; + */ + value: WindowsDetails; + case: "windowsDetails"; + } | { + /** + * Linux-specific settings (LDAP + disks). + * + * @generated from field: fits.api.mvm.v1.LinuxDetails linux_details = 17; + */ + value: LinuxDetails; + case: "linuxDetails"; + } | { case: undefined; value?: undefined }; + + /** + * Network interfaces attached to the MVM (IPv4 only). + * + * @generated from field: repeated fits.api.mvm.v1.NetworkInterface interfaces = 18; + */ + interfaces: NetworkInterface[]; + + /** + * VLAN the MVM is attached to. + * TODO: not exposed by the upstream (nulink) MVM records yet; always unset. + * + * @generated from field: fits.api.mvm.v1.VLAN vlan = 19; + */ + vlan?: VLAN | undefined; + + /** + * Internal reference number provided by the user, e.g. a ticket ID. + * + * @generated from field: string order_number = 20; + */ + orderNumber: string; + + /** + * True if the order was placed by FITS, false if self-service. + * TODO: maybe remove this field entirely. + * + * @generated from field: bool contract = 21; + */ + contract: boolean; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMInstance. + * Use `create(MVMInstanceSchema)` to create a new message. + */ +export const MVMInstanceSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 3); + +/** + * Request to get a MVM by UUID. + * + * @generated from message fits.api.mvm.v1.MVMServiceGetRequest + */ +export type MVMServiceGetRequest = Message<"fits.api.mvm.v1.MVMServiceGetRequest"> & { + /** + * UUID of the MVM. + * + * @generated from field: optional string uuid = 1; + */ + uuid?: string | undefined; + + /** + * Tenant of the MVM. + * + * @generated from field: string tenant = 2; + */ + tenant: string; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceGetRequest. + * Use `create(MVMServiceGetRequestSchema)` to create a new message. + */ +export const MVMServiceGetRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 4); + +/** + * Response containing the requested MVM. + * + * @generated from message fits.api.mvm.v1.MVMServiceGetResponse + */ +export type MVMServiceGetResponse = Message<"fits.api.mvm.v1.MVMServiceGetResponse"> & { + /** + * The MVM. + * + * @generated from field: fits.api.mvm.v1.MVMInstance mvm = 1; + */ + mvm?: MVMInstance | undefined; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceGetResponse. + * Use `create(MVMServiceGetResponseSchema)` to create a new message. + */ +export const MVMServiceGetResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 5); + +/** + * Windows-specific create request parts. + * + * @generated from message fits.api.mvm.v1.MVMServiceCreateWindowsRequest + */ +export type MVMServiceCreateWindowsRequest = Message<"fits.api.mvm.v1.MVMServiceCreateWindowsRequest"> & { + /** + * UUID of the Windows domain the MVM should join. + * + * @generated from field: string domain_uuid = 1; + */ + domainUuid: string; + + /** + * Disks for the Windows MVM, excluding the OS disk; must contain exactly + * one system disk plus any number of data disks (see DiskType). + * + * @generated from field: repeated fits.api.mvm.v1.WindowsDisk disks = 2; + */ + disks: WindowsDisk[]; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceCreateWindowsRequest. + * Use `create(MVMServiceCreateWindowsRequestSchema)` to create a new message. + */ +export const MVMServiceCreateWindowsRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 6); + +/** + * Linux-specific create request parts. + * + * @generated from message fits.api.mvm.v1.MVMServiceCreateLinuxRequest + */ +export type MVMServiceCreateLinuxRequest = Message<"fits.api.mvm.v1.MVMServiceCreateLinuxRequest"> & { + /** + * UUID of the LDAP directory the MVM should integrate with. + * + * @generated from field: string ldap_uuid = 1; + */ + ldapUuid: string; + + /** + * Disks for the Linux MVM, excluding the OS disk; must contain exactly + * one system disk plus any number of data disks (see DiskType). + * + * @generated from field: repeated fits.api.mvm.v1.LinuxDisk disks = 2; + */ + disks: LinuxDisk[]; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceCreateLinuxRequest. + * Use `create(MVMServiceCreateLinuxRequestSchema)` to create a new message. + */ +export const MVMServiceCreateLinuxRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 7); + +/** + * Request to create a new MVM instance. + * TODO: contract, billable and billing_start_date. + * + * @generated from message fits.api.mvm.v1.MVMServiceCreateRequest + */ +export type MVMServiceCreateRequest = Message<"fits.api.mvm.v1.MVMServiceCreateRequest"> & { + /** + * UUID of the project this MVM belongs to. + * + * @generated from field: string project_uuid = 1; + */ + projectUuid: string; + + /** + * Optional name; the FQDN is derived from it. + * + * @generated from field: optional string name = 2; + */ + name?: string | undefined; + + /** + * UUID of the operating system image to install. + * + * @generated from field: string os_uuid = 3; + */ + osUuid: string; + + /** + * UUID of the VLAN network to attach the MVM to. + * + * @generated from field: string vlan_uuid = 4; + */ + vlanUuid: string; + + /** + * UUID of the datacenter location; the MVM is scheduled into one data center within it. + * + * @generated from field: string location_uuid = 5; + */ + locationUuid: string; + + /** + * TODO: Contact UUID – open discussion with FCN; may become a dedicated /contact endpoint. + * + * @generated from field: string contact_uuid = 6; + */ + contactUuid: string; + + /** + * Number of CPU cores. + * + * @generated from field: uint32 cpu = 7; + */ + cpu: number; + + /** + * RAM in GB. Must be a power of 2. + * + * @generated from field: uint32 ram = 8; + */ + ram: number; + + /** + * Internal reference number provided by the user, e.g. a ticket ID. + * TODO: can this be optional? + * + * @generated from field: string order_number = 9; + */ + orderNumber: string; + + /** + * Optional key-value labels for accounting purposes. + * (e.g. contract number, transaction number, technical key, accounting key). + * + * @generated from field: fits.api.v1.Labels labels = 10; + */ + labels?: Labels | undefined; + + /** + * Whether backup is enabled. + * + * @generated from field: bool backup = 11; + */ + backup: boolean; + + /** + * Availability level. + * + * @generated from field: fits.api.mvm.v1.Availability availability = 12; + */ + availability: Availability; + + /** + * Service class; only certain combinations with availability are valid. + * + * @generated from field: fits.api.mvm.v1.ServiceClass serviceclass = 13; + */ + serviceclass: ServiceClass; + + /** + * OS type and its configuration. + * + * @generated from oneof fits.api.mvm.v1.MVMServiceCreateRequest.mvmtype + */ + mvmtype: { + /** + * Windows-specific settings (domain + disk). + * + * @generated from field: fits.api.mvm.v1.MVMServiceCreateWindowsRequest windows = 14; + */ + value: MVMServiceCreateWindowsRequest; + case: "windows"; + } | { + /** + * Linux-specific settings (LDAP + disk). + * + * @generated from field: fits.api.mvm.v1.MVMServiceCreateLinuxRequest linux = 15; + */ + value: MVMServiceCreateLinuxRequest; + case: "linux"; + } | { case: undefined; value?: undefined }; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceCreateRequest. + * Use `create(MVMServiceCreateRequestSchema)` to create a new message. + */ +export const MVMServiceCreateRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 8); + +/** + * Disk configuration for a Linux MVM. See DiskType for the kinds of disks + * (os, system, data) and their lifecycle rules. + * + * @generated from message fits.api.mvm.v1.LinuxDisk + */ +export type LinuxDisk = Message<"fits.api.mvm.v1.LinuxDisk"> & { + /** + * UUID of the disk; set for existing disks, unset for new ones. + * + * @generated from field: optional string uuid = 1; + */ + uuid?: string | undefined; + + /** + * Label (name) of the disk. + * + * @generated from field: string label = 2; + */ + label: string; + + /** + * Whether the disk grows automatically when space runs low. + * + * @generated from field: bool auto_extend = 3; + */ + autoExtend: boolean; + + /** + * Size of the disk in GB; defaults to 50 when unset. + * + * @generated from field: optional uint64 size = 4; + */ + size?: bigint | undefined; + + /** + * Mount point (e.g. "/data"). Fixed to "/appdata" for the system disk; + * free-form for data disks. + * + * @generated from field: optional string mount_point = 5; + */ + mountPoint?: string | undefined; + + /** + * Kind of the disk; determines which operations are allowed on it. + * Provided by the client in create/add requests and populated by the + * API in responses. + * TODO: talk to FCE that we will provide the disk type in create/add + * requests. + * + * @generated from field: optional fits.api.mvm.v1.DiskType disk_type = 6; + */ + diskType?: DiskType | undefined; +}; + +/** + * Describes the message fits.api.mvm.v1.LinuxDisk. + * Use `create(LinuxDiskSchema)` to create a new message. + */ +export const LinuxDiskSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 9); + +/** + * Disk configuration for a Windows MVM. See DiskType for the kinds of + * disks (os, system, data) and their lifecycle rules. + * + * @generated from message fits.api.mvm.v1.WindowsDisk + */ +export type WindowsDisk = Message<"fits.api.mvm.v1.WindowsDisk"> & { + /** + * UUID of the disk; set for existing disks, unset for new ones. + * + * @generated from field: optional string uuid = 1; + */ + uuid?: string | undefined; + + /** + * Label (name) of the disk. + * + * @generated from field: string label = 2; + */ + label: string; + + /** + * Whether the disk grows automatically when space runs low. + * + * @generated from field: bool auto_extend = 3; + */ + autoExtend: boolean; + + /** + * Size of the disk in GB; defaults to 50 when unset. + * + * @generated from field: optional uint64 size = 4; + */ + size?: bigint | undefined; + + /** + * Drive letter (e.g. "D"). Fixed to "F" for the system disk; free-form + * for data disks. + * + * @generated from field: optional string driveletter = 5; + */ + driveletter?: string | undefined; + + /** + * Kind of the disk; determines which operations are allowed on it. + * Provided by the client in create/add requests and populated by the + * API in responses. + * TODO: talk to FCE that we will provide the disk type in create/add + * requests. + * + * @generated from field: optional fits.api.mvm.v1.DiskType disk_type = 6; + */ + diskType?: DiskType | undefined; +}; + +/** + * Describes the message fits.api.mvm.v1.WindowsDisk. + * Use `create(WindowsDiskSchema)` to create a new message. + */ +export const WindowsDiskSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 10); + +/** + * Response for Create; an empty response means the MVM was accepted. + * + * @generated from message fits.api.mvm.v1.MVMServiceCreateResponse + */ +export type MVMServiceCreateResponse = Message<"fits.api.mvm.v1.MVMServiceCreateResponse"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceCreateResponse. + * Use `create(MVMServiceCreateResponseSchema)` to create a new message. + */ +export const MVMServiceCreateResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 11); + +/** + * Request to change a mutable property of an existing MVM. + * Exactly one action must be set; each maps onto its own upstream endpoint. + * TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per + * action); combined changes would need + * server-side fan-out without rollback. + * TODO: clarify async semantics — this is a queued "request to update", not an + * immediate update (e.g. disk changes are applied overnight). Consider + * renaming to reflect that. + * TODO: differentiate between fire-and-forget and queued actions in the API. + * TODO: is it possible to expose the pending-change queue (list/cancel) to the caller? + * TODO: clarify who enqueues the request and whether a pending change blocks + * further edits (e.g. after AddDisk, until the change executes). + * + * @generated from message fits.api.mvm.v1.MVMServiceUpdateRequest + */ +export type MVMServiceUpdateRequest = Message<"fits.api.mvm.v1.MVMServiceUpdateRequest"> & { + /** + * UUID of the MVM to update. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * Project the MVM belongs to. + * + * @generated from field: string project = 2; + */ + project: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 3; + */ + orderNumber: string; + + /** + * Timestamp and strategy for this update. + * + * @generated from field: fits.api.v1.UpdateMeta update_meta = 4; + */ + updateMeta?: UpdateMeta | undefined; + + /** + * The change to apply. + * + * @generated from oneof fits.api.mvm.v1.MVMServiceUpdateRequest.action + */ + action: { + /** + * Change the CPU/RAM performance class. + * + * @generated from field: fits.api.mvm.v1.PerformanceClassChange performance_class = 5; + */ + value: PerformanceClassChange; + case: "performanceClass"; + } | { + /** + * Change the service class. + * + * @generated from field: fits.api.mvm.v1.ServiceClassChange service_class = 6; + */ + value: ServiceClassChange; + case: "serviceClass"; + } | { + /** + * Change the contact person. + * + * @generated from field: fits.api.mvm.v1.ContactChange contact = 7; + */ + value: ContactChange; + case: "contact"; + } | { case: undefined; value?: undefined }; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceUpdateRequest. + * Use `create(MVMServiceUpdateRequestSchema)` to create a new message. + */ +export const MVMServiceUpdateRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 12); + +/** + * PerformanceClassChange is the payload for changing a MVM's CPU and RAM. + * + * @generated from message fits.api.mvm.v1.PerformanceClassChange + */ +export type PerformanceClassChange = Message<"fits.api.mvm.v1.PerformanceClassChange"> & { + /** + * Number of vCPUs (1-64). + * + * @generated from field: uint32 cpu = 1; + */ + cpu: number; + + /** + * RAM size in GB. + * + * @generated from field: uint32 ram = 2; + */ + ram: number; +}; + +/** + * Describes the message fits.api.mvm.v1.PerformanceClassChange. + * Use `create(PerformanceClassChangeSchema)` to create a new message. + */ +export const PerformanceClassChangeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 13); + +/** + * ServiceClassChange is the payload for changing a MVM's service class. + * + * @generated from message fits.api.mvm.v1.ServiceClassChange + */ +export type ServiceClassChange = Message<"fits.api.mvm.v1.ServiceClassChange"> & { + /** + * Target service class. + * + * @generated from field: fits.api.mvm.v1.ServiceClass serviceclass = 1; + */ + serviceclass: ServiceClass; +}; + +/** + * Describes the message fits.api.mvm.v1.ServiceClassChange. + * Use `create(ServiceClassChangeSchema)` to create a new message. + */ +export const ServiceClassChangeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 14); + +/** + * ContactChange is the payload for changing a MVM's contact person. + * + * @generated from message fits.api.mvm.v1.ContactChange + */ +export type ContactChange = Message<"fits.api.mvm.v1.ContactChange"> & { + /** + * UUID of the new contact. + * + * @generated from field: string contact_uuid = 1; + */ + contactUuid: string; +}; + +/** + * Describes the message fits.api.mvm.v1.ContactChange. + * Use `create(ContactChangeSchema)` to create a new message. + */ +export const ContactChangeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 15); + +/** + * Response for Update; an empty response means the change was accepted. + * + * @generated from message fits.api.mvm.v1.MVMServiceUpdateResponse + */ +export type MVMServiceUpdateResponse = Message<"fits.api.mvm.v1.MVMServiceUpdateResponse"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceUpdateResponse. + * Use `create(MVMServiceUpdateResponseSchema)` to create a new message. + */ +export const MVMServiceUpdateResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 16); + +/** + * Request to list MVMs. + * + * @generated from message fits.api.mvm.v1.MVMServiceListRequest + */ +export type MVMServiceListRequest = Message<"fits.api.mvm.v1.MVMServiceListRequest"> & { + /** + * Tenant of the MVMs. + * + * @generated from field: optional string tenant = 1; + */ + tenant?: string | undefined; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceListRequest. + * Use `create(MVMServiceListRequestSchema)` to create a new message. + */ +export const MVMServiceListRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 17); + +/** + * Response containing the list of MVMs. + * + * @generated from message fits.api.mvm.v1.MVMServiceListResponse + */ +export type MVMServiceListResponse = Message<"fits.api.mvm.v1.MVMServiceListResponse"> & { + /** + * The MVM instances. + * + * @generated from field: repeated fits.api.mvm.v1.MVMInstance mvms = 1; + */ + mvms: MVMInstance[]; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceListResponse. + * Use `create(MVMServiceListResponseSchema)` to create a new message. + */ +export const MVMServiceListResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 18); + +/** + * Request to cancel a MVM instance. + * + * @generated from message fits.api.mvm.v1.MVMServiceDeleteRequest + */ +export type MVMServiceDeleteRequest = Message<"fits.api.mvm.v1.MVMServiceDeleteRequest"> & { + /** + * Project the MVM belongs to. + * + * @generated from field: string project = 1; + */ + project: string; + + /** + * UUID of the MVM to delete. + * + * @generated from field: string uuid = 2; + */ + uuid: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 3; + */ + orderNumber: string; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceDeleteRequest. + * Use `create(MVMServiceDeleteRequestSchema)` to create a new message. + */ +export const MVMServiceDeleteRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 19); + +/** + * Response for Delete; an empty response means the cancellation was accepted. + * + * @generated from message fits.api.mvm.v1.MVMServiceDeleteResponse + */ +export type MVMServiceDeleteResponse = Message<"fits.api.mvm.v1.MVMServiceDeleteResponse"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceDeleteResponse. + * Use `create(MVMServiceDeleteResponseSchema)` to create a new message. + */ +export const MVMServiceDeleteResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 20); + +/** + * Request to validate a MVM create without creating anything. + * + * @generated from message fits.api.mvm.v1.MVMServiceValidateCreateRequest + */ +export type MVMServiceValidateCreateRequest = Message<"fits.api.mvm.v1.MVMServiceValidateCreateRequest"> & { + /** + * The create request to validate. + * + * @generated from field: fits.api.mvm.v1.MVMServiceCreateRequest create = 1; + */ + create?: MVMServiceCreateRequest | undefined; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceValidateCreateRequest. + * Use `create(MVMServiceValidateCreateRequestSchema)` to create a new message. + */ +export const MVMServiceValidateCreateRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 21); + +/** + * Response for ValidateCreate; violations are returned as an InvalidArgument error. + * + * @generated from message fits.api.mvm.v1.MVMServiceValidateCreateResponse + */ +export type MVMServiceValidateCreateResponse = Message<"fits.api.mvm.v1.MVMServiceValidateCreateResponse"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceValidateCreateResponse. + * Use `create(MVMServiceValidateCreateResponseSchema)` to create a new message. + */ +export const MVMServiceValidateCreateResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 22); + +/** + * Request to validate an AddDisk without ordering anything. + * + * @generated from message fits.api.mvm.v1.MVMServiceValidateAddDiskRequest + */ +export type MVMServiceValidateAddDiskRequest = Message<"fits.api.mvm.v1.MVMServiceValidateAddDiskRequest"> & { + /** + * The add disk request to validate. + * + * @generated from field: fits.api.mvm.v1.MVMServiceAddDiskRequest add_disk = 1; + */ + addDisk?: MVMServiceAddDiskRequest | undefined; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceValidateAddDiskRequest. + * Use `create(MVMServiceValidateAddDiskRequestSchema)` to create a new message. + */ +export const MVMServiceValidateAddDiskRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 23); + +/** + * Response for ValidateAddDisk; violations are returned as an InvalidArgument error. + * + * @generated from message fits.api.mvm.v1.MVMServiceValidateAddDiskResponse + */ +export type MVMServiceValidateAddDiskResponse = Message<"fits.api.mvm.v1.MVMServiceValidateAddDiskResponse"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceValidateAddDiskResponse. + * Use `create(MVMServiceValidateAddDiskResponseSchema)` to create a new message. + */ +export const MVMServiceValidateAddDiskResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 24); + +/** + * Request to validate an UpdateDisk without changing anything. + * + * @generated from message fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest + */ +export type MVMServiceValidateUpdateDiskRequest = Message<"fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest"> & { + /** + * The update disk request to validate. + * + * @generated from field: fits.api.mvm.v1.MVMServiceUpdateDiskRequest update_disk = 1; + */ + updateDisk?: MVMServiceUpdateDiskRequest | undefined; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest. + * Use `create(MVMServiceValidateUpdateDiskRequestSchema)` to create a new message. + */ +export const MVMServiceValidateUpdateDiskRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 25); + +/** + * Response for ValidateUpdateDisk; violations are returned as an InvalidArgument error. + * + * @generated from message fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse + */ +export type MVMServiceValidateUpdateDiskResponse = Message<"fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse. + * Use `create(MVMServiceValidateUpdateDiskResponseSchema)` to create a new message. + */ +export const MVMServiceValidateUpdateDiskResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 26); + +/** + * Response for AddDisk. + * + * @generated from message fits.api.mvm.v1.MVMServiceAddDiskResponse + */ +export type MVMServiceAddDiskResponse = Message<"fits.api.mvm.v1.MVMServiceAddDiskResponse"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceAddDiskResponse. + * Use `create(MVMServiceAddDiskResponseSchema)` to create a new message. + */ +export const MVMServiceAddDiskResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 27); + +/** + * Response for UpdateDisk. + * + * @generated from message fits.api.mvm.v1.MVMServiceUpdateDiskResponse + */ +export type MVMServiceUpdateDiskResponse = Message<"fits.api.mvm.v1.MVMServiceUpdateDiskResponse"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceUpdateDiskResponse. + * Use `create(MVMServiceUpdateDiskResponseSchema)` to create a new message. + */ +export const MVMServiceUpdateDiskResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 28); + +/** + * Response for DeleteDisk. + * + * @generated from message fits.api.mvm.v1.MVMServiceDeleteDiskResponse + */ +export type MVMServiceDeleteDiskResponse = Message<"fits.api.mvm.v1.MVMServiceDeleteDiskResponse"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceDeleteDiskResponse. + * Use `create(MVMServiceDeleteDiskResponseSchema)` to create a new message. + */ +export const MVMServiceDeleteDiskResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 29); + +/** + * Request to order an additional data disk for a MVM. + * + * @generated from message fits.api.mvm.v1.MVMServiceAddDiskRequest + */ +export type MVMServiceAddDiskRequest = Message<"fits.api.mvm.v1.MVMServiceAddDiskRequest"> & { + /** + * UUID of the MVM to attach the disk to. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * Project the MVM belongs to. + * + * @generated from field: string project = 2; + */ + project: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 3; + */ + orderNumber: string; + + /** + * OS-specific disk specification; must match the MVM's OS type. + * + * @generated from oneof fits.api.mvm.v1.MVMServiceAddDiskRequest.disk + */ + disk: { + /** + * Linux data disk. + * + * @generated from field: fits.api.mvm.v1.LinuxDisk linux = 4; + */ + value: LinuxDisk; + case: "linux"; + } | { + /** + * Windows data disk. + * + * @generated from field: fits.api.mvm.v1.WindowsDisk windows = 5; + */ + value: WindowsDisk; + case: "windows"; + } | { case: undefined; value?: undefined }; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceAddDiskRequest. + * Use `create(MVMServiceAddDiskRequestSchema)` to create a new message. + */ +export const MVMServiceAddDiskRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 30); + +/** + * Request to change an existing disk; only size and auto-extend are + * mutable (see DiskType for applicability per disk kind). + * + * @generated from message fits.api.mvm.v1.MVMServiceUpdateDiskRequest + */ +export type MVMServiceUpdateDiskRequest = Message<"fits.api.mvm.v1.MVMServiceUpdateDiskRequest"> & { + /** + * UUID of the MVM the disk belongs to. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * UUID of the disk to change. + * + * @generated from field: string disk_uuid = 2; + */ + diskUuid: string; + + /** + * Project the MVM belongs to. + * + * @generated from field: string project = 3; + */ + project: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 4; + */ + orderNumber: string; + + /** + * New auto-extend behavior; unset keeps the current value. + * + * @generated from field: optional bool auto_extend = 5; + */ + autoExtend?: boolean | undefined; + + /** + * New size of the disk in GB; unset keeps the current value. + * + * @generated from field: optional uint64 size = 6; + */ + size?: bigint | undefined; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceUpdateDiskRequest. + * Use `create(MVMServiceUpdateDiskRequestSchema)` to create a new message. + */ +export const MVMServiceUpdateDiskRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 31); + +/** + * Request to cancel a data disk; OS and system disks are rejected by the + * upstream. + * + * @generated from message fits.api.mvm.v1.MVMServiceDeleteDiskRequest + */ +export type MVMServiceDeleteDiskRequest = Message<"fits.api.mvm.v1.MVMServiceDeleteDiskRequest"> & { + /** + * UUID of the MVM the disk belongs to. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * UUID of the disk to cancel. + * + * @generated from field: string disk_uuid = 2; + */ + diskUuid: string; + + /** + * Project the MVM belongs to. + * + * @generated from field: string project = 3; + */ + project: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 4; + */ + orderNumber: string; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceDeleteDiskRequest. + * Use `create(MVMServiceDeleteDiskRequestSchema)` to create a new message. + */ +export const MVMServiceDeleteDiskRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 32); + +/** + * Response for AddNetworkInterface. + * + * @generated from message fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse + */ +export type MVMServiceAddNetworkInterfaceResponse = Message<"fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse. + * Use `create(MVMServiceAddNetworkInterfaceResponseSchema)` to create a new message. + */ +export const MVMServiceAddNetworkInterfaceResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 33); + +/** + * Response for MoveNetworkInterface. + * + * @generated from message fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse + */ +export type MVMServiceMoveNetworkInterfaceResponse = Message<"fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse. + * Use `create(MVMServiceMoveNetworkInterfaceResponseSchema)` to create a new message. + */ +export const MVMServiceMoveNetworkInterfaceResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 34); + +/** + * Response for DeleteNetworkInterface. + * + * @generated from message fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse + */ +export type MVMServiceDeleteNetworkInterfaceResponse = Message<"fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse. + * Use `create(MVMServiceDeleteNetworkInterfaceResponseSchema)` to create a new message. + */ +export const MVMServiceDeleteNetworkInterfaceResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 35); + +/** + * Request to order an additional network interface for a MVM. + * Nulink treats interface and IP as a 1:1 relation; move and delete + * operate on the interface_uuid. + * + * @generated from message fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest + */ +export type MVMServiceAddNetworkInterfaceRequest = Message<"fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest"> & { + /** + * UUID of the MVM to attach the interface to. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * Project the MVM belongs to. + * + * @generated from field: string project = 2; + */ + project: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 3; + */ + orderNumber: string; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest. + * Use `create(MVMServiceAddNetworkInterfaceRequestSchema)` to create a new message. + */ +export const MVMServiceAddNetworkInterfaceRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 36); + +/** + * Request to move a network interface from one MVM to another. + * + * @generated from message fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest + */ +export type MVMServiceMoveNetworkInterfaceRequest = Message<"fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest"> & { + /** + * UUID of the MVM the interface currently belongs to. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * UUID of the network interface holding the IP. + * + * @generated from field: string interface_uuid = 2; + */ + interfaceUuid: string; + + /** + * Project the MVM belongs to. + * + * @generated from field: string project = 3; + */ + project: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 4; + */ + orderNumber: string; + + /** + * UUID of the MVM to move the interface to. + * + * @generated from field: string target_mvm_uuid = 5; + */ + targetMvmUuid: string; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest. + * Use `create(MVMServiceMoveNetworkInterfaceRequestSchema)` to create a new message. + */ +export const MVMServiceMoveNetworkInterfaceRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 37); + +/** + * Request to delete a network interface from a MVM. + * + * @generated from message fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest + */ +export type MVMServiceDeleteNetworkInterfaceRequest = Message<"fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest"> & { + /** + * UUID of the MVM the interface belongs to. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * UUID of the network interface holding the IP. + * + * @generated from field: string interface_uuid = 2; + */ + interfaceUuid: string; + + /** + * Project the MVM belongs to. + * + * @generated from field: string project = 3; + */ + project: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 4; + */ + orderNumber: string; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest. + * Use `create(MVMServiceDeleteNetworkInterfaceRequestSchema)` to create a new message. + */ +export const MVMServiceDeleteNetworkInterfaceRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 38); + +/** + * Request to validate an AddNetworkInterface without ordering anything. + * + * @generated from message fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest + */ +export type MVMServiceValidateAddNetworkInterfaceRequest = Message<"fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest"> & { + /** + * The add network interface request to validate. + * + * @generated from field: fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest add_network_interface = 1; + */ + addNetworkInterface?: MVMServiceAddNetworkInterfaceRequest | undefined; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest. + * Use `create(MVMServiceValidateAddNetworkInterfaceRequestSchema)` to create a new message. + */ +export const MVMServiceValidateAddNetworkInterfaceRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 39); + +/** + * Response for ValidateAddNetworkInterface; violations are returned as an InvalidArgument error. + * + * @generated from message fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse + */ +export type MVMServiceValidateAddNetworkInterfaceResponse = Message<"fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse. + * Use `create(MVMServiceValidateAddNetworkInterfaceResponseSchema)` to create a new message. + */ +export const MVMServiceValidateAddNetworkInterfaceResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 40); + +/** + * Availability specifies the availability level of a MVM; higher value = higher availability. + * + * @generated from enum fits.api.mvm.v1.Availability + */ +export enum Availability { + /** + * AVAILABILITY_UNSPECIFIED is not specified. + * + * @generated from enum value: AVAILABILITY_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * AVAILABILITY_V0 is availability level V0. + * + * @generated from enum value: AVAILABILITY_V0 = 1; + */ + V0 = 1, + + /** + * AVAILABILITY_V1 is availability level V1. + * + * @generated from enum value: AVAILABILITY_V1 = 2; + */ + V1 = 2, + + /** + * AVAILABILITY_V2 is availability level V2. + * + * @generated from enum value: AVAILABILITY_V2 = 3; + */ + V2 = 3, + + /** + * AVAILABILITY_V3 is availability level V3. + * + * @generated from enum value: AVAILABILITY_V3 = 4; + */ + V3 = 4, +} + +/** + * Describes the enum fits.api.mvm.v1.Availability. + */ +export const AvailabilitySchema: GenEnum = /*@__PURE__*/ + enumDesc(file_fits_api_mvm_v1_mvm, 0); + +/** + * ServiceClass specifies the service tier of a MVM; higher value = higher tier. + * Only certain combinations with Availability are valid. + * + * @generated from enum fits.api.mvm.v1.ServiceClass + */ +export enum ServiceClass { + /** + * SERVICE_CLASS_UNSPECIFIED is not specified. + * + * @generated from enum value: SERVICE_CLASS_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * SERVICE_CLASS_SZ1 is service class SZ1. + * + * @generated from enum value: SERVICE_CLASS_SZ1 = 1; + */ + SZ1 = 1, + + /** + * SERVICE_CLASS_SZ2 is service class SZ2. + * + * @generated from enum value: SERVICE_CLASS_SZ2 = 2; + */ + SZ2 = 2, + + /** + * SERVICE_CLASS_SZ3 is service class SZ3. + * + * @generated from enum value: SERVICE_CLASS_SZ3 = 3; + */ + SZ3 = 3, +} + +/** + * Describes the enum fits.api.mvm.v1.ServiceClass. + */ +export const ServiceClassSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_fits_api_mvm_v1_mvm, 1); + +/** + * DiskType classifies a MVM disk by its lifecycle rules. + * The upstream (nulink) API returns every disk of a MVM, including the + * backend-provisioned OS disk, so that oversized OS disks stay billable. + * + * Lifecycle per kind: + * - OS: provisioned by the backend and never part of create/add + * requests; resizable via UpdateDisk, never deletable. + * - SYSTEM: exactly one per MVM (drive letter F on Windows, mount point + * /appdata on Linux), whose letter/mount point is fixed; must be + * included in the create request; resizable via UpdateDisk, never + * deletable. + * - DATA: fully controllable (letter/mount point, size, auto-extend) + * and deletable; may be included at creation or added later via + * AddDisk. + * + * Whether auto-extend is supported for OS and SYSTEM disks is not yet + * known; only DATA disks are documented as supporting it. + * + * These rules are enforced by the upstream (nulink) API at creation and + * edit time (e.g. duplicate drive letters, deleting a system disk); + * fco-api does not re-validate them locally and surfaces upstream + * violations as InvalidArgument errors. Use the Validate* RPCs to + * pre-check a request against the upstream rules. + * + * @generated from enum fits.api.mvm.v1.DiskType + */ +export enum DiskType { + /** + * DISK_TYPE_UNSPECIFIED is not specified. + * + * @generated from enum value: DISK_TYPE_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * DISK_TYPE_OS is the operating system disk; provisioned by the backend, + * resizable, never deletable. + * + * @generated from enum value: DISK_TYPE_OS = 1; + */ + OS = 1, + + /** + * DISK_TYPE_SYSTEM is the additional system disk (volume F on Windows, + * /appdata on Linux); the letter/mount point is fixed, the size is + * resizable, never deletable. + * + * @generated from enum value: DISK_TYPE_SYSTEM = 2; + */ + SYSTEM = 2, + + /** + * DISK_TYPE_DATA is a user-managed data disk; fully controllable and + * deletable. + * + * @generated from enum value: DISK_TYPE_DATA = 3; + */ + DATA = 3, +} + +/** + * Describes the enum fits.api.mvm.v1.DiskType. + */ +export const DiskTypeSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_fits_api_mvm_v1_mvm, 2); + +/** + * MVMService provides managed VM (MVM) operations. + * + * @generated from service fits.api.mvm.v1.MVMService + */ +export const MVMService: GenService<{ + /** + * Returns the MVM with the specified UUID. + * + * @generated from rpc fits.api.mvm.v1.MVMService.Get + */ + get: { + methodKind: "unary"; + input: typeof MVMServiceGetRequestSchema; + output: typeof MVMServiceGetResponseSchema; + }, + /** + * Creates a new MVM. + * + * @generated from rpc fits.api.mvm.v1.MVMService.Create + */ + create: { + methodKind: "unary"; + input: typeof MVMServiceCreateRequestSchema; + output: typeof MVMServiceCreateResponseSchema; + }, + /** + * Updates a MVM. + * + * @generated from rpc fits.api.mvm.v1.MVMService.Update + */ + update: { + methodKind: "unary"; + input: typeof MVMServiceUpdateRequestSchema; + output: typeof MVMServiceUpdateResponseSchema; + }, + /** + * Returns the list of all MVMs. + * + * @generated from rpc fits.api.mvm.v1.MVMService.List + */ + list: { + methodKind: "unary"; + input: typeof MVMServiceListRequestSchema; + output: typeof MVMServiceListResponseSchema; + }, + /** + * Deletes a MVM. + * + * @generated from rpc fits.api.mvm.v1.MVMService.Delete + */ + delete: { + methodKind: "unary"; + input: typeof MVMServiceDeleteRequestSchema; + output: typeof MVMServiceDeleteResponseSchema; + }, + /** + * Orders an additional data disk for a MVM. System disks are ordered at + * MVM creation and cannot be added later. + * + * @generated from rpc fits.api.mvm.v1.MVMService.AddDisk + */ + addDisk: { + methodKind: "unary"; + input: typeof MVMServiceAddDiskRequestSchema; + output: typeof MVMServiceAddDiskResponseSchema; + }, + /** + * Changes the size or auto-extend behavior of an existing disk; see + * DiskType for which operations apply per disk kind. + * + * @generated from rpc fits.api.mvm.v1.MVMService.UpdateDisk + */ + updateDisk: { + methodKind: "unary"; + input: typeof MVMServiceUpdateDiskRequestSchema; + output: typeof MVMServiceUpdateDiskResponseSchema; + }, + /** + * Cancels a data disk. OS and system disks cannot be deleted. + * + * @generated from rpc fits.api.mvm.v1.MVMService.DeleteDisk + */ + deleteDisk: { + methodKind: "unary"; + input: typeof MVMServiceDeleteDiskRequestSchema; + output: typeof MVMServiceDeleteDiskResponseSchema; + }, + /** + * Orders an additional network interface for a MVM. + * + * @generated from rpc fits.api.mvm.v1.MVMService.AddNetworkInterface + */ + addNetworkInterface: { + methodKind: "unary"; + input: typeof MVMServiceAddNetworkInterfaceRequestSchema; + output: typeof MVMServiceAddNetworkInterfaceResponseSchema; + }, + /** + * Moves a network interface from one MVM to another. + * + * @generated from rpc fits.api.mvm.v1.MVMService.MoveNetworkInterface + */ + moveNetworkInterface: { + methodKind: "unary"; + input: typeof MVMServiceMoveNetworkInterfaceRequestSchema; + output: typeof MVMServiceMoveNetworkInterfaceResponseSchema; + }, + /** + * Deletes a network interface from a MVM. + * + * @generated from rpc fits.api.mvm.v1.MVMService.DeleteNetworkInterface + */ + deleteNetworkInterface: { + methodKind: "unary"; + input: typeof MVMServiceDeleteNetworkInterfaceRequestSchema; + output: typeof MVMServiceDeleteNetworkInterfaceResponseSchema; + }, + /** + * Validates a MVM create request without creating anything. Intended for + * form pre-checks; the create endpoint validates again before executing. + * + * @generated from rpc fits.api.mvm.v1.MVMService.ValidateCreate + */ + validateCreate: { + methodKind: "unary"; + input: typeof MVMServiceValidateCreateRequestSchema; + output: typeof MVMServiceValidateCreateResponseSchema; + }, + /** + * Validates an AddDisk request without ordering anything. + * + * @generated from rpc fits.api.mvm.v1.MVMService.ValidateAddDisk + */ + validateAddDisk: { + methodKind: "unary"; + input: typeof MVMServiceValidateAddDiskRequestSchema; + output: typeof MVMServiceValidateAddDiskResponseSchema; + }, + /** + * Validates an UpdateDisk request without changing anything. + * + * @generated from rpc fits.api.mvm.v1.MVMService.ValidateUpdateDisk + */ + validateUpdateDisk: { + methodKind: "unary"; + input: typeof MVMServiceValidateUpdateDiskRequestSchema; + output: typeof MVMServiceValidateUpdateDiskResponseSchema; + }, + /** + * Validates an AddNetworkInterface request without ordering anything. + * + * @generated from rpc fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface + */ + validateAddNetworkInterface: { + methodKind: "unary"; + input: typeof MVMServiceValidateAddNetworkInterfaceRequestSchema; + output: typeof MVMServiceValidateAddNetworkInterfaceResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_fits_api_mvm_v1_mvm, 0); + diff --git a/js/fits/api/mvm/v1/os_pb.ts b/js/fits/api/mvm/v1/os_pb.ts new file mode 100644 index 0000000..62bcb53 --- /dev/null +++ b/js/fits/api/mvm/v1/os_pb.ts @@ -0,0 +1,114 @@ +// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" +// @generated from file fits/api/mvm/v1/os.proto (package fits.api.mvm.v1, syntax proto3) +/* eslint-disable */ + +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; +import { file_fits_api_v1_common } from "../../v1/common_pb"; +import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file fits/api/mvm/v1/os.proto. + */ +export const file_fits_api_mvm_v1_os: GenFile = /*@__PURE__*/ + fileDesc("ChhmaXRzL2FwaS9tdm0vdjEvb3MucHJvdG8SD2ZpdHMuYXBpLm12bS52MSJxCgJPUxIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIaCgV0aXRsZRgCIAEoCUILukgIcgbAs66xAgESGQoEdHlwZRgDIAEoCUILukgIcgbAs66xAgESHAoHdmVyc2lvbhgEIAEoCUILukgIcgbAs66xAgEiFgoUT1NTZXJ2aWNlTGlzdFJlcXVlc3QiRwoVT1NTZXJ2aWNlTGlzdFJlc3BvbnNlEi4KEW9wZXJhdGluZ19zeXN0ZW1zGAEgAygLMhMuZml0cy5hcGkubXZtLnYxLk9TMm8KCU9TU2VydmljZRJiCgRMaXN0EiUuZml0cy5hcGkubXZtLnYxLk9TU2VydmljZUxpc3RSZXF1ZXN0GiYuZml0cy5hcGkubXZtLnYxLk9TU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAJCrAEKE2NvbS5maXRzLmFwaS5tdm0udjFCB09zUHJvdG9QAVotZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvbXZtL3YxO212bXYxogIDRkFNqgIPRml0cy5BcGkuTXZtLlYxygIPRml0c1xBcGlcTXZtXFYx4gIbRml0c1xBcGlcTXZtXFYxXEdQQk1ldGFkYXRh6gISRml0czo6QXBpOjpNdm06OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); + +/** + * OS is the definition of an available OS for MVM instances. + * + * @generated from message fits.api.mvm.v1.OS + */ +export type OS = Message<"fits.api.mvm.v1.OS"> & { + /** + * Uuid of this OS + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * Title of the OS + * + * @generated from field: string title = 2; + */ + title: string; + + /** + * Type of the OS + * + * @generated from field: string type = 3; + */ + type: string; + + /** + * Version of the OS + * + * @generated from field: string version = 4; + */ + version: string; +}; + +/** + * Describes the message fits.api.mvm.v1.OS. + * Use `create(OSSchema)` to create a new message. + */ +export const OSSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_os, 0); + +/** + * OSServiceListRequest is the request payload for a OS list request. + * + * @generated from message fits.api.mvm.v1.OSServiceListRequest + */ +export type OSServiceListRequest = Message<"fits.api.mvm.v1.OSServiceListRequest"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.OSServiceListRequest. + * Use `create(OSServiceListRequestSchema)` to create a new message. + */ +export const OSServiceListRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_os, 1); + +/** + * OSServiceListResponse is the response payload for a OS list request + * + * @generated from message fits.api.mvm.v1.OSServiceListResponse + */ +export type OSServiceListResponse = Message<"fits.api.mvm.v1.OSServiceListResponse"> & { + /** + * The available operating systems + * + * @generated from field: repeated fits.api.mvm.v1.OS operating_systems = 1; + */ + operatingSystems: OS[]; +}; + +/** + * Describes the message fits.api.mvm.v1.OSServiceListResponse. + * Use `create(OSServiceListResponseSchema)` to create a new message. + */ +export const OSServiceListResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_os, 2); + +/** + * OSService lists operating systems available for managed VM (MVM) instances. + * + * @generated from service fits.api.mvm.v1.OSService + */ +export const OSService: GenService<{ + /** + * Returns a list of all operating systems. + * + * @generated from rpc fits.api.mvm.v1.OSService.List + */ + list: { + methodKind: "unary"; + input: typeof OSServiceListRequestSchema; + output: typeof OSServiceListResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_fits_api_mvm_v1_os, 0); + diff --git a/js/fits/api/mvm/v1/stagetype_pb.ts b/js/fits/api/mvm/v1/stagetype_pb.ts new file mode 100644 index 0000000..f5e7aff --- /dev/null +++ b/js/fits/api/mvm/v1/stagetype_pb.ts @@ -0,0 +1,100 @@ +// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" +// @generated from file fits/api/mvm/v1/stagetype.proto (package fits.api.mvm.v1, syntax proto3) +/* eslint-disable */ + +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; +import { file_fits_api_v1_common } from "../../v1/common_pb"; +import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file fits/api/mvm/v1/stagetype.proto. + */ +export const file_fits_api_mvm_v1_stagetype: GenFile = /*@__PURE__*/ + fileDesc("Ch9maXRzL2FwaS9tdm0vdjEvc3RhZ2V0eXBlLnByb3RvEg9maXRzLmFwaS5tdm0udjEiPwoJU3RhZ2VUeXBlEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhoKBXRpdGxlGAIgASgJQgu6SAhyBsCzrrECASIdChtTdGFnZVR5cGVTZXJ2aWNlTGlzdFJlcXVlc3QiTwocU3RhZ2VUeXBlU2VydmljZUxpc3RSZXNwb25zZRIvCgtzdGFnZV90eXBlcxgBIAMoCzIaLmZpdHMuYXBpLm12bS52MS5TdGFnZVR5cGUyhAEKEFN0YWdlVHlwZVNlcnZpY2UScAoETGlzdBIsLmZpdHMuYXBpLm12bS52MS5TdGFnZVR5cGVTZXJ2aWNlTGlzdFJlcXVlc3QaLS5maXRzLmFwaS5tdm0udjEuU3RhZ2VUeXBlU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAJCswEKE2NvbS5maXRzLmFwaS5tdm0udjFCDlN0YWdldHlwZVByb3RvUAFaLWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL212bS92MTttdm12MaICA0ZBTaoCD0ZpdHMuQXBpLk12bS5WMcoCD0ZpdHNcQXBpXE12bVxWMeICG0ZpdHNcQXBpXE12bVxWMVxHUEJNZXRhZGF0YeoCEkZpdHM6OkFwaTo6TXZtOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); + +/** + * StageType is the definition of available stage types. (Development, Test, Integration, Production) + * + * @generated from message fits.api.mvm.v1.StageType + */ +export type StageType = Message<"fits.api.mvm.v1.StageType"> & { + /** + * Uuid of this stage type + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * title of the stage type + * + * @generated from field: string title = 2; + */ + title: string; +}; + +/** + * Describes the message fits.api.mvm.v1.StageType. + * Use `create(StageTypeSchema)` to create a new message. + */ +export const StageTypeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_stagetype, 0); + +/** + * StageTypeServiceListRequest is the request payload for a stage type list request. + * + * @generated from message fits.api.mvm.v1.StageTypeServiceListRequest + */ +export type StageTypeServiceListRequest = Message<"fits.api.mvm.v1.StageTypeServiceListRequest"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.StageTypeServiceListRequest. + * Use `create(StageTypeServiceListRequestSchema)` to create a new message. + */ +export const StageTypeServiceListRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_stagetype, 1); + +/** + * StageTypeServiceListResponse is the response payload for a stage type list request + * + * @generated from message fits.api.mvm.v1.StageTypeServiceListResponse + */ +export type StageTypeServiceListResponse = Message<"fits.api.mvm.v1.StageTypeServiceListResponse"> & { + /** + * The available stage types + * + * @generated from field: repeated fits.api.mvm.v1.StageType stage_types = 1; + */ + stageTypes: StageType[]; +}; + +/** + * Describes the message fits.api.mvm.v1.StageTypeServiceListResponse. + * Use `create(StageTypeServiceListResponseSchema)` to create a new message. + */ +export const StageTypeServiceListResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_stagetype, 2); + +/** + * StageTypeService lists stage types available for managed VM (MVM) instances. + * + * @generated from service fits.api.mvm.v1.StageTypeService + */ +export const StageTypeService: GenService<{ + /** + * Returns a list of all stage types available for a tenant. + * + * @generated from rpc fits.api.mvm.v1.StageTypeService.List + */ + list: { + methodKind: "unary"; + input: typeof StageTypeServiceListRequestSchema; + output: typeof StageTypeServiceListResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_fits_api_mvm_v1_stagetype, 0); + diff --git a/js/fits/api/mvm/v1/vlan_pb.ts b/js/fits/api/mvm/v1/vlan_pb.ts new file mode 100644 index 0000000..dfe5d86 --- /dev/null +++ b/js/fits/api/mvm/v1/vlan_pb.ts @@ -0,0 +1,176 @@ +// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" +// @generated from file fits/api/mvm/v1/vlan.proto (package fits.api.mvm.v1, syntax proto3) +/* eslint-disable */ + +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; +import { file_fits_api_v1_common } from "../../v1/common_pb"; +import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file fits/api/mvm/v1/vlan.proto. + */ +export const file_fits_api_mvm_v1_vlan: GenFile = /*@__PURE__*/ + fileDesc("ChpmaXRzL2FwaS9tdm0vdjEvdmxhbi5wcm90bxIPZml0cy5hcGkubXZtLnYxIroCCgRWTEFOEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEgoKAmlkGAIgASgFEiEKDHN1Ym5ldF90aXRsZRgDIAEoCUILukgIcgbAs66xAgESDgoGc3VibmV0GAQgASgJEhIKCnN1Ym5ldG1hc2sYBSABKAkSDwoHZ2F0ZXdheRgGIAEoCRIWCg5pcF9yYW5nZV9zdGFydBgHIAEoCRIUCgxpcF9yYW5nZV9lbmQYCCABKAkSEAoIdXNlX2RoY3AYCSABKAgSJAoNbG9jYXRpb25fdXVpZBgNIAEoCUIIukgFcgOwAQFIAIgBARIhCg9zdGFnZV90eXBlX3V1aWQYDiABKAlCCLpIBXIDsAEBEhsKBnRlbmFudBgPIAEoCUILukgIcgbAs66xAgFCEAoOX2xvY2F0aW9uX3V1aWQiNQoWVkxBTlNlcnZpY2VMaXN0UmVxdWVzdBIbCgZ0ZW5hbnQYASABKAlCC7pICHIGwLOusQIBIj8KF1ZMQU5TZXJ2aWNlTGlzdFJlc3BvbnNlEiQKBXZsYW5zGAEgAygLMhUuZml0cy5hcGkubXZtLnYxLlZMQU4ydQoLVkxBTlNlcnZpY2USZgoETGlzdBInLmZpdHMuYXBpLm12bS52MS5WTEFOU2VydmljZUxpc3RSZXF1ZXN0GiguZml0cy5hcGkubXZtLnYxLlZMQU5TZXJ2aWNlTGlzdFJlc3BvbnNlIgvK8xgDAQID4PMYAkKuAQoTY29tLmZpdHMuYXBpLm12bS52MUIJVmxhblByb3RvUAFaLWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL212bS92MTttdm12MaICA0ZBTaoCD0ZpdHMuQXBpLk12bS5WMcoCD0ZpdHNcQXBpXE12bVxWMeICG0ZpdHNcQXBpXE12bVxWMVxHUEJNZXRhZGF0YeoCEkZpdHM6OkFwaTo6TXZtOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); + +/** + * VLAN is a VLAN that a MVM can be connected to. + * + * @generated from message fits.api.mvm.v1.VLAN + */ +export type VLAN = Message<"fits.api.mvm.v1.VLAN"> & { + /** + * Uuid of this VLAN + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * Id of this VLAN + * + * @generated from field: int32 id = 2; + */ + id: number; + + /** + * Title of the subnet this VLAN belongs to + * + * @generated from field: string subnet_title = 3; + */ + subnetTitle: string; + + /** + * CIDR of the subnet this VLAN belongs to + * + * @generated from field: string subnet = 4; + */ + subnet: string; + + /** + * Subnetmask of this VLAN + * + * @generated from field: string subnetmask = 5; + */ + subnetmask: string; + + /** + * Gateway of this VLAN + * + * @generated from field: string gateway = 6; + */ + gateway: string; + + /** + * Start of the usable IP range of this VLAN + * + * @generated from field: string ip_range_start = 7; + */ + ipRangeStart: string; + + /** + * End of the usable IP range of this VLAN + * + * @generated from field: string ip_range_end = 8; + */ + ipRangeEnd: string; + + /** + * Whether DHCP is used on this VLAN + * + * @generated from field: bool use_dhcp = 9; + */ + useDhcp: boolean; + + /** + * TODO instead of the pod title, could we have the location_uuid? + * + * @generated from field: optional string location_uuid = 13; + */ + locationUuid?: string | undefined; + + /** + * Uuid of the stage type of this VLAN + * + * @generated from field: string stage_type_uuid = 14; + */ + stageTypeUuid: string; + + /** + * Tenant this VLAN belongs to. + * + * @generated from field: string tenant = 15; + */ + tenant: string; +}; + +/** + * Describes the message fits.api.mvm.v1.VLAN. + * Use `create(VLANSchema)` to create a new message. + */ +export const VLANSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_vlan, 0); + +/** + * VLANServiceListRequest is the request payload for a VLAN list request. + * + * @generated from message fits.api.mvm.v1.VLANServiceListRequest + */ +export type VLANServiceListRequest = Message<"fits.api.mvm.v1.VLANServiceListRequest"> & { + /** + * Tenant to list available VLANs for + * + * @generated from field: string tenant = 1; + */ + tenant: string; +}; + +/** + * Describes the message fits.api.mvm.v1.VLANServiceListRequest. + * Use `create(VLANServiceListRequestSchema)` to create a new message. + */ +export const VLANServiceListRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_vlan, 1); + +/** + * VLANServiceListResponse is the response payload for a VLAN list request + * + * @generated from message fits.api.mvm.v1.VLANServiceListResponse + */ +export type VLANServiceListResponse = Message<"fits.api.mvm.v1.VLANServiceListResponse"> & { + /** + * The available VLANs + * + * @generated from field: repeated fits.api.mvm.v1.VLAN vlans = 1; + */ + vlans: VLAN[]; +}; + +/** + * Describes the message fits.api.mvm.v1.VLANServiceListResponse. + * Use `create(VLANServiceListResponseSchema)` to create a new message. + */ +export const VLANServiceListResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_vlan, 2); + +/** + * VLANService lists VLANs available for managed VM (MVM) instances. + * + * @generated from service fits.api.mvm.v1.VLANService + */ +export const VLANService: GenService<{ + /** + * Returns a list of all VLANs available for a tenant. + * + * @generated from rpc fits.api.mvm.v1.VLANService.List + */ + list: { + methodKind: "unary"; + input: typeof VLANServiceListRequestSchema; + output: typeof VLANServiceListResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_fits_api_mvm_v1_vlan, 0); + diff --git a/js/fits/api/vm/v1/location_pb.ts b/js/fits/api/vm/v1/location_pb.ts deleted file mode 100644 index 410476f..0000000 --- a/js/fits/api/vm/v1/location_pb.ts +++ /dev/null @@ -1,106 +0,0 @@ -// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" -// @generated from file fits/api/vm/v1/location.proto (package fits.api.vm.v1, syntax proto3) -/* eslint-disable */ - -import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; -import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; -import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; -import { file_fits_api_v1_common } from "../../v1/common_pb"; -import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; -import type { Message } from "@bufbuild/protobuf"; - -/** - * Describes the file fits/api/vm/v1/location.proto. - */ -export const file_fits_api_vm_v1_location: GenFile = /*@__PURE__*/ - fileDesc("Ch1maXRzL2FwaS92bS92MS9sb2NhdGlvbi5wcm90bxIOZml0cy5hcGkudm0udjEiPgoITG9jYXRpb24SFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGgoFdGl0bGUYAiABKAlCC7pICHIGwLOusQIBIjkKGkxvY2F0aW9uU2VydmljZUxpc3RSZXF1ZXN0EhsKBnRlbmFudBgBIAEoCUILukgIcgbAs66xAgEiSgobTG9jYXRpb25TZXJ2aWNlTGlzdFJlc3BvbnNlEisKCWxvY2F0aW9ucxgBIAMoCzIYLmZpdHMuYXBpLnZtLnYxLkxvY2F0aW9uMn8KD0xvY2F0aW9uU2VydmljZRJsCgRMaXN0EiouZml0cy5hcGkudm0udjEuTG9jYXRpb25TZXJ2aWNlTGlzdFJlcXVlc3QaKy5maXRzLmFwaS52bS52MS5Mb2NhdGlvblNlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCQqsBChJjb20uZml0cy5hcGkudm0udjFCDUxvY2F0aW9uUHJvdG9QAVorZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdm0vdjE7dm12MaICA0ZBVqoCDkZpdHMuQXBpLlZtLlYxygIORml0c1xBcGlcVm1cVjHiAhpGaXRzXEFwaVxWbVxWMVxHUEJNZXRhZGF0YeoCEUZpdHM6OkFwaTo6Vm06OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); - -/** - * Location is the definition of an available datacenter location for VM instances - * - * @generated from message fits.api.vm.v1.Location - */ -export type Location = Message<"fits.api.vm.v1.Location"> & { - /** - * Uuid of this location - * - * @generated from field: string uuid = 1; - */ - uuid: string; - - /** - * title of the location - * - * @generated from field: string title = 2; - */ - title: string; -}; - -/** - * Describes the message fits.api.vm.v1.Location. - * Use `create(LocationSchema)` to create a new message. - */ -export const LocationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_location, 0); - -/** - * LocationServiceListRequest is the request payload for a location list request. - * - * @generated from message fits.api.vm.v1.LocationServiceListRequest - */ -export type LocationServiceListRequest = Message<"fits.api.vm.v1.LocationServiceListRequest"> & { - /** - * Tenant to list available locations for - * - * @generated from field: string tenant = 1; - */ - tenant: string; -}; - -/** - * Describes the message fits.api.vm.v1.LocationServiceListRequest. - * Use `create(LocationServiceListRequestSchema)` to create a new message. - */ -export const LocationServiceListRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_location, 1); - -/** - * LocationServiceListResponse is the response payload for a location list request - * - * @generated from message fits.api.vm.v1.LocationServiceListResponse - */ -export type LocationServiceListResponse = Message<"fits.api.vm.v1.LocationServiceListResponse"> & { - /** - * The available locations - * - * @generated from field: repeated fits.api.vm.v1.Location locations = 1; - */ - locations: Location[]; -}; - -/** - * Describes the message fits.api.vm.v1.LocationServiceListResponse. - * Use `create(LocationServiceListResponseSchema)` to create a new message. - */ -export const LocationServiceListResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_location, 2); - -/** - * LocationService lists datacenter locations available for VM instances, scoped per tenant. - * - * @generated from service fits.api.vm.v1.LocationService - */ -export const LocationService: GenService<{ - /** - * Returns a list of all datacenter locations available for a tenant. - * - * @generated from rpc fits.api.vm.v1.LocationService.List - */ - list: { - methodKind: "unary"; - input: typeof LocationServiceListRequestSchema; - output: typeof LocationServiceListResponseSchema; - }, -}> = /*@__PURE__*/ - serviceDesc(file_fits_api_vm_v1_location, 0); - diff --git a/js/fits/api/vm/v1/os_pb.d.ts b/js/fits/api/vm/v1/os_pb.d.ts deleted file mode 100644 index f65ede7..0000000 --- a/js/fits/api/vm/v1/os_pb.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2"; -import type { Message } from "@bufbuild/protobuf"; -/** - * Describes the file fits/api/vm/v1/os.proto. - */ -export declare const file_fits_api_vm_v1_os: GenFile; -/** - * Os is the definition of a potential OS of a VM instance - * TODO create a dedicated service - * - * @generated from message fits.api.vm.v1.Os - */ -export type Os = Message<"fits.api.vm.v1.Os"> & { - /** - * Uuid of this os - * - * @generated from field: string uuid = 1; - */ - uuid: string; -}; -/** - * Describes the message fits.api.vm.v1.Os. - * Use `create(OsSchema)` to create a new message. - */ -export declare const OsSchema: GenMessage; diff --git a/js/fits/api/vm/v1/os_pb.js b/js/fits/api/vm/v1/os_pb.js deleted file mode 100644 index 998bc07..0000000 --- a/js/fits/api/vm/v1/os_pb.js +++ /dev/null @@ -1,14 +0,0 @@ -// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" -// @generated from file fits/api/vm/v1/os.proto (package fits.api.vm.v1, syntax proto3) -/* eslint-disable */ -import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; -import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; -/** - * Describes the file fits/api/vm/v1/os.proto. - */ -export const file_fits_api_vm_v1_os = /*@__PURE__*/ fileDesc("ChdmaXRzL2FwaS92bS92MS9vcy5wcm90bxIOZml0cy5hcGkudm0udjEiHAoCT3MSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQFCpQEKEmNvbS5maXRzLmFwaS52bS52MUIHT3NQcm90b1ABWitnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92bS92MTt2bXYxogIDRkFWqgIORml0cy5BcGkuVm0uVjHKAg5GaXRzXEFwaVxWbVxWMeICGkZpdHNcQXBpXFZtXFYxXEdQQk1ldGFkYXRh6gIRRml0czo6QXBpOjpWbTo6VjFiBnByb3RvMw", [file_buf_validate_validate]); -/** - * Describes the message fits.api.vm.v1.Os. - * Use `create(OsSchema)` to create a new message. - */ -export const OsSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_os, 0); diff --git a/js/fits/api/vm/v1/os_pb.ts b/js/fits/api/vm/v1/os_pb.ts deleted file mode 100644 index b3838a1..0000000 --- a/js/fits/api/vm/v1/os_pb.ts +++ /dev/null @@ -1,114 +0,0 @@ -// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" -// @generated from file fits/api/vm/v1/os.proto (package fits.api.vm.v1, syntax proto3) -/* eslint-disable */ - -import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; -import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; -import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; -import { file_fits_api_v1_common } from "../../v1/common_pb"; -import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; -import type { Message } from "@bufbuild/protobuf"; - -/** - * Describes the file fits/api/vm/v1/os.proto. - */ -export const file_fits_api_vm_v1_os: GenFile = /*@__PURE__*/ - fileDesc("ChdmaXRzL2FwaS92bS92MS9vcy5wcm90bxIOZml0cy5hcGkudm0udjEicQoCT1MSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGgoFdGl0bGUYAiABKAlCC7pICHIGwLOusQIBEhkKBHR5cGUYAyABKAlCC7pICHIGwLOusQIBEhwKB3ZlcnNpb24YBCABKAlCC7pICHIGwLOusQIBIhYKFE9TU2VydmljZUxpc3RSZXF1ZXN0IkYKFU9TU2VydmljZUxpc3RSZXNwb25zZRItChFvcGVyYXRpbmdfc3lzdGVtcxgBIAMoCzISLmZpdHMuYXBpLnZtLnYxLk9TMm0KCU9TU2VydmljZRJgCgRMaXN0EiQuZml0cy5hcGkudm0udjEuT1NTZXJ2aWNlTGlzdFJlcXVlc3QaJS5maXRzLmFwaS52bS52MS5PU1NlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCQqUBChJjb20uZml0cy5hcGkudm0udjFCB09zUHJvdG9QAVorZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdm0vdjE7dm12MaICA0ZBVqoCDkZpdHMuQXBpLlZtLlYxygIORml0c1xBcGlcVm1cVjHiAhpGaXRzXEFwaVxWbVxWMVxHUEJNZXRhZGF0YeoCEUZpdHM6OkFwaTo6Vm06OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); - -/** - * OS is the definition of an available OS for VM instances - * - * @generated from message fits.api.vm.v1.OS - */ -export type OS = Message<"fits.api.vm.v1.OS"> & { - /** - * Uuid of this OS - * - * @generated from field: string uuid = 1; - */ - uuid: string; - - /** - * Title of the OS - * - * @generated from field: string title = 2; - */ - title: string; - - /** - * Type of the OS - * - * @generated from field: string type = 3; - */ - type: string; - - /** - * Version of the OS - * - * @generated from field: string version = 4; - */ - version: string; -}; - -/** - * Describes the message fits.api.vm.v1.OS. - * Use `create(OSSchema)` to create a new message. - */ -export const OSSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_os, 0); - -/** - * OSServiceListRequest is the request payload for a OS list request. - * - * @generated from message fits.api.vm.v1.OSServiceListRequest - */ -export type OSServiceListRequest = Message<"fits.api.vm.v1.OSServiceListRequest"> & { -}; - -/** - * Describes the message fits.api.vm.v1.OSServiceListRequest. - * Use `create(OSServiceListRequestSchema)` to create a new message. - */ -export const OSServiceListRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_os, 1); - -/** - * OSServiceListResponse is the response payload for a OS list request - * - * @generated from message fits.api.vm.v1.OSServiceListResponse - */ -export type OSServiceListResponse = Message<"fits.api.vm.v1.OSServiceListResponse"> & { - /** - * The available operating systems - * - * @generated from field: repeated fits.api.vm.v1.OS operating_systems = 1; - */ - operatingSystems: OS[]; -}; - -/** - * Describes the message fits.api.vm.v1.OSServiceListResponse. - * Use `create(OSServiceListResponseSchema)` to create a new message. - */ -export const OSServiceListResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_os, 2); - -/** - * OSService lists operating systems available for VM instances. - * - * @generated from service fits.api.vm.v1.OSService - */ -export const OSService: GenService<{ - /** - * Returns a list of all operating systems. - * - * @generated from rpc fits.api.vm.v1.OSService.List - */ - list: { - methodKind: "unary"; - input: typeof OSServiceListRequestSchema; - output: typeof OSServiceListResponseSchema; - }, -}> = /*@__PURE__*/ - serviceDesc(file_fits_api_vm_v1_os, 0); - diff --git a/js/fits/api/vm/v1/service_pb.ts b/js/fits/api/vm/v1/service_pb.ts deleted file mode 100644 index 00df6d8..0000000 --- a/js/fits/api/vm/v1/service_pb.ts +++ /dev/null @@ -1,105 +0,0 @@ -// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" -// @generated from file fits/api/vm/v1/service.proto (package fits.api.vm.v1, syntax proto3) -/* eslint-disable */ - -import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; -import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; -import { file_fits_api_v1_common } from "../../v1/common_pb"; -import type { Message } from "@bufbuild/protobuf"; - -/** - * Describes the file fits/api/vm/v1/service.proto. - */ -export const file_fits_api_vm_v1_service: GenFile = /*@__PURE__*/ - fileDesc("ChxmaXRzL2FwaS92bS92MS9zZXJ2aWNlLnByb3RvEg5maXRzLmFwaS52bS52MSImCgdTZXJ2aWNlEgwKBHV1aWQYASABKAkSDQoFdGl0bGUYAiABKAkiGwoZU2VydmljZVNlcnZpY2VMaXN0UmVxdWVzdCJHChpTZXJ2aWNlU2VydmljZUxpc3RSZXNwb25zZRIpCghzZXJ2aWNlcxgBIAMoCzIXLmZpdHMuYXBpLnZtLnYxLlNlcnZpY2UyfAoOU2VydmljZVNlcnZpY2USagoETGlzdBIpLmZpdHMuYXBpLnZtLnYxLlNlcnZpY2VTZXJ2aWNlTGlzdFJlcXVlc3QaKi5maXRzLmFwaS52bS52MS5TZXJ2aWNlU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAJCqgEKEmNvbS5maXRzLmFwaS52bS52MUIMU2VydmljZVByb3RvUAFaK2dpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3ZtL3YxO3ZtdjGiAgNGQVaqAg5GaXRzLkFwaS5WbS5WMcoCDkZpdHNcQXBpXFZtXFYx4gIaRml0c1xBcGlcVm1cVjFcR1BCTWV0YWRhdGHqAhFGaXRzOjpBcGk6OlZtOjpWMWIGcHJvdG8z", [file_fits_api_v1_common]); - -/** - * TODO what is a service? - * - * @generated from message fits.api.vm.v1.Service - */ -export type Service = Message<"fits.api.vm.v1.Service"> & { - /** - * Uuid of this Service - * TODO this is actually not a UUID, but a string. It can be "special-customer" e.g. - * - * @generated from field: string uuid = 1; - */ - uuid: string; - - /** - * title of the Service - * - * type NucleusDBServices struct { - * ServiceTitle string `json:"service_title"` - * ServiceUuid string `json:"service_uuid"` - * } - * - * @generated from field: string title = 2; - */ - title: string; -}; - -/** - * Describes the message fits.api.vm.v1.Service. - * Use `create(ServiceSchema)` to create a new message. - */ -export const ServiceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_service, 0); - -/** - * ServiceServiceListRequest is the request payload for a service list request. - * The upstream nulink API accepts no body or parameters, so this is intentionally empty. - * - * @generated from message fits.api.vm.v1.ServiceServiceListRequest - */ -export type ServiceServiceListRequest = Message<"fits.api.vm.v1.ServiceServiceListRequest"> & { -}; - -/** - * Describes the message fits.api.vm.v1.ServiceServiceListRequest. - * Use `create(ServiceServiceListRequestSchema)` to create a new message. - */ -export const ServiceServiceListRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_service, 1); - -/** - * ServiceServiceListResponse is the response payload for a service list request - * - * @generated from message fits.api.vm.v1.ServiceServiceListResponse - */ -export type ServiceServiceListResponse = Message<"fits.api.vm.v1.ServiceServiceListResponse"> & { - /** - * The available services - * - * @generated from field: repeated fits.api.vm.v1.Service services = 1; - */ - services: Service[]; -}; - -/** - * Describes the message fits.api.vm.v1.ServiceServiceListResponse. - * Use `create(ServiceServiceListResponseSchema)` to create a new message. - */ -export const ServiceServiceListResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_service, 2); - -/** - * ServiceService TODO what is a service? - * - * @generated from service fits.api.vm.v1.ServiceService - */ -export const ServiceService: GenService<{ - /** - * Returns a list of all services. - * - * @generated from rpc fits.api.vm.v1.ServiceService.List - */ - list: { - methodKind: "unary"; - input: typeof ServiceServiceListRequestSchema; - output: typeof ServiceServiceListResponseSchema; - }, -}> = /*@__PURE__*/ - serviceDesc(file_fits_api_vm_v1_service, 0); - diff --git a/js/fits/api/vm/v1/stagetype_pb.ts b/js/fits/api/vm/v1/stagetype_pb.ts deleted file mode 100644 index 8815e05..0000000 --- a/js/fits/api/vm/v1/stagetype_pb.ts +++ /dev/null @@ -1,100 +0,0 @@ -// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" -// @generated from file fits/api/vm/v1/stagetype.proto (package fits.api.vm.v1, syntax proto3) -/* eslint-disable */ - -import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; -import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; -import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; -import { file_fits_api_v1_common } from "../../v1/common_pb"; -import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; -import type { Message } from "@bufbuild/protobuf"; - -/** - * Describes the file fits/api/vm/v1/stagetype.proto. - */ -export const file_fits_api_vm_v1_stagetype: GenFile = /*@__PURE__*/ - fileDesc("Ch5maXRzL2FwaS92bS92MS9zdGFnZXR5cGUucHJvdG8SDmZpdHMuYXBpLnZtLnYxIj8KCVN0YWdlVHlwZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIaCgV0aXRsZRgCIAEoCUILukgIcgbAs66xAgEiHQobU3RhZ2VUeXBlU2VydmljZUxpc3RSZXF1ZXN0Ik4KHFN0YWdlVHlwZVNlcnZpY2VMaXN0UmVzcG9uc2USLgoLc3RhZ2VfdHlwZXMYASADKAsyGS5maXRzLmFwaS52bS52MS5TdGFnZVR5cGUyggEKEFN0YWdlVHlwZVNlcnZpY2USbgoETGlzdBIrLmZpdHMuYXBpLnZtLnYxLlN0YWdlVHlwZVNlcnZpY2VMaXN0UmVxdWVzdBosLmZpdHMuYXBpLnZtLnYxLlN0YWdlVHlwZVNlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCQqwBChJjb20uZml0cy5hcGkudm0udjFCDlN0YWdldHlwZVByb3RvUAFaK2dpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3ZtL3YxO3ZtdjGiAgNGQVaqAg5GaXRzLkFwaS5WbS5WMcoCDkZpdHNcQXBpXFZtXFYx4gIaRml0c1xBcGlcVm1cVjFcR1BCTWV0YWRhdGHqAhFGaXRzOjpBcGk6OlZtOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); - -/** - * StageType is the definition of available stage types. (Development, Test, Integration, Production) - * - * @generated from message fits.api.vm.v1.StageType - */ -export type StageType = Message<"fits.api.vm.v1.StageType"> & { - /** - * Uuid of this stage type - * - * @generated from field: string uuid = 1; - */ - uuid: string; - - /** - * title of the stage type - * - * @generated from field: string title = 2; - */ - title: string; -}; - -/** - * Describes the message fits.api.vm.v1.StageType. - * Use `create(StageTypeSchema)` to create a new message. - */ -export const StageTypeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_stagetype, 0); - -/** - * StageTypeServiceListRequest is the request payload for a stage type list request. - * - * @generated from message fits.api.vm.v1.StageTypeServiceListRequest - */ -export type StageTypeServiceListRequest = Message<"fits.api.vm.v1.StageTypeServiceListRequest"> & { -}; - -/** - * Describes the message fits.api.vm.v1.StageTypeServiceListRequest. - * Use `create(StageTypeServiceListRequestSchema)` to create a new message. - */ -export const StageTypeServiceListRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_stagetype, 1); - -/** - * StageTypeServiceListResponse is the response payload for a stage type list request - * - * @generated from message fits.api.vm.v1.StageTypeServiceListResponse - */ -export type StageTypeServiceListResponse = Message<"fits.api.vm.v1.StageTypeServiceListResponse"> & { - /** - * The available stage types - * - * @generated from field: repeated fits.api.vm.v1.StageType stage_types = 1; - */ - stageTypes: StageType[]; -}; - -/** - * Describes the message fits.api.vm.v1.StageTypeServiceListResponse. - * Use `create(StageTypeServiceListResponseSchema)` to create a new message. - */ -export const StageTypeServiceListResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_stagetype, 2); - -/** - * StageTypeService lists stage types available for VM instances. - * - * @generated from service fits.api.vm.v1.StageTypeService - */ -export const StageTypeService: GenService<{ - /** - * Returns a list of all stage types available for a tenant. - * - * @generated from rpc fits.api.vm.v1.StageTypeService.List - */ - list: { - methodKind: "unary"; - input: typeof StageTypeServiceListRequestSchema; - output: typeof StageTypeServiceListResponseSchema; - }, -}> = /*@__PURE__*/ - serviceDesc(file_fits_api_vm_v1_stagetype, 0); - diff --git a/js/fits/api/vm/v1/vlan_pb.ts b/js/fits/api/vm/v1/vlan_pb.ts deleted file mode 100644 index e5b17b5..0000000 --- a/js/fits/api/vm/v1/vlan_pb.ts +++ /dev/null @@ -1,176 +0,0 @@ -// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" -// @generated from file fits/api/vm/v1/vlan.proto (package fits.api.vm.v1, syntax proto3) -/* eslint-disable */ - -import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; -import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; -import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; -import { file_fits_api_v1_common } from "../../v1/common_pb"; -import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; -import type { Message } from "@bufbuild/protobuf"; - -/** - * Describes the file fits/api/vm/v1/vlan.proto. - */ -export const file_fits_api_vm_v1_vlan: GenFile = /*@__PURE__*/ - fileDesc("ChlmaXRzL2FwaS92bS92MS92bGFuLnByb3RvEg5maXRzLmFwaS52bS52MSK6AgoEVmxhbhIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIKCgJpZBgCIAEoBRIhCgxzdWJuZXRfdGl0bGUYAyABKAlCC7pICHIGwLOusQIBEg4KBnN1Ym5ldBgEIAEoCRISCgpzdWJuZXRtYXNrGAUgASgJEg8KB2dhdGV3YXkYBiABKAkSFgoOaXBfcmFuZ2Vfc3RhcnQYByABKAkSFAoMaXBfcmFuZ2VfZW5kGAggASgJEhAKCHVzZV9kaGNwGAkgASgIEiQKDWxvY2F0aW9uX3V1aWQYDSABKAlCCLpIBXIDsAEBSACIAQESIQoPc3RhZ2VfdHlwZV91dWlkGA4gASgJQgi6SAVyA7ABARIbCgZ0ZW5hbnQYDyABKAlCC7pICHIGwLOusQIBQhAKDl9sb2NhdGlvbl91dWlkIjUKFlZsYW5TZXJ2aWNlTGlzdFJlcXVlc3QSGwoGdGVuYW50GAEgASgJQgu6SAhyBsCzrrECASI+ChdWbGFuU2VydmljZUxpc3RSZXNwb25zZRIjCgV2bGFucxgBIAMoCzIULmZpdHMuYXBpLnZtLnYxLlZsYW4ycwoLVmxhblNlcnZpY2USZAoETGlzdBImLmZpdHMuYXBpLnZtLnYxLlZsYW5TZXJ2aWNlTGlzdFJlcXVlc3QaJy5maXRzLmFwaS52bS52MS5WbGFuU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAJCpwEKEmNvbS5maXRzLmFwaS52bS52MUIJVmxhblByb3RvUAFaK2dpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3ZtL3YxO3ZtdjGiAgNGQVaqAg5GaXRzLkFwaS5WbS5WMcoCDkZpdHNcQXBpXFZtXFYx4gIaRml0c1xBcGlcVm1cVjFcR1BCTWV0YWRhdGHqAhFGaXRzOjpBcGk6OlZtOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); - -/** - * Vlan is a VLAN that a VM can be connected to. - * - * @generated from message fits.api.vm.v1.Vlan - */ -export type Vlan = Message<"fits.api.vm.v1.Vlan"> & { - /** - * Uuid of this VLAN - * - * @generated from field: string uuid = 1; - */ - uuid: string; - - /** - * Id of this VLAN - * - * @generated from field: int32 id = 2; - */ - id: number; - - /** - * Title of the subnet this VLAN belongs to - * - * @generated from field: string subnet_title = 3; - */ - subnetTitle: string; - - /** - * CIDR of the subnet this VLAN belongs to - * - * @generated from field: string subnet = 4; - */ - subnet: string; - - /** - * Subnetmask of this VLAN - * - * @generated from field: string subnetmask = 5; - */ - subnetmask: string; - - /** - * Gateway of this VLAN - * - * @generated from field: string gateway = 6; - */ - gateway: string; - - /** - * Start of the usable IP range of this VLAN - * - * @generated from field: string ip_range_start = 7; - */ - ipRangeStart: string; - - /** - * End of the usable IP range of this VLAN - * - * @generated from field: string ip_range_end = 8; - */ - ipRangeEnd: string; - - /** - * Whether DHCP is used on this VLAN - * - * @generated from field: bool use_dhcp = 9; - */ - useDhcp: boolean; - - /** - * TODO instead of the pod title, could we have the location_uuid? - * - * @generated from field: optional string location_uuid = 13; - */ - locationUuid?: string | undefined; - - /** - * Uuid of the stage type of this VLAN - * - * @generated from field: string stage_type_uuid = 14; - */ - stageTypeUuid: string; - - /** - * Tenant this VLAN belongs to. - * - * @generated from field: string tenant = 15; - */ - tenant: string; -}; - -/** - * Describes the message fits.api.vm.v1.Vlan. - * Use `create(VlanSchema)` to create a new message. - */ -export const VlanSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vlan, 0); - -/** - * VlanServiceListRequest is the request payload for a VLAN list request. - * - * @generated from message fits.api.vm.v1.VlanServiceListRequest - */ -export type VlanServiceListRequest = Message<"fits.api.vm.v1.VlanServiceListRequest"> & { - /** - * Tenant to list available VLANs for - * - * @generated from field: string tenant = 1; - */ - tenant: string; -}; - -/** - * Describes the message fits.api.vm.v1.VlanServiceListRequest. - * Use `create(VlanServiceListRequestSchema)` to create a new message. - */ -export const VlanServiceListRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vlan, 1); - -/** - * VlanServiceListResponse is the response payload for a VLAN list request - * - * @generated from message fits.api.vm.v1.VlanServiceListResponse - */ -export type VlanServiceListResponse = Message<"fits.api.vm.v1.VlanServiceListResponse"> & { - /** - * The available VLANs - * - * @generated from field: repeated fits.api.vm.v1.Vlan vlans = 1; - */ - vlans: Vlan[]; -}; - -/** - * Describes the message fits.api.vm.v1.VlanServiceListResponse. - * Use `create(VlanServiceListResponseSchema)` to create a new message. - */ -export const VlanServiceListResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vlan, 2); - -/** - * VLANService lists VLANs avaiable for VM instances. - * - * @generated from service fits.api.vm.v1.VlanService - */ -export const VlanService: GenService<{ - /** - * Returns a list of all VLANs available for a tenant. - * - * @generated from rpc fits.api.vm.v1.VlanService.List - */ - list: { - methodKind: "unary"; - input: typeof VlanServiceListRequestSchema; - output: typeof VlanServiceListResponseSchema; - }, -}> = /*@__PURE__*/ - serviceDesc(file_fits_api_vm_v1_vlan, 0); - diff --git a/js/fits/api/vm/v1/vm_pb.d.ts b/js/fits/api/vm/v1/vm_pb.d.ts deleted file mode 100644 index 0f57b41..0000000 --- a/js/fits/api/vm/v1/vm_pb.d.ts +++ /dev/null @@ -1,361 +0,0 @@ -import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; -import type { Meta, UpdateMeta } from "../../v1/common_pb"; -import type { Message } from "@bufbuild/protobuf"; -/** - * Describes the file fits/api/vm/v1/vm.proto. - */ -export declare const file_fits_api_vm_v1_vm: GenFile; -/** - * VM Instance Messages - * - * @generated from message fits.api.vm.v1.VMInstance - */ -export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { - /** - * Uuid of this vm - * - * @generated from field: string uuid = 1; - */ - uuid: string; - /** - * Meta for this vm - * - * @generated from field: fits.api.v1.Meta meta = 2; - */ - meta?: Meta | undefined; - /** - * Name of this vm - * - * @generated from field: string name = 3; - */ - name: string; - /** - * Project where this vm address belongs to - * - * @generated from field: string project = 4; - */ - project: string; -}; -/** - * Describes the message fits.api.vm.v1.VMInstance. - * Use `create(VMInstanceSchema)` to create a new message. - */ -export declare const VMInstanceSchema: GenMessage; -/** - * VMServiceGetRequest TODO - * - * @generated from message fits.api.vm.v1.VMServiceGetRequest - */ -export type VMServiceGetRequest = Message<"fits.api.vm.v1.VMServiceGetRequest"> & { - /** - * Uuid of this vm - * - * @generated from field: string uuid = 1; - */ - uuid: string; - /** - * Project where this vm address belongs to - * - * @generated from field: string project = 2; - */ - project: string; -}; -/** - * Describes the message fits.api.vm.v1.VMServiceGetRequest. - * Use `create(VMServiceGetRequestSchema)` to create a new message. - */ -export declare const VMServiceGetRequestSchema: GenMessage; -/** - * VMServiceGetResponse TODO - * - * @generated from message fits.api.vm.v1.VMServiceGetResponse - */ -export type VMServiceGetResponse = Message<"fits.api.vm.v1.VMServiceGetResponse"> & { - /** - * The vm - * - * @generated from field: fits.api.vm.v1.VMInstance vm = 1; - */ - vm?: VMInstance | undefined; -}; -/** - * Describes the message fits.api.vm.v1.VMServiceGetResponse. - * Use `create(VMServiceGetResponseSchema)` to create a new message. - */ -export declare const VMServiceGetResponseSchema: GenMessage; -/** - * VMServiceCreateRequest TODO - * - * @generated from message fits.api.vm.v1.VMServiceCreateRequest - */ -export type VMServiceCreateRequest = Message<"fits.api.vm.v1.VMServiceCreateRequest"> & { - /** - * Project of the vm - * - * @generated from field: string project = 1; - */ - project: string; - /** - * Name of the vm - * - * @generated from field: optional string name = 2; - */ - name?: string | undefined; - /** - * Number of CPUs of this vm - * - * @generated from field: uint32 cpu = 3; - */ - cpu: number; - /** - * Ram of the vm in GB - * - * @generated from field: uint32 ram = 4; - */ - ram: number; - /** - * OS Uuid of the OS to install in the vm instance - * - * @generated from field: string os_uuid = 5; - */ - osUuid: string; - /** - * VLAN Uuid of the VLAN to install in the vm instance into - * - * @generated from field: string vlan_uuid = 6; - */ - vlanUuid: string; - /** - * Location Uuid of the datacenter location to install in the vm instance - * - * @generated from field: string location_uuid = 7; - */ - locationUuid: string; - /** - * Contact Uuid of who is the responsible contact of the vm instance - * - * @generated from field: string contact_uuid = 8; - */ - contactUuid: string; - /** - * List of disks for this vm - * - * Disks []DiskInputModel - * RequestedBy *string // TODO is inherited from the token making the create request -> stored in meta.createdBy - * - * @generated from field: repeated fits.api.vm.v1.Disk disks = 9; - */ - disks: Disk[]; -}; -/** - * Describes the message fits.api.vm.v1.VMServiceCreateRequest. - * Use `create(VMServiceCreateRequestSchema)` to create a new message. - */ -export declare const VMServiceCreateRequestSchema: GenMessage; -/** - * Disk - * - * @generated from message fits.api.vm.v1.Disk - */ -export type Disk = Message<"fits.api.vm.v1.Disk"> & { - /** - * AutoExtend if set to true the disk grows automatically - * - * @generated from field: bool auto_extend = 1; - */ - autoExtend: boolean; - /** - * Size if the disk in GB - * - * TODO discuss how this could be optional - * - * @generated from field: optional uint64 size_in_gb = 2; - */ - sizeInGb?: bigint | undefined; - /** - * DriveLetter where this disk should be assigned - * - * @generated from field: optional string drive_letter = 3; - */ - driveLetter?: string | undefined; - /** - * Label of the disk - * - * @generated from field: string label = 4; - */ - label: string; - /** - * MountPoint where this disk should be mounted - * - * TODO this requires a Filesystem on the disk ? - * - * @generated from field: optional string mount_point = 5; - */ - mountPoint?: string | undefined; -}; -/** - * Describes the message fits.api.vm.v1.Disk. - * Use `create(DiskSchema)` to create a new message. - */ -export declare const DiskSchema: GenMessage; -/** - * VMServiceCreateResponse TODO - * - * @generated from message fits.api.vm.v1.VMServiceCreateResponse - */ -export type VMServiceCreateResponse = Message<"fits.api.vm.v1.VMServiceCreateResponse"> & {}; -/** - * Describes the message fits.api.vm.v1.VMServiceCreateResponse. - * Use `create(VMServiceCreateResponseSchema)` to create a new message. - */ -export declare const VMServiceCreateResponseSchema: GenMessage; -/** - * VMServiceUpdateRequest TODO - * - * @generated from message fits.api.vm.v1.VMServiceUpdateRequest - */ -export type VMServiceUpdateRequest = Message<"fits.api.vm.v1.VMServiceUpdateRequest"> & { - /** - * Project of the vm - * - * @generated from field: string project = 1; - */ - project: string; - /** - * UpdateMeta contains the timestamp and strategy to be used in this update request. - * - * @generated from field: fits.api.v1.UpdateMeta update_meta = 2; - */ - updateMeta?: UpdateMeta | undefined; -}; -/** - * Describes the message fits.api.vm.v1.VMServiceUpdateRequest. - * Use `create(VMServiceUpdateRequestSchema)` to create a new message. - */ -export declare const VMServiceUpdateRequestSchema: GenMessage; -/** - * VMServiceUpdateResponse TODO - * - * @generated from message fits.api.vm.v1.VMServiceUpdateResponse - */ -export type VMServiceUpdateResponse = Message<"fits.api.vm.v1.VMServiceUpdateResponse"> & {}; -/** - * Describes the message fits.api.vm.v1.VMServiceUpdateResponse. - * Use `create(VMServiceUpdateResponseSchema)` to create a new message. - */ -export declare const VMServiceUpdateResponseSchema: GenMessage; -/** - * VMServiceListRequest TODO - * - * @generated from message fits.api.vm.v1.VMServiceListRequest - */ -export type VMServiceListRequest = Message<"fits.api.vm.v1.VMServiceListRequest"> & { - /** - * Project of the vm - * - * @generated from field: string project = 1; - */ - project: string; -}; -/** - * Describes the message fits.api.vm.v1.VMServiceListRequest. - * Use `create(VMServiceListRequestSchema)` to create a new message. - */ -export declare const VMServiceListRequestSchema: GenMessage; -/** - * VMServiceListResponse TODO - * - * @generated from message fits.api.vm.v1.VMServiceListResponse - */ -export type VMServiceListResponse = Message<"fits.api.vm.v1.VMServiceListResponse"> & {}; -/** - * Describes the message fits.api.vm.v1.VMServiceListResponse. - * Use `create(VMServiceListResponseSchema)` to create a new message. - */ -export declare const VMServiceListResponseSchema: GenMessage; -/** - * VMServiceDeleteRequest TODO - * - * @generated from message fits.api.vm.v1.VMServiceDeleteRequest - */ -export type VMServiceDeleteRequest = Message<"fits.api.vm.v1.VMServiceDeleteRequest"> & { - /** - * Project of the vm - * - * @generated from field: string project = 1; - */ - project: string; -}; -/** - * Describes the message fits.api.vm.v1.VMServiceDeleteRequest. - * Use `create(VMServiceDeleteRequestSchema)` to create a new message. - */ -export declare const VMServiceDeleteRequestSchema: GenMessage; -/** - * VMServiceDeleteResponse TODO - * - * @generated from message fits.api.vm.v1.VMServiceDeleteResponse - */ -export type VMServiceDeleteResponse = Message<"fits.api.vm.v1.VMServiceDeleteResponse"> & {}; -/** - * Describes the message fits.api.vm.v1.VMServiceDeleteResponse. - * Use `create(VMServiceDeleteResponseSchema)` to create a new message. - */ -export declare const VMServiceDeleteResponseSchema: GenMessage; -/** - * VMService provides VM address management operations. - * - * @generated from service fits.api.vm.v1.VMService - */ -export declare const VMService: GenService<{ - /** - * Returns the VM address with the specified VM. - * - * @generated from rpc fits.api.vm.v1.VMService.Get - */ - get: { - methodKind: "unary"; - input: typeof VMServiceGetRequestSchema; - output: typeof VMServiceGetResponseSchema; - }; - /** - * Creates a new VM address. - * - * @generated from rpc fits.api.vm.v1.VMService.Create - */ - create: { - methodKind: "unary"; - input: typeof VMServiceCreateRequestSchema; - output: typeof VMServiceCreateResponseSchema; - }; - /** - * Updates an VM address. - * - * @generated from rpc fits.api.vm.v1.VMService.Update - */ - update: { - methodKind: "unary"; - input: typeof VMServiceUpdateRequestSchema; - output: typeof VMServiceUpdateResponseSchema; - }; - /** - * Returns the list of all VM addresses. - * - * @generated from rpc fits.api.vm.v1.VMService.List - */ - list: { - methodKind: "unary"; - input: typeof VMServiceListRequestSchema; - output: typeof VMServiceListResponseSchema; - }; - /** - * Deletes an VM address. - * - * @generated from rpc fits.api.vm.v1.VMService.Delete - */ - delete: { - methodKind: "unary"; - input: typeof VMServiceDeleteRequestSchema; - output: typeof VMServiceDeleteResponseSchema; - }; -}>; diff --git a/js/fits/api/vm/v1/vm_pb.js b/js/fits/api/vm/v1/vm_pb.js deleted file mode 100644 index 2017d7c..0000000 --- a/js/fits/api/vm/v1/vm_pb.js +++ /dev/null @@ -1,77 +0,0 @@ -// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" -// @generated from file fits/api/vm/v1/vm.proto (package fits.api.vm.v1, syntax proto3) -/* eslint-disable */ -import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; -import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; -import { file_fits_api_v1_common } from "../../v1/common_pb"; -import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; -/** - * Describes the file fits/api/vm/v1/vm.proto. - */ -export const file_fits_api_vm_v1_vm = /*@__PURE__*/ fileDesc("ChdmaXRzL2FwaS92bS92MS92bS5wcm90bxIOZml0cy5hcGkudm0udjEiewoKVk1JbnN0YW5jZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIfCgRtZXRhGAIgASgLMhEuZml0cy5hcGkudjEuTWV0YRIZCgRuYW1lGAMgASgJQgu6SAhyBsCzrrECARIZCgdwcm9qZWN0GAQgASgJQgi6SAVyA7ABASJIChNWTVNlcnZpY2VHZXRSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBIj4KFFZNU2VydmljZUdldFJlc3BvbnNlEiYKAnZtGAEgASgLMhouZml0cy5hcGkudm0udjEuVk1JbnN0YW5jZSKUAgoWVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARIeCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECAUgAiAEBEgsKA2NwdRgDIAEoDRILCgNyYW0YBCABKA0SGQoHb3NfdXVpZBgFIAEoCUIIukgFcgOwAQESGwoJdmxhbl91dWlkGAYgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAcgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYCCABKAlCCLpIBXIDsAEBEiMKBWRpc2tzGAkgAygLMhQuZml0cy5hcGkudm0udjEuRGlza0IHCgVfbmFtZSKoAQoERGlzaxITCgthdXRvX2V4dGVuZBgBIAEoCBIXCgpzaXplX2luX2diGAIgASgESACIAQESGQoMZHJpdmVfbGV0dGVyGAMgASgJSAGIAQESDQoFbGFiZWwYBCABKAkSGAoLbW91bnRfcG9pbnQYBSABKAlIAogBAUINCgtfc2l6ZV9pbl9nYkIPCg1fZHJpdmVfbGV0dGVyQg4KDF9tb3VudF9wb2ludCIZChdWTVNlcnZpY2VDcmVhdGVSZXNwb25zZSJpChZWTVNlcnZpY2VVcGRhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBIhkKF1ZNU2VydmljZVVwZGF0ZVJlc3BvbnNlIjEKFFZNU2VydmljZUxpc3RSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIhcKFVZNU2VydmljZUxpc3RSZXNwb25zZSIzChZWTVNlcnZpY2VEZWxldGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIhkKF1ZNU2VydmljZURlbGV0ZVJlc3BvbnNlMoEECglWTVNlcnZpY2USXQoDR2V0EiMuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlR2V0UmVxdWVzdBokLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUdldFJlc3BvbnNlIgvK8xgDAQID4PMYAhJlCgZDcmVhdGUSJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VDcmVhdGVSZXF1ZXN0GicuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESZQoGVXBkYXRlEiYuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlVXBkYXRlUmVxdWVzdBonLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZVVwZGF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmAKBExpc3QSJC5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VMaXN0UmVxdWVzdBolLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAISZQoGRGVsZXRlEiYuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlRGVsZXRlUmVxdWVzdBonLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZURlbGV0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBQqUBChJjb20uZml0cy5hcGkudm0udjFCB1ZtUHJvdG9QAVorZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdm0vdjE7dm12MaICA0ZBVqoCDkZpdHMuQXBpLlZtLlYxygIORml0c1xBcGlcVm1cVjHiAhpGaXRzXEFwaVxWbVxWMVxHUEJNZXRhZGF0YeoCEUZpdHM6OkFwaTo6Vm06OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); -/** - * Describes the message fits.api.vm.v1.VMInstance. - * Use `create(VMInstanceSchema)` to create a new message. - */ -export const VMInstanceSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 0); -/** - * Describes the message fits.api.vm.v1.VMServiceGetRequest. - * Use `create(VMServiceGetRequestSchema)` to create a new message. - */ -export const VMServiceGetRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 1); -/** - * Describes the message fits.api.vm.v1.VMServiceGetResponse. - * Use `create(VMServiceGetResponseSchema)` to create a new message. - */ -export const VMServiceGetResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 2); -/** - * Describes the message fits.api.vm.v1.VMServiceCreateRequest. - * Use `create(VMServiceCreateRequestSchema)` to create a new message. - */ -export const VMServiceCreateRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 3); -/** - * Describes the message fits.api.vm.v1.Disk. - * Use `create(DiskSchema)` to create a new message. - */ -export const DiskSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 4); -/** - * Describes the message fits.api.vm.v1.VMServiceCreateResponse. - * Use `create(VMServiceCreateResponseSchema)` to create a new message. - */ -export const VMServiceCreateResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 5); -/** - * Describes the message fits.api.vm.v1.VMServiceUpdateRequest. - * Use `create(VMServiceUpdateRequestSchema)` to create a new message. - */ -export const VMServiceUpdateRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 6); -/** - * Describes the message fits.api.vm.v1.VMServiceUpdateResponse. - * Use `create(VMServiceUpdateResponseSchema)` to create a new message. - */ -export const VMServiceUpdateResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 7); -/** - * Describes the message fits.api.vm.v1.VMServiceListRequest. - * Use `create(VMServiceListRequestSchema)` to create a new message. - */ -export const VMServiceListRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 8); -/** - * Describes the message fits.api.vm.v1.VMServiceListResponse. - * Use `create(VMServiceListResponseSchema)` to create a new message. - */ -export const VMServiceListResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 9); -/** - * Describes the message fits.api.vm.v1.VMServiceDeleteRequest. - * Use `create(VMServiceDeleteRequestSchema)` to create a new message. - */ -export const VMServiceDeleteRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 10); -/** - * Describes the message fits.api.vm.v1.VMServiceDeleteResponse. - * Use `create(VMServiceDeleteResponseSchema)` to create a new message. - */ -export const VMServiceDeleteResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_vm_v1_vm, 11); -/** - * VMService provides VM address management operations. - * - * @generated from service fits.api.vm.v1.VMService - */ -export const VMService = /*@__PURE__*/ serviceDesc(file_fits_api_vm_v1_vm, 0); diff --git a/js/fits/api/vm/v1/vm_pb.ts b/js/fits/api/vm/v1/vm_pb.ts deleted file mode 100644 index b8bdc7c..0000000 --- a/js/fits/api/vm/v1/vm_pb.ts +++ /dev/null @@ -1,1679 +0,0 @@ -// @generated by protoc-gen-es v2.14.1 with parameter "target=ts" -// @generated from file fits/api/vm/v1/vm.proto (package fits.api.vm.v1, syntax proto3) -/* eslint-disable */ - -import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; -import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; -import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; -import type { Labels, Meta, UpdateMeta } from "../../v1/common_pb"; -import { file_fits_api_v1_common } from "../../v1/common_pb"; -import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; -import type { Vlan } from "./vlan_pb"; -import { file_fits_api_vm_v1_vlan } from "./vlan_pb"; -import type { Message } from "@bufbuild/protobuf"; - -/** - * Describes the file fits/api/vm/v1/vm.proto. - */ -export const file_fits_api_vm_v1_vm: GenFile = /*@__PURE__*/ - fileDesc("ChdmaXRzL2FwaS92bS92MS92bS5wcm90bxIOZml0cy5hcGkudm0udjEidQoMTGludXhEZXRhaWxzEigKBWRpc2tzGAEgAygLMhkuZml0cy5hcGkudm0udjEuTGludXhEaXNrEhsKCWxkYXBfdXVpZBgCIAEoCUIIukgFcgOwAQESHgoJbGRhcF9mcWRuGAMgASgJQgu6SAhyBsCzrrECASJ9Cg5XaW5kb3dzRGV0YWlscxIqCgVkaXNrcxgBIAMoCzIbLmZpdHMuYXBpLnZtLnYxLldpbmRvd3NEaXNrEh0KC2RvbWFpbl91dWlkGAIgASgJQgi6SAVyA7ABARIgCgtkb21haW5fZnFkbhgDIAEoCUILukgIcgbAs66xAgEiXgoQTmV0d29ya0ludGVyZmFjZRIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIeCglpcGFkZHJlc3MYAiABKAlCC7pICHIG6LOusQIBEhIKCm1hY2FkZHJlc3MYAyABKAkiygUKClZNSW5zdGFuY2USFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEZnFkbhgDIAEoCUILukgIcgbAs66xAgESGwoGdGVuYW50GAQgASgJQgu6SAhyBsCzrrECARIeCgxwcm9qZWN0X3V1aWQYBSABKAlCCLpIBXIDsAEBEhkKB29zX3V1aWQYBiABKAlCCLpIBXIDsAEBEh8KDWxvY2F0aW9uX3V1aWQYByABKAlCCLpIBXIDsAEBEh4KDGNvbnRhY3RfdXVpZBgIIAEoCUIIukgFcgOwAQESCwoDY3B1GAkgASgNEgsKA3JhbRgKIAEoDRIOCgZiYWNrdXAYCyABKAgSDgoGc3RhdHVzGAwgASgJEhMKC3N0YXR1c19pbmZvGA0gASgJEjwKDGF2YWlsYWJpbGl0eRgOIAEoDjIcLmZpdHMuYXBpLnZtLnYxLkF2YWlsYWJpbGl0eUIIukgFggECEAESPAoMc2VydmljZWNsYXNzGA8gASgOMhwuZml0cy5hcGkudm0udjEuU2VydmljZUNsYXNzQgi6SAWCAQIQARI5Cg93aW5kb3dzX2RldGFpbHMYECABKAsyHi5maXRzLmFwaS52bS52MS5XaW5kb3dzRGV0YWlsc0gAEjUKDWxpbnV4X2RldGFpbHMYESABKAsyHC5maXRzLmFwaS52bS52MS5MaW51eERldGFpbHNIABI0CgppbnRlcmZhY2VzGBIgAygLMiAuZml0cy5hcGkudm0udjEuTmV0d29ya0ludGVyZmFjZRIiCgR2bGFuGBMgASgLMhQuZml0cy5hcGkudm0udjEuVmxhbhIUCgxvcmRlcl9udW1iZXIYFCABKAkSEAoIY29udHJhY3QYFSABKAhCEAoHZGV0YWlscxIFukgCCAEiWAoTVk1TZXJ2aWNlR2V0UmVxdWVzdBIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEhsKBnRlbmFudBgCIAEoCUILukgIcgbAs66xAgFCBwoFX3V1aWQiPgoUVk1TZXJ2aWNlR2V0UmVzcG9uc2USJgoCdm0YASABKAsyGi5maXRzLmFwaS52bS52MS5WTUluc3RhbmNlInQKHVZNU2VydmljZUNyZWF0ZVdpbmRvd3NSZXF1ZXN0Eh0KC2RvbWFpbl91dWlkGAEgASgJQgi6SAVyA7ABARI0CgVkaXNrcxgCIAMoCzIbLmZpdHMuYXBpLnZtLnYxLldpbmRvd3NEaXNrQgi6SAWSAQIIASJuChtWTVNlcnZpY2VDcmVhdGVMaW51eFJlcXVlc3QSGwoJbGRhcF91dWlkGAEgASgJQgi6SAVyA7ABARIyCgVkaXNrcxgCIAMoCzIZLmZpdHMuYXBpLnZtLnYxLkxpbnV4RGlza0IIukgFkgECCAEizAQKFlZNU2VydmljZUNyZWF0ZVJlcXVlc3QSHgoMcHJvamVjdF91dWlkGAEgASgJQgi6SAVyA7ABARIeCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECAUgBiAEBEhkKB29zX3V1aWQYAyABKAlCCLpIBXIDsAEBEhsKCXZsYW5fdXVpZBgEIAEoCUIIukgFcgOwAQESHwoNbG9jYXRpb25fdXVpZBgFIAEoCUIIukgFcgOwAQESHgoMY29udGFjdF91dWlkGAYgASgJQgi6SAVyA7ABARILCgNjcHUYByABKA0SCwoDcmFtGAggASgNEhQKDG9yZGVyX251bWJlchgJIAEoCRIjCgZsYWJlbHMYCiABKAsyEy5maXRzLmFwaS52MS5MYWJlbHMSDgoGYmFja3VwGAsgASgIEjwKDGF2YWlsYWJpbGl0eRgMIAEoDjIcLmZpdHMuYXBpLnZtLnYxLkF2YWlsYWJpbGl0eUIIukgFggECEAESPAoMc2VydmljZWNsYXNzGA0gASgOMhwuZml0cy5hcGkudm0udjEuU2VydmljZUNsYXNzQgi6SAWCAQIQARJACgd3aW5kb3dzGA4gASgLMi0uZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQ3JlYXRlV2luZG93c1JlcXVlc3RIABI8CgVsaW51eBgPIAEoCzIrLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUNyZWF0ZUxpbnV4UmVxdWVzdEgAQg8KBnZtdHlwZRIFukgCCAFCBwoFX25hbWUimwEKCUxpbnV4RGlzaxIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEg0KBWxhYmVsGAIgASgJEhMKC2F1dG9fZXh0ZW5kGAMgASgIEhEKBHNpemUYBCABKARIAYgBARIYCgttb3VudF9wb2ludBgFIAEoCUgCiAEBQgcKBV91dWlkQgcKBV9zaXplQg4KDF9tb3VudF9wb2ludCKdAQoLV2luZG93c0Rpc2sSGwoEdXVpZBgBIAEoCUIIukgFcgOwAQFIAIgBARINCgVsYWJlbBgCIAEoCRITCgthdXRvX2V4dGVuZBgDIAEoCBIRCgRzaXplGAQgASgESAGIAQESGAoLZHJpdmVsZXR0ZXIYBSABKAlIAogBAUIHCgVfdXVpZEIHCgVfc2l6ZUIOCgxfZHJpdmVsZXR0ZXIiGQoXVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2Ui3AIKFlZNU2VydmljZVVwZGF0ZVJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAMgASgJEjQKC3VwZGF0ZV9tZXRhGAQgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEkMKEXBlcmZvcm1hbmNlX2NsYXNzGAUgASgLMiYuZml0cy5hcGkudm0udjEuUGVyZm9ybWFuY2VDbGFzc0NoYW5nZUgAEjsKDXNlcnZpY2VfY2xhc3MYBiABKAsyIi5maXRzLmFwaS52bS52MS5TZXJ2aWNlQ2xhc3NDaGFuZ2VIABIwCgdjb250YWN0GAcgASgLMh0uZml0cy5hcGkudm0udjEuQ29udGFjdENoYW5nZUgAQg8KBmFjdGlvbhIFukgCCAEiRgoWUGVyZm9ybWFuY2VDbGFzc0NoYW5nZRIWCgNjcHUYASABKA1CCbpIBioEGEAoARIUCgNyYW0YAiABKA1CB7pIBCoCIAAiUgoSU2VydmljZUNsYXNzQ2hhbmdlEjwKDHNlcnZpY2VjbGFzcxgBIAEoDjIcLmZpdHMuYXBpLnZtLnYxLlNlcnZpY2VDbGFzc0IIukgFggECEAEiLwoNQ29udGFjdENoYW5nZRIeCgxjb250YWN0X3V1aWQYASABKAlCCLpIBXIDsAEBIhkKF1ZNU2VydmljZVVwZGF0ZVJlc3BvbnNlIkMKFFZNU2VydmljZUxpc3RSZXF1ZXN0EiAKBnRlbmFudBgBIAEoCUILukgIcgbAs66xAgFIAIgBAUIJCgdfdGVuYW50IkAKFVZNU2VydmljZUxpc3RSZXNwb25zZRInCgN2bXMYASADKAsyGi5maXRzLmFwaS52bS52MS5WTUluc3RhbmNlImEKFlZNU2VydmljZURlbGV0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQESFgoEdXVpZBgCIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAMgASgJIhkKF1ZNU2VydmljZURlbGV0ZVJlc3BvbnNlImAKHlZNU2VydmljZVZhbGlkYXRlQ3JlYXRlUmVxdWVzdBI+CgZjcmVhdGUYASABKAsyJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VDcmVhdGVSZXF1ZXN0Qga6SAPIAQEiIQofVk1TZXJ2aWNlVmFsaWRhdGVDcmVhdGVSZXNwb25zZSJkCh9WTVNlcnZpY2VWYWxpZGF0ZUFkZERpc2tSZXF1ZXN0EkEKCGFkZF9kaXNrGAEgASgLMicuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQWRkRGlza1JlcXVlc3RCBrpIA8gBASIiCiBWTVNlcnZpY2VWYWxpZGF0ZUFkZERpc2tSZXNwb25zZSJtCiJWTVNlcnZpY2VWYWxpZGF0ZVVwZGF0ZURpc2tSZXF1ZXN0EkcKC3VwZGF0ZV9kaXNrGAEgASgLMiouZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlVXBkYXRlRGlza1JlcXVlc3RCBrpIA8gBASIlCiNWTVNlcnZpY2VWYWxpZGF0ZVVwZGF0ZURpc2tSZXNwb25zZSIaChhWTVNlcnZpY2VBZGREaXNrUmVzcG9uc2UiHQobVk1TZXJ2aWNlVXBkYXRlRGlza1Jlc3BvbnNlIh0KG1ZNU2VydmljZURlbGV0ZURpc2tSZXNwb25zZSLNAQoXVk1TZXJ2aWNlQWRkRGlza1JlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAMgASgJEioKBWxpbnV4GAQgASgLMhkuZml0cy5hcGkudm0udjEuTGludXhEaXNrSAASLgoHd2luZG93cxgFIAEoCzIbLmZpdHMuYXBpLnZtLnYxLldpbmRvd3NEaXNrSABCDQoEZGlzaxIFukgCCAEiyAEKGlZNU2VydmljZVVwZGF0ZURpc2tSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhsKCWRpc2tfdXVpZBgCIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAQgASgJEhgKC2F1dG9fZXh0ZW5kGAUgASgISACIAQESEQoEc2l6ZRgGIAEoBEgBiAEBQg4KDF9hdXRvX2V4dGVuZEIHCgVfc2l6ZSKCAQoaVk1TZXJ2aWNlRGVsZXRlRGlza1JlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGwoJZGlza191dWlkGAIgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAMgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYBCABKAkiGAoWVk1TZXJ2aWNlQWRkSVBSZXNwb25zZSIZChdWTVNlcnZpY2VNb3ZlSVBSZXNwb25zZSIbChlWTVNlcnZpY2VEZWxldGVJUFJlc3BvbnNlImAKFVZNU2VydmljZUFkZElQUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAIgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYAyABKAkipQEKFlZNU2VydmljZU1vdmVJUFJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESIAoOaW50ZXJmYWNlX3V1aWQYAiABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgEIAEoCRIgCg50YXJnZXRfdm1fdXVpZBgFIAEoCUIIukgFcgOwAQEihQEKGFZNU2VydmljZURlbGV0ZUlQUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIgCg5pbnRlcmZhY2VfdXVpZBgCIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAQgASgJIl4KHVZNU2VydmljZVZhbGlkYXRlQWRkSVBSZXF1ZXN0Ej0KBmFkZF9pcBgBIAEoCzIlLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUFkZElQUmVxdWVzdEIGukgDyAEBIiAKHlZNU2VydmljZVZhbGlkYXRlQWRkSVBSZXNwb25zZSqmAQoMQXZhaWxhYmlsaXR5EiIKGEFWQUlMQUJJTElUWV9VTlNQRUNJRklFRBAAGgSCshkAEhsKD0FWQUlMQUJJTElUWV9WMBABGgaCshkCVjASGwoPQVZBSUxBQklMSVRZX1YxEAIaBoKyGQJWMRIbCg9BVkFJTEFCSUxJVFlfVjIQAxoGgrIZAlYyEhsKD0FWQUlMQUJJTElUWV9WMxAEGgaCshkCVjMqkwEKDFNlcnZpY2VDbGFzcxIjChlTRVJWSUNFX0NMQVNTX1VOU1BFQ0lGSUVEEAAaBIKyGQASHgoRU0VSVklDRV9DTEFTU19TWjEQARoHgrIZA1NaMRIeChFTRVJWSUNFX0NMQVNTX1NaMhACGgeCshkDU1oyEh4KEVNFUlZJQ0VfQ0xBU1NfU1ozEAMaB4KyGQNTWjMykw0KCVZNU2VydmljZRJdCgNHZXQSIy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VHZXRSZXF1ZXN0GiQuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmUKBkNyZWF0ZRImLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUNyZWF0ZVJlcXVlc3QaJy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VDcmVhdGVSZXNwb25zZSIKyvMYAgEC4PMYARJlCgZVcGRhdGUSJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VVcGRhdGVSZXF1ZXN0GicuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESYAoETGlzdBIkLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUxpc3RSZXF1ZXN0GiUuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlTGlzdFJlc3BvbnNlIgvK8xgDAQID4PMYAhJlCgZEZWxldGUSJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VEZWxldGVSZXF1ZXN0GicuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlRGVsZXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESaAoHQWRkRGlzaxInLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZUFkZERpc2tSZXF1ZXN0GiguZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlQWRkRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgBEnEKClVwZGF0ZURpc2sSKi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VVcGRhdGVEaXNrUmVxdWVzdBorLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZVVwZGF0ZURpc2tSZXNwb25zZSIKyvMYAgEC4PMYARJxCgpEZWxldGVEaXNrEiouZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlRGVsZXRlRGlza1JlcXVlc3QaKy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VEZWxldGVEaXNrUmVzcG9uc2UiCsrzGAIBAuDzGAESYgoFQWRkSVASJS5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VBZGRJUFJlcXVlc3QaJi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VBZGRJUFJlc3BvbnNlIgrK8xgCAQLg8xgBEmUKBk1vdmVJUBImLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZU1vdmVJUFJlcXVlc3QaJy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VNb3ZlSVBSZXNwb25zZSIKyvMYAgEC4PMYARJrCghEZWxldGVJUBIoLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZURlbGV0ZUlQUmVxdWVzdBopLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZURlbGV0ZUlQUmVzcG9uc2UiCsrzGAIBAuDzGAESfQoOVmFsaWRhdGVDcmVhdGUSLi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlcXVlc3QaLy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgCEoABCg9WYWxpZGF0ZUFkZERpc2sSLy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VWYWxpZGF0ZUFkZERpc2tSZXF1ZXN0GjAuZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlVmFsaWRhdGVBZGREaXNrUmVzcG9uc2UiCsrzGAIBAuDzGAISiQEKElZhbGlkYXRlVXBkYXRlRGlzaxIyLmZpdHMuYXBpLnZtLnYxLlZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1JlcXVlc3QaMy5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VWYWxpZGF0ZVVwZGF0ZURpc2tSZXNwb25zZSIKyvMYAgEC4PMYAhJ6Cg1WYWxpZGF0ZUFkZElQEi0uZml0cy5hcGkudm0udjEuVk1TZXJ2aWNlVmFsaWRhdGVBZGRJUFJlcXVlc3QaLi5maXRzLmFwaS52bS52MS5WTVNlcnZpY2VWYWxpZGF0ZUFkZElQUmVzcG9uc2UiCsrzGAIBAuDzGAJCpQEKEmNvbS5maXRzLmFwaS52bS52MUIHVm1Qcm90b1ABWitnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92bS92MTt2bXYxogIDRkFWqgIORml0cy5BcGkuVm0uVjHKAg5GaXRzXEFwaVxWbVxWMeICGkZpdHNcQXBpXFZtXFYxXEdQQk1ldGFkYXRh6gIRRml0czo6QXBpOjpWbTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_fits_api_vm_v1_vlan]); - -/** - * Linux-specific VM details. - * - * @generated from message fits.api.vm.v1.LinuxDetails - */ -export type LinuxDetails = Message<"fits.api.vm.v1.LinuxDetails"> & { - /** - * Disks configured on the Linux VM. - * - * @generated from field: repeated fits.api.vm.v1.LinuxDisk disks = 1; - */ - disks: LinuxDisk[]; - - /** - * UUID of the LDAP directory the VM is integrated with. - * - * @generated from field: string ldap_uuid = 2; - */ - ldapUuid: string; - - /** - * Linux-specific FQDN, derived from the name at creation or generated by the backend. - * - * @generated from field: string ldap_fqdn = 3; - */ - ldapFqdn: string; -}; - -/** - * Describes the message fits.api.vm.v1.LinuxDetails. - * Use `create(LinuxDetailsSchema)` to create a new message. - */ -export const LinuxDetailsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 0); - -/** - * Windows-specific VM details. - * - * @generated from message fits.api.vm.v1.WindowsDetails - */ -export type WindowsDetails = Message<"fits.api.vm.v1.WindowsDetails"> & { - /** - * Disks configured on the Windows VM. - * - * @generated from field: repeated fits.api.vm.v1.WindowsDisk disks = 1; - */ - disks: WindowsDisk[]; - - /** - * UUID of the Windows domain the VM has joined. - * - * @generated from field: string domain_uuid = 2; - */ - domainUuid: string; - - /** - * Windows-specific FQDN, derived from the name at creation or generated by the backend. - * - * @generated from field: string domain_fqdn = 3; - */ - domainFqdn: string; -}; - -/** - * Describes the message fits.api.vm.v1.WindowsDetails. - * Use `create(WindowsDetailsSchema)` to create a new message. - */ -export const WindowsDetailsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 1); - -/** - * A network interface of a VM. IPv4 only; IPv6 is not yet supported. - * - * @generated from message fits.api.vm.v1.NetworkInterface - */ -export type NetworkInterface = Message<"fits.api.vm.v1.NetworkInterface"> & { - /** - * UUID of this interface. - * - * @generated from field: string uuid = 1; - */ - uuid: string; - - /** - * IPv4 address assigned to this interface. - * - * @generated from field: string ipaddress = 2; - */ - ipaddress: string; - - /** - * MAC address of this interface. - * - * TODO: add validation - * - * @generated from field: string macaddress = 3; - */ - macaddress: string; -}; - -/** - * Describes the message fits.api.vm.v1.NetworkInterface. - * Use `create(NetworkInterfaceSchema)` to create a new message. - */ -export const NetworkInterfaceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 2); - -/** - * A VM instance as returned by the API. - * - * @generated from message fits.api.vm.v1.VMInstance - */ -export type VMInstance = Message<"fits.api.vm.v1.VMInstance"> & { - /** - * UUID of this VM. - * - * @generated from field: string uuid = 1; - */ - uuid: string; - - /** - * Metadata for this VM. - * TODO: dates are available in the nulink db but not passed through yet. - * - * @generated from field: fits.api.v1.Meta meta = 2; - */ - meta?: Meta | undefined; - - /** - * FQDN of the VM, derived from the name at creation or generated by the backend. - * - * @generated from field: string fqdn = 3; - */ - fqdn: string; - - /** - * Tenant this VM belongs to. - * - * @generated from field: string tenant = 4; - */ - tenant: string; - - /** - * UUID of the project this VM belongs to. - * - * @generated from field: string project_uuid = 5; - */ - projectUuid: string; - - /** - * UUID of the OS image installed on the VM; resolve the title via the OS endpoint. - * - * @generated from field: string os_uuid = 6; - */ - osUuid: string; - - /** - * UUID of the datacenter location. - * TODO: not exposed by the upstream (nulink) VM records yet; always empty. - * - * @generated from field: string location_uuid = 7; - */ - locationUuid: string; - - /** - * TODO: Contact UUID – not yet implemented; open discussion with FCN (#23). - * - * @generated from field: string contact_uuid = 8; - */ - contactUuid: string; - - /** - * Number of CPU cores. - * - * @generated from field: uint32 cpu = 9; - */ - cpu: number; - - /** - * RAM in GB. - * - * @generated from field: uint32 ram = 10; - */ - ram: number; - - /** - * Whether backup is enabled. - * TODO: the upstream (nulink) list/get models do not expose this; always false. - * - * @generated from field: bool backup = 11; - */ - backup: boolean; - - /** - * Status of the ongoing operation. - * - * @generated from field: string status = 12; - */ - status: string; - - /** - * Additional information about the current status. - * - * @generated from field: string status_info = 13; - */ - statusInfo: string; - - /** - * Availability level. - * - * @generated from field: fits.api.vm.v1.Availability availability = 14; - */ - availability: Availability; - - /** - * Service class. - * - * @generated from field: fits.api.vm.v1.ServiceClass serviceclass = 15; - */ - serviceclass: ServiceClass; - - /** - * OS-specific configuration. - * - * @generated from oneof fits.api.vm.v1.VMInstance.details - */ - details: { - /** - * Windows-specific settings (domain + disks). - * - * @generated from field: fits.api.vm.v1.WindowsDetails windows_details = 16; - */ - value: WindowsDetails; - case: "windowsDetails"; - } | { - /** - * Linux-specific settings (LDAP + disks). - * - * @generated from field: fits.api.vm.v1.LinuxDetails linux_details = 17; - */ - value: LinuxDetails; - case: "linuxDetails"; - } | { case: undefined; value?: undefined }; - - /** - * Network interfaces attached to the VM (IPv4 only). - * - * @generated from field: repeated fits.api.vm.v1.NetworkInterface interfaces = 18; - */ - interfaces: NetworkInterface[]; - - /** - * VLAN the VM is attached to. - * TODO: not exposed by the upstream (nulink) VM records yet; always unset. - * - * @generated from field: fits.api.vm.v1.Vlan vlan = 19; - */ - vlan?: Vlan | undefined; - - /** - * Internal reference number provided by the user, e.g. a ticket ID. - * - * @generated from field: string order_number = 20; - */ - orderNumber: string; - - /** - * True if the order was placed by FITS, false if self-service. - * TODO: maybe remove this field entirely. - * - * @generated from field: bool contract = 21; - */ - contract: boolean; -}; - -/** - * Describes the message fits.api.vm.v1.VMInstance. - * Use `create(VMInstanceSchema)` to create a new message. - */ -export const VMInstanceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 3); - -/** - * Request to get a VM by UUID. - * - * @generated from message fits.api.vm.v1.VMServiceGetRequest - */ -export type VMServiceGetRequest = Message<"fits.api.vm.v1.VMServiceGetRequest"> & { - /** - * UUID of the VM. - * - * @generated from field: optional string uuid = 1; - */ - uuid?: string | undefined; - - /** - * Tenant of the VM. - * - * @generated from field: string tenant = 2; - */ - tenant: string; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceGetRequest. - * Use `create(VMServiceGetRequestSchema)` to create a new message. - */ -export const VMServiceGetRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 4); - -/** - * Response containing the requested VM. - * - * @generated from message fits.api.vm.v1.VMServiceGetResponse - */ -export type VMServiceGetResponse = Message<"fits.api.vm.v1.VMServiceGetResponse"> & { - /** - * The VM. - * - * @generated from field: fits.api.vm.v1.VMInstance vm = 1; - */ - vm?: VMInstance | undefined; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceGetResponse. - * Use `create(VMServiceGetResponseSchema)` to create a new message. - */ -export const VMServiceGetResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 5); - -/** - * Windows-specific create request parts. - * - * @generated from message fits.api.vm.v1.VMServiceCreateWindowsRequest - */ -export type VMServiceCreateWindowsRequest = Message<"fits.api.vm.v1.VMServiceCreateWindowsRequest"> & { - /** - * UUID of the Windows domain the VM should join. - * - * @generated from field: string domain_uuid = 1; - */ - domainUuid: string; - - /** - * Disks for the Windows VM, excluding the OS disk. - * - * @generated from field: repeated fits.api.vm.v1.WindowsDisk disks = 2; - */ - disks: WindowsDisk[]; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceCreateWindowsRequest. - * Use `create(VMServiceCreateWindowsRequestSchema)` to create a new message. - */ -export const VMServiceCreateWindowsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 6); - -/** - * Linux-specific create request parts. - * - * @generated from message fits.api.vm.v1.VMServiceCreateLinuxRequest - */ -export type VMServiceCreateLinuxRequest = Message<"fits.api.vm.v1.VMServiceCreateLinuxRequest"> & { - /** - * UUID of the LDAP directory the VM should integrate with. - * - * @generated from field: string ldap_uuid = 1; - */ - ldapUuid: string; - - /** - * Disks for the Linux VM, excluding the OS disk. - * - * @generated from field: repeated fits.api.vm.v1.LinuxDisk disks = 2; - */ - disks: LinuxDisk[]; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceCreateLinuxRequest. - * Use `create(VMServiceCreateLinuxRequestSchema)` to create a new message. - */ -export const VMServiceCreateLinuxRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 7); - -/** - * Request to create a new VM instance. - * TODO: contract, billable and billing_start_date. - * - * @generated from message fits.api.vm.v1.VMServiceCreateRequest - */ -export type VMServiceCreateRequest = Message<"fits.api.vm.v1.VMServiceCreateRequest"> & { - /** - * UUID of the project this VM belongs to. - * - * @generated from field: string project_uuid = 1; - */ - projectUuid: string; - - /** - * Optional name; the FQDN is derived from it. - * - * @generated from field: optional string name = 2; - */ - name?: string | undefined; - - /** - * UUID of the operating system image to install. - * - * @generated from field: string os_uuid = 3; - */ - osUuid: string; - - /** - * UUID of the VLAN network to attach the VM to. - * - * @generated from field: string vlan_uuid = 4; - */ - vlanUuid: string; - - /** - * UUID of the datacenter location; the VM is scheduled into one data center within it. - * - * @generated from field: string location_uuid = 5; - */ - locationUuid: string; - - /** - * TODO: Contact UUID – open discussion with FCN; may become a dedicated /contact endpoint. - * - * @generated from field: string contact_uuid = 6; - */ - contactUuid: string; - - /** - * Number of CPU cores. - * - * @generated from field: uint32 cpu = 7; - */ - cpu: number; - - /** - * RAM in GB. Must be a power of 2. - * - * @generated from field: uint32 ram = 8; - */ - ram: number; - - /** - * Internal reference number provided by the user, e.g. a ticket ID. - * TODO: can this be optional? - * - * @generated from field: string order_number = 9; - */ - orderNumber: string; - - /** - * Optional key-value labels for accounting purposes. - * (e.g. contract number, transaction number, technical key, accounting key). - * - * @generated from field: fits.api.v1.Labels labels = 10; - */ - labels?: Labels | undefined; - - /** - * Whether backup is enabled. - * - * @generated from field: bool backup = 11; - */ - backup: boolean; - - /** - * Availability level. - * - * @generated from field: fits.api.vm.v1.Availability availability = 12; - */ - availability: Availability; - - /** - * Service class; only certain combinations with availability are valid. - * - * @generated from field: fits.api.vm.v1.ServiceClass serviceclass = 13; - */ - serviceclass: ServiceClass; - - /** - * OS type and its configuration. - * - * @generated from oneof fits.api.vm.v1.VMServiceCreateRequest.vmtype - */ - vmtype: { - /** - * Windows-specific settings (domain + disk). - * - * @generated from field: fits.api.vm.v1.VMServiceCreateWindowsRequest windows = 14; - */ - value: VMServiceCreateWindowsRequest; - case: "windows"; - } | { - /** - * Linux-specific settings (LDAP + disk). - * - * @generated from field: fits.api.vm.v1.VMServiceCreateLinuxRequest linux = 15; - */ - value: VMServiceCreateLinuxRequest; - case: "linux"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceCreateRequest. - * Use `create(VMServiceCreateRequestSchema)` to create a new message. - */ -export const VMServiceCreateRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 8); - -/** - * Disk configuration for a Linux VM. - * - * @generated from message fits.api.vm.v1.LinuxDisk - */ -export type LinuxDisk = Message<"fits.api.vm.v1.LinuxDisk"> & { - /** - * UUID of the disk; set for existing disks, unset for new ones. - * - * @generated from field: optional string uuid = 1; - */ - uuid?: string | undefined; - - /** - * Label (name) of the disk. - * - * @generated from field: string label = 2; - */ - label: string; - - /** - * Whether the disk grows automatically when space runs low. - * - * @generated from field: bool auto_extend = 3; - */ - autoExtend: boolean; - - /** - * Size of the disk in GB. - * - * @generated from field: optional uint64 size = 4; - */ - size?: bigint | undefined; - - /** - * Mount point (e.g. "/data"). - * - * @generated from field: optional string mount_point = 5; - */ - mountPoint?: string | undefined; -}; - -/** - * Describes the message fits.api.vm.v1.LinuxDisk. - * Use `create(LinuxDiskSchema)` to create a new message. - */ -export const LinuxDiskSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 9); - -/** - * Disk configuration for a Windows VM. - * - * @generated from message fits.api.vm.v1.WindowsDisk - */ -export type WindowsDisk = Message<"fits.api.vm.v1.WindowsDisk"> & { - /** - * UUID of the disk; set for existing disks, unset for new ones. - * - * @generated from field: optional string uuid = 1; - */ - uuid?: string | undefined; - - /** - * Label (name) of the disk. - * - * @generated from field: string label = 2; - */ - label: string; - - /** - * Whether the disk grows automatically when space runs low. - * - * @generated from field: bool auto_extend = 3; - */ - autoExtend: boolean; - - /** - * Size of the disk in GB. - * - * @generated from field: optional uint64 size = 4; - */ - size?: bigint | undefined; - - /** - * Drive letter (e.g. "D"). - * - * @generated from field: optional string driveletter = 5; - */ - driveletter?: string | undefined; -}; - -/** - * Describes the message fits.api.vm.v1.WindowsDisk. - * Use `create(WindowsDiskSchema)` to create a new message. - */ -export const WindowsDiskSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 10); - -/** - * Response for Create; an empty response means the VM was accepted. - * - * @generated from message fits.api.vm.v1.VMServiceCreateResponse - */ -export type VMServiceCreateResponse = Message<"fits.api.vm.v1.VMServiceCreateResponse"> & { -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceCreateResponse. - * Use `create(VMServiceCreateResponseSchema)` to create a new message. - */ -export const VMServiceCreateResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 11); - -/** - * Request to change a mutable property of an existing VM. - * Exactly one action must be set; each maps onto its own upstream endpoint. - * TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per - * action); combined changes would need - * server-side fan-out without rollback. - * - * @generated from message fits.api.vm.v1.VMServiceUpdateRequest - */ -export type VMServiceUpdateRequest = Message<"fits.api.vm.v1.VMServiceUpdateRequest"> & { - /** - * UUID of the VM to update. - * - * @generated from field: string uuid = 1; - */ - uuid: string; - - /** - * Project the VM belongs to. - * - * @generated from field: string project = 2; - */ - project: string; - - /** - * Order reference for this operation. - * TODO: can this be optional? - * - * @generated from field: string order_number = 3; - */ - orderNumber: string; - - /** - * Timestamp and strategy for this update. - * - * @generated from field: fits.api.v1.UpdateMeta update_meta = 4; - */ - updateMeta?: UpdateMeta | undefined; - - /** - * The change to apply. - * - * @generated from oneof fits.api.vm.v1.VMServiceUpdateRequest.action - */ - action: { - /** - * Change the CPU/RAM performance class. - * - * @generated from field: fits.api.vm.v1.PerformanceClassChange performance_class = 5; - */ - value: PerformanceClassChange; - case: "performanceClass"; - } | { - /** - * Change the service class. - * - * @generated from field: fits.api.vm.v1.ServiceClassChange service_class = 6; - */ - value: ServiceClassChange; - case: "serviceClass"; - } | { - /** - * Change the contact person. - * - * @generated from field: fits.api.vm.v1.ContactChange contact = 7; - */ - value: ContactChange; - case: "contact"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceUpdateRequest. - * Use `create(VMServiceUpdateRequestSchema)` to create a new message. - */ -export const VMServiceUpdateRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 12); - -/** - * PerformanceClassChange is the payload for changing a VM's CPU and RAM. - * - * @generated from message fits.api.vm.v1.PerformanceClassChange - */ -export type PerformanceClassChange = Message<"fits.api.vm.v1.PerformanceClassChange"> & { - /** - * Number of vCPUs (1-64). - * - * @generated from field: uint32 cpu = 1; - */ - cpu: number; - - /** - * RAM size in GB. - * - * @generated from field: uint32 ram = 2; - */ - ram: number; -}; - -/** - * Describes the message fits.api.vm.v1.PerformanceClassChange. - * Use `create(PerformanceClassChangeSchema)` to create a new message. - */ -export const PerformanceClassChangeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 13); - -/** - * ServiceClassChange is the payload for changing a VM's service class. - * - * @generated from message fits.api.vm.v1.ServiceClassChange - */ -export type ServiceClassChange = Message<"fits.api.vm.v1.ServiceClassChange"> & { - /** - * Target service class. - * - * @generated from field: fits.api.vm.v1.ServiceClass serviceclass = 1; - */ - serviceclass: ServiceClass; -}; - -/** - * Describes the message fits.api.vm.v1.ServiceClassChange. - * Use `create(ServiceClassChangeSchema)` to create a new message. - */ -export const ServiceClassChangeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 14); - -/** - * ContactChange is the payload for changing a VM's contact person. - * - * @generated from message fits.api.vm.v1.ContactChange - */ -export type ContactChange = Message<"fits.api.vm.v1.ContactChange"> & { - /** - * UUID of the new contact. - * - * @generated from field: string contact_uuid = 1; - */ - contactUuid: string; -}; - -/** - * Describes the message fits.api.vm.v1.ContactChange. - * Use `create(ContactChangeSchema)` to create a new message. - */ -export const ContactChangeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 15); - -/** - * Response for Update; an empty response means the change was accepted. - * - * @generated from message fits.api.vm.v1.VMServiceUpdateResponse - */ -export type VMServiceUpdateResponse = Message<"fits.api.vm.v1.VMServiceUpdateResponse"> & { -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceUpdateResponse. - * Use `create(VMServiceUpdateResponseSchema)` to create a new message. - */ -export const VMServiceUpdateResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 16); - -/** - * Request to list VMs. - * - * @generated from message fits.api.vm.v1.VMServiceListRequest - */ -export type VMServiceListRequest = Message<"fits.api.vm.v1.VMServiceListRequest"> & { - /** - * Tenant of the VMs. - * - * @generated from field: optional string tenant = 1; - */ - tenant?: string | undefined; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceListRequest. - * Use `create(VMServiceListRequestSchema)` to create a new message. - */ -export const VMServiceListRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 17); - -/** - * Response containing the list of VMs. - * - * @generated from message fits.api.vm.v1.VMServiceListResponse - */ -export type VMServiceListResponse = Message<"fits.api.vm.v1.VMServiceListResponse"> & { - /** - * The VM instances. - * - * @generated from field: repeated fits.api.vm.v1.VMInstance vms = 1; - */ - vms: VMInstance[]; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceListResponse. - * Use `create(VMServiceListResponseSchema)` to create a new message. - */ -export const VMServiceListResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 18); - -/** - * Request to cancel a VM instance. - * - * @generated from message fits.api.vm.v1.VMServiceDeleteRequest - */ -export type VMServiceDeleteRequest = Message<"fits.api.vm.v1.VMServiceDeleteRequest"> & { - /** - * Project the VM belongs to. - * - * @generated from field: string project = 1; - */ - project: string; - - /** - * UUID of the VM to delete. - * - * @generated from field: string uuid = 2; - */ - uuid: string; - - /** - * Order reference for this operation. - * TODO: can this be optional? - * - * @generated from field: string order_number = 3; - */ - orderNumber: string; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceDeleteRequest. - * Use `create(VMServiceDeleteRequestSchema)` to create a new message. - */ -export const VMServiceDeleteRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 19); - -/** - * Response for Delete; an empty response means the cancellation was accepted. - * - * @generated from message fits.api.vm.v1.VMServiceDeleteResponse - */ -export type VMServiceDeleteResponse = Message<"fits.api.vm.v1.VMServiceDeleteResponse"> & { -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceDeleteResponse. - * Use `create(VMServiceDeleteResponseSchema)` to create a new message. - */ -export const VMServiceDeleteResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 20); - -/** - * Request to validate a VM create without creating anything. - * - * @generated from message fits.api.vm.v1.VMServiceValidateCreateRequest - */ -export type VMServiceValidateCreateRequest = Message<"fits.api.vm.v1.VMServiceValidateCreateRequest"> & { - /** - * The create request to validate. - * - * @generated from field: fits.api.vm.v1.VMServiceCreateRequest create = 1; - */ - create?: VMServiceCreateRequest | undefined; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceValidateCreateRequest. - * Use `create(VMServiceValidateCreateRequestSchema)` to create a new message. - */ -export const VMServiceValidateCreateRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 21); - -/** - * Response for ValidateCreate; violations are returned as an InvalidArgument error. - * - * @generated from message fits.api.vm.v1.VMServiceValidateCreateResponse - */ -export type VMServiceValidateCreateResponse = Message<"fits.api.vm.v1.VMServiceValidateCreateResponse"> & { -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceValidateCreateResponse. - * Use `create(VMServiceValidateCreateResponseSchema)` to create a new message. - */ -export const VMServiceValidateCreateResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 22); - -/** - * Request to validate an AddDisk without ordering anything. - * - * @generated from message fits.api.vm.v1.VMServiceValidateAddDiskRequest - */ -export type VMServiceValidateAddDiskRequest = Message<"fits.api.vm.v1.VMServiceValidateAddDiskRequest"> & { - /** - * The add disk request to validate. - * - * @generated from field: fits.api.vm.v1.VMServiceAddDiskRequest add_disk = 1; - */ - addDisk?: VMServiceAddDiskRequest | undefined; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceValidateAddDiskRequest. - * Use `create(VMServiceValidateAddDiskRequestSchema)` to create a new message. - */ -export const VMServiceValidateAddDiskRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 23); - -/** - * Response for ValidateAddDisk; violations are returned as an InvalidArgument error. - * - * @generated from message fits.api.vm.v1.VMServiceValidateAddDiskResponse - */ -export type VMServiceValidateAddDiskResponse = Message<"fits.api.vm.v1.VMServiceValidateAddDiskResponse"> & { -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceValidateAddDiskResponse. - * Use `create(VMServiceValidateAddDiskResponseSchema)` to create a new message. - */ -export const VMServiceValidateAddDiskResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 24); - -/** - * Request to validate an UpdateDisk without changing anything. - * - * @generated from message fits.api.vm.v1.VMServiceValidateUpdateDiskRequest - */ -export type VMServiceValidateUpdateDiskRequest = Message<"fits.api.vm.v1.VMServiceValidateUpdateDiskRequest"> & { - /** - * The update disk request to validate. - * - * @generated from field: fits.api.vm.v1.VMServiceUpdateDiskRequest update_disk = 1; - */ - updateDisk?: VMServiceUpdateDiskRequest | undefined; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceValidateUpdateDiskRequest. - * Use `create(VMServiceValidateUpdateDiskRequestSchema)` to create a new message. - */ -export const VMServiceValidateUpdateDiskRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 25); - -/** - * Response for ValidateUpdateDisk; violations are returned as an InvalidArgument error. - * - * @generated from message fits.api.vm.v1.VMServiceValidateUpdateDiskResponse - */ -export type VMServiceValidateUpdateDiskResponse = Message<"fits.api.vm.v1.VMServiceValidateUpdateDiskResponse"> & { -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceValidateUpdateDiskResponse. - * Use `create(VMServiceValidateUpdateDiskResponseSchema)` to create a new message. - */ -export const VMServiceValidateUpdateDiskResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 26); - -/** - * Response for AddDisk. - * - * @generated from message fits.api.vm.v1.VMServiceAddDiskResponse - */ -export type VMServiceAddDiskResponse = Message<"fits.api.vm.v1.VMServiceAddDiskResponse"> & { -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceAddDiskResponse. - * Use `create(VMServiceAddDiskResponseSchema)` to create a new message. - */ -export const VMServiceAddDiskResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 27); - -/** - * Response for UpdateDisk. - * - * @generated from message fits.api.vm.v1.VMServiceUpdateDiskResponse - */ -export type VMServiceUpdateDiskResponse = Message<"fits.api.vm.v1.VMServiceUpdateDiskResponse"> & { -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceUpdateDiskResponse. - * Use `create(VMServiceUpdateDiskResponseSchema)` to create a new message. - */ -export const VMServiceUpdateDiskResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 28); - -/** - * Response for DeleteDisk. - * - * @generated from message fits.api.vm.v1.VMServiceDeleteDiskResponse - */ -export type VMServiceDeleteDiskResponse = Message<"fits.api.vm.v1.VMServiceDeleteDiskResponse"> & { -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceDeleteDiskResponse. - * Use `create(VMServiceDeleteDiskResponseSchema)` to create a new message. - */ -export const VMServiceDeleteDiskResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 29); - -/** - * Request to order an additional data disk for a VM. - * - * @generated from message fits.api.vm.v1.VMServiceAddDiskRequest - */ -export type VMServiceAddDiskRequest = Message<"fits.api.vm.v1.VMServiceAddDiskRequest"> & { - /** - * UUID of the VM to attach the disk to. - * - * @generated from field: string uuid = 1; - */ - uuid: string; - - /** - * Project the VM belongs to. - * - * @generated from field: string project = 2; - */ - project: string; - - /** - * Order reference for this operation. - * TODO: can this be optional? - * - * @generated from field: string order_number = 3; - */ - orderNumber: string; - - /** - * OS-specific disk specification; must match the VM's OS type. - * - * @generated from oneof fits.api.vm.v1.VMServiceAddDiskRequest.disk - */ - disk: { - /** - * Linux data disk. - * - * @generated from field: fits.api.vm.v1.LinuxDisk linux = 4; - */ - value: LinuxDisk; - case: "linux"; - } | { - /** - * Windows data disk. - * - * @generated from field: fits.api.vm.v1.WindowsDisk windows = 5; - */ - value: WindowsDisk; - case: "windows"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceAddDiskRequest. - * Use `create(VMServiceAddDiskRequestSchema)` to create a new message. - */ -export const VMServiceAddDiskRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 30); - -/** - * Request to change an existing data disk; only size and auto-extend are mutable. - * - * @generated from message fits.api.vm.v1.VMServiceUpdateDiskRequest - */ -export type VMServiceUpdateDiskRequest = Message<"fits.api.vm.v1.VMServiceUpdateDiskRequest"> & { - /** - * UUID of the VM the disk belongs to. - * - * @generated from field: string uuid = 1; - */ - uuid: string; - - /** - * UUID of the disk to change. - * - * @generated from field: string disk_uuid = 2; - */ - diskUuid: string; - - /** - * Project the VM belongs to. - * - * @generated from field: string project = 3; - */ - project: string; - - /** - * Order reference for this operation. - * TODO: can this be optional? - * - * @generated from field: string order_number = 4; - */ - orderNumber: string; - - /** - * New auto-extend behavior; unset keeps the current value. - * - * @generated from field: optional bool auto_extend = 5; - */ - autoExtend?: boolean | undefined; - - /** - * New size of the disk in GB; unset keeps the current value. - * - * @generated from field: optional uint64 size = 6; - */ - size?: bigint | undefined; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceUpdateDiskRequest. - * Use `create(VMServiceUpdateDiskRequestSchema)` to create a new message. - */ -export const VMServiceUpdateDiskRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 31); - -/** - * Request to cancel a data disk. - * - * @generated from message fits.api.vm.v1.VMServiceDeleteDiskRequest - */ -export type VMServiceDeleteDiskRequest = Message<"fits.api.vm.v1.VMServiceDeleteDiskRequest"> & { - /** - * UUID of the VM the disk belongs to. - * - * @generated from field: string uuid = 1; - */ - uuid: string; - - /** - * UUID of the disk to cancel. - * - * @generated from field: string disk_uuid = 2; - */ - diskUuid: string; - - /** - * Project the VM belongs to. - * - * @generated from field: string project = 3; - */ - project: string; - - /** - * Order reference for this operation. - * TODO: can this be optional? - * - * @generated from field: string order_number = 4; - */ - orderNumber: string; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceDeleteDiskRequest. - * Use `create(VMServiceDeleteDiskRequestSchema)` to create a new message. - */ -export const VMServiceDeleteDiskRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 32); - -/** - * Response for AddIP. - * - * @generated from message fits.api.vm.v1.VMServiceAddIPResponse - */ -export type VMServiceAddIPResponse = Message<"fits.api.vm.v1.VMServiceAddIPResponse"> & { -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceAddIPResponse. - * Use `create(VMServiceAddIPResponseSchema)` to create a new message. - */ -export const VMServiceAddIPResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 33); - -/** - * Response for MoveIP. - * - * @generated from message fits.api.vm.v1.VMServiceMoveIPResponse - */ -export type VMServiceMoveIPResponse = Message<"fits.api.vm.v1.VMServiceMoveIPResponse"> & { -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceMoveIPResponse. - * Use `create(VMServiceMoveIPResponseSchema)` to create a new message. - */ -export const VMServiceMoveIPResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 34); - -/** - * Response for DeleteIP. - * - * @generated from message fits.api.vm.v1.VMServiceDeleteIPResponse - */ -export type VMServiceDeleteIPResponse = Message<"fits.api.vm.v1.VMServiceDeleteIPResponse"> & { -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceDeleteIPResponse. - * Use `create(VMServiceDeleteIPResponseSchema)` to create a new message. - */ -export const VMServiceDeleteIPResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 35); - -/** - * Request to order an additional IP address for a VM. - * - * @generated from message fits.api.vm.v1.VMServiceAddIPRequest - */ -export type VMServiceAddIPRequest = Message<"fits.api.vm.v1.VMServiceAddIPRequest"> & { - /** - * UUID of the VM to attach the IP to. - * - * @generated from field: string uuid = 1; - */ - uuid: string; - - /** - * Project the VM belongs to. - * - * @generated from field: string project = 2; - */ - project: string; - - /** - * Order reference for this operation. - * TODO: can this be optional? - * - * @generated from field: string order_number = 3; - */ - orderNumber: string; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceAddIPRequest. - * Use `create(VMServiceAddIPRequestSchema)` to create a new message. - */ -export const VMServiceAddIPRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 36); - -/** - * Request to move an IP address from one VM to another. - * - * @generated from message fits.api.vm.v1.VMServiceMoveIPRequest - */ -export type VMServiceMoveIPRequest = Message<"fits.api.vm.v1.VMServiceMoveIPRequest"> & { - /** - * UUID of the VM the IP currently belongs to. - * - * @generated from field: string uuid = 1; - */ - uuid: string; - - /** - * UUID of the network interface holding the IP. - * - * @generated from field: string interface_uuid = 2; - */ - interfaceUuid: string; - - /** - * Project the VM belongs to. - * - * @generated from field: string project = 3; - */ - project: string; - - /** - * Order reference for this operation. - * TODO: can this be optional? - * - * @generated from field: string order_number = 4; - */ - orderNumber: string; - - /** - * UUID of the VM to move the IP to. - * - * @generated from field: string target_vm_uuid = 5; - */ - targetVmUuid: string; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceMoveIPRequest. - * Use `create(VMServiceMoveIPRequestSchema)` to create a new message. - */ -export const VMServiceMoveIPRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 37); - -/** - * Request to delete an IP address from a VM. - * - * @generated from message fits.api.vm.v1.VMServiceDeleteIPRequest - */ -export type VMServiceDeleteIPRequest = Message<"fits.api.vm.v1.VMServiceDeleteIPRequest"> & { - /** - * UUID of the VM the IP belongs to. - * - * @generated from field: string uuid = 1; - */ - uuid: string; - - /** - * UUID of the network interface holding the IP. - * - * @generated from field: string interface_uuid = 2; - */ - interfaceUuid: string; - - /** - * Project the VM belongs to. - * - * @generated from field: string project = 3; - */ - project: string; - - /** - * Order reference for this operation. - * TODO: can this be optional? - * - * @generated from field: string order_number = 4; - */ - orderNumber: string; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceDeleteIPRequest. - * Use `create(VMServiceDeleteIPRequestSchema)` to create a new message. - */ -export const VMServiceDeleteIPRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 38); - -/** - * Request to validate an AddIP without ordering anything. - * - * @generated from message fits.api.vm.v1.VMServiceValidateAddIPRequest - */ -export type VMServiceValidateAddIPRequest = Message<"fits.api.vm.v1.VMServiceValidateAddIPRequest"> & { - /** - * The add IP request to validate. - * - * @generated from field: fits.api.vm.v1.VMServiceAddIPRequest add_ip = 1; - */ - addIp?: VMServiceAddIPRequest | undefined; -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceValidateAddIPRequest. - * Use `create(VMServiceValidateAddIPRequestSchema)` to create a new message. - */ -export const VMServiceValidateAddIPRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 39); - -/** - * Response for ValidateAddIP; violations are returned as an InvalidArgument error. - * - * @generated from message fits.api.vm.v1.VMServiceValidateAddIPResponse - */ -export type VMServiceValidateAddIPResponse = Message<"fits.api.vm.v1.VMServiceValidateAddIPResponse"> & { -}; - -/** - * Describes the message fits.api.vm.v1.VMServiceValidateAddIPResponse. - * Use `create(VMServiceValidateAddIPResponseSchema)` to create a new message. - */ -export const VMServiceValidateAddIPResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_vm_v1_vm, 40); - -/** - * Availability specifies the availability level of a VM; higher value = higher availability. - * - * @generated from enum fits.api.vm.v1.Availability - */ -export enum Availability { - /** - * AVAILABILITY_UNSPECIFIED is not specified. - * - * @generated from enum value: AVAILABILITY_UNSPECIFIED = 0; - */ - UNSPECIFIED = 0, - - /** - * AVAILABILITY_V0 is availability level V0. - * - * @generated from enum value: AVAILABILITY_V0 = 1; - */ - V0 = 1, - - /** - * AVAILABILITY_V1 is availability level V1. - * - * @generated from enum value: AVAILABILITY_V1 = 2; - */ - V1 = 2, - - /** - * AVAILABILITY_V2 is availability level V2. - * - * @generated from enum value: AVAILABILITY_V2 = 3; - */ - V2 = 3, - - /** - * AVAILABILITY_V3 is availability level V3. - * - * @generated from enum value: AVAILABILITY_V3 = 4; - */ - V3 = 4, -} - -/** - * Describes the enum fits.api.vm.v1.Availability. - */ -export const AvailabilitySchema: GenEnum = /*@__PURE__*/ - enumDesc(file_fits_api_vm_v1_vm, 0); - -/** - * ServiceClass specifies the service tier of a VM; higher value = higher tier. - * Only certain combinations with Availability are valid. - * - * @generated from enum fits.api.vm.v1.ServiceClass - */ -export enum ServiceClass { - /** - * SERVICE_CLASS_UNSPECIFIED is not specified. - * - * @generated from enum value: SERVICE_CLASS_UNSPECIFIED = 0; - */ - UNSPECIFIED = 0, - - /** - * SERVICE_CLASS_SZ1 is service class SZ1. - * - * @generated from enum value: SERVICE_CLASS_SZ1 = 1; - */ - SZ1 = 1, - - /** - * SERVICE_CLASS_SZ2 is service class SZ2. - * - * @generated from enum value: SERVICE_CLASS_SZ2 = 2; - */ - SZ2 = 2, - - /** - * SERVICE_CLASS_SZ3 is service class SZ3. - * - * @generated from enum value: SERVICE_CLASS_SZ3 = 3; - */ - SZ3 = 3, -} - -/** - * Describes the enum fits.api.vm.v1.ServiceClass. - */ -export const ServiceClassSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_fits_api_vm_v1_vm, 1); - -/** - * VMService provides VM CRUD operations. - * - * @generated from service fits.api.vm.v1.VMService - */ -export const VMService: GenService<{ - /** - * Returns the VM with the specified UUID. - * - * @generated from rpc fits.api.vm.v1.VMService.Get - */ - get: { - methodKind: "unary"; - input: typeof VMServiceGetRequestSchema; - output: typeof VMServiceGetResponseSchema; - }, - /** - * Creates a new VM. - * - * @generated from rpc fits.api.vm.v1.VMService.Create - */ - create: { - methodKind: "unary"; - input: typeof VMServiceCreateRequestSchema; - output: typeof VMServiceCreateResponseSchema; - }, - /** - * Updates a VM. - * - * @generated from rpc fits.api.vm.v1.VMService.Update - */ - update: { - methodKind: "unary"; - input: typeof VMServiceUpdateRequestSchema; - output: typeof VMServiceUpdateResponseSchema; - }, - /** - * Returns the list of all VMs. - * - * @generated from rpc fits.api.vm.v1.VMService.List - */ - list: { - methodKind: "unary"; - input: typeof VMServiceListRequestSchema; - output: typeof VMServiceListResponseSchema; - }, - /** - * Deletes a VM. - * - * @generated from rpc fits.api.vm.v1.VMService.Delete - */ - delete: { - methodKind: "unary"; - input: typeof VMServiceDeleteRequestSchema; - output: typeof VMServiceDeleteResponseSchema; - }, - /** - * Orders an additional data disk for a VM. - * - * @generated from rpc fits.api.vm.v1.VMService.AddDisk - */ - addDisk: { - methodKind: "unary"; - input: typeof VMServiceAddDiskRequestSchema; - output: typeof VMServiceAddDiskResponseSchema; - }, - /** - * Changes the size or auto-extend behavior of an existing data disk. - * - * @generated from rpc fits.api.vm.v1.VMService.UpdateDisk - */ - updateDisk: { - methodKind: "unary"; - input: typeof VMServiceUpdateDiskRequestSchema; - output: typeof VMServiceUpdateDiskResponseSchema; - }, - /** - * Cancels a data disk. - * - * @generated from rpc fits.api.vm.v1.VMService.DeleteDisk - */ - deleteDisk: { - methodKind: "unary"; - input: typeof VMServiceDeleteDiskRequestSchema; - output: typeof VMServiceDeleteDiskResponseSchema; - }, - /** - * Orders an additional IP address for a VM. - * - * @generated from rpc fits.api.vm.v1.VMService.AddIP - */ - addIP: { - methodKind: "unary"; - input: typeof VMServiceAddIPRequestSchema; - output: typeof VMServiceAddIPResponseSchema; - }, - /** - * Moves an IP address from one VM to another. - * - * @generated from rpc fits.api.vm.v1.VMService.MoveIP - */ - moveIP: { - methodKind: "unary"; - input: typeof VMServiceMoveIPRequestSchema; - output: typeof VMServiceMoveIPResponseSchema; - }, - /** - * Deletes an IP address from a VM. - * - * @generated from rpc fits.api.vm.v1.VMService.DeleteIP - */ - deleteIP: { - methodKind: "unary"; - input: typeof VMServiceDeleteIPRequestSchema; - output: typeof VMServiceDeleteIPResponseSchema; - }, - /** - * Validates a VM create request without creating anything. Intended for - * form pre-checks; the create endpoint validates again before executing. - * - * @generated from rpc fits.api.vm.v1.VMService.ValidateCreate - */ - validateCreate: { - methodKind: "unary"; - input: typeof VMServiceValidateCreateRequestSchema; - output: typeof VMServiceValidateCreateResponseSchema; - }, - /** - * Validates an AddDisk request without ordering anything. - * - * @generated from rpc fits.api.vm.v1.VMService.ValidateAddDisk - */ - validateAddDisk: { - methodKind: "unary"; - input: typeof VMServiceValidateAddDiskRequestSchema; - output: typeof VMServiceValidateAddDiskResponseSchema; - }, - /** - * Validates an UpdateDisk request without changing anything. - * - * @generated from rpc fits.api.vm.v1.VMService.ValidateUpdateDisk - */ - validateUpdateDisk: { - methodKind: "unary"; - input: typeof VMServiceValidateUpdateDiskRequestSchema; - output: typeof VMServiceValidateUpdateDiskResponseSchema; - }, - /** - * Validates an AddIP request without ordering anything. - * - * @generated from rpc fits.api.vm.v1.VMService.ValidateAddIP - */ - validateAddIP: { - methodKind: "unary"; - input: typeof VMServiceValidateAddIPRequestSchema; - output: typeof VMServiceValidateAddIPResponseSchema; - }, -}> = /*@__PURE__*/ - serviceDesc(file_fits_api_vm_v1_vm, 0); - diff --git a/proto/fits/api/vm/v1/location.proto b/proto/fits/api/mvm/v1/location.proto similarity index 89% rename from proto/fits/api/vm/v1/location.proto rename to proto/fits/api/mvm/v1/location.proto index 4eb9e37..b7726ba 100644 --- a/proto/fits/api/vm/v1/location.proto +++ b/proto/fits/api/mvm/v1/location.proto @@ -1,12 +1,12 @@ syntax = "proto3"; -package fits.api.vm.v1; +package fits.api.mvm.v1; import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; -// LocationService lists datacenter locations available for VM instances, scoped per tenant. +// LocationService lists datacenter locations available for managed VM (MVM) instances, scoped per tenant. service LocationService { // Returns a list of all datacenter locations available for a tenant. rpc List(LocationServiceListRequest) returns (LocationServiceListResponse) { @@ -17,7 +17,7 @@ service LocationService { } } -// Location is the definition of an available datacenter location for VM instances +// Location is the definition of an available datacenter location for MVM instances. message Location { // Uuid of this location string uuid = 1 [(buf.validate.field).string.uuid = true]; diff --git a/proto/fits/api/vm/v1/vm.proto b/proto/fits/api/mvm/v1/mvm.proto similarity index 55% rename from proto/fits/api/vm/v1/vm.proto rename to proto/fits/api/mvm/v1/mvm.proto index fdf34ee..846f69f 100644 --- a/proto/fits/api/vm/v1/vm.proto +++ b/proto/fits/api/mvm/v1/mvm.proto @@ -1,110 +1,112 @@ syntax = "proto3"; -package fits.api.vm.v1; +package fits.api.mvm.v1; import "buf/validate/validate.proto"; +import "fits/api/mvm/v1/vlan.proto"; import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; -import "fits/api/vm/v1/vlan.proto"; -// VMService provides VM CRUD operations. -service VMService { - // Returns the VM with the specified UUID. - rpc Get(VMServiceGetRequest) returns (VMServiceGetResponse) { +// MVMService provides managed VM (MVM) operations. +service MVMService { + // Returns the MVM with the specified UUID. + rpc Get(MVMServiceGetRequest) returns (MVMServiceGetResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; option (fits.api.v1.auditing) = AUDITING_EXCLUDED; } - // Creates a new VM. - rpc Create(VMServiceCreateRequest) returns (VMServiceCreateResponse) { + // Creates a new MVM. + rpc Create(MVMServiceCreateRequest) returns (MVMServiceCreateResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_INCLUDED; } - // Updates a VM. - rpc Update(VMServiceUpdateRequest) returns (VMServiceUpdateResponse) { + // Updates a MVM. + rpc Update(MVMServiceUpdateRequest) returns (MVMServiceUpdateResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_INCLUDED; } - // Returns the list of all VMs. - rpc List(VMServiceListRequest) returns (VMServiceListResponse) { + // Returns the list of all MVMs. + rpc List(MVMServiceListRequest) returns (MVMServiceListResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; option (fits.api.v1.auditing) = AUDITING_EXCLUDED; } - // Deletes a VM. - rpc Delete(VMServiceDeleteRequest) returns (VMServiceDeleteResponse) { + // Deletes a MVM. + rpc Delete(MVMServiceDeleteRequest) returns (MVMServiceDeleteResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_INCLUDED; } - // Orders an additional data disk for a VM. - rpc AddDisk(VMServiceAddDiskRequest) returns (VMServiceAddDiskResponse) { + // Orders an additional data disk for a MVM. System disks are ordered at + // MVM creation and cannot be added later. + rpc AddDisk(MVMServiceAddDiskRequest) returns (MVMServiceAddDiskResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_INCLUDED; } - // Changes the size or auto-extend behavior of an existing data disk. - rpc UpdateDisk(VMServiceUpdateDiskRequest) returns (VMServiceUpdateDiskResponse) { + // Changes the size or auto-extend behavior of an existing disk; see + // DiskType for which operations apply per disk kind. + rpc UpdateDisk(MVMServiceUpdateDiskRequest) returns (MVMServiceUpdateDiskResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_INCLUDED; } - // Cancels a data disk. - rpc DeleteDisk(VMServiceDeleteDiskRequest) returns (VMServiceDeleteDiskResponse) { + // Cancels a data disk. OS and system disks cannot be deleted. + rpc DeleteDisk(MVMServiceDeleteDiskRequest) returns (MVMServiceDeleteDiskResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_INCLUDED; } - // Orders an additional IP address for a VM. - rpc AddIP(VMServiceAddIPRequest) returns (VMServiceAddIPResponse) { + // Orders an additional network interface for a MVM. + rpc AddNetworkInterface(MVMServiceAddNetworkInterfaceRequest) returns (MVMServiceAddNetworkInterfaceResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_INCLUDED; } - // Moves an IP address from one VM to another. - rpc MoveIP(VMServiceMoveIPRequest) returns (VMServiceMoveIPResponse) { + // Moves a network interface from one MVM to another. + rpc MoveNetworkInterface(MVMServiceMoveNetworkInterfaceRequest) returns (MVMServiceMoveNetworkInterfaceResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_INCLUDED; } - // Deletes an IP address from a VM. - rpc DeleteIP(VMServiceDeleteIPRequest) returns (VMServiceDeleteIPResponse) { + // Deletes a network interface from a MVM. + rpc DeleteNetworkInterface(MVMServiceDeleteNetworkInterfaceRequest) returns (MVMServiceDeleteNetworkInterfaceResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_INCLUDED; } - // Validates a VM create request without creating anything. Intended for + // Validates a MVM create request without creating anything. Intended for // form pre-checks; the create endpoint validates again before executing. - rpc ValidateCreate(VMServiceValidateCreateRequest) returns (VMServiceValidateCreateResponse) { + rpc ValidateCreate(MVMServiceValidateCreateRequest) returns (MVMServiceValidateCreateResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_EXCLUDED; } // Validates an AddDisk request without ordering anything. - rpc ValidateAddDisk(VMServiceValidateAddDiskRequest) returns (VMServiceValidateAddDiskResponse) { + rpc ValidateAddDisk(MVMServiceValidateAddDiskRequest) returns (MVMServiceValidateAddDiskResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_EXCLUDED; } // Validates an UpdateDisk request without changing anything. - rpc ValidateUpdateDisk(VMServiceValidateUpdateDiskRequest) returns (VMServiceValidateUpdateDiskResponse) { + rpc ValidateUpdateDisk(MVMServiceValidateUpdateDiskRequest) returns (MVMServiceValidateUpdateDiskResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_EXCLUDED; } - // Validates an AddIP request without ordering anything. - rpc ValidateAddIP(VMServiceValidateAddIPRequest) returns (VMServiceValidateAddIPResponse) { + // Validates an AddNetworkInterface request without ordering anything. + rpc ValidateAddNetworkInterface(MVMServiceValidateAddNetworkInterfaceRequest) returns (MVMServiceValidateAddNetworkInterfaceResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_EXCLUDED; } } -// Availability specifies the availability level of a VM; higher value = higher availability. +// Availability specifies the availability level of a MVM; higher value = higher availability. enum Availability { // AVAILABILITY_UNSPECIFIED is not specified. AVAILABILITY_UNSPECIFIED = 0 [(fits.api.v1.enum_string_value) = ""]; @@ -118,7 +120,7 @@ enum Availability { AVAILABILITY_V3 = 4 [(fits.api.v1.enum_string_value) = "V3"]; } -// ServiceClass specifies the service tier of a VM; higher value = higher tier. +// ServiceClass specifies the service tier of a MVM; higher value = higher tier. // Only certain combinations with Availability are valid. enum ServiceClass { // SERVICE_CLASS_UNSPECIFIED is not specified. @@ -131,27 +133,65 @@ enum ServiceClass { SERVICE_CLASS_SZ3 = 3 [(fits.api.v1.enum_string_value) = "SZ3"]; } -// Linux-specific VM details. +// DiskType classifies a MVM disk by its lifecycle rules. +// The upstream (nulink) API returns every disk of a MVM, including the +// backend-provisioned OS disk, so that oversized OS disks stay billable. +// +// Lifecycle per kind: +// - OS: provisioned by the backend and never part of create/add +// requests; resizable via UpdateDisk, never deletable. +// - SYSTEM: exactly one per MVM (drive letter F on Windows, mount point +// /appdata on Linux), whose letter/mount point is fixed; must be +// included in the create request; resizable via UpdateDisk, never +// deletable. +// - DATA: fully controllable (letter/mount point, size, auto-extend) +// and deletable; may be included at creation or added later via +// AddDisk. +// +// Whether auto-extend is supported for OS and SYSTEM disks is not yet +// known; only DATA disks are documented as supporting it. +// +// These rules are enforced by the upstream (nulink) API at creation and +// edit time (e.g. duplicate drive letters, deleting a system disk); +// fco-api does not re-validate them locally and surfaces upstream +// violations as InvalidArgument errors. Use the Validate* RPCs to +// pre-check a request against the upstream rules. +enum DiskType { + // DISK_TYPE_UNSPECIFIED is not specified. + DISK_TYPE_UNSPECIFIED = 0 [(fits.api.v1.enum_string_value) = ""]; + // DISK_TYPE_OS is the operating system disk; provisioned by the backend, + // resizable, never deletable. + DISK_TYPE_OS = 1 [(fits.api.v1.enum_string_value) = "os"]; + // DISK_TYPE_SYSTEM is the additional system disk (volume F on Windows, + // /appdata on Linux); the letter/mount point is fixed, the size is + // resizable, never deletable. + DISK_TYPE_SYSTEM = 2 [(fits.api.v1.enum_string_value) = "system"]; + // DISK_TYPE_DATA is a user-managed data disk; fully controllable and + // deletable. + DISK_TYPE_DATA = 3 [(fits.api.v1.enum_string_value) = "data"]; +} + +// Linux-specific MVM details. message LinuxDetails { - // Disks configured on the Linux VM. + // Disks configured on the Linux MVM. repeated LinuxDisk disks = 1; - // UUID of the LDAP directory the VM is integrated with. + // UUID of the LDAP directory the MVM is integrated with. string ldap_uuid = 2 [(buf.validate.field).string.uuid = true]; // Linux-specific FQDN, derived from the name at creation or generated by the backend. string ldap_fqdn = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } -// Windows-specific VM details. +// Windows-specific MVM details. message WindowsDetails { - // Disks configured on the Windows VM. + // Disks configured on the Windows MVM. repeated WindowsDisk disks = 1; - // UUID of the Windows domain the VM has joined. + // UUID of the Windows domain the MVM has joined. string domain_uuid = 2 [(buf.validate.field).string.uuid = true]; // Windows-specific FQDN, derived from the name at creation or generated by the backend. string domain_fqdn = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } -// A network interface of a VM. IPv4 only; IPv6 is not yet supported. +// A network interface of a MVM. IPv4 only; IPv6 is not yet supported. message NetworkInterface { // UUID of this interface. string uuid = 1 [(buf.validate.field).string.uuid = true]; @@ -161,23 +201,22 @@ message NetworkInterface { string macaddress = 3; // TODO: add validation } -// A VM instance as returned by the API. -message VMInstance { - // UUID of this VM. +// A managed VM (MVM) instance as returned by the API. +message MVMInstance { + // UUID of this MVM. string uuid = 1 [(buf.validate.field).string.uuid = true]; - // Metadata for this VM. + // Metadata for this MVM. // TODO: dates are available in the nulink db but not passed through yet. fits.api.v1.Meta meta = 2; - // FQDN of the VM, derived from the name at creation or generated by the backend. + // FQDN of the MVM, derived from the name at creation or generated by the backend. string fqdn = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; - // Tenant this VM belongs to. + // Tenant this MVM belongs to. string tenant = 4 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; - // UUID of the project this VM belongs to. + // UUID of the project this MVM belongs to. string project_uuid = 5 [(buf.validate.field).string.uuid = true]; - // UUID of the OS image installed on the VM; resolve the title via the OS endpoint. + // UUID of the OS image installed on the MVM; resolve the title via the OS endpoint. string os_uuid = 6 [(buf.validate.field).string.uuid = true]; // UUID of the datacenter location. - // TODO: not exposed by the upstream (nulink) VM records yet; always empty. string location_uuid = 7 [(buf.validate.field).string.uuid = true]; // TODO: Contact UUID – not yet implemented; open discussion with FCN (#23). string contact_uuid = 8 [(buf.validate.field).string.uuid = true]; @@ -189,6 +228,8 @@ message VMInstance { // TODO: the upstream (nulink) list/get models do not expose this; always false. bool backup = 11; // Status of the ongoing operation. + // TODO: can we have an ENUM here? Active, Are deleted ones there? Are stopped ones accounted? + // Would have to be part of openapi spec, otherwise breaking changes couldn't be detected string status = 12; // Additional information about the current status. string status_info = 13; @@ -204,11 +245,11 @@ message VMInstance { // Linux-specific settings (LDAP + disks). LinuxDetails linux_details = 17; } - // Network interfaces attached to the VM (IPv4 only). + // Network interfaces attached to the MVM (IPv4 only). repeated NetworkInterface interfaces = 18; - // VLAN the VM is attached to. - // TODO: not exposed by the upstream (nulink) VM records yet; always unset. - Vlan vlan = 19; + // VLAN the MVM is attached to. + // TODO: not exposed by the upstream (nulink) MVM records yet; always unset. + VLAN vlan = 19; // Internal reference number provided by the user, e.g. a ticket ID. string order_number = 20; // True if the order was placed by FITS, false if self-service. @@ -216,47 +257,49 @@ message VMInstance { bool contract = 21; } -// Request to get a VM by UUID. -message VMServiceGetRequest { - // UUID of the VM. +// Request to get a MVM by UUID. +message MVMServiceGetRequest { + // UUID of the MVM. optional string uuid = 1 [(buf.validate.field).string.uuid = true]; - // Tenant of the VM. + // Tenant of the MVM. string tenant = 2 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } -// Response containing the requested VM. -message VMServiceGetResponse { - // The VM. - VMInstance vm = 1; +// Response containing the requested MVM. +message MVMServiceGetResponse { + // The MVM. + MVMInstance mvm = 1; } // Windows-specific create request parts. -message VMServiceCreateWindowsRequest { - // UUID of the Windows domain the VM should join. +message MVMServiceCreateWindowsRequest { + // UUID of the Windows domain the MVM should join. string domain_uuid = 1 [(buf.validate.field).string.uuid = true]; - // Disks for the Windows VM, excluding the OS disk. + // Disks for the Windows MVM, excluding the OS disk; must contain exactly + // one system disk plus any number of data disks (see DiskType). repeated WindowsDisk disks = 2 [(buf.validate.field).repeated.min_items = 1]; } // Linux-specific create request parts. -message VMServiceCreateLinuxRequest { - // UUID of the LDAP directory the VM should integrate with. +message MVMServiceCreateLinuxRequest { + // UUID of the LDAP directory the MVM should integrate with. string ldap_uuid = 1 [(buf.validate.field).string.uuid = true]; - // Disks for the Linux VM, excluding the OS disk. + // Disks for the Linux MVM, excluding the OS disk; must contain exactly + // one system disk plus any number of data disks (see DiskType). repeated LinuxDisk disks = 2 [(buf.validate.field).repeated.min_items = 1]; } -// Request to create a new VM instance. +// Request to create a new MVM instance. // TODO: contract, billable and billing_start_date. -message VMServiceCreateRequest { - // UUID of the project this VM belongs to. +message MVMServiceCreateRequest { + // UUID of the project this MVM belongs to. string project_uuid = 1 [(buf.validate.field).string.uuid = true]; // Optional name; the FQDN is derived from it. optional string name = 2 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; // UUID of the operating system image to install. string os_uuid = 3 [(buf.validate.field).string.uuid = true]; - // UUID of the VLAN network to attach the VM to. + // UUID of the VLAN network to attach the MVM to. string vlan_uuid = 4 [(buf.validate.field).string.uuid = true]; - // UUID of the datacenter location; the VM is scheduled into one data center within it. + // UUID of the datacenter location; the MVM is scheduled into one data center within it. string location_uuid = 5 [(buf.validate.field).string.uuid = true]; // TODO: Contact UUID – open discussion with FCN; may become a dedicated /contact endpoint. string contact_uuid = 6 [(buf.validate.field).string.uuid = true]; @@ -277,16 +320,17 @@ message VMServiceCreateRequest { // Service class; only certain combinations with availability are valid. ServiceClass serviceclass = 13 [(buf.validate.field).enum.defined_only = true]; // OS type and its configuration. - oneof vmtype { + oneof mvmtype { option (buf.validate.oneof).required = true; // Windows-specific settings (domain + disk). - VMServiceCreateWindowsRequest windows = 14; + MVMServiceCreateWindowsRequest windows = 14; // Linux-specific settings (LDAP + disk). - VMServiceCreateLinuxRequest linux = 15; + MVMServiceCreateLinuxRequest linux = 15; } } -// Disk configuration for a Linux VM. +// Disk configuration for a Linux MVM. See DiskType for the kinds of disks +// (os, system, data) and their lifecycle rules. message LinuxDisk { // UUID of the disk; set for existing disks, unset for new ones. optional string uuid = 1 [(buf.validate.field).string.uuid = true]; @@ -294,13 +338,21 @@ message LinuxDisk { string label = 2; // Whether the disk grows automatically when space runs low. bool auto_extend = 3; - // Size of the disk in GB. + // Size of the disk in GB; defaults to 50 when unset. optional uint64 size = 4; - // Mount point (e.g. "/data"). + // Mount point (e.g. "/data"). Fixed to "/appdata" for the system disk; + // free-form for data disks. optional string mount_point = 5; + // Kind of the disk; determines which operations are allowed on it. + // Provided by the client in create/add requests and populated by the + // API in responses. + // TODO: talk to FCE that we will provide the disk type in create/add + // requests. + optional DiskType disk_type = 6 [(buf.validate.field).enum.defined_only = true]; } -// Disk configuration for a Windows VM. +// Disk configuration for a Windows MVM. See DiskType for the kinds of +// disks (os, system, data) and their lifecycle rules. message WindowsDisk { // UUID of the disk; set for existing disks, unset for new ones. optional string uuid = 1 [(buf.validate.field).string.uuid = true]; @@ -308,24 +360,38 @@ message WindowsDisk { string label = 2; // Whether the disk grows automatically when space runs low. bool auto_extend = 3; - // Size of the disk in GB. + // Size of the disk in GB; defaults to 50 when unset. optional uint64 size = 4; - // Drive letter (e.g. "D"). + // Drive letter (e.g. "D"). Fixed to "F" for the system disk; free-form + // for data disks. optional string driveletter = 5; + // Kind of the disk; determines which operations are allowed on it. + // Provided by the client in create/add requests and populated by the + // API in responses. + // TODO: talk to FCE that we will provide the disk type in create/add + // requests. + optional DiskType disk_type = 6 [(buf.validate.field).enum.defined_only = true]; } -// Response for Create; an empty response means the VM was accepted. -message VMServiceCreateResponse {} +// Response for Create; an empty response means the MVM was accepted. +message MVMServiceCreateResponse {} -// Request to change a mutable property of an existing VM. +// Request to change a mutable property of an existing MVM. // Exactly one action must be set; each maps onto its own upstream endpoint. // TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per // action); combined changes would need // server-side fan-out without rollback. -message VMServiceUpdateRequest { - // UUID of the VM to update. +// TODO: clarify async semantics — this is a queued "request to update", not an +// immediate update (e.g. disk changes are applied overnight). Consider +// renaming to reflect that. +// TODO: differentiate between fire-and-forget and queued actions in the API. +// TODO: is it possible to expose the pending-change queue (list/cancel) to the caller? +// TODO: clarify who enqueues the request and whether a pending change blocks +// further edits (e.g. after AddDisk, until the change executes). +message MVMServiceUpdateRequest { + // UUID of the MVM to update. string uuid = 1 [(buf.validate.field).string.uuid = true]; - // Project the VM belongs to. + // Project the MVM belongs to. string project = 2 [(buf.validate.field).string.uuid = true]; // Order reference for this operation. // TODO: can this be optional? @@ -344,7 +410,7 @@ message VMServiceUpdateRequest { } } -// PerformanceClassChange is the payload for changing a VM's CPU and RAM. +// PerformanceClassChange is the payload for changing a MVM's CPU and RAM. message PerformanceClassChange { // Number of vCPUs (1-64). uint32 cpu = 1 [ @@ -355,38 +421,38 @@ message PerformanceClassChange { uint32 ram = 2 [(buf.validate.field).uint32.gt = 0]; } -// ServiceClassChange is the payload for changing a VM's service class. +// ServiceClassChange is the payload for changing a MVM's service class. message ServiceClassChange { // Target service class. ServiceClass serviceclass = 1 [(buf.validate.field).enum.defined_only = true]; } -// ContactChange is the payload for changing a VM's contact person. +// ContactChange is the payload for changing a MVM's contact person. message ContactChange { // UUID of the new contact. string contact_uuid = 1 [(buf.validate.field).string.uuid = true]; } // Response for Update; an empty response means the change was accepted. -message VMServiceUpdateResponse {} +message MVMServiceUpdateResponse {} -// Request to list VMs. -message VMServiceListRequest { - // Tenant of the VMs. +// Request to list MVMs. +message MVMServiceListRequest { + // Tenant of the MVMs. optional string tenant = 1 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } -// Response containing the list of VMs. -message VMServiceListResponse { - // The VM instances. - repeated VMInstance vms = 1; +// Response containing the list of MVMs. +message MVMServiceListResponse { + // The MVM instances. + repeated MVMInstance mvms = 1; } -// Request to cancel a VM instance. -message VMServiceDeleteRequest { - // Project the VM belongs to. +// Request to cancel a MVM instance. +message MVMServiceDeleteRequest { + // Project the MVM belongs to. string project = 1 [(buf.validate.field).string.uuid = true]; - // UUID of the VM to delete. + // UUID of the MVM to delete. string uuid = 2 [(buf.validate.field).string.uuid = true]; // Order reference for this operation. // TODO: can this be optional? @@ -394,62 +460,62 @@ message VMServiceDeleteRequest { } // Response for Delete; an empty response means the cancellation was accepted. -message VMServiceDeleteResponse {} +message MVMServiceDeleteResponse {} // Validation messages. // The Validate* RPCs dry-run the upstream business rules without executing the // operation; the mutation endpoints validate again before executing. -// Request to validate a VM create without creating anything. -message VMServiceValidateCreateRequest { +// Request to validate a MVM create without creating anything. +message MVMServiceValidateCreateRequest { // The create request to validate. - VMServiceCreateRequest create = 1 [(buf.validate.field).required = true]; + MVMServiceCreateRequest create = 1 [(buf.validate.field).required = true]; } // Response for ValidateCreate; violations are returned as an InvalidArgument error. -message VMServiceValidateCreateResponse {} +message MVMServiceValidateCreateResponse {} // Request to validate an AddDisk without ordering anything. -message VMServiceValidateAddDiskRequest { +message MVMServiceValidateAddDiskRequest { // The add disk request to validate. - VMServiceAddDiskRequest add_disk = 1 [(buf.validate.field).required = true]; + MVMServiceAddDiskRequest add_disk = 1 [(buf.validate.field).required = true]; } // Response for ValidateAddDisk; violations are returned as an InvalidArgument error. -message VMServiceValidateAddDiskResponse {} +message MVMServiceValidateAddDiskResponse {} // Request to validate an UpdateDisk without changing anything. -message VMServiceValidateUpdateDiskRequest { +message MVMServiceValidateUpdateDiskRequest { // The update disk request to validate. - VMServiceUpdateDiskRequest update_disk = 1 [(buf.validate.field).required = true]; + MVMServiceUpdateDiskRequest update_disk = 1 [(buf.validate.field).required = true]; } // Response for ValidateUpdateDisk; violations are returned as an InvalidArgument error. -message VMServiceValidateUpdateDiskResponse {} +message MVMServiceValidateUpdateDiskResponse {} // Disk lifecycle messages. // A successful response means the operation was accepted; the affected disks // can be inspected via Get. // Response for AddDisk. -message VMServiceAddDiskResponse {} +message MVMServiceAddDiskResponse {} // Response for UpdateDisk. -message VMServiceUpdateDiskResponse {} +message MVMServiceUpdateDiskResponse {} // Response for DeleteDisk. -message VMServiceDeleteDiskResponse {} +message MVMServiceDeleteDiskResponse {} -// Request to order an additional data disk for a VM. -message VMServiceAddDiskRequest { - // UUID of the VM to attach the disk to. +// Request to order an additional data disk for a MVM. +message MVMServiceAddDiskRequest { + // UUID of the MVM to attach the disk to. string uuid = 1 [(buf.validate.field).string.uuid = true]; - // Project the VM belongs to. + // Project the MVM belongs to. string project = 2 [(buf.validate.field).string.uuid = true]; // Order reference for this operation. // TODO: can this be optional? string order_number = 3; - // OS-specific disk specification; must match the VM's OS type. + // OS-specific disk specification; must match the MVM's OS type. oneof disk { option (buf.validate.oneof).required = true; // Linux data disk. @@ -459,13 +525,14 @@ message VMServiceAddDiskRequest { } } -// Request to change an existing data disk; only size and auto-extend are mutable. -message VMServiceUpdateDiskRequest { - // UUID of the VM the disk belongs to. +// Request to change an existing disk; only size and auto-extend are +// mutable (see DiskType for applicability per disk kind). +message MVMServiceUpdateDiskRequest { + // UUID of the MVM the disk belongs to. string uuid = 1 [(buf.validate.field).string.uuid = true]; // UUID of the disk to change. string disk_uuid = 2 [(buf.validate.field).string.uuid = true]; - // Project the VM belongs to. + // Project the MVM belongs to. string project = 3 [(buf.validate.field).string.uuid = true]; // Order reference for this operation. // TODO: can this be optional? @@ -476,76 +543,79 @@ message VMServiceUpdateDiskRequest { optional uint64 size = 6; } -// Request to cancel a data disk. -message VMServiceDeleteDiskRequest { - // UUID of the VM the disk belongs to. +// Request to cancel a data disk; OS and system disks are rejected by the +// upstream. +message MVMServiceDeleteDiskRequest { + // UUID of the MVM the disk belongs to. string uuid = 1 [(buf.validate.field).string.uuid = true]; // UUID of the disk to cancel. string disk_uuid = 2 [(buf.validate.field).string.uuid = true]; - // Project the VM belongs to. + // Project the MVM belongs to. string project = 3 [(buf.validate.field).string.uuid = true]; // Order reference for this operation. // TODO: can this be optional? string order_number = 4; } -// IP lifecycle messages. +// Network interface lifecycle messages. // A successful response means the operation was accepted; the affected // interfaces can be inspected via Get. -// Response for AddIP. -message VMServiceAddIPResponse {} +// Response for AddNetworkInterface. +message MVMServiceAddNetworkInterfaceResponse {} -// Response for MoveIP. -message VMServiceMoveIPResponse {} +// Response for MoveNetworkInterface. +message MVMServiceMoveNetworkInterfaceResponse {} -// Response for DeleteIP. -message VMServiceDeleteIPResponse {} +// Response for DeleteNetworkInterface. +message MVMServiceDeleteNetworkInterfaceResponse {} -// Request to order an additional IP address for a VM. -message VMServiceAddIPRequest { - // UUID of the VM to attach the IP to. +// Request to order an additional network interface for a MVM. +// Nulink treats interface and IP as a 1:1 relation; move and delete +// operate on the interface_uuid. +message MVMServiceAddNetworkInterfaceRequest { + // UUID of the MVM to attach the interface to. string uuid = 1 [(buf.validate.field).string.uuid = true]; - // Project the VM belongs to. + // Project the MVM belongs to. string project = 2 [(buf.validate.field).string.uuid = true]; // Order reference for this operation. // TODO: can this be optional? string order_number = 3; } -// Request to move an IP address from one VM to another. -message VMServiceMoveIPRequest { - // UUID of the VM the IP currently belongs to. +// Request to move a network interface from one MVM to another. +message MVMServiceMoveNetworkInterfaceRequest { + // UUID of the MVM the interface currently belongs to. string uuid = 1 [(buf.validate.field).string.uuid = true]; // UUID of the network interface holding the IP. string interface_uuid = 2 [(buf.validate.field).string.uuid = true]; - // Project the VM belongs to. + // Project the MVM belongs to. string project = 3 [(buf.validate.field).string.uuid = true]; // Order reference for this operation. // TODO: can this be optional? string order_number = 4; - // UUID of the VM to move the IP to. - string target_vm_uuid = 5 [(buf.validate.field).string.uuid = true]; + // UUID of the MVM to move the interface to. + string target_mvm_uuid = 5 [(buf.validate.field).string.uuid = true]; } -// Request to delete an IP address from a VM. -message VMServiceDeleteIPRequest { - // UUID of the VM the IP belongs to. +// Request to delete a network interface from a MVM. +message MVMServiceDeleteNetworkInterfaceRequest { + // UUID of the MVM the interface belongs to. string uuid = 1 [(buf.validate.field).string.uuid = true]; // UUID of the network interface holding the IP. string interface_uuid = 2 [(buf.validate.field).string.uuid = true]; - // Project the VM belongs to. + // Project the MVM belongs to. string project = 3 [(buf.validate.field).string.uuid = true]; // Order reference for this operation. // TODO: can this be optional? string order_number = 4; } -// Request to validate an AddIP without ordering anything. -message VMServiceValidateAddIPRequest { - // The add IP request to validate. - VMServiceAddIPRequest add_ip = 1 [(buf.validate.field).required = true]; +// Request to validate an AddNetworkInterface without ordering anything. +message MVMServiceValidateAddNetworkInterfaceRequest { + // The add network interface request to validate. + MVMServiceAddNetworkInterfaceRequest add_network_interface = 1 [(buf.validate.field).required = true]; } -// Response for ValidateAddIP; violations are returned as an InvalidArgument error. -message VMServiceValidateAddIPResponse {} +// Response for ValidateAddNetworkInterface; violations are returned as an InvalidArgument error. +message MVMServiceValidateAddNetworkInterfaceResponse {} diff --git a/proto/fits/api/vm/v1/os.proto b/proto/fits/api/mvm/v1/os.proto similarity index 87% rename from proto/fits/api/vm/v1/os.proto rename to proto/fits/api/mvm/v1/os.proto index 53d1bc2..14d999b 100644 --- a/proto/fits/api/vm/v1/os.proto +++ b/proto/fits/api/mvm/v1/os.proto @@ -1,12 +1,12 @@ syntax = "proto3"; -package fits.api.vm.v1; +package fits.api.mvm.v1; import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; -// OSService lists operating systems available for VM instances. +// OSService lists operating systems available for managed VM (MVM) instances. service OSService { // Returns a list of all operating systems. rpc List(OSServiceListRequest) returns (OSServiceListResponse) { @@ -17,7 +17,7 @@ service OSService { } } -// OS is the definition of an available OS for VM instances +// OS is the definition of an available OS for MVM instances. message OS { // Uuid of this OS string uuid = 1 [(buf.validate.field).string.uuid = true]; diff --git a/proto/fits/api/vm/v1/stagetype.proto b/proto/fits/api/mvm/v1/stagetype.proto similarity index 91% rename from proto/fits/api/vm/v1/stagetype.proto rename to proto/fits/api/mvm/v1/stagetype.proto index 215a12a..4371c68 100644 --- a/proto/fits/api/vm/v1/stagetype.proto +++ b/proto/fits/api/mvm/v1/stagetype.proto @@ -1,12 +1,12 @@ syntax = "proto3"; -package fits.api.vm.v1; +package fits.api.mvm.v1; import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; -// StageTypeService lists stage types available for VM instances. +// StageTypeService lists stage types available for managed VM (MVM) instances. service StageTypeService { // Returns a list of all stage types available for a tenant. rpc List(StageTypeServiceListRequest) returns (StageTypeServiceListResponse) { diff --git a/proto/fits/api/vm/v1/vlan.proto b/proto/fits/api/mvm/v1/vlan.proto similarity index 77% rename from proto/fits/api/vm/v1/vlan.proto rename to proto/fits/api/mvm/v1/vlan.proto index 1d9c481..2d8b2a4 100644 --- a/proto/fits/api/vm/v1/vlan.proto +++ b/proto/fits/api/mvm/v1/vlan.proto @@ -1,15 +1,15 @@ syntax = "proto3"; -package fits.api.vm.v1; +package fits.api.mvm.v1; import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; -// VLANService lists VLANs available for VM instances. -service VlanService { +// VLANService lists VLANs available for managed VM (MVM) instances. +service VLANService { // Returns a list of all VLANs available for a tenant. - rpc List(VlanServiceListRequest) returns (VlanServiceListResponse) { + rpc List(VLANServiceListRequest) returns (VLANServiceListResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; @@ -17,8 +17,8 @@ service VlanService { } } -// Vlan is a VLAN that a VM can be connected to. -message Vlan { +// VLAN is a VLAN that a MVM can be connected to. +message VLAN { // Uuid of this VLAN string uuid = 1 [(buf.validate.field).string.uuid = true]; // Id of this VLAN @@ -45,14 +45,14 @@ message Vlan { string tenant = 15 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } -// VlanServiceListRequest is the request payload for a VLAN list request. -message VlanServiceListRequest { +// VLANServiceListRequest is the request payload for a VLAN list request. +message VLANServiceListRequest { // Tenant to list available VLANs for string tenant = 1 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } -// VlanServiceListResponse is the response payload for a VLAN list request -message VlanServiceListResponse { +// VLANServiceListResponse is the response payload for a VLAN list request +message VLANServiceListResponse { // The available VLANs - repeated Vlan vlans = 1; + repeated VLAN vlans = 1; } diff --git a/python/fits/api/vm/__init__.py b/python/fits/api/mvm/__init__.py similarity index 100% rename from python/fits/api/vm/__init__.py rename to python/fits/api/mvm/__init__.py diff --git a/python/fits/api/vm/v1/__init__.py b/python/fits/api/mvm/v1/__init__.py similarity index 100% rename from python/fits/api/vm/v1/__init__.py rename to python/fits/api/mvm/v1/__init__.py diff --git a/python/fits/api/vm/v1/location_connect.py b/python/fits/api/mvm/v1/location_connect.py similarity index 62% rename from python/fits/api/vm/v1/location_connect.py rename to python/fits/api/mvm/v1/location_connect.py index 43d6ac3..4585912 100644 --- a/python/fits/api/vm/v1/location_connect.py +++ b/python/fits/api/mvm/v1/location_connect.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! -# source: fits/api/vm/v1/location.proto +# source: fits/api/mvm/v1/location.proto from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping from typing import Protocol @@ -14,11 +14,11 @@ from connectrpc.method import IdempotencyLevel, MethodInfo from connectrpc.request import Headers, RequestContext from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync -import fits.api.vm.v1.location_pb2 as fits_dot_api_dot_vm_dot_v1_dot_location__pb2 +import fits.api.mvm.v1.location_pb2 as fits_dot_api_dot_mvm_dot_v1_dot_location__pb2 class LocationService(Protocol): - async def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse: + async def list(self, request: fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") @@ -27,12 +27,12 @@ def __init__(self, service: LocationService | AsyncGenerator[LocationService], * super().__init__( service=service, endpoints=lambda svc: { - "/fits.api.vm.v1.LocationService/List": Endpoint.unary( + "/fits.api.mvm.v1.LocationService/List": Endpoint.unary( method=MethodInfo( name="List", - service_name="fits.api.vm.v1.LocationService", - input=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse, + service_name="fits.api.mvm.v1.LocationService", + input=fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), function=svc.list, @@ -47,24 +47,24 @@ def __init__(self, service: LocationService | AsyncGenerator[LocationService], * @property def path(self) -> str: """Returns the URL path to mount the application to when serving multiple applications.""" - return "/fits.api.vm.v1.LocationService" + return "/fits.api.mvm.v1.LocationService" class LocationServiceClient(ConnectClient): async def list( self, - request: fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, + request: fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListRequest, *, headers: Headers | Mapping[str, str] | None = None, timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse: + ) -> fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListResponse: return await self.execute_unary( request=request, method=MethodInfo( name="List", - service_name="fits.api.vm.v1.LocationService", - input=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse, + service_name="fits.api.mvm.v1.LocationService", + input=fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), headers=headers, @@ -76,7 +76,7 @@ async def list( class LocationServiceSync(Protocol): - def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse: + def list(self, request: fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") @@ -84,12 +84,12 @@ class LocationServiceWSGIApplication(ConnectWSGIApplication): def __init__(self, service: LocationServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( endpoints={ - "/fits.api.vm.v1.LocationService/List": EndpointSync.unary( + "/fits.api.mvm.v1.LocationService/List": EndpointSync.unary( method=MethodInfo( name="List", - service_name="fits.api.vm.v1.LocationService", - input=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse, + service_name="fits.api.mvm.v1.LocationService", + input=fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), function=service.list, @@ -104,24 +104,24 @@ def __init__(self, service: LocationServiceSync, interceptors: Iterable[Intercep @property def path(self) -> str: """Returns the URL path to mount the application to when serving multiple applications.""" - return "/fits.api.vm.v1.LocationService" + return "/fits.api.mvm.v1.LocationService" class LocationServiceClientSync(ConnectClientSync): def list( self, - request: fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, + request: fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListRequest, *, headers: Headers | Mapping[str, str] | None = None, timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse: + ) -> fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListResponse: return self.execute_unary( request=request, method=MethodInfo( name="List", - service_name="fits.api.vm.v1.LocationService", - input=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_location__pb2.LocationServiceListResponse, + service_name="fits.api.mvm.v1.LocationService", + input=fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_location__pb2.LocationServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), headers=headers, diff --git a/python/fits/api/vm/v1/location_pb2.py b/python/fits/api/mvm/v1/location_pb2.py similarity index 50% rename from python/fits/api/vm/v1/location_pb2.py rename to python/fits/api/mvm/v1/location_pb2.py index a2f6e1c..36fd6de 100644 --- a/python/fits/api/vm/v1/location_pb2.py +++ b/python/fits/api/mvm/v1/location_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE -# source: fits/api/vm/v1/location.proto +# source: fits/api/mvm/v1/location.proto # Protobuf Python Version: 7.36.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor @@ -15,7 +15,7 @@ 36, 1, '', - 'fits/api/vm/v1/location.proto' + 'fits/api/mvm/v1/location.proto' ) # @@protoc_insertion_point(imports) @@ -27,14 +27,14 @@ from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x66its/api/vm/v1/location.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"K\n\x08Location\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x05title\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\"A\n\x1aLocationServiceListRequest\x12#\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"U\n\x1bLocationServiceListResponse\x12\x36\n\tlocations\x18\x01 \x03(\x0b\x32\x18.fits.api.vm.v1.LocationR\tlocations2\x7f\n\x0fLocationService\x12l\n\x04List\x12*.fits.api.vm.v1.LocationServiceListRequest\x1a+.fits.api.vm.v1.LocationServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xab\x01\n\x12\x63om.fits.api.vm.v1B\rLocationProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x66its/api/mvm/v1/location.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"K\n\x08Location\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x05title\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\"A\n\x1aLocationServiceListRequest\x12#\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"V\n\x1bLocationServiceListResponse\x12\x37\n\tlocations\x18\x01 \x03(\x0b\x32\x19.fits.api.mvm.v1.LocationR\tlocations2\x81\x01\n\x0fLocationService\x12n\n\x04List\x12+.fits.api.mvm.v1.LocationServiceListRequest\x1a,.fits.api.mvm.v1.LocationServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xb2\x01\n\x13\x63om.fits.api.mvm.v1B\rLocationProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.vm.v1.location_pb2', _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.mvm.v1.location_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\rLocationProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' + _globals['DESCRIPTOR']._serialized_options = b'\n\023com.fits.api.mvm.v1B\rLocationProtoP\001Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\242\002\003FAM\252\002\017Fits.Api.Mvm.V1\312\002\017Fits\\Api\\Mvm\\V1\342\002\033Fits\\Api\\Mvm\\V1\\GPBMetadata\352\002\022Fits::Api::Mvm::V1' _globals['_LOCATION'].fields_by_name['uuid']._loaded_options = None _globals['_LOCATION'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_LOCATION'].fields_by_name['title']._loaded_options = None @@ -43,12 +43,12 @@ _globals['_LOCATIONSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_LOCATIONSERVICE'].methods_by_name['List']._loaded_options = None _globals['_LOCATIONSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' - _globals['_LOCATION']._serialized_start=140 - _globals['_LOCATION']._serialized_end=215 - _globals['_LOCATIONSERVICELISTREQUEST']._serialized_start=217 - _globals['_LOCATIONSERVICELISTREQUEST']._serialized_end=282 - _globals['_LOCATIONSERVICELISTRESPONSE']._serialized_start=284 - _globals['_LOCATIONSERVICELISTRESPONSE']._serialized_end=369 - _globals['_LOCATIONSERVICE']._serialized_start=371 - _globals['_LOCATIONSERVICE']._serialized_end=498 + _globals['_LOCATION']._serialized_start=142 + _globals['_LOCATION']._serialized_end=217 + _globals['_LOCATIONSERVICELISTREQUEST']._serialized_start=219 + _globals['_LOCATIONSERVICELISTREQUEST']._serialized_end=284 + _globals['_LOCATIONSERVICELISTRESPONSE']._serialized_start=286 + _globals['_LOCATIONSERVICELISTRESPONSE']._serialized_end=372 + _globals['_LOCATIONSERVICE']._serialized_start=375 + _globals['_LOCATIONSERVICE']._serialized_end=504 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/location_pb2.pyi b/python/fits/api/mvm/v1/location_pb2.pyi similarity index 100% rename from python/fits/api/vm/v1/location_pb2.pyi rename to python/fits/api/mvm/v1/location_pb2.pyi diff --git a/python/fits/api/mvm/v1/mvm_connect.py b/python/fits/api/mvm/v1/mvm_connect.py new file mode 100644 index 0000000..2a95968 --- /dev/null +++ b/python/fits/api/mvm/v1/mvm_connect.py @@ -0,0 +1,1041 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: fits/api/mvm/v1/mvm.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.codec import Codec +from connectrpc.compression import Compression +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import fits.api.mvm.v1.mvm_pb2 as fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2 + + +class MVMService(Protocol): + async def get(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def create(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def list(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def add_disk(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update_disk(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete_disk(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def add_network_interface(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def move_network_interface(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete_network_interface(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def validate_create(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def validate_add_disk(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def validate_update_disk(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def validate_add_network_interface(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class MVMServiceASGIApplication(ConnectASGIApplication[MVMService]): + def __init__(self, service: MVMService | AsyncGenerator[MVMService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/fits.api.mvm.v1.MVMService/Get": Endpoint.unary( + method=MethodInfo( + name="Get", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get, + ), + "/fits.api.mvm.v1.MVMService/Create": Endpoint.unary( + method=MethodInfo( + name="Create", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create, + ), + "/fits.api.mvm.v1.MVMService/Update": Endpoint.unary( + method=MethodInfo( + name="Update", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update, + ), + "/fits.api.mvm.v1.MVMService/List": Endpoint.unary( + method=MethodInfo( + name="List", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.list, + ), + "/fits.api.mvm.v1.MVMService/Delete": Endpoint.unary( + method=MethodInfo( + name="Delete", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete, + ), + "/fits.api.mvm.v1.MVMService/AddDisk": Endpoint.unary( + method=MethodInfo( + name="AddDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.add_disk, + ), + "/fits.api.mvm.v1.MVMService/UpdateDisk": Endpoint.unary( + method=MethodInfo( + name="UpdateDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update_disk, + ), + "/fits.api.mvm.v1.MVMService/DeleteDisk": Endpoint.unary( + method=MethodInfo( + name="DeleteDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete_disk, + ), + "/fits.api.mvm.v1.MVMService/AddNetworkInterface": Endpoint.unary( + method=MethodInfo( + name="AddNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.add_network_interface, + ), + "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": Endpoint.unary( + method=MethodInfo( + name="MoveNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.move_network_interface, + ), + "/fits.api.mvm.v1.MVMService/DeleteNetworkInterface": Endpoint.unary( + method=MethodInfo( + name="DeleteNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete_network_interface, + ), + "/fits.api.mvm.v1.MVMService/ValidateCreate": Endpoint.unary( + method=MethodInfo( + name="ValidateCreate", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.validate_create, + ), + "/fits.api.mvm.v1.MVMService/ValidateAddDisk": Endpoint.unary( + method=MethodInfo( + name="ValidateAddDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.validate_add_disk, + ), + "/fits.api.mvm.v1.MVMService/ValidateUpdateDisk": Endpoint.unary( + method=MethodInfo( + name="ValidateUpdateDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.validate_update_disk, + ), + "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": Endpoint.unary( + method=MethodInfo( + name="ValidateAddNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.validate_add_network_interface, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/fits.api.mvm.v1.MVMService" + + +class MVMServiceClient(ConnectClient): + async def get( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="Get", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def create( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="Create", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="Update", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def list( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="List", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="Delete", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def add_disk( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="AddDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update_disk( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete_disk( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def add_network_interface( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="AddNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def move_network_interface( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="MoveNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete_network_interface( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def validate_create( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateCreate", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def validate_add_disk( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateAddDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def validate_update_disk( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateUpdateDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def validate_add_network_interface( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateAddNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + + + + +class MVMServiceSync(Protocol): + def get(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def create(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def list(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def add_disk(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update_disk(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete_disk(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def add_network_interface(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def move_network_interface(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete_network_interface(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def validate_create(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def validate_add_disk(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def validate_update_disk(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def validate_add_network_interface(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class MVMServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: MVMServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + endpoints={ + "/fits.api.mvm.v1.MVMService/Get": EndpointSync.unary( + method=MethodInfo( + name="Get", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get, + ), + "/fits.api.mvm.v1.MVMService/Create": EndpointSync.unary( + method=MethodInfo( + name="Create", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create, + ), + "/fits.api.mvm.v1.MVMService/Update": EndpointSync.unary( + method=MethodInfo( + name="Update", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update, + ), + "/fits.api.mvm.v1.MVMService/List": EndpointSync.unary( + method=MethodInfo( + name="List", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.list, + ), + "/fits.api.mvm.v1.MVMService/Delete": EndpointSync.unary( + method=MethodInfo( + name="Delete", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete, + ), + "/fits.api.mvm.v1.MVMService/AddDisk": EndpointSync.unary( + method=MethodInfo( + name="AddDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.add_disk, + ), + "/fits.api.mvm.v1.MVMService/UpdateDisk": EndpointSync.unary( + method=MethodInfo( + name="UpdateDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update_disk, + ), + "/fits.api.mvm.v1.MVMService/DeleteDisk": EndpointSync.unary( + method=MethodInfo( + name="DeleteDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete_disk, + ), + "/fits.api.mvm.v1.MVMService/AddNetworkInterface": EndpointSync.unary( + method=MethodInfo( + name="AddNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.add_network_interface, + ), + "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": EndpointSync.unary( + method=MethodInfo( + name="MoveNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.move_network_interface, + ), + "/fits.api.mvm.v1.MVMService/DeleteNetworkInterface": EndpointSync.unary( + method=MethodInfo( + name="DeleteNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete_network_interface, + ), + "/fits.api.mvm.v1.MVMService/ValidateCreate": EndpointSync.unary( + method=MethodInfo( + name="ValidateCreate", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.validate_create, + ), + "/fits.api.mvm.v1.MVMService/ValidateAddDisk": EndpointSync.unary( + method=MethodInfo( + name="ValidateAddDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.validate_add_disk, + ), + "/fits.api.mvm.v1.MVMService/ValidateUpdateDisk": EndpointSync.unary( + method=MethodInfo( + name="ValidateUpdateDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.validate_update_disk, + ), + "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": EndpointSync.unary( + method=MethodInfo( + name="ValidateAddNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.validate_add_network_interface, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/fits.api.mvm.v1.MVMService" + + +class MVMServiceClientSync(ConnectClientSync): + def get( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="Get", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def create( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="Create", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="Update", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def list( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="List", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="Delete", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def add_disk( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="AddDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update_disk( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete_disk( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def add_network_interface( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="AddNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceAddNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def move_network_interface( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="MoveNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceMoveNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete_network_interface( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def validate_create( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateCreate", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateCreateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def validate_add_disk( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateAddDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def validate_update_disk( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateUpdateDisk", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateUpdateDiskResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def validate_add_network_interface( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ValidateAddNetworkInterface", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceValidateAddNetworkInterfaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + diff --git a/python/fits/api/mvm/v1/mvm_pb2.py b/python/fits/api/mvm/v1/mvm_pb2.py new file mode 100644 index 0000000..d9b07be --- /dev/null +++ b/python/fits/api/mvm/v1/mvm_pb2.py @@ -0,0 +1,321 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: fits/api/mvm/v1/mvm.proto +# Protobuf Python Version: 7.36.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 7, + 36, + 1, + '', + 'fits/api/mvm/v1/mvm.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from fits.api.mvm.v1 import vlan_pb2 as fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2 +from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 +from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/mvm/v1/mvm.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1a\x66its/api/mvm/v1/vlan.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x91\x01\n\x0cLinuxDetails\x12\x30\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskR\x05\x64isks\x12%\n\tldap_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12(\n\tldap_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08ldapFqdn\"\x9d\x01\n\x0eWindowsDetails\x12\x32\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskR\x05\x64isks\x12)\n\x0b\x64omain_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12,\n\x0b\x64omain_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\ndomainFqdn\"{\n\x10NetworkInterface\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n\tipaddress\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xe8\xb3\xae\xb1\x02\x01R\tipaddress\x12\x1e\n\nmacaddress\x18\x03 \x01(\tR\nmacaddress\"\xa4\x07\n\x0bMVMInstance\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04\x66qdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04\x66qdn\x12#\n\x06tenant\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n\x0cproject_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12!\n\x07os_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\t \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\n \x01(\rR\x03ram\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12\x16\n\x06status\x18\x0c \x01(\tR\x06status\x12\x1f\n\x0bstatus_info\x18\r \x01(\tR\nstatusInfo\x12K\n\x0c\x61vailability\x18\x0e \x01(\x0e\x32\x1d.fits.api.mvm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12K\n\x0cserviceclass\x18\x0f \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12J\n\x0fwindows_details\x18\x10 \x01(\x0b\x32\x1f.fits.api.mvm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12\x44\n\rlinux_details\x18\x11 \x01(\x0b\x32\x1d.fits.api.mvm.v1.LinuxDetailsH\x00R\x0clinuxDetails\x12\x41\n\ninterfaces\x18\x12 \x03(\x0b\x32!.fits.api.mvm.v1.NetworkInterfaceR\ninterfaces\x12)\n\x04vlan\x18\x13 \x01(\x0b\x32\x15.fits.api.mvm.v1.VLANR\x04vlan\x12!\n\x0corder_number\x18\x14 \x01(\tR\x0borderNumber\x12\x1a\n\x08\x63ontract\x18\x15 \x01(\x08R\x08\x63ontractB\x10\n\x07\x64\x65tails\x12\x05\xbaH\x02\x08\x01\"g\n\x14MVMServiceGetRequest\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12#\n\x06tenant\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x07\n\x05_uuid\"G\n\x15MVMServiceGetResponse\x12.\n\x03mvm\x18\x01 \x01(\x0b\x32\x1c.fits.api.mvm.v1.MVMInstanceR\x03mvm\"\x89\x01\n\x1eMVMServiceCreateWindowsRequest\x12)\n\x0b\x64omain_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12<\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\x81\x01\n\x1cMVMServiceCreateLinuxRequest\x12%\n\tldap_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12:\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\xe7\x05\n\x17MVMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n\x07os_uuid\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\x07 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x08 \x01(\rR\x03ram\x12!\n\x0corder_number\x18\t \x01(\tR\x0borderNumber\x12+\n\x06labels\x18\n \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12K\n\x0c\x61vailability\x18\x0c \x01(\x0e\x32\x1d.fits.api.mvm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12K\n\x0cserviceclass\x18\r \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12K\n\x07windows\x18\x0e \x01(\x0b\x32/.fits.api.mvm.v1.MVMServiceCreateWindowsRequestH\x00R\x07windows\x12\x45\n\x05linux\x18\x0f \x01(\x0b\x32-.fits.api.mvm.v1.MVMServiceCreateLinuxRequestH\x00R\x05linuxB\x10\n\x07mvmtype\x12\x05\xbaH\x02\x08\x01\x42\x07\n\x05_name\"\x9b\x02\n\tLinuxDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x02R\nmountPoint\x88\x01\x01\x12\x45\n\tdisk_type\x18\x06 \x01(\x0e\x32\x19.fits.api.mvm.v1.DiskTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x08\x64iskType\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_mount_pointB\x0c\n\n_disk_type\"\x9e\x02\n\x0bWindowsDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12%\n\x0b\x64riveletter\x18\x05 \x01(\tH\x02R\x0b\x64riveletter\x88\x01\x01\x12\x45\n\tdisk_type\x18\x06 \x01(\x0e\x32\x19.fits.api.mvm.v1.DiskTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x08\x64iskType\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_driveletterB\x0c\n\n_disk_type\"\x1a\n\x18MVMServiceCreateResponse\"\xb1\x03\n\x17MVMServiceUpdateRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12@\n\x0bupdate_meta\x18\x04 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12V\n\x11performance_class\x18\x05 \x01(\x0b\x32\'.fits.api.mvm.v1.PerformanceClassChangeH\x00R\x10performanceClass\x12J\n\rservice_class\x18\x06 \x01(\x0b\x32#.fits.api.mvm.v1.ServiceClassChangeH\x00R\x0cserviceClass\x12:\n\x07\x63ontact\x18\x07 \x01(\x0b\x32\x1e.fits.api.mvm.v1.ContactChangeH\x00R\x07\x63ontactB\x0f\n\x06\x61\x63tion\x12\x05\xbaH\x02\x08\x01\"P\n\x16PerformanceClassChange\x12\x1b\n\x03\x63pu\x18\x01 \x01(\rB\t\xbaH\x06*\x04\x18@(\x01R\x03\x63pu\x12\x19\n\x03ram\x18\x02 \x01(\rB\x07\xbaH\x04*\x02 \x00R\x03ram\"a\n\x12ServiceClassChange\x12K\n\x0cserviceclass\x18\x01 \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\"<\n\rContactChange\x12+\n\x0c\x63ontact_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\"\x1a\n\x18MVMServiceUpdateResponse\"L\n\x15MVMServiceListRequest\x12(\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01\x42\t\n\x07_tenant\"J\n\x16MVMServiceListResponse\x12\x30\n\x04mvms\x18\x01 \x03(\x0b\x32\x1c.fits.api.mvm.v1.MVMInstanceR\x04mvms\"~\n\x17MVMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x1c\n\x04uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\x1a\n\x18MVMServiceDeleteResponse\"k\n\x1fMVMServiceValidateCreateRequest\x12H\n\x06\x63reate\x18\x01 \x01(\x0b\x32(.fits.api.mvm.v1.MVMServiceCreateRequestB\x06\xbaH\x03\xc8\x01\x01R\x06\x63reate\"\"\n MVMServiceValidateCreateResponse\"p\n MVMServiceValidateAddDiskRequest\x12L\n\x08\x61\x64\x64_disk\x18\x01 \x01(\x0b\x32).fits.api.mvm.v1.MVMServiceAddDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\x07\x61\x64\x64\x44isk\"#\n!MVMServiceValidateAddDiskResponse\"|\n#MVMServiceValidateUpdateDiskRequest\x12U\n\x0bupdate_disk\x18\x01 \x01(\x0b\x32,.fits.api.mvm.v1.MVMServiceUpdateDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\nupdateDisk\"&\n$MVMServiceValidateUpdateDiskResponse\"\x1b\n\x19MVMServiceAddDiskResponse\"\x1e\n\x1cMVMServiceUpdateDiskResponse\"\x1e\n\x1cMVMServiceDeleteDiskResponse\"\xfc\x01\n\x18MVMServiceAddDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12\x32\n\x05linux\x18\x04 \x01(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskH\x00R\x05linux\x12\x38\n\x07windows\x18\x05 \x01(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskH\x00R\x07windowsB\r\n\x04\x64isk\x12\x05\xbaH\x02\x08\x01\"\x81\x02\n\x1bMVMServiceUpdateDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12$\n\x0b\x61uto_extend\x18\x05 \x01(\x08H\x00R\nautoExtend\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\x04H\x01R\x04size\x88\x01\x01\x42\x0e\n\x0c_auto_extendB\x07\n\x05_size\"\xa9\x01\n\x1bMVMServiceDeleteDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\'\n%MVMServiceAddNetworkInterfaceResponse\"(\n&MVMServiceMoveNetworkInterfaceResponse\"*\n(MVMServiceDeleteNetworkInterfaceResponse\"\x8b\x01\n$MVMServiceAddNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\xef\x01\n%MVMServiceMoveNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12\x30\n\x0ftarget_mvm_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtargetMvmUuid\"\xbf\x01\n\'MVMServiceDeleteNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\xa1\x01\n,MVMServiceValidateAddNetworkInterfaceRequest\x12q\n\x15\x61\x64\x64_network_interface\x18\x01 \x01(\x0b\x32\x35.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequestB\x06\xbaH\x03\xc8\x01\x01R\x13\x61\x64\x64NetworkInterface\"/\n-MVMServiceValidateAddNetworkInterfaceResponse*\xa6\x01\n\x0c\x41vailability\x12\"\n\x18\x41VAILABILITY_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1b\n\x0f\x41VAILABILITY_V0\x10\x01\x1a\x06\x82\xb2\x19\x02V0\x12\x1b\n\x0f\x41VAILABILITY_V1\x10\x02\x1a\x06\x82\xb2\x19\x02V1\x12\x1b\n\x0f\x41VAILABILITY_V2\x10\x03\x1a\x06\x82\xb2\x19\x02V2\x12\x1b\n\x0f\x41VAILABILITY_V3\x10\x04\x1a\x06\x82\xb2\x19\x02V3*\x93\x01\n\x0cServiceClass\x12#\n\x19SERVICE_CLASS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1e\n\x11SERVICE_CLASS_SZ1\x10\x01\x1a\x07\x82\xb2\x19\x03SZ1\x12\x1e\n\x11SERVICE_CLASS_SZ2\x10\x02\x1a\x07\x82\xb2\x19\x03SZ2\x12\x1e\n\x11SERVICE_CLASS_SZ3\x10\x03\x1a\x07\x82\xb2\x19\x03SZ3*\x85\x01\n\x08\x44iskType\x12\x1f\n\x15\x44ISK_TYPE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x18\n\x0c\x44ISK_TYPE_OS\x10\x01\x1a\x06\x82\xb2\x19\x02os\x12 \n\x10\x44ISK_TYPE_SYSTEM\x10\x02\x1a\n\x82\xb2\x19\x06system\x12\x1c\n\x0e\x44ISK_TYPE_DATA\x10\x03\x1a\x08\x82\xb2\x19\x04\x64\x61ta2\xfd\x0e\n\nMVMService\x12\x61\n\x03Get\x12%.fits.api.mvm.v1.MVMServiceGetRequest\x1a&.fits.api.mvm.v1.MVMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x43reate\x12(.fits.api.mvm.v1.MVMServiceCreateRequest\x1a).fits.api.mvm.v1.MVMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12i\n\x06Update\x12(.fits.api.mvm.v1.MVMServiceUpdateRequest\x1a).fits.api.mvm.v1.MVMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x64\n\x04List\x12&.fits.api.mvm.v1.MVMServiceListRequest\x1a\'.fits.api.mvm.v1.MVMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x44\x65lete\x12(.fits.api.mvm.v1.MVMServiceDeleteRequest\x1a).fits.api.mvm.v1.MVMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12l\n\x07\x41\x64\x64\x44isk\x12).fits.api.mvm.v1.MVMServiceAddDiskRequest\x1a*.fits.api.mvm.v1.MVMServiceAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\nUpdateDisk\x12,.fits.api.mvm.v1.MVMServiceUpdateDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\nDeleteDisk\x12,.fits.api.mvm.v1.MVMServiceDeleteDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceDeleteDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x90\x01\n\x13\x41\x64\x64NetworkInterface\x12\x35.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest\x1a\x36.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x93\x01\n\x14MoveNetworkInterface\x12\x36.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest\x1a\x37.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x99\x01\n\x16\x44\x65leteNetworkInterface\x12\x38.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest\x1a\x39.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x81\x01\n\x0eValidateCreate\x12\x30.fits.api.mvm.v1.MVMServiceValidateCreateRequest\x1a\x31.fits.api.mvm.v1.MVMServiceValidateCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x84\x01\n\x0fValidateAddDisk\x12\x31.fits.api.mvm.v1.MVMServiceValidateAddDiskRequest\x1a\x32.fits.api.mvm.v1.MVMServiceValidateAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x8d\x01\n\x12ValidateUpdateDisk\x12\x34.fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest\x1a\x35.fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\xa8\x01\n\x1bValidateAddNetworkInterface\x12=.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest\x1a>.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x42\xad\x01\n\x13\x63om.fits.api.mvm.v1B\x08MvmProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.mvm.v1.mvm_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\023com.fits.api.mvm.v1B\010MvmProtoP\001Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\242\002\003FAM\252\002\017Fits.Api.Mvm.V1\312\002\017Fits\\Api\\Mvm\\V1\342\002\033Fits\\Api\\Mvm\\V1\\GPBMetadata\352\002\022Fits::Api::Mvm::V1' + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_UNSPECIFIED"]._loaded_options = None + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_UNSPECIFIED"]._serialized_options = b'\202\262\031\000' + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V0"]._loaded_options = None + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V0"]._serialized_options = b'\202\262\031\002V0' + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V1"]._loaded_options = None + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V1"]._serialized_options = b'\202\262\031\002V1' + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V2"]._loaded_options = None + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V2"]._serialized_options = b'\202\262\031\002V2' + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V3"]._loaded_options = None + _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V3"]._serialized_options = b'\202\262\031\002V3' + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_UNSPECIFIED"]._loaded_options = None + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_UNSPECIFIED"]._serialized_options = b'\202\262\031\000' + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ1"]._loaded_options = None + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ1"]._serialized_options = b'\202\262\031\003SZ1' + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ2"]._loaded_options = None + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ2"]._serialized_options = b'\202\262\031\003SZ2' + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ3"]._loaded_options = None + _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ3"]._serialized_options = b'\202\262\031\003SZ3' + _globals['_DISKTYPE'].values_by_name["DISK_TYPE_UNSPECIFIED"]._loaded_options = None + _globals['_DISKTYPE'].values_by_name["DISK_TYPE_UNSPECIFIED"]._serialized_options = b'\202\262\031\000' + _globals['_DISKTYPE'].values_by_name["DISK_TYPE_OS"]._loaded_options = None + _globals['_DISKTYPE'].values_by_name["DISK_TYPE_OS"]._serialized_options = b'\202\262\031\002os' + _globals['_DISKTYPE'].values_by_name["DISK_TYPE_SYSTEM"]._loaded_options = None + _globals['_DISKTYPE'].values_by_name["DISK_TYPE_SYSTEM"]._serialized_options = b'\202\262\031\006system' + _globals['_DISKTYPE'].values_by_name["DISK_TYPE_DATA"]._loaded_options = None + _globals['_DISKTYPE'].values_by_name["DISK_TYPE_DATA"]._serialized_options = b'\202\262\031\004data' + _globals['_LINUXDETAILS'].fields_by_name['ldap_uuid']._loaded_options = None + _globals['_LINUXDETAILS'].fields_by_name['ldap_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_LINUXDETAILS'].fields_by_name['ldap_fqdn']._loaded_options = None + _globals['_LINUXDETAILS'].fields_by_name['ldap_fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_WINDOWSDETAILS'].fields_by_name['domain_uuid']._loaded_options = None + _globals['_WINDOWSDETAILS'].fields_by_name['domain_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_WINDOWSDETAILS'].fields_by_name['domain_fqdn']._loaded_options = None + _globals['_WINDOWSDETAILS'].fields_by_name['domain_fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_NETWORKINTERFACE'].fields_by_name['uuid']._loaded_options = None + _globals['_NETWORKINTERFACE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_NETWORKINTERFACE'].fields_by_name['ipaddress']._loaded_options = None + _globals['_NETWORKINTERFACE'].fields_by_name['ipaddress']._serialized_options = b'\272H\010r\006\350\263\256\261\002\001' + _globals['_MVMINSTANCE'].oneofs_by_name['details']._loaded_options = None + _globals['_MVMINSTANCE'].oneofs_by_name['details']._serialized_options = b'\272H\002\010\001' + _globals['_MVMINSTANCE'].fields_by_name['uuid']._loaded_options = None + _globals['_MVMINSTANCE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMINSTANCE'].fields_by_name['fqdn']._loaded_options = None + _globals['_MVMINSTANCE'].fields_by_name['fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_MVMINSTANCE'].fields_by_name['tenant']._loaded_options = None + _globals['_MVMINSTANCE'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_MVMINSTANCE'].fields_by_name['project_uuid']._loaded_options = None + _globals['_MVMINSTANCE'].fields_by_name['project_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMINSTANCE'].fields_by_name['os_uuid']._loaded_options = None + _globals['_MVMINSTANCE'].fields_by_name['os_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMINSTANCE'].fields_by_name['location_uuid']._loaded_options = None + _globals['_MVMINSTANCE'].fields_by_name['location_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMINSTANCE'].fields_by_name['contact_uuid']._loaded_options = None + _globals['_MVMINSTANCE'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMINSTANCE'].fields_by_name['availability']._loaded_options = None + _globals['_MVMINSTANCE'].fields_by_name['availability']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_MVMINSTANCE'].fields_by_name['serviceclass']._loaded_options = None + _globals['_MVMINSTANCE'].fields_by_name['serviceclass']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_MVMSERVICEGETREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_MVMSERVICEGETREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEGETREQUEST'].fields_by_name['tenant']._loaded_options = None + _globals['_MVMSERVICEGETREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_MVMSERVICECREATEWINDOWSREQUEST'].fields_by_name['domain_uuid']._loaded_options = None + _globals['_MVMSERVICECREATEWINDOWSREQUEST'].fields_by_name['domain_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICECREATEWINDOWSREQUEST'].fields_by_name['disks']._loaded_options = None + _globals['_MVMSERVICECREATEWINDOWSREQUEST'].fields_by_name['disks']._serialized_options = b'\272H\005\222\001\002\010\001' + _globals['_MVMSERVICECREATELINUXREQUEST'].fields_by_name['ldap_uuid']._loaded_options = None + _globals['_MVMSERVICECREATELINUXREQUEST'].fields_by_name['ldap_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICECREATELINUXREQUEST'].fields_by_name['disks']._loaded_options = None + _globals['_MVMSERVICECREATELINUXREQUEST'].fields_by_name['disks']._serialized_options = b'\272H\005\222\001\002\010\001' + _globals['_MVMSERVICECREATEREQUEST'].oneofs_by_name['mvmtype']._loaded_options = None + _globals['_MVMSERVICECREATEREQUEST'].oneofs_by_name['mvmtype']._serialized_options = b'\272H\002\010\001' + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['project_uuid']._loaded_options = None + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['project_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['name']._loaded_options = None + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['os_uuid']._loaded_options = None + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['os_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['vlan_uuid']._loaded_options = None + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['vlan_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['location_uuid']._loaded_options = None + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['location_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['contact_uuid']._loaded_options = None + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['availability']._loaded_options = None + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['availability']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['serviceclass']._loaded_options = None + _globals['_MVMSERVICECREATEREQUEST'].fields_by_name['serviceclass']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_LINUXDISK'].fields_by_name['uuid']._loaded_options = None + _globals['_LINUXDISK'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_LINUXDISK'].fields_by_name['disk_type']._loaded_options = None + _globals['_LINUXDISK'].fields_by_name['disk_type']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_WINDOWSDISK'].fields_by_name['uuid']._loaded_options = None + _globals['_WINDOWSDISK'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_WINDOWSDISK'].fields_by_name['disk_type']._loaded_options = None + _globals['_WINDOWSDISK'].fields_by_name['disk_type']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_MVMSERVICEUPDATEREQUEST'].oneofs_by_name['action']._loaded_options = None + _globals['_MVMSERVICEUPDATEREQUEST'].oneofs_by_name['action']._serialized_options = b'\272H\002\010\001' + _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._loaded_options = None + _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._serialized_options = b'\272H\003\310\001\001' + _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['cpu']._loaded_options = None + _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['cpu']._serialized_options = b'\272H\006*\004\030@(\001' + _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['ram']._loaded_options = None + _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['ram']._serialized_options = b'\272H\004*\002 \000' + _globals['_SERVICECLASSCHANGE'].fields_by_name['serviceclass']._loaded_options = None + _globals['_SERVICECLASSCHANGE'].fields_by_name['serviceclass']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_CONTACTCHANGE'].fields_by_name['contact_uuid']._loaded_options = None + _globals['_CONTACTCHANGE'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICELISTREQUEST'].fields_by_name['tenant']._loaded_options = None + _globals['_MVMSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_MVMSERVICEDELETEREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_MVMSERVICEDELETEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEDELETEREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_MVMSERVICEDELETEREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEVALIDATECREATEREQUEST'].fields_by_name['create']._loaded_options = None + _globals['_MVMSERVICEVALIDATECREATEREQUEST'].fields_by_name['create']._serialized_options = b'\272H\003\310\001\001' + _globals['_MVMSERVICEVALIDATEADDDISKREQUEST'].fields_by_name['add_disk']._loaded_options = None + _globals['_MVMSERVICEVALIDATEADDDISKREQUEST'].fields_by_name['add_disk']._serialized_options = b'\272H\003\310\001\001' + _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST'].fields_by_name['update_disk']._loaded_options = None + _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST'].fields_by_name['update_disk']._serialized_options = b'\272H\003\310\001\001' + _globals['_MVMSERVICEADDDISKREQUEST'].oneofs_by_name['disk']._loaded_options = None + _globals['_MVMSERVICEADDDISKREQUEST'].oneofs_by_name['disk']._serialized_options = b'\272H\002\010\001' + _globals['_MVMSERVICEADDDISKREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_MVMSERVICEADDDISKREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEADDDISKREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_MVMSERVICEADDDISKREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEUPDATEDISKREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_MVMSERVICEUPDATEDISKREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEUPDATEDISKREQUEST'].fields_by_name['disk_uuid']._loaded_options = None + _globals['_MVMSERVICEUPDATEDISKREQUEST'].fields_by_name['disk_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEUPDATEDISKREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_MVMSERVICEUPDATEDISKREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEDELETEDISKREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_MVMSERVICEDELETEDISKREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEDELETEDISKREQUEST'].fields_by_name['disk_uuid']._loaded_options = None + _globals['_MVMSERVICEDELETEDISKREQUEST'].fields_by_name['disk_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEDELETEDISKREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_MVMSERVICEDELETEDISKREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST'].fields_by_name['interface_uuid']._loaded_options = None + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST'].fields_by_name['interface_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST'].fields_by_name['target_mvm_uuid']._loaded_options = None + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST'].fields_by_name['target_mvm_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST'].fields_by_name['interface_uuid']._loaded_options = None + _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST'].fields_by_name['interface_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST'].fields_by_name['add_network_interface']._loaded_options = None + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST'].fields_by_name['add_network_interface']._serialized_options = b'\272H\003\310\001\001' + _globals['_MVMSERVICE'].methods_by_name['Get']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['Get']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' + _globals['_MVMSERVICE'].methods_by_name['Create']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['Create']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_MVMSERVICE'].methods_by_name['Update']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['Update']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_MVMSERVICE'].methods_by_name['List']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' + _globals['_MVMSERVICE'].methods_by_name['Delete']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['Delete']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_MVMSERVICE'].methods_by_name['AddDisk']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['AddDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_MVMSERVICE'].methods_by_name['UpdateDisk']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['UpdateDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_MVMSERVICE'].methods_by_name['DeleteDisk']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['DeleteDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_MVMSERVICE'].methods_by_name['AddNetworkInterface']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['AddNetworkInterface']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_MVMSERVICE'].methods_by_name['MoveNetworkInterface']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['MoveNetworkInterface']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_MVMSERVICE'].methods_by_name['DeleteNetworkInterface']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['DeleteNetworkInterface']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_MVMSERVICE'].methods_by_name['ValidateCreate']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['ValidateCreate']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' + _globals['_MVMSERVICE'].methods_by_name['ValidateAddDisk']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['ValidateAddDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' + _globals['_MVMSERVICE'].methods_by_name['ValidateUpdateDisk']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['ValidateUpdateDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' + _globals['_MVMSERVICE'].methods_by_name['ValidateAddNetworkInterface']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['ValidateAddNetworkInterface']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' + _globals['_AVAILABILITY']._serialized_start=6510 + _globals['_AVAILABILITY']._serialized_end=6676 + _globals['_SERVICECLASS']._serialized_start=6679 + _globals['_SERVICECLASS']._serialized_end=6826 + _globals['_DISKTYPE']._serialized_start=6829 + _globals['_DISKTYPE']._serialized_end=6962 + _globals['_LINUXDETAILS']._serialized_start=166 + _globals['_LINUXDETAILS']._serialized_end=311 + _globals['_WINDOWSDETAILS']._serialized_start=314 + _globals['_WINDOWSDETAILS']._serialized_end=471 + _globals['_NETWORKINTERFACE']._serialized_start=473 + _globals['_NETWORKINTERFACE']._serialized_end=596 + _globals['_MVMINSTANCE']._serialized_start=599 + _globals['_MVMINSTANCE']._serialized_end=1531 + _globals['_MVMSERVICEGETREQUEST']._serialized_start=1533 + _globals['_MVMSERVICEGETREQUEST']._serialized_end=1636 + _globals['_MVMSERVICEGETRESPONSE']._serialized_start=1638 + _globals['_MVMSERVICEGETRESPONSE']._serialized_end=1709 + _globals['_MVMSERVICECREATEWINDOWSREQUEST']._serialized_start=1712 + _globals['_MVMSERVICECREATEWINDOWSREQUEST']._serialized_end=1849 + _globals['_MVMSERVICECREATELINUXREQUEST']._serialized_start=1852 + _globals['_MVMSERVICECREATELINUXREQUEST']._serialized_end=1981 + _globals['_MVMSERVICECREATEREQUEST']._serialized_start=1984 + _globals['_MVMSERVICECREATEREQUEST']._serialized_end=2727 + _globals['_LINUXDISK']._serialized_start=2730 + _globals['_LINUXDISK']._serialized_end=3013 + _globals['_WINDOWSDISK']._serialized_start=3016 + _globals['_WINDOWSDISK']._serialized_end=3302 + _globals['_MVMSERVICECREATERESPONSE']._serialized_start=3304 + _globals['_MVMSERVICECREATERESPONSE']._serialized_end=3330 + _globals['_MVMSERVICEUPDATEREQUEST']._serialized_start=3333 + _globals['_MVMSERVICEUPDATEREQUEST']._serialized_end=3766 + _globals['_PERFORMANCECLASSCHANGE']._serialized_start=3768 + _globals['_PERFORMANCECLASSCHANGE']._serialized_end=3848 + _globals['_SERVICECLASSCHANGE']._serialized_start=3850 + _globals['_SERVICECLASSCHANGE']._serialized_end=3947 + _globals['_CONTACTCHANGE']._serialized_start=3949 + _globals['_CONTACTCHANGE']._serialized_end=4009 + _globals['_MVMSERVICEUPDATERESPONSE']._serialized_start=4011 + _globals['_MVMSERVICEUPDATERESPONSE']._serialized_end=4037 + _globals['_MVMSERVICELISTREQUEST']._serialized_start=4039 + _globals['_MVMSERVICELISTREQUEST']._serialized_end=4115 + _globals['_MVMSERVICELISTRESPONSE']._serialized_start=4117 + _globals['_MVMSERVICELISTRESPONSE']._serialized_end=4191 + _globals['_MVMSERVICEDELETEREQUEST']._serialized_start=4193 + _globals['_MVMSERVICEDELETEREQUEST']._serialized_end=4319 + _globals['_MVMSERVICEDELETERESPONSE']._serialized_start=4321 + _globals['_MVMSERVICEDELETERESPONSE']._serialized_end=4347 + _globals['_MVMSERVICEVALIDATECREATEREQUEST']._serialized_start=4349 + _globals['_MVMSERVICEVALIDATECREATEREQUEST']._serialized_end=4456 + _globals['_MVMSERVICEVALIDATECREATERESPONSE']._serialized_start=4458 + _globals['_MVMSERVICEVALIDATECREATERESPONSE']._serialized_end=4492 + _globals['_MVMSERVICEVALIDATEADDDISKREQUEST']._serialized_start=4494 + _globals['_MVMSERVICEVALIDATEADDDISKREQUEST']._serialized_end=4606 + _globals['_MVMSERVICEVALIDATEADDDISKRESPONSE']._serialized_start=4608 + _globals['_MVMSERVICEVALIDATEADDDISKRESPONSE']._serialized_end=4643 + _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_start=4645 + _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_end=4769 + _globals['_MVMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_start=4771 + _globals['_MVMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_end=4809 + _globals['_MVMSERVICEADDDISKRESPONSE']._serialized_start=4811 + _globals['_MVMSERVICEADDDISKRESPONSE']._serialized_end=4838 + _globals['_MVMSERVICEUPDATEDISKRESPONSE']._serialized_start=4840 + _globals['_MVMSERVICEUPDATEDISKRESPONSE']._serialized_end=4870 + _globals['_MVMSERVICEDELETEDISKRESPONSE']._serialized_start=4872 + _globals['_MVMSERVICEDELETEDISKRESPONSE']._serialized_end=4902 + _globals['_MVMSERVICEADDDISKREQUEST']._serialized_start=4905 + _globals['_MVMSERVICEADDDISKREQUEST']._serialized_end=5157 + _globals['_MVMSERVICEUPDATEDISKREQUEST']._serialized_start=5160 + _globals['_MVMSERVICEUPDATEDISKREQUEST']._serialized_end=5417 + _globals['_MVMSERVICEDELETEDISKREQUEST']._serialized_start=5420 + _globals['_MVMSERVICEDELETEDISKREQUEST']._serialized_end=5589 + _globals['_MVMSERVICEADDNETWORKINTERFACERESPONSE']._serialized_start=5591 + _globals['_MVMSERVICEADDNETWORKINTERFACERESPONSE']._serialized_end=5630 + _globals['_MVMSERVICEMOVENETWORKINTERFACERESPONSE']._serialized_start=5632 + _globals['_MVMSERVICEMOVENETWORKINTERFACERESPONSE']._serialized_end=5672 + _globals['_MVMSERVICEDELETENETWORKINTERFACERESPONSE']._serialized_start=5674 + _globals['_MVMSERVICEDELETENETWORKINTERFACERESPONSE']._serialized_end=5716 + _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST']._serialized_start=5719 + _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST']._serialized_end=5858 + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST']._serialized_start=5861 + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST']._serialized_end=6100 + _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST']._serialized_start=6103 + _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST']._serialized_end=6294 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST']._serialized_start=6297 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST']._serialized_end=6458 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACERESPONSE']._serialized_start=6460 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACERESPONSE']._serialized_end=6507 + _globals['_MVMSERVICE']._serialized_start=6965 + _globals['_MVMSERVICE']._serialized_end=8882 +# @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/vm_pb2.pyi b/python/fits/api/mvm/v1/mvm_pb2.pyi similarity index 78% rename from python/fits/api/vm/v1/vm_pb2.pyi rename to python/fits/api/mvm/v1/mvm_pb2.pyi index 2da9562..9eaddcf 100644 --- a/python/fits/api/vm/v1/vm_pb2.pyi +++ b/python/fits/api/mvm/v1/mvm_pb2.pyi @@ -1,7 +1,7 @@ from buf.validate import validate_pb2 as _validate_pb2 +from fits.api.mvm.v1 import vlan_pb2 as _vlan_pb2 from fits.api.v1 import common_pb2 as _common_pb2 from fits.api.v1 import predefined_rules_pb2 as _predefined_rules_pb2 -from fits.api.vm.v1 import vlan_pb2 as _vlan_pb2 from google.protobuf.internal import containers as _containers from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper from google.protobuf import descriptor as _descriptor @@ -25,6 +25,13 @@ class ServiceClass(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): SERVICE_CLASS_SZ1: _ClassVar[ServiceClass] SERVICE_CLASS_SZ2: _ClassVar[ServiceClass] SERVICE_CLASS_SZ3: _ClassVar[ServiceClass] + +class DiskType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + DISK_TYPE_UNSPECIFIED: _ClassVar[DiskType] + DISK_TYPE_OS: _ClassVar[DiskType] + DISK_TYPE_SYSTEM: _ClassVar[DiskType] + DISK_TYPE_DATA: _ClassVar[DiskType] AVAILABILITY_UNSPECIFIED: Availability AVAILABILITY_V0: Availability AVAILABILITY_V1: Availability @@ -34,6 +41,10 @@ SERVICE_CLASS_UNSPECIFIED: ServiceClass SERVICE_CLASS_SZ1: ServiceClass SERVICE_CLASS_SZ2: ServiceClass SERVICE_CLASS_SZ3: ServiceClass +DISK_TYPE_UNSPECIFIED: DiskType +DISK_TYPE_OS: DiskType +DISK_TYPE_SYSTEM: DiskType +DISK_TYPE_DATA: DiskType class LinuxDetails(_message.Message): __slots__ = ("disks", "ldap_uuid", "ldap_fqdn") @@ -65,7 +76,7 @@ class NetworkInterface(_message.Message): macaddress: str def __init__(self, uuid: _Optional[str] = ..., ipaddress: _Optional[str] = ..., macaddress: _Optional[str] = ...) -> None: ... -class VMInstance(_message.Message): +class MVMInstance(_message.Message): __slots__ = ("uuid", "meta", "fqdn", "tenant", "project_uuid", "os_uuid", "location_uuid", "contact_uuid", "cpu", "ram", "backup", "status", "status_info", "availability", "serviceclass", "windows_details", "linux_details", "interfaces", "vlan", "order_number", "contract") UUID_FIELD_NUMBER: _ClassVar[int] META_FIELD_NUMBER: _ClassVar[int] @@ -106,12 +117,12 @@ class VMInstance(_message.Message): windows_details: WindowsDetails linux_details: LinuxDetails interfaces: _containers.RepeatedCompositeFieldContainer[NetworkInterface] - vlan: _vlan_pb2.Vlan + vlan: _vlan_pb2.VLAN order_number: str contract: bool - def __init__(self, uuid: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., fqdn: _Optional[str] = ..., tenant: _Optional[str] = ..., project_uuid: _Optional[str] = ..., os_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., backup: _Optional[bool] = ..., status: _Optional[str] = ..., status_info: _Optional[str] = ..., availability: _Optional[_Union[Availability, str]] = ..., serviceclass: _Optional[_Union[ServiceClass, str]] = ..., windows_details: _Optional[_Union[WindowsDetails, _Mapping]] = ..., linux_details: _Optional[_Union[LinuxDetails, _Mapping]] = ..., interfaces: _Optional[_Iterable[_Union[NetworkInterface, _Mapping]]] = ..., vlan: _Optional[_Union[_vlan_pb2.Vlan, _Mapping]] = ..., order_number: _Optional[str] = ..., contract: _Optional[bool] = ...) -> None: ... + def __init__(self, uuid: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., fqdn: _Optional[str] = ..., tenant: _Optional[str] = ..., project_uuid: _Optional[str] = ..., os_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., backup: _Optional[bool] = ..., status: _Optional[str] = ..., status_info: _Optional[str] = ..., availability: _Optional[_Union[Availability, str]] = ..., serviceclass: _Optional[_Union[ServiceClass, str]] = ..., windows_details: _Optional[_Union[WindowsDetails, _Mapping]] = ..., linux_details: _Optional[_Union[LinuxDetails, _Mapping]] = ..., interfaces: _Optional[_Iterable[_Union[NetworkInterface, _Mapping]]] = ..., vlan: _Optional[_Union[_vlan_pb2.VLAN, _Mapping]] = ..., order_number: _Optional[str] = ..., contract: _Optional[bool] = ...) -> None: ... -class VMServiceGetRequest(_message.Message): +class MVMServiceGetRequest(_message.Message): __slots__ = ("uuid", "tenant") UUID_FIELD_NUMBER: _ClassVar[int] TENANT_FIELD_NUMBER: _ClassVar[int] @@ -119,13 +130,13 @@ class VMServiceGetRequest(_message.Message): tenant: str def __init__(self, uuid: _Optional[str] = ..., tenant: _Optional[str] = ...) -> None: ... -class VMServiceGetResponse(_message.Message): - __slots__ = ("vm",) - VM_FIELD_NUMBER: _ClassVar[int] - vm: VMInstance - def __init__(self, vm: _Optional[_Union[VMInstance, _Mapping]] = ...) -> None: ... +class MVMServiceGetResponse(_message.Message): + __slots__ = ("mvm",) + MVM_FIELD_NUMBER: _ClassVar[int] + mvm: MVMInstance + def __init__(self, mvm: _Optional[_Union[MVMInstance, _Mapping]] = ...) -> None: ... -class VMServiceCreateWindowsRequest(_message.Message): +class MVMServiceCreateWindowsRequest(_message.Message): __slots__ = ("domain_uuid", "disks") DOMAIN_UUID_FIELD_NUMBER: _ClassVar[int] DISKS_FIELD_NUMBER: _ClassVar[int] @@ -133,7 +144,7 @@ class VMServiceCreateWindowsRequest(_message.Message): disks: _containers.RepeatedCompositeFieldContainer[WindowsDisk] def __init__(self, domain_uuid: _Optional[str] = ..., disks: _Optional[_Iterable[_Union[WindowsDisk, _Mapping]]] = ...) -> None: ... -class VMServiceCreateLinuxRequest(_message.Message): +class MVMServiceCreateLinuxRequest(_message.Message): __slots__ = ("ldap_uuid", "disks") LDAP_UUID_FIELD_NUMBER: _ClassVar[int] DISKS_FIELD_NUMBER: _ClassVar[int] @@ -141,7 +152,7 @@ class VMServiceCreateLinuxRequest(_message.Message): disks: _containers.RepeatedCompositeFieldContainer[LinuxDisk] def __init__(self, ldap_uuid: _Optional[str] = ..., disks: _Optional[_Iterable[_Union[LinuxDisk, _Mapping]]] = ...) -> None: ... -class VMServiceCreateRequest(_message.Message): +class MVMServiceCreateRequest(_message.Message): __slots__ = ("project_uuid", "name", "os_uuid", "vlan_uuid", "location_uuid", "contact_uuid", "cpu", "ram", "order_number", "labels", "backup", "availability", "serviceclass", "windows", "linux") PROJECT_UUID_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] @@ -171,43 +182,47 @@ class VMServiceCreateRequest(_message.Message): backup: bool availability: Availability serviceclass: ServiceClass - windows: VMServiceCreateWindowsRequest - linux: VMServiceCreateLinuxRequest - def __init__(self, project_uuid: _Optional[str] = ..., name: _Optional[str] = ..., os_uuid: _Optional[str] = ..., vlan_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., order_number: _Optional[str] = ..., labels: _Optional[_Union[_common_pb2.Labels, _Mapping]] = ..., backup: _Optional[bool] = ..., availability: _Optional[_Union[Availability, str]] = ..., serviceclass: _Optional[_Union[ServiceClass, str]] = ..., windows: _Optional[_Union[VMServiceCreateWindowsRequest, _Mapping]] = ..., linux: _Optional[_Union[VMServiceCreateLinuxRequest, _Mapping]] = ...) -> None: ... + windows: MVMServiceCreateWindowsRequest + linux: MVMServiceCreateLinuxRequest + def __init__(self, project_uuid: _Optional[str] = ..., name: _Optional[str] = ..., os_uuid: _Optional[str] = ..., vlan_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., order_number: _Optional[str] = ..., labels: _Optional[_Union[_common_pb2.Labels, _Mapping]] = ..., backup: _Optional[bool] = ..., availability: _Optional[_Union[Availability, str]] = ..., serviceclass: _Optional[_Union[ServiceClass, str]] = ..., windows: _Optional[_Union[MVMServiceCreateWindowsRequest, _Mapping]] = ..., linux: _Optional[_Union[MVMServiceCreateLinuxRequest, _Mapping]] = ...) -> None: ... class LinuxDisk(_message.Message): - __slots__ = ("uuid", "label", "auto_extend", "size", "mount_point") + __slots__ = ("uuid", "label", "auto_extend", "size", "mount_point", "disk_type") UUID_FIELD_NUMBER: _ClassVar[int] LABEL_FIELD_NUMBER: _ClassVar[int] AUTO_EXTEND_FIELD_NUMBER: _ClassVar[int] SIZE_FIELD_NUMBER: _ClassVar[int] MOUNT_POINT_FIELD_NUMBER: _ClassVar[int] + DISK_TYPE_FIELD_NUMBER: _ClassVar[int] uuid: str label: str auto_extend: bool size: int mount_point: str - def __init__(self, uuid: _Optional[str] = ..., label: _Optional[str] = ..., auto_extend: _Optional[bool] = ..., size: _Optional[int] = ..., mount_point: _Optional[str] = ...) -> None: ... + disk_type: DiskType + def __init__(self, uuid: _Optional[str] = ..., label: _Optional[str] = ..., auto_extend: _Optional[bool] = ..., size: _Optional[int] = ..., mount_point: _Optional[str] = ..., disk_type: _Optional[_Union[DiskType, str]] = ...) -> None: ... class WindowsDisk(_message.Message): - __slots__ = ("uuid", "label", "auto_extend", "size", "driveletter") + __slots__ = ("uuid", "label", "auto_extend", "size", "driveletter", "disk_type") UUID_FIELD_NUMBER: _ClassVar[int] LABEL_FIELD_NUMBER: _ClassVar[int] AUTO_EXTEND_FIELD_NUMBER: _ClassVar[int] SIZE_FIELD_NUMBER: _ClassVar[int] DRIVELETTER_FIELD_NUMBER: _ClassVar[int] + DISK_TYPE_FIELD_NUMBER: _ClassVar[int] uuid: str label: str auto_extend: bool size: int driveletter: str - def __init__(self, uuid: _Optional[str] = ..., label: _Optional[str] = ..., auto_extend: _Optional[bool] = ..., size: _Optional[int] = ..., driveletter: _Optional[str] = ...) -> None: ... + disk_type: DiskType + def __init__(self, uuid: _Optional[str] = ..., label: _Optional[str] = ..., auto_extend: _Optional[bool] = ..., size: _Optional[int] = ..., driveletter: _Optional[str] = ..., disk_type: _Optional[_Union[DiskType, str]] = ...) -> None: ... -class VMServiceCreateResponse(_message.Message): +class MVMServiceCreateResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... -class VMServiceUpdateRequest(_message.Message): +class MVMServiceUpdateRequest(_message.Message): __slots__ = ("uuid", "project", "order_number", "update_meta", "performance_class", "service_class", "contact") UUID_FIELD_NUMBER: _ClassVar[int] PROJECT_FIELD_NUMBER: _ClassVar[int] @@ -245,23 +260,23 @@ class ContactChange(_message.Message): contact_uuid: str def __init__(self, contact_uuid: _Optional[str] = ...) -> None: ... -class VMServiceUpdateResponse(_message.Message): +class MVMServiceUpdateResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... -class VMServiceListRequest(_message.Message): +class MVMServiceListRequest(_message.Message): __slots__ = ("tenant",) TENANT_FIELD_NUMBER: _ClassVar[int] tenant: str def __init__(self, tenant: _Optional[str] = ...) -> None: ... -class VMServiceListResponse(_message.Message): - __slots__ = ("vms",) - VMS_FIELD_NUMBER: _ClassVar[int] - vms: _containers.RepeatedCompositeFieldContainer[VMInstance] - def __init__(self, vms: _Optional[_Iterable[_Union[VMInstance, _Mapping]]] = ...) -> None: ... +class MVMServiceListResponse(_message.Message): + __slots__ = ("mvms",) + MVMS_FIELD_NUMBER: _ClassVar[int] + mvms: _containers.RepeatedCompositeFieldContainer[MVMInstance] + def __init__(self, mvms: _Optional[_Iterable[_Union[MVMInstance, _Mapping]]] = ...) -> None: ... -class VMServiceDeleteRequest(_message.Message): +class MVMServiceDeleteRequest(_message.Message): __slots__ = ("project", "uuid", "order_number") PROJECT_FIELD_NUMBER: _ClassVar[int] UUID_FIELD_NUMBER: _ClassVar[int] @@ -271,53 +286,53 @@ class VMServiceDeleteRequest(_message.Message): order_number: str def __init__(self, project: _Optional[str] = ..., uuid: _Optional[str] = ..., order_number: _Optional[str] = ...) -> None: ... -class VMServiceDeleteResponse(_message.Message): +class MVMServiceDeleteResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... -class VMServiceValidateCreateRequest(_message.Message): +class MVMServiceValidateCreateRequest(_message.Message): __slots__ = ("create",) CREATE_FIELD_NUMBER: _ClassVar[int] - create: VMServiceCreateRequest - def __init__(self, create: _Optional[_Union[VMServiceCreateRequest, _Mapping]] = ...) -> None: ... + create: MVMServiceCreateRequest + def __init__(self, create: _Optional[_Union[MVMServiceCreateRequest, _Mapping]] = ...) -> None: ... -class VMServiceValidateCreateResponse(_message.Message): +class MVMServiceValidateCreateResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... -class VMServiceValidateAddDiskRequest(_message.Message): +class MVMServiceValidateAddDiskRequest(_message.Message): __slots__ = ("add_disk",) ADD_DISK_FIELD_NUMBER: _ClassVar[int] - add_disk: VMServiceAddDiskRequest - def __init__(self, add_disk: _Optional[_Union[VMServiceAddDiskRequest, _Mapping]] = ...) -> None: ... + add_disk: MVMServiceAddDiskRequest + def __init__(self, add_disk: _Optional[_Union[MVMServiceAddDiskRequest, _Mapping]] = ...) -> None: ... -class VMServiceValidateAddDiskResponse(_message.Message): +class MVMServiceValidateAddDiskResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... -class VMServiceValidateUpdateDiskRequest(_message.Message): +class MVMServiceValidateUpdateDiskRequest(_message.Message): __slots__ = ("update_disk",) UPDATE_DISK_FIELD_NUMBER: _ClassVar[int] - update_disk: VMServiceUpdateDiskRequest - def __init__(self, update_disk: _Optional[_Union[VMServiceUpdateDiskRequest, _Mapping]] = ...) -> None: ... + update_disk: MVMServiceUpdateDiskRequest + def __init__(self, update_disk: _Optional[_Union[MVMServiceUpdateDiskRequest, _Mapping]] = ...) -> None: ... -class VMServiceValidateUpdateDiskResponse(_message.Message): +class MVMServiceValidateUpdateDiskResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... -class VMServiceAddDiskResponse(_message.Message): +class MVMServiceAddDiskResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... -class VMServiceUpdateDiskResponse(_message.Message): +class MVMServiceUpdateDiskResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... -class VMServiceDeleteDiskResponse(_message.Message): +class MVMServiceDeleteDiskResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... -class VMServiceAddDiskRequest(_message.Message): +class MVMServiceAddDiskRequest(_message.Message): __slots__ = ("uuid", "project", "order_number", "linux", "windows") UUID_FIELD_NUMBER: _ClassVar[int] PROJECT_FIELD_NUMBER: _ClassVar[int] @@ -331,7 +346,7 @@ class VMServiceAddDiskRequest(_message.Message): windows: WindowsDisk def __init__(self, uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ..., linux: _Optional[_Union[LinuxDisk, _Mapping]] = ..., windows: _Optional[_Union[WindowsDisk, _Mapping]] = ...) -> None: ... -class VMServiceUpdateDiskRequest(_message.Message): +class MVMServiceUpdateDiskRequest(_message.Message): __slots__ = ("uuid", "disk_uuid", "project", "order_number", "auto_extend", "size") UUID_FIELD_NUMBER: _ClassVar[int] DISK_UUID_FIELD_NUMBER: _ClassVar[int] @@ -347,7 +362,7 @@ class VMServiceUpdateDiskRequest(_message.Message): size: int def __init__(self, uuid: _Optional[str] = ..., disk_uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ..., auto_extend: _Optional[bool] = ..., size: _Optional[int] = ...) -> None: ... -class VMServiceDeleteDiskRequest(_message.Message): +class MVMServiceDeleteDiskRequest(_message.Message): __slots__ = ("uuid", "disk_uuid", "project", "order_number") UUID_FIELD_NUMBER: _ClassVar[int] DISK_UUID_FIELD_NUMBER: _ClassVar[int] @@ -359,19 +374,19 @@ class VMServiceDeleteDiskRequest(_message.Message): order_number: str def __init__(self, uuid: _Optional[str] = ..., disk_uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ...) -> None: ... -class VMServiceAddIPResponse(_message.Message): +class MVMServiceAddNetworkInterfaceResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... -class VMServiceMoveIPResponse(_message.Message): +class MVMServiceMoveNetworkInterfaceResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... -class VMServiceDeleteIPResponse(_message.Message): +class MVMServiceDeleteNetworkInterfaceResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... -class VMServiceAddIPRequest(_message.Message): +class MVMServiceAddNetworkInterfaceRequest(_message.Message): __slots__ = ("uuid", "project", "order_number") UUID_FIELD_NUMBER: _ClassVar[int] PROJECT_FIELD_NUMBER: _ClassVar[int] @@ -381,21 +396,21 @@ class VMServiceAddIPRequest(_message.Message): order_number: str def __init__(self, uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ...) -> None: ... -class VMServiceMoveIPRequest(_message.Message): - __slots__ = ("uuid", "interface_uuid", "project", "order_number", "target_vm_uuid") +class MVMServiceMoveNetworkInterfaceRequest(_message.Message): + __slots__ = ("uuid", "interface_uuid", "project", "order_number", "target_mvm_uuid") UUID_FIELD_NUMBER: _ClassVar[int] INTERFACE_UUID_FIELD_NUMBER: _ClassVar[int] PROJECT_FIELD_NUMBER: _ClassVar[int] ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] - TARGET_VM_UUID_FIELD_NUMBER: _ClassVar[int] + TARGET_MVM_UUID_FIELD_NUMBER: _ClassVar[int] uuid: str interface_uuid: str project: str order_number: str - target_vm_uuid: str - def __init__(self, uuid: _Optional[str] = ..., interface_uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ..., target_vm_uuid: _Optional[str] = ...) -> None: ... + target_mvm_uuid: str + def __init__(self, uuid: _Optional[str] = ..., interface_uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ..., target_mvm_uuid: _Optional[str] = ...) -> None: ... -class VMServiceDeleteIPRequest(_message.Message): +class MVMServiceDeleteNetworkInterfaceRequest(_message.Message): __slots__ = ("uuid", "interface_uuid", "project", "order_number") UUID_FIELD_NUMBER: _ClassVar[int] INTERFACE_UUID_FIELD_NUMBER: _ClassVar[int] @@ -407,12 +422,12 @@ class VMServiceDeleteIPRequest(_message.Message): order_number: str def __init__(self, uuid: _Optional[str] = ..., interface_uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ...) -> None: ... -class VMServiceValidateAddIPRequest(_message.Message): - __slots__ = ("add_ip",) - ADD_IP_FIELD_NUMBER: _ClassVar[int] - add_ip: VMServiceAddIPRequest - def __init__(self, add_ip: _Optional[_Union[VMServiceAddIPRequest, _Mapping]] = ...) -> None: ... +class MVMServiceValidateAddNetworkInterfaceRequest(_message.Message): + __slots__ = ("add_network_interface",) + ADD_NETWORK_INTERFACE_FIELD_NUMBER: _ClassVar[int] + add_network_interface: MVMServiceAddNetworkInterfaceRequest + def __init__(self, add_network_interface: _Optional[_Union[MVMServiceAddNetworkInterfaceRequest, _Mapping]] = ...) -> None: ... -class VMServiceValidateAddIPResponse(_message.Message): +class MVMServiceValidateAddNetworkInterfaceResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... diff --git a/python/fits/api/vm/v1/os_connect.py b/python/fits/api/mvm/v1/os_connect.py similarity index 65% rename from python/fits/api/vm/v1/os_connect.py rename to python/fits/api/mvm/v1/os_connect.py index 3464251..a09fc58 100644 --- a/python/fits/api/vm/v1/os_connect.py +++ b/python/fits/api/mvm/v1/os_connect.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! -# source: fits/api/vm/v1/os.proto +# source: fits/api/mvm/v1/os.proto from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping from typing import Protocol @@ -14,11 +14,11 @@ from connectrpc.method import IdempotencyLevel, MethodInfo from connectrpc.request import Headers, RequestContext from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync -import fits.api.vm.v1.os_pb2 as fits_dot_api_dot_vm_dot_v1_dot_os__pb2 +import fits.api.mvm.v1.os_pb2 as fits_dot_api_dot_mvm_dot_v1_dot_os__pb2 class OSService(Protocol): - async def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse: + async def list(self, request: fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") @@ -27,12 +27,12 @@ def __init__(self, service: OSService | AsyncGenerator[OSService], *, intercepto super().__init__( service=service, endpoints=lambda svc: { - "/fits.api.vm.v1.OSService/List": Endpoint.unary( + "/fits.api.mvm.v1.OSService/List": Endpoint.unary( method=MethodInfo( name="List", - service_name="fits.api.vm.v1.OSService", - input=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse, + service_name="fits.api.mvm.v1.OSService", + input=fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), function=svc.list, @@ -47,24 +47,24 @@ def __init__(self, service: OSService | AsyncGenerator[OSService], *, intercepto @property def path(self) -> str: """Returns the URL path to mount the application to when serving multiple applications.""" - return "/fits.api.vm.v1.OSService" + return "/fits.api.mvm.v1.OSService" class OSServiceClient(ConnectClient): async def list( self, - request: fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, + request: fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListRequest, *, headers: Headers | Mapping[str, str] | None = None, timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse: + ) -> fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListResponse: return await self.execute_unary( request=request, method=MethodInfo( name="List", - service_name="fits.api.vm.v1.OSService", - input=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse, + service_name="fits.api.mvm.v1.OSService", + input=fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), headers=headers, @@ -76,7 +76,7 @@ async def list( class OSServiceSync(Protocol): - def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse: + def list(self, request: fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") @@ -84,12 +84,12 @@ class OSServiceWSGIApplication(ConnectWSGIApplication): def __init__(self, service: OSServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( endpoints={ - "/fits.api.vm.v1.OSService/List": EndpointSync.unary( + "/fits.api.mvm.v1.OSService/List": EndpointSync.unary( method=MethodInfo( name="List", - service_name="fits.api.vm.v1.OSService", - input=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse, + service_name="fits.api.mvm.v1.OSService", + input=fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), function=service.list, @@ -104,24 +104,24 @@ def __init__(self, service: OSServiceSync, interceptors: Iterable[InterceptorSyn @property def path(self) -> str: """Returns the URL path to mount the application to when serving multiple applications.""" - return "/fits.api.vm.v1.OSService" + return "/fits.api.mvm.v1.OSService" class OSServiceClientSync(ConnectClientSync): def list( self, - request: fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, + request: fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListRequest, *, headers: Headers | Mapping[str, str] | None = None, timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse: + ) -> fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListResponse: return self.execute_unary( request=request, method=MethodInfo( name="List", - service_name="fits.api.vm.v1.OSService", - input=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_os__pb2.OSServiceListResponse, + service_name="fits.api.mvm.v1.OSService", + input=fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_os__pb2.OSServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), headers=headers, diff --git a/python/fits/api/vm/v1/os_pb2.py b/python/fits/api/mvm/v1/os_pb2.py similarity index 51% rename from python/fits/api/vm/v1/os_pb2.py rename to python/fits/api/mvm/v1/os_pb2.py index cd46a80..d525c66 100644 --- a/python/fits/api/vm/v1/os_pb2.py +++ b/python/fits/api/mvm/v1/os_pb2.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE -# source: fits/api/vm/v1/os.proto +# source: fits/api/mvm/v1/os.proto # Protobuf Python Version: 7.36.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor @@ -15,7 +15,7 @@ 36, 1, '', - 'fits/api/vm/v1/os.proto' + 'fits/api/mvm/v1/os.proto' ) # @@protoc_insertion_point(imports) @@ -27,14 +27,14 @@ from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/os.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x8d\x01\n\x02OS\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x05title\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\x12\x1f\n\x04type\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04type\x12%\n\x07version\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07version\"\x16\n\x14OSServiceListRequest\"X\n\x15OSServiceListResponse\x12?\n\x11operating_systems\x18\x01 \x03(\x0b\x32\x12.fits.api.vm.v1.OSR\x10operatingSystems2m\n\tOSService\x12`\n\x04List\x12$.fits.api.vm.v1.OSServiceListRequest\x1a%.fits.api.vm.v1.OSServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07OsProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66its/api/mvm/v1/os.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x8d\x01\n\x02OS\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x05title\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\x12\x1f\n\x04type\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04type\x12%\n\x07version\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07version\"\x16\n\x14OSServiceListRequest\"Y\n\x15OSServiceListResponse\x12@\n\x11operating_systems\x18\x01 \x03(\x0b\x32\x13.fits.api.mvm.v1.OSR\x10operatingSystems2o\n\tOSService\x12\x62\n\x04List\x12%.fits.api.mvm.v1.OSServiceListRequest\x1a&.fits.api.mvm.v1.OSServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xac\x01\n\x13\x63om.fits.api.mvm.v1B\x07OsProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.vm.v1.os_pb2', _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.mvm.v1.os_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\007OsProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' + _globals['DESCRIPTOR']._serialized_options = b'\n\023com.fits.api.mvm.v1B\007OsProtoP\001Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\242\002\003FAM\252\002\017Fits.Api.Mvm.V1\312\002\017Fits\\Api\\Mvm\\V1\342\002\033Fits\\Api\\Mvm\\V1\\GPBMetadata\352\002\022Fits::Api::Mvm::V1' _globals['_OS'].fields_by_name['uuid']._loaded_options = None _globals['_OS'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_OS'].fields_by_name['title']._loaded_options = None @@ -45,12 +45,12 @@ _globals['_OS'].fields_by_name['version']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_OSSERVICE'].methods_by_name['List']._loaded_options = None _globals['_OSSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' - _globals['_OS']._serialized_start=135 - _globals['_OS']._serialized_end=276 - _globals['_OSSERVICELISTREQUEST']._serialized_start=278 - _globals['_OSSERVICELISTREQUEST']._serialized_end=300 - _globals['_OSSERVICELISTRESPONSE']._serialized_start=302 - _globals['_OSSERVICELISTRESPONSE']._serialized_end=390 - _globals['_OSSERVICE']._serialized_start=392 - _globals['_OSSERVICE']._serialized_end=501 + _globals['_OS']._serialized_start=137 + _globals['_OS']._serialized_end=278 + _globals['_OSSERVICELISTREQUEST']._serialized_start=280 + _globals['_OSSERVICELISTREQUEST']._serialized_end=302 + _globals['_OSSERVICELISTRESPONSE']._serialized_start=304 + _globals['_OSSERVICELISTRESPONSE']._serialized_end=393 + _globals['_OSSERVICE']._serialized_start=395 + _globals['_OSSERVICE']._serialized_end=506 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/os_pb2.pyi b/python/fits/api/mvm/v1/os_pb2.pyi similarity index 100% rename from python/fits/api/vm/v1/os_pb2.pyi rename to python/fits/api/mvm/v1/os_pb2.pyi diff --git a/python/fits/api/vm/v1/stagetype_connect.py b/python/fits/api/mvm/v1/stagetype_connect.py similarity index 62% rename from python/fits/api/vm/v1/stagetype_connect.py rename to python/fits/api/mvm/v1/stagetype_connect.py index a04cc8b..84af511 100644 --- a/python/fits/api/vm/v1/stagetype_connect.py +++ b/python/fits/api/mvm/v1/stagetype_connect.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! -# source: fits/api/vm/v1/stagetype.proto +# source: fits/api/mvm/v1/stagetype.proto from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping from typing import Protocol @@ -14,11 +14,11 @@ from connectrpc.method import IdempotencyLevel, MethodInfo from connectrpc.request import Headers, RequestContext from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync -import fits.api.vm.v1.stagetype_pb2 as fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2 +import fits.api.mvm.v1.stagetype_pb2 as fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2 class StageTypeService(Protocol): - async def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse: + async def list(self, request: fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") @@ -27,12 +27,12 @@ def __init__(self, service: StageTypeService | AsyncGenerator[StageTypeService], super().__init__( service=service, endpoints=lambda svc: { - "/fits.api.vm.v1.StageTypeService/List": Endpoint.unary( + "/fits.api.mvm.v1.StageTypeService/List": Endpoint.unary( method=MethodInfo( name="List", - service_name="fits.api.vm.v1.StageTypeService", - input=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse, + service_name="fits.api.mvm.v1.StageTypeService", + input=fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), function=svc.list, @@ -47,24 +47,24 @@ def __init__(self, service: StageTypeService | AsyncGenerator[StageTypeService], @property def path(self) -> str: """Returns the URL path to mount the application to when serving multiple applications.""" - return "/fits.api.vm.v1.StageTypeService" + return "/fits.api.mvm.v1.StageTypeService" class StageTypeServiceClient(ConnectClient): async def list( self, - request: fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, + request: fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, *, headers: Headers | Mapping[str, str] | None = None, timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse: + ) -> fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse: return await self.execute_unary( request=request, method=MethodInfo( name="List", - service_name="fits.api.vm.v1.StageTypeService", - input=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse, + service_name="fits.api.mvm.v1.StageTypeService", + input=fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), headers=headers, @@ -76,7 +76,7 @@ async def list( class StageTypeServiceSync(Protocol): - def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse: + def list(self, request: fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") @@ -84,12 +84,12 @@ class StageTypeServiceWSGIApplication(ConnectWSGIApplication): def __init__(self, service: StageTypeServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( endpoints={ - "/fits.api.vm.v1.StageTypeService/List": EndpointSync.unary( + "/fits.api.mvm.v1.StageTypeService/List": EndpointSync.unary( method=MethodInfo( name="List", - service_name="fits.api.vm.v1.StageTypeService", - input=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse, + service_name="fits.api.mvm.v1.StageTypeService", + input=fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), function=service.list, @@ -104,24 +104,24 @@ def __init__(self, service: StageTypeServiceSync, interceptors: Iterable[Interce @property def path(self) -> str: """Returns the URL path to mount the application to when serving multiple applications.""" - return "/fits.api.vm.v1.StageTypeService" + return "/fits.api.mvm.v1.StageTypeService" class StageTypeServiceClientSync(ConnectClientSync): def list( self, - request: fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, + request: fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, *, headers: Headers | Mapping[str, str] | None = None, timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse: + ) -> fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse: return self.execute_unary( request=request, method=MethodInfo( name="List", - service_name="fits.api.vm.v1.StageTypeService", - input=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse, + service_name="fits.api.mvm.v1.StageTypeService", + input=fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_stagetype__pb2.StageTypeServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), headers=headers, diff --git a/python/fits/api/mvm/v1/stagetype_pb2.py b/python/fits/api/mvm/v1/stagetype_pb2.py new file mode 100644 index 0000000..d21b008 --- /dev/null +++ b/python/fits/api/mvm/v1/stagetype_pb2.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: fits/api/mvm/v1/stagetype.proto +# Protobuf Python Version: 7.36.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 7, + 36, + 1, + '', + 'fits/api/mvm/v1/stagetype.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 +from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1f\x66its/api/mvm/v1/stagetype.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"L\n\tStageType\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x05title\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\"\x1d\n\x1bStageTypeServiceListRequest\"[\n\x1cStageTypeServiceListResponse\x12;\n\x0bstage_types\x18\x01 \x03(\x0b\x32\x1a.fits.api.mvm.v1.StageTypeR\nstageTypes2\x84\x01\n\x10StageTypeService\x12p\n\x04List\x12,.fits.api.mvm.v1.StageTypeServiceListRequest\x1a-.fits.api.mvm.v1.StageTypeServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xb3\x01\n\x13\x63om.fits.api.mvm.v1B\x0eStagetypeProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.mvm.v1.stagetype_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\023com.fits.api.mvm.v1B\016StagetypeProtoP\001Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\242\002\003FAM\252\002\017Fits.Api.Mvm.V1\312\002\017Fits\\Api\\Mvm\\V1\342\002\033Fits\\Api\\Mvm\\V1\\GPBMetadata\352\002\022Fits::Api::Mvm::V1' + _globals['_STAGETYPE'].fields_by_name['uuid']._loaded_options = None + _globals['_STAGETYPE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_STAGETYPE'].fields_by_name['title']._loaded_options = None + _globals['_STAGETYPE'].fields_by_name['title']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_STAGETYPESERVICE'].methods_by_name['List']._loaded_options = None + _globals['_STAGETYPESERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' + _globals['_STAGETYPE']._serialized_start=143 + _globals['_STAGETYPE']._serialized_end=219 + _globals['_STAGETYPESERVICELISTREQUEST']._serialized_start=221 + _globals['_STAGETYPESERVICELISTREQUEST']._serialized_end=250 + _globals['_STAGETYPESERVICELISTRESPONSE']._serialized_start=252 + _globals['_STAGETYPESERVICELISTRESPONSE']._serialized_end=343 + _globals['_STAGETYPESERVICE']._serialized_start=346 + _globals['_STAGETYPESERVICE']._serialized_end=478 +# @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/stagetype_pb2.pyi b/python/fits/api/mvm/v1/stagetype_pb2.pyi similarity index 100% rename from python/fits/api/vm/v1/stagetype_pb2.pyi rename to python/fits/api/mvm/v1/stagetype_pb2.pyi diff --git a/python/fits/api/vm/v1/vlan_connect.py b/python/fits/api/mvm/v1/vlan_connect.py similarity index 56% rename from python/fits/api/vm/v1/vlan_connect.py rename to python/fits/api/mvm/v1/vlan_connect.py index 54bf6a8..5092f66 100644 --- a/python/fits/api/vm/v1/vlan_connect.py +++ b/python/fits/api/mvm/v1/vlan_connect.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! -# source: fits/api/vm/v1/vlan.proto +# source: fits/api/mvm/v1/vlan.proto from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping from typing import Protocol @@ -14,25 +14,25 @@ from connectrpc.method import IdempotencyLevel, MethodInfo from connectrpc.request import Headers, RequestContext from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync -import fits.api.vm.v1.vlan_pb2 as fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2 +import fits.api.mvm.v1.vlan_pb2 as fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2 -class VlanService(Protocol): - async def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse: +class VLANService(Protocol): + async def list(self, request: fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") -class VlanServiceASGIApplication(ConnectASGIApplication[VlanService]): - def __init__(self, service: VlanService | AsyncGenerator[VlanService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: +class VLANServiceASGIApplication(ConnectASGIApplication[VLANService]): + def __init__(self, service: VLANService | AsyncGenerator[VLANService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( service=service, endpoints=lambda svc: { - "/fits.api.vm.v1.VlanService/List": Endpoint.unary( + "/fits.api.mvm.v1.VLANService/List": Endpoint.unary( method=MethodInfo( name="List", - service_name="fits.api.vm.v1.VlanService", - input=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse, + service_name="fits.api.mvm.v1.VLANService", + input=fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), function=svc.list, @@ -47,24 +47,24 @@ def __init__(self, service: VlanService | AsyncGenerator[VlanService], *, interc @property def path(self) -> str: """Returns the URL path to mount the application to when serving multiple applications.""" - return "/fits.api.vm.v1.VlanService" + return "/fits.api.mvm.v1.VLANService" -class VlanServiceClient(ConnectClient): +class VLANServiceClient(ConnectClient): async def list( self, - request: fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, + request: fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListRequest, *, headers: Headers | Mapping[str, str] | None = None, timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse: + ) -> fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListResponse: return await self.execute_unary( request=request, method=MethodInfo( name="List", - service_name="fits.api.vm.v1.VlanService", - input=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse, + service_name="fits.api.mvm.v1.VLANService", + input=fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), headers=headers, @@ -75,21 +75,21 @@ async def list( -class VlanServiceSync(Protocol): - def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse: +class VLANServiceSync(Protocol): + def list(self, request: fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") -class VlanServiceWSGIApplication(ConnectWSGIApplication): - def __init__(self, service: VlanServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: +class VLANServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: VLANServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: super().__init__( endpoints={ - "/fits.api.vm.v1.VlanService/List": EndpointSync.unary( + "/fits.api.mvm.v1.VLANService/List": EndpointSync.unary( method=MethodInfo( name="List", - service_name="fits.api.vm.v1.VlanService", - input=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse, + service_name="fits.api.mvm.v1.VLANService", + input=fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), function=service.list, @@ -104,24 +104,24 @@ def __init__(self, service: VlanServiceSync, interceptors: Iterable[InterceptorS @property def path(self) -> str: """Returns the URL path to mount the application to when serving multiple applications.""" - return "/fits.api.vm.v1.VlanService" + return "/fits.api.mvm.v1.VLANService" -class VlanServiceClientSync(ConnectClientSync): +class VLANServiceClientSync(ConnectClientSync): def list( self, - request: fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, + request: fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListRequest, *, headers: Headers | Mapping[str, str] | None = None, timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse: + ) -> fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListResponse: return self.execute_unary( request=request, method=MethodInfo( name="List", - service_name="fits.api.vm.v1.VlanService", - input=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2.VlanServiceListResponse, + service_name="fits.api.mvm.v1.VLANService", + input=fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_vlan__pb2.VLANServiceListResponse, idempotency_level=IdempotencyLevel.UNKNOWN, ), headers=headers, diff --git a/python/fits/api/mvm/v1/vlan_pb2.py b/python/fits/api/mvm/v1/vlan_pb2.py new file mode 100644 index 0000000..f604c7e --- /dev/null +++ b/python/fits/api/mvm/v1/vlan_pb2.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: fits/api/mvm/v1/vlan.proto +# Protobuf Python Version: 7.36.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 7, + 36, + 1, + '', + 'fits/api/mvm/v1/vlan.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 +from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66its/api/mvm/v1/vlan.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xb6\x03\n\x04VLAN\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x0e\n\x02id\x18\x02 \x01(\x05R\x02id\x12.\n\x0csubnet_title\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x0bsubnetTitle\x12\x16\n\x06subnet\x18\x04 \x01(\tR\x06subnet\x12\x1e\n\nsubnetmask\x18\x05 \x01(\tR\nsubnetmask\x12\x18\n\x07gateway\x18\x06 \x01(\tR\x07gateway\x12$\n\x0eip_range_start\x18\x07 \x01(\tR\x0cipRangeStart\x12 \n\x0cip_range_end\x18\x08 \x01(\tR\nipRangeEnd\x12\x19\n\x08use_dhcp\x18\t \x01(\x08R\x07useDhcp\x12\x32\n\rlocation_uuid\x18\r \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x0clocationUuid\x88\x01\x01\x12\x30\n\x0fstage_type_uuid\x18\x0e \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12#\n\x06tenant\x18\x0f \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x10\n\x0e_location_uuid\"=\n\x16VLANServiceListRequest\x12#\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"F\n\x17VLANServiceListResponse\x12+\n\x05vlans\x18\x01 \x03(\x0b\x32\x15.fits.api.mvm.v1.VLANR\x05vlans2u\n\x0bVLANService\x12\x66\n\x04List\x12\'.fits.api.mvm.v1.VLANServiceListRequest\x1a(.fits.api.mvm.v1.VLANServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xae\x01\n\x13\x63om.fits.api.mvm.v1B\tVlanProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.mvm.v1.vlan_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\023com.fits.api.mvm.v1B\tVlanProtoP\001Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\242\002\003FAM\252\002\017Fits.Api.Mvm.V1\312\002\017Fits\\Api\\Mvm\\V1\342\002\033Fits\\Api\\Mvm\\V1\\GPBMetadata\352\002\022Fits::Api::Mvm::V1' + _globals['_VLAN'].fields_by_name['uuid']._loaded_options = None + _globals['_VLAN'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VLAN'].fields_by_name['subnet_title']._loaded_options = None + _globals['_VLAN'].fields_by_name['subnet_title']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_VLAN'].fields_by_name['location_uuid']._loaded_options = None + _globals['_VLAN'].fields_by_name['location_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VLAN'].fields_by_name['stage_type_uuid']._loaded_options = None + _globals['_VLAN'].fields_by_name['stage_type_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_VLAN'].fields_by_name['tenant']._loaded_options = None + _globals['_VLAN'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_VLANSERVICELISTREQUEST'].fields_by_name['tenant']._loaded_options = None + _globals['_VLANSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_VLANSERVICE'].methods_by_name['List']._loaded_options = None + _globals['_VLANSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' + _globals['_VLAN']._serialized_start=139 + _globals['_VLAN']._serialized_end=577 + _globals['_VLANSERVICELISTREQUEST']._serialized_start=579 + _globals['_VLANSERVICELISTREQUEST']._serialized_end=640 + _globals['_VLANSERVICELISTRESPONSE']._serialized_start=642 + _globals['_VLANSERVICELISTRESPONSE']._serialized_end=712 + _globals['_VLANSERVICE']._serialized_start=714 + _globals['_VLANSERVICE']._serialized_end=831 +# @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/vlan_pb2.pyi b/python/fits/api/mvm/v1/vlan_pb2.pyi similarity index 89% rename from python/fits/api/vm/v1/vlan_pb2.pyi rename to python/fits/api/mvm/v1/vlan_pb2.pyi index 8679585..df5c2ae 100644 --- a/python/fits/api/vm/v1/vlan_pb2.pyi +++ b/python/fits/api/mvm/v1/vlan_pb2.pyi @@ -9,7 +9,7 @@ from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union DESCRIPTOR: _descriptor.FileDescriptor -class Vlan(_message.Message): +class VLAN(_message.Message): __slots__ = ("uuid", "id", "subnet_title", "subnet", "subnetmask", "gateway", "ip_range_start", "ip_range_end", "use_dhcp", "location_uuid", "stage_type_uuid", "tenant") UUID_FIELD_NUMBER: _ClassVar[int] ID_FIELD_NUMBER: _ClassVar[int] @@ -37,14 +37,14 @@ class Vlan(_message.Message): tenant: str def __init__(self, uuid: _Optional[str] = ..., id: _Optional[int] = ..., subnet_title: _Optional[str] = ..., subnet: _Optional[str] = ..., subnetmask: _Optional[str] = ..., gateway: _Optional[str] = ..., ip_range_start: _Optional[str] = ..., ip_range_end: _Optional[str] = ..., use_dhcp: _Optional[bool] = ..., location_uuid: _Optional[str] = ..., stage_type_uuid: _Optional[str] = ..., tenant: _Optional[str] = ...) -> None: ... -class VlanServiceListRequest(_message.Message): +class VLANServiceListRequest(_message.Message): __slots__ = ("tenant",) TENANT_FIELD_NUMBER: _ClassVar[int] tenant: str def __init__(self, tenant: _Optional[str] = ...) -> None: ... -class VlanServiceListResponse(_message.Message): +class VLANServiceListResponse(_message.Message): __slots__ = ("vlans",) VLANS_FIELD_NUMBER: _ClassVar[int] - vlans: _containers.RepeatedCompositeFieldContainer[Vlan] - def __init__(self, vlans: _Optional[_Iterable[_Union[Vlan, _Mapping]]] = ...) -> None: ... + vlans: _containers.RepeatedCompositeFieldContainer[VLAN] + def __init__(self, vlans: _Optional[_Iterable[_Union[VLAN, _Mapping]]] = ...) -> None: ... diff --git a/python/fits/api/vm/v1/stagetype_pb2.py b/python/fits/api/vm/v1/stagetype_pb2.py deleted file mode 100644 index e8cb180..0000000 --- a/python/fits/api/vm/v1/stagetype_pb2.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: fits/api/vm/v1/stagetype.proto -# Protobuf Python Version: 7.36.1 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 7, - 36, - 1, - '', - 'fits/api/vm/v1/stagetype.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 -from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x66its/api/vm/v1/stagetype.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"L\n\tStageType\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x05title\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\"\x1d\n\x1bStageTypeServiceListRequest\"Z\n\x1cStageTypeServiceListResponse\x12:\n\x0bstage_types\x18\x01 \x03(\x0b\x32\x19.fits.api.vm.v1.StageTypeR\nstageTypes2\x82\x01\n\x10StageTypeService\x12n\n\x04List\x12+.fits.api.vm.v1.StageTypeServiceListRequest\x1a,.fits.api.vm.v1.StageTypeServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xac\x01\n\x12\x63om.fits.api.vm.v1B\x0eStagetypeProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.vm.v1.stagetype_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\016StagetypeProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' - _globals['_STAGETYPE'].fields_by_name['uuid']._loaded_options = None - _globals['_STAGETYPE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_STAGETYPE'].fields_by_name['title']._loaded_options = None - _globals['_STAGETYPE'].fields_by_name['title']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_STAGETYPESERVICE'].methods_by_name['List']._loaded_options = None - _globals['_STAGETYPESERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' - _globals['_STAGETYPE']._serialized_start=141 - _globals['_STAGETYPE']._serialized_end=217 - _globals['_STAGETYPESERVICELISTREQUEST']._serialized_start=219 - _globals['_STAGETYPESERVICELISTREQUEST']._serialized_end=248 - _globals['_STAGETYPESERVICELISTRESPONSE']._serialized_start=250 - _globals['_STAGETYPESERVICELISTRESPONSE']._serialized_end=340 - _globals['_STAGETYPESERVICE']._serialized_start=343 - _globals['_STAGETYPESERVICE']._serialized_end=473 -# @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/vlan_pb2.py b/python/fits/api/vm/v1/vlan_pb2.py deleted file mode 100644 index 74c13b7..0000000 --- a/python/fits/api/vm/v1/vlan_pb2.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: fits/api/vm/v1/vlan.proto -# Protobuf Python Version: 7.36.1 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 7, - 36, - 1, - '', - 'fits/api/vm/v1/vlan.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 -from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/vm/v1/vlan.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xb6\x03\n\x04Vlan\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x0e\n\x02id\x18\x02 \x01(\x05R\x02id\x12.\n\x0csubnet_title\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x0bsubnetTitle\x12\x16\n\x06subnet\x18\x04 \x01(\tR\x06subnet\x12\x1e\n\nsubnetmask\x18\x05 \x01(\tR\nsubnetmask\x12\x18\n\x07gateway\x18\x06 \x01(\tR\x07gateway\x12$\n\x0eip_range_start\x18\x07 \x01(\tR\x0cipRangeStart\x12 \n\x0cip_range_end\x18\x08 \x01(\tR\nipRangeEnd\x12\x19\n\x08use_dhcp\x18\t \x01(\x08R\x07useDhcp\x12\x32\n\rlocation_uuid\x18\r \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x0clocationUuid\x88\x01\x01\x12\x30\n\x0fstage_type_uuid\x18\x0e \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12#\n\x06tenant\x18\x0f \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x10\n\x0e_location_uuid\"=\n\x16VlanServiceListRequest\x12#\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"E\n\x17VlanServiceListResponse\x12*\n\x05vlans\x18\x01 \x03(\x0b\x32\x14.fits.api.vm.v1.VlanR\x05vlans2s\n\x0bVlanService\x12\x64\n\x04List\x12&.fits.api.vm.v1.VlanServiceListRequest\x1a\'.fits.api.vm.v1.VlanServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xa7\x01\n\x12\x63om.fits.api.vm.v1B\tVlanProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.vm.v1.vlan_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\tVlanProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' - _globals['_VLAN'].fields_by_name['uuid']._loaded_options = None - _globals['_VLAN'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VLAN'].fields_by_name['subnet_title']._loaded_options = None - _globals['_VLAN'].fields_by_name['subnet_title']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_VLAN'].fields_by_name['location_uuid']._loaded_options = None - _globals['_VLAN'].fields_by_name['location_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VLAN'].fields_by_name['stage_type_uuid']._loaded_options = None - _globals['_VLAN'].fields_by_name['stage_type_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VLAN'].fields_by_name['tenant']._loaded_options = None - _globals['_VLAN'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_VLANSERVICELISTREQUEST'].fields_by_name['tenant']._loaded_options = None - _globals['_VLANSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_VLANSERVICE'].methods_by_name['List']._loaded_options = None - _globals['_VLANSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' - _globals['_VLAN']._serialized_start=137 - _globals['_VLAN']._serialized_end=575 - _globals['_VLANSERVICELISTREQUEST']._serialized_start=577 - _globals['_VLANSERVICELISTREQUEST']._serialized_end=638 - _globals['_VLANSERVICELISTRESPONSE']._serialized_start=640 - _globals['_VLANSERVICELISTRESPONSE']._serialized_end=709 - _globals['_VLANSERVICE']._serialized_start=711 - _globals['_VLANSERVICE']._serialized_end=826 -# @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/vm/v1/vm_connect.py b/python/fits/api/vm/v1/vm_connect.py deleted file mode 100644 index c5b3cef..0000000 --- a/python/fits/api/vm/v1/vm_connect.py +++ /dev/null @@ -1,1041 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! -# source: fits/api/vm/v1/vm.proto - -from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping -from typing import Protocol - -from connectrpc.client import ConnectClient, ConnectClientSync -from connectrpc.code import Code -from connectrpc.codec import Codec -from connectrpc.compression import Compression -from connectrpc.errors import ConnectError -from connectrpc.interceptor import Interceptor, InterceptorSync -from connectrpc.method import IdempotencyLevel, MethodInfo -from connectrpc.request import Headers, RequestContext -from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync -import fits.api.vm.v1.vm_pb2 as fits_dot_api_dot_vm_dot_v1_dot_vm__pb2 - - -class VMService(Protocol): - async def get(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def create(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def update(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def delete(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def add_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def update_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def delete_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def add_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def move_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def delete_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def validate_create(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def validate_add_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def validate_update_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def validate_add_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - -class VMServiceASGIApplication(ConnectASGIApplication[VMService]): - def __init__(self, service: VMService | AsyncGenerator[VMService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: - super().__init__( - service=service, - endpoints=lambda svc: { - "/fits.api.vm.v1.VMService/Get": Endpoint.unary( - method=MethodInfo( - name="Get", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.get, - ), - "/fits.api.vm.v1.VMService/Create": Endpoint.unary( - method=MethodInfo( - name="Create", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.create, - ), - "/fits.api.vm.v1.VMService/Update": Endpoint.unary( - method=MethodInfo( - name="Update", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.update, - ), - "/fits.api.vm.v1.VMService/List": Endpoint.unary( - method=MethodInfo( - name="List", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.list, - ), - "/fits.api.vm.v1.VMService/Delete": Endpoint.unary( - method=MethodInfo( - name="Delete", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.delete, - ), - "/fits.api.vm.v1.VMService/AddDisk": Endpoint.unary( - method=MethodInfo( - name="AddDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.add_disk, - ), - "/fits.api.vm.v1.VMService/UpdateDisk": Endpoint.unary( - method=MethodInfo( - name="UpdateDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.update_disk, - ), - "/fits.api.vm.v1.VMService/DeleteDisk": Endpoint.unary( - method=MethodInfo( - name="DeleteDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.delete_disk, - ), - "/fits.api.vm.v1.VMService/AddIP": Endpoint.unary( - method=MethodInfo( - name="AddIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.add_i_p, - ), - "/fits.api.vm.v1.VMService/MoveIP": Endpoint.unary( - method=MethodInfo( - name="MoveIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.move_i_p, - ), - "/fits.api.vm.v1.VMService/DeleteIP": Endpoint.unary( - method=MethodInfo( - name="DeleteIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.delete_i_p, - ), - "/fits.api.vm.v1.VMService/ValidateCreate": Endpoint.unary( - method=MethodInfo( - name="ValidateCreate", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.validate_create, - ), - "/fits.api.vm.v1.VMService/ValidateAddDisk": Endpoint.unary( - method=MethodInfo( - name="ValidateAddDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.validate_add_disk, - ), - "/fits.api.vm.v1.VMService/ValidateUpdateDisk": Endpoint.unary( - method=MethodInfo( - name="ValidateUpdateDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.validate_update_disk, - ), - "/fits.api.vm.v1.VMService/ValidateAddIP": Endpoint.unary( - method=MethodInfo( - name="ValidateAddIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.validate_add_i_p, - ), - }, - interceptors=interceptors, - read_max_bytes=read_max_bytes, - compressions=compressions, - codecs=codecs, - ) - - @property - def path(self) -> str: - """Returns the URL path to mount the application to when serving multiple applications.""" - return "/fits.api.vm.v1.VMService" - - -class VMServiceClient(ConnectClient): - async def get( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="Get", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def create( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="Create", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def update( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="Update", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def list( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="List", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def delete( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="Delete", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def add_disk( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="AddDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def update_disk( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="UpdateDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def delete_disk( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="DeleteDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def add_i_p( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="AddIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def move_i_p( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="MoveIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def delete_i_p( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="DeleteIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def validate_create( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="ValidateCreate", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def validate_add_disk( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="ValidateAddDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def validate_update_disk( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="ValidateUpdateDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def validate_add_i_p( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="ValidateAddIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - - - - -class VMServiceSync(Protocol): - def get(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def create(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def update(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def list(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def delete(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def add_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def update_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def delete_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def add_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def move_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def delete_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def validate_create(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def validate_add_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def validate_update_disk(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def validate_add_i_p(self, request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, ctx: RequestContext) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - -class VMServiceWSGIApplication(ConnectWSGIApplication): - def __init__(self, service: VMServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: - super().__init__( - endpoints={ - "/fits.api.vm.v1.VMService/Get": EndpointSync.unary( - method=MethodInfo( - name="Get", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.get, - ), - "/fits.api.vm.v1.VMService/Create": EndpointSync.unary( - method=MethodInfo( - name="Create", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.create, - ), - "/fits.api.vm.v1.VMService/Update": EndpointSync.unary( - method=MethodInfo( - name="Update", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.update, - ), - "/fits.api.vm.v1.VMService/List": EndpointSync.unary( - method=MethodInfo( - name="List", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.list, - ), - "/fits.api.vm.v1.VMService/Delete": EndpointSync.unary( - method=MethodInfo( - name="Delete", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.delete, - ), - "/fits.api.vm.v1.VMService/AddDisk": EndpointSync.unary( - method=MethodInfo( - name="AddDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.add_disk, - ), - "/fits.api.vm.v1.VMService/UpdateDisk": EndpointSync.unary( - method=MethodInfo( - name="UpdateDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.update_disk, - ), - "/fits.api.vm.v1.VMService/DeleteDisk": EndpointSync.unary( - method=MethodInfo( - name="DeleteDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.delete_disk, - ), - "/fits.api.vm.v1.VMService/AddIP": EndpointSync.unary( - method=MethodInfo( - name="AddIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.add_i_p, - ), - "/fits.api.vm.v1.VMService/MoveIP": EndpointSync.unary( - method=MethodInfo( - name="MoveIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.move_i_p, - ), - "/fits.api.vm.v1.VMService/DeleteIP": EndpointSync.unary( - method=MethodInfo( - name="DeleteIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.delete_i_p, - ), - "/fits.api.vm.v1.VMService/ValidateCreate": EndpointSync.unary( - method=MethodInfo( - name="ValidateCreate", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.validate_create, - ), - "/fits.api.vm.v1.VMService/ValidateAddDisk": EndpointSync.unary( - method=MethodInfo( - name="ValidateAddDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.validate_add_disk, - ), - "/fits.api.vm.v1.VMService/ValidateUpdateDisk": EndpointSync.unary( - method=MethodInfo( - name="ValidateUpdateDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.validate_update_disk, - ), - "/fits.api.vm.v1.VMService/ValidateAddIP": EndpointSync.unary( - method=MethodInfo( - name="ValidateAddIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.validate_add_i_p, - ), - }, - interceptors=interceptors, - read_max_bytes=read_max_bytes, - compressions=compressions, - codecs=codecs, - ) - - @property - def path(self) -> str: - """Returns the URL path to mount the application to when serving multiple applications.""" - return "/fits.api.vm.v1.VMService" - - -class VMServiceClientSync(ConnectClientSync): - def get( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="Get", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceGetResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def create( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="Create", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceCreateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def update( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="Update", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def list( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="List", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceListResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def delete( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="Delete", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def add_disk( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="AddDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def update_disk( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="UpdateDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceUpdateDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def delete_disk( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="DeleteDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def add_i_p( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="AddIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceAddIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def move_i_p( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="MoveIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceMoveIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def delete_i_p( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="DeleteIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceDeleteIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def validate_create( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="ValidateCreate", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateCreateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def validate_add_disk( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="ValidateAddDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def validate_update_disk( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="ValidateUpdateDisk", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateUpdateDiskResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def validate_add_i_p( - self, - request: fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="ValidateAddIP", - service_name="fits.api.vm.v1.VMService", - input=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPRequest, - output=fits_dot_api_dot_vm_dot_v1_dot_vm__pb2.VMServiceValidateAddIPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - diff --git a/python/fits/api/vm/v1/vm_pb2.py b/python/fits/api/vm/v1/vm_pb2.py deleted file mode 100644 index 38773ad..0000000 --- a/python/fits/api/vm/v1/vm_pb2.py +++ /dev/null @@ -1,307 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: fits/api/vm/v1/vm.proto -# Protobuf Python Version: 7.36.1 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 7, - 36, - 1, - '', - 'fits/api/vm/v1/vm.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -from fits.api.v1 import common_pb2 as fits_dot_api_dot_v1_dot_common__pb2 -from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -from fits.api.vm.v1 import vlan_pb2 as fits_dot_api_dot_vm_dot_v1_dot_vlan__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66its/api/vm/v1/vm.proto\x12\x0e\x66its.api.vm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\x1a\x19\x66its/api/vm/v1/vlan.proto\"\x90\x01\n\x0cLinuxDetails\x12/\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskR\x05\x64isks\x12%\n\tldap_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12(\n\tldap_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08ldapFqdn\"\x9c\x01\n\x0eWindowsDetails\x12\x31\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskR\x05\x64isks\x12)\n\x0b\x64omain_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12,\n\x0b\x64omain_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\ndomainFqdn\"{\n\x10NetworkInterface\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n\tipaddress\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xe8\xb3\xae\xb1\x02\x01R\tipaddress\x12\x1e\n\nmacaddress\x18\x03 \x01(\tR\nmacaddress\"\x9d\x07\n\nVMInstance\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04\x66qdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04\x66qdn\x12#\n\x06tenant\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n\x0cproject_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12!\n\x07os_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\t \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\n \x01(\rR\x03ram\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12\x16\n\x06status\x18\x0c \x01(\tR\x06status\x12\x1f\n\x0bstatus_info\x18\r \x01(\tR\nstatusInfo\x12J\n\x0c\x61vailability\x18\x0e \x01(\x0e\x32\x1c.fits.api.vm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12J\n\x0cserviceclass\x18\x0f \x01(\x0e\x32\x1c.fits.api.vm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12I\n\x0fwindows_details\x18\x10 \x01(\x0b\x32\x1e.fits.api.vm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12\x43\n\rlinux_details\x18\x11 \x01(\x0b\x32\x1c.fits.api.vm.v1.LinuxDetailsH\x00R\x0clinuxDetails\x12@\n\ninterfaces\x18\x12 \x03(\x0b\x32 .fits.api.vm.v1.NetworkInterfaceR\ninterfaces\x12(\n\x04vlan\x18\x13 \x01(\x0b\x32\x14.fits.api.vm.v1.VlanR\x04vlan\x12!\n\x0corder_number\x18\x14 \x01(\tR\x0borderNumber\x12\x1a\n\x08\x63ontract\x18\x15 \x01(\x08R\x08\x63ontractB\x10\n\x07\x64\x65tails\x12\x05\xbaH\x02\x08\x01\"f\n\x13VMServiceGetRequest\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12#\n\x06tenant\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x07\n\x05_uuid\"B\n\x14VMServiceGetResponse\x12*\n\x02vm\x18\x01 \x01(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x02vm\"\x87\x01\n\x1dVMServiceCreateWindowsRequest\x12)\n\x0b\x64omain_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12;\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\x7f\n\x1bVMServiceCreateLinuxRequest\x12%\n\tldap_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12\x39\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\xdf\x05\n\x16VMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n\x07os_uuid\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\x07 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x08 \x01(\rR\x03ram\x12!\n\x0corder_number\x18\t \x01(\tR\x0borderNumber\x12+\n\x06labels\x18\n \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12J\n\x0c\x61vailability\x18\x0c \x01(\x0e\x32\x1c.fits.api.vm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12J\n\x0cserviceclass\x18\r \x01(\x0e\x32\x1c.fits.api.vm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12I\n\x07windows\x18\x0e \x01(\x0b\x32-.fits.api.vm.v1.VMServiceCreateWindowsRequestH\x00R\x07windows\x12\x43\n\x05linux\x18\x0f \x01(\x0b\x32+.fits.api.vm.v1.VMServiceCreateLinuxRequestH\x00R\x05linuxB\x0f\n\x06vmtype\x12\x05\xbaH\x02\x08\x01\x42\x07\n\x05_name\"\xc6\x01\n\tLinuxDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x02R\nmountPoint\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_mount_point\"\xc9\x01\n\x0bWindowsDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12%\n\x0b\x64riveletter\x18\x05 \x01(\tH\x02R\x0b\x64riveletter\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_driveletter\"\x19\n\x17VMServiceCreateResponse\"\xad\x03\n\x16VMServiceUpdateRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12@\n\x0bupdate_meta\x18\x04 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12U\n\x11performance_class\x18\x05 \x01(\x0b\x32&.fits.api.vm.v1.PerformanceClassChangeH\x00R\x10performanceClass\x12I\n\rservice_class\x18\x06 \x01(\x0b\x32\".fits.api.vm.v1.ServiceClassChangeH\x00R\x0cserviceClass\x12\x39\n\x07\x63ontact\x18\x07 \x01(\x0b\x32\x1d.fits.api.vm.v1.ContactChangeH\x00R\x07\x63ontactB\x0f\n\x06\x61\x63tion\x12\x05\xbaH\x02\x08\x01\"P\n\x16PerformanceClassChange\x12\x1b\n\x03\x63pu\x18\x01 \x01(\rB\t\xbaH\x06*\x04\x18@(\x01R\x03\x63pu\x12\x19\n\x03ram\x18\x02 \x01(\rB\x07\xbaH\x04*\x02 \x00R\x03ram\"`\n\x12ServiceClassChange\x12J\n\x0cserviceclass\x18\x01 \x01(\x0e\x32\x1c.fits.api.vm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\"<\n\rContactChange\x12+\n\x0c\x63ontact_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\"\x19\n\x17VMServiceUpdateResponse\"K\n\x14VMServiceListRequest\x12(\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01\x42\t\n\x07_tenant\"E\n\x15VMServiceListResponse\x12,\n\x03vms\x18\x01 \x03(\x0b\x32\x1a.fits.api.vm.v1.VMInstanceR\x03vms\"}\n\x16VMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x1c\n\x04uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\x19\n\x17VMServiceDeleteResponse\"h\n\x1eVMServiceValidateCreateRequest\x12\x46\n\x06\x63reate\x18\x01 \x01(\x0b\x32&.fits.api.vm.v1.VMServiceCreateRequestB\x06\xbaH\x03\xc8\x01\x01R\x06\x63reate\"!\n\x1fVMServiceValidateCreateResponse\"m\n\x1fVMServiceValidateAddDiskRequest\x12J\n\x08\x61\x64\x64_disk\x18\x01 \x01(\x0b\x32\'.fits.api.vm.v1.VMServiceAddDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\x07\x61\x64\x64\x44isk\"\"\n VMServiceValidateAddDiskResponse\"y\n\"VMServiceValidateUpdateDiskRequest\x12S\n\x0bupdate_disk\x18\x01 \x01(\x0b\x32*.fits.api.vm.v1.VMServiceUpdateDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\nupdateDisk\"%\n#VMServiceValidateUpdateDiskResponse\"\x1a\n\x18VMServiceAddDiskResponse\"\x1d\n\x1bVMServiceUpdateDiskResponse\"\x1d\n\x1bVMServiceDeleteDiskResponse\"\xf9\x01\n\x17VMServiceAddDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12\x31\n\x05linux\x18\x04 \x01(\x0b\x32\x19.fits.api.vm.v1.LinuxDiskH\x00R\x05linux\x12\x37\n\x07windows\x18\x05 \x01(\x0b\x32\x1b.fits.api.vm.v1.WindowsDiskH\x00R\x07windowsB\r\n\x04\x64isk\x12\x05\xbaH\x02\x08\x01\"\x80\x02\n\x1aVMServiceUpdateDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12$\n\x0b\x61uto_extend\x18\x05 \x01(\x08H\x00R\nautoExtend\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\x04H\x01R\x04size\x88\x01\x01\x42\x0e\n\x0c_auto_extendB\x07\n\x05_size\"\xa8\x01\n\x1aVMServiceDeleteDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\x18\n\x16VMServiceAddIPResponse\"\x19\n\x17VMServiceMoveIPResponse\"\x1b\n\x19VMServiceDeleteIPResponse\"|\n\x15VMServiceAddIPRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\xde\x01\n\x16VMServiceMoveIPRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12.\n\x0etarget_vm_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0ctargetVmUuid\"\xb0\x01\n\x18VMServiceDeleteIPRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"e\n\x1dVMServiceValidateAddIPRequest\x12\x44\n\x06\x61\x64\x64_ip\x18\x01 \x01(\x0b\x32%.fits.api.vm.v1.VMServiceAddIPRequestB\x06\xbaH\x03\xc8\x01\x01R\x05\x61\x64\x64Ip\" \n\x1eVMServiceValidateAddIPResponse*\xa6\x01\n\x0c\x41vailability\x12\"\n\x18\x41VAILABILITY_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1b\n\x0f\x41VAILABILITY_V0\x10\x01\x1a\x06\x82\xb2\x19\x02V0\x12\x1b\n\x0f\x41VAILABILITY_V1\x10\x02\x1a\x06\x82\xb2\x19\x02V1\x12\x1b\n\x0f\x41VAILABILITY_V2\x10\x03\x1a\x06\x82\xb2\x19\x02V2\x12\x1b\n\x0f\x41VAILABILITY_V3\x10\x04\x1a\x06\x82\xb2\x19\x02V3*\x93\x01\n\x0cServiceClass\x12#\n\x19SERVICE_CLASS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1e\n\x11SERVICE_CLASS_SZ1\x10\x01\x1a\x07\x82\xb2\x19\x03SZ1\x12\x1e\n\x11SERVICE_CLASS_SZ2\x10\x02\x1a\x07\x82\xb2\x19\x03SZ2\x12\x1e\n\x11SERVICE_CLASS_SZ3\x10\x03\x1a\x07\x82\xb2\x19\x03SZ32\x93\r\n\tVMService\x12]\n\x03Get\x12#.fits.api.vm.v1.VMServiceGetRequest\x1a$.fits.api.vm.v1.VMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x43reate\x12&.fits.api.vm.v1.VMServiceCreateRequest\x1a\'.fits.api.vm.v1.VMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x65\n\x06Update\x12&.fits.api.vm.v1.VMServiceUpdateRequest\x1a\'.fits.api.vm.v1.VMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12`\n\x04List\x12$.fits.api.vm.v1.VMServiceListRequest\x1a%.fits.api.vm.v1.VMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x65\n\x06\x44\x65lete\x12&.fits.api.vm.v1.VMServiceDeleteRequest\x1a\'.fits.api.vm.v1.VMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12h\n\x07\x41\x64\x64\x44isk\x12\'.fits.api.vm.v1.VMServiceAddDiskRequest\x1a(.fits.api.vm.v1.VMServiceAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12q\n\nUpdateDisk\x12*.fits.api.vm.v1.VMServiceUpdateDiskRequest\x1a+.fits.api.vm.v1.VMServiceUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12q\n\nDeleteDisk\x12*.fits.api.vm.v1.VMServiceDeleteDiskRequest\x1a+.fits.api.vm.v1.VMServiceDeleteDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x62\n\x05\x41\x64\x64IP\x12%.fits.api.vm.v1.VMServiceAddIPRequest\x1a&.fits.api.vm.v1.VMServiceAddIPResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x65\n\x06MoveIP\x12&.fits.api.vm.v1.VMServiceMoveIPRequest\x1a\'.fits.api.vm.v1.VMServiceMoveIPResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12k\n\x08\x44\x65leteIP\x12(.fits.api.vm.v1.VMServiceDeleteIPRequest\x1a).fits.api.vm.v1.VMServiceDeleteIPResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12}\n\x0eValidateCreate\x12..fits.api.vm.v1.VMServiceValidateCreateRequest\x1a/.fits.api.vm.v1.VMServiceValidateCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x80\x01\n\x0fValidateAddDisk\x12/.fits.api.vm.v1.VMServiceValidateAddDiskRequest\x1a\x30.fits.api.vm.v1.VMServiceValidateAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x89\x01\n\x12ValidateUpdateDisk\x12\x32.fits.api.vm.v1.VMServiceValidateUpdateDiskRequest\x1a\x33.fits.api.vm.v1.VMServiceValidateUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12z\n\rValidateAddIP\x12-.fits.api.vm.v1.VMServiceValidateAddIPRequest\x1a..fits.api.vm.v1.VMServiceValidateAddIPResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x42\xa5\x01\n\x12\x63om.fits.api.vm.v1B\x07VmProtoP\x01Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\xa2\x02\x03\x46\x41V\xaa\x02\x0e\x46its.Api.Vm.V1\xca\x02\x0e\x46its\\Api\\Vm\\V1\xe2\x02\x1a\x46its\\Api\\Vm\\V1\\GPBMetadata\xea\x02\x11\x46its::Api::Vm::V1b\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'fits.api.vm.v1.vm_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\022com.fits.api.vm.v1B\007VmProtoP\001Z+github.com/fi-ts/api/go/fits/api/vm/v1;vmv1\242\002\003FAV\252\002\016Fits.Api.Vm.V1\312\002\016Fits\\Api\\Vm\\V1\342\002\032Fits\\Api\\Vm\\V1\\GPBMetadata\352\002\021Fits::Api::Vm::V1' - _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_UNSPECIFIED"]._loaded_options = None - _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_UNSPECIFIED"]._serialized_options = b'\202\262\031\000' - _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V0"]._loaded_options = None - _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V0"]._serialized_options = b'\202\262\031\002V0' - _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V1"]._loaded_options = None - _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V1"]._serialized_options = b'\202\262\031\002V1' - _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V2"]._loaded_options = None - _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V2"]._serialized_options = b'\202\262\031\002V2' - _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V3"]._loaded_options = None - _globals['_AVAILABILITY'].values_by_name["AVAILABILITY_V3"]._serialized_options = b'\202\262\031\002V3' - _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_UNSPECIFIED"]._loaded_options = None - _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_UNSPECIFIED"]._serialized_options = b'\202\262\031\000' - _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ1"]._loaded_options = None - _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ1"]._serialized_options = b'\202\262\031\003SZ1' - _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ2"]._loaded_options = None - _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ2"]._serialized_options = b'\202\262\031\003SZ2' - _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ3"]._loaded_options = None - _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ3"]._serialized_options = b'\202\262\031\003SZ3' - _globals['_LINUXDETAILS'].fields_by_name['ldap_uuid']._loaded_options = None - _globals['_LINUXDETAILS'].fields_by_name['ldap_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_LINUXDETAILS'].fields_by_name['ldap_fqdn']._loaded_options = None - _globals['_LINUXDETAILS'].fields_by_name['ldap_fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_WINDOWSDETAILS'].fields_by_name['domain_uuid']._loaded_options = None - _globals['_WINDOWSDETAILS'].fields_by_name['domain_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_WINDOWSDETAILS'].fields_by_name['domain_fqdn']._loaded_options = None - _globals['_WINDOWSDETAILS'].fields_by_name['domain_fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_NETWORKINTERFACE'].fields_by_name['uuid']._loaded_options = None - _globals['_NETWORKINTERFACE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_NETWORKINTERFACE'].fields_by_name['ipaddress']._loaded_options = None - _globals['_NETWORKINTERFACE'].fields_by_name['ipaddress']._serialized_options = b'\272H\010r\006\350\263\256\261\002\001' - _globals['_VMINSTANCE'].oneofs_by_name['details']._loaded_options = None - _globals['_VMINSTANCE'].oneofs_by_name['details']._serialized_options = b'\272H\002\010\001' - _globals['_VMINSTANCE'].fields_by_name['uuid']._loaded_options = None - _globals['_VMINSTANCE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMINSTANCE'].fields_by_name['fqdn']._loaded_options = None - _globals['_VMINSTANCE'].fields_by_name['fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_VMINSTANCE'].fields_by_name['tenant']._loaded_options = None - _globals['_VMINSTANCE'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_VMINSTANCE'].fields_by_name['project_uuid']._loaded_options = None - _globals['_VMINSTANCE'].fields_by_name['project_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMINSTANCE'].fields_by_name['os_uuid']._loaded_options = None - _globals['_VMINSTANCE'].fields_by_name['os_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMINSTANCE'].fields_by_name['location_uuid']._loaded_options = None - _globals['_VMINSTANCE'].fields_by_name['location_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMINSTANCE'].fields_by_name['contact_uuid']._loaded_options = None - _globals['_VMINSTANCE'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMINSTANCE'].fields_by_name['availability']._loaded_options = None - _globals['_VMINSTANCE'].fields_by_name['availability']._serialized_options = b'\272H\005\202\001\002\020\001' - _globals['_VMINSTANCE'].fields_by_name['serviceclass']._loaded_options = None - _globals['_VMINSTANCE'].fields_by_name['serviceclass']._serialized_options = b'\272H\005\202\001\002\020\001' - _globals['_VMSERVICEGETREQUEST'].fields_by_name['uuid']._loaded_options = None - _globals['_VMSERVICEGETREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEGETREQUEST'].fields_by_name['tenant']._loaded_options = None - _globals['_VMSERVICEGETREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_VMSERVICECREATEWINDOWSREQUEST'].fields_by_name['domain_uuid']._loaded_options = None - _globals['_VMSERVICECREATEWINDOWSREQUEST'].fields_by_name['domain_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICECREATEWINDOWSREQUEST'].fields_by_name['disks']._loaded_options = None - _globals['_VMSERVICECREATEWINDOWSREQUEST'].fields_by_name['disks']._serialized_options = b'\272H\005\222\001\002\010\001' - _globals['_VMSERVICECREATELINUXREQUEST'].fields_by_name['ldap_uuid']._loaded_options = None - _globals['_VMSERVICECREATELINUXREQUEST'].fields_by_name['ldap_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICECREATELINUXREQUEST'].fields_by_name['disks']._loaded_options = None - _globals['_VMSERVICECREATELINUXREQUEST'].fields_by_name['disks']._serialized_options = b'\272H\005\222\001\002\010\001' - _globals['_VMSERVICECREATEREQUEST'].oneofs_by_name['vmtype']._loaded_options = None - _globals['_VMSERVICECREATEREQUEST'].oneofs_by_name['vmtype']._serialized_options = b'\272H\002\010\001' - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['project_uuid']._loaded_options = None - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['project_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['name']._loaded_options = None - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['os_uuid']._loaded_options = None - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['os_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['vlan_uuid']._loaded_options = None - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['vlan_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['location_uuid']._loaded_options = None - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['location_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['contact_uuid']._loaded_options = None - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['availability']._loaded_options = None - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['availability']._serialized_options = b'\272H\005\202\001\002\020\001' - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['serviceclass']._loaded_options = None - _globals['_VMSERVICECREATEREQUEST'].fields_by_name['serviceclass']._serialized_options = b'\272H\005\202\001\002\020\001' - _globals['_LINUXDISK'].fields_by_name['uuid']._loaded_options = None - _globals['_LINUXDISK'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_WINDOWSDISK'].fields_by_name['uuid']._loaded_options = None - _globals['_WINDOWSDISK'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEUPDATEREQUEST'].oneofs_by_name['action']._loaded_options = None - _globals['_VMSERVICEUPDATEREQUEST'].oneofs_by_name['action']._serialized_options = b'\272H\002\010\001' - _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['uuid']._loaded_options = None - _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._loaded_options = None - _globals['_VMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._serialized_options = b'\272H\003\310\001\001' - _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['cpu']._loaded_options = None - _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['cpu']._serialized_options = b'\272H\006*\004\030@(\001' - _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['ram']._loaded_options = None - _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['ram']._serialized_options = b'\272H\004*\002 \000' - _globals['_SERVICECLASSCHANGE'].fields_by_name['serviceclass']._loaded_options = None - _globals['_SERVICECLASSCHANGE'].fields_by_name['serviceclass']._serialized_options = b'\272H\005\202\001\002\020\001' - _globals['_CONTACTCHANGE'].fields_by_name['contact_uuid']._loaded_options = None - _globals['_CONTACTCHANGE'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICELISTREQUEST'].fields_by_name['tenant']._loaded_options = None - _globals['_VMSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_VMSERVICEDELETEREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_VMSERVICEDELETEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEDELETEREQUEST'].fields_by_name['uuid']._loaded_options = None - _globals['_VMSERVICEDELETEREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEVALIDATECREATEREQUEST'].fields_by_name['create']._loaded_options = None - _globals['_VMSERVICEVALIDATECREATEREQUEST'].fields_by_name['create']._serialized_options = b'\272H\003\310\001\001' - _globals['_VMSERVICEVALIDATEADDDISKREQUEST'].fields_by_name['add_disk']._loaded_options = None - _globals['_VMSERVICEVALIDATEADDDISKREQUEST'].fields_by_name['add_disk']._serialized_options = b'\272H\003\310\001\001' - _globals['_VMSERVICEVALIDATEUPDATEDISKREQUEST'].fields_by_name['update_disk']._loaded_options = None - _globals['_VMSERVICEVALIDATEUPDATEDISKREQUEST'].fields_by_name['update_disk']._serialized_options = b'\272H\003\310\001\001' - _globals['_VMSERVICEADDDISKREQUEST'].oneofs_by_name['disk']._loaded_options = None - _globals['_VMSERVICEADDDISKREQUEST'].oneofs_by_name['disk']._serialized_options = b'\272H\002\010\001' - _globals['_VMSERVICEADDDISKREQUEST'].fields_by_name['uuid']._loaded_options = None - _globals['_VMSERVICEADDDISKREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEADDDISKREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_VMSERVICEADDDISKREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEUPDATEDISKREQUEST'].fields_by_name['uuid']._loaded_options = None - _globals['_VMSERVICEUPDATEDISKREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEUPDATEDISKREQUEST'].fields_by_name['disk_uuid']._loaded_options = None - _globals['_VMSERVICEUPDATEDISKREQUEST'].fields_by_name['disk_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEUPDATEDISKREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_VMSERVICEUPDATEDISKREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEDELETEDISKREQUEST'].fields_by_name['uuid']._loaded_options = None - _globals['_VMSERVICEDELETEDISKREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEDELETEDISKREQUEST'].fields_by_name['disk_uuid']._loaded_options = None - _globals['_VMSERVICEDELETEDISKREQUEST'].fields_by_name['disk_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEDELETEDISKREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_VMSERVICEDELETEDISKREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEADDIPREQUEST'].fields_by_name['uuid']._loaded_options = None - _globals['_VMSERVICEADDIPREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEADDIPREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_VMSERVICEADDIPREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['uuid']._loaded_options = None - _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['interface_uuid']._loaded_options = None - _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['interface_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['target_vm_uuid']._loaded_options = None - _globals['_VMSERVICEMOVEIPREQUEST'].fields_by_name['target_vm_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEDELETEIPREQUEST'].fields_by_name['uuid']._loaded_options = None - _globals['_VMSERVICEDELETEIPREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEDELETEIPREQUEST'].fields_by_name['interface_uuid']._loaded_options = None - _globals['_VMSERVICEDELETEIPREQUEST'].fields_by_name['interface_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEDELETEIPREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_VMSERVICEDELETEIPREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_VMSERVICEVALIDATEADDIPREQUEST'].fields_by_name['add_ip']._loaded_options = None - _globals['_VMSERVICEVALIDATEADDIPREQUEST'].fields_by_name['add_ip']._serialized_options = b'\272H\003\310\001\001' - _globals['_VMSERVICE'].methods_by_name['Get']._loaded_options = None - _globals['_VMSERVICE'].methods_by_name['Get']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' - _globals['_VMSERVICE'].methods_by_name['Create']._loaded_options = None - _globals['_VMSERVICE'].methods_by_name['Create']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' - _globals['_VMSERVICE'].methods_by_name['Update']._loaded_options = None - _globals['_VMSERVICE'].methods_by_name['Update']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' - _globals['_VMSERVICE'].methods_by_name['List']._loaded_options = None - _globals['_VMSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' - _globals['_VMSERVICE'].methods_by_name['Delete']._loaded_options = None - _globals['_VMSERVICE'].methods_by_name['Delete']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' - _globals['_VMSERVICE'].methods_by_name['AddDisk']._loaded_options = None - _globals['_VMSERVICE'].methods_by_name['AddDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' - _globals['_VMSERVICE'].methods_by_name['UpdateDisk']._loaded_options = None - _globals['_VMSERVICE'].methods_by_name['UpdateDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' - _globals['_VMSERVICE'].methods_by_name['DeleteDisk']._loaded_options = None - _globals['_VMSERVICE'].methods_by_name['DeleteDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' - _globals['_VMSERVICE'].methods_by_name['AddIP']._loaded_options = None - _globals['_VMSERVICE'].methods_by_name['AddIP']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' - _globals['_VMSERVICE'].methods_by_name['MoveIP']._loaded_options = None - _globals['_VMSERVICE'].methods_by_name['MoveIP']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' - _globals['_VMSERVICE'].methods_by_name['DeleteIP']._loaded_options = None - _globals['_VMSERVICE'].methods_by_name['DeleteIP']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' - _globals['_VMSERVICE'].methods_by_name['ValidateCreate']._loaded_options = None - _globals['_VMSERVICE'].methods_by_name['ValidateCreate']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' - _globals['_VMSERVICE'].methods_by_name['ValidateAddDisk']._loaded_options = None - _globals['_VMSERVICE'].methods_by_name['ValidateAddDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' - _globals['_VMSERVICE'].methods_by_name['ValidateUpdateDisk']._loaded_options = None - _globals['_VMSERVICE'].methods_by_name['ValidateUpdateDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' - _globals['_VMSERVICE'].methods_by_name['ValidateAddIP']._loaded_options = None - _globals['_VMSERVICE'].methods_by_name['ValidateAddIP']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' - _globals['_AVAILABILITY']._serialized_start=6104 - _globals['_AVAILABILITY']._serialized_end=6270 - _globals['_SERVICECLASS']._serialized_start=6273 - _globals['_SERVICECLASS']._serialized_end=6420 - _globals['_LINUXDETAILS']._serialized_start=162 - _globals['_LINUXDETAILS']._serialized_end=306 - _globals['_WINDOWSDETAILS']._serialized_start=309 - _globals['_WINDOWSDETAILS']._serialized_end=465 - _globals['_NETWORKINTERFACE']._serialized_start=467 - _globals['_NETWORKINTERFACE']._serialized_end=590 - _globals['_VMINSTANCE']._serialized_start=593 - _globals['_VMINSTANCE']._serialized_end=1518 - _globals['_VMSERVICEGETREQUEST']._serialized_start=1520 - _globals['_VMSERVICEGETREQUEST']._serialized_end=1622 - _globals['_VMSERVICEGETRESPONSE']._serialized_start=1624 - _globals['_VMSERVICEGETRESPONSE']._serialized_end=1690 - _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_start=1693 - _globals['_VMSERVICECREATEWINDOWSREQUEST']._serialized_end=1828 - _globals['_VMSERVICECREATELINUXREQUEST']._serialized_start=1830 - _globals['_VMSERVICECREATELINUXREQUEST']._serialized_end=1957 - _globals['_VMSERVICECREATEREQUEST']._serialized_start=1960 - _globals['_VMSERVICECREATEREQUEST']._serialized_end=2695 - _globals['_LINUXDISK']._serialized_start=2698 - _globals['_LINUXDISK']._serialized_end=2896 - _globals['_WINDOWSDISK']._serialized_start=2899 - _globals['_WINDOWSDISK']._serialized_end=3100 - _globals['_VMSERVICECREATERESPONSE']._serialized_start=3102 - _globals['_VMSERVICECREATERESPONSE']._serialized_end=3127 - _globals['_VMSERVICEUPDATEREQUEST']._serialized_start=3130 - _globals['_VMSERVICEUPDATEREQUEST']._serialized_end=3559 - _globals['_PERFORMANCECLASSCHANGE']._serialized_start=3561 - _globals['_PERFORMANCECLASSCHANGE']._serialized_end=3641 - _globals['_SERVICECLASSCHANGE']._serialized_start=3643 - _globals['_SERVICECLASSCHANGE']._serialized_end=3739 - _globals['_CONTACTCHANGE']._serialized_start=3741 - _globals['_CONTACTCHANGE']._serialized_end=3801 - _globals['_VMSERVICEUPDATERESPONSE']._serialized_start=3803 - _globals['_VMSERVICEUPDATERESPONSE']._serialized_end=3828 - _globals['_VMSERVICELISTREQUEST']._serialized_start=3830 - _globals['_VMSERVICELISTREQUEST']._serialized_end=3905 - _globals['_VMSERVICELISTRESPONSE']._serialized_start=3907 - _globals['_VMSERVICELISTRESPONSE']._serialized_end=3976 - _globals['_VMSERVICEDELETEREQUEST']._serialized_start=3978 - _globals['_VMSERVICEDELETEREQUEST']._serialized_end=4103 - _globals['_VMSERVICEDELETERESPONSE']._serialized_start=4105 - _globals['_VMSERVICEDELETERESPONSE']._serialized_end=4130 - _globals['_VMSERVICEVALIDATECREATEREQUEST']._serialized_start=4132 - _globals['_VMSERVICEVALIDATECREATEREQUEST']._serialized_end=4236 - _globals['_VMSERVICEVALIDATECREATERESPONSE']._serialized_start=4238 - _globals['_VMSERVICEVALIDATECREATERESPONSE']._serialized_end=4271 - _globals['_VMSERVICEVALIDATEADDDISKREQUEST']._serialized_start=4273 - _globals['_VMSERVICEVALIDATEADDDISKREQUEST']._serialized_end=4382 - _globals['_VMSERVICEVALIDATEADDDISKRESPONSE']._serialized_start=4384 - _globals['_VMSERVICEVALIDATEADDDISKRESPONSE']._serialized_end=4418 - _globals['_VMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_start=4420 - _globals['_VMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_end=4541 - _globals['_VMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_start=4543 - _globals['_VMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_end=4580 - _globals['_VMSERVICEADDDISKRESPONSE']._serialized_start=4582 - _globals['_VMSERVICEADDDISKRESPONSE']._serialized_end=4608 - _globals['_VMSERVICEUPDATEDISKRESPONSE']._serialized_start=4610 - _globals['_VMSERVICEUPDATEDISKRESPONSE']._serialized_end=4639 - _globals['_VMSERVICEDELETEDISKRESPONSE']._serialized_start=4641 - _globals['_VMSERVICEDELETEDISKRESPONSE']._serialized_end=4670 - _globals['_VMSERVICEADDDISKREQUEST']._serialized_start=4673 - _globals['_VMSERVICEADDDISKREQUEST']._serialized_end=4922 - _globals['_VMSERVICEUPDATEDISKREQUEST']._serialized_start=4925 - _globals['_VMSERVICEUPDATEDISKREQUEST']._serialized_end=5181 - _globals['_VMSERVICEDELETEDISKREQUEST']._serialized_start=5184 - _globals['_VMSERVICEDELETEDISKREQUEST']._serialized_end=5352 - _globals['_VMSERVICEADDIPRESPONSE']._serialized_start=5354 - _globals['_VMSERVICEADDIPRESPONSE']._serialized_end=5378 - _globals['_VMSERVICEMOVEIPRESPONSE']._serialized_start=5380 - _globals['_VMSERVICEMOVEIPRESPONSE']._serialized_end=5405 - _globals['_VMSERVICEDELETEIPRESPONSE']._serialized_start=5407 - _globals['_VMSERVICEDELETEIPRESPONSE']._serialized_end=5434 - _globals['_VMSERVICEADDIPREQUEST']._serialized_start=5436 - _globals['_VMSERVICEADDIPREQUEST']._serialized_end=5560 - _globals['_VMSERVICEMOVEIPREQUEST']._serialized_start=5563 - _globals['_VMSERVICEMOVEIPREQUEST']._serialized_end=5785 - _globals['_VMSERVICEDELETEIPREQUEST']._serialized_start=5788 - _globals['_VMSERVICEDELETEIPREQUEST']._serialized_end=5964 - _globals['_VMSERVICEVALIDATEADDIPREQUEST']._serialized_start=5966 - _globals['_VMSERVICEVALIDATEADDIPREQUEST']._serialized_end=6067 - _globals['_VMSERVICEVALIDATEADDIPRESPONSE']._serialized_start=6069 - _globals['_VMSERVICEVALIDATEADDIPRESPONSE']._serialized_end=6101 - _globals['_VMSERVICE']._serialized_start=6423 - _globals['_VMSERVICE']._serialized_end=8106 -# @@protoc_insertion_point(module_scope) diff --git a/python/fits/client/client.py b/python/fits/client/client.py index 2c13a7c..4e77726 100755 --- a/python/fits/client/client.py +++ b/python/fits/client/client.py @@ -2,6 +2,12 @@ import pyqwest +import fits.apimvm.v1.location_connect as apimvm_location_connect +import fits.apimvm.v1.mvm_connect as apimvm_mvm_connect +import fits.apimvm.v1.os_connect as apimvm_os_connect +import fits.apimvm.v1.stagetype_connect as apimvm_stagetype_connect +import fits.apimvm.v1.vlan_connect as apimvm_vlan_connect + import fits.api.v1.health_connect as api_health_connect import fits.api.v1.ip_connect as api_ip_connect import fits.api.v1.method_connect as api_method_connect @@ -10,12 +16,6 @@ import fits.api.v1.token_connect as api_token_connect import fits.api.v1.version_connect as api_version_connect -import fits.apivm.v1.location_connect as apivm_location_connect -import fits.apivm.v1.os_connect as apivm_os_connect -import fits.apivm.v1.stagetype_connect as apivm_stagetype_connect -import fits.apivm.v1.vlan_connect as apivm_vlan_connect -import fits.apivm.v1.vm_connect as apivm_vm_connect - @@ -32,13 +32,36 @@ def __init__(self, baseurl: str, timeout: float = 10, interceptors: list = []): self._client = pyqwest.SyncClient(transport=transport) + def apimvmv1(self): + return self._Apimvmv1(baseurl=self._baseurl, client=self._client, interceptors=self._interceptors) + def apiv1(self): return self._Apiv1(baseurl=self._baseurl, client=self._client, interceptors=self._interceptors) - def apivmv1(self): - return self._Apivmv1(baseurl=self._baseurl, client=self._client, interceptors=self._interceptors) + class _Apimvmv1: + def __init__(self, baseurl: str, client: pyqwest.SyncClient = None, interceptors: list = []): + self._baseurl = baseurl + self._client = client + self._interceptors = list(interceptors) + + + def location(self): + return apimvm_location_connect.LocationServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + + def mvm(self): + return apimvm_mvm_connect.MVMServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + + def os(self): + return apimvm_os_connect.OSServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + + def stagetype(self): + return apimvm_stagetype_connect.StageTypeServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + + def vlan(self): + return apimvm_vlan_connect.VLANServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + class _Apiv1: def __init__(self, baseurl: str, client: pyqwest.SyncClient = None, interceptors: list = []): @@ -69,26 +92,3 @@ def version(self): return api_version_connect.VersionServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) - class _Apivmv1: - def __init__(self, baseurl: str, client: pyqwest.SyncClient = None, interceptors: list = []): - self._baseurl = baseurl - self._client = client - self._interceptors = list(interceptors) - - - def location(self): - return apivm_location_connect.LocationServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) - - def os(self): - return apivm_os_connect.OSServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) - - def stagetype(self): - return apivm_stagetype_connect.StageTypeServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) - - def vlan(self): - return apivm_vlan_connect.VlanServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) - - def vm(self): - return apivm_vm_connect.VMServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) - - From b6993144bf734db1d44bedce15b8f343ad1efb53 Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Thu, 24 Sep 2026 14:31:29 +0200 Subject: [PATCH 16/21] review: role scoping and usability fixes --- doc/index.html | 116 ++++++++++--------- go/fits/api/mvm/v1/location.pb.go | 4 +- go/fits/api/mvm/v1/os.pb.go | 121 ++++++++++++++------ go/fits/api/mvm/v1/vlan.pb.go | 96 ++++------------ go/fits/api/v1/predefined_rules.pb.go | 53 ++++++--- go/permissions/servicepermissions.go | 47 ++++---- js/fits/api/mvm/v1/location_pb.ts | 4 +- js/fits/api/mvm/v1/os_pb.ts | 59 +++++++--- js/fits/api/mvm/v1/stagetype_pb.ts | 1 + js/fits/api/mvm/v1/vlan_pb.ts | 56 +++------ js/fits/api/v1/predefined_rules_pb.ts | 22 ++-- proto/fits/api/mvm/v1/location.proto | 8 +- proto/fits/api/mvm/v1/os.proto | 26 +++-- proto/fits/api/mvm/v1/stagetype.proto | 1 + proto/fits/api/mvm/v1/vlan.proto | 30 ++--- proto/fits/api/v1/predefined_rules.proto | 6 + python/fits/api/mvm/v1/location_pb2.py | 4 +- python/fits/api/mvm/v1/os_pb2.py | 32 +++--- python/fits/api/mvm/v1/os_pb2.pyi | 18 ++- python/fits/api/mvm/v1/vlan_pb2.py | 20 ++-- python/fits/api/mvm/v1/vlan_pb2.pyi | 22 +--- python/fits/api/v1/predefined_rules_pb2.py | 4 +- python/fits/api/v1/predefined_rules_pb2.pyi | 2 + 23 files changed, 399 insertions(+), 353 deletions(-) diff --git a/doc/index.html b/doc/index.html index c0d1d2f..07703c1 100644 --- a/doc/index.html +++ b/doc/index.html @@ -236,6 +236,10 @@

    Table of Contents

    XFile-level Extensions +
  • + XFile-level Extensions +
  • + @@ -586,6 +590,10 @@

    Table of Contents

    +
  • + EOSType +
  • +
  • @@ -1110,6 +1118,14 @@

    File-level Extensions

    IsIpOrHostname validates that the given string is either a ip or a hostname

    +
  • + + + + + + + @@ -1690,7 +1706,7 @@

    LocationServiceListRequestLocationServiceListResponse

    -

    LocationServiceListResponse is the response payload for a location list request

    +

    LocationServiceListResponse is the response payload for a location list request.

    Method NameRequest TypeResponse TypeDescription
    GetVMServiceGetRequestVMServiceGetResponse

    Returns the VM with the specified UUID.

    CreateVMServiceCreateRequestVMServiceCreateResponse

    Creates a new VM.

    UpdateVMServiceUpdateRequestVMServiceUpdateResponse

    Updates a VM.

    ListVMServiceListRequestVMServiceListResponse

    Returns the list of all VMs.

    DeleteVMServiceDeleteRequestVMServiceDeleteResponse

    Deletes a VM.

    AddDiskVMServiceAddDiskRequestVMServiceAddDiskResponse

    Orders an additional data disk for a VM.

    UpdateDiskVMServiceUpdateDiskRequestVMServiceUpdateDiskResponse

    Changes the size or auto-extend behavior of an existing data disk.

    DeleteDiskVMServiceDeleteDiskRequestVMServiceDeleteDiskResponse

    Cancels a data disk.

    AddIPVMServiceAddIPRequestVMServiceAddIPResponse

    Orders an additional IP address for a VM.

    MoveIPVMServiceMoveIPRequestVMServiceMoveIPResponse

    Moves an IP address from one VM to another.

    DeleteIPVMServiceDeleteIPRequestVMServiceDeleteIPResponse

    Deletes an IP address from a VM.

    ValidateCreateVMServiceValidateCreateRequestVMServiceValidateCreateResponse

    Validates a VM create request without creating anything. Intended for -form pre-checks; the create endpoint validates again before executing.

    ValidateAddDiskVMServiceValidateAddDiskRequestVMServiceValidateAddDiskResponse

    Validates an AddDisk request without ordering anything.

    ValidateUpdateDiskVMServiceValidateUpdateDiskRequestVMServiceValidateUpdateDiskResponse

    Validates an UpdateDisk request without changing anything.

    ValidateAddIPVMServiceValidateAddIPRequestVMServiceValidateAddIPResponse

    Validates an AddIP request without ordering anything.

    VersionServiceGetRequestVersionServiceGetResponse

    Returns the version of the application.

    is_ipv4_cidrbool.buf.validate.StringRules80048959

    IsIpv4Cidr validates if the given string is a valid IPv4 CIDR, e.g. 10.0.0.0/24

    is_name bool
    @@ -1764,10 +1780,11 @@

    VLAN

    - + - + @@ -1778,47 +1795,12 @@

    VLAN

    - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1830,7 +1812,9 @@

    VLAN

    - + @@ -1861,7 +1845,9 @@

    VLANServiceListRequest

    - + @@ -3565,28 +3551,21 @@

    OS

    - + - + - + - - - - - - - - + @@ -3617,7 +3596,7 @@

    OSServiceListResponse

    - + @@ -3629,6 +3608,35 @@

    OSServiceListResponse

    +

    OSType

    +

    OSType specifies the type of an operating system.

    +
    idvlan_id int32

    Id of this VLAN

    Id of this VLAN +This is not a foreign key, this is the actual ID of the VLAN the network interface is attached to.

    subnetsubnet_cidr string

    CIDR of the subnet this VLAN belongs to

    subnetmaskstring

    Subnetmask of this VLAN

    gatewaystring

    Gateway of this VLAN

    ip_range_startstring

    Start of the usable IP range of this VLAN

    ip_range_endstring

    End of the usable IP range of this VLAN

    use_dhcpbool

    Whether DHCP is used on this VLAN

    location_uuid string stage_type_uuid string

    Uuid of the stage type of this VLAN

    TODO: instead of a stage type, this should be mapped to a project. +TODO: this would have to be re-mapped in the customer onboarding +Uuid of the stage type of this VLAN

    tenant string

    Tenant to list available VLANs for

    Tenant to list available VLANs for + +TODO should be filterable by project as well

    uuid string

    Uuid of this OS

    Uuid of this OS.

    title string

    Title of the OS

    Title of the OS.

    typestringOSType

    Type of the OS

    versionstring

    Version of the OS

    Type of the OS.

    operating_systems OS repeated

    The available operating systems

    The available operating systems.

    + + + + + + + + + + + + + + + + + + + + + + + + +
    NameNumberDescription
    OS_TYPE_UNSPECIFIED0

    OS_TYPE_UNSPECIFIED is not specified.

    OS_TYPE_LINUX1

    OS_TYPE_LINUX is a Linux operating system.

    OS_TYPE_WINDOWS2

    OS_TYPE_WINDOWS is a Windows operating system.

    + @@ -3729,7 +3737,7 @@

    StageTypeServiceListRespon

    StageTypeService

    -

    StageTypeService lists stage types available for managed VM (MVM) instances.

    +

    TODO: this type may be completely removed, as VLANs could be project-scoped

    StageTypeService lists stage types available for managed VM (MVM) instances.

    diff --git a/go/fits/api/mvm/v1/location.pb.go b/go/fits/api/mvm/v1/location.pb.go index c27daa2..138b411 100644 --- a/go/fits/api/mvm/v1/location.pb.go +++ b/go/fits/api/mvm/v1/location.pb.go @@ -124,7 +124,7 @@ func (x *LocationServiceListRequest) GetTenant() string { return "" } -// LocationServiceListResponse is the response payload for a location list request +// LocationServiceListResponse is the response payload for a location list request. type LocationServiceListResponse struct { state protoimpl.MessageState `protogen:"open.v1"` // The available locations @@ -183,7 +183,7 @@ const file_fits_api_mvm_v1_location_proto_rawDesc = "" + "\x1bLocationServiceListResponse\x127\n" + "\tlocations\x18\x01 \x03(\v2\x19.fits.api.mvm.v1.LocationR\tlocations2\x81\x01\n" + "\x0fLocationService\x12n\n" + - "\x04List\x12+.fits.api.mvm.v1.LocationServiceListRequest\x1a,.fits.api.mvm.v1.LocationServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xb2\x01\n" + + "\x04List\x12+.fits.api.mvm.v1.LocationServiceListRequest\x1a,.fits.api.mvm.v1.LocationServiceListResponse\"\v\xc2\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xb2\x01\n" + "\x13com.fits.api.mvm.v1B\rLocationProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03FAM\xaa\x02\x0fFits.Api.Mvm.V1\xca\x02\x0fFits\\Api\\Mvm\\V1\xe2\x02\x1bFits\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12Fits::Api::Mvm::V1b\x06proto3" var ( diff --git a/go/fits/api/mvm/v1/os.pb.go b/go/fits/api/mvm/v1/os.pb.go index 3730fd6..b238630 100644 --- a/go/fits/api/mvm/v1/os.pb.go +++ b/go/fits/api/mvm/v1/os.pb.go @@ -23,17 +23,68 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// OSType specifies the type of an operating system. +type OSType int32 + +const ( + // OS_TYPE_UNSPECIFIED is not specified. + OSType_OS_TYPE_UNSPECIFIED OSType = 0 + // OS_TYPE_LINUX is a Linux operating system. + OSType_OS_TYPE_LINUX OSType = 1 + // OS_TYPE_WINDOWS is a Windows operating system. + OSType_OS_TYPE_WINDOWS OSType = 2 +) + +// Enum value maps for OSType. +var ( + OSType_name = map[int32]string{ + 0: "OS_TYPE_UNSPECIFIED", + 1: "OS_TYPE_LINUX", + 2: "OS_TYPE_WINDOWS", + } + OSType_value = map[string]int32{ + "OS_TYPE_UNSPECIFIED": 0, + "OS_TYPE_LINUX": 1, + "OS_TYPE_WINDOWS": 2, + } +) + +func (x OSType) Enum() *OSType { + p := new(OSType) + *p = x + return p +} + +func (x OSType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (OSType) Descriptor() protoreflect.EnumDescriptor { + return file_fits_api_mvm_v1_os_proto_enumTypes[0].Descriptor() +} + +func (OSType) Type() protoreflect.EnumType { + return &file_fits_api_mvm_v1_os_proto_enumTypes[0] +} + +func (x OSType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use OSType.Descriptor instead. +func (OSType) EnumDescriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_os_proto_rawDescGZIP(), []int{0} +} + // OS is the definition of an available OS for MVM instances. type OS struct { state protoimpl.MessageState `protogen:"open.v1"` - // Uuid of this OS + // Uuid of this OS. Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // Title of the OS + // Title of the OS. Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` - // Type of the OS - Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` - // Version of the OS - Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` + // Type of the OS. + Type OSType `protobuf:"varint,3,opt,name=type,proto3,enum=fits.api.mvm.v1.OSType" json:"type,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -82,18 +133,11 @@ func (x *OS) GetTitle() string { return "" } -func (x *OS) GetType() string { +func (x *OS) GetType() OSType { if x != nil { return x.Type } - return "" -} - -func (x *OS) GetVersion() string { - if x != nil { - return x.Version - } - return "" + return OSType_OS_TYPE_UNSPECIFIED } // OSServiceListRequest is the request payload for a OS list request. @@ -136,7 +180,7 @@ func (*OSServiceListRequest) Descriptor() ([]byte, []int) { // OSServiceListResponse is the response payload for a OS list request type OSServiceListResponse struct { state protoimpl.MessageState `protogen:"open.v1"` - // The available operating systems + // The available operating systems. OperatingSystems []*OS `protobuf:"bytes,1,rep,name=operating_systems,json=operatingSystems,proto3" json:"operating_systems,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -183,17 +227,20 @@ var File_fits_api_mvm_v1_os_proto protoreflect.FileDescriptor const file_fits_api_mvm_v1_os_proto_rawDesc = "" + "\n" + - "\x18fits/api/mvm/v1/os.proto\x12\x0ffits.api.mvm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x8d\x01\n" + + "\x18fits/api/mvm/v1/os.proto\x12\x0ffits.api.mvm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"r\n" + "\x02OS\x12\x1c\n" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n" + - "\x05title\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\x12\x1f\n" + - "\x04type\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04type\x12%\n" + - "\aversion\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\aversion\"\x16\n" + + "\x05title\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\x12+\n" + + "\x04type\x18\x03 \x01(\x0e2\x17.fits.api.mvm.v1.OSTypeR\x04type\"\x16\n" + "\x14OSServiceListRequest\"Y\n" + "\x15OSServiceListResponse\x12@\n" + - "\x11operating_systems\x18\x01 \x03(\v2\x13.fits.api.mvm.v1.OSR\x10operatingSystems2o\n" + - "\tOSService\x12b\n" + - "\x04List\x12%.fits.api.mvm.v1.OSServiceListRequest\x1a&.fits.api.mvm.v1.OSServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xac\x01\n" + + "\x11operating_systems\x18\x01 \x03(\v2\x13.fits.api.mvm.v1.OSR\x10operatingSystems*g\n" + + "\x06OSType\x12\x1d\n" + + "\x13OS_TYPE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1c\n" + + "\rOS_TYPE_LINUX\x10\x01\x1a\t\x82\xb2\x19\x05linux\x12 \n" + + "\x0fOS_TYPE_WINDOWS\x10\x02\x1a\v\x82\xb2\x19\awindows2l\n" + + "\tOSService\x12_\n" + + "\x04List\x12%.fits.api.mvm.v1.OSServiceListRequest\x1a&.fits.api.mvm.v1.OSServiceListResponse\"\b\xd8\xf3\x18\x02\xe0\xf3\x18\x02B\xac\x01\n" + "\x13com.fits.api.mvm.v1B\aOsProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03FAM\xaa\x02\x0fFits.Api.Mvm.V1\xca\x02\x0fFits\\Api\\Mvm\\V1\xe2\x02\x1bFits\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12Fits::Api::Mvm::V1b\x06proto3" var ( @@ -208,21 +255,24 @@ func file_fits_api_mvm_v1_os_proto_rawDescGZIP() []byte { return file_fits_api_mvm_v1_os_proto_rawDescData } +var file_fits_api_mvm_v1_os_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_fits_api_mvm_v1_os_proto_msgTypes = make([]protoimpl.MessageInfo, 3) var file_fits_api_mvm_v1_os_proto_goTypes = []any{ - (*OS)(nil), // 0: fits.api.mvm.v1.OS - (*OSServiceListRequest)(nil), // 1: fits.api.mvm.v1.OSServiceListRequest - (*OSServiceListResponse)(nil), // 2: fits.api.mvm.v1.OSServiceListResponse + (OSType)(0), // 0: fits.api.mvm.v1.OSType + (*OS)(nil), // 1: fits.api.mvm.v1.OS + (*OSServiceListRequest)(nil), // 2: fits.api.mvm.v1.OSServiceListRequest + (*OSServiceListResponse)(nil), // 3: fits.api.mvm.v1.OSServiceListResponse } var file_fits_api_mvm_v1_os_proto_depIdxs = []int32{ - 0, // 0: fits.api.mvm.v1.OSServiceListResponse.operating_systems:type_name -> fits.api.mvm.v1.OS - 1, // 1: fits.api.mvm.v1.OSService.List:input_type -> fits.api.mvm.v1.OSServiceListRequest - 2, // 2: fits.api.mvm.v1.OSService.List:output_type -> fits.api.mvm.v1.OSServiceListResponse - 2, // [2:3] is the sub-list for method output_type - 1, // [1:2] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name + 0, // 0: fits.api.mvm.v1.OS.type:type_name -> fits.api.mvm.v1.OSType + 1, // 1: fits.api.mvm.v1.OSServiceListResponse.operating_systems:type_name -> fits.api.mvm.v1.OS + 2, // 2: fits.api.mvm.v1.OSService.List:input_type -> fits.api.mvm.v1.OSServiceListRequest + 3, // 3: fits.api.mvm.v1.OSService.List:output_type -> fits.api.mvm.v1.OSServiceListResponse + 3, // [3:4] is the sub-list for method output_type + 2, // [2:3] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name } func init() { file_fits_api_mvm_v1_os_proto_init() } @@ -235,13 +285,14 @@ func file_fits_api_mvm_v1_os_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_mvm_v1_os_proto_rawDesc), len(file_fits_api_mvm_v1_os_proto_rawDesc)), - NumEnums: 0, + NumEnums: 1, NumMessages: 3, NumExtensions: 0, NumServices: 1, }, GoTypes: file_fits_api_mvm_v1_os_proto_goTypes, DependencyIndexes: file_fits_api_mvm_v1_os_proto_depIdxs, + EnumInfos: file_fits_api_mvm_v1_os_proto_enumTypes, MessageInfos: file_fits_api_mvm_v1_os_proto_msgTypes, }.Build() File_fits_api_mvm_v1_os_proto = out.File diff --git a/go/fits/api/mvm/v1/vlan.pb.go b/go/fits/api/mvm/v1/vlan.pb.go index 57253f3..e314fb2 100644 --- a/go/fits/api/mvm/v1/vlan.pb.go +++ b/go/fits/api/mvm/v1/vlan.pb.go @@ -29,27 +29,20 @@ type VLAN struct { // Uuid of this VLAN Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` // Id of this VLAN - Id int32 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"` + // This is not a foreign key, this is the actual ID of the VLAN the network interface is attached to. + VlanId int32 `protobuf:"varint,2,opt,name=vlan_id,json=vlanId,proto3" json:"vlan_id,omitempty"` // Title of the subnet this VLAN belongs to SubnetTitle string `protobuf:"bytes,3,opt,name=subnet_title,json=subnetTitle,proto3" json:"subnet_title,omitempty"` // CIDR of the subnet this VLAN belongs to - Subnet string `protobuf:"bytes,4,opt,name=subnet,proto3" json:"subnet,omitempty"` - // Subnetmask of this VLAN - Subnetmask string `protobuf:"bytes,5,opt,name=subnetmask,proto3" json:"subnetmask,omitempty"` - // Gateway of this VLAN - Gateway string `protobuf:"bytes,6,opt,name=gateway,proto3" json:"gateway,omitempty"` - // Start of the usable IP range of this VLAN - IpRangeStart string `protobuf:"bytes,7,opt,name=ip_range_start,json=ipRangeStart,proto3" json:"ip_range_start,omitempty"` - // End of the usable IP range of this VLAN - IpRangeEnd string `protobuf:"bytes,8,opt,name=ip_range_end,json=ipRangeEnd,proto3" json:"ip_range_end,omitempty"` - // Whether DHCP is used on this VLAN - UseDhcp bool `protobuf:"varint,9,opt,name=use_dhcp,json=useDhcp,proto3" json:"use_dhcp,omitempty"` + SubnetCidr string `protobuf:"bytes,4,opt,name=subnet_cidr,json=subnetCidr,proto3" json:"subnet_cidr,omitempty"` // TODO instead of the pod title, could we have the location_uuid? - LocationUuid *string `protobuf:"bytes,13,opt,name=location_uuid,json=locationUuid,proto3,oneof" json:"location_uuid,omitempty"` + LocationUuid *string `protobuf:"bytes,10,opt,name=location_uuid,json=locationUuid,proto3,oneof" json:"location_uuid,omitempty"` + // TODO: instead of a stage type, this should be mapped to a project. + // TODO: this would have to be re-mapped in the customer onboarding // Uuid of the stage type of this VLAN - StageTypeUuid string `protobuf:"bytes,14,opt,name=stage_type_uuid,json=stageTypeUuid,proto3" json:"stage_type_uuid,omitempty"` + StageTypeUuid string `protobuf:"bytes,11,opt,name=stage_type_uuid,json=stageTypeUuid,proto3" json:"stage_type_uuid,omitempty"` // Tenant this VLAN belongs to. - Tenant string `protobuf:"bytes,15,opt,name=tenant,proto3" json:"tenant,omitempty"` + Tenant string `protobuf:"bytes,12,opt,name=tenant,proto3" json:"tenant,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -91,9 +84,9 @@ func (x *VLAN) GetUuid() string { return "" } -func (x *VLAN) GetId() int32 { +func (x *VLAN) GetVlanId() int32 { if x != nil { - return x.Id + return x.VlanId } return 0 } @@ -105,48 +98,13 @@ func (x *VLAN) GetSubnetTitle() string { return "" } -func (x *VLAN) GetSubnet() string { +func (x *VLAN) GetSubnetCidr() string { if x != nil { - return x.Subnet + return x.SubnetCidr } return "" } -func (x *VLAN) GetSubnetmask() string { - if x != nil { - return x.Subnetmask - } - return "" -} - -func (x *VLAN) GetGateway() string { - if x != nil { - return x.Gateway - } - return "" -} - -func (x *VLAN) GetIpRangeStart() string { - if x != nil { - return x.IpRangeStart - } - return "" -} - -func (x *VLAN) GetIpRangeEnd() string { - if x != nil { - return x.IpRangeEnd - } - return "" -} - -func (x *VLAN) GetUseDhcp() bool { - if x != nil { - return x.UseDhcp - } - return false -} - func (x *VLAN) GetLocationUuid() string { if x != nil && x.LocationUuid != nil { return *x.LocationUuid @@ -172,7 +130,7 @@ func (x *VLAN) GetTenant() string { type VLANServiceListRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // Tenant to list available VLANs for - Tenant string `protobuf:"bytes,1,opt,name=tenant,proto3" json:"tenant,omitempty"` + Tenant string `protobuf:"bytes,1,opt,name=tenant,proto3" json:"tenant,omitempty"` // TODO should be filterable by project as well unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -264,30 +222,24 @@ var File_fits_api_mvm_v1_vlan_proto protoreflect.FileDescriptor const file_fits_api_mvm_v1_vlan_proto_rawDesc = "" + "\n" + - "\x1afits/api/mvm/v1/vlan.proto\x12\x0ffits.api.mvm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xb6\x03\n" + + "\x1afits/api/mvm/v1/vlan.proto\x12\x0ffits.api.mvm.v1\x1a\x1bbuf/validate/validate.proto\x1a\x18fits/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xb8\x02\n" + "\x04VLAN\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x0e\n" + - "\x02id\x18\x02 \x01(\x05R\x02id\x12.\n" + - "\fsubnet_title\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\vsubnetTitle\x12\x16\n" + - "\x06subnet\x18\x04 \x01(\tR\x06subnet\x12\x1e\n" + - "\n" + - "subnetmask\x18\x05 \x01(\tR\n" + - "subnetmask\x12\x18\n" + - "\agateway\x18\x06 \x01(\tR\agateway\x12$\n" + - "\x0eip_range_start\x18\a \x01(\tR\fipRangeStart\x12 \n" + - "\fip_range_end\x18\b \x01(\tR\n" + - "ipRangeEnd\x12\x19\n" + - "\buse_dhcp\x18\t \x01(\bR\auseDhcp\x122\n" + - "\rlocation_uuid\x18\r \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\flocationUuid\x88\x01\x01\x120\n" + - "\x0fstage_type_uuid\x18\x0e \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12#\n" + - "\x06tenant\x18\x0f \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x10\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x17\n" + + "\avlan_id\x18\x02 \x01(\x05R\x06vlanId\x12.\n" + + "\fsubnet_title\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\vsubnetTitle\x12,\n" + + "\vsubnet_cidr\x18\x04 \x01(\tB\v\xbaH\br\x06\xf8\xb3\xae\xb1\x02\x01R\n" + + "subnetCidr\x122\n" + + "\rlocation_uuid\x18\n" + + " \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\flocationUuid\x88\x01\x01\x120\n" + + "\x0fstage_type_uuid\x18\v \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12#\n" + + "\x06tenant\x18\f \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x10\n" + "\x0e_location_uuid\"=\n" + "\x16VLANServiceListRequest\x12#\n" + "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"F\n" + "\x17VLANServiceListResponse\x12+\n" + "\x05vlans\x18\x01 \x03(\v2\x15.fits.api.mvm.v1.VLANR\x05vlans2u\n" + "\vVLANService\x12f\n" + - "\x04List\x12'.fits.api.mvm.v1.VLANServiceListRequest\x1a(.fits.api.mvm.v1.VLANServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xae\x01\n" + + "\x04List\x12'.fits.api.mvm.v1.VLANServiceListRequest\x1a(.fits.api.mvm.v1.VLANServiceListResponse\"\v\xc2\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xae\x01\n" + "\x13com.fits.api.mvm.v1B\tVlanProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03FAM\xaa\x02\x0fFits.Api.Mvm.V1\xca\x02\x0fFits\\Api\\Mvm\\V1\xe2\x02\x1bFits\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12Fits::Api::Mvm::V1b\x06proto3" var ( diff --git a/go/fits/api/v1/predefined_rules.pb.go b/go/fits/api/v1/predefined_rules.pb.go index 534ebe2..a0dd2ba 100644 --- a/go/fits/api/v1/predefined_rules.pb.go +++ b/go/fits/api/v1/predefined_rules.pb.go @@ -86,6 +86,14 @@ var file_fits_api_v1_predefined_rules_proto_extTypes = []protoimpl.ExtensionInfo Tag: "varint,80048958,opt,name=trimmed", Filename: "fits/api/v1/predefined_rules.proto", }, + { + ExtendedType: (*validate.StringRules)(nil), + ExtensionType: (*bool)(nil), + Field: 80048959, + Name: "fits.api.v1.is_ipv4_cidr", + Tag: "varint,80048959,opt,name=is_ipv4_cidr", + Filename: "fits/api/v1/predefined_rules.proto", + }, { ExtendedType: (*validate.RepeatedRules)(nil), ExtensionType: (*bool)(nil), @@ -170,6 +178,10 @@ var ( // // optional bool trimmed = 80048958; E_Trimmed = &file_fits_api_v1_predefined_rules_proto_extTypes[7] + // IsIpv4Cidr validates if the given string is a valid IPv4 CIDR, e.g. 10.0.0.0/24 + // + // optional bool is_ipv4_cidr = 80048959; + E_IsIpv4Cidr = &file_fits_api_v1_predefined_rules_proto_extTypes[8] ) // Extension fields to validate.RepeatedRules. @@ -177,19 +189,19 @@ var ( // Prefixes validates if a slice of prefixes in string form are valid // // optional bool prefixes = 80058951; - E_Prefixes = &file_fits_api_v1_predefined_rules_proto_extTypes[8] + E_Prefixes = &file_fits_api_v1_predefined_rules_proto_extTypes[9] // Ips validates if a slice of ips in string form are valid // // optional bool ips = 80058952; - E_Ips = &file_fits_api_v1_predefined_rules_proto_extTypes[9] + E_Ips = &file_fits_api_v1_predefined_rules_proto_extTypes[10] // AreHostAndPort validates if a slice of strings are all in the form of : // // optional bool are_host_and_port = 80058953; - E_AreHostAndPort = &file_fits_api_v1_predefined_rules_proto_extTypes[10] + E_AreHostAndPort = &file_fits_api_v1_predefined_rules_proto_extTypes[11] // All Trimmed enforces all strings to be trimmed, e.g. no whitespaces at the begin and end // // optional bool all_trimmed = 80058954; - E_AllTrimmed = &file_fits_api_v1_predefined_rules_proto_extTypes[11] + E_AllTrimmed = &file_fits_api_v1_predefined_rules_proto_extTypes[12] ) // Extension fields to validate.MapRules. @@ -197,11 +209,11 @@ var ( // Keys and Values trimmed enforces all map keys and values to be trimmed, e.g. no whitespaces at the begin and end // // optional bool keys_and_values_trimmed = 80068951; - E_KeysAndValuesTrimmed = &file_fits_api_v1_predefined_rules_proto_extTypes[12] + E_KeysAndValuesTrimmed = &file_fits_api_v1_predefined_rules_proto_extTypes[13] // Keys trimmed enforces all map keys and values to be trimmed, e.g. no whitespaces at the begin and end // // optional bool keys_trimmed = 80068952; - E_KeysTrimmed = &file_fits_api_v1_predefined_rules_proto_extTypes[13] + E_KeysTrimmed = &file_fits_api_v1_predefined_rules_proto_extTypes[14] ) var File_fits_api_v1_predefined_rules_proto protoreflect.FileDescriptor @@ -235,7 +247,11 @@ const file_fits_api_v1_predefined_rules_proto_rawDesc = "" + "\rvalid_address\x12&must be a valid IP address or hostname\x1a this.isIp() || this.isHostname()R\x0eisIpOrHostname:\x9d\x01\n" + "\atrimmed\x12\x19.buf.validate.StringRules\x18\xbe\xe6\x95& \x01(\bBe\xc2Hb\n" + "`\n" + - "\x0estring.trimmed\x12+value must not start or end with whitespace\x1a!this.trim().size() == this.size()R\atrimmed:\x8f\x01\n" + + "\x0estring.trimmed\x12+value must not start or end with whitespace\x1a!this.trim().size() == this.size()R\atrimmed:\xb1\x01\n" + + "\fis_ipv4_cidr\x12\x19.buf.validate.StringRules\x18\xbf\xe6\x95& \x01(\bBq\xc2Hn\n" + + "l\n" + + "\x13string.is_ipv4_cidr\x12+must be a valid IPv4 CIDR, e.g. 10.0.0.0/24\x1a(this.isIpPrefix() && !this.contains(':')R\n" + + "isIpv4Cidr:\x8f\x01\n" + "\bprefixes\x12\x1b.buf.validate.RepeatedRules\x18Ǵ\x96& \x01(\bBS\xc2HP\n" + "N\n" + "\x11repeated.prefixes\x12\x1cgiven prefixes must be valid\x1a\x1bthis.all(m, m.isIpPrefix())R\bprefixes:u\n" + @@ -271,16 +287,17 @@ var file_fits_api_v1_predefined_rules_proto_depIdxs = []int32{ 0, // 5: fits.api.v1.is_uri:extendee -> buf.validate.StringRules 0, // 6: fits.api.v1.is_ip_or_hostname:extendee -> buf.validate.StringRules 0, // 7: fits.api.v1.trimmed:extendee -> buf.validate.StringRules - 1, // 8: fits.api.v1.prefixes:extendee -> buf.validate.RepeatedRules - 1, // 9: fits.api.v1.ips:extendee -> buf.validate.RepeatedRules - 1, // 10: fits.api.v1.are_host_and_port:extendee -> buf.validate.RepeatedRules - 1, // 11: fits.api.v1.all_trimmed:extendee -> buf.validate.RepeatedRules - 2, // 12: fits.api.v1.keys_and_values_trimmed:extendee -> buf.validate.MapRules - 2, // 13: fits.api.v1.keys_trimmed:extendee -> buf.validate.MapRules - 14, // [14:14] is the sub-list for method output_type - 14, // [14:14] is the sub-list for method input_type - 14, // [14:14] is the sub-list for extension type_name - 0, // [0:14] is the sub-list for extension extendee + 0, // 8: fits.api.v1.is_ipv4_cidr:extendee -> buf.validate.StringRules + 1, // 9: fits.api.v1.prefixes:extendee -> buf.validate.RepeatedRules + 1, // 10: fits.api.v1.ips:extendee -> buf.validate.RepeatedRules + 1, // 11: fits.api.v1.are_host_and_port:extendee -> buf.validate.RepeatedRules + 1, // 12: fits.api.v1.all_trimmed:extendee -> buf.validate.RepeatedRules + 2, // 13: fits.api.v1.keys_and_values_trimmed:extendee -> buf.validate.MapRules + 2, // 14: fits.api.v1.keys_trimmed:extendee -> buf.validate.MapRules + 15, // [15:15] is the sub-list for method output_type + 15, // [15:15] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 0, // [0:15] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name } @@ -296,7 +313,7 @@ func file_fits_api_v1_predefined_rules_proto_init() { RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_v1_predefined_rules_proto_rawDesc), len(file_fits_api_v1_predefined_rules_proto_rawDesc)), NumEnums: 0, NumMessages: 0, - NumExtensions: 14, + NumExtensions: 15, NumServices: 0, }, GoTypes: file_fits_api_v1_predefined_rules_proto_goTypes, diff --git a/go/permissions/servicepermissions.go b/go/permissions/servicepermissions.go index 9607ffb..95decb7 100755 --- a/go/permissions/servicepermissions.go +++ b/go/permissions/servicepermissions.go @@ -29,19 +29,25 @@ func GetServicePermissions() *ServicePermissions { Admin: Admin{}, Tenant: Tenant{ v1.TenantRole_TENANT_ROLE_OWNER: map[string]struct{}{ - "/fits.api.v1.ProjectService/Create": {}, - "/fits.api.v1.TenantService/Delete": {}, - "/fits.api.v1.TenantService/Get": {}, - "/fits.api.v1.TenantService/Update": {}, + "/fits.api.mvm.v1.LocationService/List": {}, + "/fits.api.mvm.v1.VLANService/List": {}, + "/fits.api.v1.ProjectService/Create": {}, + "/fits.api.v1.TenantService/Delete": {}, + "/fits.api.v1.TenantService/Get": {}, + "/fits.api.v1.TenantService/Update": {}, }, v1.TenantRole_TENANT_ROLE_EDITOR: map[string]struct{}{ - "/fits.api.v1.ProjectService/Create": {}, - "/fits.api.v1.TenantService/Delete": {}, - "/fits.api.v1.TenantService/Get": {}, - "/fits.api.v1.TenantService/Update": {}, + "/fits.api.mvm.v1.LocationService/List": {}, + "/fits.api.mvm.v1.VLANService/List": {}, + "/fits.api.v1.ProjectService/Create": {}, + "/fits.api.v1.TenantService/Delete": {}, + "/fits.api.v1.TenantService/Get": {}, + "/fits.api.v1.TenantService/Update": {}, }, v1.TenantRole_TENANT_ROLE_VIEWER: map[string]struct{}{ - "/fits.api.v1.TenantService/Get": {}, + "/fits.api.mvm.v1.LocationService/List": {}, + "/fits.api.mvm.v1.VLANService/List": {}, + "/fits.api.v1.TenantService/Get": {}, }, v1.TenantRole_TENANT_ROLE_GUEST: map[string]struct{}{ "/fits.api.v1.TenantService/Get": {}, @@ -49,7 +55,6 @@ func GetServicePermissions() *ServicePermissions { }, Project: Project{ v1.ProjectRole_PROJECT_ROLE_OWNER: map[string]struct{}{ - "/fits.api.mvm.v1.LocationService/List": {}, "/fits.api.mvm.v1.MVMService/AddDisk": {}, "/fits.api.mvm.v1.MVMService/AddNetworkInterface": {}, "/fits.api.mvm.v1.MVMService/Create": {}, @@ -65,9 +70,7 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": {}, "/fits.api.mvm.v1.MVMService/ValidateCreate": {}, "/fits.api.mvm.v1.MVMService/ValidateUpdateDisk": {}, - "/fits.api.mvm.v1.OSService/List": {}, "/fits.api.mvm.v1.StageTypeService/List": {}, - "/fits.api.mvm.v1.VLANService/List": {}, "/fits.api.v1.IPService/Create": {}, "/fits.api.v1.IPService/Delete": {}, "/fits.api.v1.IPService/Get": {}, @@ -78,7 +81,6 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.v1.ProjectService/Update": {}, }, v1.ProjectRole_PROJECT_ROLE_EDITOR: map[string]struct{}{ - "/fits.api.mvm.v1.LocationService/List": {}, "/fits.api.mvm.v1.MVMService/AddDisk": {}, "/fits.api.mvm.v1.MVMService/AddNetworkInterface": {}, "/fits.api.mvm.v1.MVMService/Create": {}, @@ -94,9 +96,7 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": {}, "/fits.api.mvm.v1.MVMService/ValidateCreate": {}, "/fits.api.mvm.v1.MVMService/ValidateUpdateDisk": {}, - "/fits.api.mvm.v1.OSService/List": {}, "/fits.api.mvm.v1.StageTypeService/List": {}, - "/fits.api.mvm.v1.VLANService/List": {}, "/fits.api.v1.IPService/Create": {}, "/fits.api.v1.IPService/Delete": {}, "/fits.api.v1.IPService/Get": {}, @@ -106,12 +106,9 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.v1.ProjectService/Update": {}, }, v1.ProjectRole_PROJECT_ROLE_VIEWER: map[string]struct{}{ - "/fits.api.mvm.v1.LocationService/List": {}, "/fits.api.mvm.v1.MVMService/Get": {}, "/fits.api.mvm.v1.MVMService/List": {}, - "/fits.api.mvm.v1.OSService/List": {}, "/fits.api.mvm.v1.StageTypeService/List": {}, - "/fits.api.mvm.v1.VLANService/List": {}, "/fits.api.v1.IPService/Get": {}, "/fits.api.v1.IPService/List": {}, "/fits.api.v1.ProjectService/Get": {}, @@ -175,6 +172,7 @@ func GetServicePermissions() *ServicePermissions { "/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo": true, }, Self: map[string]bool{ + "/fits.api.mvm.v1.OSService/List": true, "/fits.api.v1.MethodService/TokenScopedList": true, "/fits.api.v1.ProjectService/List": true, "/fits.api.v1.TenantService/Create": true, @@ -188,13 +186,14 @@ func GetServicePermissions() *ServicePermissions { }, Admin: map[string]bool{}, Tenant: map[string]bool{ - "/fits.api.v1.ProjectService/Create": true, - "/fits.api.v1.TenantService/Delete": true, - "/fits.api.v1.TenantService/Get": true, - "/fits.api.v1.TenantService/Update": true, + "/fits.api.mvm.v1.LocationService/List": true, + "/fits.api.mvm.v1.VLANService/List": true, + "/fits.api.v1.ProjectService/Create": true, + "/fits.api.v1.TenantService/Delete": true, + "/fits.api.v1.TenantService/Get": true, + "/fits.api.v1.TenantService/Update": true, }, Project: map[string]bool{ - "/fits.api.mvm.v1.LocationService/List": true, "/fits.api.mvm.v1.MVMService/AddDisk": true, "/fits.api.mvm.v1.MVMService/AddNetworkInterface": true, "/fits.api.mvm.v1.MVMService/Create": true, @@ -210,9 +209,7 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": true, "/fits.api.mvm.v1.MVMService/ValidateCreate": true, "/fits.api.mvm.v1.MVMService/ValidateUpdateDisk": true, - "/fits.api.mvm.v1.OSService/List": true, "/fits.api.mvm.v1.StageTypeService/List": true, - "/fits.api.mvm.v1.VLANService/List": true, "/fits.api.v1.IPService/Create": true, "/fits.api.v1.IPService/Delete": true, "/fits.api.v1.IPService/Get": true, diff --git a/js/fits/api/mvm/v1/location_pb.ts b/js/fits/api/mvm/v1/location_pb.ts index 91000df..c6d44b1 100644 --- a/js/fits/api/mvm/v1/location_pb.ts +++ b/js/fits/api/mvm/v1/location_pb.ts @@ -13,7 +13,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file fits/api/mvm/v1/location.proto. */ export const file_fits_api_mvm_v1_location: GenFile = /*@__PURE__*/ - fileDesc("Ch5maXRzL2FwaS9tdm0vdjEvbG9jYXRpb24ucHJvdG8SD2ZpdHMuYXBpLm12bS52MSI+CghMb2NhdGlvbhIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIaCgV0aXRsZRgCIAEoCUILukgIcgbAs66xAgEiOQoaTG9jYXRpb25TZXJ2aWNlTGlzdFJlcXVlc3QSGwoGdGVuYW50GAEgASgJQgu6SAhyBsCzrrECASJLChtMb2NhdGlvblNlcnZpY2VMaXN0UmVzcG9uc2USLAoJbG9jYXRpb25zGAEgAygLMhkuZml0cy5hcGkubXZtLnYxLkxvY2F0aW9uMoEBCg9Mb2NhdGlvblNlcnZpY2USbgoETGlzdBIrLmZpdHMuYXBpLm12bS52MS5Mb2NhdGlvblNlcnZpY2VMaXN0UmVxdWVzdBosLmZpdHMuYXBpLm12bS52MS5Mb2NhdGlvblNlcnZpY2VMaXN0UmVzcG9uc2UiC8rzGAMBAgPg8xgCQrIBChNjb20uZml0cy5hcGkubXZtLnYxQg1Mb2NhdGlvblByb3RvUAFaLWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL212bS92MTttdm12MaICA0ZBTaoCD0ZpdHMuQXBpLk12bS5WMcoCD0ZpdHNcQXBpXE12bVxWMeICG0ZpdHNcQXBpXE12bVxWMVxHUEJNZXRhZGF0YeoCEkZpdHM6OkFwaTo6TXZtOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); + fileDesc("Ch5maXRzL2FwaS9tdm0vdjEvbG9jYXRpb24ucHJvdG8SD2ZpdHMuYXBpLm12bS52MSI+CghMb2NhdGlvbhIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIaCgV0aXRsZRgCIAEoCUILukgIcgbAs66xAgEiOQoaTG9jYXRpb25TZXJ2aWNlTGlzdFJlcXVlc3QSGwoGdGVuYW50GAEgASgJQgu6SAhyBsCzrrECASJLChtMb2NhdGlvblNlcnZpY2VMaXN0UmVzcG9uc2USLAoJbG9jYXRpb25zGAEgAygLMhkuZml0cy5hcGkubXZtLnYxLkxvY2F0aW9uMoEBCg9Mb2NhdGlvblNlcnZpY2USbgoETGlzdBIrLmZpdHMuYXBpLm12bS52MS5Mb2NhdGlvblNlcnZpY2VMaXN0UmVxdWVzdBosLmZpdHMuYXBpLm12bS52MS5Mb2NhdGlvblNlcnZpY2VMaXN0UmVzcG9uc2UiC8LzGAMBAgPg8xgCQrIBChNjb20uZml0cy5hcGkubXZtLnYxQg1Mb2NhdGlvblByb3RvUAFaLWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL212bS92MTttdm12MaICA0ZBTaoCD0ZpdHMuQXBpLk12bS5WMcoCD0ZpdHNcQXBpXE12bVxWMeICG0ZpdHNcQXBpXE12bVxWMVxHUEJNZXRhZGF0YeoCEkZpdHM6OkFwaTo6TXZtOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); /** * Location is the definition of an available datacenter location for MVM instances. @@ -65,7 +65,7 @@ export const LocationServiceListRequestSchema: GenMessage & { /** - * Uuid of this OS + * Uuid of this OS. * * @generated from field: string uuid = 1; */ uuid: string; /** - * Title of the OS + * Title of the OS. * * @generated from field: string title = 2; */ title: string; /** - * Type of the OS + * Type of the OS. * - * @generated from field: string type = 3; + * @generated from field: fits.api.mvm.v1.OSType type = 3; */ - type: string; - - /** - * Version of the OS - * - * @generated from field: string version = 4; - */ - version: string; + type: OSType; }; /** @@ -79,7 +72,7 @@ export const OSServiceListRequestSchema: GenMessage = /*@_ */ export type OSServiceListResponse = Message<"fits.api.mvm.v1.OSServiceListResponse"> & { /** - * The available operating systems + * The available operating systems. * * @generated from field: repeated fits.api.mvm.v1.OS operating_systems = 1; */ @@ -93,6 +86,40 @@ export type OSServiceListResponse = Message<"fits.api.mvm.v1.OSServiceListRespon export const OSServiceListResponseSchema: GenMessage = /*@__PURE__*/ messageDesc(file_fits_api_mvm_v1_os, 2); +/** + * OSType specifies the type of an operating system. + * + * @generated from enum fits.api.mvm.v1.OSType + */ +export enum OSType { + /** + * OS_TYPE_UNSPECIFIED is not specified. + * + * @generated from enum value: OS_TYPE_UNSPECIFIED = 0; + */ + OS_TYPE_UNSPECIFIED = 0, + + /** + * OS_TYPE_LINUX is a Linux operating system. + * + * @generated from enum value: OS_TYPE_LINUX = 1; + */ + OS_TYPE_LINUX = 1, + + /** + * OS_TYPE_WINDOWS is a Windows operating system. + * + * @generated from enum value: OS_TYPE_WINDOWS = 2; + */ + OS_TYPE_WINDOWS = 2, +} + +/** + * Describes the enum fits.api.mvm.v1.OSType. + */ +export const OSTypeSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_fits_api_mvm_v1_os, 0); + /** * OSService lists operating systems available for managed VM (MVM) instances. * diff --git a/js/fits/api/mvm/v1/stagetype_pb.ts b/js/fits/api/mvm/v1/stagetype_pb.ts index f5e7aff..b6d3e0c 100644 --- a/js/fits/api/mvm/v1/stagetype_pb.ts +++ b/js/fits/api/mvm/v1/stagetype_pb.ts @@ -80,6 +80,7 @@ export const StageTypeServiceListResponseSchema: GenMessage & { /** * Id of this VLAN + * This is not a foreign key, this is the actual ID of the VLAN the network interface is attached to. * - * @generated from field: int32 id = 2; + * @generated from field: int32 vlan_id = 2; */ - id: number; + vlanId: number; /** * Title of the subnet this VLAN belongs to @@ -45,63 +46,30 @@ export type VLAN = Message<"fits.api.mvm.v1.VLAN"> & { /** * CIDR of the subnet this VLAN belongs to * - * @generated from field: string subnet = 4; + * @generated from field: string subnet_cidr = 4; */ - subnet: string; - - /** - * Subnetmask of this VLAN - * - * @generated from field: string subnetmask = 5; - */ - subnetmask: string; - - /** - * Gateway of this VLAN - * - * @generated from field: string gateway = 6; - */ - gateway: string; - - /** - * Start of the usable IP range of this VLAN - * - * @generated from field: string ip_range_start = 7; - */ - ipRangeStart: string; - - /** - * End of the usable IP range of this VLAN - * - * @generated from field: string ip_range_end = 8; - */ - ipRangeEnd: string; - - /** - * Whether DHCP is used on this VLAN - * - * @generated from field: bool use_dhcp = 9; - */ - useDhcp: boolean; + subnetCidr: string; /** * TODO instead of the pod title, could we have the location_uuid? * - * @generated from field: optional string location_uuid = 13; + * @generated from field: optional string location_uuid = 10; */ locationUuid?: string | undefined; /** + * TODO: instead of a stage type, this should be mapped to a project. + * TODO: this would have to be re-mapped in the customer onboarding * Uuid of the stage type of this VLAN * - * @generated from field: string stage_type_uuid = 14; + * @generated from field: string stage_type_uuid = 11; */ stageTypeUuid: string; /** * Tenant this VLAN belongs to. * - * @generated from field: string tenant = 15; + * @generated from field: string tenant = 12; */ tenant: string; }; @@ -122,6 +90,8 @@ export type VLANServiceListRequest = Message<"fits.api.mvm.v1.VLANServiceListReq /** * Tenant to list available VLANs for * + * TODO should be filterable by project as well + * * @generated from field: string tenant = 1; */ tenant: string; diff --git a/js/fits/api/v1/predefined_rules_pb.ts b/js/fits/api/v1/predefined_rules_pb.ts index 695cce4..14f2918 100644 --- a/js/fits/api/v1/predefined_rules_pb.ts +++ b/js/fits/api/v1/predefined_rules_pb.ts @@ -11,7 +11,7 @@ import { file_buf_validate_validate } from "../../../buf/validate/validate_pb"; * Describes the file fits/api/v1/predefined_rules.proto. */ export const file_fits_api_v1_predefined_rules: GenFile = /*@__PURE__*/ - fileDesc("CiJmaXRzL2FwaS92MS9wcmVkZWZpbmVkX3J1bGVzLnByb3RvEgtmaXRzLmFwaS52MTq4AQoKbWFjYWRkcmVzcxIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxi35pUmIAEoCEJ6wkh3CnUKEXN0cmluZy5tYWNhZGRyZXNzEiZ0aGlzIHN0cmluZyBtdXN0IGJlIGEgdmFsaWQgbWFjYWRkcmVzcxo4dGhpcy5tYXRjaGVzKCdeKFswLTlBLUZhLWZdezJ9WzpdKXs1fShbMC05QS1GYS1mXXsyfSkkJylSCm1hY2FkZHJlc3M6mQEKB2lzX25hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuOaVJiABKAhCYsJIXwpdCg5zdHJpbmcuaXNfbmFtZRIjbXVzdCBiZSB3aXRoaW4gMiBhbmQgMTI4IGNoYXJhY3RlcnMaJnRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4UgZpc05hbWU6mgEKDmlzX2Rlc2NyaXB0aW9uEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGLnmlSYgASgIQlXCSFIKUAoVc3RyaW5nLmlzX2Rlc2NyaXB0aW9uEiNtdXN0IGJlIHNob3J0ZXIgdGhhbiAyNTYgY2hhcmFjdGVycxoSdGhpcy5zaXplKCkgPD0gMjU2Ug1pc0Rlc2NyaXB0aW9uOqgBCgxpc19wYXJ0aXRpb24SGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuuaVJiABKAhCZ8JIZApiChNzdHJpbmcuaXNfcGFydGl0aW9uEiNtdXN0IGJlIHdpdGhpbiAyIGFuZCAxMjggY2hhcmFjdGVycxomdGhpcy5zaXplKCkgPj0gMiAmJiB0aGlzLnNpemUoKSA8PSAxMjhSC2lzUGFydGl0aW9uOoIBCglpc19wcmVmaXgSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYu+aVJiABKAhCR8JIRApCCg9zdHJpbmcucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaEXRoaXMuaXNJcFByZWZpeCgpUghpc1ByZWZpeDptCgZpc191cmkSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYvOaVJiABKAhCOMJINQozCgpzdHJpbmcudXJpEhdnaXZlbiB1cmkgbXVzdCBiZSB2YWxpZBoMdGhpcy5pc1VyaSgpUgVpc1VyaTqnAQoRaXNfaXBfb3JfaG9zdG5hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYveaVJiABKAhCXsJIWwpZCg12YWxpZF9hZGRyZXNzEiZtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcyBvciBob3N0bmFtZRogdGhpcy5pc0lwKCkgfHwgdGhpcy5pc0hvc3RuYW1lKClSDmlzSXBPckhvc3RuYW1lOp0BCgd0cmltbWVkEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL7mlSYgASgIQmXCSGIKYAoOc3RyaW5nLnRyaW1tZWQSK3ZhbHVlIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaIXRoaXMudHJpbSgpLnNpemUoKSA9PSB0aGlzLnNpemUoKVIHdHJpbW1lZDqPAQoIcHJlZml4ZXMSGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlcxjHtJYmIAEoCEJTwkhQCk4KEXJlcGVhdGVkLnByZWZpeGVzEhxnaXZlbiBwcmVmaXhlcyBtdXN0IGJlIHZhbGlkGht0aGlzLmFsbChtLCBtLmlzSXBQcmVmaXgoKSlSCHByZWZpeGVzOnUKA2lwcxIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMi0liYgASgIQkPCSEAKPgoMcmVwZWF0ZWQuaXBzEhdnaXZlbiBpcHMgbXVzdCBiZSB2YWxpZBoVdGhpcy5hbGwobSwgbS5pc0lwKCkpUgNpcHM65gEKEWFyZV9ob3N0X2FuZF9wb3J0EhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXMYybSWJiABKAhCmgHCSJYBCpMBChpyZXBlYXRlZC5hcmVfaG9zdF9hbmRfcG9ydBJQZ2l2ZW4gZW50cmllcyBtdXN0IGFsbCBiZSBpbiB0aGUgZm9ybSBvZiA8aXAgfCBob3N0Pjo8cG9ydD4gYnV0IHBvcnQgaXMgb3B0aW9uYWwaI3RoaXMuYWxsKG0sIG0uaXNIb3N0QW5kUG9ydChmYWxzZSkpUg5hcmVIb3N0QW5kUG9ydDq6AQoLYWxsX3RyaW1tZWQSGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlcxjKtJYmIAEoCEJ5wkh2CnQKFHJlcGVhdGVkLmFsbF90cmltbWVkEjJnaXZlbiB2YWx1ZXMgbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggd2hpdGVzcGFjZRoodGhpcy5hbGwobSwgbS50cmltKCkuc2l6ZSgpID09IG0uc2l6ZSgpKVIKYWxsVHJpbW1lZDqEAgoXa2V5c19hbmRfdmFsdWVzX3RyaW1tZWQSFi5idWYudmFsaWRhdGUuTWFwUnVsZXMY14KXJiABKAhCsQHCSK0BCqoBChttYXAua2V5c19hbmRfdmFsdWVzX3RyaW1tZWQSNWtleXMgYW5kIHZhbHVlcyBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCB3aGl0ZXNwYWNlGlR0aGlzLmFsbChrLCBrLnRyaW0oKS5zaXplKCkgPT0gay5zaXplKCkpICYmIHRoaXMuYWxsKHYsIHYudHJpbSgpLnNpemUoKSA9PSB2LnNpemUoKSlSFGtleXNBbmRWYWx1ZXNUcmltbWVkOqsBCgxrZXlzX3RyaW1tZWQSFi5idWYudmFsaWRhdGUuTWFwUnVsZXMY2IKXJiABKAhCbcJIagpoChBtYXAua2V5c190cmltbWVkEiprZXlzIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaKHRoaXMuYWxsKGssIGsudHJpbSgpLnNpemUoKSA9PSBrLnNpemUoKSlSC2tleXNUcmltbWVkQqABCg9jb20uZml0cy5hcGkudjFCFFByZWRlZmluZWRSdWxlc1Byb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMQ", [file_buf_validate_validate]); + fileDesc("CiJmaXRzL2FwaS92MS9wcmVkZWZpbmVkX3J1bGVzLnByb3RvEgtmaXRzLmFwaS52MTq4AQoKbWFjYWRkcmVzcxIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxi35pUmIAEoCEJ6wkh3CnUKEXN0cmluZy5tYWNhZGRyZXNzEiZ0aGlzIHN0cmluZyBtdXN0IGJlIGEgdmFsaWQgbWFjYWRkcmVzcxo4dGhpcy5tYXRjaGVzKCdeKFswLTlBLUZhLWZdezJ9WzpdKXs1fShbMC05QS1GYS1mXXsyfSkkJylSCm1hY2FkZHJlc3M6mQEKB2lzX25hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuOaVJiABKAhCYsJIXwpdCg5zdHJpbmcuaXNfbmFtZRIjbXVzdCBiZSB3aXRoaW4gMiBhbmQgMTI4IGNoYXJhY3RlcnMaJnRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4UgZpc05hbWU6mgEKDmlzX2Rlc2NyaXB0aW9uEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGLnmlSYgASgIQlXCSFIKUAoVc3RyaW5nLmlzX2Rlc2NyaXB0aW9uEiNtdXN0IGJlIHNob3J0ZXIgdGhhbiAyNTYgY2hhcmFjdGVycxoSdGhpcy5zaXplKCkgPD0gMjU2Ug1pc0Rlc2NyaXB0aW9uOqgBCgxpc19wYXJ0aXRpb24SGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuuaVJiABKAhCZ8JIZApiChNzdHJpbmcuaXNfcGFydGl0aW9uEiNtdXN0IGJlIHdpdGhpbiAyIGFuZCAxMjggY2hhcmFjdGVycxomdGhpcy5zaXplKCkgPj0gMiAmJiB0aGlzLnNpemUoKSA8PSAxMjhSC2lzUGFydGl0aW9uOoIBCglpc19wcmVmaXgSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYu+aVJiABKAhCR8JIRApCCg9zdHJpbmcucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaEXRoaXMuaXNJcFByZWZpeCgpUghpc1ByZWZpeDptCgZpc191cmkSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYvOaVJiABKAhCOMJINQozCgpzdHJpbmcudXJpEhdnaXZlbiB1cmkgbXVzdCBiZSB2YWxpZBoMdGhpcy5pc1VyaSgpUgVpc1VyaTqnAQoRaXNfaXBfb3JfaG9zdG5hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYveaVJiABKAhCXsJIWwpZCg12YWxpZF9hZGRyZXNzEiZtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcyBvciBob3N0bmFtZRogdGhpcy5pc0lwKCkgfHwgdGhpcy5pc0hvc3RuYW1lKClSDmlzSXBPckhvc3RuYW1lOp0BCgd0cmltbWVkEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL7mlSYgASgIQmXCSGIKYAoOc3RyaW5nLnRyaW1tZWQSK3ZhbHVlIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaIXRoaXMudHJpbSgpLnNpemUoKSA9PSB0aGlzLnNpemUoKVIHdHJpbW1lZDqxAQoMaXNfaXB2NF9jaWRyEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL/mlSYgASgIQnHCSG4KbAoTc3RyaW5nLmlzX2lwdjRfY2lkchIrbXVzdCBiZSBhIHZhbGlkIElQdjQgQ0lEUiwgZS5nLiAxMC4wLjAuMC8yNBoodGhpcy5pc0lwUHJlZml4KCkgJiYgIXRoaXMuY29udGFpbnMoJzonKVIKaXNJcHY0Q2lkcjqPAQoIcHJlZml4ZXMSGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlcxjHtJYmIAEoCEJTwkhQCk4KEXJlcGVhdGVkLnByZWZpeGVzEhxnaXZlbiBwcmVmaXhlcyBtdXN0IGJlIHZhbGlkGht0aGlzLmFsbChtLCBtLmlzSXBQcmVmaXgoKSlSCHByZWZpeGVzOnUKA2lwcxIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMi0liYgASgIQkPCSEAKPgoMcmVwZWF0ZWQuaXBzEhdnaXZlbiBpcHMgbXVzdCBiZSB2YWxpZBoVdGhpcy5hbGwobSwgbS5pc0lwKCkpUgNpcHM65gEKEWFyZV9ob3N0X2FuZF9wb3J0EhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXMYybSWJiABKAhCmgHCSJYBCpMBChpyZXBlYXRlZC5hcmVfaG9zdF9hbmRfcG9ydBJQZ2l2ZW4gZW50cmllcyBtdXN0IGFsbCBiZSBpbiB0aGUgZm9ybSBvZiA8aXAgfCBob3N0Pjo8cG9ydD4gYnV0IHBvcnQgaXMgb3B0aW9uYWwaI3RoaXMuYWxsKG0sIG0uaXNIb3N0QW5kUG9ydChmYWxzZSkpUg5hcmVIb3N0QW5kUG9ydDq6AQoLYWxsX3RyaW1tZWQSGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlcxjKtJYmIAEoCEJ5wkh2CnQKFHJlcGVhdGVkLmFsbF90cmltbWVkEjJnaXZlbiB2YWx1ZXMgbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggd2hpdGVzcGFjZRoodGhpcy5hbGwobSwgbS50cmltKCkuc2l6ZSgpID09IG0uc2l6ZSgpKVIKYWxsVHJpbW1lZDqEAgoXa2V5c19hbmRfdmFsdWVzX3RyaW1tZWQSFi5idWYudmFsaWRhdGUuTWFwUnVsZXMY14KXJiABKAhCsQHCSK0BCqoBChttYXAua2V5c19hbmRfdmFsdWVzX3RyaW1tZWQSNWtleXMgYW5kIHZhbHVlcyBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCB3aGl0ZXNwYWNlGlR0aGlzLmFsbChrLCBrLnRyaW0oKS5zaXplKCkgPT0gay5zaXplKCkpICYmIHRoaXMuYWxsKHYsIHYudHJpbSgpLnNpemUoKSA9PSB2LnNpemUoKSlSFGtleXNBbmRWYWx1ZXNUcmltbWVkOqsBCgxrZXlzX3RyaW1tZWQSFi5idWYudmFsaWRhdGUuTWFwUnVsZXMY2IKXJiABKAhCbcJIagpoChBtYXAua2V5c190cmltbWVkEiprZXlzIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaKHRoaXMuYWxsKGssIGsudHJpbSgpLnNpemUoKSA9PSBrLnNpemUoKSlSC2tleXNUcmltbWVkQqABCg9jb20uZml0cy5hcGkudjFCFFByZWRlZmluZWRSdWxlc1Byb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMQ", [file_buf_validate_validate]); /** * Macaddress returns true if the given string is a valid macadress @@ -77,13 +77,21 @@ export const is_ip_or_hostname: GenExtension = /*@__PURE__ export const trimmed: GenExtension = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 7); +/** + * IsIpv4Cidr validates if the given string is a valid IPv4 CIDR, e.g. 10.0.0.0/24 + * + * @generated from extension: optional bool is_ipv4_cidr = 80048959; + */ +export const is_ipv4_cidr: GenExtension = /*@__PURE__*/ + extDesc(file_fits_api_v1_predefined_rules, 8); + /** * Prefixes validates if a slice of prefixes in string form are valid * * @generated from extension: optional bool prefixes = 80058951; */ export const prefixes: GenExtension = /*@__PURE__*/ - extDesc(file_fits_api_v1_predefined_rules, 8); + extDesc(file_fits_api_v1_predefined_rules, 9); /** * Ips validates if a slice of ips in string form are valid @@ -91,7 +99,7 @@ export const prefixes: GenExtension = /*@__PURE__*/ * @generated from extension: optional bool ips = 80058952; */ export const ips: GenExtension = /*@__PURE__*/ - extDesc(file_fits_api_v1_predefined_rules, 9); + extDesc(file_fits_api_v1_predefined_rules, 10); /** * AreHostAndPort validates if a slice of strings are all in the form of : @@ -99,7 +107,7 @@ export const ips: GenExtension = /*@__PURE__*/ * @generated from extension: optional bool are_host_and_port = 80058953; */ export const are_host_and_port: GenExtension = /*@__PURE__*/ - extDesc(file_fits_api_v1_predefined_rules, 10); + extDesc(file_fits_api_v1_predefined_rules, 11); /** * All Trimmed enforces all strings to be trimmed, e.g. no whitespaces at the begin and end @@ -107,7 +115,7 @@ export const are_host_and_port: GenExtension = /*@__PURE * @generated from extension: optional bool all_trimmed = 80058954; */ export const all_trimmed: GenExtension = /*@__PURE__*/ - extDesc(file_fits_api_v1_predefined_rules, 11); + extDesc(file_fits_api_v1_predefined_rules, 12); /** * Keys and Values trimmed enforces all map keys and values to be trimmed, e.g. no whitespaces at the begin and end @@ -115,7 +123,7 @@ export const all_trimmed: GenExtension = /*@__PURE__*/ * @generated from extension: optional bool keys_and_values_trimmed = 80068951; */ export const keys_and_values_trimmed: GenExtension = /*@__PURE__*/ - extDesc(file_fits_api_v1_predefined_rules, 12); + extDesc(file_fits_api_v1_predefined_rules, 13); /** * Keys trimmed enforces all map keys and values to be trimmed, e.g. no whitespaces at the begin and end @@ -123,5 +131,5 @@ export const keys_and_values_trimmed: GenExtension = /*@__PUR * @generated from extension: optional bool keys_trimmed = 80068952; */ export const keys_trimmed: GenExtension = /*@__PURE__*/ - extDesc(file_fits_api_v1_predefined_rules, 13); + extDesc(file_fits_api_v1_predefined_rules, 14); diff --git a/proto/fits/api/mvm/v1/location.proto b/proto/fits/api/mvm/v1/location.proto index b7726ba..89407b8 100644 --- a/proto/fits/api/mvm/v1/location.proto +++ b/proto/fits/api/mvm/v1/location.proto @@ -10,9 +10,9 @@ import "fits/api/v1/predefined_rules.proto"; service LocationService { // Returns a list of all datacenter locations available for a tenant. rpc List(LocationServiceListRequest) returns (LocationServiceListResponse) { - option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; - option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; - option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; + option (fits.api.v1.tenant_roles) = TENANT_ROLE_OWNER; + option (fits.api.v1.tenant_roles) = TENANT_ROLE_EDITOR; + option (fits.api.v1.tenant_roles) = TENANT_ROLE_VIEWER; option (fits.api.v1.auditing) = AUDITING_EXCLUDED; } } @@ -31,7 +31,7 @@ message LocationServiceListRequest { string tenant = 1 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } -// LocationServiceListResponse is the response payload for a location list request +// LocationServiceListResponse is the response payload for a location list request. message LocationServiceListResponse { // The available locations repeated Location locations = 1; diff --git a/proto/fits/api/mvm/v1/os.proto b/proto/fits/api/mvm/v1/os.proto index 14d999b..c2e42eb 100644 --- a/proto/fits/api/mvm/v1/os.proto +++ b/proto/fits/api/mvm/v1/os.proto @@ -10,23 +10,29 @@ import "fits/api/v1/predefined_rules.proto"; service OSService { // Returns a list of all operating systems. rpc List(OSServiceListRequest) returns (OSServiceListResponse) { - option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; - option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; - option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; + option (fits.api.v1.visibility) = VISIBILITY_SELF; option (fits.api.v1.auditing) = AUDITING_EXCLUDED; } } +// OSType specifies the type of an operating system. +enum OSType { + // OS_TYPE_UNSPECIFIED is not specified. + OS_TYPE_UNSPECIFIED = 0 [(fits.api.v1.enum_string_value) = ""]; + // OS_TYPE_LINUX is a Linux operating system. + OS_TYPE_LINUX = 1 [(fits.api.v1.enum_string_value) = "linux"]; + // OS_TYPE_WINDOWS is a Windows operating system. + OS_TYPE_WINDOWS = 2 [(fits.api.v1.enum_string_value) = "windows"]; +} + // OS is the definition of an available OS for MVM instances. message OS { - // Uuid of this OS + // Uuid of this OS. string uuid = 1 [(buf.validate.field).string.uuid = true]; - // Title of the OS + // Title of the OS. string title = 2 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; - // Type of the OS - string type = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; - // Version of the OS - string version = 4 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; + // Type of the OS. + OSType type = 3; } // OSServiceListRequest is the request payload for a OS list request. @@ -34,6 +40,6 @@ message OSServiceListRequest {} // OSServiceListResponse is the response payload for a OS list request message OSServiceListResponse { - // The available operating systems + // The available operating systems. repeated OS operating_systems = 1; } diff --git a/proto/fits/api/mvm/v1/stagetype.proto b/proto/fits/api/mvm/v1/stagetype.proto index 4371c68..2c55d0c 100644 --- a/proto/fits/api/mvm/v1/stagetype.proto +++ b/proto/fits/api/mvm/v1/stagetype.proto @@ -6,6 +6,7 @@ import "buf/validate/validate.proto"; import "fits/api/v1/common.proto"; import "fits/api/v1/predefined_rules.proto"; +// TODO: this type may be completely removed, as VLANs could be project-scoped // StageTypeService lists stage types available for managed VM (MVM) instances. service StageTypeService { // Returns a list of all stage types available for a tenant. diff --git a/proto/fits/api/mvm/v1/vlan.proto b/proto/fits/api/mvm/v1/vlan.proto index 2d8b2a4..1cf579f 100644 --- a/proto/fits/api/mvm/v1/vlan.proto +++ b/proto/fits/api/mvm/v1/vlan.proto @@ -10,9 +10,9 @@ import "fits/api/v1/predefined_rules.proto"; service VLANService { // Returns a list of all VLANs available for a tenant. rpc List(VLANServiceListRequest) returns (VLANServiceListResponse) { - option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; - option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; - option (fits.api.v1.project_roles) = PROJECT_ROLE_VIEWER; + option (fits.api.v1.tenant_roles) = TENANT_ROLE_OWNER; + option (fits.api.v1.tenant_roles) = TENANT_ROLE_EDITOR; + option (fits.api.v1.tenant_roles) = TENANT_ROLE_VIEWER; option (fits.api.v1.auditing) = AUDITING_EXCLUDED; } } @@ -22,33 +22,27 @@ message VLAN { // Uuid of this VLAN string uuid = 1 [(buf.validate.field).string.uuid = true]; // Id of this VLAN - int32 id = 2; + // This is not a foreign key, this is the actual ID of the VLAN the network interface is attached to. + int32 vlan_id = 2; // Title of the subnet this VLAN belongs to string subnet_title = 3 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; // CIDR of the subnet this VLAN belongs to - string subnet = 4; - // Subnetmask of this VLAN - string subnetmask = 5; - // Gateway of this VLAN - string gateway = 6; - // Start of the usable IP range of this VLAN - string ip_range_start = 7; - // End of the usable IP range of this VLAN - string ip_range_end = 8; - // Whether DHCP is used on this VLAN - bool use_dhcp = 9; + string subnet_cidr = 4 [(buf.validate.field).string.(fits.api.v1.is_ipv4_cidr) = true]; // TODO instead of the pod title, could we have the location_uuid? - optional string location_uuid = 13 [(buf.validate.field).string.uuid = true]; + optional string location_uuid = 10 [(buf.validate.field).string.uuid = true]; + // TODO: instead of a stage type, this should be mapped to a project. + // TODO: this would have to be re-mapped in the customer onboarding // Uuid of the stage type of this VLAN - string stage_type_uuid = 14 [(buf.validate.field).string.uuid = true]; + string stage_type_uuid = 11 [(buf.validate.field).string.uuid = true]; // Tenant this VLAN belongs to. - string tenant = 15 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; + string tenant = 12 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; } // VLANServiceListRequest is the request payload for a VLAN list request. message VLANServiceListRequest { // Tenant to list available VLANs for string tenant = 1 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; + // TODO should be filterable by project as well } // VLANServiceListResponse is the response payload for a VLAN list request diff --git a/proto/fits/api/v1/predefined_rules.proto b/proto/fits/api/v1/predefined_rules.proto index c045824..86a10d9 100644 --- a/proto/fits/api/v1/predefined_rules.proto +++ b/proto/fits/api/v1/predefined_rules.proto @@ -56,6 +56,12 @@ extend buf.validate.StringRules { message: "value must not start or end with whitespace" expression: "this.trim().size() == this.size()" }]; + // IsIpv4Cidr validates if the given string is a valid IPv4 CIDR, e.g. 10.0.0.0/24 + optional bool is_ipv4_cidr = 80048959 [(buf.validate.predefined).cel = { + id: "string.is_ipv4_cidr" + message: "must be a valid IPv4 CIDR, e.g. 10.0.0.0/24" + expression: "this.isIpPrefix() && !this.contains(':')" + }]; } extend buf.validate.RepeatedRules { diff --git a/python/fits/api/mvm/v1/location_pb2.py b/python/fits/api/mvm/v1/location_pb2.py index 36fd6de..831a699 100644 --- a/python/fits/api/mvm/v1/location_pb2.py +++ b/python/fits/api/mvm/v1/location_pb2.py @@ -27,7 +27,7 @@ from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x66its/api/mvm/v1/location.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"K\n\x08Location\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x05title\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\"A\n\x1aLocationServiceListRequest\x12#\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"V\n\x1bLocationServiceListResponse\x12\x37\n\tlocations\x18\x01 \x03(\x0b\x32\x19.fits.api.mvm.v1.LocationR\tlocations2\x81\x01\n\x0fLocationService\x12n\n\x04List\x12+.fits.api.mvm.v1.LocationServiceListRequest\x1a,.fits.api.mvm.v1.LocationServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xb2\x01\n\x13\x63om.fits.api.mvm.v1B\rLocationProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x66its/api/mvm/v1/location.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"K\n\x08Location\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x05title\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\"A\n\x1aLocationServiceListRequest\x12#\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"V\n\x1bLocationServiceListResponse\x12\x37\n\tlocations\x18\x01 \x03(\x0b\x32\x19.fits.api.mvm.v1.LocationR\tlocations2\x81\x01\n\x0fLocationService\x12n\n\x04List\x12+.fits.api.mvm.v1.LocationServiceListRequest\x1a,.fits.api.mvm.v1.LocationServiceListResponse\"\x0b\xc2\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xb2\x01\n\x13\x63om.fits.api.mvm.v1B\rLocationProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -42,7 +42,7 @@ _globals['_LOCATIONSERVICELISTREQUEST'].fields_by_name['tenant']._loaded_options = None _globals['_LOCATIONSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_LOCATIONSERVICE'].methods_by_name['List']._loaded_options = None - _globals['_LOCATIONSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' + _globals['_LOCATIONSERVICE'].methods_by_name['List']._serialized_options = b'\302\363\030\003\001\002\003\340\363\030\002' _globals['_LOCATION']._serialized_start=142 _globals['_LOCATION']._serialized_end=217 _globals['_LOCATIONSERVICELISTREQUEST']._serialized_start=219 diff --git a/python/fits/api/mvm/v1/os_pb2.py b/python/fits/api/mvm/v1/os_pb2.py index d525c66..ffc94e9 100644 --- a/python/fits/api/mvm/v1/os_pb2.py +++ b/python/fits/api/mvm/v1/os_pb2.py @@ -27,7 +27,7 @@ from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66its/api/mvm/v1/os.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x8d\x01\n\x02OS\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x05title\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\x12\x1f\n\x04type\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04type\x12%\n\x07version\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07version\"\x16\n\x14OSServiceListRequest\"Y\n\x15OSServiceListResponse\x12@\n\x11operating_systems\x18\x01 \x03(\x0b\x32\x13.fits.api.mvm.v1.OSR\x10operatingSystems2o\n\tOSService\x12\x62\n\x04List\x12%.fits.api.mvm.v1.OSServiceListRequest\x1a&.fits.api.mvm.v1.OSServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xac\x01\n\x13\x63om.fits.api.mvm.v1B\x07OsProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66its/api/mvm/v1/os.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"r\n\x02OS\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x05title\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05title\x12+\n\x04type\x18\x03 \x01(\x0e\x32\x17.fits.api.mvm.v1.OSTypeR\x04type\"\x16\n\x14OSServiceListRequest\"Y\n\x15OSServiceListResponse\x12@\n\x11operating_systems\x18\x01 \x03(\x0b\x32\x13.fits.api.mvm.v1.OSR\x10operatingSystems*g\n\x06OSType\x12\x1d\n\x13OS_TYPE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1c\n\rOS_TYPE_LINUX\x10\x01\x1a\t\x82\xb2\x19\x05linux\x12 \n\x0fOS_TYPE_WINDOWS\x10\x02\x1a\x0b\x82\xb2\x19\x07windows2l\n\tOSService\x12_\n\x04List\x12%.fits.api.mvm.v1.OSServiceListRequest\x1a&.fits.api.mvm.v1.OSServiceListResponse\"\x08\xd8\xf3\x18\x02\xe0\xf3\x18\x02\x42\xac\x01\n\x13\x63om.fits.api.mvm.v1B\x07OsProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -35,22 +35,26 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'\n\023com.fits.api.mvm.v1B\007OsProtoP\001Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\242\002\003FAM\252\002\017Fits.Api.Mvm.V1\312\002\017Fits\\Api\\Mvm\\V1\342\002\033Fits\\Api\\Mvm\\V1\\GPBMetadata\352\002\022Fits::Api::Mvm::V1' + _globals['_OSTYPE'].values_by_name["OS_TYPE_UNSPECIFIED"]._loaded_options = None + _globals['_OSTYPE'].values_by_name["OS_TYPE_UNSPECIFIED"]._serialized_options = b'\202\262\031\000' + _globals['_OSTYPE'].values_by_name["OS_TYPE_LINUX"]._loaded_options = None + _globals['_OSTYPE'].values_by_name["OS_TYPE_LINUX"]._serialized_options = b'\202\262\031\005linux' + _globals['_OSTYPE'].values_by_name["OS_TYPE_WINDOWS"]._loaded_options = None + _globals['_OSTYPE'].values_by_name["OS_TYPE_WINDOWS"]._serialized_options = b'\202\262\031\007windows' _globals['_OS'].fields_by_name['uuid']._loaded_options = None _globals['_OS'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_OS'].fields_by_name['title']._loaded_options = None _globals['_OS'].fields_by_name['title']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_OS'].fields_by_name['type']._loaded_options = None - _globals['_OS'].fields_by_name['type']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_OS'].fields_by_name['version']._loaded_options = None - _globals['_OS'].fields_by_name['version']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_OSSERVICE'].methods_by_name['List']._loaded_options = None - _globals['_OSSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' - _globals['_OS']._serialized_start=137 - _globals['_OS']._serialized_end=278 - _globals['_OSSERVICELISTREQUEST']._serialized_start=280 - _globals['_OSSERVICELISTREQUEST']._serialized_end=302 - _globals['_OSSERVICELISTRESPONSE']._serialized_start=304 - _globals['_OSSERVICELISTRESPONSE']._serialized_end=393 - _globals['_OSSERVICE']._serialized_start=395 - _globals['_OSSERVICE']._serialized_end=506 + _globals['_OSSERVICE'].methods_by_name['List']._serialized_options = b'\330\363\030\002\340\363\030\002' + _globals['_OSTYPE']._serialized_start=367 + _globals['_OSTYPE']._serialized_end=470 + _globals['_OS']._serialized_start=136 + _globals['_OS']._serialized_end=250 + _globals['_OSSERVICELISTREQUEST']._serialized_start=252 + _globals['_OSSERVICELISTREQUEST']._serialized_end=274 + _globals['_OSSERVICELISTRESPONSE']._serialized_start=276 + _globals['_OSSERVICELISTRESPONSE']._serialized_end=365 + _globals['_OSSERVICE']._serialized_start=472 + _globals['_OSSERVICE']._serialized_end=580 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/mvm/v1/os_pb2.pyi b/python/fits/api/mvm/v1/os_pb2.pyi index 6be1e88..954f20f 100644 --- a/python/fits/api/mvm/v1/os_pb2.pyi +++ b/python/fits/api/mvm/v1/os_pb2.pyi @@ -2,6 +2,7 @@ from buf.validate import validate_pb2 as _validate_pb2 from fits.api.v1 import common_pb2 as _common_pb2 from fits.api.v1 import predefined_rules_pb2 as _predefined_rules_pb2 from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from collections.abc import Iterable as _Iterable, Mapping as _Mapping @@ -9,17 +10,24 @@ from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union DESCRIPTOR: _descriptor.FileDescriptor +class OSType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + OS_TYPE_UNSPECIFIED: _ClassVar[OSType] + OS_TYPE_LINUX: _ClassVar[OSType] + OS_TYPE_WINDOWS: _ClassVar[OSType] +OS_TYPE_UNSPECIFIED: OSType +OS_TYPE_LINUX: OSType +OS_TYPE_WINDOWS: OSType + class OS(_message.Message): - __slots__ = ("uuid", "title", "type", "version") + __slots__ = ("uuid", "title", "type") UUID_FIELD_NUMBER: _ClassVar[int] TITLE_FIELD_NUMBER: _ClassVar[int] TYPE_FIELD_NUMBER: _ClassVar[int] - VERSION_FIELD_NUMBER: _ClassVar[int] uuid: str title: str - type: str - version: str - def __init__(self, uuid: _Optional[str] = ..., title: _Optional[str] = ..., type: _Optional[str] = ..., version: _Optional[str] = ...) -> None: ... + type: OSType + def __init__(self, uuid: _Optional[str] = ..., title: _Optional[str] = ..., type: _Optional[_Union[OSType, str]] = ...) -> None: ... class OSServiceListRequest(_message.Message): __slots__ = () diff --git a/python/fits/api/mvm/v1/vlan_pb2.py b/python/fits/api/mvm/v1/vlan_pb2.py index f604c7e..fce24d7 100644 --- a/python/fits/api/mvm/v1/vlan_pb2.py +++ b/python/fits/api/mvm/v1/vlan_pb2.py @@ -27,7 +27,7 @@ from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66its/api/mvm/v1/vlan.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xb6\x03\n\x04VLAN\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x0e\n\x02id\x18\x02 \x01(\x05R\x02id\x12.\n\x0csubnet_title\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x0bsubnetTitle\x12\x16\n\x06subnet\x18\x04 \x01(\tR\x06subnet\x12\x1e\n\nsubnetmask\x18\x05 \x01(\tR\nsubnetmask\x12\x18\n\x07gateway\x18\x06 \x01(\tR\x07gateway\x12$\n\x0eip_range_start\x18\x07 \x01(\tR\x0cipRangeStart\x12 \n\x0cip_range_end\x18\x08 \x01(\tR\nipRangeEnd\x12\x19\n\x08use_dhcp\x18\t \x01(\x08R\x07useDhcp\x12\x32\n\rlocation_uuid\x18\r \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x0clocationUuid\x88\x01\x01\x12\x30\n\x0fstage_type_uuid\x18\x0e \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12#\n\x06tenant\x18\x0f \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x10\n\x0e_location_uuid\"=\n\x16VLANServiceListRequest\x12#\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"F\n\x17VLANServiceListResponse\x12+\n\x05vlans\x18\x01 \x03(\x0b\x32\x15.fits.api.mvm.v1.VLANR\x05vlans2u\n\x0bVLANService\x12\x66\n\x04List\x12\'.fits.api.mvm.v1.VLANServiceListRequest\x1a(.fits.api.mvm.v1.VLANServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xae\x01\n\x13\x63om.fits.api.mvm.v1B\tVlanProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66its/api/mvm/v1/vlan.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\xb8\x02\n\x04VLAN\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\x17\n\x07vlan_id\x18\x02 \x01(\x05R\x06vlanId\x12.\n\x0csubnet_title\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x0bsubnetTitle\x12,\n\x0bsubnet_cidr\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xf8\xb3\xae\xb1\x02\x01R\nsubnetCidr\x12\x32\n\rlocation_uuid\x18\n \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x0clocationUuid\x88\x01\x01\x12\x30\n\x0fstage_type_uuid\x18\x0b \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rstageTypeUuid\x12#\n\x06tenant\x18\x0c \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x10\n\x0e_location_uuid\"=\n\x16VLANServiceListRequest\x12#\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\"F\n\x17VLANServiceListResponse\x12+\n\x05vlans\x18\x01 \x03(\x0b\x32\x15.fits.api.mvm.v1.VLANR\x05vlans2u\n\x0bVLANService\x12\x66\n\x04List\x12\'.fits.api.mvm.v1.VLANServiceListRequest\x1a(.fits.api.mvm.v1.VLANServiceListResponse\"\x0b\xc2\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xae\x01\n\x13\x63om.fits.api.mvm.v1B\tVlanProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -39,6 +39,8 @@ _globals['_VLAN'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VLAN'].fields_by_name['subnet_title']._loaded_options = None _globals['_VLAN'].fields_by_name['subnet_title']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_VLAN'].fields_by_name['subnet_cidr']._loaded_options = None + _globals['_VLAN'].fields_by_name['subnet_cidr']._serialized_options = b'\272H\010r\006\370\263\256\261\002\001' _globals['_VLAN'].fields_by_name['location_uuid']._loaded_options = None _globals['_VLAN'].fields_by_name['location_uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_VLAN'].fields_by_name['stage_type_uuid']._loaded_options = None @@ -48,13 +50,13 @@ _globals['_VLANSERVICELISTREQUEST'].fields_by_name['tenant']._loaded_options = None _globals['_VLANSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_VLANSERVICE'].methods_by_name['List']._loaded_options = None - _globals['_VLANSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' + _globals['_VLANSERVICE'].methods_by_name['List']._serialized_options = b'\302\363\030\003\001\002\003\340\363\030\002' _globals['_VLAN']._serialized_start=139 - _globals['_VLAN']._serialized_end=577 - _globals['_VLANSERVICELISTREQUEST']._serialized_start=579 - _globals['_VLANSERVICELISTREQUEST']._serialized_end=640 - _globals['_VLANSERVICELISTRESPONSE']._serialized_start=642 - _globals['_VLANSERVICELISTRESPONSE']._serialized_end=712 - _globals['_VLANSERVICE']._serialized_start=714 - _globals['_VLANSERVICE']._serialized_end=831 + _globals['_VLAN']._serialized_end=451 + _globals['_VLANSERVICELISTREQUEST']._serialized_start=453 + _globals['_VLANSERVICELISTREQUEST']._serialized_end=514 + _globals['_VLANSERVICELISTRESPONSE']._serialized_start=516 + _globals['_VLANSERVICELISTRESPONSE']._serialized_end=586 + _globals['_VLANSERVICE']._serialized_start=588 + _globals['_VLANSERVICE']._serialized_end=705 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/mvm/v1/vlan_pb2.pyi b/python/fits/api/mvm/v1/vlan_pb2.pyi index df5c2ae..acdec60 100644 --- a/python/fits/api/mvm/v1/vlan_pb2.pyi +++ b/python/fits/api/mvm/v1/vlan_pb2.pyi @@ -10,32 +10,22 @@ from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union DESCRIPTOR: _descriptor.FileDescriptor class VLAN(_message.Message): - __slots__ = ("uuid", "id", "subnet_title", "subnet", "subnetmask", "gateway", "ip_range_start", "ip_range_end", "use_dhcp", "location_uuid", "stage_type_uuid", "tenant") + __slots__ = ("uuid", "vlan_id", "subnet_title", "subnet_cidr", "location_uuid", "stage_type_uuid", "tenant") UUID_FIELD_NUMBER: _ClassVar[int] - ID_FIELD_NUMBER: _ClassVar[int] + VLAN_ID_FIELD_NUMBER: _ClassVar[int] SUBNET_TITLE_FIELD_NUMBER: _ClassVar[int] - SUBNET_FIELD_NUMBER: _ClassVar[int] - SUBNETMASK_FIELD_NUMBER: _ClassVar[int] - GATEWAY_FIELD_NUMBER: _ClassVar[int] - IP_RANGE_START_FIELD_NUMBER: _ClassVar[int] - IP_RANGE_END_FIELD_NUMBER: _ClassVar[int] - USE_DHCP_FIELD_NUMBER: _ClassVar[int] + SUBNET_CIDR_FIELD_NUMBER: _ClassVar[int] LOCATION_UUID_FIELD_NUMBER: _ClassVar[int] STAGE_TYPE_UUID_FIELD_NUMBER: _ClassVar[int] TENANT_FIELD_NUMBER: _ClassVar[int] uuid: str - id: int + vlan_id: int subnet_title: str - subnet: str - subnetmask: str - gateway: str - ip_range_start: str - ip_range_end: str - use_dhcp: bool + subnet_cidr: str location_uuid: str stage_type_uuid: str tenant: str - def __init__(self, uuid: _Optional[str] = ..., id: _Optional[int] = ..., subnet_title: _Optional[str] = ..., subnet: _Optional[str] = ..., subnetmask: _Optional[str] = ..., gateway: _Optional[str] = ..., ip_range_start: _Optional[str] = ..., ip_range_end: _Optional[str] = ..., use_dhcp: _Optional[bool] = ..., location_uuid: _Optional[str] = ..., stage_type_uuid: _Optional[str] = ..., tenant: _Optional[str] = ...) -> None: ... + def __init__(self, uuid: _Optional[str] = ..., vlan_id: _Optional[int] = ..., subnet_title: _Optional[str] = ..., subnet_cidr: _Optional[str] = ..., location_uuid: _Optional[str] = ..., stage_type_uuid: _Optional[str] = ..., tenant: _Optional[str] = ...) -> None: ... class VLANServiceListRequest(_message.Message): __slots__ = ("tenant",) diff --git a/python/fits/api/v1/predefined_rules_pb2.py b/python/fits/api/v1/predefined_rules_pb2.py index dcbcd24..5666427 100644 --- a/python/fits/api/v1/predefined_rules_pb2.py +++ b/python/fits/api/v1/predefined_rules_pb2.py @@ -25,7 +25,7 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"fits/api/v1/predefined_rules.proto\x12\x0b\x66its.api.v1\x1a\x1b\x62uf/validate/validate.proto:\xb8\x01\n\nmacaddress\x12\x19.buf.validate.StringRules\x18\xb7\xe6\x95& \x01(\x08\x42z\xc2Hw\nu\n\x11string.macaddress\x12&this string must be a valid macaddress\x1a\x38this.matches(\'^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$\')R\nmacaddress:\x99\x01\n\x07is_name\x12\x19.buf.validate.StringRules\x18\xb8\xe6\x95& \x01(\x08\x42\x62\xc2H_\n]\n\x0estring.is_name\x12#must be within 2 and 128 characters\x1a&this.size() >= 2 && this.size() <= 128R\x06isName:\x9a\x01\n\x0eis_description\x12\x19.buf.validate.StringRules\x18\xb9\xe6\x95& \x01(\x08\x42U\xc2HR\nP\n\x15string.is_description\x12#must be shorter than 256 characters\x1a\x12this.size() <= 256R\risDescription:\xa8\x01\n\x0cis_partition\x12\x19.buf.validate.StringRules\x18\xba\xe6\x95& \x01(\x08\x42g\xc2Hd\nb\n\x13string.is_partition\x12#must be within 2 and 128 characters\x1a&this.size() >= 2 && this.size() <= 128R\x0bisPartition:\x82\x01\n\tis_prefix\x12\x19.buf.validate.StringRules\x18\xbb\xe6\x95& \x01(\x08\x42G\xc2HD\nB\n\x0fstring.prefixes\x12\x1cgiven prefixes must be valid\x1a\x11this.isIpPrefix()R\x08isPrefix:m\n\x06is_uri\x12\x19.buf.validate.StringRules\x18\xbc\xe6\x95& \x01(\x08\x42\x38\xc2H5\n3\n\nstring.uri\x12\x17given uri must be valid\x1a\x0cthis.isUri()R\x05isUri:\xa7\x01\n\x11is_ip_or_hostname\x12\x19.buf.validate.StringRules\x18\xbd\xe6\x95& \x01(\x08\x42^\xc2H[\nY\n\rvalid_address\x12&must be a valid IP address or hostname\x1a this.isIp() || this.isHostname()R\x0eisIpOrHostname:\x9d\x01\n\x07trimmed\x12\x19.buf.validate.StringRules\x18\xbe\xe6\x95& \x01(\x08\x42\x65\xc2Hb\n`\n\x0estring.trimmed\x12+value must not start or end with whitespace\x1a!this.trim().size() == this.size()R\x07trimmed:\x8f\x01\n\x08prefixes\x12\x1b.buf.validate.RepeatedRules\x18\xc7\xb4\x96& \x01(\x08\x42S\xc2HP\nN\n\x11repeated.prefixes\x12\x1cgiven prefixes must be valid\x1a\x1bthis.all(m, m.isIpPrefix())R\x08prefixes:u\n\x03ips\x12\x1b.buf.validate.RepeatedRules\x18\xc8\xb4\x96& \x01(\x08\x42\x43\xc2H@\n>\n\x0crepeated.ips\x12\x17given ips must be valid\x1a\x15this.all(m, m.isIp())R\x03ips:\xe6\x01\n\x11\x61re_host_and_port\x12\x1b.buf.validate.RepeatedRules\x18\xc9\xb4\x96& \x01(\x08\x42\x9a\x01\xc2H\x96\x01\n\x93\x01\n\x1arepeated.are_host_and_port\x12Pgiven entries must all be in the form of : but port is optional\x1a#this.all(m, m.isHostAndPort(false))R\x0e\x61reHostAndPort:\xba\x01\n\x0b\x61ll_trimmed\x12\x1b.buf.validate.RepeatedRules\x18\xca\xb4\x96& \x01(\x08\x42y\xc2Hv\nt\n\x14repeated.all_trimmed\x12\x32given values must not start or end with whitespace\x1a(this.all(m, m.trim().size() == m.size())R\nallTrimmed:\x84\x02\n\x17keys_and_values_trimmed\x12\x16.buf.validate.MapRules\x18\xd7\x82\x97& \x01(\x08\x42\xb1\x01\xc2H\xad\x01\n\xaa\x01\n\x1bmap.keys_and_values_trimmed\x12\x35keys and values must not start or end with whitespace\x1aTthis.all(k, k.trim().size() == k.size()) && this.all(v, v.trim().size() == v.size())R\x14keysAndValuesTrimmed:\xab\x01\n\x0ckeys_trimmed\x12\x16.buf.validate.MapRules\x18\xd8\x82\x97& \x01(\x08\x42m\xc2Hj\nh\n\x10map.keys_trimmed\x12*keys must not start or end with whitespace\x1a(this.all(k, k.trim().size() == k.size())R\x0bkeysTrimmedB\xa0\x01\n\x0f\x63om.fits.api.v1B\x14PredefinedRulesProtoP\x01Z)github.com/fi-ts/api/go/fits/api/v1;apiv1\xa2\x02\x03\x46\x41X\xaa\x02\x0b\x46its.Api.V1\xca\x02\x0b\x46its\\Api\\V1\xe2\x02\x17\x46its\\Api\\V1\\GPBMetadata\xea\x02\rFits::Api::V1') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"fits/api/v1/predefined_rules.proto\x12\x0b\x66its.api.v1\x1a\x1b\x62uf/validate/validate.proto:\xb8\x01\n\nmacaddress\x12\x19.buf.validate.StringRules\x18\xb7\xe6\x95& \x01(\x08\x42z\xc2Hw\nu\n\x11string.macaddress\x12&this string must be a valid macaddress\x1a\x38this.matches(\'^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$\')R\nmacaddress:\x99\x01\n\x07is_name\x12\x19.buf.validate.StringRules\x18\xb8\xe6\x95& \x01(\x08\x42\x62\xc2H_\n]\n\x0estring.is_name\x12#must be within 2 and 128 characters\x1a&this.size() >= 2 && this.size() <= 128R\x06isName:\x9a\x01\n\x0eis_description\x12\x19.buf.validate.StringRules\x18\xb9\xe6\x95& \x01(\x08\x42U\xc2HR\nP\n\x15string.is_description\x12#must be shorter than 256 characters\x1a\x12this.size() <= 256R\risDescription:\xa8\x01\n\x0cis_partition\x12\x19.buf.validate.StringRules\x18\xba\xe6\x95& \x01(\x08\x42g\xc2Hd\nb\n\x13string.is_partition\x12#must be within 2 and 128 characters\x1a&this.size() >= 2 && this.size() <= 128R\x0bisPartition:\x82\x01\n\tis_prefix\x12\x19.buf.validate.StringRules\x18\xbb\xe6\x95& \x01(\x08\x42G\xc2HD\nB\n\x0fstring.prefixes\x12\x1cgiven prefixes must be valid\x1a\x11this.isIpPrefix()R\x08isPrefix:m\n\x06is_uri\x12\x19.buf.validate.StringRules\x18\xbc\xe6\x95& \x01(\x08\x42\x38\xc2H5\n3\n\nstring.uri\x12\x17given uri must be valid\x1a\x0cthis.isUri()R\x05isUri:\xa7\x01\n\x11is_ip_or_hostname\x12\x19.buf.validate.StringRules\x18\xbd\xe6\x95& \x01(\x08\x42^\xc2H[\nY\n\rvalid_address\x12&must be a valid IP address or hostname\x1a this.isIp() || this.isHostname()R\x0eisIpOrHostname:\x9d\x01\n\x07trimmed\x12\x19.buf.validate.StringRules\x18\xbe\xe6\x95& \x01(\x08\x42\x65\xc2Hb\n`\n\x0estring.trimmed\x12+value must not start or end with whitespace\x1a!this.trim().size() == this.size()R\x07trimmed:\xb1\x01\n\x0cis_ipv4_cidr\x12\x19.buf.validate.StringRules\x18\xbf\xe6\x95& \x01(\x08\x42q\xc2Hn\nl\n\x13string.is_ipv4_cidr\x12+must be a valid IPv4 CIDR, e.g. 10.0.0.0/24\x1a(this.isIpPrefix() && !this.contains(\':\')R\nisIpv4Cidr:\x8f\x01\n\x08prefixes\x12\x1b.buf.validate.RepeatedRules\x18\xc7\xb4\x96& \x01(\x08\x42S\xc2HP\nN\n\x11repeated.prefixes\x12\x1cgiven prefixes must be valid\x1a\x1bthis.all(m, m.isIpPrefix())R\x08prefixes:u\n\x03ips\x12\x1b.buf.validate.RepeatedRules\x18\xc8\xb4\x96& \x01(\x08\x42\x43\xc2H@\n>\n\x0crepeated.ips\x12\x17given ips must be valid\x1a\x15this.all(m, m.isIp())R\x03ips:\xe6\x01\n\x11\x61re_host_and_port\x12\x1b.buf.validate.RepeatedRules\x18\xc9\xb4\x96& \x01(\x08\x42\x9a\x01\xc2H\x96\x01\n\x93\x01\n\x1arepeated.are_host_and_port\x12Pgiven entries must all be in the form of : but port is optional\x1a#this.all(m, m.isHostAndPort(false))R\x0e\x61reHostAndPort:\xba\x01\n\x0b\x61ll_trimmed\x12\x1b.buf.validate.RepeatedRules\x18\xca\xb4\x96& \x01(\x08\x42y\xc2Hv\nt\n\x14repeated.all_trimmed\x12\x32given values must not start or end with whitespace\x1a(this.all(m, m.trim().size() == m.size())R\nallTrimmed:\x84\x02\n\x17keys_and_values_trimmed\x12\x16.buf.validate.MapRules\x18\xd7\x82\x97& \x01(\x08\x42\xb1\x01\xc2H\xad\x01\n\xaa\x01\n\x1bmap.keys_and_values_trimmed\x12\x35keys and values must not start or end with whitespace\x1aTthis.all(k, k.trim().size() == k.size()) && this.all(v, v.trim().size() == v.size())R\x14keysAndValuesTrimmed:\xab\x01\n\x0ckeys_trimmed\x12\x16.buf.validate.MapRules\x18\xd8\x82\x97& \x01(\x08\x42m\xc2Hj\nh\n\x10map.keys_trimmed\x12*keys must not start or end with whitespace\x1a(this.all(k, k.trim().size() == k.size())R\x0bkeysTrimmedB\xa0\x01\n\x0f\x63om.fits.api.v1B\x14PredefinedRulesProtoP\x01Z)github.com/fi-ts/api/go/fits/api/v1;apiv1\xa2\x02\x03\x46\x41X\xaa\x02\x0b\x46its.Api.V1\xca\x02\x0b\x46its\\Api\\V1\xe2\x02\x17\x46its\\Api\\V1\\GPBMetadata\xea\x02\rFits::Api::V1') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -49,6 +49,8 @@ _globals['is_ip_or_hostname']._serialized_options = b'\302H[\nY\n\rvalid_address\022&must be a valid IP address or hostname\032 this.isIp() || this.isHostname()' _globals['trimmed']._loaded_options = None _globals['trimmed']._serialized_options = b'\302Hb\n`\n\016string.trimmed\022+value must not start or end with whitespace\032!this.trim().size() == this.size()' + _globals['is_ipv4_cidr']._loaded_options = None + _globals['is_ipv4_cidr']._serialized_options = b'\302Hn\nl\n\023string.is_ipv4_cidr\022+must be a valid IPv4 CIDR, e.g. 10.0.0.0/24\032(this.isIpPrefix() && !this.contains(\':\')' _globals['prefixes']._loaded_options = None _globals['prefixes']._serialized_options = b'\302HP\nN\n\021repeated.prefixes\022\034given prefixes must be valid\032\033this.all(m, m.isIpPrefix())' _globals['ips']._loaded_options = None diff --git a/python/fits/api/v1/predefined_rules_pb2.pyi b/python/fits/api/v1/predefined_rules_pb2.pyi index 6290e37..a96ccf6 100644 --- a/python/fits/api/v1/predefined_rules_pb2.pyi +++ b/python/fits/api/v1/predefined_rules_pb2.pyi @@ -19,6 +19,8 @@ IS_IP_OR_HOSTNAME_FIELD_NUMBER: _ClassVar[int] is_ip_or_hostname: _descriptor.FieldDescriptor TRIMMED_FIELD_NUMBER: _ClassVar[int] trimmed: _descriptor.FieldDescriptor +IS_IPV4_CIDR_FIELD_NUMBER: _ClassVar[int] +is_ipv4_cidr: _descriptor.FieldDescriptor PREFIXES_FIELD_NUMBER: _ClassVar[int] prefixes: _descriptor.FieldDescriptor IPS_FIELD_NUMBER: _ClassVar[int] From f7fb11ba934b2c66d0669fe7f8dae192c2c33763 Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Thu, 24 Sep 2026 14:51:04 +0200 Subject: [PATCH 17/21] review: TODO comments --- doc/index.html | 3 +-- go/fits/api/mvm/v1/vlan.pb.go | 3 ++- js/fits/api/mvm/v1/vlan_pb.ts | 3 +-- proto/fits/api/mvm/v1/vlan.proto | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/doc/index.html b/doc/index.html index 07703c1..dd562c3 100644 --- a/doc/index.html +++ b/doc/index.html @@ -1846,8 +1846,7 @@

    VLANServiceListRequest

    +TODO should be filtered by project instead, see https://github.com/fi-ts/fco-apiserver/issues/39

    diff --git a/go/fits/api/mvm/v1/vlan.pb.go b/go/fits/api/mvm/v1/vlan.pb.go index e314fb2..f7591b2 100644 --- a/go/fits/api/mvm/v1/vlan.pb.go +++ b/go/fits/api/mvm/v1/vlan.pb.go @@ -130,7 +130,8 @@ func (x *VLAN) GetTenant() string { type VLANServiceListRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // Tenant to list available VLANs for - Tenant string `protobuf:"bytes,1,opt,name=tenant,proto3" json:"tenant,omitempty"` // TODO should be filterable by project as well + // TODO should be filtered by project instead, see https://github.com/fi-ts/fco-apiserver/issues/39 + Tenant string `protobuf:"bytes,1,opt,name=tenant,proto3" json:"tenant,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } diff --git a/js/fits/api/mvm/v1/vlan_pb.ts b/js/fits/api/mvm/v1/vlan_pb.ts index 2f3614a..c44c8cb 100644 --- a/js/fits/api/mvm/v1/vlan_pb.ts +++ b/js/fits/api/mvm/v1/vlan_pb.ts @@ -89,8 +89,7 @@ export const VLANSchema: GenMessage = /*@__PURE__*/ export type VLANServiceListRequest = Message<"fits.api.mvm.v1.VLANServiceListRequest"> & { /** * Tenant to list available VLANs for - * - * TODO should be filterable by project as well + * TODO should be filtered by project instead, see https://github.com/fi-ts/fco-apiserver/issues/39 * * @generated from field: string tenant = 1; */ diff --git a/proto/fits/api/mvm/v1/vlan.proto b/proto/fits/api/mvm/v1/vlan.proto index 1cf579f..076e3b3 100644 --- a/proto/fits/api/mvm/v1/vlan.proto +++ b/proto/fits/api/mvm/v1/vlan.proto @@ -41,8 +41,8 @@ message VLAN { // VLANServiceListRequest is the request payload for a VLAN list request. message VLANServiceListRequest { // Tenant to list available VLANs for + // TODO should be filtered by project instead, see https://github.com/fi-ts/fco-apiserver/issues/39 string tenant = 1 [(buf.validate.field).string.(fits.api.v1.is_name) = true]; - // TODO should be filterable by project as well } // VLANServiceListResponse is the response payload for a VLAN list request From 6f37599a843b72c58844ba5066d89ce863719ae3 Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Thu, 24 Sep 2026 14:59:45 +0200 Subject: [PATCH 18/21] fix: python client generation --- generate/python_client.tpl | 4 +-- python/fits/client/client.py | 48 ++++++++++++++++++------------------ 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/generate/python_client.tpl b/generate/python_client.tpl index 9783e0e..0633dac 100644 --- a/generate/python_client.tpl +++ b/generate/python_client.tpl @@ -4,7 +4,7 @@ import pyqwest {{ range $name, $api := . -}} {{ range $svc := $api.Services -}} -import fits.{{ $name | trimSuffix "v1" }}.v1.{{ $svc.FileName | trimSuffix ".proto" | lower }}_connect as {{ $name | trimSuffix "v1" }}_{{ $svc.FileName | trimSuffix ".proto" | lower }}_connect +import {{ $api.Path | trimPrefix "/" | replace "/" "." }}.{{ $svc.FileName | trimSuffix ".proto" | lower }}_connect as {{ $api.Path | trimPrefix "/" | replace "/" "_" }}_{{ $svc.FileName | trimSuffix ".proto" | lower }}_connect {{ end }} {{ end }} @@ -35,6 +35,6 @@ class Client: {{ range $svc := $api.Services }} def {{ $svc.FileName | trimSuffix ".proto" | lower }}(self): - return {{ $name | trimSuffix "v1" }}_{{ $svc.FileName | trimSuffix ".proto" | lower }}_connect.{{ $svc.Name }}ClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + return {{ $api.Path | trimPrefix "/" | replace "/" "_" }}_{{ $svc.FileName | trimSuffix ".proto" | lower }}_connect.{{ $svc.Name }}ClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) {{ end }} {{ end }} diff --git a/python/fits/client/client.py b/python/fits/client/client.py index 4e77726..01964c3 100755 --- a/python/fits/client/client.py +++ b/python/fits/client/client.py @@ -2,19 +2,19 @@ import pyqwest -import fits.apimvm.v1.location_connect as apimvm_location_connect -import fits.apimvm.v1.mvm_connect as apimvm_mvm_connect -import fits.apimvm.v1.os_connect as apimvm_os_connect -import fits.apimvm.v1.stagetype_connect as apimvm_stagetype_connect -import fits.apimvm.v1.vlan_connect as apimvm_vlan_connect +import fits.api.mvm.v1.location_connect as fits_api_mvm_v1_location_connect +import fits.api.mvm.v1.mvm_connect as fits_api_mvm_v1_mvm_connect +import fits.api.mvm.v1.os_connect as fits_api_mvm_v1_os_connect +import fits.api.mvm.v1.stagetype_connect as fits_api_mvm_v1_stagetype_connect +import fits.api.mvm.v1.vlan_connect as fits_api_mvm_v1_vlan_connect -import fits.api.v1.health_connect as api_health_connect -import fits.api.v1.ip_connect as api_ip_connect -import fits.api.v1.method_connect as api_method_connect -import fits.api.v1.project_connect as api_project_connect -import fits.api.v1.tenant_connect as api_tenant_connect -import fits.api.v1.token_connect as api_token_connect -import fits.api.v1.version_connect as api_version_connect +import fits.api.v1.health_connect as fits_api_v1_health_connect +import fits.api.v1.ip_connect as fits_api_v1_ip_connect +import fits.api.v1.method_connect as fits_api_v1_method_connect +import fits.api.v1.project_connect as fits_api_v1_project_connect +import fits.api.v1.tenant_connect as fits_api_v1_tenant_connect +import fits.api.v1.token_connect as fits_api_v1_token_connect +import fits.api.v1.version_connect as fits_api_v1_version_connect @@ -48,19 +48,19 @@ def __init__(self, baseurl: str, client: pyqwest.SyncClient = None, interceptors def location(self): - return apimvm_location_connect.LocationServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + return fits_api_mvm_v1_location_connect.LocationServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) def mvm(self): - return apimvm_mvm_connect.MVMServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + return fits_api_mvm_v1_mvm_connect.MVMServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) def os(self): - return apimvm_os_connect.OSServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + return fits_api_mvm_v1_os_connect.OSServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) def stagetype(self): - return apimvm_stagetype_connect.StageTypeServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + return fits_api_mvm_v1_stagetype_connect.StageTypeServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) def vlan(self): - return apimvm_vlan_connect.VLANServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + return fits_api_mvm_v1_vlan_connect.VLANServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) class _Apiv1: @@ -71,24 +71,24 @@ def __init__(self, baseurl: str, client: pyqwest.SyncClient = None, interceptors def health(self): - return api_health_connect.HealthServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + return fits_api_v1_health_connect.HealthServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) def ip(self): - return api_ip_connect.IPServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + return fits_api_v1_ip_connect.IPServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) def method(self): - return api_method_connect.MethodServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + return fits_api_v1_method_connect.MethodServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) def project(self): - return api_project_connect.ProjectServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + return fits_api_v1_project_connect.ProjectServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) def tenant(self): - return api_tenant_connect.TenantServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + return fits_api_v1_tenant_connect.TenantServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) def token(self): - return api_token_connect.TokenServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + return fits_api_v1_token_connect.TokenServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) def version(self): - return api_version_connect.VersionServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) + return fits_api_v1_version_connect.VersionServiceClientSync(address=self._baseurl, http_client=self._client, interceptors=self._interceptors) From 7263f861d06f2655db3896c900ac66b125dac7d4 Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Thu, 24 Sep 2026 15:34:37 +0200 Subject: [PATCH 19/21] review: name VMInstance ManagedVM, introduce MVMStatus enum, remove contract bool --- doc/index.html | 371 +++++++++++++------------ go/fits/api/mvm/v1/mvm.pb.go | 429 ++++++++++++++++------------- js/fits/api/mvm/v1/mvm_pb.ts | 70 +++-- proto/fits/api/mvm/v1/mvm.proto | 26 +- python/fits/api/mvm/v1/mvm_pb2.py | 218 ++++++++------- python/fits/api/mvm/v1/mvm_pb2.pyi | 25 +- 6 files changed, 614 insertions(+), 525 deletions(-) diff --git a/doc/index.html b/doc/index.html index dd562c3..37f99c9 100644 --- a/doc/index.html +++ b/doc/index.html @@ -398,10 +398,6 @@

    Table of Contents

    MLinuxDisk -
  • - MMVMInstance -
  • -
  • MMVMServiceAddDiskRequest
  • @@ -530,6 +526,10 @@

    Table of Contents

    MMVMServiceValidateUpdateDiskResponse +
  • + MManagedVM +
  • +
  • MNetworkInterface
  • @@ -559,6 +559,10 @@

    Table of Contents

    EDiskType +
  • + EMVMStatus +
  • +
  • EServiceClass
  • @@ -2039,176 +2043,6 @@

    LinuxDisk

    -

    MVMInstance

    -

    A managed VM (MVM) instance as returned by the API.

    - - -
    Method NameRequest TypeResponse TypeDescription
    string

    Tenant to list available VLANs for - -TODO should be filterable by project as well

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    uuidstring

    UUID of this MVM.

    metafits.api.v1.Meta

    Metadata for this MVM. -TODO: dates are available in the nulink db but not passed through yet.

    fqdnstring

    FQDN of the MVM, derived from the name at creation or generated by the backend.

    tenantstring

    Tenant this MVM belongs to.

    project_uuidstring

    UUID of the project this MVM belongs to.

    os_uuidstring

    UUID of the OS image installed on the MVM; resolve the title via the OS endpoint.

    location_uuidstring

    UUID of the datacenter location.

    contact_uuidstring

    TODO: Contact UUID – not yet implemented; open discussion with FCN (#23).

    cpuuint32

    Number of CPU cores.

    ramuint32

    RAM in GB.

    backupbool

    Whether backup is enabled. -TODO: the upstream (nulink) list/get models do not expose this; always false.

    statusstring

    Status of the ongoing operation. -TODO: can we have an ENUM here? Active, Are deleted ones there? Are stopped ones accounted? -Would have to be part of openapi spec, otherwise breaking changes couldn't be detected

    status_infostring

    Additional information about the current status.

    availabilityAvailability

    Availability level.

    serviceclassServiceClass

    Service class.

    windows_detailsWindowsDetails

    Windows-specific settings (domain + disks).

    linux_detailsLinuxDetails

    Linux-specific settings (LDAP + disks).

    interfacesNetworkInterfacerepeated

    Network interfaces attached to the MVM (IPv4 only).

    vlanVLAN

    VLAN the MVM is attached to. -TODO: not exposed by the upstream (nulink) MVM records yet; always unset.

    order_numberstring

    Internal reference number provided by the user, e.g. a ticket ID.

    contractbool

    True if the order was placed by FITS, false if self-service. -TODO: maybe remove this field entirely.

    - - - - -

    MVMServiceAddDiskRequest

    Request to order an additional data disk for a MVM.

    @@ -2348,7 +2182,7 @@

    MVMServiceCreateLinuxReque

    MVMServiceCreateRequest

    -

    Request to create a new MVM instance.

    TODO: contract, billable and billing_start_date.

    +

    Request to create a new MVM instance.

    @@ -2705,7 +2539,7 @@

    MVMServiceGetResponse

    - + @@ -2753,7 +2587,7 @@

    MVMServiceListResponse

    - + @@ -3090,6 +2924,166 @@

    MVMServiceValidate +

    ManagedVM

    +

    ManagedVM is a managed VM instance as returned by the API.

    + + +
    mvmMVMInstanceManagedVM

    The MVM.

    mvmsMVMInstanceManagedVM repeated

    The MVM instances.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    uuidstring

    UUID of this MVM.

    metafits.api.v1.Meta

    Metadata for this MVM. +TODO: dates are available in the nulink db but not passed through yet.

    fqdnstring

    FQDN of the MVM, derived from the name at creation or generated by the backend.

    tenantstring

    Tenant this MVM belongs to.

    project_uuidstring

    UUID of the project this MVM belongs to.

    os_uuidstring

    UUID of the OS image installed on the MVM; resolve the title via the OS endpoint.

    location_uuidstring

    UUID of the datacenter location.

    contact_uuidstring

    TODO: Contact UUID – not yet implemented; open discussion with FCN (#23).

    cpuuint32

    Number of CPU cores.

    ramuint32

    RAM in GB.

    backupbool

    Whether backup is enabled. +TODO: the upstream (nulink) list/get models do not expose this; always false.

    statusMVMStatus

    Status of the MVM.

    status_infostring

    Additional information about the current status.

    availabilityAvailability

    Availability level.

    serviceclassServiceClass

    Service class.

    windows_detailsWindowsDetails

    Windows-specific settings (domain + disks).

    linux_detailsLinuxDetails

    Linux-specific settings (LDAP + disks).

    interfacesNetworkInterfacerepeated

    Network interfaces attached to the MVM (IPv4 only).

    vlanVLAN

    VLAN the MVM is attached to. +TODO: not exposed by the upstream (nulink) MVM records yet; always unset.

    order_numberstring

    Internal reference number provided by the user, e.g. a ticket ID.

    + + + + +

    NetworkInterface

    A network interface of a MVM. IPv4 only; IPv6 is not yet supported.

    @@ -3369,6 +3363,29 @@

    DiskType

    +

    MVMStatus

    +

    MVMStatus specifies the status of a MVM.

    + + + + + + + + + + + + + + + + + + + +
    NameNumberDescription
    MVM_STATUS_UNSPECIFIED0

    MVM_STATUS_UNSPECIFIED is not specified.

    MVM_STATUS_ACTIVE1

    MVM_STATUS_ACTIVE is an active MVM.

    +

    ServiceClass

    ServiceClass specifies the service tier of a MVM; higher value = higher tier.

    Only certain combinations with Availability are valid.

    diff --git a/go/fits/api/mvm/v1/mvm.pb.go b/go/fits/api/mvm/v1/mvm.pb.go index 8aae6d5..2ea7bbe 100644 --- a/go/fits/api/mvm/v1/mvm.pb.go +++ b/go/fits/api/mvm/v1/mvm.pb.go @@ -142,6 +142,55 @@ func (ServiceClass) EnumDescriptor() ([]byte, []int) { return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{1} } +// MVMStatus specifies the status of a MVM. +type MVMStatus int32 + +const ( + // MVM_STATUS_UNSPECIFIED is not specified. + MVMStatus_MVM_STATUS_UNSPECIFIED MVMStatus = 0 + // MVM_STATUS_ACTIVE is an active MVM. + MVMStatus_MVM_STATUS_ACTIVE MVMStatus = 1 +) + +// Enum value maps for MVMStatus. +var ( + MVMStatus_name = map[int32]string{ + 0: "MVM_STATUS_UNSPECIFIED", + 1: "MVM_STATUS_ACTIVE", + } + MVMStatus_value = map[string]int32{ + "MVM_STATUS_UNSPECIFIED": 0, + "MVM_STATUS_ACTIVE": 1, + } +) + +func (x MVMStatus) Enum() *MVMStatus { + p := new(MVMStatus) + *p = x + return p +} + +func (x MVMStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MVMStatus) Descriptor() protoreflect.EnumDescriptor { + return file_fits_api_mvm_v1_mvm_proto_enumTypes[2].Descriptor() +} + +func (MVMStatus) Type() protoreflect.EnumType { + return &file_fits_api_mvm_v1_mvm_proto_enumTypes[2] +} + +func (x MVMStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use MVMStatus.Descriptor instead. +func (MVMStatus) EnumDescriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{2} +} + // DiskType classifies a MVM disk by its lifecycle rules. // The upstream (nulink) API returns every disk of a MVM, including the // backend-provisioned OS disk, so that oversized OS disks stay billable. @@ -209,11 +258,11 @@ func (x DiskType) String() string { } func (DiskType) Descriptor() protoreflect.EnumDescriptor { - return file_fits_api_mvm_v1_mvm_proto_enumTypes[2].Descriptor() + return file_fits_api_mvm_v1_mvm_proto_enumTypes[3].Descriptor() } func (DiskType) Type() protoreflect.EnumType { - return &file_fits_api_mvm_v1_mvm_proto_enumTypes[2] + return &file_fits_api_mvm_v1_mvm_proto_enumTypes[3] } func (x DiskType) Number() protoreflect.EnumNumber { @@ -222,7 +271,7 @@ func (x DiskType) Number() protoreflect.EnumNumber { // Deprecated: Use DiskType.Descriptor instead. func (DiskType) EnumDescriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{2} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{3} } // Linux-specific MVM details. @@ -417,8 +466,8 @@ func (x *NetworkInterface) GetMacaddress() string { return "" } -// A managed VM (MVM) instance as returned by the API. -type MVMInstance struct { +// ManagedVM is a managed VM instance as returned by the API. +type ManagedVM struct { state protoimpl.MessageState `protogen:"open.v1"` // UUID of this MVM. Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` @@ -444,10 +493,8 @@ type MVMInstance struct { // Whether backup is enabled. // TODO: the upstream (nulink) list/get models do not expose this; always false. Backup bool `protobuf:"varint,11,opt,name=backup,proto3" json:"backup,omitempty"` - // Status of the ongoing operation. - // TODO: can we have an ENUM here? Active, Are deleted ones there? Are stopped ones accounted? - // Would have to be part of openapi spec, otherwise breaking changes couldn't be detected - Status string `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"` + // Status of the MVM. + Status MVMStatus `protobuf:"varint,12,opt,name=status,proto3,enum=fits.api.mvm.v1.MVMStatus" json:"status,omitempty"` // Additional information about the current status. StatusInfo string `protobuf:"bytes,13,opt,name=status_info,json=statusInfo,proto3" json:"status_info,omitempty"` // Availability level. @@ -458,37 +505,34 @@ type MVMInstance struct { // // Types that are valid to be assigned to Details: // - // *MVMInstance_WindowsDetails - // *MVMInstance_LinuxDetails - Details isMVMInstance_Details `protobuf_oneof:"details"` + // *ManagedVM_WindowsDetails + // *ManagedVM_LinuxDetails + Details isManagedVM_Details `protobuf_oneof:"details"` // Network interfaces attached to the MVM (IPv4 only). Interfaces []*NetworkInterface `protobuf:"bytes,18,rep,name=interfaces,proto3" json:"interfaces,omitempty"` // VLAN the MVM is attached to. // TODO: not exposed by the upstream (nulink) MVM records yet; always unset. Vlan *VLAN `protobuf:"bytes,19,opt,name=vlan,proto3" json:"vlan,omitempty"` // Internal reference number provided by the user, e.g. a ticket ID. - OrderNumber string `protobuf:"bytes,20,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` - // True if the order was placed by FITS, false if self-service. - // TODO: maybe remove this field entirely. - Contract bool `protobuf:"varint,21,opt,name=contract,proto3" json:"contract,omitempty"` + OrderNumber string `protobuf:"bytes,20,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *MVMInstance) Reset() { - *x = MVMInstance{} +func (x *ManagedVM) Reset() { + *x = ManagedVM{} mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *MVMInstance) String() string { +func (x *ManagedVM) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MVMInstance) ProtoMessage() {} +func (*ManagedVM) ProtoMessage() {} -func (x *MVMInstance) ProtoReflect() protoreflect.Message { +func (x *ManagedVM) ProtoReflect() protoreflect.Message { mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -500,186 +544,179 @@ func (x *MVMInstance) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MVMInstance.ProtoReflect.Descriptor instead. -func (*MVMInstance) Descriptor() ([]byte, []int) { +// Deprecated: Use ManagedVM.ProtoReflect.Descriptor instead. +func (*ManagedVM) Descriptor() ([]byte, []int) { return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{3} } -func (x *MVMInstance) GetUuid() string { +func (x *ManagedVM) GetUuid() string { if x != nil { return x.Uuid } return "" } -func (x *MVMInstance) GetMeta() *v1.Meta { +func (x *ManagedVM) GetMeta() *v1.Meta { if x != nil { return x.Meta } return nil } -func (x *MVMInstance) GetFqdn() string { +func (x *ManagedVM) GetFqdn() string { if x != nil { return x.Fqdn } return "" } -func (x *MVMInstance) GetTenant() string { +func (x *ManagedVM) GetTenant() string { if x != nil { return x.Tenant } return "" } -func (x *MVMInstance) GetProjectUuid() string { +func (x *ManagedVM) GetProjectUuid() string { if x != nil { return x.ProjectUuid } return "" } -func (x *MVMInstance) GetOsUuid() string { +func (x *ManagedVM) GetOsUuid() string { if x != nil { return x.OsUuid } return "" } -func (x *MVMInstance) GetLocationUuid() string { +func (x *ManagedVM) GetLocationUuid() string { if x != nil { return x.LocationUuid } return "" } -func (x *MVMInstance) GetContactUuid() string { +func (x *ManagedVM) GetContactUuid() string { if x != nil { return x.ContactUuid } return "" } -func (x *MVMInstance) GetCpu() uint32 { +func (x *ManagedVM) GetCpu() uint32 { if x != nil { return x.Cpu } return 0 } -func (x *MVMInstance) GetRam() uint32 { +func (x *ManagedVM) GetRam() uint32 { if x != nil { return x.Ram } return 0 } -func (x *MVMInstance) GetBackup() bool { +func (x *ManagedVM) GetBackup() bool { if x != nil { return x.Backup } return false } -func (x *MVMInstance) GetStatus() string { +func (x *ManagedVM) GetStatus() MVMStatus { if x != nil { return x.Status } - return "" + return MVMStatus_MVM_STATUS_UNSPECIFIED } -func (x *MVMInstance) GetStatusInfo() string { +func (x *ManagedVM) GetStatusInfo() string { if x != nil { return x.StatusInfo } return "" } -func (x *MVMInstance) GetAvailability() Availability { +func (x *ManagedVM) GetAvailability() Availability { if x != nil { return x.Availability } return Availability_AVAILABILITY_UNSPECIFIED } -func (x *MVMInstance) GetServiceclass() ServiceClass { +func (x *ManagedVM) GetServiceclass() ServiceClass { if x != nil { return x.Serviceclass } return ServiceClass_SERVICE_CLASS_UNSPECIFIED } -func (x *MVMInstance) GetDetails() isMVMInstance_Details { +func (x *ManagedVM) GetDetails() isManagedVM_Details { if x != nil { return x.Details } return nil } -func (x *MVMInstance) GetWindowsDetails() *WindowsDetails { +func (x *ManagedVM) GetWindowsDetails() *WindowsDetails { if x != nil { - if x, ok := x.Details.(*MVMInstance_WindowsDetails); ok { + if x, ok := x.Details.(*ManagedVM_WindowsDetails); ok { return x.WindowsDetails } } return nil } -func (x *MVMInstance) GetLinuxDetails() *LinuxDetails { +func (x *ManagedVM) GetLinuxDetails() *LinuxDetails { if x != nil { - if x, ok := x.Details.(*MVMInstance_LinuxDetails); ok { + if x, ok := x.Details.(*ManagedVM_LinuxDetails); ok { return x.LinuxDetails } } return nil } -func (x *MVMInstance) GetInterfaces() []*NetworkInterface { +func (x *ManagedVM) GetInterfaces() []*NetworkInterface { if x != nil { return x.Interfaces } return nil } -func (x *MVMInstance) GetVlan() *VLAN { +func (x *ManagedVM) GetVlan() *VLAN { if x != nil { return x.Vlan } return nil } -func (x *MVMInstance) GetOrderNumber() string { +func (x *ManagedVM) GetOrderNumber() string { if x != nil { return x.OrderNumber } return "" } -func (x *MVMInstance) GetContract() bool { - if x != nil { - return x.Contract - } - return false -} - -type isMVMInstance_Details interface { - isMVMInstance_Details() +type isManagedVM_Details interface { + isManagedVM_Details() } -type MVMInstance_WindowsDetails struct { +type ManagedVM_WindowsDetails struct { // Windows-specific settings (domain + disks). WindowsDetails *WindowsDetails `protobuf:"bytes,16,opt,name=windows_details,json=windowsDetails,proto3,oneof"` } -type MVMInstance_LinuxDetails struct { +type ManagedVM_LinuxDetails struct { // Linux-specific settings (LDAP + disks). LinuxDetails *LinuxDetails `protobuf:"bytes,17,opt,name=linux_details,json=linuxDetails,proto3,oneof"` } -func (*MVMInstance_WindowsDetails) isMVMInstance_Details() {} +func (*ManagedVM_WindowsDetails) isManagedVM_Details() {} -func (*MVMInstance_LinuxDetails) isMVMInstance_Details() {} +func (*ManagedVM_LinuxDetails) isManagedVM_Details() {} // Request to get a MVM by UUID. type MVMServiceGetRequest struct { @@ -740,7 +777,7 @@ func (x *MVMServiceGetRequest) GetTenant() string { type MVMServiceGetResponse struct { state protoimpl.MessageState `protogen:"open.v1"` // The MVM. - Mvm *MVMInstance `protobuf:"bytes,1,opt,name=mvm,proto3" json:"mvm,omitempty"` + Mvm *ManagedVM `protobuf:"bytes,1,opt,name=mvm,proto3" json:"mvm,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -775,7 +812,7 @@ func (*MVMServiceGetResponse) Descriptor() ([]byte, []int) { return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{5} } -func (x *MVMServiceGetResponse) GetMvm() *MVMInstance { +func (x *MVMServiceGetResponse) GetMvm() *ManagedVM { if x != nil { return x.Mvm } @@ -895,7 +932,6 @@ func (x *MVMServiceCreateLinuxRequest) GetDisks() []*LinuxDisk { } // Request to create a new MVM instance. -// TODO: contract, billable and billing_start_date. type MVMServiceCreateRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // UUID of the project this MVM belongs to. @@ -1721,7 +1757,7 @@ func (x *MVMServiceListRequest) GetTenant() string { type MVMServiceListResponse struct { state protoimpl.MessageState `protogen:"open.v1"` // The MVM instances. - Mvms []*MVMInstance `protobuf:"bytes,1,rep,name=mvms,proto3" json:"mvms,omitempty"` + Mvms []*ManagedVM `protobuf:"bytes,1,rep,name=mvms,proto3" json:"mvms,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1756,7 +1792,7 @@ func (*MVMServiceListResponse) Descriptor() ([]byte, []int) { return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{18} } -func (x *MVMServiceListResponse) GetMvms() []*MVMInstance { +func (x *MVMServiceListResponse) GetMvms() []*ManagedVM { if x != nil { return x.Mvms } @@ -2946,8 +2982,8 @@ const file_fits_api_mvm_v1_mvm_proto_rawDesc = "" + "\tipaddress\x18\x02 \x01(\tB\v\xbaH\br\x06賮\xb1\x02\x01R\tipaddress\x12\x1e\n" + "\n" + "macaddress\x18\x03 \x01(\tR\n" + - "macaddress\"\xa4\a\n" + - "\vMVMInstance\x12\x1c\n" + + "macaddress\"\xac\a\n" + + "\tManagedVM\x12\x1c\n" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n" + "\x04meta\x18\x02 \x01(\v2\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n" + "\x04fqdn\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04fqdn\x12#\n" + @@ -2959,8 +2995,8 @@ const file_fits_api_mvm_v1_mvm_proto_rawDesc = "" + "\x03cpu\x18\t \x01(\rR\x03cpu\x12\x10\n" + "\x03ram\x18\n" + " \x01(\rR\x03ram\x12\x16\n" + - "\x06backup\x18\v \x01(\bR\x06backup\x12\x16\n" + - "\x06status\x18\f \x01(\tR\x06status\x12\x1f\n" + + "\x06backup\x18\v \x01(\bR\x06backup\x12<\n" + + "\x06status\x18\f \x01(\x0e2\x1a.fits.api.mvm.v1.MVMStatusB\b\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12\x1f\n" + "\vstatus_info\x18\r \x01(\tR\n" + "statusInfo\x12K\n" + "\favailability\x18\x0e \x01(\x0e2\x1d.fits.api.mvm.v1.AvailabilityB\b\xbaH\x05\x82\x01\x02\x10\x01R\favailability\x12K\n" + @@ -2971,15 +3007,14 @@ const file_fits_api_mvm_v1_mvm_proto_rawDesc = "" + "interfaces\x18\x12 \x03(\v2!.fits.api.mvm.v1.NetworkInterfaceR\n" + "interfaces\x12)\n" + "\x04vlan\x18\x13 \x01(\v2\x15.fits.api.mvm.v1.VLANR\x04vlan\x12!\n" + - "\forder_number\x18\x14 \x01(\tR\vorderNumber\x12\x1a\n" + - "\bcontract\x18\x15 \x01(\bR\bcontractB\x10\n" + + "\forder_number\x18\x14 \x01(\tR\vorderNumberB\x10\n" + "\adetails\x12\x05\xbaH\x02\b\x01\"g\n" + "\x14MVMServiceGetRequest\x12!\n" + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12#\n" + "\x06tenant\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\a\n" + - "\x05_uuid\"G\n" + - "\x15MVMServiceGetResponse\x12.\n" + - "\x03mvm\x18\x01 \x01(\v2\x1c.fits.api.mvm.v1.MVMInstanceR\x03mvm\"\x89\x01\n" + + "\x05_uuid\"E\n" + + "\x15MVMServiceGetResponse\x12,\n" + + "\x03mvm\x18\x01 \x01(\v2\x1a.fits.api.mvm.v1.ManagedVMR\x03mvm\"\x89\x01\n" + "\x1eMVMServiceCreateWindowsRequest\x12)\n" + "\vdomain_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\n" + "domainUuid\x12<\n" + @@ -3054,9 +3089,9 @@ const file_fits_api_mvm_v1_mvm_proto_rawDesc = "" + "\x18MVMServiceUpdateResponse\"L\n" + "\x15MVMServiceListRequest\x12(\n" + "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01B\t\n" + - "\a_tenant\"J\n" + - "\x16MVMServiceListResponse\x120\n" + - "\x04mvms\x18\x01 \x03(\v2\x1c.fits.api.mvm.v1.MVMInstanceR\x04mvms\"~\n" + + "\a_tenant\"H\n" + + "\x16MVMServiceListResponse\x12.\n" + + "\x04mvms\x18\x01 \x03(\v2\x1a.fits.api.mvm.v1.ManagedVMR\x04mvms\"~\n" + "\x17MVMServiceDeleteRequest\x12\"\n" + "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12\x1c\n" + "\x04uuid\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n" + @@ -3128,7 +3163,11 @@ const file_fits_api_mvm_v1_mvm_proto_rawDesc = "" + "\x19SERVICE_CLASS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1e\n" + "\x11SERVICE_CLASS_SZ1\x10\x01\x1a\a\x82\xb2\x19\x03SZ1\x12\x1e\n" + "\x11SERVICE_CLASS_SZ2\x10\x02\x1a\a\x82\xb2\x19\x03SZ2\x12\x1e\n" + - "\x11SERVICE_CLASS_SZ3\x10\x03\x1a\a\x82\xb2\x19\x03SZ3*\x85\x01\n" + + "\x11SERVICE_CLASS_SZ3\x10\x03\x1a\a\x82\xb2\x19\x03SZ3*P\n" + + "\tMVMStatus\x12 \n" + + "\x16MVM_STATUS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12!\n" + + "\x11MVM_STATUS_ACTIVE\x10\x01\x1a\n" + + "\x82\xb2\x19\x06active*\x85\x01\n" + "\bDiskType\x12\x1f\n" + "\x15DISK_TYPE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x18\n" + "\fDISK_TYPE_OS\x10\x01\x1a\x06\x82\xb2\x19\x02os\x12 \n" + @@ -3181,125 +3220,127 @@ func file_fits_api_mvm_v1_mvm_proto_rawDescGZIP() []byte { return file_fits_api_mvm_v1_mvm_proto_rawDescData } -var file_fits_api_mvm_v1_mvm_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_fits_api_mvm_v1_mvm_proto_enumTypes = make([]protoimpl.EnumInfo, 4) var file_fits_api_mvm_v1_mvm_proto_msgTypes = make([]protoimpl.MessageInfo, 41) var file_fits_api_mvm_v1_mvm_proto_goTypes = []any{ (Availability)(0), // 0: fits.api.mvm.v1.Availability (ServiceClass)(0), // 1: fits.api.mvm.v1.ServiceClass - (DiskType)(0), // 2: fits.api.mvm.v1.DiskType - (*LinuxDetails)(nil), // 3: fits.api.mvm.v1.LinuxDetails - (*WindowsDetails)(nil), // 4: fits.api.mvm.v1.WindowsDetails - (*NetworkInterface)(nil), // 5: fits.api.mvm.v1.NetworkInterface - (*MVMInstance)(nil), // 6: fits.api.mvm.v1.MVMInstance - (*MVMServiceGetRequest)(nil), // 7: fits.api.mvm.v1.MVMServiceGetRequest - (*MVMServiceGetResponse)(nil), // 8: fits.api.mvm.v1.MVMServiceGetResponse - (*MVMServiceCreateWindowsRequest)(nil), // 9: fits.api.mvm.v1.MVMServiceCreateWindowsRequest - (*MVMServiceCreateLinuxRequest)(nil), // 10: fits.api.mvm.v1.MVMServiceCreateLinuxRequest - (*MVMServiceCreateRequest)(nil), // 11: fits.api.mvm.v1.MVMServiceCreateRequest - (*LinuxDisk)(nil), // 12: fits.api.mvm.v1.LinuxDisk - (*WindowsDisk)(nil), // 13: fits.api.mvm.v1.WindowsDisk - (*MVMServiceCreateResponse)(nil), // 14: fits.api.mvm.v1.MVMServiceCreateResponse - (*MVMServiceUpdateRequest)(nil), // 15: fits.api.mvm.v1.MVMServiceUpdateRequest - (*PerformanceClassChange)(nil), // 16: fits.api.mvm.v1.PerformanceClassChange - (*ServiceClassChange)(nil), // 17: fits.api.mvm.v1.ServiceClassChange - (*ContactChange)(nil), // 18: fits.api.mvm.v1.ContactChange - (*MVMServiceUpdateResponse)(nil), // 19: fits.api.mvm.v1.MVMServiceUpdateResponse - (*MVMServiceListRequest)(nil), // 20: fits.api.mvm.v1.MVMServiceListRequest - (*MVMServiceListResponse)(nil), // 21: fits.api.mvm.v1.MVMServiceListResponse - (*MVMServiceDeleteRequest)(nil), // 22: fits.api.mvm.v1.MVMServiceDeleteRequest - (*MVMServiceDeleteResponse)(nil), // 23: fits.api.mvm.v1.MVMServiceDeleteResponse - (*MVMServiceValidateCreateRequest)(nil), // 24: fits.api.mvm.v1.MVMServiceValidateCreateRequest - (*MVMServiceValidateCreateResponse)(nil), // 25: fits.api.mvm.v1.MVMServiceValidateCreateResponse - (*MVMServiceValidateAddDiskRequest)(nil), // 26: fits.api.mvm.v1.MVMServiceValidateAddDiskRequest - (*MVMServiceValidateAddDiskResponse)(nil), // 27: fits.api.mvm.v1.MVMServiceValidateAddDiskResponse - (*MVMServiceValidateUpdateDiskRequest)(nil), // 28: fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest - (*MVMServiceValidateUpdateDiskResponse)(nil), // 29: fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse - (*MVMServiceAddDiskResponse)(nil), // 30: fits.api.mvm.v1.MVMServiceAddDiskResponse - (*MVMServiceUpdateDiskResponse)(nil), // 31: fits.api.mvm.v1.MVMServiceUpdateDiskResponse - (*MVMServiceDeleteDiskResponse)(nil), // 32: fits.api.mvm.v1.MVMServiceDeleteDiskResponse - (*MVMServiceAddDiskRequest)(nil), // 33: fits.api.mvm.v1.MVMServiceAddDiskRequest - (*MVMServiceUpdateDiskRequest)(nil), // 34: fits.api.mvm.v1.MVMServiceUpdateDiskRequest - (*MVMServiceDeleteDiskRequest)(nil), // 35: fits.api.mvm.v1.MVMServiceDeleteDiskRequest - (*MVMServiceAddNetworkInterfaceResponse)(nil), // 36: fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse - (*MVMServiceMoveNetworkInterfaceResponse)(nil), // 37: fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse - (*MVMServiceDeleteNetworkInterfaceResponse)(nil), // 38: fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse - (*MVMServiceAddNetworkInterfaceRequest)(nil), // 39: fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest - (*MVMServiceMoveNetworkInterfaceRequest)(nil), // 40: fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest - (*MVMServiceDeleteNetworkInterfaceRequest)(nil), // 41: fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest - (*MVMServiceValidateAddNetworkInterfaceRequest)(nil), // 42: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest - (*MVMServiceValidateAddNetworkInterfaceResponse)(nil), // 43: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse - (*v1.Meta)(nil), // 44: fits.api.v1.Meta - (*VLAN)(nil), // 45: fits.api.mvm.v1.VLAN - (*v1.Labels)(nil), // 46: fits.api.v1.Labels - (*v1.UpdateMeta)(nil), // 47: fits.api.v1.UpdateMeta + (MVMStatus)(0), // 2: fits.api.mvm.v1.MVMStatus + (DiskType)(0), // 3: fits.api.mvm.v1.DiskType + (*LinuxDetails)(nil), // 4: fits.api.mvm.v1.LinuxDetails + (*WindowsDetails)(nil), // 5: fits.api.mvm.v1.WindowsDetails + (*NetworkInterface)(nil), // 6: fits.api.mvm.v1.NetworkInterface + (*ManagedVM)(nil), // 7: fits.api.mvm.v1.ManagedVM + (*MVMServiceGetRequest)(nil), // 8: fits.api.mvm.v1.MVMServiceGetRequest + (*MVMServiceGetResponse)(nil), // 9: fits.api.mvm.v1.MVMServiceGetResponse + (*MVMServiceCreateWindowsRequest)(nil), // 10: fits.api.mvm.v1.MVMServiceCreateWindowsRequest + (*MVMServiceCreateLinuxRequest)(nil), // 11: fits.api.mvm.v1.MVMServiceCreateLinuxRequest + (*MVMServiceCreateRequest)(nil), // 12: fits.api.mvm.v1.MVMServiceCreateRequest + (*LinuxDisk)(nil), // 13: fits.api.mvm.v1.LinuxDisk + (*WindowsDisk)(nil), // 14: fits.api.mvm.v1.WindowsDisk + (*MVMServiceCreateResponse)(nil), // 15: fits.api.mvm.v1.MVMServiceCreateResponse + (*MVMServiceUpdateRequest)(nil), // 16: fits.api.mvm.v1.MVMServiceUpdateRequest + (*PerformanceClassChange)(nil), // 17: fits.api.mvm.v1.PerformanceClassChange + (*ServiceClassChange)(nil), // 18: fits.api.mvm.v1.ServiceClassChange + (*ContactChange)(nil), // 19: fits.api.mvm.v1.ContactChange + (*MVMServiceUpdateResponse)(nil), // 20: fits.api.mvm.v1.MVMServiceUpdateResponse + (*MVMServiceListRequest)(nil), // 21: fits.api.mvm.v1.MVMServiceListRequest + (*MVMServiceListResponse)(nil), // 22: fits.api.mvm.v1.MVMServiceListResponse + (*MVMServiceDeleteRequest)(nil), // 23: fits.api.mvm.v1.MVMServiceDeleteRequest + (*MVMServiceDeleteResponse)(nil), // 24: fits.api.mvm.v1.MVMServiceDeleteResponse + (*MVMServiceValidateCreateRequest)(nil), // 25: fits.api.mvm.v1.MVMServiceValidateCreateRequest + (*MVMServiceValidateCreateResponse)(nil), // 26: fits.api.mvm.v1.MVMServiceValidateCreateResponse + (*MVMServiceValidateAddDiskRequest)(nil), // 27: fits.api.mvm.v1.MVMServiceValidateAddDiskRequest + (*MVMServiceValidateAddDiskResponse)(nil), // 28: fits.api.mvm.v1.MVMServiceValidateAddDiskResponse + (*MVMServiceValidateUpdateDiskRequest)(nil), // 29: fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest + (*MVMServiceValidateUpdateDiskResponse)(nil), // 30: fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse + (*MVMServiceAddDiskResponse)(nil), // 31: fits.api.mvm.v1.MVMServiceAddDiskResponse + (*MVMServiceUpdateDiskResponse)(nil), // 32: fits.api.mvm.v1.MVMServiceUpdateDiskResponse + (*MVMServiceDeleteDiskResponse)(nil), // 33: fits.api.mvm.v1.MVMServiceDeleteDiskResponse + (*MVMServiceAddDiskRequest)(nil), // 34: fits.api.mvm.v1.MVMServiceAddDiskRequest + (*MVMServiceUpdateDiskRequest)(nil), // 35: fits.api.mvm.v1.MVMServiceUpdateDiskRequest + (*MVMServiceDeleteDiskRequest)(nil), // 36: fits.api.mvm.v1.MVMServiceDeleteDiskRequest + (*MVMServiceAddNetworkInterfaceResponse)(nil), // 37: fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse + (*MVMServiceMoveNetworkInterfaceResponse)(nil), // 38: fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse + (*MVMServiceDeleteNetworkInterfaceResponse)(nil), // 39: fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse + (*MVMServiceAddNetworkInterfaceRequest)(nil), // 40: fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest + (*MVMServiceMoveNetworkInterfaceRequest)(nil), // 41: fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest + (*MVMServiceDeleteNetworkInterfaceRequest)(nil), // 42: fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest + (*MVMServiceValidateAddNetworkInterfaceRequest)(nil), // 43: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest + (*MVMServiceValidateAddNetworkInterfaceResponse)(nil), // 44: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse + (*v1.Meta)(nil), // 45: fits.api.v1.Meta + (*VLAN)(nil), // 46: fits.api.mvm.v1.VLAN + (*v1.Labels)(nil), // 47: fits.api.v1.Labels + (*v1.UpdateMeta)(nil), // 48: fits.api.v1.UpdateMeta } var file_fits_api_mvm_v1_mvm_proto_depIdxs = []int32{ - 12, // 0: fits.api.mvm.v1.LinuxDetails.disks:type_name -> fits.api.mvm.v1.LinuxDisk - 13, // 1: fits.api.mvm.v1.WindowsDetails.disks:type_name -> fits.api.mvm.v1.WindowsDisk - 44, // 2: fits.api.mvm.v1.MVMInstance.meta:type_name -> fits.api.v1.Meta - 0, // 3: fits.api.mvm.v1.MVMInstance.availability:type_name -> fits.api.mvm.v1.Availability - 1, // 4: fits.api.mvm.v1.MVMInstance.serviceclass:type_name -> fits.api.mvm.v1.ServiceClass - 4, // 5: fits.api.mvm.v1.MVMInstance.windows_details:type_name -> fits.api.mvm.v1.WindowsDetails - 3, // 6: fits.api.mvm.v1.MVMInstance.linux_details:type_name -> fits.api.mvm.v1.LinuxDetails - 5, // 7: fits.api.mvm.v1.MVMInstance.interfaces:type_name -> fits.api.mvm.v1.NetworkInterface - 45, // 8: fits.api.mvm.v1.MVMInstance.vlan:type_name -> fits.api.mvm.v1.VLAN - 6, // 9: fits.api.mvm.v1.MVMServiceGetResponse.mvm:type_name -> fits.api.mvm.v1.MVMInstance - 13, // 10: fits.api.mvm.v1.MVMServiceCreateWindowsRequest.disks:type_name -> fits.api.mvm.v1.WindowsDisk - 12, // 11: fits.api.mvm.v1.MVMServiceCreateLinuxRequest.disks:type_name -> fits.api.mvm.v1.LinuxDisk - 46, // 12: fits.api.mvm.v1.MVMServiceCreateRequest.labels:type_name -> fits.api.v1.Labels - 0, // 13: fits.api.mvm.v1.MVMServiceCreateRequest.availability:type_name -> fits.api.mvm.v1.Availability - 1, // 14: fits.api.mvm.v1.MVMServiceCreateRequest.serviceclass:type_name -> fits.api.mvm.v1.ServiceClass - 9, // 15: fits.api.mvm.v1.MVMServiceCreateRequest.windows:type_name -> fits.api.mvm.v1.MVMServiceCreateWindowsRequest - 10, // 16: fits.api.mvm.v1.MVMServiceCreateRequest.linux:type_name -> fits.api.mvm.v1.MVMServiceCreateLinuxRequest - 2, // 17: fits.api.mvm.v1.LinuxDisk.disk_type:type_name -> fits.api.mvm.v1.DiskType - 2, // 18: fits.api.mvm.v1.WindowsDisk.disk_type:type_name -> fits.api.mvm.v1.DiskType - 47, // 19: fits.api.mvm.v1.MVMServiceUpdateRequest.update_meta:type_name -> fits.api.v1.UpdateMeta - 16, // 20: fits.api.mvm.v1.MVMServiceUpdateRequest.performance_class:type_name -> fits.api.mvm.v1.PerformanceClassChange - 17, // 21: fits.api.mvm.v1.MVMServiceUpdateRequest.service_class:type_name -> fits.api.mvm.v1.ServiceClassChange - 18, // 22: fits.api.mvm.v1.MVMServiceUpdateRequest.contact:type_name -> fits.api.mvm.v1.ContactChange - 1, // 23: fits.api.mvm.v1.ServiceClassChange.serviceclass:type_name -> fits.api.mvm.v1.ServiceClass - 6, // 24: fits.api.mvm.v1.MVMServiceListResponse.mvms:type_name -> fits.api.mvm.v1.MVMInstance - 11, // 25: fits.api.mvm.v1.MVMServiceValidateCreateRequest.create:type_name -> fits.api.mvm.v1.MVMServiceCreateRequest - 33, // 26: fits.api.mvm.v1.MVMServiceValidateAddDiskRequest.add_disk:type_name -> fits.api.mvm.v1.MVMServiceAddDiskRequest - 34, // 27: fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest.update_disk:type_name -> fits.api.mvm.v1.MVMServiceUpdateDiskRequest - 12, // 28: fits.api.mvm.v1.MVMServiceAddDiskRequest.linux:type_name -> fits.api.mvm.v1.LinuxDisk - 13, // 29: fits.api.mvm.v1.MVMServiceAddDiskRequest.windows:type_name -> fits.api.mvm.v1.WindowsDisk - 39, // 30: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest.add_network_interface:type_name -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest - 7, // 31: fits.api.mvm.v1.MVMService.Get:input_type -> fits.api.mvm.v1.MVMServiceGetRequest - 11, // 32: fits.api.mvm.v1.MVMService.Create:input_type -> fits.api.mvm.v1.MVMServiceCreateRequest - 15, // 33: fits.api.mvm.v1.MVMService.Update:input_type -> fits.api.mvm.v1.MVMServiceUpdateRequest - 20, // 34: fits.api.mvm.v1.MVMService.List:input_type -> fits.api.mvm.v1.MVMServiceListRequest - 22, // 35: fits.api.mvm.v1.MVMService.Delete:input_type -> fits.api.mvm.v1.MVMServiceDeleteRequest - 33, // 36: fits.api.mvm.v1.MVMService.AddDisk:input_type -> fits.api.mvm.v1.MVMServiceAddDiskRequest - 34, // 37: fits.api.mvm.v1.MVMService.UpdateDisk:input_type -> fits.api.mvm.v1.MVMServiceUpdateDiskRequest - 35, // 38: fits.api.mvm.v1.MVMService.DeleteDisk:input_type -> fits.api.mvm.v1.MVMServiceDeleteDiskRequest - 39, // 39: fits.api.mvm.v1.MVMService.AddNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest - 40, // 40: fits.api.mvm.v1.MVMService.MoveNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest - 41, // 41: fits.api.mvm.v1.MVMService.DeleteNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest - 24, // 42: fits.api.mvm.v1.MVMService.ValidateCreate:input_type -> fits.api.mvm.v1.MVMServiceValidateCreateRequest - 26, // 43: fits.api.mvm.v1.MVMService.ValidateAddDisk:input_type -> fits.api.mvm.v1.MVMServiceValidateAddDiskRequest - 28, // 44: fits.api.mvm.v1.MVMService.ValidateUpdateDisk:input_type -> fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest - 42, // 45: fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest - 8, // 46: fits.api.mvm.v1.MVMService.Get:output_type -> fits.api.mvm.v1.MVMServiceGetResponse - 14, // 47: fits.api.mvm.v1.MVMService.Create:output_type -> fits.api.mvm.v1.MVMServiceCreateResponse - 19, // 48: fits.api.mvm.v1.MVMService.Update:output_type -> fits.api.mvm.v1.MVMServiceUpdateResponse - 21, // 49: fits.api.mvm.v1.MVMService.List:output_type -> fits.api.mvm.v1.MVMServiceListResponse - 23, // 50: fits.api.mvm.v1.MVMService.Delete:output_type -> fits.api.mvm.v1.MVMServiceDeleteResponse - 30, // 51: fits.api.mvm.v1.MVMService.AddDisk:output_type -> fits.api.mvm.v1.MVMServiceAddDiskResponse - 31, // 52: fits.api.mvm.v1.MVMService.UpdateDisk:output_type -> fits.api.mvm.v1.MVMServiceUpdateDiskResponse - 32, // 53: fits.api.mvm.v1.MVMService.DeleteDisk:output_type -> fits.api.mvm.v1.MVMServiceDeleteDiskResponse - 36, // 54: fits.api.mvm.v1.MVMService.AddNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse - 37, // 55: fits.api.mvm.v1.MVMService.MoveNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse - 38, // 56: fits.api.mvm.v1.MVMService.DeleteNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse - 25, // 57: fits.api.mvm.v1.MVMService.ValidateCreate:output_type -> fits.api.mvm.v1.MVMServiceValidateCreateResponse - 27, // 58: fits.api.mvm.v1.MVMService.ValidateAddDisk:output_type -> fits.api.mvm.v1.MVMServiceValidateAddDiskResponse - 29, // 59: fits.api.mvm.v1.MVMService.ValidateUpdateDisk:output_type -> fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse - 43, // 60: fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse - 46, // [46:61] is the sub-list for method output_type - 31, // [31:46] is the sub-list for method input_type - 31, // [31:31] is the sub-list for extension type_name - 31, // [31:31] is the sub-list for extension extendee - 0, // [0:31] is the sub-list for field type_name + 13, // 0: fits.api.mvm.v1.LinuxDetails.disks:type_name -> fits.api.mvm.v1.LinuxDisk + 14, // 1: fits.api.mvm.v1.WindowsDetails.disks:type_name -> fits.api.mvm.v1.WindowsDisk + 45, // 2: fits.api.mvm.v1.ManagedVM.meta:type_name -> fits.api.v1.Meta + 2, // 3: fits.api.mvm.v1.ManagedVM.status:type_name -> fits.api.mvm.v1.MVMStatus + 0, // 4: fits.api.mvm.v1.ManagedVM.availability:type_name -> fits.api.mvm.v1.Availability + 1, // 5: fits.api.mvm.v1.ManagedVM.serviceclass:type_name -> fits.api.mvm.v1.ServiceClass + 5, // 6: fits.api.mvm.v1.ManagedVM.windows_details:type_name -> fits.api.mvm.v1.WindowsDetails + 4, // 7: fits.api.mvm.v1.ManagedVM.linux_details:type_name -> fits.api.mvm.v1.LinuxDetails + 6, // 8: fits.api.mvm.v1.ManagedVM.interfaces:type_name -> fits.api.mvm.v1.NetworkInterface + 46, // 9: fits.api.mvm.v1.ManagedVM.vlan:type_name -> fits.api.mvm.v1.VLAN + 7, // 10: fits.api.mvm.v1.MVMServiceGetResponse.mvm:type_name -> fits.api.mvm.v1.ManagedVM + 14, // 11: fits.api.mvm.v1.MVMServiceCreateWindowsRequest.disks:type_name -> fits.api.mvm.v1.WindowsDisk + 13, // 12: fits.api.mvm.v1.MVMServiceCreateLinuxRequest.disks:type_name -> fits.api.mvm.v1.LinuxDisk + 47, // 13: fits.api.mvm.v1.MVMServiceCreateRequest.labels:type_name -> fits.api.v1.Labels + 0, // 14: fits.api.mvm.v1.MVMServiceCreateRequest.availability:type_name -> fits.api.mvm.v1.Availability + 1, // 15: fits.api.mvm.v1.MVMServiceCreateRequest.serviceclass:type_name -> fits.api.mvm.v1.ServiceClass + 10, // 16: fits.api.mvm.v1.MVMServiceCreateRequest.windows:type_name -> fits.api.mvm.v1.MVMServiceCreateWindowsRequest + 11, // 17: fits.api.mvm.v1.MVMServiceCreateRequest.linux:type_name -> fits.api.mvm.v1.MVMServiceCreateLinuxRequest + 3, // 18: fits.api.mvm.v1.LinuxDisk.disk_type:type_name -> fits.api.mvm.v1.DiskType + 3, // 19: fits.api.mvm.v1.WindowsDisk.disk_type:type_name -> fits.api.mvm.v1.DiskType + 48, // 20: fits.api.mvm.v1.MVMServiceUpdateRequest.update_meta:type_name -> fits.api.v1.UpdateMeta + 17, // 21: fits.api.mvm.v1.MVMServiceUpdateRequest.performance_class:type_name -> fits.api.mvm.v1.PerformanceClassChange + 18, // 22: fits.api.mvm.v1.MVMServiceUpdateRequest.service_class:type_name -> fits.api.mvm.v1.ServiceClassChange + 19, // 23: fits.api.mvm.v1.MVMServiceUpdateRequest.contact:type_name -> fits.api.mvm.v1.ContactChange + 1, // 24: fits.api.mvm.v1.ServiceClassChange.serviceclass:type_name -> fits.api.mvm.v1.ServiceClass + 7, // 25: fits.api.mvm.v1.MVMServiceListResponse.mvms:type_name -> fits.api.mvm.v1.ManagedVM + 12, // 26: fits.api.mvm.v1.MVMServiceValidateCreateRequest.create:type_name -> fits.api.mvm.v1.MVMServiceCreateRequest + 34, // 27: fits.api.mvm.v1.MVMServiceValidateAddDiskRequest.add_disk:type_name -> fits.api.mvm.v1.MVMServiceAddDiskRequest + 35, // 28: fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest.update_disk:type_name -> fits.api.mvm.v1.MVMServiceUpdateDiskRequest + 13, // 29: fits.api.mvm.v1.MVMServiceAddDiskRequest.linux:type_name -> fits.api.mvm.v1.LinuxDisk + 14, // 30: fits.api.mvm.v1.MVMServiceAddDiskRequest.windows:type_name -> fits.api.mvm.v1.WindowsDisk + 40, // 31: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest.add_network_interface:type_name -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest + 8, // 32: fits.api.mvm.v1.MVMService.Get:input_type -> fits.api.mvm.v1.MVMServiceGetRequest + 12, // 33: fits.api.mvm.v1.MVMService.Create:input_type -> fits.api.mvm.v1.MVMServiceCreateRequest + 16, // 34: fits.api.mvm.v1.MVMService.Update:input_type -> fits.api.mvm.v1.MVMServiceUpdateRequest + 21, // 35: fits.api.mvm.v1.MVMService.List:input_type -> fits.api.mvm.v1.MVMServiceListRequest + 23, // 36: fits.api.mvm.v1.MVMService.Delete:input_type -> fits.api.mvm.v1.MVMServiceDeleteRequest + 34, // 37: fits.api.mvm.v1.MVMService.AddDisk:input_type -> fits.api.mvm.v1.MVMServiceAddDiskRequest + 35, // 38: fits.api.mvm.v1.MVMService.UpdateDisk:input_type -> fits.api.mvm.v1.MVMServiceUpdateDiskRequest + 36, // 39: fits.api.mvm.v1.MVMService.DeleteDisk:input_type -> fits.api.mvm.v1.MVMServiceDeleteDiskRequest + 40, // 40: fits.api.mvm.v1.MVMService.AddNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest + 41, // 41: fits.api.mvm.v1.MVMService.MoveNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest + 42, // 42: fits.api.mvm.v1.MVMService.DeleteNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest + 25, // 43: fits.api.mvm.v1.MVMService.ValidateCreate:input_type -> fits.api.mvm.v1.MVMServiceValidateCreateRequest + 27, // 44: fits.api.mvm.v1.MVMService.ValidateAddDisk:input_type -> fits.api.mvm.v1.MVMServiceValidateAddDiskRequest + 29, // 45: fits.api.mvm.v1.MVMService.ValidateUpdateDisk:input_type -> fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest + 43, // 46: fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest + 9, // 47: fits.api.mvm.v1.MVMService.Get:output_type -> fits.api.mvm.v1.MVMServiceGetResponse + 15, // 48: fits.api.mvm.v1.MVMService.Create:output_type -> fits.api.mvm.v1.MVMServiceCreateResponse + 20, // 49: fits.api.mvm.v1.MVMService.Update:output_type -> fits.api.mvm.v1.MVMServiceUpdateResponse + 22, // 50: fits.api.mvm.v1.MVMService.List:output_type -> fits.api.mvm.v1.MVMServiceListResponse + 24, // 51: fits.api.mvm.v1.MVMService.Delete:output_type -> fits.api.mvm.v1.MVMServiceDeleteResponse + 31, // 52: fits.api.mvm.v1.MVMService.AddDisk:output_type -> fits.api.mvm.v1.MVMServiceAddDiskResponse + 32, // 53: fits.api.mvm.v1.MVMService.UpdateDisk:output_type -> fits.api.mvm.v1.MVMServiceUpdateDiskResponse + 33, // 54: fits.api.mvm.v1.MVMService.DeleteDisk:output_type -> fits.api.mvm.v1.MVMServiceDeleteDiskResponse + 37, // 55: fits.api.mvm.v1.MVMService.AddNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse + 38, // 56: fits.api.mvm.v1.MVMService.MoveNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse + 39, // 57: fits.api.mvm.v1.MVMService.DeleteNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse + 26, // 58: fits.api.mvm.v1.MVMService.ValidateCreate:output_type -> fits.api.mvm.v1.MVMServiceValidateCreateResponse + 28, // 59: fits.api.mvm.v1.MVMService.ValidateAddDisk:output_type -> fits.api.mvm.v1.MVMServiceValidateAddDiskResponse + 30, // 60: fits.api.mvm.v1.MVMService.ValidateUpdateDisk:output_type -> fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse + 44, // 61: fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse + 47, // [47:62] is the sub-list for method output_type + 32, // [32:47] is the sub-list for method input_type + 32, // [32:32] is the sub-list for extension type_name + 32, // [32:32] is the sub-list for extension extendee + 0, // [0:32] is the sub-list for field type_name } func init() { file_fits_api_mvm_v1_mvm_proto_init() } @@ -3309,8 +3350,8 @@ func file_fits_api_mvm_v1_mvm_proto_init() { } file_fits_api_mvm_v1_vlan_proto_init() file_fits_api_mvm_v1_mvm_proto_msgTypes[3].OneofWrappers = []any{ - (*MVMInstance_WindowsDetails)(nil), - (*MVMInstance_LinuxDetails)(nil), + (*ManagedVM_WindowsDetails)(nil), + (*ManagedVM_LinuxDetails)(nil), } file_fits_api_mvm_v1_mvm_proto_msgTypes[4].OneofWrappers = []any{} file_fits_api_mvm_v1_mvm_proto_msgTypes[8].OneofWrappers = []any{ @@ -3335,7 +3376,7 @@ func file_fits_api_mvm_v1_mvm_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_mvm_v1_mvm_proto_rawDesc), len(file_fits_api_mvm_v1_mvm_proto_rawDesc)), - NumEnums: 3, + NumEnums: 4, NumMessages: 41, NumExtensions: 0, NumServices: 1, diff --git a/js/fits/api/mvm/v1/mvm_pb.ts b/js/fits/api/mvm/v1/mvm_pb.ts index 21c2790..c32a60c 100644 --- a/js/fits/api/mvm/v1/mvm_pb.ts +++ b/js/fits/api/mvm/v1/mvm_pb.ts @@ -16,7 +16,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file fits/api/mvm/v1/mvm.proto. */ export const file_fits_api_mvm_v1_mvm: GenFile = /*@__PURE__*/ - fileDesc("ChlmaXRzL2FwaS9tdm0vdjEvbXZtLnByb3RvEg9maXRzLmFwaS5tdm0udjEidgoMTGludXhEZXRhaWxzEikKBWRpc2tzGAEgAygLMhouZml0cy5hcGkubXZtLnYxLkxpbnV4RGlzaxIbCglsZGFwX3V1aWQYAiABKAlCCLpIBXIDsAEBEh4KCWxkYXBfZnFkbhgDIAEoCUILukgIcgbAs66xAgEifgoOV2luZG93c0RldGFpbHMSKwoFZGlza3MYASADKAsyHC5maXRzLmFwaS5tdm0udjEuV2luZG93c0Rpc2sSHQoLZG9tYWluX3V1aWQYAiABKAlCCLpIBXIDsAEBEiAKC2RvbWFpbl9mcWRuGAMgASgJQgu6SAhyBsCzrrECASJeChBOZXR3b3JrSW50ZXJmYWNlEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEh4KCWlwYWRkcmVzcxgCIAEoCUILukgIcgbos66xAgESEgoKbWFjYWRkcmVzcxgDIAEoCSLRBQoLTVZNSW5zdGFuY2USFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEZnFkbhgDIAEoCUILukgIcgbAs66xAgESGwoGdGVuYW50GAQgASgJQgu6SAhyBsCzrrECARIeCgxwcm9qZWN0X3V1aWQYBSABKAlCCLpIBXIDsAEBEhkKB29zX3V1aWQYBiABKAlCCLpIBXIDsAEBEh8KDWxvY2F0aW9uX3V1aWQYByABKAlCCLpIBXIDsAEBEh4KDGNvbnRhY3RfdXVpZBgIIAEoCUIIukgFcgOwAQESCwoDY3B1GAkgASgNEgsKA3JhbRgKIAEoDRIOCgZiYWNrdXAYCyABKAgSDgoGc3RhdHVzGAwgASgJEhMKC3N0YXR1c19pbmZvGA0gASgJEj0KDGF2YWlsYWJpbGl0eRgOIAEoDjIdLmZpdHMuYXBpLm12bS52MS5BdmFpbGFiaWxpdHlCCLpIBYIBAhABEj0KDHNlcnZpY2VjbGFzcxgPIAEoDjIdLmZpdHMuYXBpLm12bS52MS5TZXJ2aWNlQ2xhc3NCCLpIBYIBAhABEjoKD3dpbmRvd3NfZGV0YWlscxgQIAEoCzIfLmZpdHMuYXBpLm12bS52MS5XaW5kb3dzRGV0YWlsc0gAEjYKDWxpbnV4X2RldGFpbHMYESABKAsyHS5maXRzLmFwaS5tdm0udjEuTGludXhEZXRhaWxzSAASNQoKaW50ZXJmYWNlcxgSIAMoCzIhLmZpdHMuYXBpLm12bS52MS5OZXR3b3JrSW50ZXJmYWNlEiMKBHZsYW4YEyABKAsyFS5maXRzLmFwaS5tdm0udjEuVkxBThIUCgxvcmRlcl9udW1iZXIYFCABKAkSEAoIY29udHJhY3QYFSABKAhCEAoHZGV0YWlscxIFukgCCAEiWQoUTVZNU2VydmljZUdldFJlcXVlc3QSGwoEdXVpZBgBIAEoCUIIukgFcgOwAQFIAIgBARIbCgZ0ZW5hbnQYAiABKAlCC7pICHIGwLOusQIBQgcKBV91dWlkIkIKFU1WTVNlcnZpY2VHZXRSZXNwb25zZRIpCgNtdm0YASABKAsyHC5maXRzLmFwaS5tdm0udjEuTVZNSW5zdGFuY2UidgoeTVZNU2VydmljZUNyZWF0ZVdpbmRvd3NSZXF1ZXN0Eh0KC2RvbWFpbl91dWlkGAEgASgJQgi6SAVyA7ABARI1CgVkaXNrcxgCIAMoCzIcLmZpdHMuYXBpLm12bS52MS5XaW5kb3dzRGlza0IIukgFkgECCAEicAocTVZNU2VydmljZUNyZWF0ZUxpbnV4UmVxdWVzdBIbCglsZGFwX3V1aWQYASABKAlCCLpIBXIDsAEBEjMKBWRpc2tzGAIgAygLMhouZml0cy5hcGkubXZtLnYxLkxpbnV4RGlza0IIukgFkgECCAEi1AQKF01WTVNlcnZpY2VDcmVhdGVSZXF1ZXN0Eh4KDHByb2plY3RfdXVpZBgBIAEoCUIIukgFcgOwAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIZCgdvc191dWlkGAMgASgJQgi6SAVyA7ABARIbCgl2bGFuX3V1aWQYBCABKAlCCLpIBXIDsAEBEh8KDWxvY2F0aW9uX3V1aWQYBSABKAlCCLpIBXIDsAEBEh4KDGNvbnRhY3RfdXVpZBgGIAEoCUIIukgFcgOwAQESCwoDY3B1GAcgASgNEgsKA3JhbRgIIAEoDRIUCgxvcmRlcl9udW1iZXIYCSABKAkSIwoGbGFiZWxzGAogASgLMhMuZml0cy5hcGkudjEuTGFiZWxzEg4KBmJhY2t1cBgLIAEoCBI9CgxhdmFpbGFiaWxpdHkYDCABKA4yHS5maXRzLmFwaS5tdm0udjEuQXZhaWxhYmlsaXR5Qgi6SAWCAQIQARI9CgxzZXJ2aWNlY2xhc3MYDSABKA4yHS5maXRzLmFwaS5tdm0udjEuU2VydmljZUNsYXNzQgi6SAWCAQIQARJCCgd3aW5kb3dzGA4gASgLMi8uZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VDcmVhdGVXaW5kb3dzUmVxdWVzdEgAEj4KBWxpbnV4GA8gASgLMi0uZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VDcmVhdGVMaW51eFJlcXVlc3RIAEIQCgdtdm10eXBlEgW6SAIIAUIHCgVfbmFtZSLmAQoJTGludXhEaXNrEhsKBHV1aWQYASABKAlCCLpIBXIDsAEBSACIAQESDQoFbGFiZWwYAiABKAkSEwoLYXV0b19leHRlbmQYAyABKAgSEQoEc2l6ZRgEIAEoBEgBiAEBEhgKC21vdW50X3BvaW50GAUgASgJSAKIAQESOwoJZGlza190eXBlGAYgASgOMhkuZml0cy5hcGkubXZtLnYxLkRpc2tUeXBlQgi6SAWCAQIQAUgDiAEBQgcKBV91dWlkQgcKBV9zaXplQg4KDF9tb3VudF9wb2ludEIMCgpfZGlza190eXBlIugBCgtXaW5kb3dzRGlzaxIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEg0KBWxhYmVsGAIgASgJEhMKC2F1dG9fZXh0ZW5kGAMgASgIEhEKBHNpemUYBCABKARIAYgBARIYCgtkcml2ZWxldHRlchgFIAEoCUgCiAEBEjsKCWRpc2tfdHlwZRgGIAEoDjIZLmZpdHMuYXBpLm12bS52MS5EaXNrVHlwZUIIukgFggECEAFIA4gBAUIHCgVfdXVpZEIHCgVfc2l6ZUIOCgxfZHJpdmVsZXR0ZXJCDAoKX2Rpc2tfdHlwZSIaChhNVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2Ui4AIKF01WTVNlcnZpY2VVcGRhdGVSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgDIAEoCRI0Cgt1cGRhdGVfbWV0YRgEIAEoCzIXLmZpdHMuYXBpLnYxLlVwZGF0ZU1ldGFCBrpIA8gBARJEChFwZXJmb3JtYW5jZV9jbGFzcxgFIAEoCzInLmZpdHMuYXBpLm12bS52MS5QZXJmb3JtYW5jZUNsYXNzQ2hhbmdlSAASPAoNc2VydmljZV9jbGFzcxgGIAEoCzIjLmZpdHMuYXBpLm12bS52MS5TZXJ2aWNlQ2xhc3NDaGFuZ2VIABIxCgdjb250YWN0GAcgASgLMh4uZml0cy5hcGkubXZtLnYxLkNvbnRhY3RDaGFuZ2VIAEIPCgZhY3Rpb24SBbpIAggBIkYKFlBlcmZvcm1hbmNlQ2xhc3NDaGFuZ2USFgoDY3B1GAEgASgNQgm6SAYqBBhAKAESFAoDcmFtGAIgASgNQge6SAQqAiAAIlMKElNlcnZpY2VDbGFzc0NoYW5nZRI9CgxzZXJ2aWNlY2xhc3MYASABKA4yHS5maXRzLmFwaS5tdm0udjEuU2VydmljZUNsYXNzQgi6SAWCAQIQASIvCg1Db250YWN0Q2hhbmdlEh4KDGNvbnRhY3RfdXVpZBgBIAEoCUIIukgFcgOwAQEiGgoYTVZNU2VydmljZVVwZGF0ZVJlc3BvbnNlIkQKFU1WTVNlcnZpY2VMaXN0UmVxdWVzdBIgCgZ0ZW5hbnQYASABKAlCC7pICHIGwLOusQIBSACIAQFCCQoHX3RlbmFudCJEChZNVk1TZXJ2aWNlTGlzdFJlc3BvbnNlEioKBG12bXMYASADKAsyHC5maXRzLmFwaS5tdm0udjEuTVZNSW5zdGFuY2UiYgoXTVZNU2VydmljZURlbGV0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQESFgoEdXVpZBgCIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAMgASgJIhoKGE1WTVNlcnZpY2VEZWxldGVSZXNwb25zZSJjCh9NVk1TZXJ2aWNlVmFsaWRhdGVDcmVhdGVSZXF1ZXN0EkAKBmNyZWF0ZRgBIAEoCzIoLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdEIGukgDyAEBIiIKIE1WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlc3BvbnNlImcKIE1WTVNlcnZpY2VWYWxpZGF0ZUFkZERpc2tSZXF1ZXN0EkMKCGFkZF9kaXNrGAEgASgLMikuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGREaXNrUmVxdWVzdEIGukgDyAEBIiMKIU1WTVNlcnZpY2VWYWxpZGF0ZUFkZERpc2tSZXNwb25zZSJwCiNNVk1TZXJ2aWNlVmFsaWRhdGVVcGRhdGVEaXNrUmVxdWVzdBJJCgt1cGRhdGVfZGlzaxgBIAEoCzIsLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVXBkYXRlRGlza1JlcXVlc3RCBrpIA8gBASImCiRNVk1TZXJ2aWNlVmFsaWRhdGVVcGRhdGVEaXNrUmVzcG9uc2UiGwoZTVZNU2VydmljZUFkZERpc2tSZXNwb25zZSIeChxNVk1TZXJ2aWNlVXBkYXRlRGlza1Jlc3BvbnNlIh4KHE1WTVNlcnZpY2VEZWxldGVEaXNrUmVzcG9uc2Ui0AEKGE1WTVNlcnZpY2VBZGREaXNrUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAIgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYAyABKAkSKwoFbGludXgYBCABKAsyGi5maXRzLmFwaS5tdm0udjEuTGludXhEaXNrSAASLwoHd2luZG93cxgFIAEoCzIcLmZpdHMuYXBpLm12bS52MS5XaW5kb3dzRGlza0gAQg0KBGRpc2sSBbpIAggBIskBChtNVk1TZXJ2aWNlVXBkYXRlRGlza1JlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGwoJZGlza191dWlkGAIgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAMgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYBCABKAkSGAoLYXV0b19leHRlbmQYBSABKAhIAIgBARIRCgRzaXplGAYgASgESAGIAQFCDgoMX2F1dG9fZXh0ZW5kQgcKBV9zaXplIoMBChtNVk1TZXJ2aWNlRGVsZXRlRGlza1JlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGwoJZGlza191dWlkGAIgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAMgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYBCABKAkiJwolTVZNU2VydmljZUFkZE5ldHdvcmtJbnRlcmZhY2VSZXNwb25zZSIoCiZNVk1TZXJ2aWNlTW92ZU5ldHdvcmtJbnRlcmZhY2VSZXNwb25zZSIqCihNVk1TZXJ2aWNlRGVsZXRlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIm8KJE1WTVNlcnZpY2VBZGROZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAIgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYAyABKAkitQEKJU1WTVNlcnZpY2VNb3ZlTmV0d29ya0ludGVyZmFjZVJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESIAoOaW50ZXJmYWNlX3V1aWQYAiABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgEIAEoCRIhCg90YXJnZXRfbXZtX3V1aWQYBSABKAlCCLpIBXIDsAEBIpQBCidNVk1TZXJ2aWNlRGVsZXRlTmV0d29ya0ludGVyZmFjZVJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESIAoOaW50ZXJmYWNlX3V1aWQYAiABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgEIAEoCSKMAQosTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlcXVlc3QSXAoVYWRkX25ldHdvcmtfaW50ZXJmYWNlGAEgASgLMjUuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGROZXR3b3JrSW50ZXJmYWNlUmVxdWVzdEIGukgDyAEBIi8KLU1WTVNlcnZpY2VWYWxpZGF0ZUFkZE5ldHdvcmtJbnRlcmZhY2VSZXNwb25zZSqmAQoMQXZhaWxhYmlsaXR5EiIKGEFWQUlMQUJJTElUWV9VTlNQRUNJRklFRBAAGgSCshkAEhsKD0FWQUlMQUJJTElUWV9WMBABGgaCshkCVjASGwoPQVZBSUxBQklMSVRZX1YxEAIaBoKyGQJWMRIbCg9BVkFJTEFCSUxJVFlfVjIQAxoGgrIZAlYyEhsKD0FWQUlMQUJJTElUWV9WMxAEGgaCshkCVjMqkwEKDFNlcnZpY2VDbGFzcxIjChlTRVJWSUNFX0NMQVNTX1VOU1BFQ0lGSUVEEAAaBIKyGQASHgoRU0VSVklDRV9DTEFTU19TWjEQARoHgrIZA1NaMRIeChFTRVJWSUNFX0NMQVNTX1NaMhACGgeCshkDU1oyEh4KEVNFUlZJQ0VfQ0xBU1NfU1ozEAMaB4KyGQNTWjMqhQEKCERpc2tUeXBlEh8KFURJU0tfVFlQRV9VTlNQRUNJRklFRBAAGgSCshkAEhgKDERJU0tfVFlQRV9PUxABGgaCshkCb3MSIAoQRElTS19UWVBFX1NZU1RFTRACGgqCshkGc3lzdGVtEhwKDkRJU0tfVFlQRV9EQVRBEAMaCIKyGQRkYXRhMv0OCgpNVk1TZXJ2aWNlEmEKA0dldBIlLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlR2V0UmVxdWVzdBomLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmkKBkNyZWF0ZRIoLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBopLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESaQoGVXBkYXRlEiguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VVcGRhdGVSZXF1ZXN0GikuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VVcGRhdGVSZXNwb25zZSIKyvMYAgEC4PMYARJkCgRMaXN0EiYuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VMaXN0UmVxdWVzdBonLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlTGlzdFJlc3BvbnNlIgvK8xgDAQID4PMYAhJpCgZEZWxldGUSKC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZURlbGV0ZVJlcXVlc3QaKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZURlbGV0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmwKB0FkZERpc2sSKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZUFkZERpc2tSZXF1ZXN0GiouZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGREaXNrUmVzcG9uc2UiCsrzGAIBAuDzGAESdQoKVXBkYXRlRGlzaxIsLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVXBkYXRlRGlza1JlcXVlc3QaLS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVVwZGF0ZURpc2tSZXNwb25zZSIKyvMYAgEC4PMYARJ1CgpEZWxldGVEaXNrEiwuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VEZWxldGVEaXNrUmVxdWVzdBotLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlRGVsZXRlRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgBEpABChNBZGROZXR3b3JrSW50ZXJmYWNlEjUuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGROZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBo2LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEpMBChRNb3ZlTmV0d29ya0ludGVyZmFjZRI2LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlTW92ZU5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0GjcuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VNb3ZlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEpkBChZEZWxldGVOZXR3b3JrSW50ZXJmYWNlEjguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VEZWxldGVOZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBo5LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlRGVsZXRlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEoEBCg5WYWxpZGF0ZUNyZWF0ZRIwLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVmFsaWRhdGVDcmVhdGVSZXF1ZXN0GjEuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgCEoQBCg9WYWxpZGF0ZUFkZERpc2sSMS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1JlcXVlc3QaMi5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgCEo0BChJWYWxpZGF0ZVVwZGF0ZURpc2sSNC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1JlcXVlc3QaNS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgCEqgBChtWYWxpZGF0ZUFkZE5ldHdvcmtJbnRlcmZhY2USPS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlcXVlc3QaPi5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgCQq0BChNjb20uZml0cy5hcGkubXZtLnYxQghNdm1Qcm90b1ABWi1naXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS9tdm0vdjE7bXZtdjGiAgNGQU2qAg9GaXRzLkFwaS5Ndm0uVjHKAg9GaXRzXEFwaVxNdm1cVjHiAhtGaXRzXEFwaVxNdm1cVjFcR1BCTWV0YWRhdGHqAhJGaXRzOjpBcGk6Ok12bTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_mvm_v1_vlan, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); + fileDesc("ChlmaXRzL2FwaS9tdm0vdjEvbXZtLnByb3RvEg9maXRzLmFwaS5tdm0udjEidgoMTGludXhEZXRhaWxzEikKBWRpc2tzGAEgAygLMhouZml0cy5hcGkubXZtLnYxLkxpbnV4RGlzaxIbCglsZGFwX3V1aWQYAiABKAlCCLpIBXIDsAEBEh4KCWxkYXBfZnFkbhgDIAEoCUILukgIcgbAs66xAgEifgoOV2luZG93c0RldGFpbHMSKwoFZGlza3MYASADKAsyHC5maXRzLmFwaS5tdm0udjEuV2luZG93c0Rpc2sSHQoLZG9tYWluX3V1aWQYAiABKAlCCLpIBXIDsAEBEiAKC2RvbWFpbl9mcWRuGAMgASgJQgu6SAhyBsCzrrECASJeChBOZXR3b3JrSW50ZXJmYWNlEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEh4KCWlwYWRkcmVzcxgCIAEoCUILukgIcgbos66xAgESEgoKbWFjYWRkcmVzcxgDIAEoCSLjBQoJTWFuYWdlZFZNEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBGZxZG4YAyABKAlCC7pICHIGwLOusQIBEhsKBnRlbmFudBgEIAEoCUILukgIcgbAs66xAgESHgoMcHJvamVjdF91dWlkGAUgASgJQgi6SAVyA7ABARIZCgdvc191dWlkGAYgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAcgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYCCABKAlCCLpIBXIDsAEBEgsKA2NwdRgJIAEoDRILCgNyYW0YCiABKA0SDgoGYmFja3VwGAsgASgIEjQKBnN0YXR1cxgMIAEoDjIaLmZpdHMuYXBpLm12bS52MS5NVk1TdGF0dXNCCLpIBYIBAhABEhMKC3N0YXR1c19pbmZvGA0gASgJEj0KDGF2YWlsYWJpbGl0eRgOIAEoDjIdLmZpdHMuYXBpLm12bS52MS5BdmFpbGFiaWxpdHlCCLpIBYIBAhABEj0KDHNlcnZpY2VjbGFzcxgPIAEoDjIdLmZpdHMuYXBpLm12bS52MS5TZXJ2aWNlQ2xhc3NCCLpIBYIBAhABEjoKD3dpbmRvd3NfZGV0YWlscxgQIAEoCzIfLmZpdHMuYXBpLm12bS52MS5XaW5kb3dzRGV0YWlsc0gAEjYKDWxpbnV4X2RldGFpbHMYESABKAsyHS5maXRzLmFwaS5tdm0udjEuTGludXhEZXRhaWxzSAASNQoKaW50ZXJmYWNlcxgSIAMoCzIhLmZpdHMuYXBpLm12bS52MS5OZXR3b3JrSW50ZXJmYWNlEiMKBHZsYW4YEyABKAsyFS5maXRzLmFwaS5tdm0udjEuVkxBThIUCgxvcmRlcl9udW1iZXIYFCABKAlCEAoHZGV0YWlscxIFukgCCAEiWQoUTVZNU2VydmljZUdldFJlcXVlc3QSGwoEdXVpZBgBIAEoCUIIukgFcgOwAQFIAIgBARIbCgZ0ZW5hbnQYAiABKAlCC7pICHIGwLOusQIBQgcKBV91dWlkIkAKFU1WTVNlcnZpY2VHZXRSZXNwb25zZRInCgNtdm0YASABKAsyGi5maXRzLmFwaS5tdm0udjEuTWFuYWdlZFZNInYKHk1WTVNlcnZpY2VDcmVhdGVXaW5kb3dzUmVxdWVzdBIdCgtkb21haW5fdXVpZBgBIAEoCUIIukgFcgOwAQESNQoFZGlza3MYAiADKAsyHC5maXRzLmFwaS5tdm0udjEuV2luZG93c0Rpc2tCCLpIBZIBAggBInAKHE1WTVNlcnZpY2VDcmVhdGVMaW51eFJlcXVlc3QSGwoJbGRhcF91dWlkGAEgASgJQgi6SAVyA7ABARIzCgVkaXNrcxgCIAMoCzIaLmZpdHMuYXBpLm12bS52MS5MaW51eERpc2tCCLpIBZIBAggBItQEChdNVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBIeCgxwcm9qZWN0X3V1aWQYASABKAlCCLpIBXIDsAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESGQoHb3NfdXVpZBgDIAEoCUIIukgFcgOwAQESGwoJdmxhbl91dWlkGAQgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAUgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYBiABKAlCCLpIBXIDsAEBEgsKA2NwdRgHIAEoDRILCgNyYW0YCCABKA0SFAoMb3JkZXJfbnVtYmVyGAkgASgJEiMKBmxhYmVscxgKIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVscxIOCgZiYWNrdXAYCyABKAgSPQoMYXZhaWxhYmlsaXR5GAwgASgOMh0uZml0cy5hcGkubXZtLnYxLkF2YWlsYWJpbGl0eUIIukgFggECEAESPQoMc2VydmljZWNsYXNzGA0gASgOMh0uZml0cy5hcGkubXZtLnYxLlNlcnZpY2VDbGFzc0IIukgFggECEAESQgoHd2luZG93cxgOIAEoCzIvLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlV2luZG93c1JlcXVlc3RIABI+CgVsaW51eBgPIAEoCzItLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlTGludXhSZXF1ZXN0SABCEAoHbXZtdHlwZRIFukgCCAFCBwoFX25hbWUi5gEKCUxpbnV4RGlzaxIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEg0KBWxhYmVsGAIgASgJEhMKC2F1dG9fZXh0ZW5kGAMgASgIEhEKBHNpemUYBCABKARIAYgBARIYCgttb3VudF9wb2ludBgFIAEoCUgCiAEBEjsKCWRpc2tfdHlwZRgGIAEoDjIZLmZpdHMuYXBpLm12bS52MS5EaXNrVHlwZUIIukgFggECEAFIA4gBAUIHCgVfdXVpZEIHCgVfc2l6ZUIOCgxfbW91bnRfcG9pbnRCDAoKX2Rpc2tfdHlwZSLoAQoLV2luZG93c0Rpc2sSGwoEdXVpZBgBIAEoCUIIukgFcgOwAQFIAIgBARINCgVsYWJlbBgCIAEoCRITCgthdXRvX2V4dGVuZBgDIAEoCBIRCgRzaXplGAQgASgESAGIAQESGAoLZHJpdmVsZXR0ZXIYBSABKAlIAogBARI7CglkaXNrX3R5cGUYBiABKA4yGS5maXRzLmFwaS5tdm0udjEuRGlza1R5cGVCCLpIBYIBAhABSAOIAQFCBwoFX3V1aWRCBwoFX3NpemVCDgoMX2RyaXZlbGV0dGVyQgwKCl9kaXNrX3R5cGUiGgoYTVZNU2VydmljZUNyZWF0ZVJlc3BvbnNlIuACChdNVk1TZXJ2aWNlVXBkYXRlUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAIgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYAyABKAkSNAoLdXBkYXRlX21ldGEYBCABKAsyFy5maXRzLmFwaS52MS5VcGRhdGVNZXRhQga6SAPIAQESRAoRcGVyZm9ybWFuY2VfY2xhc3MYBSABKAsyJy5maXRzLmFwaS5tdm0udjEuUGVyZm9ybWFuY2VDbGFzc0NoYW5nZUgAEjwKDXNlcnZpY2VfY2xhc3MYBiABKAsyIy5maXRzLmFwaS5tdm0udjEuU2VydmljZUNsYXNzQ2hhbmdlSAASMQoHY29udGFjdBgHIAEoCzIeLmZpdHMuYXBpLm12bS52MS5Db250YWN0Q2hhbmdlSABCDwoGYWN0aW9uEgW6SAIIASJGChZQZXJmb3JtYW5jZUNsYXNzQ2hhbmdlEhYKA2NwdRgBIAEoDUIJukgGKgQYQCgBEhQKA3JhbRgCIAEoDUIHukgEKgIgACJTChJTZXJ2aWNlQ2xhc3NDaGFuZ2USPQoMc2VydmljZWNsYXNzGAEgASgOMh0uZml0cy5hcGkubXZtLnYxLlNlcnZpY2VDbGFzc0IIukgFggECEAEiLwoNQ29udGFjdENoYW5nZRIeCgxjb250YWN0X3V1aWQYASABKAlCCLpIBXIDsAEBIhoKGE1WTVNlcnZpY2VVcGRhdGVSZXNwb25zZSJEChVNVk1TZXJ2aWNlTGlzdFJlcXVlc3QSIAoGdGVuYW50GAEgASgJQgu6SAhyBsCzrrECAUgAiAEBQgkKB190ZW5hbnQiQgoWTVZNU2VydmljZUxpc3RSZXNwb25zZRIoCgRtdm1zGAEgAygLMhouZml0cy5hcGkubXZtLnYxLk1hbmFnZWRWTSJiChdNVk1TZXJ2aWNlRGVsZXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARIWCgR1dWlkGAIgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYAyABKAkiGgoYTVZNU2VydmljZURlbGV0ZVJlc3BvbnNlImMKH01WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlcXVlc3QSQAoGY3JlYXRlGAEgASgLMiguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VDcmVhdGVSZXF1ZXN0Qga6SAPIAQEiIgogTVZNU2VydmljZVZhbGlkYXRlQ3JlYXRlUmVzcG9uc2UiZwogTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1JlcXVlc3QSQwoIYWRkX2Rpc2sYASABKAsyKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZUFkZERpc2tSZXF1ZXN0Qga6SAPIAQEiIwohTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1Jlc3BvbnNlInAKI01WTVNlcnZpY2VWYWxpZGF0ZVVwZGF0ZURpc2tSZXF1ZXN0EkkKC3VwZGF0ZV9kaXNrGAEgASgLMiwuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VVcGRhdGVEaXNrUmVxdWVzdEIGukgDyAEBIiYKJE1WTVNlcnZpY2VWYWxpZGF0ZVVwZGF0ZURpc2tSZXNwb25zZSIbChlNVk1TZXJ2aWNlQWRkRGlza1Jlc3BvbnNlIh4KHE1WTVNlcnZpY2VVcGRhdGVEaXNrUmVzcG9uc2UiHgocTVZNU2VydmljZURlbGV0ZURpc2tSZXNwb25zZSLQAQoYTVZNU2VydmljZUFkZERpc2tSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgDIAEoCRIrCgVsaW51eBgEIAEoCzIaLmZpdHMuYXBpLm12bS52MS5MaW51eERpc2tIABIvCgd3aW5kb3dzGAUgASgLMhwuZml0cy5hcGkubXZtLnYxLldpbmRvd3NEaXNrSABCDQoEZGlzaxIFukgCCAEiyQEKG01WTVNlcnZpY2VVcGRhdGVEaXNrUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIbCglkaXNrX3V1aWQYAiABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgEIAEoCRIYCgthdXRvX2V4dGVuZBgFIAEoCEgAiAEBEhEKBHNpemUYBiABKARIAYgBAUIOCgxfYXV0b19leHRlbmRCBwoFX3NpemUigwEKG01WTVNlcnZpY2VEZWxldGVEaXNrUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIbCglkaXNrX3V1aWQYAiABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgEIAEoCSInCiVNVk1TZXJ2aWNlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIigKJk1WTVNlcnZpY2VNb3ZlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIioKKE1WTVNlcnZpY2VEZWxldGVOZXR3b3JrSW50ZXJmYWNlUmVzcG9uc2UibwokTVZNU2VydmljZUFkZE5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgDIAEoCSK1AQolTVZNU2VydmljZU1vdmVOZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIgCg5pbnRlcmZhY2VfdXVpZBgCIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAQgASgJEiEKD3RhcmdldF9tdm1fdXVpZBgFIAEoCUIIukgFcgOwAQEilAEKJ01WTVNlcnZpY2VEZWxldGVOZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIgCg5pbnRlcmZhY2VfdXVpZBgCIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAQgASgJIowBCixNVk1TZXJ2aWNlVmFsaWRhdGVBZGROZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBJcChVhZGRfbmV0d29ya19pbnRlcmZhY2UYASABKAsyNS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZUFkZE5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0Qga6SAPIAQEiLwotTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlKqYBCgxBdmFpbGFiaWxpdHkSIgoYQVZBSUxBQklMSVRZX1VOU1BFQ0lGSUVEEAAaBIKyGQASGwoPQVZBSUxBQklMSVRZX1YwEAEaBoKyGQJWMBIbCg9BVkFJTEFCSUxJVFlfVjEQAhoGgrIZAlYxEhsKD0FWQUlMQUJJTElUWV9WMhADGgaCshkCVjISGwoPQVZBSUxBQklMSVRZX1YzEAQaBoKyGQJWMyqTAQoMU2VydmljZUNsYXNzEiMKGVNFUlZJQ0VfQ0xBU1NfVU5TUEVDSUZJRUQQABoEgrIZABIeChFTRVJWSUNFX0NMQVNTX1NaMRABGgeCshkDU1oxEh4KEVNFUlZJQ0VfQ0xBU1NfU1oyEAIaB4KyGQNTWjISHgoRU0VSVklDRV9DTEFTU19TWjMQAxoHgrIZA1NaMypQCglNVk1TdGF0dXMSIAoWTVZNX1NUQVRVU19VTlNQRUNJRklFRBAAGgSCshkAEiEKEU1WTV9TVEFUVVNfQUNUSVZFEAEaCoKyGQZhY3RpdmUqhQEKCERpc2tUeXBlEh8KFURJU0tfVFlQRV9VTlNQRUNJRklFRBAAGgSCshkAEhgKDERJU0tfVFlQRV9PUxABGgaCshkCb3MSIAoQRElTS19UWVBFX1NZU1RFTRACGgqCshkGc3lzdGVtEhwKDkRJU0tfVFlQRV9EQVRBEAMaCIKyGQRkYXRhMv0OCgpNVk1TZXJ2aWNlEmEKA0dldBIlLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlR2V0UmVxdWVzdBomLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmkKBkNyZWF0ZRIoLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBopLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESaQoGVXBkYXRlEiguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VVcGRhdGVSZXF1ZXN0GikuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VVcGRhdGVSZXNwb25zZSIKyvMYAgEC4PMYARJkCgRMaXN0EiYuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VMaXN0UmVxdWVzdBonLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlTGlzdFJlc3BvbnNlIgvK8xgDAQID4PMYAhJpCgZEZWxldGUSKC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZURlbGV0ZVJlcXVlc3QaKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZURlbGV0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmwKB0FkZERpc2sSKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZUFkZERpc2tSZXF1ZXN0GiouZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGREaXNrUmVzcG9uc2UiCsrzGAIBAuDzGAESdQoKVXBkYXRlRGlzaxIsLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVXBkYXRlRGlza1JlcXVlc3QaLS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVVwZGF0ZURpc2tSZXNwb25zZSIKyvMYAgEC4PMYARJ1CgpEZWxldGVEaXNrEiwuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VEZWxldGVEaXNrUmVxdWVzdBotLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlRGVsZXRlRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgBEpABChNBZGROZXR3b3JrSW50ZXJmYWNlEjUuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGROZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBo2LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEpMBChRNb3ZlTmV0d29ya0ludGVyZmFjZRI2LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlTW92ZU5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0GjcuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VNb3ZlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEpkBChZEZWxldGVOZXR3b3JrSW50ZXJmYWNlEjguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VEZWxldGVOZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBo5LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlRGVsZXRlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEoEBCg5WYWxpZGF0ZUNyZWF0ZRIwLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVmFsaWRhdGVDcmVhdGVSZXF1ZXN0GjEuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgCEoQBCg9WYWxpZGF0ZUFkZERpc2sSMS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1JlcXVlc3QaMi5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgCEo0BChJWYWxpZGF0ZVVwZGF0ZURpc2sSNC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1JlcXVlc3QaNS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgCEqgBChtWYWxpZGF0ZUFkZE5ldHdvcmtJbnRlcmZhY2USPS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlcXVlc3QaPi5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgCQq0BChNjb20uZml0cy5hcGkubXZtLnYxQghNdm1Qcm90b1ABWi1naXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS9tdm0vdjE7bXZtdjGiAgNGQU2qAg9GaXRzLkFwaS5Ndm0uVjHKAg9GaXRzXEFwaVxNdm1cVjHiAhtGaXRzXEFwaVxNdm1cVjFcR1BCTWV0YWRhdGHqAhJGaXRzOjpBcGk6Ok12bTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_mvm_v1_vlan, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); /** * Linux-specific MVM details. @@ -126,11 +126,11 @@ export const NetworkInterfaceSchema: GenMessage = /*@__PURE__* messageDesc(file_fits_api_mvm_v1_mvm, 2); /** - * A managed VM (MVM) instance as returned by the API. + * ManagedVM is a managed VM instance as returned by the API. * - * @generated from message fits.api.mvm.v1.MVMInstance + * @generated from message fits.api.mvm.v1.ManagedVM */ -export type MVMInstance = Message<"fits.api.mvm.v1.MVMInstance"> & { +export type ManagedVM = Message<"fits.api.mvm.v1.ManagedVM"> & { /** * UUID of this MVM. * @@ -211,13 +211,11 @@ export type MVMInstance = Message<"fits.api.mvm.v1.MVMInstance"> & { backup: boolean; /** - * Status of the ongoing operation. - * TODO: can we have an ENUM here? Active, Are deleted ones there? Are stopped ones accounted? - * Would have to be part of openapi spec, otherwise breaking changes couldn't be detected + * Status of the MVM. * - * @generated from field: string status = 12; + * @generated from field: fits.api.mvm.v1.MVMStatus status = 12; */ - status: string; + status: MVMStatus; /** * Additional information about the current status. @@ -243,7 +241,7 @@ export type MVMInstance = Message<"fits.api.mvm.v1.MVMInstance"> & { /** * OS-specific configuration. * - * @generated from oneof fits.api.mvm.v1.MVMInstance.details + * @generated from oneof fits.api.mvm.v1.ManagedVM.details */ details: { /** @@ -284,21 +282,13 @@ export type MVMInstance = Message<"fits.api.mvm.v1.MVMInstance"> & { * @generated from field: string order_number = 20; */ orderNumber: string; - - /** - * True if the order was placed by FITS, false if self-service. - * TODO: maybe remove this field entirely. - * - * @generated from field: bool contract = 21; - */ - contract: boolean; }; /** - * Describes the message fits.api.mvm.v1.MVMInstance. - * Use `create(MVMInstanceSchema)` to create a new message. + * Describes the message fits.api.mvm.v1.ManagedVM. + * Use `create(ManagedVMSchema)` to create a new message. */ -export const MVMInstanceSchema: GenMessage = /*@__PURE__*/ +export const ManagedVMSchema: GenMessage = /*@__PURE__*/ messageDesc(file_fits_api_mvm_v1_mvm, 3); /** @@ -338,9 +328,9 @@ export type MVMServiceGetResponse = Message<"fits.api.mvm.v1.MVMServiceGetRespon /** * The MVM. * - * @generated from field: fits.api.mvm.v1.MVMInstance mvm = 1; + * @generated from field: fits.api.mvm.v1.ManagedVM mvm = 1; */ - mvm?: MVMInstance | undefined; + mvm?: ManagedVM | undefined; }; /** @@ -410,7 +400,6 @@ export const MVMServiceCreateLinuxRequestSchema: GenMessage = /*@__PURE__*/ enumDesc(file_fits_api_mvm_v1_mvm, 1); +/** + * MVMStatus specifies the status of a MVM. + * + * @generated from enum fits.api.mvm.v1.MVMStatus + */ +export enum MVMStatus { + /** + * MVM_STATUS_UNSPECIFIED is not specified. + * + * @generated from enum value: MVM_STATUS_UNSPECIFIED = 0; + */ + MVM_STATUS_UNSPECIFIED = 0, + + /** + * MVM_STATUS_ACTIVE is an active MVM. + * + * @generated from enum value: MVM_STATUS_ACTIVE = 1; + */ + MVM_STATUS_ACTIVE = 1, +} + +/** + * Describes the enum fits.api.mvm.v1.MVMStatus. + */ +export const MVMStatusSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_fits_api_mvm_v1_mvm, 2); + /** * DiskType classifies a MVM disk by its lifecycle rules. * The upstream (nulink) API returns every disk of a MVM, including the @@ -1622,7 +1638,7 @@ export enum DiskType { * Describes the enum fits.api.mvm.v1.DiskType. */ export const DiskTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_fits_api_mvm_v1_mvm, 2); + enumDesc(file_fits_api_mvm_v1_mvm, 3); /** * MVMService provides managed VM (MVM) operations. diff --git a/proto/fits/api/mvm/v1/mvm.proto b/proto/fits/api/mvm/v1/mvm.proto index 846f69f..ccb2607 100644 --- a/proto/fits/api/mvm/v1/mvm.proto +++ b/proto/fits/api/mvm/v1/mvm.proto @@ -133,6 +133,14 @@ enum ServiceClass { SERVICE_CLASS_SZ3 = 3 [(fits.api.v1.enum_string_value) = "SZ3"]; } +// MVMStatus specifies the status of a MVM. +enum MVMStatus { + // MVM_STATUS_UNSPECIFIED is not specified. + MVM_STATUS_UNSPECIFIED = 0 [(fits.api.v1.enum_string_value) = ""]; + // MVM_STATUS_ACTIVE is an active MVM. + MVM_STATUS_ACTIVE = 1 [(fits.api.v1.enum_string_value) = "active"]; +} + // DiskType classifies a MVM disk by its lifecycle rules. // The upstream (nulink) API returns every disk of a MVM, including the // backend-provisioned OS disk, so that oversized OS disks stay billable. @@ -201,8 +209,8 @@ message NetworkInterface { string macaddress = 3; // TODO: add validation } -// A managed VM (MVM) instance as returned by the API. -message MVMInstance { +// ManagedVM is a managed VM instance as returned by the API. +message ManagedVM { // UUID of this MVM. string uuid = 1 [(buf.validate.field).string.uuid = true]; // Metadata for this MVM. @@ -227,10 +235,8 @@ message MVMInstance { // Whether backup is enabled. // TODO: the upstream (nulink) list/get models do not expose this; always false. bool backup = 11; - // Status of the ongoing operation. - // TODO: can we have an ENUM here? Active, Are deleted ones there? Are stopped ones accounted? - // Would have to be part of openapi spec, otherwise breaking changes couldn't be detected - string status = 12; + // Status of the MVM. + MVMStatus status = 12 [(buf.validate.field).enum.defined_only = true]; // Additional information about the current status. string status_info = 13; // Availability level. @@ -252,9 +258,6 @@ message MVMInstance { VLAN vlan = 19; // Internal reference number provided by the user, e.g. a ticket ID. string order_number = 20; - // True if the order was placed by FITS, false if self-service. - // TODO: maybe remove this field entirely. - bool contract = 21; } // Request to get a MVM by UUID. @@ -268,7 +271,7 @@ message MVMServiceGetRequest { // Response containing the requested MVM. message MVMServiceGetResponse { // The MVM. - MVMInstance mvm = 1; + ManagedVM mvm = 1; } // Windows-specific create request parts. message MVMServiceCreateWindowsRequest { @@ -289,7 +292,6 @@ message MVMServiceCreateLinuxRequest { } // Request to create a new MVM instance. -// TODO: contract, billable and billing_start_date. message MVMServiceCreateRequest { // UUID of the project this MVM belongs to. string project_uuid = 1 [(buf.validate.field).string.uuid = true]; @@ -445,7 +447,7 @@ message MVMServiceListRequest { // Response containing the list of MVMs. message MVMServiceListResponse { // The MVM instances. - repeated MVMInstance mvms = 1; + repeated ManagedVM mvms = 1; } // Request to cancel a MVM instance. diff --git a/python/fits/api/mvm/v1/mvm_pb2.py b/python/fits/api/mvm/v1/mvm_pb2.py index d9b07be..6d5fdba 100644 --- a/python/fits/api/mvm/v1/mvm_pb2.py +++ b/python/fits/api/mvm/v1/mvm_pb2.py @@ -28,7 +28,7 @@ from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/mvm/v1/mvm.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1a\x66its/api/mvm/v1/vlan.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x91\x01\n\x0cLinuxDetails\x12\x30\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskR\x05\x64isks\x12%\n\tldap_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12(\n\tldap_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08ldapFqdn\"\x9d\x01\n\x0eWindowsDetails\x12\x32\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskR\x05\x64isks\x12)\n\x0b\x64omain_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12,\n\x0b\x64omain_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\ndomainFqdn\"{\n\x10NetworkInterface\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n\tipaddress\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xe8\xb3\xae\xb1\x02\x01R\tipaddress\x12\x1e\n\nmacaddress\x18\x03 \x01(\tR\nmacaddress\"\xa4\x07\n\x0bMVMInstance\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04\x66qdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04\x66qdn\x12#\n\x06tenant\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n\x0cproject_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12!\n\x07os_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\t \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\n \x01(\rR\x03ram\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12\x16\n\x06status\x18\x0c \x01(\tR\x06status\x12\x1f\n\x0bstatus_info\x18\r \x01(\tR\nstatusInfo\x12K\n\x0c\x61vailability\x18\x0e \x01(\x0e\x32\x1d.fits.api.mvm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12K\n\x0cserviceclass\x18\x0f \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12J\n\x0fwindows_details\x18\x10 \x01(\x0b\x32\x1f.fits.api.mvm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12\x44\n\rlinux_details\x18\x11 \x01(\x0b\x32\x1d.fits.api.mvm.v1.LinuxDetailsH\x00R\x0clinuxDetails\x12\x41\n\ninterfaces\x18\x12 \x03(\x0b\x32!.fits.api.mvm.v1.NetworkInterfaceR\ninterfaces\x12)\n\x04vlan\x18\x13 \x01(\x0b\x32\x15.fits.api.mvm.v1.VLANR\x04vlan\x12!\n\x0corder_number\x18\x14 \x01(\tR\x0borderNumber\x12\x1a\n\x08\x63ontract\x18\x15 \x01(\x08R\x08\x63ontractB\x10\n\x07\x64\x65tails\x12\x05\xbaH\x02\x08\x01\"g\n\x14MVMServiceGetRequest\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12#\n\x06tenant\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x07\n\x05_uuid\"G\n\x15MVMServiceGetResponse\x12.\n\x03mvm\x18\x01 \x01(\x0b\x32\x1c.fits.api.mvm.v1.MVMInstanceR\x03mvm\"\x89\x01\n\x1eMVMServiceCreateWindowsRequest\x12)\n\x0b\x64omain_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12<\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\x81\x01\n\x1cMVMServiceCreateLinuxRequest\x12%\n\tldap_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12:\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\xe7\x05\n\x17MVMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n\x07os_uuid\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\x07 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x08 \x01(\rR\x03ram\x12!\n\x0corder_number\x18\t \x01(\tR\x0borderNumber\x12+\n\x06labels\x18\n \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12K\n\x0c\x61vailability\x18\x0c \x01(\x0e\x32\x1d.fits.api.mvm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12K\n\x0cserviceclass\x18\r \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12K\n\x07windows\x18\x0e \x01(\x0b\x32/.fits.api.mvm.v1.MVMServiceCreateWindowsRequestH\x00R\x07windows\x12\x45\n\x05linux\x18\x0f \x01(\x0b\x32-.fits.api.mvm.v1.MVMServiceCreateLinuxRequestH\x00R\x05linuxB\x10\n\x07mvmtype\x12\x05\xbaH\x02\x08\x01\x42\x07\n\x05_name\"\x9b\x02\n\tLinuxDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x02R\nmountPoint\x88\x01\x01\x12\x45\n\tdisk_type\x18\x06 \x01(\x0e\x32\x19.fits.api.mvm.v1.DiskTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x08\x64iskType\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_mount_pointB\x0c\n\n_disk_type\"\x9e\x02\n\x0bWindowsDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12%\n\x0b\x64riveletter\x18\x05 \x01(\tH\x02R\x0b\x64riveletter\x88\x01\x01\x12\x45\n\tdisk_type\x18\x06 \x01(\x0e\x32\x19.fits.api.mvm.v1.DiskTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x08\x64iskType\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_driveletterB\x0c\n\n_disk_type\"\x1a\n\x18MVMServiceCreateResponse\"\xb1\x03\n\x17MVMServiceUpdateRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12@\n\x0bupdate_meta\x18\x04 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12V\n\x11performance_class\x18\x05 \x01(\x0b\x32\'.fits.api.mvm.v1.PerformanceClassChangeH\x00R\x10performanceClass\x12J\n\rservice_class\x18\x06 \x01(\x0b\x32#.fits.api.mvm.v1.ServiceClassChangeH\x00R\x0cserviceClass\x12:\n\x07\x63ontact\x18\x07 \x01(\x0b\x32\x1e.fits.api.mvm.v1.ContactChangeH\x00R\x07\x63ontactB\x0f\n\x06\x61\x63tion\x12\x05\xbaH\x02\x08\x01\"P\n\x16PerformanceClassChange\x12\x1b\n\x03\x63pu\x18\x01 \x01(\rB\t\xbaH\x06*\x04\x18@(\x01R\x03\x63pu\x12\x19\n\x03ram\x18\x02 \x01(\rB\x07\xbaH\x04*\x02 \x00R\x03ram\"a\n\x12ServiceClassChange\x12K\n\x0cserviceclass\x18\x01 \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\"<\n\rContactChange\x12+\n\x0c\x63ontact_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\"\x1a\n\x18MVMServiceUpdateResponse\"L\n\x15MVMServiceListRequest\x12(\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01\x42\t\n\x07_tenant\"J\n\x16MVMServiceListResponse\x12\x30\n\x04mvms\x18\x01 \x03(\x0b\x32\x1c.fits.api.mvm.v1.MVMInstanceR\x04mvms\"~\n\x17MVMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x1c\n\x04uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\x1a\n\x18MVMServiceDeleteResponse\"k\n\x1fMVMServiceValidateCreateRequest\x12H\n\x06\x63reate\x18\x01 \x01(\x0b\x32(.fits.api.mvm.v1.MVMServiceCreateRequestB\x06\xbaH\x03\xc8\x01\x01R\x06\x63reate\"\"\n MVMServiceValidateCreateResponse\"p\n MVMServiceValidateAddDiskRequest\x12L\n\x08\x61\x64\x64_disk\x18\x01 \x01(\x0b\x32).fits.api.mvm.v1.MVMServiceAddDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\x07\x61\x64\x64\x44isk\"#\n!MVMServiceValidateAddDiskResponse\"|\n#MVMServiceValidateUpdateDiskRequest\x12U\n\x0bupdate_disk\x18\x01 \x01(\x0b\x32,.fits.api.mvm.v1.MVMServiceUpdateDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\nupdateDisk\"&\n$MVMServiceValidateUpdateDiskResponse\"\x1b\n\x19MVMServiceAddDiskResponse\"\x1e\n\x1cMVMServiceUpdateDiskResponse\"\x1e\n\x1cMVMServiceDeleteDiskResponse\"\xfc\x01\n\x18MVMServiceAddDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12\x32\n\x05linux\x18\x04 \x01(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskH\x00R\x05linux\x12\x38\n\x07windows\x18\x05 \x01(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskH\x00R\x07windowsB\r\n\x04\x64isk\x12\x05\xbaH\x02\x08\x01\"\x81\x02\n\x1bMVMServiceUpdateDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12$\n\x0b\x61uto_extend\x18\x05 \x01(\x08H\x00R\nautoExtend\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\x04H\x01R\x04size\x88\x01\x01\x42\x0e\n\x0c_auto_extendB\x07\n\x05_size\"\xa9\x01\n\x1bMVMServiceDeleteDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\'\n%MVMServiceAddNetworkInterfaceResponse\"(\n&MVMServiceMoveNetworkInterfaceResponse\"*\n(MVMServiceDeleteNetworkInterfaceResponse\"\x8b\x01\n$MVMServiceAddNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\xef\x01\n%MVMServiceMoveNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12\x30\n\x0ftarget_mvm_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtargetMvmUuid\"\xbf\x01\n\'MVMServiceDeleteNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\xa1\x01\n,MVMServiceValidateAddNetworkInterfaceRequest\x12q\n\x15\x61\x64\x64_network_interface\x18\x01 \x01(\x0b\x32\x35.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequestB\x06\xbaH\x03\xc8\x01\x01R\x13\x61\x64\x64NetworkInterface\"/\n-MVMServiceValidateAddNetworkInterfaceResponse*\xa6\x01\n\x0c\x41vailability\x12\"\n\x18\x41VAILABILITY_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1b\n\x0f\x41VAILABILITY_V0\x10\x01\x1a\x06\x82\xb2\x19\x02V0\x12\x1b\n\x0f\x41VAILABILITY_V1\x10\x02\x1a\x06\x82\xb2\x19\x02V1\x12\x1b\n\x0f\x41VAILABILITY_V2\x10\x03\x1a\x06\x82\xb2\x19\x02V2\x12\x1b\n\x0f\x41VAILABILITY_V3\x10\x04\x1a\x06\x82\xb2\x19\x02V3*\x93\x01\n\x0cServiceClass\x12#\n\x19SERVICE_CLASS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1e\n\x11SERVICE_CLASS_SZ1\x10\x01\x1a\x07\x82\xb2\x19\x03SZ1\x12\x1e\n\x11SERVICE_CLASS_SZ2\x10\x02\x1a\x07\x82\xb2\x19\x03SZ2\x12\x1e\n\x11SERVICE_CLASS_SZ3\x10\x03\x1a\x07\x82\xb2\x19\x03SZ3*\x85\x01\n\x08\x44iskType\x12\x1f\n\x15\x44ISK_TYPE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x18\n\x0c\x44ISK_TYPE_OS\x10\x01\x1a\x06\x82\xb2\x19\x02os\x12 \n\x10\x44ISK_TYPE_SYSTEM\x10\x02\x1a\n\x82\xb2\x19\x06system\x12\x1c\n\x0e\x44ISK_TYPE_DATA\x10\x03\x1a\x08\x82\xb2\x19\x04\x64\x61ta2\xfd\x0e\n\nMVMService\x12\x61\n\x03Get\x12%.fits.api.mvm.v1.MVMServiceGetRequest\x1a&.fits.api.mvm.v1.MVMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x43reate\x12(.fits.api.mvm.v1.MVMServiceCreateRequest\x1a).fits.api.mvm.v1.MVMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12i\n\x06Update\x12(.fits.api.mvm.v1.MVMServiceUpdateRequest\x1a).fits.api.mvm.v1.MVMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x64\n\x04List\x12&.fits.api.mvm.v1.MVMServiceListRequest\x1a\'.fits.api.mvm.v1.MVMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x44\x65lete\x12(.fits.api.mvm.v1.MVMServiceDeleteRequest\x1a).fits.api.mvm.v1.MVMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12l\n\x07\x41\x64\x64\x44isk\x12).fits.api.mvm.v1.MVMServiceAddDiskRequest\x1a*.fits.api.mvm.v1.MVMServiceAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\nUpdateDisk\x12,.fits.api.mvm.v1.MVMServiceUpdateDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\nDeleteDisk\x12,.fits.api.mvm.v1.MVMServiceDeleteDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceDeleteDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x90\x01\n\x13\x41\x64\x64NetworkInterface\x12\x35.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest\x1a\x36.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x93\x01\n\x14MoveNetworkInterface\x12\x36.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest\x1a\x37.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x99\x01\n\x16\x44\x65leteNetworkInterface\x12\x38.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest\x1a\x39.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x81\x01\n\x0eValidateCreate\x12\x30.fits.api.mvm.v1.MVMServiceValidateCreateRequest\x1a\x31.fits.api.mvm.v1.MVMServiceValidateCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x84\x01\n\x0fValidateAddDisk\x12\x31.fits.api.mvm.v1.MVMServiceValidateAddDiskRequest\x1a\x32.fits.api.mvm.v1.MVMServiceValidateAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x8d\x01\n\x12ValidateUpdateDisk\x12\x34.fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest\x1a\x35.fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\xa8\x01\n\x1bValidateAddNetworkInterface\x12=.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest\x1a>.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x42\xad\x01\n\x13\x63om.fits.api.mvm.v1B\x08MvmProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/mvm/v1/mvm.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1a\x66its/api/mvm/v1/vlan.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x91\x01\n\x0cLinuxDetails\x12\x30\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskR\x05\x64isks\x12%\n\tldap_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12(\n\tldap_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08ldapFqdn\"\x9d\x01\n\x0eWindowsDetails\x12\x32\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskR\x05\x64isks\x12)\n\x0b\x64omain_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12,\n\x0b\x64omain_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\ndomainFqdn\"{\n\x10NetworkInterface\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n\tipaddress\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xe8\xb3\xae\xb1\x02\x01R\tipaddress\x12\x1e\n\nmacaddress\x18\x03 \x01(\tR\nmacaddress\"\xac\x07\n\tManagedVM\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04\x66qdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04\x66qdn\x12#\n\x06tenant\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n\x0cproject_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12!\n\x07os_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\t \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\n \x01(\rR\x03ram\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12<\n\x06status\x18\x0c \x01(\x0e\x32\x1a.fits.api.mvm.v1.MVMStatusB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12\x1f\n\x0bstatus_info\x18\r \x01(\tR\nstatusInfo\x12K\n\x0c\x61vailability\x18\x0e \x01(\x0e\x32\x1d.fits.api.mvm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12K\n\x0cserviceclass\x18\x0f \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12J\n\x0fwindows_details\x18\x10 \x01(\x0b\x32\x1f.fits.api.mvm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12\x44\n\rlinux_details\x18\x11 \x01(\x0b\x32\x1d.fits.api.mvm.v1.LinuxDetailsH\x00R\x0clinuxDetails\x12\x41\n\ninterfaces\x18\x12 \x03(\x0b\x32!.fits.api.mvm.v1.NetworkInterfaceR\ninterfaces\x12)\n\x04vlan\x18\x13 \x01(\x0b\x32\x15.fits.api.mvm.v1.VLANR\x04vlan\x12!\n\x0corder_number\x18\x14 \x01(\tR\x0borderNumberB\x10\n\x07\x64\x65tails\x12\x05\xbaH\x02\x08\x01\"g\n\x14MVMServiceGetRequest\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12#\n\x06tenant\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x07\n\x05_uuid\"E\n\x15MVMServiceGetResponse\x12,\n\x03mvm\x18\x01 \x01(\x0b\x32\x1a.fits.api.mvm.v1.ManagedVMR\x03mvm\"\x89\x01\n\x1eMVMServiceCreateWindowsRequest\x12)\n\x0b\x64omain_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12<\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\x81\x01\n\x1cMVMServiceCreateLinuxRequest\x12%\n\tldap_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12:\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\xe7\x05\n\x17MVMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n\x07os_uuid\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\x07 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x08 \x01(\rR\x03ram\x12!\n\x0corder_number\x18\t \x01(\tR\x0borderNumber\x12+\n\x06labels\x18\n \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12K\n\x0c\x61vailability\x18\x0c \x01(\x0e\x32\x1d.fits.api.mvm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12K\n\x0cserviceclass\x18\r \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12K\n\x07windows\x18\x0e \x01(\x0b\x32/.fits.api.mvm.v1.MVMServiceCreateWindowsRequestH\x00R\x07windows\x12\x45\n\x05linux\x18\x0f \x01(\x0b\x32-.fits.api.mvm.v1.MVMServiceCreateLinuxRequestH\x00R\x05linuxB\x10\n\x07mvmtype\x12\x05\xbaH\x02\x08\x01\x42\x07\n\x05_name\"\x9b\x02\n\tLinuxDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x02R\nmountPoint\x88\x01\x01\x12\x45\n\tdisk_type\x18\x06 \x01(\x0e\x32\x19.fits.api.mvm.v1.DiskTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x08\x64iskType\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_mount_pointB\x0c\n\n_disk_type\"\x9e\x02\n\x0bWindowsDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12%\n\x0b\x64riveletter\x18\x05 \x01(\tH\x02R\x0b\x64riveletter\x88\x01\x01\x12\x45\n\tdisk_type\x18\x06 \x01(\x0e\x32\x19.fits.api.mvm.v1.DiskTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x08\x64iskType\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_driveletterB\x0c\n\n_disk_type\"\x1a\n\x18MVMServiceCreateResponse\"\xb1\x03\n\x17MVMServiceUpdateRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12@\n\x0bupdate_meta\x18\x04 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12V\n\x11performance_class\x18\x05 \x01(\x0b\x32\'.fits.api.mvm.v1.PerformanceClassChangeH\x00R\x10performanceClass\x12J\n\rservice_class\x18\x06 \x01(\x0b\x32#.fits.api.mvm.v1.ServiceClassChangeH\x00R\x0cserviceClass\x12:\n\x07\x63ontact\x18\x07 \x01(\x0b\x32\x1e.fits.api.mvm.v1.ContactChangeH\x00R\x07\x63ontactB\x0f\n\x06\x61\x63tion\x12\x05\xbaH\x02\x08\x01\"P\n\x16PerformanceClassChange\x12\x1b\n\x03\x63pu\x18\x01 \x01(\rB\t\xbaH\x06*\x04\x18@(\x01R\x03\x63pu\x12\x19\n\x03ram\x18\x02 \x01(\rB\x07\xbaH\x04*\x02 \x00R\x03ram\"a\n\x12ServiceClassChange\x12K\n\x0cserviceclass\x18\x01 \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\"<\n\rContactChange\x12+\n\x0c\x63ontact_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\"\x1a\n\x18MVMServiceUpdateResponse\"L\n\x15MVMServiceListRequest\x12(\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01\x42\t\n\x07_tenant\"H\n\x16MVMServiceListResponse\x12.\n\x04mvms\x18\x01 \x03(\x0b\x32\x1a.fits.api.mvm.v1.ManagedVMR\x04mvms\"~\n\x17MVMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x1c\n\x04uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\x1a\n\x18MVMServiceDeleteResponse\"k\n\x1fMVMServiceValidateCreateRequest\x12H\n\x06\x63reate\x18\x01 \x01(\x0b\x32(.fits.api.mvm.v1.MVMServiceCreateRequestB\x06\xbaH\x03\xc8\x01\x01R\x06\x63reate\"\"\n MVMServiceValidateCreateResponse\"p\n MVMServiceValidateAddDiskRequest\x12L\n\x08\x61\x64\x64_disk\x18\x01 \x01(\x0b\x32).fits.api.mvm.v1.MVMServiceAddDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\x07\x61\x64\x64\x44isk\"#\n!MVMServiceValidateAddDiskResponse\"|\n#MVMServiceValidateUpdateDiskRequest\x12U\n\x0bupdate_disk\x18\x01 \x01(\x0b\x32,.fits.api.mvm.v1.MVMServiceUpdateDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\nupdateDisk\"&\n$MVMServiceValidateUpdateDiskResponse\"\x1b\n\x19MVMServiceAddDiskResponse\"\x1e\n\x1cMVMServiceUpdateDiskResponse\"\x1e\n\x1cMVMServiceDeleteDiskResponse\"\xfc\x01\n\x18MVMServiceAddDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12\x32\n\x05linux\x18\x04 \x01(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskH\x00R\x05linux\x12\x38\n\x07windows\x18\x05 \x01(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskH\x00R\x07windowsB\r\n\x04\x64isk\x12\x05\xbaH\x02\x08\x01\"\x81\x02\n\x1bMVMServiceUpdateDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12$\n\x0b\x61uto_extend\x18\x05 \x01(\x08H\x00R\nautoExtend\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\x04H\x01R\x04size\x88\x01\x01\x42\x0e\n\x0c_auto_extendB\x07\n\x05_size\"\xa9\x01\n\x1bMVMServiceDeleteDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\'\n%MVMServiceAddNetworkInterfaceResponse\"(\n&MVMServiceMoveNetworkInterfaceResponse\"*\n(MVMServiceDeleteNetworkInterfaceResponse\"\x8b\x01\n$MVMServiceAddNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\xef\x01\n%MVMServiceMoveNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12\x30\n\x0ftarget_mvm_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtargetMvmUuid\"\xbf\x01\n\'MVMServiceDeleteNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\xa1\x01\n,MVMServiceValidateAddNetworkInterfaceRequest\x12q\n\x15\x61\x64\x64_network_interface\x18\x01 \x01(\x0b\x32\x35.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequestB\x06\xbaH\x03\xc8\x01\x01R\x13\x61\x64\x64NetworkInterface\"/\n-MVMServiceValidateAddNetworkInterfaceResponse*\xa6\x01\n\x0c\x41vailability\x12\"\n\x18\x41VAILABILITY_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1b\n\x0f\x41VAILABILITY_V0\x10\x01\x1a\x06\x82\xb2\x19\x02V0\x12\x1b\n\x0f\x41VAILABILITY_V1\x10\x02\x1a\x06\x82\xb2\x19\x02V1\x12\x1b\n\x0f\x41VAILABILITY_V2\x10\x03\x1a\x06\x82\xb2\x19\x02V2\x12\x1b\n\x0f\x41VAILABILITY_V3\x10\x04\x1a\x06\x82\xb2\x19\x02V3*\x93\x01\n\x0cServiceClass\x12#\n\x19SERVICE_CLASS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1e\n\x11SERVICE_CLASS_SZ1\x10\x01\x1a\x07\x82\xb2\x19\x03SZ1\x12\x1e\n\x11SERVICE_CLASS_SZ2\x10\x02\x1a\x07\x82\xb2\x19\x03SZ2\x12\x1e\n\x11SERVICE_CLASS_SZ3\x10\x03\x1a\x07\x82\xb2\x19\x03SZ3*P\n\tMVMStatus\x12 \n\x16MVM_STATUS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12!\n\x11MVM_STATUS_ACTIVE\x10\x01\x1a\n\x82\xb2\x19\x06\x61\x63tive*\x85\x01\n\x08\x44iskType\x12\x1f\n\x15\x44ISK_TYPE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x18\n\x0c\x44ISK_TYPE_OS\x10\x01\x1a\x06\x82\xb2\x19\x02os\x12 \n\x10\x44ISK_TYPE_SYSTEM\x10\x02\x1a\n\x82\xb2\x19\x06system\x12\x1c\n\x0e\x44ISK_TYPE_DATA\x10\x03\x1a\x08\x82\xb2\x19\x04\x64\x61ta2\xfd\x0e\n\nMVMService\x12\x61\n\x03Get\x12%.fits.api.mvm.v1.MVMServiceGetRequest\x1a&.fits.api.mvm.v1.MVMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x43reate\x12(.fits.api.mvm.v1.MVMServiceCreateRequest\x1a).fits.api.mvm.v1.MVMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12i\n\x06Update\x12(.fits.api.mvm.v1.MVMServiceUpdateRequest\x1a).fits.api.mvm.v1.MVMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x64\n\x04List\x12&.fits.api.mvm.v1.MVMServiceListRequest\x1a\'.fits.api.mvm.v1.MVMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x44\x65lete\x12(.fits.api.mvm.v1.MVMServiceDeleteRequest\x1a).fits.api.mvm.v1.MVMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12l\n\x07\x41\x64\x64\x44isk\x12).fits.api.mvm.v1.MVMServiceAddDiskRequest\x1a*.fits.api.mvm.v1.MVMServiceAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\nUpdateDisk\x12,.fits.api.mvm.v1.MVMServiceUpdateDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\nDeleteDisk\x12,.fits.api.mvm.v1.MVMServiceDeleteDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceDeleteDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x90\x01\n\x13\x41\x64\x64NetworkInterface\x12\x35.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest\x1a\x36.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x93\x01\n\x14MoveNetworkInterface\x12\x36.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest\x1a\x37.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x99\x01\n\x16\x44\x65leteNetworkInterface\x12\x38.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest\x1a\x39.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x81\x01\n\x0eValidateCreate\x12\x30.fits.api.mvm.v1.MVMServiceValidateCreateRequest\x1a\x31.fits.api.mvm.v1.MVMServiceValidateCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x84\x01\n\x0fValidateAddDisk\x12\x31.fits.api.mvm.v1.MVMServiceValidateAddDiskRequest\x1a\x32.fits.api.mvm.v1.MVMServiceValidateAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x8d\x01\n\x12ValidateUpdateDisk\x12\x34.fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest\x1a\x35.fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\xa8\x01\n\x1bValidateAddNetworkInterface\x12=.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest\x1a>.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x42\xad\x01\n\x13\x63om.fits.api.mvm.v1B\x08MvmProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -54,6 +54,10 @@ _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ2"]._serialized_options = b'\202\262\031\003SZ2' _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ3"]._loaded_options = None _globals['_SERVICECLASS'].values_by_name["SERVICE_CLASS_SZ3"]._serialized_options = b'\202\262\031\003SZ3' + _globals['_MVMSTATUS'].values_by_name["MVM_STATUS_UNSPECIFIED"]._loaded_options = None + _globals['_MVMSTATUS'].values_by_name["MVM_STATUS_UNSPECIFIED"]._serialized_options = b'\202\262\031\000' + _globals['_MVMSTATUS'].values_by_name["MVM_STATUS_ACTIVE"]._loaded_options = None + _globals['_MVMSTATUS'].values_by_name["MVM_STATUS_ACTIVE"]._serialized_options = b'\202\262\031\006active' _globals['_DISKTYPE'].values_by_name["DISK_TYPE_UNSPECIFIED"]._loaded_options = None _globals['_DISKTYPE'].values_by_name["DISK_TYPE_UNSPECIFIED"]._serialized_options = b'\202\262\031\000' _globals['_DISKTYPE'].values_by_name["DISK_TYPE_OS"]._loaded_options = None @@ -74,26 +78,28 @@ _globals['_NETWORKINTERFACE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_NETWORKINTERFACE'].fields_by_name['ipaddress']._loaded_options = None _globals['_NETWORKINTERFACE'].fields_by_name['ipaddress']._serialized_options = b'\272H\010r\006\350\263\256\261\002\001' - _globals['_MVMINSTANCE'].oneofs_by_name['details']._loaded_options = None - _globals['_MVMINSTANCE'].oneofs_by_name['details']._serialized_options = b'\272H\002\010\001' - _globals['_MVMINSTANCE'].fields_by_name['uuid']._loaded_options = None - _globals['_MVMINSTANCE'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_MVMINSTANCE'].fields_by_name['fqdn']._loaded_options = None - _globals['_MVMINSTANCE'].fields_by_name['fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_MVMINSTANCE'].fields_by_name['tenant']._loaded_options = None - _globals['_MVMINSTANCE'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' - _globals['_MVMINSTANCE'].fields_by_name['project_uuid']._loaded_options = None - _globals['_MVMINSTANCE'].fields_by_name['project_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_MVMINSTANCE'].fields_by_name['os_uuid']._loaded_options = None - _globals['_MVMINSTANCE'].fields_by_name['os_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_MVMINSTANCE'].fields_by_name['location_uuid']._loaded_options = None - _globals['_MVMINSTANCE'].fields_by_name['location_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_MVMINSTANCE'].fields_by_name['contact_uuid']._loaded_options = None - _globals['_MVMINSTANCE'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_MVMINSTANCE'].fields_by_name['availability']._loaded_options = None - _globals['_MVMINSTANCE'].fields_by_name['availability']._serialized_options = b'\272H\005\202\001\002\020\001' - _globals['_MVMINSTANCE'].fields_by_name['serviceclass']._loaded_options = None - _globals['_MVMINSTANCE'].fields_by_name['serviceclass']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_MANAGEDVM'].oneofs_by_name['details']._loaded_options = None + _globals['_MANAGEDVM'].oneofs_by_name['details']._serialized_options = b'\272H\002\010\001' + _globals['_MANAGEDVM'].fields_by_name['uuid']._loaded_options = None + _globals['_MANAGEDVM'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MANAGEDVM'].fields_by_name['fqdn']._loaded_options = None + _globals['_MANAGEDVM'].fields_by_name['fqdn']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_MANAGEDVM'].fields_by_name['tenant']._loaded_options = None + _globals['_MANAGEDVM'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' + _globals['_MANAGEDVM'].fields_by_name['project_uuid']._loaded_options = None + _globals['_MANAGEDVM'].fields_by_name['project_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MANAGEDVM'].fields_by_name['os_uuid']._loaded_options = None + _globals['_MANAGEDVM'].fields_by_name['os_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MANAGEDVM'].fields_by_name['location_uuid']._loaded_options = None + _globals['_MANAGEDVM'].fields_by_name['location_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MANAGEDVM'].fields_by_name['contact_uuid']._loaded_options = None + _globals['_MANAGEDVM'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MANAGEDVM'].fields_by_name['status']._loaded_options = None + _globals['_MANAGEDVM'].fields_by_name['status']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_MANAGEDVM'].fields_by_name['availability']._loaded_options = None + _globals['_MANAGEDVM'].fields_by_name['availability']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_MANAGEDVM'].fields_by_name['serviceclass']._loaded_options = None + _globals['_MANAGEDVM'].fields_by_name['serviceclass']._serialized_options = b'\272H\005\202\001\002\020\001' _globals['_MVMSERVICEGETREQUEST'].fields_by_name['uuid']._loaded_options = None _globals['_MVMSERVICEGETREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_MVMSERVICEGETREQUEST'].fields_by_name['tenant']._loaded_options = None @@ -228,94 +234,96 @@ _globals['_MVMSERVICE'].methods_by_name['ValidateUpdateDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' _globals['_MVMSERVICE'].methods_by_name['ValidateAddNetworkInterface']._loaded_options = None _globals['_MVMSERVICE'].methods_by_name['ValidateAddNetworkInterface']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' - _globals['_AVAILABILITY']._serialized_start=6510 - _globals['_AVAILABILITY']._serialized_end=6676 - _globals['_SERVICECLASS']._serialized_start=6679 - _globals['_SERVICECLASS']._serialized_end=6826 - _globals['_DISKTYPE']._serialized_start=6829 - _globals['_DISKTYPE']._serialized_end=6962 + _globals['_AVAILABILITY']._serialized_start=6514 + _globals['_AVAILABILITY']._serialized_end=6680 + _globals['_SERVICECLASS']._serialized_start=6683 + _globals['_SERVICECLASS']._serialized_end=6830 + _globals['_MVMSTATUS']._serialized_start=6832 + _globals['_MVMSTATUS']._serialized_end=6912 + _globals['_DISKTYPE']._serialized_start=6915 + _globals['_DISKTYPE']._serialized_end=7048 _globals['_LINUXDETAILS']._serialized_start=166 _globals['_LINUXDETAILS']._serialized_end=311 _globals['_WINDOWSDETAILS']._serialized_start=314 _globals['_WINDOWSDETAILS']._serialized_end=471 _globals['_NETWORKINTERFACE']._serialized_start=473 _globals['_NETWORKINTERFACE']._serialized_end=596 - _globals['_MVMINSTANCE']._serialized_start=599 - _globals['_MVMINSTANCE']._serialized_end=1531 - _globals['_MVMSERVICEGETREQUEST']._serialized_start=1533 - _globals['_MVMSERVICEGETREQUEST']._serialized_end=1636 - _globals['_MVMSERVICEGETRESPONSE']._serialized_start=1638 - _globals['_MVMSERVICEGETRESPONSE']._serialized_end=1709 - _globals['_MVMSERVICECREATEWINDOWSREQUEST']._serialized_start=1712 - _globals['_MVMSERVICECREATEWINDOWSREQUEST']._serialized_end=1849 - _globals['_MVMSERVICECREATELINUXREQUEST']._serialized_start=1852 - _globals['_MVMSERVICECREATELINUXREQUEST']._serialized_end=1981 - _globals['_MVMSERVICECREATEREQUEST']._serialized_start=1984 - _globals['_MVMSERVICECREATEREQUEST']._serialized_end=2727 - _globals['_LINUXDISK']._serialized_start=2730 - _globals['_LINUXDISK']._serialized_end=3013 - _globals['_WINDOWSDISK']._serialized_start=3016 - _globals['_WINDOWSDISK']._serialized_end=3302 - _globals['_MVMSERVICECREATERESPONSE']._serialized_start=3304 - _globals['_MVMSERVICECREATERESPONSE']._serialized_end=3330 - _globals['_MVMSERVICEUPDATEREQUEST']._serialized_start=3333 - _globals['_MVMSERVICEUPDATEREQUEST']._serialized_end=3766 - _globals['_PERFORMANCECLASSCHANGE']._serialized_start=3768 - _globals['_PERFORMANCECLASSCHANGE']._serialized_end=3848 - _globals['_SERVICECLASSCHANGE']._serialized_start=3850 - _globals['_SERVICECLASSCHANGE']._serialized_end=3947 - _globals['_CONTACTCHANGE']._serialized_start=3949 - _globals['_CONTACTCHANGE']._serialized_end=4009 - _globals['_MVMSERVICEUPDATERESPONSE']._serialized_start=4011 - _globals['_MVMSERVICEUPDATERESPONSE']._serialized_end=4037 - _globals['_MVMSERVICELISTREQUEST']._serialized_start=4039 - _globals['_MVMSERVICELISTREQUEST']._serialized_end=4115 - _globals['_MVMSERVICELISTRESPONSE']._serialized_start=4117 - _globals['_MVMSERVICELISTRESPONSE']._serialized_end=4191 - _globals['_MVMSERVICEDELETEREQUEST']._serialized_start=4193 - _globals['_MVMSERVICEDELETEREQUEST']._serialized_end=4319 - _globals['_MVMSERVICEDELETERESPONSE']._serialized_start=4321 - _globals['_MVMSERVICEDELETERESPONSE']._serialized_end=4347 - _globals['_MVMSERVICEVALIDATECREATEREQUEST']._serialized_start=4349 - _globals['_MVMSERVICEVALIDATECREATEREQUEST']._serialized_end=4456 - _globals['_MVMSERVICEVALIDATECREATERESPONSE']._serialized_start=4458 - _globals['_MVMSERVICEVALIDATECREATERESPONSE']._serialized_end=4492 - _globals['_MVMSERVICEVALIDATEADDDISKREQUEST']._serialized_start=4494 - _globals['_MVMSERVICEVALIDATEADDDISKREQUEST']._serialized_end=4606 - _globals['_MVMSERVICEVALIDATEADDDISKRESPONSE']._serialized_start=4608 - _globals['_MVMSERVICEVALIDATEADDDISKRESPONSE']._serialized_end=4643 - _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_start=4645 - _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_end=4769 - _globals['_MVMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_start=4771 - _globals['_MVMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_end=4809 - _globals['_MVMSERVICEADDDISKRESPONSE']._serialized_start=4811 - _globals['_MVMSERVICEADDDISKRESPONSE']._serialized_end=4838 - _globals['_MVMSERVICEUPDATEDISKRESPONSE']._serialized_start=4840 - _globals['_MVMSERVICEUPDATEDISKRESPONSE']._serialized_end=4870 - _globals['_MVMSERVICEDELETEDISKRESPONSE']._serialized_start=4872 - _globals['_MVMSERVICEDELETEDISKRESPONSE']._serialized_end=4902 - _globals['_MVMSERVICEADDDISKREQUEST']._serialized_start=4905 - _globals['_MVMSERVICEADDDISKREQUEST']._serialized_end=5157 - _globals['_MVMSERVICEUPDATEDISKREQUEST']._serialized_start=5160 - _globals['_MVMSERVICEUPDATEDISKREQUEST']._serialized_end=5417 - _globals['_MVMSERVICEDELETEDISKREQUEST']._serialized_start=5420 - _globals['_MVMSERVICEDELETEDISKREQUEST']._serialized_end=5589 - _globals['_MVMSERVICEADDNETWORKINTERFACERESPONSE']._serialized_start=5591 - _globals['_MVMSERVICEADDNETWORKINTERFACERESPONSE']._serialized_end=5630 - _globals['_MVMSERVICEMOVENETWORKINTERFACERESPONSE']._serialized_start=5632 - _globals['_MVMSERVICEMOVENETWORKINTERFACERESPONSE']._serialized_end=5672 - _globals['_MVMSERVICEDELETENETWORKINTERFACERESPONSE']._serialized_start=5674 - _globals['_MVMSERVICEDELETENETWORKINTERFACERESPONSE']._serialized_end=5716 - _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST']._serialized_start=5719 - _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST']._serialized_end=5858 - _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST']._serialized_start=5861 - _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST']._serialized_end=6100 - _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST']._serialized_start=6103 - _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST']._serialized_end=6294 - _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST']._serialized_start=6297 - _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST']._serialized_end=6458 - _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACERESPONSE']._serialized_start=6460 - _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACERESPONSE']._serialized_end=6507 - _globals['_MVMSERVICE']._serialized_start=6965 - _globals['_MVMSERVICE']._serialized_end=8882 + _globals['_MANAGEDVM']._serialized_start=599 + _globals['_MANAGEDVM']._serialized_end=1539 + _globals['_MVMSERVICEGETREQUEST']._serialized_start=1541 + _globals['_MVMSERVICEGETREQUEST']._serialized_end=1644 + _globals['_MVMSERVICEGETRESPONSE']._serialized_start=1646 + _globals['_MVMSERVICEGETRESPONSE']._serialized_end=1715 + _globals['_MVMSERVICECREATEWINDOWSREQUEST']._serialized_start=1718 + _globals['_MVMSERVICECREATEWINDOWSREQUEST']._serialized_end=1855 + _globals['_MVMSERVICECREATELINUXREQUEST']._serialized_start=1858 + _globals['_MVMSERVICECREATELINUXREQUEST']._serialized_end=1987 + _globals['_MVMSERVICECREATEREQUEST']._serialized_start=1990 + _globals['_MVMSERVICECREATEREQUEST']._serialized_end=2733 + _globals['_LINUXDISK']._serialized_start=2736 + _globals['_LINUXDISK']._serialized_end=3019 + _globals['_WINDOWSDISK']._serialized_start=3022 + _globals['_WINDOWSDISK']._serialized_end=3308 + _globals['_MVMSERVICECREATERESPONSE']._serialized_start=3310 + _globals['_MVMSERVICECREATERESPONSE']._serialized_end=3336 + _globals['_MVMSERVICEUPDATEREQUEST']._serialized_start=3339 + _globals['_MVMSERVICEUPDATEREQUEST']._serialized_end=3772 + _globals['_PERFORMANCECLASSCHANGE']._serialized_start=3774 + _globals['_PERFORMANCECLASSCHANGE']._serialized_end=3854 + _globals['_SERVICECLASSCHANGE']._serialized_start=3856 + _globals['_SERVICECLASSCHANGE']._serialized_end=3953 + _globals['_CONTACTCHANGE']._serialized_start=3955 + _globals['_CONTACTCHANGE']._serialized_end=4015 + _globals['_MVMSERVICEUPDATERESPONSE']._serialized_start=4017 + _globals['_MVMSERVICEUPDATERESPONSE']._serialized_end=4043 + _globals['_MVMSERVICELISTREQUEST']._serialized_start=4045 + _globals['_MVMSERVICELISTREQUEST']._serialized_end=4121 + _globals['_MVMSERVICELISTRESPONSE']._serialized_start=4123 + _globals['_MVMSERVICELISTRESPONSE']._serialized_end=4195 + _globals['_MVMSERVICEDELETEREQUEST']._serialized_start=4197 + _globals['_MVMSERVICEDELETEREQUEST']._serialized_end=4323 + _globals['_MVMSERVICEDELETERESPONSE']._serialized_start=4325 + _globals['_MVMSERVICEDELETERESPONSE']._serialized_end=4351 + _globals['_MVMSERVICEVALIDATECREATEREQUEST']._serialized_start=4353 + _globals['_MVMSERVICEVALIDATECREATEREQUEST']._serialized_end=4460 + _globals['_MVMSERVICEVALIDATECREATERESPONSE']._serialized_start=4462 + _globals['_MVMSERVICEVALIDATECREATERESPONSE']._serialized_end=4496 + _globals['_MVMSERVICEVALIDATEADDDISKREQUEST']._serialized_start=4498 + _globals['_MVMSERVICEVALIDATEADDDISKREQUEST']._serialized_end=4610 + _globals['_MVMSERVICEVALIDATEADDDISKRESPONSE']._serialized_start=4612 + _globals['_MVMSERVICEVALIDATEADDDISKRESPONSE']._serialized_end=4647 + _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_start=4649 + _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_end=4773 + _globals['_MVMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_start=4775 + _globals['_MVMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_end=4813 + _globals['_MVMSERVICEADDDISKRESPONSE']._serialized_start=4815 + _globals['_MVMSERVICEADDDISKRESPONSE']._serialized_end=4842 + _globals['_MVMSERVICEUPDATEDISKRESPONSE']._serialized_start=4844 + _globals['_MVMSERVICEUPDATEDISKRESPONSE']._serialized_end=4874 + _globals['_MVMSERVICEDELETEDISKRESPONSE']._serialized_start=4876 + _globals['_MVMSERVICEDELETEDISKRESPONSE']._serialized_end=4906 + _globals['_MVMSERVICEADDDISKREQUEST']._serialized_start=4909 + _globals['_MVMSERVICEADDDISKREQUEST']._serialized_end=5161 + _globals['_MVMSERVICEUPDATEDISKREQUEST']._serialized_start=5164 + _globals['_MVMSERVICEUPDATEDISKREQUEST']._serialized_end=5421 + _globals['_MVMSERVICEDELETEDISKREQUEST']._serialized_start=5424 + _globals['_MVMSERVICEDELETEDISKREQUEST']._serialized_end=5593 + _globals['_MVMSERVICEADDNETWORKINTERFACERESPONSE']._serialized_start=5595 + _globals['_MVMSERVICEADDNETWORKINTERFACERESPONSE']._serialized_end=5634 + _globals['_MVMSERVICEMOVENETWORKINTERFACERESPONSE']._serialized_start=5636 + _globals['_MVMSERVICEMOVENETWORKINTERFACERESPONSE']._serialized_end=5676 + _globals['_MVMSERVICEDELETENETWORKINTERFACERESPONSE']._serialized_start=5678 + _globals['_MVMSERVICEDELETENETWORKINTERFACERESPONSE']._serialized_end=5720 + _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST']._serialized_start=5723 + _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST']._serialized_end=5862 + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST']._serialized_start=5865 + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST']._serialized_end=6104 + _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST']._serialized_start=6107 + _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST']._serialized_end=6298 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST']._serialized_start=6301 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST']._serialized_end=6462 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACERESPONSE']._serialized_start=6464 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACERESPONSE']._serialized_end=6511 + _globals['_MVMSERVICE']._serialized_start=7051 + _globals['_MVMSERVICE']._serialized_end=8968 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/mvm/v1/mvm_pb2.pyi b/python/fits/api/mvm/v1/mvm_pb2.pyi index 9eaddcf..9ee1844 100644 --- a/python/fits/api/mvm/v1/mvm_pb2.pyi +++ b/python/fits/api/mvm/v1/mvm_pb2.pyi @@ -26,6 +26,11 @@ class ServiceClass(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): SERVICE_CLASS_SZ2: _ClassVar[ServiceClass] SERVICE_CLASS_SZ3: _ClassVar[ServiceClass] +class MVMStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + MVM_STATUS_UNSPECIFIED: _ClassVar[MVMStatus] + MVM_STATUS_ACTIVE: _ClassVar[MVMStatus] + class DiskType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () DISK_TYPE_UNSPECIFIED: _ClassVar[DiskType] @@ -41,6 +46,8 @@ SERVICE_CLASS_UNSPECIFIED: ServiceClass SERVICE_CLASS_SZ1: ServiceClass SERVICE_CLASS_SZ2: ServiceClass SERVICE_CLASS_SZ3: ServiceClass +MVM_STATUS_UNSPECIFIED: MVMStatus +MVM_STATUS_ACTIVE: MVMStatus DISK_TYPE_UNSPECIFIED: DiskType DISK_TYPE_OS: DiskType DISK_TYPE_SYSTEM: DiskType @@ -76,8 +83,8 @@ class NetworkInterface(_message.Message): macaddress: str def __init__(self, uuid: _Optional[str] = ..., ipaddress: _Optional[str] = ..., macaddress: _Optional[str] = ...) -> None: ... -class MVMInstance(_message.Message): - __slots__ = ("uuid", "meta", "fqdn", "tenant", "project_uuid", "os_uuid", "location_uuid", "contact_uuid", "cpu", "ram", "backup", "status", "status_info", "availability", "serviceclass", "windows_details", "linux_details", "interfaces", "vlan", "order_number", "contract") +class ManagedVM(_message.Message): + __slots__ = ("uuid", "meta", "fqdn", "tenant", "project_uuid", "os_uuid", "location_uuid", "contact_uuid", "cpu", "ram", "backup", "status", "status_info", "availability", "serviceclass", "windows_details", "linux_details", "interfaces", "vlan", "order_number") UUID_FIELD_NUMBER: _ClassVar[int] META_FIELD_NUMBER: _ClassVar[int] FQDN_FIELD_NUMBER: _ClassVar[int] @@ -98,7 +105,6 @@ class MVMInstance(_message.Message): INTERFACES_FIELD_NUMBER: _ClassVar[int] VLAN_FIELD_NUMBER: _ClassVar[int] ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] - CONTRACT_FIELD_NUMBER: _ClassVar[int] uuid: str meta: _common_pb2.Meta fqdn: str @@ -110,7 +116,7 @@ class MVMInstance(_message.Message): cpu: int ram: int backup: bool - status: str + status: MVMStatus status_info: str availability: Availability serviceclass: ServiceClass @@ -119,8 +125,7 @@ class MVMInstance(_message.Message): interfaces: _containers.RepeatedCompositeFieldContainer[NetworkInterface] vlan: _vlan_pb2.VLAN order_number: str - contract: bool - def __init__(self, uuid: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., fqdn: _Optional[str] = ..., tenant: _Optional[str] = ..., project_uuid: _Optional[str] = ..., os_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., backup: _Optional[bool] = ..., status: _Optional[str] = ..., status_info: _Optional[str] = ..., availability: _Optional[_Union[Availability, str]] = ..., serviceclass: _Optional[_Union[ServiceClass, str]] = ..., windows_details: _Optional[_Union[WindowsDetails, _Mapping]] = ..., linux_details: _Optional[_Union[LinuxDetails, _Mapping]] = ..., interfaces: _Optional[_Iterable[_Union[NetworkInterface, _Mapping]]] = ..., vlan: _Optional[_Union[_vlan_pb2.VLAN, _Mapping]] = ..., order_number: _Optional[str] = ..., contract: _Optional[bool] = ...) -> None: ... + def __init__(self, uuid: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., fqdn: _Optional[str] = ..., tenant: _Optional[str] = ..., project_uuid: _Optional[str] = ..., os_uuid: _Optional[str] = ..., location_uuid: _Optional[str] = ..., contact_uuid: _Optional[str] = ..., cpu: _Optional[int] = ..., ram: _Optional[int] = ..., backup: _Optional[bool] = ..., status: _Optional[_Union[MVMStatus, str]] = ..., status_info: _Optional[str] = ..., availability: _Optional[_Union[Availability, str]] = ..., serviceclass: _Optional[_Union[ServiceClass, str]] = ..., windows_details: _Optional[_Union[WindowsDetails, _Mapping]] = ..., linux_details: _Optional[_Union[LinuxDetails, _Mapping]] = ..., interfaces: _Optional[_Iterable[_Union[NetworkInterface, _Mapping]]] = ..., vlan: _Optional[_Union[_vlan_pb2.VLAN, _Mapping]] = ..., order_number: _Optional[str] = ...) -> None: ... class MVMServiceGetRequest(_message.Message): __slots__ = ("uuid", "tenant") @@ -133,8 +138,8 @@ class MVMServiceGetRequest(_message.Message): class MVMServiceGetResponse(_message.Message): __slots__ = ("mvm",) MVM_FIELD_NUMBER: _ClassVar[int] - mvm: MVMInstance - def __init__(self, mvm: _Optional[_Union[MVMInstance, _Mapping]] = ...) -> None: ... + mvm: ManagedVM + def __init__(self, mvm: _Optional[_Union[ManagedVM, _Mapping]] = ...) -> None: ... class MVMServiceCreateWindowsRequest(_message.Message): __slots__ = ("domain_uuid", "disks") @@ -273,8 +278,8 @@ class MVMServiceListRequest(_message.Message): class MVMServiceListResponse(_message.Message): __slots__ = ("mvms",) MVMS_FIELD_NUMBER: _ClassVar[int] - mvms: _containers.RepeatedCompositeFieldContainer[MVMInstance] - def __init__(self, mvms: _Optional[_Iterable[_Union[MVMInstance, _Mapping]]] = ...) -> None: ... + mvms: _containers.RepeatedCompositeFieldContainer[ManagedVM] + def __init__(self, mvms: _Optional[_Iterable[_Union[ManagedVM, _Mapping]]] = ...) -> None: ... class MVMServiceDeleteRequest(_message.Message): __slots__ = ("project", "uuid", "order_number") From 67858b6d4fb23b9cc05ee32884bab2d84a279d99 Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Thu, 24 Sep 2026 15:46:06 +0200 Subject: [PATCH 20/21] chore: remove MVM update for now --- doc/index.html | 180 ----- go/fits/api/mvm/v1/mvm.pb.go | 675 ++++-------------- .../api/mvm/v1/mvmv1connect/mvm.connect.go | 34 - go/permissions/servicepermissions.go | 5 - js/fits/api/mvm/v1/mvm_pb.ts | 232 +----- proto/fits/api/mvm/v1/mvm.proto | 67 +- python/fits/api/mvm/v1/mvm_connect.py | 65 -- python/fits/api/mvm/v1/mvm_pb2.py | 146 ++-- python/fits/api/mvm/v1/mvm_pb2.pyi | 42 -- 9 files changed, 235 insertions(+), 1211 deletions(-) diff --git a/doc/index.html b/doc/index.html index 37f99c9..9bd2182 100644 --- a/doc/index.html +++ b/doc/index.html @@ -386,10 +386,6 @@

    Table of Contents

    fits/api/mvm/v1/mvm.proto
    - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    contact_uuidstring

    UUID of the new contact.

    - - - - -

    LinuxDetails

    Linux-specific MVM details.

    @@ -2726,80 +2682,6 @@

    MVMServiceUpdateDiskRespon -

    MVMServiceUpdateRequest

    -

    Request to change a mutable property of an existing MVM.

    Exactly one action must be set; each maps onto its own upstream endpoint.

    TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per

    action); combined changes would need

    server-side fan-out without rollback.

    TODO: clarify async semantics — this is a queued "request to update", not an

    immediate update (e.g. disk changes are applied overnight). Consider

    renaming to reflect that.

    TODO: differentiate between fire-and-forget and queued actions in the API.

    TODO: is it possible to expose the pending-change queue (list/cancel) to the caller?

    TODO: clarify who enqueues the request and whether a pending change blocks

    further edits (e.g. after AddDisk, until the change executes).

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    uuidstring

    UUID of the MVM to update.

    projectstring

    Project the MVM belongs to.

    order_numberstring

    Order reference for this operation. -TODO: can this be optional?

    update_metafits.api.v1.UpdateMeta

    Timestamp and strategy for this update.

    performance_classPerformanceClassChange

    Change the CPU/RAM performance class.

    service_classServiceClassChange

    Change the service class.

    contactContactChange

    Change the contact person.

    - - - - - -

    MVMServiceUpdateResponse

    -

    Response for Update; an empty response means the change was accepted.

    - - - - -

    MVMServiceValidateAddDiskRequest

    Request to validate an AddDisk without ordering anything.

    @@ -3124,61 +3006,6 @@

    NetworkInterface

    -

    PerformanceClassChange

    -

    PerformanceClassChange is the payload for changing a MVM's CPU and RAM.

    - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    cpuuint32

    Number of vCPUs (1-64).

    ramuint32

    RAM size in GB.

    - - - - - -

    ServiceClassChange

    -

    ServiceClassChange is the payload for changing a MVM's service class.

    - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    serviceclassServiceClass

    Target service class.

    - - - - -

    WindowsDetails

    Windows-specific MVM details.

    @@ -3447,13 +3274,6 @@

    MVMService

    Creates a new MVM.

    - - Update -
    MVMServiceUpdateRequest - MVMServiceUpdateResponse -

    Updates a MVM.

    - - List MVMServiceListRequest diff --git a/go/fits/api/mvm/v1/mvm.pb.go b/go/fits/api/mvm/v1/mvm.pb.go index 2ea7bbe..4283129 100644 --- a/go/fits/api/mvm/v1/mvm.pb.go +++ b/go/fits/api/mvm/v1/mvm.pb.go @@ -1368,345 +1368,6 @@ func (*MVMServiceCreateResponse) Descriptor() ([]byte, []int) { return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{11} } -// Request to change a mutable property of an existing MVM. -// Exactly one action must be set; each maps onto its own upstream endpoint. -// TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per -// action); combined changes would need -// server-side fan-out without rollback. -// TODO: clarify async semantics — this is a queued "request to update", not an -// -// immediate update (e.g. disk changes are applied overnight). Consider -// renaming to reflect that. -// -// TODO: differentiate between fire-and-forget and queued actions in the API. -// TODO: is it possible to expose the pending-change queue (list/cancel) to the caller? -// TODO: clarify who enqueues the request and whether a pending change blocks -// -// further edits (e.g. after AddDisk, until the change executes). -type MVMServiceUpdateRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the MVM to update. - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - // Project the MVM belongs to. - Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` - // Order reference for this operation. - // TODO: can this be optional? - OrderNumber string `protobuf:"bytes,3,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` - // Timestamp and strategy for this update. - UpdateMeta *v1.UpdateMeta `protobuf:"bytes,4,opt,name=update_meta,json=updateMeta,proto3" json:"update_meta,omitempty"` - // The change to apply. - // - // Types that are valid to be assigned to Action: - // - // *MVMServiceUpdateRequest_PerformanceClass - // *MVMServiceUpdateRequest_ServiceClass - // *MVMServiceUpdateRequest_Contact - Action isMVMServiceUpdateRequest_Action `protobuf_oneof:"action"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *MVMServiceUpdateRequest) Reset() { - *x = MVMServiceUpdateRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *MVMServiceUpdateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MVMServiceUpdateRequest) ProtoMessage() {} - -func (x *MVMServiceUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[12] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MVMServiceUpdateRequest.ProtoReflect.Descriptor instead. -func (*MVMServiceUpdateRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{12} -} - -func (x *MVMServiceUpdateRequest) GetUuid() string { - if x != nil { - return x.Uuid - } - return "" -} - -func (x *MVMServiceUpdateRequest) GetProject() string { - if x != nil { - return x.Project - } - return "" -} - -func (x *MVMServiceUpdateRequest) GetOrderNumber() string { - if x != nil { - return x.OrderNumber - } - return "" -} - -func (x *MVMServiceUpdateRequest) GetUpdateMeta() *v1.UpdateMeta { - if x != nil { - return x.UpdateMeta - } - return nil -} - -func (x *MVMServiceUpdateRequest) GetAction() isMVMServiceUpdateRequest_Action { - if x != nil { - return x.Action - } - return nil -} - -func (x *MVMServiceUpdateRequest) GetPerformanceClass() *PerformanceClassChange { - if x != nil { - if x, ok := x.Action.(*MVMServiceUpdateRequest_PerformanceClass); ok { - return x.PerformanceClass - } - } - return nil -} - -func (x *MVMServiceUpdateRequest) GetServiceClass() *ServiceClassChange { - if x != nil { - if x, ok := x.Action.(*MVMServiceUpdateRequest_ServiceClass); ok { - return x.ServiceClass - } - } - return nil -} - -func (x *MVMServiceUpdateRequest) GetContact() *ContactChange { - if x != nil { - if x, ok := x.Action.(*MVMServiceUpdateRequest_Contact); ok { - return x.Contact - } - } - return nil -} - -type isMVMServiceUpdateRequest_Action interface { - isMVMServiceUpdateRequest_Action() -} - -type MVMServiceUpdateRequest_PerformanceClass struct { - // Change the CPU/RAM performance class. - PerformanceClass *PerformanceClassChange `protobuf:"bytes,5,opt,name=performance_class,json=performanceClass,proto3,oneof"` -} - -type MVMServiceUpdateRequest_ServiceClass struct { - // Change the service class. - ServiceClass *ServiceClassChange `protobuf:"bytes,6,opt,name=service_class,json=serviceClass,proto3,oneof"` -} - -type MVMServiceUpdateRequest_Contact struct { - // Change the contact person. - Contact *ContactChange `protobuf:"bytes,7,opt,name=contact,proto3,oneof"` -} - -func (*MVMServiceUpdateRequest_PerformanceClass) isMVMServiceUpdateRequest_Action() {} - -func (*MVMServiceUpdateRequest_ServiceClass) isMVMServiceUpdateRequest_Action() {} - -func (*MVMServiceUpdateRequest_Contact) isMVMServiceUpdateRequest_Action() {} - -// PerformanceClassChange is the payload for changing a MVM's CPU and RAM. -type PerformanceClassChange struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Number of vCPUs (1-64). - Cpu uint32 `protobuf:"varint,1,opt,name=cpu,proto3" json:"cpu,omitempty"` - // RAM size in GB. - Ram uint32 `protobuf:"varint,2,opt,name=ram,proto3" json:"ram,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *PerformanceClassChange) Reset() { - *x = PerformanceClassChange{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *PerformanceClassChange) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PerformanceClassChange) ProtoMessage() {} - -func (x *PerformanceClassChange) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[13] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PerformanceClassChange.ProtoReflect.Descriptor instead. -func (*PerformanceClassChange) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{13} -} - -func (x *PerformanceClassChange) GetCpu() uint32 { - if x != nil { - return x.Cpu - } - return 0 -} - -func (x *PerformanceClassChange) GetRam() uint32 { - if x != nil { - return x.Ram - } - return 0 -} - -// ServiceClassChange is the payload for changing a MVM's service class. -type ServiceClassChange struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Target service class. - Serviceclass ServiceClass `protobuf:"varint,1,opt,name=serviceclass,proto3,enum=fits.api.mvm.v1.ServiceClass" json:"serviceclass,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ServiceClassChange) Reset() { - *x = ServiceClassChange{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ServiceClassChange) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceClassChange) ProtoMessage() {} - -func (x *ServiceClassChange) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[14] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServiceClassChange.ProtoReflect.Descriptor instead. -func (*ServiceClassChange) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{14} -} - -func (x *ServiceClassChange) GetServiceclass() ServiceClass { - if x != nil { - return x.Serviceclass - } - return ServiceClass_SERVICE_CLASS_UNSPECIFIED -} - -// ContactChange is the payload for changing a MVM's contact person. -type ContactChange struct { - state protoimpl.MessageState `protogen:"open.v1"` - // UUID of the new contact. - ContactUuid string `protobuf:"bytes,1,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ContactChange) Reset() { - *x = ContactChange{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ContactChange) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ContactChange) ProtoMessage() {} - -func (x *ContactChange) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[15] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ContactChange.ProtoReflect.Descriptor instead. -func (*ContactChange) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{15} -} - -func (x *ContactChange) GetContactUuid() string { - if x != nil { - return x.ContactUuid - } - return "" -} - -// Response for Update; an empty response means the change was accepted. -type MVMServiceUpdateResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *MVMServiceUpdateResponse) Reset() { - *x = MVMServiceUpdateResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *MVMServiceUpdateResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MVMServiceUpdateResponse) ProtoMessage() {} - -func (x *MVMServiceUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[16] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MVMServiceUpdateResponse.ProtoReflect.Descriptor instead. -func (*MVMServiceUpdateResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{16} -} - // Request to list MVMs. type MVMServiceListRequest struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -1718,7 +1379,7 @@ type MVMServiceListRequest struct { func (x *MVMServiceListRequest) Reset() { *x = MVMServiceListRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[17] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1730,7 +1391,7 @@ func (x *MVMServiceListRequest) String() string { func (*MVMServiceListRequest) ProtoMessage() {} func (x *MVMServiceListRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[17] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1743,7 +1404,7 @@ func (x *MVMServiceListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceListRequest.ProtoReflect.Descriptor instead. func (*MVMServiceListRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{17} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{12} } func (x *MVMServiceListRequest) GetTenant() string { @@ -1764,7 +1425,7 @@ type MVMServiceListResponse struct { func (x *MVMServiceListResponse) Reset() { *x = MVMServiceListResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[18] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1776,7 +1437,7 @@ func (x *MVMServiceListResponse) String() string { func (*MVMServiceListResponse) ProtoMessage() {} func (x *MVMServiceListResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[18] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1789,7 +1450,7 @@ func (x *MVMServiceListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceListResponse.ProtoReflect.Descriptor instead. func (*MVMServiceListResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{18} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{13} } func (x *MVMServiceListResponse) GetMvms() []*ManagedVM { @@ -1815,7 +1476,7 @@ type MVMServiceDeleteRequest struct { func (x *MVMServiceDeleteRequest) Reset() { *x = MVMServiceDeleteRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[19] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1827,7 +1488,7 @@ func (x *MVMServiceDeleteRequest) String() string { func (*MVMServiceDeleteRequest) ProtoMessage() {} func (x *MVMServiceDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[19] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1840,7 +1501,7 @@ func (x *MVMServiceDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceDeleteRequest.ProtoReflect.Descriptor instead. func (*MVMServiceDeleteRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{19} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{14} } func (x *MVMServiceDeleteRequest) GetProject() string { @@ -1873,7 +1534,7 @@ type MVMServiceDeleteResponse struct { func (x *MVMServiceDeleteResponse) Reset() { *x = MVMServiceDeleteResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[20] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1885,7 +1546,7 @@ func (x *MVMServiceDeleteResponse) String() string { func (*MVMServiceDeleteResponse) ProtoMessage() {} func (x *MVMServiceDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[20] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1898,7 +1559,7 @@ func (x *MVMServiceDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceDeleteResponse.ProtoReflect.Descriptor instead. func (*MVMServiceDeleteResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{20} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{15} } // Request to validate a MVM create without creating anything. @@ -1912,7 +1573,7 @@ type MVMServiceValidateCreateRequest struct { func (x *MVMServiceValidateCreateRequest) Reset() { *x = MVMServiceValidateCreateRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[21] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1924,7 +1585,7 @@ func (x *MVMServiceValidateCreateRequest) String() string { func (*MVMServiceValidateCreateRequest) ProtoMessage() {} func (x *MVMServiceValidateCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[21] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1937,7 +1598,7 @@ func (x *MVMServiceValidateCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceValidateCreateRequest.ProtoReflect.Descriptor instead. func (*MVMServiceValidateCreateRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{21} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{16} } func (x *MVMServiceValidateCreateRequest) GetCreate() *MVMServiceCreateRequest { @@ -1956,7 +1617,7 @@ type MVMServiceValidateCreateResponse struct { func (x *MVMServiceValidateCreateResponse) Reset() { *x = MVMServiceValidateCreateResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[22] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1968,7 +1629,7 @@ func (x *MVMServiceValidateCreateResponse) String() string { func (*MVMServiceValidateCreateResponse) ProtoMessage() {} func (x *MVMServiceValidateCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[22] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1981,7 +1642,7 @@ func (x *MVMServiceValidateCreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceValidateCreateResponse.ProtoReflect.Descriptor instead. func (*MVMServiceValidateCreateResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{22} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{17} } // Request to validate an AddDisk without ordering anything. @@ -1995,7 +1656,7 @@ type MVMServiceValidateAddDiskRequest struct { func (x *MVMServiceValidateAddDiskRequest) Reset() { *x = MVMServiceValidateAddDiskRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[23] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2007,7 +1668,7 @@ func (x *MVMServiceValidateAddDiskRequest) String() string { func (*MVMServiceValidateAddDiskRequest) ProtoMessage() {} func (x *MVMServiceValidateAddDiskRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[23] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2020,7 +1681,7 @@ func (x *MVMServiceValidateAddDiskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceValidateAddDiskRequest.ProtoReflect.Descriptor instead. func (*MVMServiceValidateAddDiskRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{23} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{18} } func (x *MVMServiceValidateAddDiskRequest) GetAddDisk() *MVMServiceAddDiskRequest { @@ -2039,7 +1700,7 @@ type MVMServiceValidateAddDiskResponse struct { func (x *MVMServiceValidateAddDiskResponse) Reset() { *x = MVMServiceValidateAddDiskResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[24] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2051,7 +1712,7 @@ func (x *MVMServiceValidateAddDiskResponse) String() string { func (*MVMServiceValidateAddDiskResponse) ProtoMessage() {} func (x *MVMServiceValidateAddDiskResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[24] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2064,7 +1725,7 @@ func (x *MVMServiceValidateAddDiskResponse) ProtoReflect() protoreflect.Message // Deprecated: Use MVMServiceValidateAddDiskResponse.ProtoReflect.Descriptor instead. func (*MVMServiceValidateAddDiskResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{24} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{19} } // Request to validate an UpdateDisk without changing anything. @@ -2078,7 +1739,7 @@ type MVMServiceValidateUpdateDiskRequest struct { func (x *MVMServiceValidateUpdateDiskRequest) Reset() { *x = MVMServiceValidateUpdateDiskRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[25] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2090,7 +1751,7 @@ func (x *MVMServiceValidateUpdateDiskRequest) String() string { func (*MVMServiceValidateUpdateDiskRequest) ProtoMessage() {} func (x *MVMServiceValidateUpdateDiskRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[25] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2103,7 +1764,7 @@ func (x *MVMServiceValidateUpdateDiskRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use MVMServiceValidateUpdateDiskRequest.ProtoReflect.Descriptor instead. func (*MVMServiceValidateUpdateDiskRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{25} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{20} } func (x *MVMServiceValidateUpdateDiskRequest) GetUpdateDisk() *MVMServiceUpdateDiskRequest { @@ -2122,7 +1783,7 @@ type MVMServiceValidateUpdateDiskResponse struct { func (x *MVMServiceValidateUpdateDiskResponse) Reset() { *x = MVMServiceValidateUpdateDiskResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[26] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2134,7 +1795,7 @@ func (x *MVMServiceValidateUpdateDiskResponse) String() string { func (*MVMServiceValidateUpdateDiskResponse) ProtoMessage() {} func (x *MVMServiceValidateUpdateDiskResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[26] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2147,7 +1808,7 @@ func (x *MVMServiceValidateUpdateDiskResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use MVMServiceValidateUpdateDiskResponse.ProtoReflect.Descriptor instead. func (*MVMServiceValidateUpdateDiskResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{26} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{21} } // Response for AddDisk. @@ -2159,7 +1820,7 @@ type MVMServiceAddDiskResponse struct { func (x *MVMServiceAddDiskResponse) Reset() { *x = MVMServiceAddDiskResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[27] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2171,7 +1832,7 @@ func (x *MVMServiceAddDiskResponse) String() string { func (*MVMServiceAddDiskResponse) ProtoMessage() {} func (x *MVMServiceAddDiskResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[27] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2184,7 +1845,7 @@ func (x *MVMServiceAddDiskResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceAddDiskResponse.ProtoReflect.Descriptor instead. func (*MVMServiceAddDiskResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{27} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{22} } // Response for UpdateDisk. @@ -2196,7 +1857,7 @@ type MVMServiceUpdateDiskResponse struct { func (x *MVMServiceUpdateDiskResponse) Reset() { *x = MVMServiceUpdateDiskResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[28] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2208,7 +1869,7 @@ func (x *MVMServiceUpdateDiskResponse) String() string { func (*MVMServiceUpdateDiskResponse) ProtoMessage() {} func (x *MVMServiceUpdateDiskResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[28] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2221,7 +1882,7 @@ func (x *MVMServiceUpdateDiskResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceUpdateDiskResponse.ProtoReflect.Descriptor instead. func (*MVMServiceUpdateDiskResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{28} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{23} } // Response for DeleteDisk. @@ -2233,7 +1894,7 @@ type MVMServiceDeleteDiskResponse struct { func (x *MVMServiceDeleteDiskResponse) Reset() { *x = MVMServiceDeleteDiskResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[29] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2245,7 +1906,7 @@ func (x *MVMServiceDeleteDiskResponse) String() string { func (*MVMServiceDeleteDiskResponse) ProtoMessage() {} func (x *MVMServiceDeleteDiskResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[29] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2258,7 +1919,7 @@ func (x *MVMServiceDeleteDiskResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceDeleteDiskResponse.ProtoReflect.Descriptor instead. func (*MVMServiceDeleteDiskResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{29} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{24} } // Request to order an additional data disk for a MVM. @@ -2284,7 +1945,7 @@ type MVMServiceAddDiskRequest struct { func (x *MVMServiceAddDiskRequest) Reset() { *x = MVMServiceAddDiskRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[30] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2296,7 +1957,7 @@ func (x *MVMServiceAddDiskRequest) String() string { func (*MVMServiceAddDiskRequest) ProtoMessage() {} func (x *MVMServiceAddDiskRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[30] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2309,7 +1970,7 @@ func (x *MVMServiceAddDiskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceAddDiskRequest.ProtoReflect.Descriptor instead. func (*MVMServiceAddDiskRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{30} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{25} } func (x *MVMServiceAddDiskRequest) GetUuid() string { @@ -2399,7 +2060,7 @@ type MVMServiceUpdateDiskRequest struct { func (x *MVMServiceUpdateDiskRequest) Reset() { *x = MVMServiceUpdateDiskRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[31] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2411,7 +2072,7 @@ func (x *MVMServiceUpdateDiskRequest) String() string { func (*MVMServiceUpdateDiskRequest) ProtoMessage() {} func (x *MVMServiceUpdateDiskRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[31] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2424,7 +2085,7 @@ func (x *MVMServiceUpdateDiskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceUpdateDiskRequest.ProtoReflect.Descriptor instead. func (*MVMServiceUpdateDiskRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{31} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{26} } func (x *MVMServiceUpdateDiskRequest) GetUuid() string { @@ -2488,7 +2149,7 @@ type MVMServiceDeleteDiskRequest struct { func (x *MVMServiceDeleteDiskRequest) Reset() { *x = MVMServiceDeleteDiskRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[32] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2500,7 +2161,7 @@ func (x *MVMServiceDeleteDiskRequest) String() string { func (*MVMServiceDeleteDiskRequest) ProtoMessage() {} func (x *MVMServiceDeleteDiskRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[32] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2513,7 +2174,7 @@ func (x *MVMServiceDeleteDiskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceDeleteDiskRequest.ProtoReflect.Descriptor instead. func (*MVMServiceDeleteDiskRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{32} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{27} } func (x *MVMServiceDeleteDiskRequest) GetUuid() string { @@ -2553,7 +2214,7 @@ type MVMServiceAddNetworkInterfaceResponse struct { func (x *MVMServiceAddNetworkInterfaceResponse) Reset() { *x = MVMServiceAddNetworkInterfaceResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[33] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2565,7 +2226,7 @@ func (x *MVMServiceAddNetworkInterfaceResponse) String() string { func (*MVMServiceAddNetworkInterfaceResponse) ProtoMessage() {} func (x *MVMServiceAddNetworkInterfaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[33] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2578,7 +2239,7 @@ func (x *MVMServiceAddNetworkInterfaceResponse) ProtoReflect() protoreflect.Mess // Deprecated: Use MVMServiceAddNetworkInterfaceResponse.ProtoReflect.Descriptor instead. func (*MVMServiceAddNetworkInterfaceResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{33} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{28} } // Response for MoveNetworkInterface. @@ -2590,7 +2251,7 @@ type MVMServiceMoveNetworkInterfaceResponse struct { func (x *MVMServiceMoveNetworkInterfaceResponse) Reset() { *x = MVMServiceMoveNetworkInterfaceResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[34] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2602,7 +2263,7 @@ func (x *MVMServiceMoveNetworkInterfaceResponse) String() string { func (*MVMServiceMoveNetworkInterfaceResponse) ProtoMessage() {} func (x *MVMServiceMoveNetworkInterfaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[34] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2615,7 +2276,7 @@ func (x *MVMServiceMoveNetworkInterfaceResponse) ProtoReflect() protoreflect.Mes // Deprecated: Use MVMServiceMoveNetworkInterfaceResponse.ProtoReflect.Descriptor instead. func (*MVMServiceMoveNetworkInterfaceResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{34} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{29} } // Response for DeleteNetworkInterface. @@ -2627,7 +2288,7 @@ type MVMServiceDeleteNetworkInterfaceResponse struct { func (x *MVMServiceDeleteNetworkInterfaceResponse) Reset() { *x = MVMServiceDeleteNetworkInterfaceResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[35] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2639,7 +2300,7 @@ func (x *MVMServiceDeleteNetworkInterfaceResponse) String() string { func (*MVMServiceDeleteNetworkInterfaceResponse) ProtoMessage() {} func (x *MVMServiceDeleteNetworkInterfaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[35] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2652,7 +2313,7 @@ func (x *MVMServiceDeleteNetworkInterfaceResponse) ProtoReflect() protoreflect.M // Deprecated: Use MVMServiceDeleteNetworkInterfaceResponse.ProtoReflect.Descriptor instead. func (*MVMServiceDeleteNetworkInterfaceResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{35} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{30} } // Request to order an additional network interface for a MVM. @@ -2673,7 +2334,7 @@ type MVMServiceAddNetworkInterfaceRequest struct { func (x *MVMServiceAddNetworkInterfaceRequest) Reset() { *x = MVMServiceAddNetworkInterfaceRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[36] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2685,7 +2346,7 @@ func (x *MVMServiceAddNetworkInterfaceRequest) String() string { func (*MVMServiceAddNetworkInterfaceRequest) ProtoMessage() {} func (x *MVMServiceAddNetworkInterfaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[36] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2698,7 +2359,7 @@ func (x *MVMServiceAddNetworkInterfaceRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use MVMServiceAddNetworkInterfaceRequest.ProtoReflect.Descriptor instead. func (*MVMServiceAddNetworkInterfaceRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{36} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{31} } func (x *MVMServiceAddNetworkInterfaceRequest) GetUuid() string { @@ -2742,7 +2403,7 @@ type MVMServiceMoveNetworkInterfaceRequest struct { func (x *MVMServiceMoveNetworkInterfaceRequest) Reset() { *x = MVMServiceMoveNetworkInterfaceRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[37] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2754,7 +2415,7 @@ func (x *MVMServiceMoveNetworkInterfaceRequest) String() string { func (*MVMServiceMoveNetworkInterfaceRequest) ProtoMessage() {} func (x *MVMServiceMoveNetworkInterfaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[37] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2767,7 +2428,7 @@ func (x *MVMServiceMoveNetworkInterfaceRequest) ProtoReflect() protoreflect.Mess // Deprecated: Use MVMServiceMoveNetworkInterfaceRequest.ProtoReflect.Descriptor instead. func (*MVMServiceMoveNetworkInterfaceRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{37} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{32} } func (x *MVMServiceMoveNetworkInterfaceRequest) GetUuid() string { @@ -2823,7 +2484,7 @@ type MVMServiceDeleteNetworkInterfaceRequest struct { func (x *MVMServiceDeleteNetworkInterfaceRequest) Reset() { *x = MVMServiceDeleteNetworkInterfaceRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[38] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2835,7 +2496,7 @@ func (x *MVMServiceDeleteNetworkInterfaceRequest) String() string { func (*MVMServiceDeleteNetworkInterfaceRequest) ProtoMessage() {} func (x *MVMServiceDeleteNetworkInterfaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[38] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2848,7 +2509,7 @@ func (x *MVMServiceDeleteNetworkInterfaceRequest) ProtoReflect() protoreflect.Me // Deprecated: Use MVMServiceDeleteNetworkInterfaceRequest.ProtoReflect.Descriptor instead. func (*MVMServiceDeleteNetworkInterfaceRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{38} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{33} } func (x *MVMServiceDeleteNetworkInterfaceRequest) GetUuid() string { @@ -2890,7 +2551,7 @@ type MVMServiceValidateAddNetworkInterfaceRequest struct { func (x *MVMServiceValidateAddNetworkInterfaceRequest) Reset() { *x = MVMServiceValidateAddNetworkInterfaceRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[39] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2902,7 +2563,7 @@ func (x *MVMServiceValidateAddNetworkInterfaceRequest) String() string { func (*MVMServiceValidateAddNetworkInterfaceRequest) ProtoMessage() {} func (x *MVMServiceValidateAddNetworkInterfaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[39] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2915,7 +2576,7 @@ func (x *MVMServiceValidateAddNetworkInterfaceRequest) ProtoReflect() protorefle // Deprecated: Use MVMServiceValidateAddNetworkInterfaceRequest.ProtoReflect.Descriptor instead. func (*MVMServiceValidateAddNetworkInterfaceRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{39} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{34} } func (x *MVMServiceValidateAddNetworkInterfaceRequest) GetAddNetworkInterface() *MVMServiceAddNetworkInterfaceRequest { @@ -2934,7 +2595,7 @@ type MVMServiceValidateAddNetworkInterfaceResponse struct { func (x *MVMServiceValidateAddNetworkInterfaceResponse) Reset() { *x = MVMServiceValidateAddNetworkInterfaceResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[40] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2946,7 +2607,7 @@ func (x *MVMServiceValidateAddNetworkInterfaceResponse) String() string { func (*MVMServiceValidateAddNetworkInterfaceResponse) ProtoMessage() {} func (x *MVMServiceValidateAddNetworkInterfaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[40] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2959,7 +2620,7 @@ func (x *MVMServiceValidateAddNetworkInterfaceResponse) ProtoReflect() protorefl // Deprecated: Use MVMServiceValidateAddNetworkInterfaceResponse.ProtoReflect.Descriptor instead. func (*MVMServiceValidateAddNetworkInterfaceResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{40} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{35} } var File_fits_api_mvm_v1_mvm_proto protoreflect.FileDescriptor @@ -3068,25 +2729,7 @@ const file_fits_api_mvm_v1_mvm_proto_rawDesc = "" + "\f_driveletterB\f\n" + "\n" + "_disk_type\"\x1a\n" + - "\x18MVMServiceCreateResponse\"\xb1\x03\n" + - "\x17MVMServiceUpdateRequest\x12\x1c\n" + - "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + - "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + - "\forder_number\x18\x03 \x01(\tR\vorderNumber\x12@\n" + - "\vupdate_meta\x18\x04 \x01(\v2\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\n" + - "updateMeta\x12V\n" + - "\x11performance_class\x18\x05 \x01(\v2'.fits.api.mvm.v1.PerformanceClassChangeH\x00R\x10performanceClass\x12J\n" + - "\rservice_class\x18\x06 \x01(\v2#.fits.api.mvm.v1.ServiceClassChangeH\x00R\fserviceClass\x12:\n" + - "\acontact\x18\a \x01(\v2\x1e.fits.api.mvm.v1.ContactChangeH\x00R\acontactB\x0f\n" + - "\x06action\x12\x05\xbaH\x02\b\x01\"P\n" + - "\x16PerformanceClassChange\x12\x1b\n" + - "\x03cpu\x18\x01 \x01(\rB\t\xbaH\x06*\x04\x18@(\x01R\x03cpu\x12\x19\n" + - "\x03ram\x18\x02 \x01(\rB\a\xbaH\x04*\x02 \x00R\x03ram\"a\n" + - "\x12ServiceClassChange\x12K\n" + - "\fserviceclass\x18\x01 \x01(\x0e2\x1d.fits.api.mvm.v1.ServiceClassB\b\xbaH\x05\x82\x01\x02\x10\x01R\fserviceclass\"<\n" + - "\rContactChange\x12+\n" + - "\fcontact_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\"\x1a\n" + - "\x18MVMServiceUpdateResponse\"L\n" + + "\x18MVMServiceCreateResponse\"L\n" + "\x15MVMServiceListRequest\x12(\n" + "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01B\t\n" + "\a_tenant\"H\n" + @@ -3173,13 +2816,11 @@ const file_fits_api_mvm_v1_mvm_proto_rawDesc = "" + "\fDISK_TYPE_OS\x10\x01\x1a\x06\x82\xb2\x19\x02os\x12 \n" + "\x10DISK_TYPE_SYSTEM\x10\x02\x1a\n" + "\x82\xb2\x19\x06system\x12\x1c\n" + - "\x0eDISK_TYPE_DATA\x10\x03\x1a\b\x82\xb2\x19\x04data2\xfd\x0e\n" + + "\x0eDISK_TYPE_DATA\x10\x03\x1a\b\x82\xb2\x19\x04data2\x92\x0e\n" + "\n" + "MVMService\x12a\n" + "\x03Get\x12%.fits.api.mvm.v1.MVMServiceGetRequest\x1a&.fits.api.mvm.v1.MVMServiceGetResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n" + "\x06Create\x12(.fits.api.mvm.v1.MVMServiceCreateRequest\x1a).fits.api.mvm.v1.MVMServiceCreateResponse\"\n" + - "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12i\n" + - "\x06Update\x12(.fits.api.mvm.v1.MVMServiceUpdateRequest\x1a).fits.api.mvm.v1.MVMServiceUpdateResponse\"\n" + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12d\n" + "\x04List\x12&.fits.api.mvm.v1.MVMServiceListRequest\x1a'.fits.api.mvm.v1.MVMServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n" + "\x06Delete\x12(.fits.api.mvm.v1.MVMServiceDeleteRequest\x1a).fits.api.mvm.v1.MVMServiceDeleteResponse\"\n" + @@ -3221,7 +2862,7 @@ func file_fits_api_mvm_v1_mvm_proto_rawDescGZIP() []byte { } var file_fits_api_mvm_v1_mvm_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_fits_api_mvm_v1_mvm_proto_msgTypes = make([]protoimpl.MessageInfo, 41) +var file_fits_api_mvm_v1_mvm_proto_msgTypes = make([]protoimpl.MessageInfo, 36) var file_fits_api_mvm_v1_mvm_proto_goTypes = []any{ (Availability)(0), // 0: fits.api.mvm.v1.Availability (ServiceClass)(0), // 1: fits.api.mvm.v1.ServiceClass @@ -3239,108 +2880,95 @@ var file_fits_api_mvm_v1_mvm_proto_goTypes = []any{ (*LinuxDisk)(nil), // 13: fits.api.mvm.v1.LinuxDisk (*WindowsDisk)(nil), // 14: fits.api.mvm.v1.WindowsDisk (*MVMServiceCreateResponse)(nil), // 15: fits.api.mvm.v1.MVMServiceCreateResponse - (*MVMServiceUpdateRequest)(nil), // 16: fits.api.mvm.v1.MVMServiceUpdateRequest - (*PerformanceClassChange)(nil), // 17: fits.api.mvm.v1.PerformanceClassChange - (*ServiceClassChange)(nil), // 18: fits.api.mvm.v1.ServiceClassChange - (*ContactChange)(nil), // 19: fits.api.mvm.v1.ContactChange - (*MVMServiceUpdateResponse)(nil), // 20: fits.api.mvm.v1.MVMServiceUpdateResponse - (*MVMServiceListRequest)(nil), // 21: fits.api.mvm.v1.MVMServiceListRequest - (*MVMServiceListResponse)(nil), // 22: fits.api.mvm.v1.MVMServiceListResponse - (*MVMServiceDeleteRequest)(nil), // 23: fits.api.mvm.v1.MVMServiceDeleteRequest - (*MVMServiceDeleteResponse)(nil), // 24: fits.api.mvm.v1.MVMServiceDeleteResponse - (*MVMServiceValidateCreateRequest)(nil), // 25: fits.api.mvm.v1.MVMServiceValidateCreateRequest - (*MVMServiceValidateCreateResponse)(nil), // 26: fits.api.mvm.v1.MVMServiceValidateCreateResponse - (*MVMServiceValidateAddDiskRequest)(nil), // 27: fits.api.mvm.v1.MVMServiceValidateAddDiskRequest - (*MVMServiceValidateAddDiskResponse)(nil), // 28: fits.api.mvm.v1.MVMServiceValidateAddDiskResponse - (*MVMServiceValidateUpdateDiskRequest)(nil), // 29: fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest - (*MVMServiceValidateUpdateDiskResponse)(nil), // 30: fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse - (*MVMServiceAddDiskResponse)(nil), // 31: fits.api.mvm.v1.MVMServiceAddDiskResponse - (*MVMServiceUpdateDiskResponse)(nil), // 32: fits.api.mvm.v1.MVMServiceUpdateDiskResponse - (*MVMServiceDeleteDiskResponse)(nil), // 33: fits.api.mvm.v1.MVMServiceDeleteDiskResponse - (*MVMServiceAddDiskRequest)(nil), // 34: fits.api.mvm.v1.MVMServiceAddDiskRequest - (*MVMServiceUpdateDiskRequest)(nil), // 35: fits.api.mvm.v1.MVMServiceUpdateDiskRequest - (*MVMServiceDeleteDiskRequest)(nil), // 36: fits.api.mvm.v1.MVMServiceDeleteDiskRequest - (*MVMServiceAddNetworkInterfaceResponse)(nil), // 37: fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse - (*MVMServiceMoveNetworkInterfaceResponse)(nil), // 38: fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse - (*MVMServiceDeleteNetworkInterfaceResponse)(nil), // 39: fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse - (*MVMServiceAddNetworkInterfaceRequest)(nil), // 40: fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest - (*MVMServiceMoveNetworkInterfaceRequest)(nil), // 41: fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest - (*MVMServiceDeleteNetworkInterfaceRequest)(nil), // 42: fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest - (*MVMServiceValidateAddNetworkInterfaceRequest)(nil), // 43: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest - (*MVMServiceValidateAddNetworkInterfaceResponse)(nil), // 44: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse - (*v1.Meta)(nil), // 45: fits.api.v1.Meta - (*VLAN)(nil), // 46: fits.api.mvm.v1.VLAN - (*v1.Labels)(nil), // 47: fits.api.v1.Labels - (*v1.UpdateMeta)(nil), // 48: fits.api.v1.UpdateMeta + (*MVMServiceListRequest)(nil), // 16: fits.api.mvm.v1.MVMServiceListRequest + (*MVMServiceListResponse)(nil), // 17: fits.api.mvm.v1.MVMServiceListResponse + (*MVMServiceDeleteRequest)(nil), // 18: fits.api.mvm.v1.MVMServiceDeleteRequest + (*MVMServiceDeleteResponse)(nil), // 19: fits.api.mvm.v1.MVMServiceDeleteResponse + (*MVMServiceValidateCreateRequest)(nil), // 20: fits.api.mvm.v1.MVMServiceValidateCreateRequest + (*MVMServiceValidateCreateResponse)(nil), // 21: fits.api.mvm.v1.MVMServiceValidateCreateResponse + (*MVMServiceValidateAddDiskRequest)(nil), // 22: fits.api.mvm.v1.MVMServiceValidateAddDiskRequest + (*MVMServiceValidateAddDiskResponse)(nil), // 23: fits.api.mvm.v1.MVMServiceValidateAddDiskResponse + (*MVMServiceValidateUpdateDiskRequest)(nil), // 24: fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest + (*MVMServiceValidateUpdateDiskResponse)(nil), // 25: fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse + (*MVMServiceAddDiskResponse)(nil), // 26: fits.api.mvm.v1.MVMServiceAddDiskResponse + (*MVMServiceUpdateDiskResponse)(nil), // 27: fits.api.mvm.v1.MVMServiceUpdateDiskResponse + (*MVMServiceDeleteDiskResponse)(nil), // 28: fits.api.mvm.v1.MVMServiceDeleteDiskResponse + (*MVMServiceAddDiskRequest)(nil), // 29: fits.api.mvm.v1.MVMServiceAddDiskRequest + (*MVMServiceUpdateDiskRequest)(nil), // 30: fits.api.mvm.v1.MVMServiceUpdateDiskRequest + (*MVMServiceDeleteDiskRequest)(nil), // 31: fits.api.mvm.v1.MVMServiceDeleteDiskRequest + (*MVMServiceAddNetworkInterfaceResponse)(nil), // 32: fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse + (*MVMServiceMoveNetworkInterfaceResponse)(nil), // 33: fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse + (*MVMServiceDeleteNetworkInterfaceResponse)(nil), // 34: fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse + (*MVMServiceAddNetworkInterfaceRequest)(nil), // 35: fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest + (*MVMServiceMoveNetworkInterfaceRequest)(nil), // 36: fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest + (*MVMServiceDeleteNetworkInterfaceRequest)(nil), // 37: fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest + (*MVMServiceValidateAddNetworkInterfaceRequest)(nil), // 38: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest + (*MVMServiceValidateAddNetworkInterfaceResponse)(nil), // 39: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse + (*v1.Meta)(nil), // 40: fits.api.v1.Meta + (*VLAN)(nil), // 41: fits.api.mvm.v1.VLAN + (*v1.Labels)(nil), // 42: fits.api.v1.Labels } var file_fits_api_mvm_v1_mvm_proto_depIdxs = []int32{ 13, // 0: fits.api.mvm.v1.LinuxDetails.disks:type_name -> fits.api.mvm.v1.LinuxDisk 14, // 1: fits.api.mvm.v1.WindowsDetails.disks:type_name -> fits.api.mvm.v1.WindowsDisk - 45, // 2: fits.api.mvm.v1.ManagedVM.meta:type_name -> fits.api.v1.Meta + 40, // 2: fits.api.mvm.v1.ManagedVM.meta:type_name -> fits.api.v1.Meta 2, // 3: fits.api.mvm.v1.ManagedVM.status:type_name -> fits.api.mvm.v1.MVMStatus 0, // 4: fits.api.mvm.v1.ManagedVM.availability:type_name -> fits.api.mvm.v1.Availability 1, // 5: fits.api.mvm.v1.ManagedVM.serviceclass:type_name -> fits.api.mvm.v1.ServiceClass 5, // 6: fits.api.mvm.v1.ManagedVM.windows_details:type_name -> fits.api.mvm.v1.WindowsDetails 4, // 7: fits.api.mvm.v1.ManagedVM.linux_details:type_name -> fits.api.mvm.v1.LinuxDetails 6, // 8: fits.api.mvm.v1.ManagedVM.interfaces:type_name -> fits.api.mvm.v1.NetworkInterface - 46, // 9: fits.api.mvm.v1.ManagedVM.vlan:type_name -> fits.api.mvm.v1.VLAN + 41, // 9: fits.api.mvm.v1.ManagedVM.vlan:type_name -> fits.api.mvm.v1.VLAN 7, // 10: fits.api.mvm.v1.MVMServiceGetResponse.mvm:type_name -> fits.api.mvm.v1.ManagedVM 14, // 11: fits.api.mvm.v1.MVMServiceCreateWindowsRequest.disks:type_name -> fits.api.mvm.v1.WindowsDisk 13, // 12: fits.api.mvm.v1.MVMServiceCreateLinuxRequest.disks:type_name -> fits.api.mvm.v1.LinuxDisk - 47, // 13: fits.api.mvm.v1.MVMServiceCreateRequest.labels:type_name -> fits.api.v1.Labels + 42, // 13: fits.api.mvm.v1.MVMServiceCreateRequest.labels:type_name -> fits.api.v1.Labels 0, // 14: fits.api.mvm.v1.MVMServiceCreateRequest.availability:type_name -> fits.api.mvm.v1.Availability 1, // 15: fits.api.mvm.v1.MVMServiceCreateRequest.serviceclass:type_name -> fits.api.mvm.v1.ServiceClass 10, // 16: fits.api.mvm.v1.MVMServiceCreateRequest.windows:type_name -> fits.api.mvm.v1.MVMServiceCreateWindowsRequest 11, // 17: fits.api.mvm.v1.MVMServiceCreateRequest.linux:type_name -> fits.api.mvm.v1.MVMServiceCreateLinuxRequest 3, // 18: fits.api.mvm.v1.LinuxDisk.disk_type:type_name -> fits.api.mvm.v1.DiskType 3, // 19: fits.api.mvm.v1.WindowsDisk.disk_type:type_name -> fits.api.mvm.v1.DiskType - 48, // 20: fits.api.mvm.v1.MVMServiceUpdateRequest.update_meta:type_name -> fits.api.v1.UpdateMeta - 17, // 21: fits.api.mvm.v1.MVMServiceUpdateRequest.performance_class:type_name -> fits.api.mvm.v1.PerformanceClassChange - 18, // 22: fits.api.mvm.v1.MVMServiceUpdateRequest.service_class:type_name -> fits.api.mvm.v1.ServiceClassChange - 19, // 23: fits.api.mvm.v1.MVMServiceUpdateRequest.contact:type_name -> fits.api.mvm.v1.ContactChange - 1, // 24: fits.api.mvm.v1.ServiceClassChange.serviceclass:type_name -> fits.api.mvm.v1.ServiceClass - 7, // 25: fits.api.mvm.v1.MVMServiceListResponse.mvms:type_name -> fits.api.mvm.v1.ManagedVM - 12, // 26: fits.api.mvm.v1.MVMServiceValidateCreateRequest.create:type_name -> fits.api.mvm.v1.MVMServiceCreateRequest - 34, // 27: fits.api.mvm.v1.MVMServiceValidateAddDiskRequest.add_disk:type_name -> fits.api.mvm.v1.MVMServiceAddDiskRequest - 35, // 28: fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest.update_disk:type_name -> fits.api.mvm.v1.MVMServiceUpdateDiskRequest - 13, // 29: fits.api.mvm.v1.MVMServiceAddDiskRequest.linux:type_name -> fits.api.mvm.v1.LinuxDisk - 14, // 30: fits.api.mvm.v1.MVMServiceAddDiskRequest.windows:type_name -> fits.api.mvm.v1.WindowsDisk - 40, // 31: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest.add_network_interface:type_name -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest - 8, // 32: fits.api.mvm.v1.MVMService.Get:input_type -> fits.api.mvm.v1.MVMServiceGetRequest - 12, // 33: fits.api.mvm.v1.MVMService.Create:input_type -> fits.api.mvm.v1.MVMServiceCreateRequest - 16, // 34: fits.api.mvm.v1.MVMService.Update:input_type -> fits.api.mvm.v1.MVMServiceUpdateRequest - 21, // 35: fits.api.mvm.v1.MVMService.List:input_type -> fits.api.mvm.v1.MVMServiceListRequest - 23, // 36: fits.api.mvm.v1.MVMService.Delete:input_type -> fits.api.mvm.v1.MVMServiceDeleteRequest - 34, // 37: fits.api.mvm.v1.MVMService.AddDisk:input_type -> fits.api.mvm.v1.MVMServiceAddDiskRequest - 35, // 38: fits.api.mvm.v1.MVMService.UpdateDisk:input_type -> fits.api.mvm.v1.MVMServiceUpdateDiskRequest - 36, // 39: fits.api.mvm.v1.MVMService.DeleteDisk:input_type -> fits.api.mvm.v1.MVMServiceDeleteDiskRequest - 40, // 40: fits.api.mvm.v1.MVMService.AddNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest - 41, // 41: fits.api.mvm.v1.MVMService.MoveNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest - 42, // 42: fits.api.mvm.v1.MVMService.DeleteNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest - 25, // 43: fits.api.mvm.v1.MVMService.ValidateCreate:input_type -> fits.api.mvm.v1.MVMServiceValidateCreateRequest - 27, // 44: fits.api.mvm.v1.MVMService.ValidateAddDisk:input_type -> fits.api.mvm.v1.MVMServiceValidateAddDiskRequest - 29, // 45: fits.api.mvm.v1.MVMService.ValidateUpdateDisk:input_type -> fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest - 43, // 46: fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest - 9, // 47: fits.api.mvm.v1.MVMService.Get:output_type -> fits.api.mvm.v1.MVMServiceGetResponse - 15, // 48: fits.api.mvm.v1.MVMService.Create:output_type -> fits.api.mvm.v1.MVMServiceCreateResponse - 20, // 49: fits.api.mvm.v1.MVMService.Update:output_type -> fits.api.mvm.v1.MVMServiceUpdateResponse - 22, // 50: fits.api.mvm.v1.MVMService.List:output_type -> fits.api.mvm.v1.MVMServiceListResponse - 24, // 51: fits.api.mvm.v1.MVMService.Delete:output_type -> fits.api.mvm.v1.MVMServiceDeleteResponse - 31, // 52: fits.api.mvm.v1.MVMService.AddDisk:output_type -> fits.api.mvm.v1.MVMServiceAddDiskResponse - 32, // 53: fits.api.mvm.v1.MVMService.UpdateDisk:output_type -> fits.api.mvm.v1.MVMServiceUpdateDiskResponse - 33, // 54: fits.api.mvm.v1.MVMService.DeleteDisk:output_type -> fits.api.mvm.v1.MVMServiceDeleteDiskResponse - 37, // 55: fits.api.mvm.v1.MVMService.AddNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse - 38, // 56: fits.api.mvm.v1.MVMService.MoveNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse - 39, // 57: fits.api.mvm.v1.MVMService.DeleteNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse - 26, // 58: fits.api.mvm.v1.MVMService.ValidateCreate:output_type -> fits.api.mvm.v1.MVMServiceValidateCreateResponse - 28, // 59: fits.api.mvm.v1.MVMService.ValidateAddDisk:output_type -> fits.api.mvm.v1.MVMServiceValidateAddDiskResponse - 30, // 60: fits.api.mvm.v1.MVMService.ValidateUpdateDisk:output_type -> fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse - 44, // 61: fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse - 47, // [47:62] is the sub-list for method output_type - 32, // [32:47] is the sub-list for method input_type - 32, // [32:32] is the sub-list for extension type_name - 32, // [32:32] is the sub-list for extension extendee - 0, // [0:32] is the sub-list for field type_name + 7, // 20: fits.api.mvm.v1.MVMServiceListResponse.mvms:type_name -> fits.api.mvm.v1.ManagedVM + 12, // 21: fits.api.mvm.v1.MVMServiceValidateCreateRequest.create:type_name -> fits.api.mvm.v1.MVMServiceCreateRequest + 29, // 22: fits.api.mvm.v1.MVMServiceValidateAddDiskRequest.add_disk:type_name -> fits.api.mvm.v1.MVMServiceAddDiskRequest + 30, // 23: fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest.update_disk:type_name -> fits.api.mvm.v1.MVMServiceUpdateDiskRequest + 13, // 24: fits.api.mvm.v1.MVMServiceAddDiskRequest.linux:type_name -> fits.api.mvm.v1.LinuxDisk + 14, // 25: fits.api.mvm.v1.MVMServiceAddDiskRequest.windows:type_name -> fits.api.mvm.v1.WindowsDisk + 35, // 26: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest.add_network_interface:type_name -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest + 8, // 27: fits.api.mvm.v1.MVMService.Get:input_type -> fits.api.mvm.v1.MVMServiceGetRequest + 12, // 28: fits.api.mvm.v1.MVMService.Create:input_type -> fits.api.mvm.v1.MVMServiceCreateRequest + 16, // 29: fits.api.mvm.v1.MVMService.List:input_type -> fits.api.mvm.v1.MVMServiceListRequest + 18, // 30: fits.api.mvm.v1.MVMService.Delete:input_type -> fits.api.mvm.v1.MVMServiceDeleteRequest + 29, // 31: fits.api.mvm.v1.MVMService.AddDisk:input_type -> fits.api.mvm.v1.MVMServiceAddDiskRequest + 30, // 32: fits.api.mvm.v1.MVMService.UpdateDisk:input_type -> fits.api.mvm.v1.MVMServiceUpdateDiskRequest + 31, // 33: fits.api.mvm.v1.MVMService.DeleteDisk:input_type -> fits.api.mvm.v1.MVMServiceDeleteDiskRequest + 35, // 34: fits.api.mvm.v1.MVMService.AddNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest + 36, // 35: fits.api.mvm.v1.MVMService.MoveNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest + 37, // 36: fits.api.mvm.v1.MVMService.DeleteNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest + 20, // 37: fits.api.mvm.v1.MVMService.ValidateCreate:input_type -> fits.api.mvm.v1.MVMServiceValidateCreateRequest + 22, // 38: fits.api.mvm.v1.MVMService.ValidateAddDisk:input_type -> fits.api.mvm.v1.MVMServiceValidateAddDiskRequest + 24, // 39: fits.api.mvm.v1.MVMService.ValidateUpdateDisk:input_type -> fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest + 38, // 40: fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest + 9, // 41: fits.api.mvm.v1.MVMService.Get:output_type -> fits.api.mvm.v1.MVMServiceGetResponse + 15, // 42: fits.api.mvm.v1.MVMService.Create:output_type -> fits.api.mvm.v1.MVMServiceCreateResponse + 17, // 43: fits.api.mvm.v1.MVMService.List:output_type -> fits.api.mvm.v1.MVMServiceListResponse + 19, // 44: fits.api.mvm.v1.MVMService.Delete:output_type -> fits.api.mvm.v1.MVMServiceDeleteResponse + 26, // 45: fits.api.mvm.v1.MVMService.AddDisk:output_type -> fits.api.mvm.v1.MVMServiceAddDiskResponse + 27, // 46: fits.api.mvm.v1.MVMService.UpdateDisk:output_type -> fits.api.mvm.v1.MVMServiceUpdateDiskResponse + 28, // 47: fits.api.mvm.v1.MVMService.DeleteDisk:output_type -> fits.api.mvm.v1.MVMServiceDeleteDiskResponse + 32, // 48: fits.api.mvm.v1.MVMService.AddNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse + 33, // 49: fits.api.mvm.v1.MVMService.MoveNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse + 34, // 50: fits.api.mvm.v1.MVMService.DeleteNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse + 21, // 51: fits.api.mvm.v1.MVMService.ValidateCreate:output_type -> fits.api.mvm.v1.MVMServiceValidateCreateResponse + 23, // 52: fits.api.mvm.v1.MVMService.ValidateAddDisk:output_type -> fits.api.mvm.v1.MVMServiceValidateAddDiskResponse + 25, // 53: fits.api.mvm.v1.MVMService.ValidateUpdateDisk:output_type -> fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse + 39, // 54: fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse + 41, // [41:55] is the sub-list for method output_type + 27, // [27:41] is the sub-list for method input_type + 27, // [27:27] is the sub-list for extension type_name + 27, // [27:27] is the sub-list for extension extendee + 0, // [0:27] is the sub-list for field type_name } func init() { file_fits_api_mvm_v1_mvm_proto_init() } @@ -3360,24 +2988,19 @@ func file_fits_api_mvm_v1_mvm_proto_init() { } file_fits_api_mvm_v1_mvm_proto_msgTypes[9].OneofWrappers = []any{} file_fits_api_mvm_v1_mvm_proto_msgTypes[10].OneofWrappers = []any{} - file_fits_api_mvm_v1_mvm_proto_msgTypes[12].OneofWrappers = []any{ - (*MVMServiceUpdateRequest_PerformanceClass)(nil), - (*MVMServiceUpdateRequest_ServiceClass)(nil), - (*MVMServiceUpdateRequest_Contact)(nil), - } - file_fits_api_mvm_v1_mvm_proto_msgTypes[17].OneofWrappers = []any{} - file_fits_api_mvm_v1_mvm_proto_msgTypes[30].OneofWrappers = []any{ + file_fits_api_mvm_v1_mvm_proto_msgTypes[12].OneofWrappers = []any{} + file_fits_api_mvm_v1_mvm_proto_msgTypes[25].OneofWrappers = []any{ (*MVMServiceAddDiskRequest_Linux)(nil), (*MVMServiceAddDiskRequest_Windows)(nil), } - file_fits_api_mvm_v1_mvm_proto_msgTypes[31].OneofWrappers = []any{} + file_fits_api_mvm_v1_mvm_proto_msgTypes[26].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_mvm_v1_mvm_proto_rawDesc), len(file_fits_api_mvm_v1_mvm_proto_rawDesc)), NumEnums: 4, - NumMessages: 41, + NumMessages: 36, NumExtensions: 0, NumServices: 1, }, diff --git a/go/fits/api/mvm/v1/mvmv1connect/mvm.connect.go b/go/fits/api/mvm/v1/mvmv1connect/mvm.connect.go index 383fe8d..520b93f 100644 --- a/go/fits/api/mvm/v1/mvmv1connect/mvm.connect.go +++ b/go/fits/api/mvm/v1/mvmv1connect/mvm.connect.go @@ -37,8 +37,6 @@ const ( MVMServiceGetProcedure = "/fits.api.mvm.v1.MVMService/Get" // MVMServiceCreateProcedure is the fully-qualified name of the MVMService's Create RPC. MVMServiceCreateProcedure = "/fits.api.mvm.v1.MVMService/Create" - // MVMServiceUpdateProcedure is the fully-qualified name of the MVMService's Update RPC. - MVMServiceUpdateProcedure = "/fits.api.mvm.v1.MVMService/Update" // MVMServiceListProcedure is the fully-qualified name of the MVMService's List RPC. MVMServiceListProcedure = "/fits.api.mvm.v1.MVMService/List" // MVMServiceDeleteProcedure is the fully-qualified name of the MVMService's Delete RPC. @@ -78,8 +76,6 @@ type MVMServiceClient interface { Get(context.Context, *v1.MVMServiceGetRequest) (*v1.MVMServiceGetResponse, error) // Creates a new MVM. Create(context.Context, *v1.MVMServiceCreateRequest) (*v1.MVMServiceCreateResponse, error) - // Updates a MVM. - Update(context.Context, *v1.MVMServiceUpdateRequest) (*v1.MVMServiceUpdateResponse, error) // Returns the list of all MVMs. List(context.Context, *v1.MVMServiceListRequest) (*v1.MVMServiceListResponse, error) // Deletes a MVM. @@ -132,12 +128,6 @@ func NewMVMServiceClient(httpClient connect.HTTPClient, baseURL string, opts ... connect.WithSchema(mVMServiceMethods.ByName("Create")), connect.WithClientOptions(opts...), ), - update: connect.NewClient[v1.MVMServiceUpdateRequest, v1.MVMServiceUpdateResponse]( - httpClient, - baseURL+MVMServiceUpdateProcedure, - connect.WithSchema(mVMServiceMethods.ByName("Update")), - connect.WithClientOptions(opts...), - ), list: connect.NewClient[v1.MVMServiceListRequest, v1.MVMServiceListResponse]( httpClient, baseURL+MVMServiceListProcedure, @@ -217,7 +207,6 @@ func NewMVMServiceClient(httpClient connect.HTTPClient, baseURL string, opts ... type mVMServiceClient struct { get *connect.Client[v1.MVMServiceGetRequest, v1.MVMServiceGetResponse] create *connect.Client[v1.MVMServiceCreateRequest, v1.MVMServiceCreateResponse] - update *connect.Client[v1.MVMServiceUpdateRequest, v1.MVMServiceUpdateResponse] list *connect.Client[v1.MVMServiceListRequest, v1.MVMServiceListResponse] delete *connect.Client[v1.MVMServiceDeleteRequest, v1.MVMServiceDeleteResponse] addDisk *connect.Client[v1.MVMServiceAddDiskRequest, v1.MVMServiceAddDiskResponse] @@ -250,15 +239,6 @@ func (c *mVMServiceClient) Create(ctx context.Context, req *v1.MVMServiceCreateR return nil, err } -// Update calls fits.api.mvm.v1.MVMService.Update. -func (c *mVMServiceClient) Update(ctx context.Context, req *v1.MVMServiceUpdateRequest) (*v1.MVMServiceUpdateResponse, error) { - response, err := c.update.CallUnary(ctx, connect.NewRequest(req)) - if response != nil { - return response.Msg, err - } - return nil, err -} - // List calls fits.api.mvm.v1.MVMService.List. func (c *mVMServiceClient) List(ctx context.Context, req *v1.MVMServiceListRequest) (*v1.MVMServiceListResponse, error) { response, err := c.list.CallUnary(ctx, connect.NewRequest(req)) @@ -373,8 +353,6 @@ type MVMServiceHandler interface { Get(context.Context, *v1.MVMServiceGetRequest) (*v1.MVMServiceGetResponse, error) // Creates a new MVM. Create(context.Context, *v1.MVMServiceCreateRequest) (*v1.MVMServiceCreateResponse, error) - // Updates a MVM. - Update(context.Context, *v1.MVMServiceUpdateRequest) (*v1.MVMServiceUpdateResponse, error) // Returns the list of all MVMs. List(context.Context, *v1.MVMServiceListRequest) (*v1.MVMServiceListResponse, error) // Deletes a MVM. @@ -423,12 +401,6 @@ func NewMVMServiceHandler(svc MVMServiceHandler, opts ...connect.HandlerOption) connect.WithSchema(mVMServiceMethods.ByName("Create")), connect.WithHandlerOptions(opts...), ) - mVMServiceUpdateHandler := connect.NewUnaryHandlerSimple( - MVMServiceUpdateProcedure, - svc.Update, - connect.WithSchema(mVMServiceMethods.ByName("Update")), - connect.WithHandlerOptions(opts...), - ) mVMServiceListHandler := connect.NewUnaryHandlerSimple( MVMServiceListProcedure, svc.List, @@ -507,8 +479,6 @@ func NewMVMServiceHandler(svc MVMServiceHandler, opts ...connect.HandlerOption) mVMServiceGetHandler.ServeHTTP(w, r) case MVMServiceCreateProcedure: mVMServiceCreateHandler.ServeHTTP(w, r) - case MVMServiceUpdateProcedure: - mVMServiceUpdateHandler.ServeHTTP(w, r) case MVMServiceListProcedure: mVMServiceListHandler.ServeHTTP(w, r) case MVMServiceDeleteProcedure: @@ -550,10 +520,6 @@ func (UnimplementedMVMServiceHandler) Create(context.Context, *v1.MVMServiceCrea return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.Create is not implemented")) } -func (UnimplementedMVMServiceHandler) Update(context.Context, *v1.MVMServiceUpdateRequest) (*v1.MVMServiceUpdateResponse, error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.Update is not implemented")) -} - func (UnimplementedMVMServiceHandler) List(context.Context, *v1.MVMServiceListRequest) (*v1.MVMServiceListResponse, error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.List is not implemented")) } diff --git a/go/permissions/servicepermissions.go b/go/permissions/servicepermissions.go index 95decb7..945214e 100755 --- a/go/permissions/servicepermissions.go +++ b/go/permissions/servicepermissions.go @@ -64,7 +64,6 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.mvm.v1.MVMService/Get": {}, "/fits.api.mvm.v1.MVMService/List": {}, "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": {}, - "/fits.api.mvm.v1.MVMService/Update": {}, "/fits.api.mvm.v1.MVMService/UpdateDisk": {}, "/fits.api.mvm.v1.MVMService/ValidateAddDisk": {}, "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": {}, @@ -90,7 +89,6 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.mvm.v1.MVMService/Get": {}, "/fits.api.mvm.v1.MVMService/List": {}, "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": {}, - "/fits.api.mvm.v1.MVMService/Update": {}, "/fits.api.mvm.v1.MVMService/UpdateDisk": {}, "/fits.api.mvm.v1.MVMService/ValidateAddDisk": {}, "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": {}, @@ -126,7 +124,6 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.mvm.v1.MVMService/Get": {}, "/fits.api.mvm.v1.MVMService/List": {}, "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": {}, - "/fits.api.mvm.v1.MVMService/Update": {}, "/fits.api.mvm.v1.MVMService/UpdateDisk": {}, "/fits.api.mvm.v1.MVMService/ValidateAddDisk": {}, "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": {}, @@ -203,7 +200,6 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.mvm.v1.MVMService/Get": true, "/fits.api.mvm.v1.MVMService/List": true, "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": true, - "/fits.api.mvm.v1.MVMService/Update": true, "/fits.api.mvm.v1.MVMService/UpdateDisk": true, "/fits.api.mvm.v1.MVMService/ValidateAddDisk": true, "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": true, @@ -231,7 +227,6 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.mvm.v1.MVMService/Get": false, "/fits.api.mvm.v1.MVMService/List": false, "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": true, - "/fits.api.mvm.v1.MVMService/Update": true, "/fits.api.mvm.v1.MVMService/UpdateDisk": true, "/fits.api.mvm.v1.MVMService/ValidateAddDisk": false, "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": false, diff --git a/js/fits/api/mvm/v1/mvm_pb.ts b/js/fits/api/mvm/v1/mvm_pb.ts index c32a60c..cb24075 100644 --- a/js/fits/api/mvm/v1/mvm_pb.ts +++ b/js/fits/api/mvm/v1/mvm_pb.ts @@ -7,7 +7,7 @@ import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; import type { VLAN } from "./vlan_pb"; import { file_fits_api_mvm_v1_vlan } from "./vlan_pb"; -import type { Labels, Meta, UpdateMeta } from "../../v1/common_pb"; +import type { Labels, Meta } from "../../v1/common_pb"; import { file_fits_api_v1_common } from "../../v1/common_pb"; import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; import type { Message } from "@bufbuild/protobuf"; @@ -16,7 +16,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file fits/api/mvm/v1/mvm.proto. */ export const file_fits_api_mvm_v1_mvm: GenFile = /*@__PURE__*/ - fileDesc("ChlmaXRzL2FwaS9tdm0vdjEvbXZtLnByb3RvEg9maXRzLmFwaS5tdm0udjEidgoMTGludXhEZXRhaWxzEikKBWRpc2tzGAEgAygLMhouZml0cy5hcGkubXZtLnYxLkxpbnV4RGlzaxIbCglsZGFwX3V1aWQYAiABKAlCCLpIBXIDsAEBEh4KCWxkYXBfZnFkbhgDIAEoCUILukgIcgbAs66xAgEifgoOV2luZG93c0RldGFpbHMSKwoFZGlza3MYASADKAsyHC5maXRzLmFwaS5tdm0udjEuV2luZG93c0Rpc2sSHQoLZG9tYWluX3V1aWQYAiABKAlCCLpIBXIDsAEBEiAKC2RvbWFpbl9mcWRuGAMgASgJQgu6SAhyBsCzrrECASJeChBOZXR3b3JrSW50ZXJmYWNlEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEh4KCWlwYWRkcmVzcxgCIAEoCUILukgIcgbos66xAgESEgoKbWFjYWRkcmVzcxgDIAEoCSLjBQoJTWFuYWdlZFZNEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBGZxZG4YAyABKAlCC7pICHIGwLOusQIBEhsKBnRlbmFudBgEIAEoCUILukgIcgbAs66xAgESHgoMcHJvamVjdF91dWlkGAUgASgJQgi6SAVyA7ABARIZCgdvc191dWlkGAYgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAcgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYCCABKAlCCLpIBXIDsAEBEgsKA2NwdRgJIAEoDRILCgNyYW0YCiABKA0SDgoGYmFja3VwGAsgASgIEjQKBnN0YXR1cxgMIAEoDjIaLmZpdHMuYXBpLm12bS52MS5NVk1TdGF0dXNCCLpIBYIBAhABEhMKC3N0YXR1c19pbmZvGA0gASgJEj0KDGF2YWlsYWJpbGl0eRgOIAEoDjIdLmZpdHMuYXBpLm12bS52MS5BdmFpbGFiaWxpdHlCCLpIBYIBAhABEj0KDHNlcnZpY2VjbGFzcxgPIAEoDjIdLmZpdHMuYXBpLm12bS52MS5TZXJ2aWNlQ2xhc3NCCLpIBYIBAhABEjoKD3dpbmRvd3NfZGV0YWlscxgQIAEoCzIfLmZpdHMuYXBpLm12bS52MS5XaW5kb3dzRGV0YWlsc0gAEjYKDWxpbnV4X2RldGFpbHMYESABKAsyHS5maXRzLmFwaS5tdm0udjEuTGludXhEZXRhaWxzSAASNQoKaW50ZXJmYWNlcxgSIAMoCzIhLmZpdHMuYXBpLm12bS52MS5OZXR3b3JrSW50ZXJmYWNlEiMKBHZsYW4YEyABKAsyFS5maXRzLmFwaS5tdm0udjEuVkxBThIUCgxvcmRlcl9udW1iZXIYFCABKAlCEAoHZGV0YWlscxIFukgCCAEiWQoUTVZNU2VydmljZUdldFJlcXVlc3QSGwoEdXVpZBgBIAEoCUIIukgFcgOwAQFIAIgBARIbCgZ0ZW5hbnQYAiABKAlCC7pICHIGwLOusQIBQgcKBV91dWlkIkAKFU1WTVNlcnZpY2VHZXRSZXNwb25zZRInCgNtdm0YASABKAsyGi5maXRzLmFwaS5tdm0udjEuTWFuYWdlZFZNInYKHk1WTVNlcnZpY2VDcmVhdGVXaW5kb3dzUmVxdWVzdBIdCgtkb21haW5fdXVpZBgBIAEoCUIIukgFcgOwAQESNQoFZGlza3MYAiADKAsyHC5maXRzLmFwaS5tdm0udjEuV2luZG93c0Rpc2tCCLpIBZIBAggBInAKHE1WTVNlcnZpY2VDcmVhdGVMaW51eFJlcXVlc3QSGwoJbGRhcF91dWlkGAEgASgJQgi6SAVyA7ABARIzCgVkaXNrcxgCIAMoCzIaLmZpdHMuYXBpLm12bS52MS5MaW51eERpc2tCCLpIBZIBAggBItQEChdNVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBIeCgxwcm9qZWN0X3V1aWQYASABKAlCCLpIBXIDsAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESGQoHb3NfdXVpZBgDIAEoCUIIukgFcgOwAQESGwoJdmxhbl91dWlkGAQgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAUgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYBiABKAlCCLpIBXIDsAEBEgsKA2NwdRgHIAEoDRILCgNyYW0YCCABKA0SFAoMb3JkZXJfbnVtYmVyGAkgASgJEiMKBmxhYmVscxgKIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVscxIOCgZiYWNrdXAYCyABKAgSPQoMYXZhaWxhYmlsaXR5GAwgASgOMh0uZml0cy5hcGkubXZtLnYxLkF2YWlsYWJpbGl0eUIIukgFggECEAESPQoMc2VydmljZWNsYXNzGA0gASgOMh0uZml0cy5hcGkubXZtLnYxLlNlcnZpY2VDbGFzc0IIukgFggECEAESQgoHd2luZG93cxgOIAEoCzIvLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlV2luZG93c1JlcXVlc3RIABI+CgVsaW51eBgPIAEoCzItLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlTGludXhSZXF1ZXN0SABCEAoHbXZtdHlwZRIFukgCCAFCBwoFX25hbWUi5gEKCUxpbnV4RGlzaxIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEg0KBWxhYmVsGAIgASgJEhMKC2F1dG9fZXh0ZW5kGAMgASgIEhEKBHNpemUYBCABKARIAYgBARIYCgttb3VudF9wb2ludBgFIAEoCUgCiAEBEjsKCWRpc2tfdHlwZRgGIAEoDjIZLmZpdHMuYXBpLm12bS52MS5EaXNrVHlwZUIIukgFggECEAFIA4gBAUIHCgVfdXVpZEIHCgVfc2l6ZUIOCgxfbW91bnRfcG9pbnRCDAoKX2Rpc2tfdHlwZSLoAQoLV2luZG93c0Rpc2sSGwoEdXVpZBgBIAEoCUIIukgFcgOwAQFIAIgBARINCgVsYWJlbBgCIAEoCRITCgthdXRvX2V4dGVuZBgDIAEoCBIRCgRzaXplGAQgASgESAGIAQESGAoLZHJpdmVsZXR0ZXIYBSABKAlIAogBARI7CglkaXNrX3R5cGUYBiABKA4yGS5maXRzLmFwaS5tdm0udjEuRGlza1R5cGVCCLpIBYIBAhABSAOIAQFCBwoFX3V1aWRCBwoFX3NpemVCDgoMX2RyaXZlbGV0dGVyQgwKCl9kaXNrX3R5cGUiGgoYTVZNU2VydmljZUNyZWF0ZVJlc3BvbnNlIuACChdNVk1TZXJ2aWNlVXBkYXRlUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAIgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYAyABKAkSNAoLdXBkYXRlX21ldGEYBCABKAsyFy5maXRzLmFwaS52MS5VcGRhdGVNZXRhQga6SAPIAQESRAoRcGVyZm9ybWFuY2VfY2xhc3MYBSABKAsyJy5maXRzLmFwaS5tdm0udjEuUGVyZm9ybWFuY2VDbGFzc0NoYW5nZUgAEjwKDXNlcnZpY2VfY2xhc3MYBiABKAsyIy5maXRzLmFwaS5tdm0udjEuU2VydmljZUNsYXNzQ2hhbmdlSAASMQoHY29udGFjdBgHIAEoCzIeLmZpdHMuYXBpLm12bS52MS5Db250YWN0Q2hhbmdlSABCDwoGYWN0aW9uEgW6SAIIASJGChZQZXJmb3JtYW5jZUNsYXNzQ2hhbmdlEhYKA2NwdRgBIAEoDUIJukgGKgQYQCgBEhQKA3JhbRgCIAEoDUIHukgEKgIgACJTChJTZXJ2aWNlQ2xhc3NDaGFuZ2USPQoMc2VydmljZWNsYXNzGAEgASgOMh0uZml0cy5hcGkubXZtLnYxLlNlcnZpY2VDbGFzc0IIukgFggECEAEiLwoNQ29udGFjdENoYW5nZRIeCgxjb250YWN0X3V1aWQYASABKAlCCLpIBXIDsAEBIhoKGE1WTVNlcnZpY2VVcGRhdGVSZXNwb25zZSJEChVNVk1TZXJ2aWNlTGlzdFJlcXVlc3QSIAoGdGVuYW50GAEgASgJQgu6SAhyBsCzrrECAUgAiAEBQgkKB190ZW5hbnQiQgoWTVZNU2VydmljZUxpc3RSZXNwb25zZRIoCgRtdm1zGAEgAygLMhouZml0cy5hcGkubXZtLnYxLk1hbmFnZWRWTSJiChdNVk1TZXJ2aWNlRGVsZXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARIWCgR1dWlkGAIgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYAyABKAkiGgoYTVZNU2VydmljZURlbGV0ZVJlc3BvbnNlImMKH01WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlcXVlc3QSQAoGY3JlYXRlGAEgASgLMiguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VDcmVhdGVSZXF1ZXN0Qga6SAPIAQEiIgogTVZNU2VydmljZVZhbGlkYXRlQ3JlYXRlUmVzcG9uc2UiZwogTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1JlcXVlc3QSQwoIYWRkX2Rpc2sYASABKAsyKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZUFkZERpc2tSZXF1ZXN0Qga6SAPIAQEiIwohTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1Jlc3BvbnNlInAKI01WTVNlcnZpY2VWYWxpZGF0ZVVwZGF0ZURpc2tSZXF1ZXN0EkkKC3VwZGF0ZV9kaXNrGAEgASgLMiwuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VVcGRhdGVEaXNrUmVxdWVzdEIGukgDyAEBIiYKJE1WTVNlcnZpY2VWYWxpZGF0ZVVwZGF0ZURpc2tSZXNwb25zZSIbChlNVk1TZXJ2aWNlQWRkRGlza1Jlc3BvbnNlIh4KHE1WTVNlcnZpY2VVcGRhdGVEaXNrUmVzcG9uc2UiHgocTVZNU2VydmljZURlbGV0ZURpc2tSZXNwb25zZSLQAQoYTVZNU2VydmljZUFkZERpc2tSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgDIAEoCRIrCgVsaW51eBgEIAEoCzIaLmZpdHMuYXBpLm12bS52MS5MaW51eERpc2tIABIvCgd3aW5kb3dzGAUgASgLMhwuZml0cy5hcGkubXZtLnYxLldpbmRvd3NEaXNrSABCDQoEZGlzaxIFukgCCAEiyQEKG01WTVNlcnZpY2VVcGRhdGVEaXNrUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIbCglkaXNrX3V1aWQYAiABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgEIAEoCRIYCgthdXRvX2V4dGVuZBgFIAEoCEgAiAEBEhEKBHNpemUYBiABKARIAYgBAUIOCgxfYXV0b19leHRlbmRCBwoFX3NpemUigwEKG01WTVNlcnZpY2VEZWxldGVEaXNrUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIbCglkaXNrX3V1aWQYAiABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgEIAEoCSInCiVNVk1TZXJ2aWNlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIigKJk1WTVNlcnZpY2VNb3ZlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIioKKE1WTVNlcnZpY2VEZWxldGVOZXR3b3JrSW50ZXJmYWNlUmVzcG9uc2UibwokTVZNU2VydmljZUFkZE5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgDIAEoCSK1AQolTVZNU2VydmljZU1vdmVOZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIgCg5pbnRlcmZhY2VfdXVpZBgCIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAQgASgJEiEKD3RhcmdldF9tdm1fdXVpZBgFIAEoCUIIukgFcgOwAQEilAEKJ01WTVNlcnZpY2VEZWxldGVOZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIgCg5pbnRlcmZhY2VfdXVpZBgCIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAQgASgJIowBCixNVk1TZXJ2aWNlVmFsaWRhdGVBZGROZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBJcChVhZGRfbmV0d29ya19pbnRlcmZhY2UYASABKAsyNS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZUFkZE5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0Qga6SAPIAQEiLwotTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlKqYBCgxBdmFpbGFiaWxpdHkSIgoYQVZBSUxBQklMSVRZX1VOU1BFQ0lGSUVEEAAaBIKyGQASGwoPQVZBSUxBQklMSVRZX1YwEAEaBoKyGQJWMBIbCg9BVkFJTEFCSUxJVFlfVjEQAhoGgrIZAlYxEhsKD0FWQUlMQUJJTElUWV9WMhADGgaCshkCVjISGwoPQVZBSUxBQklMSVRZX1YzEAQaBoKyGQJWMyqTAQoMU2VydmljZUNsYXNzEiMKGVNFUlZJQ0VfQ0xBU1NfVU5TUEVDSUZJRUQQABoEgrIZABIeChFTRVJWSUNFX0NMQVNTX1NaMRABGgeCshkDU1oxEh4KEVNFUlZJQ0VfQ0xBU1NfU1oyEAIaB4KyGQNTWjISHgoRU0VSVklDRV9DTEFTU19TWjMQAxoHgrIZA1NaMypQCglNVk1TdGF0dXMSIAoWTVZNX1NUQVRVU19VTlNQRUNJRklFRBAAGgSCshkAEiEKEU1WTV9TVEFUVVNfQUNUSVZFEAEaCoKyGQZhY3RpdmUqhQEKCERpc2tUeXBlEh8KFURJU0tfVFlQRV9VTlNQRUNJRklFRBAAGgSCshkAEhgKDERJU0tfVFlQRV9PUxABGgaCshkCb3MSIAoQRElTS19UWVBFX1NZU1RFTRACGgqCshkGc3lzdGVtEhwKDkRJU0tfVFlQRV9EQVRBEAMaCIKyGQRkYXRhMv0OCgpNVk1TZXJ2aWNlEmEKA0dldBIlLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlR2V0UmVxdWVzdBomLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmkKBkNyZWF0ZRIoLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBopLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESaQoGVXBkYXRlEiguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VVcGRhdGVSZXF1ZXN0GikuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VVcGRhdGVSZXNwb25zZSIKyvMYAgEC4PMYARJkCgRMaXN0EiYuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VMaXN0UmVxdWVzdBonLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlTGlzdFJlc3BvbnNlIgvK8xgDAQID4PMYAhJpCgZEZWxldGUSKC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZURlbGV0ZVJlcXVlc3QaKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZURlbGV0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmwKB0FkZERpc2sSKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZUFkZERpc2tSZXF1ZXN0GiouZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGREaXNrUmVzcG9uc2UiCsrzGAIBAuDzGAESdQoKVXBkYXRlRGlzaxIsLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVXBkYXRlRGlza1JlcXVlc3QaLS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVVwZGF0ZURpc2tSZXNwb25zZSIKyvMYAgEC4PMYARJ1CgpEZWxldGVEaXNrEiwuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VEZWxldGVEaXNrUmVxdWVzdBotLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlRGVsZXRlRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgBEpABChNBZGROZXR3b3JrSW50ZXJmYWNlEjUuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGROZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBo2LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEpMBChRNb3ZlTmV0d29ya0ludGVyZmFjZRI2LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlTW92ZU5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0GjcuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VNb3ZlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEpkBChZEZWxldGVOZXR3b3JrSW50ZXJmYWNlEjguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VEZWxldGVOZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBo5LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlRGVsZXRlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEoEBCg5WYWxpZGF0ZUNyZWF0ZRIwLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVmFsaWRhdGVDcmVhdGVSZXF1ZXN0GjEuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgCEoQBCg9WYWxpZGF0ZUFkZERpc2sSMS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1JlcXVlc3QaMi5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgCEo0BChJWYWxpZGF0ZVVwZGF0ZURpc2sSNC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1JlcXVlc3QaNS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgCEqgBChtWYWxpZGF0ZUFkZE5ldHdvcmtJbnRlcmZhY2USPS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlcXVlc3QaPi5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgCQq0BChNjb20uZml0cy5hcGkubXZtLnYxQghNdm1Qcm90b1ABWi1naXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS9tdm0vdjE7bXZtdjGiAgNGQU2qAg9GaXRzLkFwaS5Ndm0uVjHKAg9GaXRzXEFwaVxNdm1cVjHiAhtGaXRzXEFwaVxNdm1cVjFcR1BCTWV0YWRhdGHqAhJGaXRzOjpBcGk6Ok12bTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_mvm_v1_vlan, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); + fileDesc("ChlmaXRzL2FwaS9tdm0vdjEvbXZtLnByb3RvEg9maXRzLmFwaS5tdm0udjEidgoMTGludXhEZXRhaWxzEikKBWRpc2tzGAEgAygLMhouZml0cy5hcGkubXZtLnYxLkxpbnV4RGlzaxIbCglsZGFwX3V1aWQYAiABKAlCCLpIBXIDsAEBEh4KCWxkYXBfZnFkbhgDIAEoCUILukgIcgbAs66xAgEifgoOV2luZG93c0RldGFpbHMSKwoFZGlza3MYASADKAsyHC5maXRzLmFwaS5tdm0udjEuV2luZG93c0Rpc2sSHQoLZG9tYWluX3V1aWQYAiABKAlCCLpIBXIDsAEBEiAKC2RvbWFpbl9mcWRuGAMgASgJQgu6SAhyBsCzrrECASJeChBOZXR3b3JrSW50ZXJmYWNlEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEh4KCWlwYWRkcmVzcxgCIAEoCUILukgIcgbos66xAgESEgoKbWFjYWRkcmVzcxgDIAEoCSLjBQoJTWFuYWdlZFZNEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBGZxZG4YAyABKAlCC7pICHIGwLOusQIBEhsKBnRlbmFudBgEIAEoCUILukgIcgbAs66xAgESHgoMcHJvamVjdF91dWlkGAUgASgJQgi6SAVyA7ABARIZCgdvc191dWlkGAYgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAcgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYCCABKAlCCLpIBXIDsAEBEgsKA2NwdRgJIAEoDRILCgNyYW0YCiABKA0SDgoGYmFja3VwGAsgASgIEjQKBnN0YXR1cxgMIAEoDjIaLmZpdHMuYXBpLm12bS52MS5NVk1TdGF0dXNCCLpIBYIBAhABEhMKC3N0YXR1c19pbmZvGA0gASgJEj0KDGF2YWlsYWJpbGl0eRgOIAEoDjIdLmZpdHMuYXBpLm12bS52MS5BdmFpbGFiaWxpdHlCCLpIBYIBAhABEj0KDHNlcnZpY2VjbGFzcxgPIAEoDjIdLmZpdHMuYXBpLm12bS52MS5TZXJ2aWNlQ2xhc3NCCLpIBYIBAhABEjoKD3dpbmRvd3NfZGV0YWlscxgQIAEoCzIfLmZpdHMuYXBpLm12bS52MS5XaW5kb3dzRGV0YWlsc0gAEjYKDWxpbnV4X2RldGFpbHMYESABKAsyHS5maXRzLmFwaS5tdm0udjEuTGludXhEZXRhaWxzSAASNQoKaW50ZXJmYWNlcxgSIAMoCzIhLmZpdHMuYXBpLm12bS52MS5OZXR3b3JrSW50ZXJmYWNlEiMKBHZsYW4YEyABKAsyFS5maXRzLmFwaS5tdm0udjEuVkxBThIUCgxvcmRlcl9udW1iZXIYFCABKAlCEAoHZGV0YWlscxIFukgCCAEiWQoUTVZNU2VydmljZUdldFJlcXVlc3QSGwoEdXVpZBgBIAEoCUIIukgFcgOwAQFIAIgBARIbCgZ0ZW5hbnQYAiABKAlCC7pICHIGwLOusQIBQgcKBV91dWlkIkAKFU1WTVNlcnZpY2VHZXRSZXNwb25zZRInCgNtdm0YASABKAsyGi5maXRzLmFwaS5tdm0udjEuTWFuYWdlZFZNInYKHk1WTVNlcnZpY2VDcmVhdGVXaW5kb3dzUmVxdWVzdBIdCgtkb21haW5fdXVpZBgBIAEoCUIIukgFcgOwAQESNQoFZGlza3MYAiADKAsyHC5maXRzLmFwaS5tdm0udjEuV2luZG93c0Rpc2tCCLpIBZIBAggBInAKHE1WTVNlcnZpY2VDcmVhdGVMaW51eFJlcXVlc3QSGwoJbGRhcF91dWlkGAEgASgJQgi6SAVyA7ABARIzCgVkaXNrcxgCIAMoCzIaLmZpdHMuYXBpLm12bS52MS5MaW51eERpc2tCCLpIBZIBAggBItQEChdNVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBIeCgxwcm9qZWN0X3V1aWQYASABKAlCCLpIBXIDsAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESGQoHb3NfdXVpZBgDIAEoCUIIukgFcgOwAQESGwoJdmxhbl91dWlkGAQgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAUgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYBiABKAlCCLpIBXIDsAEBEgsKA2NwdRgHIAEoDRILCgNyYW0YCCABKA0SFAoMb3JkZXJfbnVtYmVyGAkgASgJEiMKBmxhYmVscxgKIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVscxIOCgZiYWNrdXAYCyABKAgSPQoMYXZhaWxhYmlsaXR5GAwgASgOMh0uZml0cy5hcGkubXZtLnYxLkF2YWlsYWJpbGl0eUIIukgFggECEAESPQoMc2VydmljZWNsYXNzGA0gASgOMh0uZml0cy5hcGkubXZtLnYxLlNlcnZpY2VDbGFzc0IIukgFggECEAESQgoHd2luZG93cxgOIAEoCzIvLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlV2luZG93c1JlcXVlc3RIABI+CgVsaW51eBgPIAEoCzItLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlTGludXhSZXF1ZXN0SABCEAoHbXZtdHlwZRIFukgCCAFCBwoFX25hbWUi5gEKCUxpbnV4RGlzaxIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEg0KBWxhYmVsGAIgASgJEhMKC2F1dG9fZXh0ZW5kGAMgASgIEhEKBHNpemUYBCABKARIAYgBARIYCgttb3VudF9wb2ludBgFIAEoCUgCiAEBEjsKCWRpc2tfdHlwZRgGIAEoDjIZLmZpdHMuYXBpLm12bS52MS5EaXNrVHlwZUIIukgFggECEAFIA4gBAUIHCgVfdXVpZEIHCgVfc2l6ZUIOCgxfbW91bnRfcG9pbnRCDAoKX2Rpc2tfdHlwZSLoAQoLV2luZG93c0Rpc2sSGwoEdXVpZBgBIAEoCUIIukgFcgOwAQFIAIgBARINCgVsYWJlbBgCIAEoCRITCgthdXRvX2V4dGVuZBgDIAEoCBIRCgRzaXplGAQgASgESAGIAQESGAoLZHJpdmVsZXR0ZXIYBSABKAlIAogBARI7CglkaXNrX3R5cGUYBiABKA4yGS5maXRzLmFwaS5tdm0udjEuRGlza1R5cGVCCLpIBYIBAhABSAOIAQFCBwoFX3V1aWRCBwoFX3NpemVCDgoMX2RyaXZlbGV0dGVyQgwKCl9kaXNrX3R5cGUiGgoYTVZNU2VydmljZUNyZWF0ZVJlc3BvbnNlIkQKFU1WTVNlcnZpY2VMaXN0UmVxdWVzdBIgCgZ0ZW5hbnQYASABKAlCC7pICHIGwLOusQIBSACIAQFCCQoHX3RlbmFudCJCChZNVk1TZXJ2aWNlTGlzdFJlc3BvbnNlEigKBG12bXMYASADKAsyGi5maXRzLmFwaS5tdm0udjEuTWFuYWdlZFZNImIKF01WTVNlcnZpY2VEZWxldGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEhYKBHV1aWQYAiABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgDIAEoCSIaChhNVk1TZXJ2aWNlRGVsZXRlUmVzcG9uc2UiYwofTVZNU2VydmljZVZhbGlkYXRlQ3JlYXRlUmVxdWVzdBJACgZjcmVhdGUYASABKAsyKC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZUNyZWF0ZVJlcXVlc3RCBrpIA8gBASIiCiBNVk1TZXJ2aWNlVmFsaWRhdGVDcmVhdGVSZXNwb25zZSJnCiBNVk1TZXJ2aWNlVmFsaWRhdGVBZGREaXNrUmVxdWVzdBJDCghhZGRfZGlzaxgBIAEoCzIpLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQWRkRGlza1JlcXVlc3RCBrpIA8gBASIjCiFNVk1TZXJ2aWNlVmFsaWRhdGVBZGREaXNrUmVzcG9uc2UicAojTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1JlcXVlc3QSSQoLdXBkYXRlX2Rpc2sYASABKAsyLC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVVwZGF0ZURpc2tSZXF1ZXN0Qga6SAPIAQEiJgokTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1Jlc3BvbnNlIhsKGU1WTVNlcnZpY2VBZGREaXNrUmVzcG9uc2UiHgocTVZNU2VydmljZVVwZGF0ZURpc2tSZXNwb25zZSIeChxNVk1TZXJ2aWNlRGVsZXRlRGlza1Jlc3BvbnNlItABChhNVk1TZXJ2aWNlQWRkRGlza1JlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAMgASgJEisKBWxpbnV4GAQgASgLMhouZml0cy5hcGkubXZtLnYxLkxpbnV4RGlza0gAEi8KB3dpbmRvd3MYBSABKAsyHC5maXRzLmFwaS5tdm0udjEuV2luZG93c0Rpc2tIAEINCgRkaXNrEgW6SAIIASLJAQobTVZNU2VydmljZVVwZGF0ZURpc2tSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhsKCWRpc2tfdXVpZBgCIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAQgASgJEhgKC2F1dG9fZXh0ZW5kGAUgASgISACIAQESEQoEc2l6ZRgGIAEoBEgBiAEBQg4KDF9hdXRvX2V4dGVuZEIHCgVfc2l6ZSKDAQobTVZNU2VydmljZURlbGV0ZURpc2tSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhsKCWRpc2tfdXVpZBgCIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAQgASgJIicKJU1WTVNlcnZpY2VBZGROZXR3b3JrSW50ZXJmYWNlUmVzcG9uc2UiKAomTVZNU2VydmljZU1vdmVOZXR3b3JrSW50ZXJmYWNlUmVzcG9uc2UiKgooTVZNU2VydmljZURlbGV0ZU5ldHdvcmtJbnRlcmZhY2VSZXNwb25zZSJvCiRNVk1TZXJ2aWNlQWRkTmV0d29ya0ludGVyZmFjZVJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAMgASgJIrUBCiVNVk1TZXJ2aWNlTW92ZU5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEiAKDmludGVyZmFjZV91dWlkGAIgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAMgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYBCABKAkSIQoPdGFyZ2V0X212bV91dWlkGAUgASgJQgi6SAVyA7ABASKUAQonTVZNU2VydmljZURlbGV0ZU5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEiAKDmludGVyZmFjZV91dWlkGAIgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAMgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYBCABKAkijAEKLE1WTVNlcnZpY2VWYWxpZGF0ZUFkZE5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0ElwKFWFkZF9uZXR3b3JrX2ludGVyZmFjZRgBIAEoCzI1LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQWRkTmV0d29ya0ludGVyZmFjZVJlcXVlc3RCBrpIA8gBASIvCi1NVk1TZXJ2aWNlVmFsaWRhdGVBZGROZXR3b3JrSW50ZXJmYWNlUmVzcG9uc2UqpgEKDEF2YWlsYWJpbGl0eRIiChhBVkFJTEFCSUxJVFlfVU5TUEVDSUZJRUQQABoEgrIZABIbCg9BVkFJTEFCSUxJVFlfVjAQARoGgrIZAlYwEhsKD0FWQUlMQUJJTElUWV9WMRACGgaCshkCVjESGwoPQVZBSUxBQklMSVRZX1YyEAMaBoKyGQJWMhIbCg9BVkFJTEFCSUxJVFlfVjMQBBoGgrIZAlYzKpMBCgxTZXJ2aWNlQ2xhc3MSIwoZU0VSVklDRV9DTEFTU19VTlNQRUNJRklFRBAAGgSCshkAEh4KEVNFUlZJQ0VfQ0xBU1NfU1oxEAEaB4KyGQNTWjESHgoRU0VSVklDRV9DTEFTU19TWjIQAhoHgrIZA1NaMhIeChFTRVJWSUNFX0NMQVNTX1NaMxADGgeCshkDU1ozKlAKCU1WTVN0YXR1cxIgChZNVk1fU1RBVFVTX1VOU1BFQ0lGSUVEEAAaBIKyGQASIQoRTVZNX1NUQVRVU19BQ1RJVkUQARoKgrIZBmFjdGl2ZSqFAQoIRGlza1R5cGUSHwoVRElTS19UWVBFX1VOU1BFQ0lGSUVEEAAaBIKyGQASGAoMRElTS19UWVBFX09TEAEaBoKyGQJvcxIgChBESVNLX1RZUEVfU1lTVEVNEAIaCoKyGQZzeXN0ZW0SHAoORElTS19UWVBFX0RBVEEQAxoIgrIZBGRhdGEykg4KCk1WTVNlcnZpY2USYQoDR2V0EiUuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VHZXRSZXF1ZXN0GiYuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VHZXRSZXNwb25zZSILyvMYAwECA+DzGAISaQoGQ3JlYXRlEiguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VDcmVhdGVSZXF1ZXN0GikuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VDcmVhdGVSZXNwb25zZSIKyvMYAgEC4PMYARJkCgRMaXN0EiYuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VMaXN0UmVxdWVzdBonLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlTGlzdFJlc3BvbnNlIgvK8xgDAQID4PMYAhJpCgZEZWxldGUSKC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZURlbGV0ZVJlcXVlc3QaKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZURlbGV0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmwKB0FkZERpc2sSKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZUFkZERpc2tSZXF1ZXN0GiouZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGREaXNrUmVzcG9uc2UiCsrzGAIBAuDzGAESdQoKVXBkYXRlRGlzaxIsLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVXBkYXRlRGlza1JlcXVlc3QaLS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVVwZGF0ZURpc2tSZXNwb25zZSIKyvMYAgEC4PMYARJ1CgpEZWxldGVEaXNrEiwuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VEZWxldGVEaXNrUmVxdWVzdBotLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlRGVsZXRlRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgBEpABChNBZGROZXR3b3JrSW50ZXJmYWNlEjUuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGROZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBo2LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEpMBChRNb3ZlTmV0d29ya0ludGVyZmFjZRI2LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlTW92ZU5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0GjcuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VNb3ZlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEpkBChZEZWxldGVOZXR3b3JrSW50ZXJmYWNlEjguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VEZWxldGVOZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBo5LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlRGVsZXRlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEoEBCg5WYWxpZGF0ZUNyZWF0ZRIwLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVmFsaWRhdGVDcmVhdGVSZXF1ZXN0GjEuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgCEoQBCg9WYWxpZGF0ZUFkZERpc2sSMS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1JlcXVlc3QaMi5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgCEo0BChJWYWxpZGF0ZVVwZGF0ZURpc2sSNC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1JlcXVlc3QaNS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgCEqgBChtWYWxpZGF0ZUFkZE5ldHdvcmtJbnRlcmZhY2USPS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlcXVlc3QaPi5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgCQq0BChNjb20uZml0cy5hcGkubXZtLnYxQghNdm1Qcm90b1ABWi1naXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS9tdm0vdjE7bXZtdjGiAgNGQU2qAg9GaXRzLkFwaS5Ndm0uVjHKAg9GaXRzXEFwaVxNdm1cVjHiAhtGaXRzXEFwaVxNdm1cVjFcR1BCTWV0YWRhdGHqAhJGaXRzOjpBcGk6Ok12bTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_mvm_v1_vlan, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); /** * Linux-specific MVM details. @@ -667,176 +667,6 @@ export type MVMServiceCreateResponse = Message<"fits.api.mvm.v1.MVMServiceCreate export const MVMServiceCreateResponseSchema: GenMessage = /*@__PURE__*/ messageDesc(file_fits_api_mvm_v1_mvm, 11); -/** - * Request to change a mutable property of an existing MVM. - * Exactly one action must be set; each maps onto its own upstream endpoint. - * TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per - * action); combined changes would need - * server-side fan-out without rollback. - * TODO: clarify async semantics — this is a queued "request to update", not an - * immediate update (e.g. disk changes are applied overnight). Consider - * renaming to reflect that. - * TODO: differentiate between fire-and-forget and queued actions in the API. - * TODO: is it possible to expose the pending-change queue (list/cancel) to the caller? - * TODO: clarify who enqueues the request and whether a pending change blocks - * further edits (e.g. after AddDisk, until the change executes). - * - * @generated from message fits.api.mvm.v1.MVMServiceUpdateRequest - */ -export type MVMServiceUpdateRequest = Message<"fits.api.mvm.v1.MVMServiceUpdateRequest"> & { - /** - * UUID of the MVM to update. - * - * @generated from field: string uuid = 1; - */ - uuid: string; - - /** - * Project the MVM belongs to. - * - * @generated from field: string project = 2; - */ - project: string; - - /** - * Order reference for this operation. - * TODO: can this be optional? - * - * @generated from field: string order_number = 3; - */ - orderNumber: string; - - /** - * Timestamp and strategy for this update. - * - * @generated from field: fits.api.v1.UpdateMeta update_meta = 4; - */ - updateMeta?: UpdateMeta | undefined; - - /** - * The change to apply. - * - * @generated from oneof fits.api.mvm.v1.MVMServiceUpdateRequest.action - */ - action: { - /** - * Change the CPU/RAM performance class. - * - * @generated from field: fits.api.mvm.v1.PerformanceClassChange performance_class = 5; - */ - value: PerformanceClassChange; - case: "performanceClass"; - } | { - /** - * Change the service class. - * - * @generated from field: fits.api.mvm.v1.ServiceClassChange service_class = 6; - */ - value: ServiceClassChange; - case: "serviceClass"; - } | { - /** - * Change the contact person. - * - * @generated from field: fits.api.mvm.v1.ContactChange contact = 7; - */ - value: ContactChange; - case: "contact"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message fits.api.mvm.v1.MVMServiceUpdateRequest. - * Use `create(MVMServiceUpdateRequestSchema)` to create a new message. - */ -export const MVMServiceUpdateRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 12); - -/** - * PerformanceClassChange is the payload for changing a MVM's CPU and RAM. - * - * @generated from message fits.api.mvm.v1.PerformanceClassChange - */ -export type PerformanceClassChange = Message<"fits.api.mvm.v1.PerformanceClassChange"> & { - /** - * Number of vCPUs (1-64). - * - * @generated from field: uint32 cpu = 1; - */ - cpu: number; - - /** - * RAM size in GB. - * - * @generated from field: uint32 ram = 2; - */ - ram: number; -}; - -/** - * Describes the message fits.api.mvm.v1.PerformanceClassChange. - * Use `create(PerformanceClassChangeSchema)` to create a new message. - */ -export const PerformanceClassChangeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 13); - -/** - * ServiceClassChange is the payload for changing a MVM's service class. - * - * @generated from message fits.api.mvm.v1.ServiceClassChange - */ -export type ServiceClassChange = Message<"fits.api.mvm.v1.ServiceClassChange"> & { - /** - * Target service class. - * - * @generated from field: fits.api.mvm.v1.ServiceClass serviceclass = 1; - */ - serviceclass: ServiceClass; -}; - -/** - * Describes the message fits.api.mvm.v1.ServiceClassChange. - * Use `create(ServiceClassChangeSchema)` to create a new message. - */ -export const ServiceClassChangeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 14); - -/** - * ContactChange is the payload for changing a MVM's contact person. - * - * @generated from message fits.api.mvm.v1.ContactChange - */ -export type ContactChange = Message<"fits.api.mvm.v1.ContactChange"> & { - /** - * UUID of the new contact. - * - * @generated from field: string contact_uuid = 1; - */ - contactUuid: string; -}; - -/** - * Describes the message fits.api.mvm.v1.ContactChange. - * Use `create(ContactChangeSchema)` to create a new message. - */ -export const ContactChangeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 15); - -/** - * Response for Update; an empty response means the change was accepted. - * - * @generated from message fits.api.mvm.v1.MVMServiceUpdateResponse - */ -export type MVMServiceUpdateResponse = Message<"fits.api.mvm.v1.MVMServiceUpdateResponse"> & { -}; - -/** - * Describes the message fits.api.mvm.v1.MVMServiceUpdateResponse. - * Use `create(MVMServiceUpdateResponseSchema)` to create a new message. - */ -export const MVMServiceUpdateResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 16); - /** * Request to list MVMs. * @@ -856,7 +686,7 @@ export type MVMServiceListRequest = Message<"fits.api.mvm.v1.MVMServiceListReque * Use `create(MVMServiceListRequestSchema)` to create a new message. */ export const MVMServiceListRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 17); + messageDesc(file_fits_api_mvm_v1_mvm, 12); /** * Response containing the list of MVMs. @@ -877,7 +707,7 @@ export type MVMServiceListResponse = Message<"fits.api.mvm.v1.MVMServiceListResp * Use `create(MVMServiceListResponseSchema)` to create a new message. */ export const MVMServiceListResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 18); + messageDesc(file_fits_api_mvm_v1_mvm, 13); /** * Request to cancel a MVM instance. @@ -913,7 +743,7 @@ export type MVMServiceDeleteRequest = Message<"fits.api.mvm.v1.MVMServiceDeleteR * Use `create(MVMServiceDeleteRequestSchema)` to create a new message. */ export const MVMServiceDeleteRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 19); + messageDesc(file_fits_api_mvm_v1_mvm, 14); /** * Response for Delete; an empty response means the cancellation was accepted. @@ -928,7 +758,7 @@ export type MVMServiceDeleteResponse = Message<"fits.api.mvm.v1.MVMServiceDelete * Use `create(MVMServiceDeleteResponseSchema)` to create a new message. */ export const MVMServiceDeleteResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 20); + messageDesc(file_fits_api_mvm_v1_mvm, 15); /** * Request to validate a MVM create without creating anything. @@ -949,7 +779,7 @@ export type MVMServiceValidateCreateRequest = Message<"fits.api.mvm.v1.MVMServic * Use `create(MVMServiceValidateCreateRequestSchema)` to create a new message. */ export const MVMServiceValidateCreateRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 21); + messageDesc(file_fits_api_mvm_v1_mvm, 16); /** * Response for ValidateCreate; violations are returned as an InvalidArgument error. @@ -964,7 +794,7 @@ export type MVMServiceValidateCreateResponse = Message<"fits.api.mvm.v1.MVMServi * Use `create(MVMServiceValidateCreateResponseSchema)` to create a new message. */ export const MVMServiceValidateCreateResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 22); + messageDesc(file_fits_api_mvm_v1_mvm, 17); /** * Request to validate an AddDisk without ordering anything. @@ -985,7 +815,7 @@ export type MVMServiceValidateAddDiskRequest = Message<"fits.api.mvm.v1.MVMServi * Use `create(MVMServiceValidateAddDiskRequestSchema)` to create a new message. */ export const MVMServiceValidateAddDiskRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 23); + messageDesc(file_fits_api_mvm_v1_mvm, 18); /** * Response for ValidateAddDisk; violations are returned as an InvalidArgument error. @@ -1000,7 +830,7 @@ export type MVMServiceValidateAddDiskResponse = Message<"fits.api.mvm.v1.MVMServ * Use `create(MVMServiceValidateAddDiskResponseSchema)` to create a new message. */ export const MVMServiceValidateAddDiskResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 24); + messageDesc(file_fits_api_mvm_v1_mvm, 19); /** * Request to validate an UpdateDisk without changing anything. @@ -1021,7 +851,7 @@ export type MVMServiceValidateUpdateDiskRequest = Message<"fits.api.mvm.v1.MVMSe * Use `create(MVMServiceValidateUpdateDiskRequestSchema)` to create a new message. */ export const MVMServiceValidateUpdateDiskRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 25); + messageDesc(file_fits_api_mvm_v1_mvm, 20); /** * Response for ValidateUpdateDisk; violations are returned as an InvalidArgument error. @@ -1036,7 +866,7 @@ export type MVMServiceValidateUpdateDiskResponse = Message<"fits.api.mvm.v1.MVMS * Use `create(MVMServiceValidateUpdateDiskResponseSchema)` to create a new message. */ export const MVMServiceValidateUpdateDiskResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 26); + messageDesc(file_fits_api_mvm_v1_mvm, 21); /** * Response for AddDisk. @@ -1051,7 +881,7 @@ export type MVMServiceAddDiskResponse = Message<"fits.api.mvm.v1.MVMServiceAddDi * Use `create(MVMServiceAddDiskResponseSchema)` to create a new message. */ export const MVMServiceAddDiskResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 27); + messageDesc(file_fits_api_mvm_v1_mvm, 22); /** * Response for UpdateDisk. @@ -1066,7 +896,7 @@ export type MVMServiceUpdateDiskResponse = Message<"fits.api.mvm.v1.MVMServiceUp * Use `create(MVMServiceUpdateDiskResponseSchema)` to create a new message. */ export const MVMServiceUpdateDiskResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 28); + messageDesc(file_fits_api_mvm_v1_mvm, 23); /** * Response for DeleteDisk. @@ -1081,7 +911,7 @@ export type MVMServiceDeleteDiskResponse = Message<"fits.api.mvm.v1.MVMServiceDe * Use `create(MVMServiceDeleteDiskResponseSchema)` to create a new message. */ export const MVMServiceDeleteDiskResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 29); + messageDesc(file_fits_api_mvm_v1_mvm, 24); /** * Request to order an additional data disk for a MVM. @@ -1140,7 +970,7 @@ export type MVMServiceAddDiskRequest = Message<"fits.api.mvm.v1.MVMServiceAddDis * Use `create(MVMServiceAddDiskRequestSchema)` to create a new message. */ export const MVMServiceAddDiskRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 30); + messageDesc(file_fits_api_mvm_v1_mvm, 25); /** * Request to change an existing disk; only size and auto-extend are @@ -1198,7 +1028,7 @@ export type MVMServiceUpdateDiskRequest = Message<"fits.api.mvm.v1.MVMServiceUpd * Use `create(MVMServiceUpdateDiskRequestSchema)` to create a new message. */ export const MVMServiceUpdateDiskRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 31); + messageDesc(file_fits_api_mvm_v1_mvm, 26); /** * Request to cancel a data disk; OS and system disks are rejected by the @@ -1242,7 +1072,7 @@ export type MVMServiceDeleteDiskRequest = Message<"fits.api.mvm.v1.MVMServiceDel * Use `create(MVMServiceDeleteDiskRequestSchema)` to create a new message. */ export const MVMServiceDeleteDiskRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 32); + messageDesc(file_fits_api_mvm_v1_mvm, 27); /** * Response for AddNetworkInterface. @@ -1257,7 +1087,7 @@ export type MVMServiceAddNetworkInterfaceResponse = Message<"fits.api.mvm.v1.MVM * Use `create(MVMServiceAddNetworkInterfaceResponseSchema)` to create a new message. */ export const MVMServiceAddNetworkInterfaceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 33); + messageDesc(file_fits_api_mvm_v1_mvm, 28); /** * Response for MoveNetworkInterface. @@ -1272,7 +1102,7 @@ export type MVMServiceMoveNetworkInterfaceResponse = Message<"fits.api.mvm.v1.MV * Use `create(MVMServiceMoveNetworkInterfaceResponseSchema)` to create a new message. */ export const MVMServiceMoveNetworkInterfaceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 34); + messageDesc(file_fits_api_mvm_v1_mvm, 29); /** * Response for DeleteNetworkInterface. @@ -1287,7 +1117,7 @@ export type MVMServiceDeleteNetworkInterfaceResponse = Message<"fits.api.mvm.v1. * Use `create(MVMServiceDeleteNetworkInterfaceResponseSchema)` to create a new message. */ export const MVMServiceDeleteNetworkInterfaceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 35); + messageDesc(file_fits_api_mvm_v1_mvm, 30); /** * Request to order an additional network interface for a MVM. @@ -1325,7 +1155,7 @@ export type MVMServiceAddNetworkInterfaceRequest = Message<"fits.api.mvm.v1.MVMS * Use `create(MVMServiceAddNetworkInterfaceRequestSchema)` to create a new message. */ export const MVMServiceAddNetworkInterfaceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 36); + messageDesc(file_fits_api_mvm_v1_mvm, 31); /** * Request to move a network interface from one MVM to another. @@ -1375,7 +1205,7 @@ export type MVMServiceMoveNetworkInterfaceRequest = Message<"fits.api.mvm.v1.MVM * Use `create(MVMServiceMoveNetworkInterfaceRequestSchema)` to create a new message. */ export const MVMServiceMoveNetworkInterfaceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 37); + messageDesc(file_fits_api_mvm_v1_mvm, 32); /** * Request to delete a network interface from a MVM. @@ -1418,7 +1248,7 @@ export type MVMServiceDeleteNetworkInterfaceRequest = Message<"fits.api.mvm.v1.M * Use `create(MVMServiceDeleteNetworkInterfaceRequestSchema)` to create a new message. */ export const MVMServiceDeleteNetworkInterfaceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 38); + messageDesc(file_fits_api_mvm_v1_mvm, 33); /** * Request to validate an AddNetworkInterface without ordering anything. @@ -1439,7 +1269,7 @@ export type MVMServiceValidateAddNetworkInterfaceRequest = Message<"fits.api.mvm * Use `create(MVMServiceValidateAddNetworkInterfaceRequestSchema)` to create a new message. */ export const MVMServiceValidateAddNetworkInterfaceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 39); + messageDesc(file_fits_api_mvm_v1_mvm, 34); /** * Response for ValidateAddNetworkInterface; violations are returned as an InvalidArgument error. @@ -1454,7 +1284,7 @@ export type MVMServiceValidateAddNetworkInterfaceResponse = Message<"fits.api.mv * Use `create(MVMServiceValidateAddNetworkInterfaceResponseSchema)` to create a new message. */ export const MVMServiceValidateAddNetworkInterfaceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 40); + messageDesc(file_fits_api_mvm_v1_mvm, 35); /** * Availability specifies the availability level of a MVM; higher value = higher availability. @@ -1666,16 +1496,6 @@ export const MVMService: GenService<{ input: typeof MVMServiceCreateRequestSchema; output: typeof MVMServiceCreateResponseSchema; }, - /** - * Updates a MVM. - * - * @generated from rpc fits.api.mvm.v1.MVMService.Update - */ - update: { - methodKind: "unary"; - input: typeof MVMServiceUpdateRequestSchema; - output: typeof MVMServiceUpdateResponseSchema; - }, /** * Returns the list of all MVMs. * diff --git a/proto/fits/api/mvm/v1/mvm.proto b/proto/fits/api/mvm/v1/mvm.proto index ccb2607..d019a2e 100644 --- a/proto/fits/api/mvm/v1/mvm.proto +++ b/proto/fits/api/mvm/v1/mvm.proto @@ -22,12 +22,7 @@ service MVMService { option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_INCLUDED; } - // Updates a MVM. - rpc Update(MVMServiceUpdateRequest) returns (MVMServiceUpdateResponse) { - option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; - option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; - option (fits.api.v1.auditing) = AUDITING_INCLUDED; - } + // Returns the list of all MVMs. rpc List(MVMServiceListRequest) returns (MVMServiceListResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; @@ -378,66 +373,6 @@ message WindowsDisk { // Response for Create; an empty response means the MVM was accepted. message MVMServiceCreateResponse {} -// Request to change a mutable property of an existing MVM. -// Exactly one action must be set; each maps onto its own upstream endpoint. -// TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per -// action); combined changes would need -// server-side fan-out without rollback. -// TODO: clarify async semantics — this is a queued "request to update", not an -// immediate update (e.g. disk changes are applied overnight). Consider -// renaming to reflect that. -// TODO: differentiate between fire-and-forget and queued actions in the API. -// TODO: is it possible to expose the pending-change queue (list/cancel) to the caller? -// TODO: clarify who enqueues the request and whether a pending change blocks -// further edits (e.g. after AddDisk, until the change executes). -message MVMServiceUpdateRequest { - // UUID of the MVM to update. - string uuid = 1 [(buf.validate.field).string.uuid = true]; - // Project the MVM belongs to. - string project = 2 [(buf.validate.field).string.uuid = true]; - // Order reference for this operation. - // TODO: can this be optional? - string order_number = 3; - // Timestamp and strategy for this update. - fits.api.v1.UpdateMeta update_meta = 4 [(buf.validate.field).required = true]; - // The change to apply. - oneof action { - option (buf.validate.oneof).required = true; - // Change the CPU/RAM performance class. - PerformanceClassChange performance_class = 5; - // Change the service class. - ServiceClassChange service_class = 6; - // Change the contact person. - ContactChange contact = 7; - } -} - -// PerformanceClassChange is the payload for changing a MVM's CPU and RAM. -message PerformanceClassChange { - // Number of vCPUs (1-64). - uint32 cpu = 1 [ - (buf.validate.field).uint32.gte = 1, - (buf.validate.field).uint32.lte = 64 - ]; - // RAM size in GB. - uint32 ram = 2 [(buf.validate.field).uint32.gt = 0]; -} - -// ServiceClassChange is the payload for changing a MVM's service class. -message ServiceClassChange { - // Target service class. - ServiceClass serviceclass = 1 [(buf.validate.field).enum.defined_only = true]; -} - -// ContactChange is the payload for changing a MVM's contact person. -message ContactChange { - // UUID of the new contact. - string contact_uuid = 1 [(buf.validate.field).string.uuid = true]; -} - -// Response for Update; an empty response means the change was accepted. -message MVMServiceUpdateResponse {} - // Request to list MVMs. message MVMServiceListRequest { // Tenant of the MVMs. diff --git a/python/fits/api/mvm/v1/mvm_connect.py b/python/fits/api/mvm/v1/mvm_connect.py index 2a95968..1da90f1 100644 --- a/python/fits/api/mvm/v1/mvm_connect.py +++ b/python/fits/api/mvm/v1/mvm_connect.py @@ -24,9 +24,6 @@ async def get(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMService async def create(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - async def update(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - async def list(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") @@ -89,16 +86,6 @@ def __init__(self, service: MVMService | AsyncGenerator[MVMService], *, intercep ), function=svc.create, ), - "/fits.api.mvm.v1.MVMService/Update": Endpoint.unary( - method=MethodInfo( - name="Update", - service_name="fits.api.mvm.v1.MVMService", - input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, - output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.update, - ), "/fits.api.mvm.v1.MVMService/List": Endpoint.unary( method=MethodInfo( name="List", @@ -273,26 +260,6 @@ async def create( timeout_ms=timeout_ms, ) - async def update( - self, - request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="Update", - service_name="fits.api.mvm.v1.MVMService", - input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, - output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - async def list( self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, @@ -542,8 +509,6 @@ def get(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetReq raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") def create(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def update(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") def list(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") def delete(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteResponse: @@ -594,16 +559,6 @@ def __init__(self, service: MVMServiceSync, interceptors: Iterable[InterceptorSy ), function=service.create, ), - "/fits.api.mvm.v1.MVMService/Update": EndpointSync.unary( - method=MethodInfo( - name="Update", - service_name="fits.api.mvm.v1.MVMService", - input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, - output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.update, - ), "/fits.api.mvm.v1.MVMService/List": EndpointSync.unary( method=MethodInfo( name="List", @@ -778,26 +733,6 @@ def create( timeout_ms=timeout_ms, ) - def update( - self, - request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="Update", - service_name="fits.api.mvm.v1.MVMService", - input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, - output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - def list( self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, diff --git a/python/fits/api/mvm/v1/mvm_pb2.py b/python/fits/api/mvm/v1/mvm_pb2.py index 6d5fdba..cb71ad6 100644 --- a/python/fits/api/mvm/v1/mvm_pb2.py +++ b/python/fits/api/mvm/v1/mvm_pb2.py @@ -28,7 +28,7 @@ from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/mvm/v1/mvm.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1a\x66its/api/mvm/v1/vlan.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x91\x01\n\x0cLinuxDetails\x12\x30\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskR\x05\x64isks\x12%\n\tldap_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12(\n\tldap_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08ldapFqdn\"\x9d\x01\n\x0eWindowsDetails\x12\x32\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskR\x05\x64isks\x12)\n\x0b\x64omain_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12,\n\x0b\x64omain_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\ndomainFqdn\"{\n\x10NetworkInterface\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n\tipaddress\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xe8\xb3\xae\xb1\x02\x01R\tipaddress\x12\x1e\n\nmacaddress\x18\x03 \x01(\tR\nmacaddress\"\xac\x07\n\tManagedVM\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04\x66qdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04\x66qdn\x12#\n\x06tenant\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n\x0cproject_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12!\n\x07os_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\t \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\n \x01(\rR\x03ram\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12<\n\x06status\x18\x0c \x01(\x0e\x32\x1a.fits.api.mvm.v1.MVMStatusB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12\x1f\n\x0bstatus_info\x18\r \x01(\tR\nstatusInfo\x12K\n\x0c\x61vailability\x18\x0e \x01(\x0e\x32\x1d.fits.api.mvm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12K\n\x0cserviceclass\x18\x0f \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12J\n\x0fwindows_details\x18\x10 \x01(\x0b\x32\x1f.fits.api.mvm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12\x44\n\rlinux_details\x18\x11 \x01(\x0b\x32\x1d.fits.api.mvm.v1.LinuxDetailsH\x00R\x0clinuxDetails\x12\x41\n\ninterfaces\x18\x12 \x03(\x0b\x32!.fits.api.mvm.v1.NetworkInterfaceR\ninterfaces\x12)\n\x04vlan\x18\x13 \x01(\x0b\x32\x15.fits.api.mvm.v1.VLANR\x04vlan\x12!\n\x0corder_number\x18\x14 \x01(\tR\x0borderNumberB\x10\n\x07\x64\x65tails\x12\x05\xbaH\x02\x08\x01\"g\n\x14MVMServiceGetRequest\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12#\n\x06tenant\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x07\n\x05_uuid\"E\n\x15MVMServiceGetResponse\x12,\n\x03mvm\x18\x01 \x01(\x0b\x32\x1a.fits.api.mvm.v1.ManagedVMR\x03mvm\"\x89\x01\n\x1eMVMServiceCreateWindowsRequest\x12)\n\x0b\x64omain_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12<\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\x81\x01\n\x1cMVMServiceCreateLinuxRequest\x12%\n\tldap_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12:\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\xe7\x05\n\x17MVMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n\x07os_uuid\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\x07 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x08 \x01(\rR\x03ram\x12!\n\x0corder_number\x18\t \x01(\tR\x0borderNumber\x12+\n\x06labels\x18\n \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12K\n\x0c\x61vailability\x18\x0c \x01(\x0e\x32\x1d.fits.api.mvm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12K\n\x0cserviceclass\x18\r \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12K\n\x07windows\x18\x0e \x01(\x0b\x32/.fits.api.mvm.v1.MVMServiceCreateWindowsRequestH\x00R\x07windows\x12\x45\n\x05linux\x18\x0f \x01(\x0b\x32-.fits.api.mvm.v1.MVMServiceCreateLinuxRequestH\x00R\x05linuxB\x10\n\x07mvmtype\x12\x05\xbaH\x02\x08\x01\x42\x07\n\x05_name\"\x9b\x02\n\tLinuxDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x02R\nmountPoint\x88\x01\x01\x12\x45\n\tdisk_type\x18\x06 \x01(\x0e\x32\x19.fits.api.mvm.v1.DiskTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x08\x64iskType\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_mount_pointB\x0c\n\n_disk_type\"\x9e\x02\n\x0bWindowsDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12%\n\x0b\x64riveletter\x18\x05 \x01(\tH\x02R\x0b\x64riveletter\x88\x01\x01\x12\x45\n\tdisk_type\x18\x06 \x01(\x0e\x32\x19.fits.api.mvm.v1.DiskTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x08\x64iskType\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_driveletterB\x0c\n\n_disk_type\"\x1a\n\x18MVMServiceCreateResponse\"\xb1\x03\n\x17MVMServiceUpdateRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12@\n\x0bupdate_meta\x18\x04 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12V\n\x11performance_class\x18\x05 \x01(\x0b\x32\'.fits.api.mvm.v1.PerformanceClassChangeH\x00R\x10performanceClass\x12J\n\rservice_class\x18\x06 \x01(\x0b\x32#.fits.api.mvm.v1.ServiceClassChangeH\x00R\x0cserviceClass\x12:\n\x07\x63ontact\x18\x07 \x01(\x0b\x32\x1e.fits.api.mvm.v1.ContactChangeH\x00R\x07\x63ontactB\x0f\n\x06\x61\x63tion\x12\x05\xbaH\x02\x08\x01\"P\n\x16PerformanceClassChange\x12\x1b\n\x03\x63pu\x18\x01 \x01(\rB\t\xbaH\x06*\x04\x18@(\x01R\x03\x63pu\x12\x19\n\x03ram\x18\x02 \x01(\rB\x07\xbaH\x04*\x02 \x00R\x03ram\"a\n\x12ServiceClassChange\x12K\n\x0cserviceclass\x18\x01 \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\"<\n\rContactChange\x12+\n\x0c\x63ontact_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\"\x1a\n\x18MVMServiceUpdateResponse\"L\n\x15MVMServiceListRequest\x12(\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01\x42\t\n\x07_tenant\"H\n\x16MVMServiceListResponse\x12.\n\x04mvms\x18\x01 \x03(\x0b\x32\x1a.fits.api.mvm.v1.ManagedVMR\x04mvms\"~\n\x17MVMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x1c\n\x04uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\x1a\n\x18MVMServiceDeleteResponse\"k\n\x1fMVMServiceValidateCreateRequest\x12H\n\x06\x63reate\x18\x01 \x01(\x0b\x32(.fits.api.mvm.v1.MVMServiceCreateRequestB\x06\xbaH\x03\xc8\x01\x01R\x06\x63reate\"\"\n MVMServiceValidateCreateResponse\"p\n MVMServiceValidateAddDiskRequest\x12L\n\x08\x61\x64\x64_disk\x18\x01 \x01(\x0b\x32).fits.api.mvm.v1.MVMServiceAddDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\x07\x61\x64\x64\x44isk\"#\n!MVMServiceValidateAddDiskResponse\"|\n#MVMServiceValidateUpdateDiskRequest\x12U\n\x0bupdate_disk\x18\x01 \x01(\x0b\x32,.fits.api.mvm.v1.MVMServiceUpdateDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\nupdateDisk\"&\n$MVMServiceValidateUpdateDiskResponse\"\x1b\n\x19MVMServiceAddDiskResponse\"\x1e\n\x1cMVMServiceUpdateDiskResponse\"\x1e\n\x1cMVMServiceDeleteDiskResponse\"\xfc\x01\n\x18MVMServiceAddDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12\x32\n\x05linux\x18\x04 \x01(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskH\x00R\x05linux\x12\x38\n\x07windows\x18\x05 \x01(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskH\x00R\x07windowsB\r\n\x04\x64isk\x12\x05\xbaH\x02\x08\x01\"\x81\x02\n\x1bMVMServiceUpdateDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12$\n\x0b\x61uto_extend\x18\x05 \x01(\x08H\x00R\nautoExtend\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\x04H\x01R\x04size\x88\x01\x01\x42\x0e\n\x0c_auto_extendB\x07\n\x05_size\"\xa9\x01\n\x1bMVMServiceDeleteDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\'\n%MVMServiceAddNetworkInterfaceResponse\"(\n&MVMServiceMoveNetworkInterfaceResponse\"*\n(MVMServiceDeleteNetworkInterfaceResponse\"\x8b\x01\n$MVMServiceAddNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\xef\x01\n%MVMServiceMoveNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12\x30\n\x0ftarget_mvm_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtargetMvmUuid\"\xbf\x01\n\'MVMServiceDeleteNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\xa1\x01\n,MVMServiceValidateAddNetworkInterfaceRequest\x12q\n\x15\x61\x64\x64_network_interface\x18\x01 \x01(\x0b\x32\x35.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequestB\x06\xbaH\x03\xc8\x01\x01R\x13\x61\x64\x64NetworkInterface\"/\n-MVMServiceValidateAddNetworkInterfaceResponse*\xa6\x01\n\x0c\x41vailability\x12\"\n\x18\x41VAILABILITY_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1b\n\x0f\x41VAILABILITY_V0\x10\x01\x1a\x06\x82\xb2\x19\x02V0\x12\x1b\n\x0f\x41VAILABILITY_V1\x10\x02\x1a\x06\x82\xb2\x19\x02V1\x12\x1b\n\x0f\x41VAILABILITY_V2\x10\x03\x1a\x06\x82\xb2\x19\x02V2\x12\x1b\n\x0f\x41VAILABILITY_V3\x10\x04\x1a\x06\x82\xb2\x19\x02V3*\x93\x01\n\x0cServiceClass\x12#\n\x19SERVICE_CLASS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1e\n\x11SERVICE_CLASS_SZ1\x10\x01\x1a\x07\x82\xb2\x19\x03SZ1\x12\x1e\n\x11SERVICE_CLASS_SZ2\x10\x02\x1a\x07\x82\xb2\x19\x03SZ2\x12\x1e\n\x11SERVICE_CLASS_SZ3\x10\x03\x1a\x07\x82\xb2\x19\x03SZ3*P\n\tMVMStatus\x12 \n\x16MVM_STATUS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12!\n\x11MVM_STATUS_ACTIVE\x10\x01\x1a\n\x82\xb2\x19\x06\x61\x63tive*\x85\x01\n\x08\x44iskType\x12\x1f\n\x15\x44ISK_TYPE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x18\n\x0c\x44ISK_TYPE_OS\x10\x01\x1a\x06\x82\xb2\x19\x02os\x12 \n\x10\x44ISK_TYPE_SYSTEM\x10\x02\x1a\n\x82\xb2\x19\x06system\x12\x1c\n\x0e\x44ISK_TYPE_DATA\x10\x03\x1a\x08\x82\xb2\x19\x04\x64\x61ta2\xfd\x0e\n\nMVMService\x12\x61\n\x03Get\x12%.fits.api.mvm.v1.MVMServiceGetRequest\x1a&.fits.api.mvm.v1.MVMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x43reate\x12(.fits.api.mvm.v1.MVMServiceCreateRequest\x1a).fits.api.mvm.v1.MVMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12i\n\x06Update\x12(.fits.api.mvm.v1.MVMServiceUpdateRequest\x1a).fits.api.mvm.v1.MVMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x64\n\x04List\x12&.fits.api.mvm.v1.MVMServiceListRequest\x1a\'.fits.api.mvm.v1.MVMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x44\x65lete\x12(.fits.api.mvm.v1.MVMServiceDeleteRequest\x1a).fits.api.mvm.v1.MVMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12l\n\x07\x41\x64\x64\x44isk\x12).fits.api.mvm.v1.MVMServiceAddDiskRequest\x1a*.fits.api.mvm.v1.MVMServiceAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\nUpdateDisk\x12,.fits.api.mvm.v1.MVMServiceUpdateDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\nDeleteDisk\x12,.fits.api.mvm.v1.MVMServiceDeleteDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceDeleteDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x90\x01\n\x13\x41\x64\x64NetworkInterface\x12\x35.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest\x1a\x36.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x93\x01\n\x14MoveNetworkInterface\x12\x36.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest\x1a\x37.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x99\x01\n\x16\x44\x65leteNetworkInterface\x12\x38.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest\x1a\x39.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x81\x01\n\x0eValidateCreate\x12\x30.fits.api.mvm.v1.MVMServiceValidateCreateRequest\x1a\x31.fits.api.mvm.v1.MVMServiceValidateCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x84\x01\n\x0fValidateAddDisk\x12\x31.fits.api.mvm.v1.MVMServiceValidateAddDiskRequest\x1a\x32.fits.api.mvm.v1.MVMServiceValidateAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x8d\x01\n\x12ValidateUpdateDisk\x12\x34.fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest\x1a\x35.fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\xa8\x01\n\x1bValidateAddNetworkInterface\x12=.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest\x1a>.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x42\xad\x01\n\x13\x63om.fits.api.mvm.v1B\x08MvmProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/mvm/v1/mvm.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1a\x66its/api/mvm/v1/vlan.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x91\x01\n\x0cLinuxDetails\x12\x30\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskR\x05\x64isks\x12%\n\tldap_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12(\n\tldap_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08ldapFqdn\"\x9d\x01\n\x0eWindowsDetails\x12\x32\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskR\x05\x64isks\x12)\n\x0b\x64omain_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12,\n\x0b\x64omain_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\ndomainFqdn\"{\n\x10NetworkInterface\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n\tipaddress\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xe8\xb3\xae\xb1\x02\x01R\tipaddress\x12\x1e\n\nmacaddress\x18\x03 \x01(\tR\nmacaddress\"\xac\x07\n\tManagedVM\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04\x66qdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04\x66qdn\x12#\n\x06tenant\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n\x0cproject_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12!\n\x07os_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\t \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\n \x01(\rR\x03ram\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12<\n\x06status\x18\x0c \x01(\x0e\x32\x1a.fits.api.mvm.v1.MVMStatusB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12\x1f\n\x0bstatus_info\x18\r \x01(\tR\nstatusInfo\x12K\n\x0c\x61vailability\x18\x0e \x01(\x0e\x32\x1d.fits.api.mvm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12K\n\x0cserviceclass\x18\x0f \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12J\n\x0fwindows_details\x18\x10 \x01(\x0b\x32\x1f.fits.api.mvm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12\x44\n\rlinux_details\x18\x11 \x01(\x0b\x32\x1d.fits.api.mvm.v1.LinuxDetailsH\x00R\x0clinuxDetails\x12\x41\n\ninterfaces\x18\x12 \x03(\x0b\x32!.fits.api.mvm.v1.NetworkInterfaceR\ninterfaces\x12)\n\x04vlan\x18\x13 \x01(\x0b\x32\x15.fits.api.mvm.v1.VLANR\x04vlan\x12!\n\x0corder_number\x18\x14 \x01(\tR\x0borderNumberB\x10\n\x07\x64\x65tails\x12\x05\xbaH\x02\x08\x01\"g\n\x14MVMServiceGetRequest\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12#\n\x06tenant\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x07\n\x05_uuid\"E\n\x15MVMServiceGetResponse\x12,\n\x03mvm\x18\x01 \x01(\x0b\x32\x1a.fits.api.mvm.v1.ManagedVMR\x03mvm\"\x89\x01\n\x1eMVMServiceCreateWindowsRequest\x12)\n\x0b\x64omain_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12<\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\x81\x01\n\x1cMVMServiceCreateLinuxRequest\x12%\n\tldap_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12:\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\xe7\x05\n\x17MVMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n\x07os_uuid\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\x07 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x08 \x01(\rR\x03ram\x12!\n\x0corder_number\x18\t \x01(\tR\x0borderNumber\x12+\n\x06labels\x18\n \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12K\n\x0c\x61vailability\x18\x0c \x01(\x0e\x32\x1d.fits.api.mvm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12K\n\x0cserviceclass\x18\r \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12K\n\x07windows\x18\x0e \x01(\x0b\x32/.fits.api.mvm.v1.MVMServiceCreateWindowsRequestH\x00R\x07windows\x12\x45\n\x05linux\x18\x0f \x01(\x0b\x32-.fits.api.mvm.v1.MVMServiceCreateLinuxRequestH\x00R\x05linuxB\x10\n\x07mvmtype\x12\x05\xbaH\x02\x08\x01\x42\x07\n\x05_name\"\x9b\x02\n\tLinuxDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x02R\nmountPoint\x88\x01\x01\x12\x45\n\tdisk_type\x18\x06 \x01(\x0e\x32\x19.fits.api.mvm.v1.DiskTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x08\x64iskType\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_mount_pointB\x0c\n\n_disk_type\"\x9e\x02\n\x0bWindowsDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12%\n\x0b\x64riveletter\x18\x05 \x01(\tH\x02R\x0b\x64riveletter\x88\x01\x01\x12\x45\n\tdisk_type\x18\x06 \x01(\x0e\x32\x19.fits.api.mvm.v1.DiskTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x08\x64iskType\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_driveletterB\x0c\n\n_disk_type\"\x1a\n\x18MVMServiceCreateResponse\"L\n\x15MVMServiceListRequest\x12(\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01\x42\t\n\x07_tenant\"H\n\x16MVMServiceListResponse\x12.\n\x04mvms\x18\x01 \x03(\x0b\x32\x1a.fits.api.mvm.v1.ManagedVMR\x04mvms\"~\n\x17MVMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x1c\n\x04uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\x1a\n\x18MVMServiceDeleteResponse\"k\n\x1fMVMServiceValidateCreateRequest\x12H\n\x06\x63reate\x18\x01 \x01(\x0b\x32(.fits.api.mvm.v1.MVMServiceCreateRequestB\x06\xbaH\x03\xc8\x01\x01R\x06\x63reate\"\"\n MVMServiceValidateCreateResponse\"p\n MVMServiceValidateAddDiskRequest\x12L\n\x08\x61\x64\x64_disk\x18\x01 \x01(\x0b\x32).fits.api.mvm.v1.MVMServiceAddDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\x07\x61\x64\x64\x44isk\"#\n!MVMServiceValidateAddDiskResponse\"|\n#MVMServiceValidateUpdateDiskRequest\x12U\n\x0bupdate_disk\x18\x01 \x01(\x0b\x32,.fits.api.mvm.v1.MVMServiceUpdateDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\nupdateDisk\"&\n$MVMServiceValidateUpdateDiskResponse\"\x1b\n\x19MVMServiceAddDiskResponse\"\x1e\n\x1cMVMServiceUpdateDiskResponse\"\x1e\n\x1cMVMServiceDeleteDiskResponse\"\xfc\x01\n\x18MVMServiceAddDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12\x32\n\x05linux\x18\x04 \x01(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskH\x00R\x05linux\x12\x38\n\x07windows\x18\x05 \x01(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskH\x00R\x07windowsB\r\n\x04\x64isk\x12\x05\xbaH\x02\x08\x01\"\x81\x02\n\x1bMVMServiceUpdateDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12$\n\x0b\x61uto_extend\x18\x05 \x01(\x08H\x00R\nautoExtend\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\x04H\x01R\x04size\x88\x01\x01\x42\x0e\n\x0c_auto_extendB\x07\n\x05_size\"\xa9\x01\n\x1bMVMServiceDeleteDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\'\n%MVMServiceAddNetworkInterfaceResponse\"(\n&MVMServiceMoveNetworkInterfaceResponse\"*\n(MVMServiceDeleteNetworkInterfaceResponse\"\x8b\x01\n$MVMServiceAddNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\xef\x01\n%MVMServiceMoveNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12\x30\n\x0ftarget_mvm_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtargetMvmUuid\"\xbf\x01\n\'MVMServiceDeleteNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\xa1\x01\n,MVMServiceValidateAddNetworkInterfaceRequest\x12q\n\x15\x61\x64\x64_network_interface\x18\x01 \x01(\x0b\x32\x35.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequestB\x06\xbaH\x03\xc8\x01\x01R\x13\x61\x64\x64NetworkInterface\"/\n-MVMServiceValidateAddNetworkInterfaceResponse*\xa6\x01\n\x0c\x41vailability\x12\"\n\x18\x41VAILABILITY_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1b\n\x0f\x41VAILABILITY_V0\x10\x01\x1a\x06\x82\xb2\x19\x02V0\x12\x1b\n\x0f\x41VAILABILITY_V1\x10\x02\x1a\x06\x82\xb2\x19\x02V1\x12\x1b\n\x0f\x41VAILABILITY_V2\x10\x03\x1a\x06\x82\xb2\x19\x02V2\x12\x1b\n\x0f\x41VAILABILITY_V3\x10\x04\x1a\x06\x82\xb2\x19\x02V3*\x93\x01\n\x0cServiceClass\x12#\n\x19SERVICE_CLASS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1e\n\x11SERVICE_CLASS_SZ1\x10\x01\x1a\x07\x82\xb2\x19\x03SZ1\x12\x1e\n\x11SERVICE_CLASS_SZ2\x10\x02\x1a\x07\x82\xb2\x19\x03SZ2\x12\x1e\n\x11SERVICE_CLASS_SZ3\x10\x03\x1a\x07\x82\xb2\x19\x03SZ3*P\n\tMVMStatus\x12 \n\x16MVM_STATUS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12!\n\x11MVM_STATUS_ACTIVE\x10\x01\x1a\n\x82\xb2\x19\x06\x61\x63tive*\x85\x01\n\x08\x44iskType\x12\x1f\n\x15\x44ISK_TYPE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x18\n\x0c\x44ISK_TYPE_OS\x10\x01\x1a\x06\x82\xb2\x19\x02os\x12 \n\x10\x44ISK_TYPE_SYSTEM\x10\x02\x1a\n\x82\xb2\x19\x06system\x12\x1c\n\x0e\x44ISK_TYPE_DATA\x10\x03\x1a\x08\x82\xb2\x19\x04\x64\x61ta2\x92\x0e\n\nMVMService\x12\x61\n\x03Get\x12%.fits.api.mvm.v1.MVMServiceGetRequest\x1a&.fits.api.mvm.v1.MVMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x43reate\x12(.fits.api.mvm.v1.MVMServiceCreateRequest\x1a).fits.api.mvm.v1.MVMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x64\n\x04List\x12&.fits.api.mvm.v1.MVMServiceListRequest\x1a\'.fits.api.mvm.v1.MVMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x44\x65lete\x12(.fits.api.mvm.v1.MVMServiceDeleteRequest\x1a).fits.api.mvm.v1.MVMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12l\n\x07\x41\x64\x64\x44isk\x12).fits.api.mvm.v1.MVMServiceAddDiskRequest\x1a*.fits.api.mvm.v1.MVMServiceAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\nUpdateDisk\x12,.fits.api.mvm.v1.MVMServiceUpdateDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\nDeleteDisk\x12,.fits.api.mvm.v1.MVMServiceDeleteDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceDeleteDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x90\x01\n\x13\x41\x64\x64NetworkInterface\x12\x35.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest\x1a\x36.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x93\x01\n\x14MoveNetworkInterface\x12\x36.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest\x1a\x37.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x99\x01\n\x16\x44\x65leteNetworkInterface\x12\x38.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest\x1a\x39.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x81\x01\n\x0eValidateCreate\x12\x30.fits.api.mvm.v1.MVMServiceValidateCreateRequest\x1a\x31.fits.api.mvm.v1.MVMServiceValidateCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x84\x01\n\x0fValidateAddDisk\x12\x31.fits.api.mvm.v1.MVMServiceValidateAddDiskRequest\x1a\x32.fits.api.mvm.v1.MVMServiceValidateAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x8d\x01\n\x12ValidateUpdateDisk\x12\x34.fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest\x1a\x35.fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\xa8\x01\n\x1bValidateAddNetworkInterface\x12=.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest\x1a>.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x42\xad\x01\n\x13\x63om.fits.api.mvm.v1B\x08MvmProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -138,22 +138,6 @@ _globals['_WINDOWSDISK'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_WINDOWSDISK'].fields_by_name['disk_type']._loaded_options = None _globals['_WINDOWSDISK'].fields_by_name['disk_type']._serialized_options = b'\272H\005\202\001\002\020\001' - _globals['_MVMSERVICEUPDATEREQUEST'].oneofs_by_name['action']._loaded_options = None - _globals['_MVMSERVICEUPDATEREQUEST'].oneofs_by_name['action']._serialized_options = b'\272H\002\010\001' - _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['uuid']._loaded_options = None - _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['project']._loaded_options = None - _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' - _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._loaded_options = None - _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._serialized_options = b'\272H\003\310\001\001' - _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['cpu']._loaded_options = None - _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['cpu']._serialized_options = b'\272H\006*\004\030@(\001' - _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['ram']._loaded_options = None - _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['ram']._serialized_options = b'\272H\004*\002 \000' - _globals['_SERVICECLASSCHANGE'].fields_by_name['serviceclass']._loaded_options = None - _globals['_SERVICECLASSCHANGE'].fields_by_name['serviceclass']._serialized_options = b'\272H\005\202\001\002\020\001' - _globals['_CONTACTCHANGE'].fields_by_name['contact_uuid']._loaded_options = None - _globals['_CONTACTCHANGE'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_MVMSERVICELISTREQUEST'].fields_by_name['tenant']._loaded_options = None _globals['_MVMSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_MVMSERVICEDELETEREQUEST'].fields_by_name['project']._loaded_options = None @@ -208,8 +192,6 @@ _globals['_MVMSERVICE'].methods_by_name['Get']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' _globals['_MVMSERVICE'].methods_by_name['Create']._loaded_options = None _globals['_MVMSERVICE'].methods_by_name['Create']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' - _globals['_MVMSERVICE'].methods_by_name['Update']._loaded_options = None - _globals['_MVMSERVICE'].methods_by_name['Update']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' _globals['_MVMSERVICE'].methods_by_name['List']._loaded_options = None _globals['_MVMSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' _globals['_MVMSERVICE'].methods_by_name['Delete']._loaded_options = None @@ -234,14 +216,14 @@ _globals['_MVMSERVICE'].methods_by_name['ValidateUpdateDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' _globals['_MVMSERVICE'].methods_by_name['ValidateAddNetworkInterface']._loaded_options = None _globals['_MVMSERVICE'].methods_by_name['ValidateAddNetworkInterface']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' - _globals['_AVAILABILITY']._serialized_start=6514 - _globals['_AVAILABILITY']._serialized_end=6680 - _globals['_SERVICECLASS']._serialized_start=6683 - _globals['_SERVICECLASS']._serialized_end=6830 - _globals['_MVMSTATUS']._serialized_start=6832 - _globals['_MVMSTATUS']._serialized_end=6912 - _globals['_DISKTYPE']._serialized_start=6915 - _globals['_DISKTYPE']._serialized_end=7048 + _globals['_AVAILABILITY']._serialized_start=5807 + _globals['_AVAILABILITY']._serialized_end=5973 + _globals['_SERVICECLASS']._serialized_start=5976 + _globals['_SERVICECLASS']._serialized_end=6123 + _globals['_MVMSTATUS']._serialized_start=6125 + _globals['_MVMSTATUS']._serialized_end=6205 + _globals['_DISKTYPE']._serialized_start=6208 + _globals['_DISKTYPE']._serialized_end=6341 _globals['_LINUXDETAILS']._serialized_start=166 _globals['_LINUXDETAILS']._serialized_end=311 _globals['_WINDOWSDETAILS']._serialized_start=314 @@ -266,64 +248,54 @@ _globals['_WINDOWSDISK']._serialized_end=3308 _globals['_MVMSERVICECREATERESPONSE']._serialized_start=3310 _globals['_MVMSERVICECREATERESPONSE']._serialized_end=3336 - _globals['_MVMSERVICEUPDATEREQUEST']._serialized_start=3339 - _globals['_MVMSERVICEUPDATEREQUEST']._serialized_end=3772 - _globals['_PERFORMANCECLASSCHANGE']._serialized_start=3774 - _globals['_PERFORMANCECLASSCHANGE']._serialized_end=3854 - _globals['_SERVICECLASSCHANGE']._serialized_start=3856 - _globals['_SERVICECLASSCHANGE']._serialized_end=3953 - _globals['_CONTACTCHANGE']._serialized_start=3955 - _globals['_CONTACTCHANGE']._serialized_end=4015 - _globals['_MVMSERVICEUPDATERESPONSE']._serialized_start=4017 - _globals['_MVMSERVICEUPDATERESPONSE']._serialized_end=4043 - _globals['_MVMSERVICELISTREQUEST']._serialized_start=4045 - _globals['_MVMSERVICELISTREQUEST']._serialized_end=4121 - _globals['_MVMSERVICELISTRESPONSE']._serialized_start=4123 - _globals['_MVMSERVICELISTRESPONSE']._serialized_end=4195 - _globals['_MVMSERVICEDELETEREQUEST']._serialized_start=4197 - _globals['_MVMSERVICEDELETEREQUEST']._serialized_end=4323 - _globals['_MVMSERVICEDELETERESPONSE']._serialized_start=4325 - _globals['_MVMSERVICEDELETERESPONSE']._serialized_end=4351 - _globals['_MVMSERVICEVALIDATECREATEREQUEST']._serialized_start=4353 - _globals['_MVMSERVICEVALIDATECREATEREQUEST']._serialized_end=4460 - _globals['_MVMSERVICEVALIDATECREATERESPONSE']._serialized_start=4462 - _globals['_MVMSERVICEVALIDATECREATERESPONSE']._serialized_end=4496 - _globals['_MVMSERVICEVALIDATEADDDISKREQUEST']._serialized_start=4498 - _globals['_MVMSERVICEVALIDATEADDDISKREQUEST']._serialized_end=4610 - _globals['_MVMSERVICEVALIDATEADDDISKRESPONSE']._serialized_start=4612 - _globals['_MVMSERVICEVALIDATEADDDISKRESPONSE']._serialized_end=4647 - _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_start=4649 - _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_end=4773 - _globals['_MVMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_start=4775 - _globals['_MVMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_end=4813 - _globals['_MVMSERVICEADDDISKRESPONSE']._serialized_start=4815 - _globals['_MVMSERVICEADDDISKRESPONSE']._serialized_end=4842 - _globals['_MVMSERVICEUPDATEDISKRESPONSE']._serialized_start=4844 - _globals['_MVMSERVICEUPDATEDISKRESPONSE']._serialized_end=4874 - _globals['_MVMSERVICEDELETEDISKRESPONSE']._serialized_start=4876 - _globals['_MVMSERVICEDELETEDISKRESPONSE']._serialized_end=4906 - _globals['_MVMSERVICEADDDISKREQUEST']._serialized_start=4909 - _globals['_MVMSERVICEADDDISKREQUEST']._serialized_end=5161 - _globals['_MVMSERVICEUPDATEDISKREQUEST']._serialized_start=5164 - _globals['_MVMSERVICEUPDATEDISKREQUEST']._serialized_end=5421 - _globals['_MVMSERVICEDELETEDISKREQUEST']._serialized_start=5424 - _globals['_MVMSERVICEDELETEDISKREQUEST']._serialized_end=5593 - _globals['_MVMSERVICEADDNETWORKINTERFACERESPONSE']._serialized_start=5595 - _globals['_MVMSERVICEADDNETWORKINTERFACERESPONSE']._serialized_end=5634 - _globals['_MVMSERVICEMOVENETWORKINTERFACERESPONSE']._serialized_start=5636 - _globals['_MVMSERVICEMOVENETWORKINTERFACERESPONSE']._serialized_end=5676 - _globals['_MVMSERVICEDELETENETWORKINTERFACERESPONSE']._serialized_start=5678 - _globals['_MVMSERVICEDELETENETWORKINTERFACERESPONSE']._serialized_end=5720 - _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST']._serialized_start=5723 - _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST']._serialized_end=5862 - _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST']._serialized_start=5865 - _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST']._serialized_end=6104 - _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST']._serialized_start=6107 - _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST']._serialized_end=6298 - _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST']._serialized_start=6301 - _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST']._serialized_end=6462 - _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACERESPONSE']._serialized_start=6464 - _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACERESPONSE']._serialized_end=6511 - _globals['_MVMSERVICE']._serialized_start=7051 - _globals['_MVMSERVICE']._serialized_end=8968 + _globals['_MVMSERVICELISTREQUEST']._serialized_start=3338 + _globals['_MVMSERVICELISTREQUEST']._serialized_end=3414 + _globals['_MVMSERVICELISTRESPONSE']._serialized_start=3416 + _globals['_MVMSERVICELISTRESPONSE']._serialized_end=3488 + _globals['_MVMSERVICEDELETEREQUEST']._serialized_start=3490 + _globals['_MVMSERVICEDELETEREQUEST']._serialized_end=3616 + _globals['_MVMSERVICEDELETERESPONSE']._serialized_start=3618 + _globals['_MVMSERVICEDELETERESPONSE']._serialized_end=3644 + _globals['_MVMSERVICEVALIDATECREATEREQUEST']._serialized_start=3646 + _globals['_MVMSERVICEVALIDATECREATEREQUEST']._serialized_end=3753 + _globals['_MVMSERVICEVALIDATECREATERESPONSE']._serialized_start=3755 + _globals['_MVMSERVICEVALIDATECREATERESPONSE']._serialized_end=3789 + _globals['_MVMSERVICEVALIDATEADDDISKREQUEST']._serialized_start=3791 + _globals['_MVMSERVICEVALIDATEADDDISKREQUEST']._serialized_end=3903 + _globals['_MVMSERVICEVALIDATEADDDISKRESPONSE']._serialized_start=3905 + _globals['_MVMSERVICEVALIDATEADDDISKRESPONSE']._serialized_end=3940 + _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_start=3942 + _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_end=4066 + _globals['_MVMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_start=4068 + _globals['_MVMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_end=4106 + _globals['_MVMSERVICEADDDISKRESPONSE']._serialized_start=4108 + _globals['_MVMSERVICEADDDISKRESPONSE']._serialized_end=4135 + _globals['_MVMSERVICEUPDATEDISKRESPONSE']._serialized_start=4137 + _globals['_MVMSERVICEUPDATEDISKRESPONSE']._serialized_end=4167 + _globals['_MVMSERVICEDELETEDISKRESPONSE']._serialized_start=4169 + _globals['_MVMSERVICEDELETEDISKRESPONSE']._serialized_end=4199 + _globals['_MVMSERVICEADDDISKREQUEST']._serialized_start=4202 + _globals['_MVMSERVICEADDDISKREQUEST']._serialized_end=4454 + _globals['_MVMSERVICEUPDATEDISKREQUEST']._serialized_start=4457 + _globals['_MVMSERVICEUPDATEDISKREQUEST']._serialized_end=4714 + _globals['_MVMSERVICEDELETEDISKREQUEST']._serialized_start=4717 + _globals['_MVMSERVICEDELETEDISKREQUEST']._serialized_end=4886 + _globals['_MVMSERVICEADDNETWORKINTERFACERESPONSE']._serialized_start=4888 + _globals['_MVMSERVICEADDNETWORKINTERFACERESPONSE']._serialized_end=4927 + _globals['_MVMSERVICEMOVENETWORKINTERFACERESPONSE']._serialized_start=4929 + _globals['_MVMSERVICEMOVENETWORKINTERFACERESPONSE']._serialized_end=4969 + _globals['_MVMSERVICEDELETENETWORKINTERFACERESPONSE']._serialized_start=4971 + _globals['_MVMSERVICEDELETENETWORKINTERFACERESPONSE']._serialized_end=5013 + _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST']._serialized_start=5016 + _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST']._serialized_end=5155 + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST']._serialized_start=5158 + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST']._serialized_end=5397 + _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST']._serialized_start=5400 + _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST']._serialized_end=5591 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST']._serialized_start=5594 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST']._serialized_end=5755 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACERESPONSE']._serialized_start=5757 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACERESPONSE']._serialized_end=5804 + _globals['_MVMSERVICE']._serialized_start=6344 + _globals['_MVMSERVICE']._serialized_end=8154 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/mvm/v1/mvm_pb2.pyi b/python/fits/api/mvm/v1/mvm_pb2.pyi index 9ee1844..b19a8f3 100644 --- a/python/fits/api/mvm/v1/mvm_pb2.pyi +++ b/python/fits/api/mvm/v1/mvm_pb2.pyi @@ -227,48 +227,6 @@ class MVMServiceCreateResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... -class MVMServiceUpdateRequest(_message.Message): - __slots__ = ("uuid", "project", "order_number", "update_meta", "performance_class", "service_class", "contact") - UUID_FIELD_NUMBER: _ClassVar[int] - PROJECT_FIELD_NUMBER: _ClassVar[int] - ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] - UPDATE_META_FIELD_NUMBER: _ClassVar[int] - PERFORMANCE_CLASS_FIELD_NUMBER: _ClassVar[int] - SERVICE_CLASS_FIELD_NUMBER: _ClassVar[int] - CONTACT_FIELD_NUMBER: _ClassVar[int] - uuid: str - project: str - order_number: str - update_meta: _common_pb2.UpdateMeta - performance_class: PerformanceClassChange - service_class: ServiceClassChange - contact: ContactChange - def __init__(self, uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ..., update_meta: _Optional[_Union[_common_pb2.UpdateMeta, _Mapping]] = ..., performance_class: _Optional[_Union[PerformanceClassChange, _Mapping]] = ..., service_class: _Optional[_Union[ServiceClassChange, _Mapping]] = ..., contact: _Optional[_Union[ContactChange, _Mapping]] = ...) -> None: ... - -class PerformanceClassChange(_message.Message): - __slots__ = ("cpu", "ram") - CPU_FIELD_NUMBER: _ClassVar[int] - RAM_FIELD_NUMBER: _ClassVar[int] - cpu: int - ram: int - def __init__(self, cpu: _Optional[int] = ..., ram: _Optional[int] = ...) -> None: ... - -class ServiceClassChange(_message.Message): - __slots__ = ("serviceclass",) - SERVICECLASS_FIELD_NUMBER: _ClassVar[int] - serviceclass: ServiceClass - def __init__(self, serviceclass: _Optional[_Union[ServiceClass, str]] = ...) -> None: ... - -class ContactChange(_message.Message): - __slots__ = ("contact_uuid",) - CONTACT_UUID_FIELD_NUMBER: _ClassVar[int] - contact_uuid: str - def __init__(self, contact_uuid: _Optional[str] = ...) -> None: ... - -class MVMServiceUpdateResponse(_message.Message): - __slots__ = () - def __init__(self) -> None: ... - class MVMServiceListRequest(_message.Message): __slots__ = ("tenant",) TENANT_FIELD_NUMBER: _ClassVar[int] From 2370d5e0a89814d29454c2400897dff589025a59 Mon Sep 17 00:00:00 2001 From: Matthias Hartmann Date: Thu, 24 Sep 2026 15:48:00 +0200 Subject: [PATCH 21/21] draft: Managed VM update --- doc/index.html | 180 +++++ go/fits/api/mvm/v1/mvm.pb.go | 675 ++++++++++++++---- .../api/mvm/v1/mvmv1connect/mvm.connect.go | 34 + go/permissions/servicepermissions.go | 5 + js/fits/api/mvm/v1/mvm_pb.ts | 232 +++++- proto/fits/api/mvm/v1/mvm.proto | 67 +- python/fits/api/mvm/v1/mvm_connect.py | 65 ++ python/fits/api/mvm/v1/mvm_pb2.py | 146 ++-- python/fits/api/mvm/v1/mvm_pb2.pyi | 42 ++ 9 files changed, 1211 insertions(+), 235 deletions(-) diff --git a/doc/index.html b/doc/index.html index 9bd2182..37f99c9 100644 --- a/doc/index.html +++ b/doc/index.html @@ -386,6 +386,10 @@

    Table of Contents

    fits/api/mvm/v1/mvm.proto
      +
    • + MContactChange +
    • +
    • MLinuxDetails
    • @@ -482,6 +486,14 @@

      Table of Contents

      MMVMServiceUpdateDiskResponse +
    • + MMVMServiceUpdateRequest +
    • + +
    • + MMVMServiceUpdateResponse +
    • +
    • MMVMServiceValidateAddDiskRequest
    • @@ -522,6 +534,14 @@

      Table of Contents

      MNetworkInterface +
    • + MPerformanceClassChange +
    • + +
    • + MServiceClassChange +
    • +
    • MWindowsDetails
    • @@ -1897,6 +1917,30 @@

      fits/api/mvm/v1/mvm.proto

      ContactChange +

      ContactChange is the payload for changing a MVM's contact person.

      + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      contact_uuidstring

      UUID of the new contact.

      + + + + +

      LinuxDetails

      Linux-specific MVM details.

      @@ -2682,6 +2726,80 @@

      MVMServiceUpdateDiskRespon +

      MVMServiceUpdateRequest

      +

      Request to change a mutable property of an existing MVM.

      Exactly one action must be set; each maps onto its own upstream endpoint.

      TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per

      action); combined changes would need

      server-side fan-out without rollback.

      TODO: clarify async semantics — this is a queued "request to update", not an

      immediate update (e.g. disk changes are applied overnight). Consider

      renaming to reflect that.

      TODO: differentiate between fire-and-forget and queued actions in the API.

      TODO: is it possible to expose the pending-change queue (list/cancel) to the caller?

      TODO: clarify who enqueues the request and whether a pending change blocks

      further edits (e.g. after AddDisk, until the change executes).

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      uuidstring

      UUID of the MVM to update.

      projectstring

      Project the MVM belongs to.

      order_numberstring

      Order reference for this operation. +TODO: can this be optional?

      update_metafits.api.v1.UpdateMeta

      Timestamp and strategy for this update.

      performance_classPerformanceClassChange

      Change the CPU/RAM performance class.

      service_classServiceClassChange

      Change the service class.

      contactContactChange

      Change the contact person.

      + + + + + +

      MVMServiceUpdateResponse

      +

      Response for Update; an empty response means the change was accepted.

      + + + + +

      MVMServiceValidateAddDiskRequest

      Request to validate an AddDisk without ordering anything.

      @@ -3006,6 +3124,61 @@

      NetworkInterface

      +

      PerformanceClassChange

      +

      PerformanceClassChange is the payload for changing a MVM's CPU and RAM.

      + + + + + + + + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      cpuuint32

      Number of vCPUs (1-64).

      ramuint32

      RAM size in GB.

      + + + + + +

      ServiceClassChange

      +

      ServiceClassChange is the payload for changing a MVM's service class.

      + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      serviceclassServiceClass

      Target service class.

      + + + + +

      WindowsDetails

      Windows-specific MVM details.

      @@ -3274,6 +3447,13 @@

      MVMService

      Creates a new MVM.

      + + Update +
      MVMServiceUpdateRequest + MVMServiceUpdateResponse +

      Updates a MVM.

      + + List MVMServiceListRequest diff --git a/go/fits/api/mvm/v1/mvm.pb.go b/go/fits/api/mvm/v1/mvm.pb.go index 4283129..2ea7bbe 100644 --- a/go/fits/api/mvm/v1/mvm.pb.go +++ b/go/fits/api/mvm/v1/mvm.pb.go @@ -1368,6 +1368,345 @@ func (*MVMServiceCreateResponse) Descriptor() ([]byte, []int) { return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{11} } +// Request to change a mutable property of an existing MVM. +// Exactly one action must be set; each maps onto its own upstream endpoint. +// TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per +// action); combined changes would need +// server-side fan-out without rollback. +// TODO: clarify async semantics — this is a queued "request to update", not an +// +// immediate update (e.g. disk changes are applied overnight). Consider +// renaming to reflect that. +// +// TODO: differentiate between fire-and-forget and queued actions in the API. +// TODO: is it possible to expose the pending-change queue (list/cancel) to the caller? +// TODO: clarify who enqueues the request and whether a pending change blocks +// +// further edits (e.g. after AddDisk, until the change executes). +type MVMServiceUpdateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the MVM to update. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + // Project the MVM belongs to. + Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` + // Order reference for this operation. + // TODO: can this be optional? + OrderNumber string `protobuf:"bytes,3,opt,name=order_number,json=orderNumber,proto3" json:"order_number,omitempty"` + // Timestamp and strategy for this update. + UpdateMeta *v1.UpdateMeta `protobuf:"bytes,4,opt,name=update_meta,json=updateMeta,proto3" json:"update_meta,omitempty"` + // The change to apply. + // + // Types that are valid to be assigned to Action: + // + // *MVMServiceUpdateRequest_PerformanceClass + // *MVMServiceUpdateRequest_ServiceClass + // *MVMServiceUpdateRequest_Contact + Action isMVMServiceUpdateRequest_Action `protobuf_oneof:"action"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceUpdateRequest) Reset() { + *x = MVMServiceUpdateRequest{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceUpdateRequest) ProtoMessage() {} + +func (x *MVMServiceUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceUpdateRequest.ProtoReflect.Descriptor instead. +func (*MVMServiceUpdateRequest) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{12} +} + +func (x *MVMServiceUpdateRequest) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *MVMServiceUpdateRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *MVMServiceUpdateRequest) GetOrderNumber() string { + if x != nil { + return x.OrderNumber + } + return "" +} + +func (x *MVMServiceUpdateRequest) GetUpdateMeta() *v1.UpdateMeta { + if x != nil { + return x.UpdateMeta + } + return nil +} + +func (x *MVMServiceUpdateRequest) GetAction() isMVMServiceUpdateRequest_Action { + if x != nil { + return x.Action + } + return nil +} + +func (x *MVMServiceUpdateRequest) GetPerformanceClass() *PerformanceClassChange { + if x != nil { + if x, ok := x.Action.(*MVMServiceUpdateRequest_PerformanceClass); ok { + return x.PerformanceClass + } + } + return nil +} + +func (x *MVMServiceUpdateRequest) GetServiceClass() *ServiceClassChange { + if x != nil { + if x, ok := x.Action.(*MVMServiceUpdateRequest_ServiceClass); ok { + return x.ServiceClass + } + } + return nil +} + +func (x *MVMServiceUpdateRequest) GetContact() *ContactChange { + if x != nil { + if x, ok := x.Action.(*MVMServiceUpdateRequest_Contact); ok { + return x.Contact + } + } + return nil +} + +type isMVMServiceUpdateRequest_Action interface { + isMVMServiceUpdateRequest_Action() +} + +type MVMServiceUpdateRequest_PerformanceClass struct { + // Change the CPU/RAM performance class. + PerformanceClass *PerformanceClassChange `protobuf:"bytes,5,opt,name=performance_class,json=performanceClass,proto3,oneof"` +} + +type MVMServiceUpdateRequest_ServiceClass struct { + // Change the service class. + ServiceClass *ServiceClassChange `protobuf:"bytes,6,opt,name=service_class,json=serviceClass,proto3,oneof"` +} + +type MVMServiceUpdateRequest_Contact struct { + // Change the contact person. + Contact *ContactChange `protobuf:"bytes,7,opt,name=contact,proto3,oneof"` +} + +func (*MVMServiceUpdateRequest_PerformanceClass) isMVMServiceUpdateRequest_Action() {} + +func (*MVMServiceUpdateRequest_ServiceClass) isMVMServiceUpdateRequest_Action() {} + +func (*MVMServiceUpdateRequest_Contact) isMVMServiceUpdateRequest_Action() {} + +// PerformanceClassChange is the payload for changing a MVM's CPU and RAM. +type PerformanceClassChange struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Number of vCPUs (1-64). + Cpu uint32 `protobuf:"varint,1,opt,name=cpu,proto3" json:"cpu,omitempty"` + // RAM size in GB. + Ram uint32 `protobuf:"varint,2,opt,name=ram,proto3" json:"ram,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PerformanceClassChange) Reset() { + *x = PerformanceClassChange{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PerformanceClassChange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PerformanceClassChange) ProtoMessage() {} + +func (x *PerformanceClassChange) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PerformanceClassChange.ProtoReflect.Descriptor instead. +func (*PerformanceClassChange) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{13} +} + +func (x *PerformanceClassChange) GetCpu() uint32 { + if x != nil { + return x.Cpu + } + return 0 +} + +func (x *PerformanceClassChange) GetRam() uint32 { + if x != nil { + return x.Ram + } + return 0 +} + +// ServiceClassChange is the payload for changing a MVM's service class. +type ServiceClassChange struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Target service class. + Serviceclass ServiceClass `protobuf:"varint,1,opt,name=serviceclass,proto3,enum=fits.api.mvm.v1.ServiceClass" json:"serviceclass,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ServiceClassChange) Reset() { + *x = ServiceClassChange{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ServiceClassChange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceClassChange) ProtoMessage() {} + +func (x *ServiceClassChange) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServiceClassChange.ProtoReflect.Descriptor instead. +func (*ServiceClassChange) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{14} +} + +func (x *ServiceClassChange) GetServiceclass() ServiceClass { + if x != nil { + return x.Serviceclass + } + return ServiceClass_SERVICE_CLASS_UNSPECIFIED +} + +// ContactChange is the payload for changing a MVM's contact person. +type ContactChange struct { + state protoimpl.MessageState `protogen:"open.v1"` + // UUID of the new contact. + ContactUuid string `protobuf:"bytes,1,opt,name=contact_uuid,json=contactUuid,proto3" json:"contact_uuid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContactChange) Reset() { + *x = ContactChange{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContactChange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContactChange) ProtoMessage() {} + +func (x *ContactChange) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContactChange.ProtoReflect.Descriptor instead. +func (*ContactChange) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{15} +} + +func (x *ContactChange) GetContactUuid() string { + if x != nil { + return x.ContactUuid + } + return "" +} + +// Response for Update; an empty response means the change was accepted. +type MVMServiceUpdateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MVMServiceUpdateResponse) Reset() { + *x = MVMServiceUpdateResponse{} + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MVMServiceUpdateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MVMServiceUpdateResponse) ProtoMessage() {} + +func (x *MVMServiceUpdateResponse) ProtoReflect() protoreflect.Message { + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MVMServiceUpdateResponse.ProtoReflect.Descriptor instead. +func (*MVMServiceUpdateResponse) Descriptor() ([]byte, []int) { + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{16} +} + // Request to list MVMs. type MVMServiceListRequest struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -1379,7 +1718,7 @@ type MVMServiceListRequest struct { func (x *MVMServiceListRequest) Reset() { *x = MVMServiceListRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[12] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1391,7 +1730,7 @@ func (x *MVMServiceListRequest) String() string { func (*MVMServiceListRequest) ProtoMessage() {} func (x *MVMServiceListRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[12] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1404,7 +1743,7 @@ func (x *MVMServiceListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceListRequest.ProtoReflect.Descriptor instead. func (*MVMServiceListRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{12} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{17} } func (x *MVMServiceListRequest) GetTenant() string { @@ -1425,7 +1764,7 @@ type MVMServiceListResponse struct { func (x *MVMServiceListResponse) Reset() { *x = MVMServiceListResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[13] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1437,7 +1776,7 @@ func (x *MVMServiceListResponse) String() string { func (*MVMServiceListResponse) ProtoMessage() {} func (x *MVMServiceListResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[13] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1450,7 +1789,7 @@ func (x *MVMServiceListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceListResponse.ProtoReflect.Descriptor instead. func (*MVMServiceListResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{13} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{18} } func (x *MVMServiceListResponse) GetMvms() []*ManagedVM { @@ -1476,7 +1815,7 @@ type MVMServiceDeleteRequest struct { func (x *MVMServiceDeleteRequest) Reset() { *x = MVMServiceDeleteRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[14] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1488,7 +1827,7 @@ func (x *MVMServiceDeleteRequest) String() string { func (*MVMServiceDeleteRequest) ProtoMessage() {} func (x *MVMServiceDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[14] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1501,7 +1840,7 @@ func (x *MVMServiceDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceDeleteRequest.ProtoReflect.Descriptor instead. func (*MVMServiceDeleteRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{14} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{19} } func (x *MVMServiceDeleteRequest) GetProject() string { @@ -1534,7 +1873,7 @@ type MVMServiceDeleteResponse struct { func (x *MVMServiceDeleteResponse) Reset() { *x = MVMServiceDeleteResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[15] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1546,7 +1885,7 @@ func (x *MVMServiceDeleteResponse) String() string { func (*MVMServiceDeleteResponse) ProtoMessage() {} func (x *MVMServiceDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[15] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1559,7 +1898,7 @@ func (x *MVMServiceDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceDeleteResponse.ProtoReflect.Descriptor instead. func (*MVMServiceDeleteResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{15} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{20} } // Request to validate a MVM create without creating anything. @@ -1573,7 +1912,7 @@ type MVMServiceValidateCreateRequest struct { func (x *MVMServiceValidateCreateRequest) Reset() { *x = MVMServiceValidateCreateRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[16] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1585,7 +1924,7 @@ func (x *MVMServiceValidateCreateRequest) String() string { func (*MVMServiceValidateCreateRequest) ProtoMessage() {} func (x *MVMServiceValidateCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[16] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1598,7 +1937,7 @@ func (x *MVMServiceValidateCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceValidateCreateRequest.ProtoReflect.Descriptor instead. func (*MVMServiceValidateCreateRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{16} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{21} } func (x *MVMServiceValidateCreateRequest) GetCreate() *MVMServiceCreateRequest { @@ -1617,7 +1956,7 @@ type MVMServiceValidateCreateResponse struct { func (x *MVMServiceValidateCreateResponse) Reset() { *x = MVMServiceValidateCreateResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[17] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1629,7 +1968,7 @@ func (x *MVMServiceValidateCreateResponse) String() string { func (*MVMServiceValidateCreateResponse) ProtoMessage() {} func (x *MVMServiceValidateCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[17] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1642,7 +1981,7 @@ func (x *MVMServiceValidateCreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceValidateCreateResponse.ProtoReflect.Descriptor instead. func (*MVMServiceValidateCreateResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{17} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{22} } // Request to validate an AddDisk without ordering anything. @@ -1656,7 +1995,7 @@ type MVMServiceValidateAddDiskRequest struct { func (x *MVMServiceValidateAddDiskRequest) Reset() { *x = MVMServiceValidateAddDiskRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[18] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1668,7 +2007,7 @@ func (x *MVMServiceValidateAddDiskRequest) String() string { func (*MVMServiceValidateAddDiskRequest) ProtoMessage() {} func (x *MVMServiceValidateAddDiskRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[18] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1681,7 +2020,7 @@ func (x *MVMServiceValidateAddDiskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceValidateAddDiskRequest.ProtoReflect.Descriptor instead. func (*MVMServiceValidateAddDiskRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{18} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{23} } func (x *MVMServiceValidateAddDiskRequest) GetAddDisk() *MVMServiceAddDiskRequest { @@ -1700,7 +2039,7 @@ type MVMServiceValidateAddDiskResponse struct { func (x *MVMServiceValidateAddDiskResponse) Reset() { *x = MVMServiceValidateAddDiskResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[19] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1712,7 +2051,7 @@ func (x *MVMServiceValidateAddDiskResponse) String() string { func (*MVMServiceValidateAddDiskResponse) ProtoMessage() {} func (x *MVMServiceValidateAddDiskResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[19] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1725,7 +2064,7 @@ func (x *MVMServiceValidateAddDiskResponse) ProtoReflect() protoreflect.Message // Deprecated: Use MVMServiceValidateAddDiskResponse.ProtoReflect.Descriptor instead. func (*MVMServiceValidateAddDiskResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{19} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{24} } // Request to validate an UpdateDisk without changing anything. @@ -1739,7 +2078,7 @@ type MVMServiceValidateUpdateDiskRequest struct { func (x *MVMServiceValidateUpdateDiskRequest) Reset() { *x = MVMServiceValidateUpdateDiskRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[20] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1751,7 +2090,7 @@ func (x *MVMServiceValidateUpdateDiskRequest) String() string { func (*MVMServiceValidateUpdateDiskRequest) ProtoMessage() {} func (x *MVMServiceValidateUpdateDiskRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[20] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1764,7 +2103,7 @@ func (x *MVMServiceValidateUpdateDiskRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use MVMServiceValidateUpdateDiskRequest.ProtoReflect.Descriptor instead. func (*MVMServiceValidateUpdateDiskRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{20} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{25} } func (x *MVMServiceValidateUpdateDiskRequest) GetUpdateDisk() *MVMServiceUpdateDiskRequest { @@ -1783,7 +2122,7 @@ type MVMServiceValidateUpdateDiskResponse struct { func (x *MVMServiceValidateUpdateDiskResponse) Reset() { *x = MVMServiceValidateUpdateDiskResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[21] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1795,7 +2134,7 @@ func (x *MVMServiceValidateUpdateDiskResponse) String() string { func (*MVMServiceValidateUpdateDiskResponse) ProtoMessage() {} func (x *MVMServiceValidateUpdateDiskResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[21] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1808,7 +2147,7 @@ func (x *MVMServiceValidateUpdateDiskResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use MVMServiceValidateUpdateDiskResponse.ProtoReflect.Descriptor instead. func (*MVMServiceValidateUpdateDiskResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{21} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{26} } // Response for AddDisk. @@ -1820,7 +2159,7 @@ type MVMServiceAddDiskResponse struct { func (x *MVMServiceAddDiskResponse) Reset() { *x = MVMServiceAddDiskResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[22] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1832,7 +2171,7 @@ func (x *MVMServiceAddDiskResponse) String() string { func (*MVMServiceAddDiskResponse) ProtoMessage() {} func (x *MVMServiceAddDiskResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[22] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1845,7 +2184,7 @@ func (x *MVMServiceAddDiskResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceAddDiskResponse.ProtoReflect.Descriptor instead. func (*MVMServiceAddDiskResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{22} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{27} } // Response for UpdateDisk. @@ -1857,7 +2196,7 @@ type MVMServiceUpdateDiskResponse struct { func (x *MVMServiceUpdateDiskResponse) Reset() { *x = MVMServiceUpdateDiskResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[23] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1869,7 +2208,7 @@ func (x *MVMServiceUpdateDiskResponse) String() string { func (*MVMServiceUpdateDiskResponse) ProtoMessage() {} func (x *MVMServiceUpdateDiskResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[23] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1882,7 +2221,7 @@ func (x *MVMServiceUpdateDiskResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceUpdateDiskResponse.ProtoReflect.Descriptor instead. func (*MVMServiceUpdateDiskResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{23} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{28} } // Response for DeleteDisk. @@ -1894,7 +2233,7 @@ type MVMServiceDeleteDiskResponse struct { func (x *MVMServiceDeleteDiskResponse) Reset() { *x = MVMServiceDeleteDiskResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[24] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1906,7 +2245,7 @@ func (x *MVMServiceDeleteDiskResponse) String() string { func (*MVMServiceDeleteDiskResponse) ProtoMessage() {} func (x *MVMServiceDeleteDiskResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[24] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1919,7 +2258,7 @@ func (x *MVMServiceDeleteDiskResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceDeleteDiskResponse.ProtoReflect.Descriptor instead. func (*MVMServiceDeleteDiskResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{24} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{29} } // Request to order an additional data disk for a MVM. @@ -1945,7 +2284,7 @@ type MVMServiceAddDiskRequest struct { func (x *MVMServiceAddDiskRequest) Reset() { *x = MVMServiceAddDiskRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[25] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1957,7 +2296,7 @@ func (x *MVMServiceAddDiskRequest) String() string { func (*MVMServiceAddDiskRequest) ProtoMessage() {} func (x *MVMServiceAddDiskRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[25] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1970,7 +2309,7 @@ func (x *MVMServiceAddDiskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceAddDiskRequest.ProtoReflect.Descriptor instead. func (*MVMServiceAddDiskRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{25} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{30} } func (x *MVMServiceAddDiskRequest) GetUuid() string { @@ -2060,7 +2399,7 @@ type MVMServiceUpdateDiskRequest struct { func (x *MVMServiceUpdateDiskRequest) Reset() { *x = MVMServiceUpdateDiskRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[26] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2072,7 +2411,7 @@ func (x *MVMServiceUpdateDiskRequest) String() string { func (*MVMServiceUpdateDiskRequest) ProtoMessage() {} func (x *MVMServiceUpdateDiskRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[26] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2085,7 +2424,7 @@ func (x *MVMServiceUpdateDiskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceUpdateDiskRequest.ProtoReflect.Descriptor instead. func (*MVMServiceUpdateDiskRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{26} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{31} } func (x *MVMServiceUpdateDiskRequest) GetUuid() string { @@ -2149,7 +2488,7 @@ type MVMServiceDeleteDiskRequest struct { func (x *MVMServiceDeleteDiskRequest) Reset() { *x = MVMServiceDeleteDiskRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[27] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2161,7 +2500,7 @@ func (x *MVMServiceDeleteDiskRequest) String() string { func (*MVMServiceDeleteDiskRequest) ProtoMessage() {} func (x *MVMServiceDeleteDiskRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[27] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2174,7 +2513,7 @@ func (x *MVMServiceDeleteDiskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MVMServiceDeleteDiskRequest.ProtoReflect.Descriptor instead. func (*MVMServiceDeleteDiskRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{27} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{32} } func (x *MVMServiceDeleteDiskRequest) GetUuid() string { @@ -2214,7 +2553,7 @@ type MVMServiceAddNetworkInterfaceResponse struct { func (x *MVMServiceAddNetworkInterfaceResponse) Reset() { *x = MVMServiceAddNetworkInterfaceResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[28] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2226,7 +2565,7 @@ func (x *MVMServiceAddNetworkInterfaceResponse) String() string { func (*MVMServiceAddNetworkInterfaceResponse) ProtoMessage() {} func (x *MVMServiceAddNetworkInterfaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[28] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2239,7 +2578,7 @@ func (x *MVMServiceAddNetworkInterfaceResponse) ProtoReflect() protoreflect.Mess // Deprecated: Use MVMServiceAddNetworkInterfaceResponse.ProtoReflect.Descriptor instead. func (*MVMServiceAddNetworkInterfaceResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{28} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{33} } // Response for MoveNetworkInterface. @@ -2251,7 +2590,7 @@ type MVMServiceMoveNetworkInterfaceResponse struct { func (x *MVMServiceMoveNetworkInterfaceResponse) Reset() { *x = MVMServiceMoveNetworkInterfaceResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[29] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2263,7 +2602,7 @@ func (x *MVMServiceMoveNetworkInterfaceResponse) String() string { func (*MVMServiceMoveNetworkInterfaceResponse) ProtoMessage() {} func (x *MVMServiceMoveNetworkInterfaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[29] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2276,7 +2615,7 @@ func (x *MVMServiceMoveNetworkInterfaceResponse) ProtoReflect() protoreflect.Mes // Deprecated: Use MVMServiceMoveNetworkInterfaceResponse.ProtoReflect.Descriptor instead. func (*MVMServiceMoveNetworkInterfaceResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{29} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{34} } // Response for DeleteNetworkInterface. @@ -2288,7 +2627,7 @@ type MVMServiceDeleteNetworkInterfaceResponse struct { func (x *MVMServiceDeleteNetworkInterfaceResponse) Reset() { *x = MVMServiceDeleteNetworkInterfaceResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[30] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2300,7 +2639,7 @@ func (x *MVMServiceDeleteNetworkInterfaceResponse) String() string { func (*MVMServiceDeleteNetworkInterfaceResponse) ProtoMessage() {} func (x *MVMServiceDeleteNetworkInterfaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[30] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2313,7 +2652,7 @@ func (x *MVMServiceDeleteNetworkInterfaceResponse) ProtoReflect() protoreflect.M // Deprecated: Use MVMServiceDeleteNetworkInterfaceResponse.ProtoReflect.Descriptor instead. func (*MVMServiceDeleteNetworkInterfaceResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{30} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{35} } // Request to order an additional network interface for a MVM. @@ -2334,7 +2673,7 @@ type MVMServiceAddNetworkInterfaceRequest struct { func (x *MVMServiceAddNetworkInterfaceRequest) Reset() { *x = MVMServiceAddNetworkInterfaceRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[31] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2346,7 +2685,7 @@ func (x *MVMServiceAddNetworkInterfaceRequest) String() string { func (*MVMServiceAddNetworkInterfaceRequest) ProtoMessage() {} func (x *MVMServiceAddNetworkInterfaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[31] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2359,7 +2698,7 @@ func (x *MVMServiceAddNetworkInterfaceRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use MVMServiceAddNetworkInterfaceRequest.ProtoReflect.Descriptor instead. func (*MVMServiceAddNetworkInterfaceRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{31} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{36} } func (x *MVMServiceAddNetworkInterfaceRequest) GetUuid() string { @@ -2403,7 +2742,7 @@ type MVMServiceMoveNetworkInterfaceRequest struct { func (x *MVMServiceMoveNetworkInterfaceRequest) Reset() { *x = MVMServiceMoveNetworkInterfaceRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[32] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2415,7 +2754,7 @@ func (x *MVMServiceMoveNetworkInterfaceRequest) String() string { func (*MVMServiceMoveNetworkInterfaceRequest) ProtoMessage() {} func (x *MVMServiceMoveNetworkInterfaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[32] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2428,7 +2767,7 @@ func (x *MVMServiceMoveNetworkInterfaceRequest) ProtoReflect() protoreflect.Mess // Deprecated: Use MVMServiceMoveNetworkInterfaceRequest.ProtoReflect.Descriptor instead. func (*MVMServiceMoveNetworkInterfaceRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{32} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{37} } func (x *MVMServiceMoveNetworkInterfaceRequest) GetUuid() string { @@ -2484,7 +2823,7 @@ type MVMServiceDeleteNetworkInterfaceRequest struct { func (x *MVMServiceDeleteNetworkInterfaceRequest) Reset() { *x = MVMServiceDeleteNetworkInterfaceRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[33] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2496,7 +2835,7 @@ func (x *MVMServiceDeleteNetworkInterfaceRequest) String() string { func (*MVMServiceDeleteNetworkInterfaceRequest) ProtoMessage() {} func (x *MVMServiceDeleteNetworkInterfaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[33] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2509,7 +2848,7 @@ func (x *MVMServiceDeleteNetworkInterfaceRequest) ProtoReflect() protoreflect.Me // Deprecated: Use MVMServiceDeleteNetworkInterfaceRequest.ProtoReflect.Descriptor instead. func (*MVMServiceDeleteNetworkInterfaceRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{33} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{38} } func (x *MVMServiceDeleteNetworkInterfaceRequest) GetUuid() string { @@ -2551,7 +2890,7 @@ type MVMServiceValidateAddNetworkInterfaceRequest struct { func (x *MVMServiceValidateAddNetworkInterfaceRequest) Reset() { *x = MVMServiceValidateAddNetworkInterfaceRequest{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[34] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2563,7 +2902,7 @@ func (x *MVMServiceValidateAddNetworkInterfaceRequest) String() string { func (*MVMServiceValidateAddNetworkInterfaceRequest) ProtoMessage() {} func (x *MVMServiceValidateAddNetworkInterfaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[34] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2576,7 +2915,7 @@ func (x *MVMServiceValidateAddNetworkInterfaceRequest) ProtoReflect() protorefle // Deprecated: Use MVMServiceValidateAddNetworkInterfaceRequest.ProtoReflect.Descriptor instead. func (*MVMServiceValidateAddNetworkInterfaceRequest) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{34} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{39} } func (x *MVMServiceValidateAddNetworkInterfaceRequest) GetAddNetworkInterface() *MVMServiceAddNetworkInterfaceRequest { @@ -2595,7 +2934,7 @@ type MVMServiceValidateAddNetworkInterfaceResponse struct { func (x *MVMServiceValidateAddNetworkInterfaceResponse) Reset() { *x = MVMServiceValidateAddNetworkInterfaceResponse{} - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[35] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2607,7 +2946,7 @@ func (x *MVMServiceValidateAddNetworkInterfaceResponse) String() string { func (*MVMServiceValidateAddNetworkInterfaceResponse) ProtoMessage() {} func (x *MVMServiceValidateAddNetworkInterfaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[35] + mi := &file_fits_api_mvm_v1_mvm_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2620,7 +2959,7 @@ func (x *MVMServiceValidateAddNetworkInterfaceResponse) ProtoReflect() protorefl // Deprecated: Use MVMServiceValidateAddNetworkInterfaceResponse.ProtoReflect.Descriptor instead. func (*MVMServiceValidateAddNetworkInterfaceResponse) Descriptor() ([]byte, []int) { - return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{35} + return file_fits_api_mvm_v1_mvm_proto_rawDescGZIP(), []int{40} } var File_fits_api_mvm_v1_mvm_proto protoreflect.FileDescriptor @@ -2729,7 +3068,25 @@ const file_fits_api_mvm_v1_mvm_proto_rawDesc = "" + "\f_driveletterB\f\n" + "\n" + "_disk_type\"\x1a\n" + - "\x18MVMServiceCreateResponse\"L\n" + + "\x18MVMServiceCreateResponse\"\xb1\x03\n" + + "\x17MVMServiceUpdateRequest\x12\x1c\n" + + "\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n" + + "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12!\n" + + "\forder_number\x18\x03 \x01(\tR\vorderNumber\x12@\n" + + "\vupdate_meta\x18\x04 \x01(\v2\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\n" + + "updateMeta\x12V\n" + + "\x11performance_class\x18\x05 \x01(\v2'.fits.api.mvm.v1.PerformanceClassChangeH\x00R\x10performanceClass\x12J\n" + + "\rservice_class\x18\x06 \x01(\v2#.fits.api.mvm.v1.ServiceClassChangeH\x00R\fserviceClass\x12:\n" + + "\acontact\x18\a \x01(\v2\x1e.fits.api.mvm.v1.ContactChangeH\x00R\acontactB\x0f\n" + + "\x06action\x12\x05\xbaH\x02\b\x01\"P\n" + + "\x16PerformanceClassChange\x12\x1b\n" + + "\x03cpu\x18\x01 \x01(\rB\t\xbaH\x06*\x04\x18@(\x01R\x03cpu\x12\x19\n" + + "\x03ram\x18\x02 \x01(\rB\a\xbaH\x04*\x02 \x00R\x03ram\"a\n" + + "\x12ServiceClassChange\x12K\n" + + "\fserviceclass\x18\x01 \x01(\x0e2\x1d.fits.api.mvm.v1.ServiceClassB\b\xbaH\x05\x82\x01\x02\x10\x01R\fserviceclass\"<\n" + + "\rContactChange\x12+\n" + + "\fcontact_uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\vcontactUuid\"\x1a\n" + + "\x18MVMServiceUpdateResponse\"L\n" + "\x15MVMServiceListRequest\x12(\n" + "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01B\t\n" + "\a_tenant\"H\n" + @@ -2816,11 +3173,13 @@ const file_fits_api_mvm_v1_mvm_proto_rawDesc = "" + "\fDISK_TYPE_OS\x10\x01\x1a\x06\x82\xb2\x19\x02os\x12 \n" + "\x10DISK_TYPE_SYSTEM\x10\x02\x1a\n" + "\x82\xb2\x19\x06system\x12\x1c\n" + - "\x0eDISK_TYPE_DATA\x10\x03\x1a\b\x82\xb2\x19\x04data2\x92\x0e\n" + + "\x0eDISK_TYPE_DATA\x10\x03\x1a\b\x82\xb2\x19\x04data2\xfd\x0e\n" + "\n" + "MVMService\x12a\n" + "\x03Get\x12%.fits.api.mvm.v1.MVMServiceGetRequest\x1a&.fits.api.mvm.v1.MVMServiceGetResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n" + "\x06Create\x12(.fits.api.mvm.v1.MVMServiceCreateRequest\x1a).fits.api.mvm.v1.MVMServiceCreateResponse\"\n" + + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12i\n" + + "\x06Update\x12(.fits.api.mvm.v1.MVMServiceUpdateRequest\x1a).fits.api.mvm.v1.MVMServiceUpdateResponse\"\n" + "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12d\n" + "\x04List\x12&.fits.api.mvm.v1.MVMServiceListRequest\x1a'.fits.api.mvm.v1.MVMServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n" + "\x06Delete\x12(.fits.api.mvm.v1.MVMServiceDeleteRequest\x1a).fits.api.mvm.v1.MVMServiceDeleteResponse\"\n" + @@ -2862,7 +3221,7 @@ func file_fits_api_mvm_v1_mvm_proto_rawDescGZIP() []byte { } var file_fits_api_mvm_v1_mvm_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_fits_api_mvm_v1_mvm_proto_msgTypes = make([]protoimpl.MessageInfo, 36) +var file_fits_api_mvm_v1_mvm_proto_msgTypes = make([]protoimpl.MessageInfo, 41) var file_fits_api_mvm_v1_mvm_proto_goTypes = []any{ (Availability)(0), // 0: fits.api.mvm.v1.Availability (ServiceClass)(0), // 1: fits.api.mvm.v1.ServiceClass @@ -2880,95 +3239,108 @@ var file_fits_api_mvm_v1_mvm_proto_goTypes = []any{ (*LinuxDisk)(nil), // 13: fits.api.mvm.v1.LinuxDisk (*WindowsDisk)(nil), // 14: fits.api.mvm.v1.WindowsDisk (*MVMServiceCreateResponse)(nil), // 15: fits.api.mvm.v1.MVMServiceCreateResponse - (*MVMServiceListRequest)(nil), // 16: fits.api.mvm.v1.MVMServiceListRequest - (*MVMServiceListResponse)(nil), // 17: fits.api.mvm.v1.MVMServiceListResponse - (*MVMServiceDeleteRequest)(nil), // 18: fits.api.mvm.v1.MVMServiceDeleteRequest - (*MVMServiceDeleteResponse)(nil), // 19: fits.api.mvm.v1.MVMServiceDeleteResponse - (*MVMServiceValidateCreateRequest)(nil), // 20: fits.api.mvm.v1.MVMServiceValidateCreateRequest - (*MVMServiceValidateCreateResponse)(nil), // 21: fits.api.mvm.v1.MVMServiceValidateCreateResponse - (*MVMServiceValidateAddDiskRequest)(nil), // 22: fits.api.mvm.v1.MVMServiceValidateAddDiskRequest - (*MVMServiceValidateAddDiskResponse)(nil), // 23: fits.api.mvm.v1.MVMServiceValidateAddDiskResponse - (*MVMServiceValidateUpdateDiskRequest)(nil), // 24: fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest - (*MVMServiceValidateUpdateDiskResponse)(nil), // 25: fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse - (*MVMServiceAddDiskResponse)(nil), // 26: fits.api.mvm.v1.MVMServiceAddDiskResponse - (*MVMServiceUpdateDiskResponse)(nil), // 27: fits.api.mvm.v1.MVMServiceUpdateDiskResponse - (*MVMServiceDeleteDiskResponse)(nil), // 28: fits.api.mvm.v1.MVMServiceDeleteDiskResponse - (*MVMServiceAddDiskRequest)(nil), // 29: fits.api.mvm.v1.MVMServiceAddDiskRequest - (*MVMServiceUpdateDiskRequest)(nil), // 30: fits.api.mvm.v1.MVMServiceUpdateDiskRequest - (*MVMServiceDeleteDiskRequest)(nil), // 31: fits.api.mvm.v1.MVMServiceDeleteDiskRequest - (*MVMServiceAddNetworkInterfaceResponse)(nil), // 32: fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse - (*MVMServiceMoveNetworkInterfaceResponse)(nil), // 33: fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse - (*MVMServiceDeleteNetworkInterfaceResponse)(nil), // 34: fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse - (*MVMServiceAddNetworkInterfaceRequest)(nil), // 35: fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest - (*MVMServiceMoveNetworkInterfaceRequest)(nil), // 36: fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest - (*MVMServiceDeleteNetworkInterfaceRequest)(nil), // 37: fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest - (*MVMServiceValidateAddNetworkInterfaceRequest)(nil), // 38: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest - (*MVMServiceValidateAddNetworkInterfaceResponse)(nil), // 39: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse - (*v1.Meta)(nil), // 40: fits.api.v1.Meta - (*VLAN)(nil), // 41: fits.api.mvm.v1.VLAN - (*v1.Labels)(nil), // 42: fits.api.v1.Labels + (*MVMServiceUpdateRequest)(nil), // 16: fits.api.mvm.v1.MVMServiceUpdateRequest + (*PerformanceClassChange)(nil), // 17: fits.api.mvm.v1.PerformanceClassChange + (*ServiceClassChange)(nil), // 18: fits.api.mvm.v1.ServiceClassChange + (*ContactChange)(nil), // 19: fits.api.mvm.v1.ContactChange + (*MVMServiceUpdateResponse)(nil), // 20: fits.api.mvm.v1.MVMServiceUpdateResponse + (*MVMServiceListRequest)(nil), // 21: fits.api.mvm.v1.MVMServiceListRequest + (*MVMServiceListResponse)(nil), // 22: fits.api.mvm.v1.MVMServiceListResponse + (*MVMServiceDeleteRequest)(nil), // 23: fits.api.mvm.v1.MVMServiceDeleteRequest + (*MVMServiceDeleteResponse)(nil), // 24: fits.api.mvm.v1.MVMServiceDeleteResponse + (*MVMServiceValidateCreateRequest)(nil), // 25: fits.api.mvm.v1.MVMServiceValidateCreateRequest + (*MVMServiceValidateCreateResponse)(nil), // 26: fits.api.mvm.v1.MVMServiceValidateCreateResponse + (*MVMServiceValidateAddDiskRequest)(nil), // 27: fits.api.mvm.v1.MVMServiceValidateAddDiskRequest + (*MVMServiceValidateAddDiskResponse)(nil), // 28: fits.api.mvm.v1.MVMServiceValidateAddDiskResponse + (*MVMServiceValidateUpdateDiskRequest)(nil), // 29: fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest + (*MVMServiceValidateUpdateDiskResponse)(nil), // 30: fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse + (*MVMServiceAddDiskResponse)(nil), // 31: fits.api.mvm.v1.MVMServiceAddDiskResponse + (*MVMServiceUpdateDiskResponse)(nil), // 32: fits.api.mvm.v1.MVMServiceUpdateDiskResponse + (*MVMServiceDeleteDiskResponse)(nil), // 33: fits.api.mvm.v1.MVMServiceDeleteDiskResponse + (*MVMServiceAddDiskRequest)(nil), // 34: fits.api.mvm.v1.MVMServiceAddDiskRequest + (*MVMServiceUpdateDiskRequest)(nil), // 35: fits.api.mvm.v1.MVMServiceUpdateDiskRequest + (*MVMServiceDeleteDiskRequest)(nil), // 36: fits.api.mvm.v1.MVMServiceDeleteDiskRequest + (*MVMServiceAddNetworkInterfaceResponse)(nil), // 37: fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse + (*MVMServiceMoveNetworkInterfaceResponse)(nil), // 38: fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse + (*MVMServiceDeleteNetworkInterfaceResponse)(nil), // 39: fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse + (*MVMServiceAddNetworkInterfaceRequest)(nil), // 40: fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest + (*MVMServiceMoveNetworkInterfaceRequest)(nil), // 41: fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest + (*MVMServiceDeleteNetworkInterfaceRequest)(nil), // 42: fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest + (*MVMServiceValidateAddNetworkInterfaceRequest)(nil), // 43: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest + (*MVMServiceValidateAddNetworkInterfaceResponse)(nil), // 44: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse + (*v1.Meta)(nil), // 45: fits.api.v1.Meta + (*VLAN)(nil), // 46: fits.api.mvm.v1.VLAN + (*v1.Labels)(nil), // 47: fits.api.v1.Labels + (*v1.UpdateMeta)(nil), // 48: fits.api.v1.UpdateMeta } var file_fits_api_mvm_v1_mvm_proto_depIdxs = []int32{ 13, // 0: fits.api.mvm.v1.LinuxDetails.disks:type_name -> fits.api.mvm.v1.LinuxDisk 14, // 1: fits.api.mvm.v1.WindowsDetails.disks:type_name -> fits.api.mvm.v1.WindowsDisk - 40, // 2: fits.api.mvm.v1.ManagedVM.meta:type_name -> fits.api.v1.Meta + 45, // 2: fits.api.mvm.v1.ManagedVM.meta:type_name -> fits.api.v1.Meta 2, // 3: fits.api.mvm.v1.ManagedVM.status:type_name -> fits.api.mvm.v1.MVMStatus 0, // 4: fits.api.mvm.v1.ManagedVM.availability:type_name -> fits.api.mvm.v1.Availability 1, // 5: fits.api.mvm.v1.ManagedVM.serviceclass:type_name -> fits.api.mvm.v1.ServiceClass 5, // 6: fits.api.mvm.v1.ManagedVM.windows_details:type_name -> fits.api.mvm.v1.WindowsDetails 4, // 7: fits.api.mvm.v1.ManagedVM.linux_details:type_name -> fits.api.mvm.v1.LinuxDetails 6, // 8: fits.api.mvm.v1.ManagedVM.interfaces:type_name -> fits.api.mvm.v1.NetworkInterface - 41, // 9: fits.api.mvm.v1.ManagedVM.vlan:type_name -> fits.api.mvm.v1.VLAN + 46, // 9: fits.api.mvm.v1.ManagedVM.vlan:type_name -> fits.api.mvm.v1.VLAN 7, // 10: fits.api.mvm.v1.MVMServiceGetResponse.mvm:type_name -> fits.api.mvm.v1.ManagedVM 14, // 11: fits.api.mvm.v1.MVMServiceCreateWindowsRequest.disks:type_name -> fits.api.mvm.v1.WindowsDisk 13, // 12: fits.api.mvm.v1.MVMServiceCreateLinuxRequest.disks:type_name -> fits.api.mvm.v1.LinuxDisk - 42, // 13: fits.api.mvm.v1.MVMServiceCreateRequest.labels:type_name -> fits.api.v1.Labels + 47, // 13: fits.api.mvm.v1.MVMServiceCreateRequest.labels:type_name -> fits.api.v1.Labels 0, // 14: fits.api.mvm.v1.MVMServiceCreateRequest.availability:type_name -> fits.api.mvm.v1.Availability 1, // 15: fits.api.mvm.v1.MVMServiceCreateRequest.serviceclass:type_name -> fits.api.mvm.v1.ServiceClass 10, // 16: fits.api.mvm.v1.MVMServiceCreateRequest.windows:type_name -> fits.api.mvm.v1.MVMServiceCreateWindowsRequest 11, // 17: fits.api.mvm.v1.MVMServiceCreateRequest.linux:type_name -> fits.api.mvm.v1.MVMServiceCreateLinuxRequest 3, // 18: fits.api.mvm.v1.LinuxDisk.disk_type:type_name -> fits.api.mvm.v1.DiskType 3, // 19: fits.api.mvm.v1.WindowsDisk.disk_type:type_name -> fits.api.mvm.v1.DiskType - 7, // 20: fits.api.mvm.v1.MVMServiceListResponse.mvms:type_name -> fits.api.mvm.v1.ManagedVM - 12, // 21: fits.api.mvm.v1.MVMServiceValidateCreateRequest.create:type_name -> fits.api.mvm.v1.MVMServiceCreateRequest - 29, // 22: fits.api.mvm.v1.MVMServiceValidateAddDiskRequest.add_disk:type_name -> fits.api.mvm.v1.MVMServiceAddDiskRequest - 30, // 23: fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest.update_disk:type_name -> fits.api.mvm.v1.MVMServiceUpdateDiskRequest - 13, // 24: fits.api.mvm.v1.MVMServiceAddDiskRequest.linux:type_name -> fits.api.mvm.v1.LinuxDisk - 14, // 25: fits.api.mvm.v1.MVMServiceAddDiskRequest.windows:type_name -> fits.api.mvm.v1.WindowsDisk - 35, // 26: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest.add_network_interface:type_name -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest - 8, // 27: fits.api.mvm.v1.MVMService.Get:input_type -> fits.api.mvm.v1.MVMServiceGetRequest - 12, // 28: fits.api.mvm.v1.MVMService.Create:input_type -> fits.api.mvm.v1.MVMServiceCreateRequest - 16, // 29: fits.api.mvm.v1.MVMService.List:input_type -> fits.api.mvm.v1.MVMServiceListRequest - 18, // 30: fits.api.mvm.v1.MVMService.Delete:input_type -> fits.api.mvm.v1.MVMServiceDeleteRequest - 29, // 31: fits.api.mvm.v1.MVMService.AddDisk:input_type -> fits.api.mvm.v1.MVMServiceAddDiskRequest - 30, // 32: fits.api.mvm.v1.MVMService.UpdateDisk:input_type -> fits.api.mvm.v1.MVMServiceUpdateDiskRequest - 31, // 33: fits.api.mvm.v1.MVMService.DeleteDisk:input_type -> fits.api.mvm.v1.MVMServiceDeleteDiskRequest - 35, // 34: fits.api.mvm.v1.MVMService.AddNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest - 36, // 35: fits.api.mvm.v1.MVMService.MoveNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest - 37, // 36: fits.api.mvm.v1.MVMService.DeleteNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest - 20, // 37: fits.api.mvm.v1.MVMService.ValidateCreate:input_type -> fits.api.mvm.v1.MVMServiceValidateCreateRequest - 22, // 38: fits.api.mvm.v1.MVMService.ValidateAddDisk:input_type -> fits.api.mvm.v1.MVMServiceValidateAddDiskRequest - 24, // 39: fits.api.mvm.v1.MVMService.ValidateUpdateDisk:input_type -> fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest - 38, // 40: fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest - 9, // 41: fits.api.mvm.v1.MVMService.Get:output_type -> fits.api.mvm.v1.MVMServiceGetResponse - 15, // 42: fits.api.mvm.v1.MVMService.Create:output_type -> fits.api.mvm.v1.MVMServiceCreateResponse - 17, // 43: fits.api.mvm.v1.MVMService.List:output_type -> fits.api.mvm.v1.MVMServiceListResponse - 19, // 44: fits.api.mvm.v1.MVMService.Delete:output_type -> fits.api.mvm.v1.MVMServiceDeleteResponse - 26, // 45: fits.api.mvm.v1.MVMService.AddDisk:output_type -> fits.api.mvm.v1.MVMServiceAddDiskResponse - 27, // 46: fits.api.mvm.v1.MVMService.UpdateDisk:output_type -> fits.api.mvm.v1.MVMServiceUpdateDiskResponse - 28, // 47: fits.api.mvm.v1.MVMService.DeleteDisk:output_type -> fits.api.mvm.v1.MVMServiceDeleteDiskResponse - 32, // 48: fits.api.mvm.v1.MVMService.AddNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse - 33, // 49: fits.api.mvm.v1.MVMService.MoveNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse - 34, // 50: fits.api.mvm.v1.MVMService.DeleteNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse - 21, // 51: fits.api.mvm.v1.MVMService.ValidateCreate:output_type -> fits.api.mvm.v1.MVMServiceValidateCreateResponse - 23, // 52: fits.api.mvm.v1.MVMService.ValidateAddDisk:output_type -> fits.api.mvm.v1.MVMServiceValidateAddDiskResponse - 25, // 53: fits.api.mvm.v1.MVMService.ValidateUpdateDisk:output_type -> fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse - 39, // 54: fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse - 41, // [41:55] is the sub-list for method output_type - 27, // [27:41] is the sub-list for method input_type - 27, // [27:27] is the sub-list for extension type_name - 27, // [27:27] is the sub-list for extension extendee - 0, // [0:27] is the sub-list for field type_name + 48, // 20: fits.api.mvm.v1.MVMServiceUpdateRequest.update_meta:type_name -> fits.api.v1.UpdateMeta + 17, // 21: fits.api.mvm.v1.MVMServiceUpdateRequest.performance_class:type_name -> fits.api.mvm.v1.PerformanceClassChange + 18, // 22: fits.api.mvm.v1.MVMServiceUpdateRequest.service_class:type_name -> fits.api.mvm.v1.ServiceClassChange + 19, // 23: fits.api.mvm.v1.MVMServiceUpdateRequest.contact:type_name -> fits.api.mvm.v1.ContactChange + 1, // 24: fits.api.mvm.v1.ServiceClassChange.serviceclass:type_name -> fits.api.mvm.v1.ServiceClass + 7, // 25: fits.api.mvm.v1.MVMServiceListResponse.mvms:type_name -> fits.api.mvm.v1.ManagedVM + 12, // 26: fits.api.mvm.v1.MVMServiceValidateCreateRequest.create:type_name -> fits.api.mvm.v1.MVMServiceCreateRequest + 34, // 27: fits.api.mvm.v1.MVMServiceValidateAddDiskRequest.add_disk:type_name -> fits.api.mvm.v1.MVMServiceAddDiskRequest + 35, // 28: fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest.update_disk:type_name -> fits.api.mvm.v1.MVMServiceUpdateDiskRequest + 13, // 29: fits.api.mvm.v1.MVMServiceAddDiskRequest.linux:type_name -> fits.api.mvm.v1.LinuxDisk + 14, // 30: fits.api.mvm.v1.MVMServiceAddDiskRequest.windows:type_name -> fits.api.mvm.v1.WindowsDisk + 40, // 31: fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest.add_network_interface:type_name -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest + 8, // 32: fits.api.mvm.v1.MVMService.Get:input_type -> fits.api.mvm.v1.MVMServiceGetRequest + 12, // 33: fits.api.mvm.v1.MVMService.Create:input_type -> fits.api.mvm.v1.MVMServiceCreateRequest + 16, // 34: fits.api.mvm.v1.MVMService.Update:input_type -> fits.api.mvm.v1.MVMServiceUpdateRequest + 21, // 35: fits.api.mvm.v1.MVMService.List:input_type -> fits.api.mvm.v1.MVMServiceListRequest + 23, // 36: fits.api.mvm.v1.MVMService.Delete:input_type -> fits.api.mvm.v1.MVMServiceDeleteRequest + 34, // 37: fits.api.mvm.v1.MVMService.AddDisk:input_type -> fits.api.mvm.v1.MVMServiceAddDiskRequest + 35, // 38: fits.api.mvm.v1.MVMService.UpdateDisk:input_type -> fits.api.mvm.v1.MVMServiceUpdateDiskRequest + 36, // 39: fits.api.mvm.v1.MVMService.DeleteDisk:input_type -> fits.api.mvm.v1.MVMServiceDeleteDiskRequest + 40, // 40: fits.api.mvm.v1.MVMService.AddNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest + 41, // 41: fits.api.mvm.v1.MVMService.MoveNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest + 42, // 42: fits.api.mvm.v1.MVMService.DeleteNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest + 25, // 43: fits.api.mvm.v1.MVMService.ValidateCreate:input_type -> fits.api.mvm.v1.MVMServiceValidateCreateRequest + 27, // 44: fits.api.mvm.v1.MVMService.ValidateAddDisk:input_type -> fits.api.mvm.v1.MVMServiceValidateAddDiskRequest + 29, // 45: fits.api.mvm.v1.MVMService.ValidateUpdateDisk:input_type -> fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest + 43, // 46: fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface:input_type -> fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest + 9, // 47: fits.api.mvm.v1.MVMService.Get:output_type -> fits.api.mvm.v1.MVMServiceGetResponse + 15, // 48: fits.api.mvm.v1.MVMService.Create:output_type -> fits.api.mvm.v1.MVMServiceCreateResponse + 20, // 49: fits.api.mvm.v1.MVMService.Update:output_type -> fits.api.mvm.v1.MVMServiceUpdateResponse + 22, // 50: fits.api.mvm.v1.MVMService.List:output_type -> fits.api.mvm.v1.MVMServiceListResponse + 24, // 51: fits.api.mvm.v1.MVMService.Delete:output_type -> fits.api.mvm.v1.MVMServiceDeleteResponse + 31, // 52: fits.api.mvm.v1.MVMService.AddDisk:output_type -> fits.api.mvm.v1.MVMServiceAddDiskResponse + 32, // 53: fits.api.mvm.v1.MVMService.UpdateDisk:output_type -> fits.api.mvm.v1.MVMServiceUpdateDiskResponse + 33, // 54: fits.api.mvm.v1.MVMService.DeleteDisk:output_type -> fits.api.mvm.v1.MVMServiceDeleteDiskResponse + 37, // 55: fits.api.mvm.v1.MVMService.AddNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse + 38, // 56: fits.api.mvm.v1.MVMService.MoveNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse + 39, // 57: fits.api.mvm.v1.MVMService.DeleteNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse + 26, // 58: fits.api.mvm.v1.MVMService.ValidateCreate:output_type -> fits.api.mvm.v1.MVMServiceValidateCreateResponse + 28, // 59: fits.api.mvm.v1.MVMService.ValidateAddDisk:output_type -> fits.api.mvm.v1.MVMServiceValidateAddDiskResponse + 30, // 60: fits.api.mvm.v1.MVMService.ValidateUpdateDisk:output_type -> fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse + 44, // 61: fits.api.mvm.v1.MVMService.ValidateAddNetworkInterface:output_type -> fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse + 47, // [47:62] is the sub-list for method output_type + 32, // [32:47] is the sub-list for method input_type + 32, // [32:32] is the sub-list for extension type_name + 32, // [32:32] is the sub-list for extension extendee + 0, // [0:32] is the sub-list for field type_name } func init() { file_fits_api_mvm_v1_mvm_proto_init() } @@ -2988,19 +3360,24 @@ func file_fits_api_mvm_v1_mvm_proto_init() { } file_fits_api_mvm_v1_mvm_proto_msgTypes[9].OneofWrappers = []any{} file_fits_api_mvm_v1_mvm_proto_msgTypes[10].OneofWrappers = []any{} - file_fits_api_mvm_v1_mvm_proto_msgTypes[12].OneofWrappers = []any{} - file_fits_api_mvm_v1_mvm_proto_msgTypes[25].OneofWrappers = []any{ + file_fits_api_mvm_v1_mvm_proto_msgTypes[12].OneofWrappers = []any{ + (*MVMServiceUpdateRequest_PerformanceClass)(nil), + (*MVMServiceUpdateRequest_ServiceClass)(nil), + (*MVMServiceUpdateRequest_Contact)(nil), + } + file_fits_api_mvm_v1_mvm_proto_msgTypes[17].OneofWrappers = []any{} + file_fits_api_mvm_v1_mvm_proto_msgTypes[30].OneofWrappers = []any{ (*MVMServiceAddDiskRequest_Linux)(nil), (*MVMServiceAddDiskRequest_Windows)(nil), } - file_fits_api_mvm_v1_mvm_proto_msgTypes[26].OneofWrappers = []any{} + file_fits_api_mvm_v1_mvm_proto_msgTypes[31].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_fits_api_mvm_v1_mvm_proto_rawDesc), len(file_fits_api_mvm_v1_mvm_proto_rawDesc)), NumEnums: 4, - NumMessages: 36, + NumMessages: 41, NumExtensions: 0, NumServices: 1, }, diff --git a/go/fits/api/mvm/v1/mvmv1connect/mvm.connect.go b/go/fits/api/mvm/v1/mvmv1connect/mvm.connect.go index 520b93f..383fe8d 100644 --- a/go/fits/api/mvm/v1/mvmv1connect/mvm.connect.go +++ b/go/fits/api/mvm/v1/mvmv1connect/mvm.connect.go @@ -37,6 +37,8 @@ const ( MVMServiceGetProcedure = "/fits.api.mvm.v1.MVMService/Get" // MVMServiceCreateProcedure is the fully-qualified name of the MVMService's Create RPC. MVMServiceCreateProcedure = "/fits.api.mvm.v1.MVMService/Create" + // MVMServiceUpdateProcedure is the fully-qualified name of the MVMService's Update RPC. + MVMServiceUpdateProcedure = "/fits.api.mvm.v1.MVMService/Update" // MVMServiceListProcedure is the fully-qualified name of the MVMService's List RPC. MVMServiceListProcedure = "/fits.api.mvm.v1.MVMService/List" // MVMServiceDeleteProcedure is the fully-qualified name of the MVMService's Delete RPC. @@ -76,6 +78,8 @@ type MVMServiceClient interface { Get(context.Context, *v1.MVMServiceGetRequest) (*v1.MVMServiceGetResponse, error) // Creates a new MVM. Create(context.Context, *v1.MVMServiceCreateRequest) (*v1.MVMServiceCreateResponse, error) + // Updates a MVM. + Update(context.Context, *v1.MVMServiceUpdateRequest) (*v1.MVMServiceUpdateResponse, error) // Returns the list of all MVMs. List(context.Context, *v1.MVMServiceListRequest) (*v1.MVMServiceListResponse, error) // Deletes a MVM. @@ -128,6 +132,12 @@ func NewMVMServiceClient(httpClient connect.HTTPClient, baseURL string, opts ... connect.WithSchema(mVMServiceMethods.ByName("Create")), connect.WithClientOptions(opts...), ), + update: connect.NewClient[v1.MVMServiceUpdateRequest, v1.MVMServiceUpdateResponse]( + httpClient, + baseURL+MVMServiceUpdateProcedure, + connect.WithSchema(mVMServiceMethods.ByName("Update")), + connect.WithClientOptions(opts...), + ), list: connect.NewClient[v1.MVMServiceListRequest, v1.MVMServiceListResponse]( httpClient, baseURL+MVMServiceListProcedure, @@ -207,6 +217,7 @@ func NewMVMServiceClient(httpClient connect.HTTPClient, baseURL string, opts ... type mVMServiceClient struct { get *connect.Client[v1.MVMServiceGetRequest, v1.MVMServiceGetResponse] create *connect.Client[v1.MVMServiceCreateRequest, v1.MVMServiceCreateResponse] + update *connect.Client[v1.MVMServiceUpdateRequest, v1.MVMServiceUpdateResponse] list *connect.Client[v1.MVMServiceListRequest, v1.MVMServiceListResponse] delete *connect.Client[v1.MVMServiceDeleteRequest, v1.MVMServiceDeleteResponse] addDisk *connect.Client[v1.MVMServiceAddDiskRequest, v1.MVMServiceAddDiskResponse] @@ -239,6 +250,15 @@ func (c *mVMServiceClient) Create(ctx context.Context, req *v1.MVMServiceCreateR return nil, err } +// Update calls fits.api.mvm.v1.MVMService.Update. +func (c *mVMServiceClient) Update(ctx context.Context, req *v1.MVMServiceUpdateRequest) (*v1.MVMServiceUpdateResponse, error) { + response, err := c.update.CallUnary(ctx, connect.NewRequest(req)) + if response != nil { + return response.Msg, err + } + return nil, err +} + // List calls fits.api.mvm.v1.MVMService.List. func (c *mVMServiceClient) List(ctx context.Context, req *v1.MVMServiceListRequest) (*v1.MVMServiceListResponse, error) { response, err := c.list.CallUnary(ctx, connect.NewRequest(req)) @@ -353,6 +373,8 @@ type MVMServiceHandler interface { Get(context.Context, *v1.MVMServiceGetRequest) (*v1.MVMServiceGetResponse, error) // Creates a new MVM. Create(context.Context, *v1.MVMServiceCreateRequest) (*v1.MVMServiceCreateResponse, error) + // Updates a MVM. + Update(context.Context, *v1.MVMServiceUpdateRequest) (*v1.MVMServiceUpdateResponse, error) // Returns the list of all MVMs. List(context.Context, *v1.MVMServiceListRequest) (*v1.MVMServiceListResponse, error) // Deletes a MVM. @@ -401,6 +423,12 @@ func NewMVMServiceHandler(svc MVMServiceHandler, opts ...connect.HandlerOption) connect.WithSchema(mVMServiceMethods.ByName("Create")), connect.WithHandlerOptions(opts...), ) + mVMServiceUpdateHandler := connect.NewUnaryHandlerSimple( + MVMServiceUpdateProcedure, + svc.Update, + connect.WithSchema(mVMServiceMethods.ByName("Update")), + connect.WithHandlerOptions(opts...), + ) mVMServiceListHandler := connect.NewUnaryHandlerSimple( MVMServiceListProcedure, svc.List, @@ -479,6 +507,8 @@ func NewMVMServiceHandler(svc MVMServiceHandler, opts ...connect.HandlerOption) mVMServiceGetHandler.ServeHTTP(w, r) case MVMServiceCreateProcedure: mVMServiceCreateHandler.ServeHTTP(w, r) + case MVMServiceUpdateProcedure: + mVMServiceUpdateHandler.ServeHTTP(w, r) case MVMServiceListProcedure: mVMServiceListHandler.ServeHTTP(w, r) case MVMServiceDeleteProcedure: @@ -520,6 +550,10 @@ func (UnimplementedMVMServiceHandler) Create(context.Context, *v1.MVMServiceCrea return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.Create is not implemented")) } +func (UnimplementedMVMServiceHandler) Update(context.Context, *v1.MVMServiceUpdateRequest) (*v1.MVMServiceUpdateResponse, error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.Update is not implemented")) +} + func (UnimplementedMVMServiceHandler) List(context.Context, *v1.MVMServiceListRequest) (*v1.MVMServiceListResponse, error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("fits.api.mvm.v1.MVMService.List is not implemented")) } diff --git a/go/permissions/servicepermissions.go b/go/permissions/servicepermissions.go index 945214e..95decb7 100755 --- a/go/permissions/servicepermissions.go +++ b/go/permissions/servicepermissions.go @@ -64,6 +64,7 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.mvm.v1.MVMService/Get": {}, "/fits.api.mvm.v1.MVMService/List": {}, "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": {}, + "/fits.api.mvm.v1.MVMService/Update": {}, "/fits.api.mvm.v1.MVMService/UpdateDisk": {}, "/fits.api.mvm.v1.MVMService/ValidateAddDisk": {}, "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": {}, @@ -89,6 +90,7 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.mvm.v1.MVMService/Get": {}, "/fits.api.mvm.v1.MVMService/List": {}, "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": {}, + "/fits.api.mvm.v1.MVMService/Update": {}, "/fits.api.mvm.v1.MVMService/UpdateDisk": {}, "/fits.api.mvm.v1.MVMService/ValidateAddDisk": {}, "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": {}, @@ -124,6 +126,7 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.mvm.v1.MVMService/Get": {}, "/fits.api.mvm.v1.MVMService/List": {}, "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": {}, + "/fits.api.mvm.v1.MVMService/Update": {}, "/fits.api.mvm.v1.MVMService/UpdateDisk": {}, "/fits.api.mvm.v1.MVMService/ValidateAddDisk": {}, "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": {}, @@ -200,6 +203,7 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.mvm.v1.MVMService/Get": true, "/fits.api.mvm.v1.MVMService/List": true, "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": true, + "/fits.api.mvm.v1.MVMService/Update": true, "/fits.api.mvm.v1.MVMService/UpdateDisk": true, "/fits.api.mvm.v1.MVMService/ValidateAddDisk": true, "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": true, @@ -227,6 +231,7 @@ func GetServicePermissions() *ServicePermissions { "/fits.api.mvm.v1.MVMService/Get": false, "/fits.api.mvm.v1.MVMService/List": false, "/fits.api.mvm.v1.MVMService/MoveNetworkInterface": true, + "/fits.api.mvm.v1.MVMService/Update": true, "/fits.api.mvm.v1.MVMService/UpdateDisk": true, "/fits.api.mvm.v1.MVMService/ValidateAddDisk": false, "/fits.api.mvm.v1.MVMService/ValidateAddNetworkInterface": false, diff --git a/js/fits/api/mvm/v1/mvm_pb.ts b/js/fits/api/mvm/v1/mvm_pb.ts index cb24075..c32a60c 100644 --- a/js/fits/api/mvm/v1/mvm_pb.ts +++ b/js/fits/api/mvm/v1/mvm_pb.ts @@ -7,7 +7,7 @@ import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb"; import type { VLAN } from "./vlan_pb"; import { file_fits_api_mvm_v1_vlan } from "./vlan_pb"; -import type { Labels, Meta } from "../../v1/common_pb"; +import type { Labels, Meta, UpdateMeta } from "../../v1/common_pb"; import { file_fits_api_v1_common } from "../../v1/common_pb"; import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb"; import type { Message } from "@bufbuild/protobuf"; @@ -16,7 +16,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file fits/api/mvm/v1/mvm.proto. */ export const file_fits_api_mvm_v1_mvm: GenFile = /*@__PURE__*/ - fileDesc("ChlmaXRzL2FwaS9tdm0vdjEvbXZtLnByb3RvEg9maXRzLmFwaS5tdm0udjEidgoMTGludXhEZXRhaWxzEikKBWRpc2tzGAEgAygLMhouZml0cy5hcGkubXZtLnYxLkxpbnV4RGlzaxIbCglsZGFwX3V1aWQYAiABKAlCCLpIBXIDsAEBEh4KCWxkYXBfZnFkbhgDIAEoCUILukgIcgbAs66xAgEifgoOV2luZG93c0RldGFpbHMSKwoFZGlza3MYASADKAsyHC5maXRzLmFwaS5tdm0udjEuV2luZG93c0Rpc2sSHQoLZG9tYWluX3V1aWQYAiABKAlCCLpIBXIDsAEBEiAKC2RvbWFpbl9mcWRuGAMgASgJQgu6SAhyBsCzrrECASJeChBOZXR3b3JrSW50ZXJmYWNlEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEh4KCWlwYWRkcmVzcxgCIAEoCUILukgIcgbos66xAgESEgoKbWFjYWRkcmVzcxgDIAEoCSLjBQoJTWFuYWdlZFZNEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBGZxZG4YAyABKAlCC7pICHIGwLOusQIBEhsKBnRlbmFudBgEIAEoCUILukgIcgbAs66xAgESHgoMcHJvamVjdF91dWlkGAUgASgJQgi6SAVyA7ABARIZCgdvc191dWlkGAYgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAcgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYCCABKAlCCLpIBXIDsAEBEgsKA2NwdRgJIAEoDRILCgNyYW0YCiABKA0SDgoGYmFja3VwGAsgASgIEjQKBnN0YXR1cxgMIAEoDjIaLmZpdHMuYXBpLm12bS52MS5NVk1TdGF0dXNCCLpIBYIBAhABEhMKC3N0YXR1c19pbmZvGA0gASgJEj0KDGF2YWlsYWJpbGl0eRgOIAEoDjIdLmZpdHMuYXBpLm12bS52MS5BdmFpbGFiaWxpdHlCCLpIBYIBAhABEj0KDHNlcnZpY2VjbGFzcxgPIAEoDjIdLmZpdHMuYXBpLm12bS52MS5TZXJ2aWNlQ2xhc3NCCLpIBYIBAhABEjoKD3dpbmRvd3NfZGV0YWlscxgQIAEoCzIfLmZpdHMuYXBpLm12bS52MS5XaW5kb3dzRGV0YWlsc0gAEjYKDWxpbnV4X2RldGFpbHMYESABKAsyHS5maXRzLmFwaS5tdm0udjEuTGludXhEZXRhaWxzSAASNQoKaW50ZXJmYWNlcxgSIAMoCzIhLmZpdHMuYXBpLm12bS52MS5OZXR3b3JrSW50ZXJmYWNlEiMKBHZsYW4YEyABKAsyFS5maXRzLmFwaS5tdm0udjEuVkxBThIUCgxvcmRlcl9udW1iZXIYFCABKAlCEAoHZGV0YWlscxIFukgCCAEiWQoUTVZNU2VydmljZUdldFJlcXVlc3QSGwoEdXVpZBgBIAEoCUIIukgFcgOwAQFIAIgBARIbCgZ0ZW5hbnQYAiABKAlCC7pICHIGwLOusQIBQgcKBV91dWlkIkAKFU1WTVNlcnZpY2VHZXRSZXNwb25zZRInCgNtdm0YASABKAsyGi5maXRzLmFwaS5tdm0udjEuTWFuYWdlZFZNInYKHk1WTVNlcnZpY2VDcmVhdGVXaW5kb3dzUmVxdWVzdBIdCgtkb21haW5fdXVpZBgBIAEoCUIIukgFcgOwAQESNQoFZGlza3MYAiADKAsyHC5maXRzLmFwaS5tdm0udjEuV2luZG93c0Rpc2tCCLpIBZIBAggBInAKHE1WTVNlcnZpY2VDcmVhdGVMaW51eFJlcXVlc3QSGwoJbGRhcF91dWlkGAEgASgJQgi6SAVyA7ABARIzCgVkaXNrcxgCIAMoCzIaLmZpdHMuYXBpLm12bS52MS5MaW51eERpc2tCCLpIBZIBAggBItQEChdNVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBIeCgxwcm9qZWN0X3V1aWQYASABKAlCCLpIBXIDsAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESGQoHb3NfdXVpZBgDIAEoCUIIukgFcgOwAQESGwoJdmxhbl91dWlkGAQgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAUgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYBiABKAlCCLpIBXIDsAEBEgsKA2NwdRgHIAEoDRILCgNyYW0YCCABKA0SFAoMb3JkZXJfbnVtYmVyGAkgASgJEiMKBmxhYmVscxgKIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVscxIOCgZiYWNrdXAYCyABKAgSPQoMYXZhaWxhYmlsaXR5GAwgASgOMh0uZml0cy5hcGkubXZtLnYxLkF2YWlsYWJpbGl0eUIIukgFggECEAESPQoMc2VydmljZWNsYXNzGA0gASgOMh0uZml0cy5hcGkubXZtLnYxLlNlcnZpY2VDbGFzc0IIukgFggECEAESQgoHd2luZG93cxgOIAEoCzIvLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlV2luZG93c1JlcXVlc3RIABI+CgVsaW51eBgPIAEoCzItLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlTGludXhSZXF1ZXN0SABCEAoHbXZtdHlwZRIFukgCCAFCBwoFX25hbWUi5gEKCUxpbnV4RGlzaxIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEg0KBWxhYmVsGAIgASgJEhMKC2F1dG9fZXh0ZW5kGAMgASgIEhEKBHNpemUYBCABKARIAYgBARIYCgttb3VudF9wb2ludBgFIAEoCUgCiAEBEjsKCWRpc2tfdHlwZRgGIAEoDjIZLmZpdHMuYXBpLm12bS52MS5EaXNrVHlwZUIIukgFggECEAFIA4gBAUIHCgVfdXVpZEIHCgVfc2l6ZUIOCgxfbW91bnRfcG9pbnRCDAoKX2Rpc2tfdHlwZSLoAQoLV2luZG93c0Rpc2sSGwoEdXVpZBgBIAEoCUIIukgFcgOwAQFIAIgBARINCgVsYWJlbBgCIAEoCRITCgthdXRvX2V4dGVuZBgDIAEoCBIRCgRzaXplGAQgASgESAGIAQESGAoLZHJpdmVsZXR0ZXIYBSABKAlIAogBARI7CglkaXNrX3R5cGUYBiABKA4yGS5maXRzLmFwaS5tdm0udjEuRGlza1R5cGVCCLpIBYIBAhABSAOIAQFCBwoFX3V1aWRCBwoFX3NpemVCDgoMX2RyaXZlbGV0dGVyQgwKCl9kaXNrX3R5cGUiGgoYTVZNU2VydmljZUNyZWF0ZVJlc3BvbnNlIkQKFU1WTVNlcnZpY2VMaXN0UmVxdWVzdBIgCgZ0ZW5hbnQYASABKAlCC7pICHIGwLOusQIBSACIAQFCCQoHX3RlbmFudCJCChZNVk1TZXJ2aWNlTGlzdFJlc3BvbnNlEigKBG12bXMYASADKAsyGi5maXRzLmFwaS5tdm0udjEuTWFuYWdlZFZNImIKF01WTVNlcnZpY2VEZWxldGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEhYKBHV1aWQYAiABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgDIAEoCSIaChhNVk1TZXJ2aWNlRGVsZXRlUmVzcG9uc2UiYwofTVZNU2VydmljZVZhbGlkYXRlQ3JlYXRlUmVxdWVzdBJACgZjcmVhdGUYASABKAsyKC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZUNyZWF0ZVJlcXVlc3RCBrpIA8gBASIiCiBNVk1TZXJ2aWNlVmFsaWRhdGVDcmVhdGVSZXNwb25zZSJnCiBNVk1TZXJ2aWNlVmFsaWRhdGVBZGREaXNrUmVxdWVzdBJDCghhZGRfZGlzaxgBIAEoCzIpLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQWRkRGlza1JlcXVlc3RCBrpIA8gBASIjCiFNVk1TZXJ2aWNlVmFsaWRhdGVBZGREaXNrUmVzcG9uc2UicAojTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1JlcXVlc3QSSQoLdXBkYXRlX2Rpc2sYASABKAsyLC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVVwZGF0ZURpc2tSZXF1ZXN0Qga6SAPIAQEiJgokTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1Jlc3BvbnNlIhsKGU1WTVNlcnZpY2VBZGREaXNrUmVzcG9uc2UiHgocTVZNU2VydmljZVVwZGF0ZURpc2tSZXNwb25zZSIeChxNVk1TZXJ2aWNlRGVsZXRlRGlza1Jlc3BvbnNlItABChhNVk1TZXJ2aWNlQWRkRGlza1JlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAMgASgJEisKBWxpbnV4GAQgASgLMhouZml0cy5hcGkubXZtLnYxLkxpbnV4RGlza0gAEi8KB3dpbmRvd3MYBSABKAsyHC5maXRzLmFwaS5tdm0udjEuV2luZG93c0Rpc2tIAEINCgRkaXNrEgW6SAIIASLJAQobTVZNU2VydmljZVVwZGF0ZURpc2tSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhsKCWRpc2tfdXVpZBgCIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAQgASgJEhgKC2F1dG9fZXh0ZW5kGAUgASgISACIAQESEQoEc2l6ZRgGIAEoBEgBiAEBQg4KDF9hdXRvX2V4dGVuZEIHCgVfc2l6ZSKDAQobTVZNU2VydmljZURlbGV0ZURpc2tSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhsKCWRpc2tfdXVpZBgCIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAQgASgJIicKJU1WTVNlcnZpY2VBZGROZXR3b3JrSW50ZXJmYWNlUmVzcG9uc2UiKAomTVZNU2VydmljZU1vdmVOZXR3b3JrSW50ZXJmYWNlUmVzcG9uc2UiKgooTVZNU2VydmljZURlbGV0ZU5ldHdvcmtJbnRlcmZhY2VSZXNwb25zZSJvCiRNVk1TZXJ2aWNlQWRkTmV0d29ya0ludGVyZmFjZVJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAMgASgJIrUBCiVNVk1TZXJ2aWNlTW92ZU5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEiAKDmludGVyZmFjZV91dWlkGAIgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAMgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYBCABKAkSIQoPdGFyZ2V0X212bV91dWlkGAUgASgJQgi6SAVyA7ABASKUAQonTVZNU2VydmljZURlbGV0ZU5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEiAKDmludGVyZmFjZV91dWlkGAIgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAMgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYBCABKAkijAEKLE1WTVNlcnZpY2VWYWxpZGF0ZUFkZE5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0ElwKFWFkZF9uZXR3b3JrX2ludGVyZmFjZRgBIAEoCzI1LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQWRkTmV0d29ya0ludGVyZmFjZVJlcXVlc3RCBrpIA8gBASIvCi1NVk1TZXJ2aWNlVmFsaWRhdGVBZGROZXR3b3JrSW50ZXJmYWNlUmVzcG9uc2UqpgEKDEF2YWlsYWJpbGl0eRIiChhBVkFJTEFCSUxJVFlfVU5TUEVDSUZJRUQQABoEgrIZABIbCg9BVkFJTEFCSUxJVFlfVjAQARoGgrIZAlYwEhsKD0FWQUlMQUJJTElUWV9WMRACGgaCshkCVjESGwoPQVZBSUxBQklMSVRZX1YyEAMaBoKyGQJWMhIbCg9BVkFJTEFCSUxJVFlfVjMQBBoGgrIZAlYzKpMBCgxTZXJ2aWNlQ2xhc3MSIwoZU0VSVklDRV9DTEFTU19VTlNQRUNJRklFRBAAGgSCshkAEh4KEVNFUlZJQ0VfQ0xBU1NfU1oxEAEaB4KyGQNTWjESHgoRU0VSVklDRV9DTEFTU19TWjIQAhoHgrIZA1NaMhIeChFTRVJWSUNFX0NMQVNTX1NaMxADGgeCshkDU1ozKlAKCU1WTVN0YXR1cxIgChZNVk1fU1RBVFVTX1VOU1BFQ0lGSUVEEAAaBIKyGQASIQoRTVZNX1NUQVRVU19BQ1RJVkUQARoKgrIZBmFjdGl2ZSqFAQoIRGlza1R5cGUSHwoVRElTS19UWVBFX1VOU1BFQ0lGSUVEEAAaBIKyGQASGAoMRElTS19UWVBFX09TEAEaBoKyGQJvcxIgChBESVNLX1RZUEVfU1lTVEVNEAIaCoKyGQZzeXN0ZW0SHAoORElTS19UWVBFX0RBVEEQAxoIgrIZBGRhdGEykg4KCk1WTVNlcnZpY2USYQoDR2V0EiUuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VHZXRSZXF1ZXN0GiYuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VHZXRSZXNwb25zZSILyvMYAwECA+DzGAISaQoGQ3JlYXRlEiguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VDcmVhdGVSZXF1ZXN0GikuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VDcmVhdGVSZXNwb25zZSIKyvMYAgEC4PMYARJkCgRMaXN0EiYuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VMaXN0UmVxdWVzdBonLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlTGlzdFJlc3BvbnNlIgvK8xgDAQID4PMYAhJpCgZEZWxldGUSKC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZURlbGV0ZVJlcXVlc3QaKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZURlbGV0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmwKB0FkZERpc2sSKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZUFkZERpc2tSZXF1ZXN0GiouZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGREaXNrUmVzcG9uc2UiCsrzGAIBAuDzGAESdQoKVXBkYXRlRGlzaxIsLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVXBkYXRlRGlza1JlcXVlc3QaLS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVVwZGF0ZURpc2tSZXNwb25zZSIKyvMYAgEC4PMYARJ1CgpEZWxldGVEaXNrEiwuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VEZWxldGVEaXNrUmVxdWVzdBotLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlRGVsZXRlRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgBEpABChNBZGROZXR3b3JrSW50ZXJmYWNlEjUuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGROZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBo2LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEpMBChRNb3ZlTmV0d29ya0ludGVyZmFjZRI2LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlTW92ZU5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0GjcuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VNb3ZlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEpkBChZEZWxldGVOZXR3b3JrSW50ZXJmYWNlEjguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VEZWxldGVOZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBo5LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlRGVsZXRlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEoEBCg5WYWxpZGF0ZUNyZWF0ZRIwLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVmFsaWRhdGVDcmVhdGVSZXF1ZXN0GjEuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgCEoQBCg9WYWxpZGF0ZUFkZERpc2sSMS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1JlcXVlc3QaMi5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgCEo0BChJWYWxpZGF0ZVVwZGF0ZURpc2sSNC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1JlcXVlc3QaNS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgCEqgBChtWYWxpZGF0ZUFkZE5ldHdvcmtJbnRlcmZhY2USPS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlcXVlc3QaPi5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgCQq0BChNjb20uZml0cy5hcGkubXZtLnYxQghNdm1Qcm90b1ABWi1naXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS9tdm0vdjE7bXZtdjGiAgNGQU2qAg9GaXRzLkFwaS5Ndm0uVjHKAg9GaXRzXEFwaVxNdm1cVjHiAhtGaXRzXEFwaVxNdm1cVjFcR1BCTWV0YWRhdGHqAhJGaXRzOjpBcGk6Ok12bTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_mvm_v1_vlan, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); + fileDesc("ChlmaXRzL2FwaS9tdm0vdjEvbXZtLnByb3RvEg9maXRzLmFwaS5tdm0udjEidgoMTGludXhEZXRhaWxzEikKBWRpc2tzGAEgAygLMhouZml0cy5hcGkubXZtLnYxLkxpbnV4RGlzaxIbCglsZGFwX3V1aWQYAiABKAlCCLpIBXIDsAEBEh4KCWxkYXBfZnFkbhgDIAEoCUILukgIcgbAs66xAgEifgoOV2luZG93c0RldGFpbHMSKwoFZGlza3MYASADKAsyHC5maXRzLmFwaS5tdm0udjEuV2luZG93c0Rpc2sSHQoLZG9tYWluX3V1aWQYAiABKAlCCLpIBXIDsAEBEiAKC2RvbWFpbl9mcWRuGAMgASgJQgu6SAhyBsCzrrECASJeChBOZXR3b3JrSW50ZXJmYWNlEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEh4KCWlwYWRkcmVzcxgCIAEoCUILukgIcgbos66xAgESEgoKbWFjYWRkcmVzcxgDIAEoCSLjBQoJTWFuYWdlZFZNEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBGZxZG4YAyABKAlCC7pICHIGwLOusQIBEhsKBnRlbmFudBgEIAEoCUILukgIcgbAs66xAgESHgoMcHJvamVjdF91dWlkGAUgASgJQgi6SAVyA7ABARIZCgdvc191dWlkGAYgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAcgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYCCABKAlCCLpIBXIDsAEBEgsKA2NwdRgJIAEoDRILCgNyYW0YCiABKA0SDgoGYmFja3VwGAsgASgIEjQKBnN0YXR1cxgMIAEoDjIaLmZpdHMuYXBpLm12bS52MS5NVk1TdGF0dXNCCLpIBYIBAhABEhMKC3N0YXR1c19pbmZvGA0gASgJEj0KDGF2YWlsYWJpbGl0eRgOIAEoDjIdLmZpdHMuYXBpLm12bS52MS5BdmFpbGFiaWxpdHlCCLpIBYIBAhABEj0KDHNlcnZpY2VjbGFzcxgPIAEoDjIdLmZpdHMuYXBpLm12bS52MS5TZXJ2aWNlQ2xhc3NCCLpIBYIBAhABEjoKD3dpbmRvd3NfZGV0YWlscxgQIAEoCzIfLmZpdHMuYXBpLm12bS52MS5XaW5kb3dzRGV0YWlsc0gAEjYKDWxpbnV4X2RldGFpbHMYESABKAsyHS5maXRzLmFwaS5tdm0udjEuTGludXhEZXRhaWxzSAASNQoKaW50ZXJmYWNlcxgSIAMoCzIhLmZpdHMuYXBpLm12bS52MS5OZXR3b3JrSW50ZXJmYWNlEiMKBHZsYW4YEyABKAsyFS5maXRzLmFwaS5tdm0udjEuVkxBThIUCgxvcmRlcl9udW1iZXIYFCABKAlCEAoHZGV0YWlscxIFukgCCAEiWQoUTVZNU2VydmljZUdldFJlcXVlc3QSGwoEdXVpZBgBIAEoCUIIukgFcgOwAQFIAIgBARIbCgZ0ZW5hbnQYAiABKAlCC7pICHIGwLOusQIBQgcKBV91dWlkIkAKFU1WTVNlcnZpY2VHZXRSZXNwb25zZRInCgNtdm0YASABKAsyGi5maXRzLmFwaS5tdm0udjEuTWFuYWdlZFZNInYKHk1WTVNlcnZpY2VDcmVhdGVXaW5kb3dzUmVxdWVzdBIdCgtkb21haW5fdXVpZBgBIAEoCUIIukgFcgOwAQESNQoFZGlza3MYAiADKAsyHC5maXRzLmFwaS5tdm0udjEuV2luZG93c0Rpc2tCCLpIBZIBAggBInAKHE1WTVNlcnZpY2VDcmVhdGVMaW51eFJlcXVlc3QSGwoJbGRhcF91dWlkGAEgASgJQgi6SAVyA7ABARIzCgVkaXNrcxgCIAMoCzIaLmZpdHMuYXBpLm12bS52MS5MaW51eERpc2tCCLpIBZIBAggBItQEChdNVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBIeCgxwcm9qZWN0X3V1aWQYASABKAlCCLpIBXIDsAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESGQoHb3NfdXVpZBgDIAEoCUIIukgFcgOwAQESGwoJdmxhbl91dWlkGAQgASgJQgi6SAVyA7ABARIfCg1sb2NhdGlvbl91dWlkGAUgASgJQgi6SAVyA7ABARIeCgxjb250YWN0X3V1aWQYBiABKAlCCLpIBXIDsAEBEgsKA2NwdRgHIAEoDRILCgNyYW0YCCABKA0SFAoMb3JkZXJfbnVtYmVyGAkgASgJEiMKBmxhYmVscxgKIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVscxIOCgZiYWNrdXAYCyABKAgSPQoMYXZhaWxhYmlsaXR5GAwgASgOMh0uZml0cy5hcGkubXZtLnYxLkF2YWlsYWJpbGl0eUIIukgFggECEAESPQoMc2VydmljZWNsYXNzGA0gASgOMh0uZml0cy5hcGkubXZtLnYxLlNlcnZpY2VDbGFzc0IIukgFggECEAESQgoHd2luZG93cxgOIAEoCzIvLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlV2luZG93c1JlcXVlc3RIABI+CgVsaW51eBgPIAEoCzItLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlTGludXhSZXF1ZXN0SABCEAoHbXZtdHlwZRIFukgCCAFCBwoFX25hbWUi5gEKCUxpbnV4RGlzaxIbCgR1dWlkGAEgASgJQgi6SAVyA7ABAUgAiAEBEg0KBWxhYmVsGAIgASgJEhMKC2F1dG9fZXh0ZW5kGAMgASgIEhEKBHNpemUYBCABKARIAYgBARIYCgttb3VudF9wb2ludBgFIAEoCUgCiAEBEjsKCWRpc2tfdHlwZRgGIAEoDjIZLmZpdHMuYXBpLm12bS52MS5EaXNrVHlwZUIIukgFggECEAFIA4gBAUIHCgVfdXVpZEIHCgVfc2l6ZUIOCgxfbW91bnRfcG9pbnRCDAoKX2Rpc2tfdHlwZSLoAQoLV2luZG93c0Rpc2sSGwoEdXVpZBgBIAEoCUIIukgFcgOwAQFIAIgBARINCgVsYWJlbBgCIAEoCRITCgthdXRvX2V4dGVuZBgDIAEoCBIRCgRzaXplGAQgASgESAGIAQESGAoLZHJpdmVsZXR0ZXIYBSABKAlIAogBARI7CglkaXNrX3R5cGUYBiABKA4yGS5maXRzLmFwaS5tdm0udjEuRGlza1R5cGVCCLpIBYIBAhABSAOIAQFCBwoFX3V1aWRCBwoFX3NpemVCDgoMX2RyaXZlbGV0dGVyQgwKCl9kaXNrX3R5cGUiGgoYTVZNU2VydmljZUNyZWF0ZVJlc3BvbnNlIuACChdNVk1TZXJ2aWNlVXBkYXRlUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIZCgdwcm9qZWN0GAIgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYAyABKAkSNAoLdXBkYXRlX21ldGEYBCABKAsyFy5maXRzLmFwaS52MS5VcGRhdGVNZXRhQga6SAPIAQESRAoRcGVyZm9ybWFuY2VfY2xhc3MYBSABKAsyJy5maXRzLmFwaS5tdm0udjEuUGVyZm9ybWFuY2VDbGFzc0NoYW5nZUgAEjwKDXNlcnZpY2VfY2xhc3MYBiABKAsyIy5maXRzLmFwaS5tdm0udjEuU2VydmljZUNsYXNzQ2hhbmdlSAASMQoHY29udGFjdBgHIAEoCzIeLmZpdHMuYXBpLm12bS52MS5Db250YWN0Q2hhbmdlSABCDwoGYWN0aW9uEgW6SAIIASJGChZQZXJmb3JtYW5jZUNsYXNzQ2hhbmdlEhYKA2NwdRgBIAEoDUIJukgGKgQYQCgBEhQKA3JhbRgCIAEoDUIHukgEKgIgACJTChJTZXJ2aWNlQ2xhc3NDaGFuZ2USPQoMc2VydmljZWNsYXNzGAEgASgOMh0uZml0cy5hcGkubXZtLnYxLlNlcnZpY2VDbGFzc0IIukgFggECEAEiLwoNQ29udGFjdENoYW5nZRIeCgxjb250YWN0X3V1aWQYASABKAlCCLpIBXIDsAEBIhoKGE1WTVNlcnZpY2VVcGRhdGVSZXNwb25zZSJEChVNVk1TZXJ2aWNlTGlzdFJlcXVlc3QSIAoGdGVuYW50GAEgASgJQgu6SAhyBsCzrrECAUgAiAEBQgkKB190ZW5hbnQiQgoWTVZNU2VydmljZUxpc3RSZXNwb25zZRIoCgRtdm1zGAEgAygLMhouZml0cy5hcGkubXZtLnYxLk1hbmFnZWRWTSJiChdNVk1TZXJ2aWNlRGVsZXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARIWCgR1dWlkGAIgASgJQgi6SAVyA7ABARIUCgxvcmRlcl9udW1iZXIYAyABKAkiGgoYTVZNU2VydmljZURlbGV0ZVJlc3BvbnNlImMKH01WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlcXVlc3QSQAoGY3JlYXRlGAEgASgLMiguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VDcmVhdGVSZXF1ZXN0Qga6SAPIAQEiIgogTVZNU2VydmljZVZhbGlkYXRlQ3JlYXRlUmVzcG9uc2UiZwogTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1JlcXVlc3QSQwoIYWRkX2Rpc2sYASABKAsyKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZUFkZERpc2tSZXF1ZXN0Qga6SAPIAQEiIwohTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1Jlc3BvbnNlInAKI01WTVNlcnZpY2VWYWxpZGF0ZVVwZGF0ZURpc2tSZXF1ZXN0EkkKC3VwZGF0ZV9kaXNrGAEgASgLMiwuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VVcGRhdGVEaXNrUmVxdWVzdEIGukgDyAEBIiYKJE1WTVNlcnZpY2VWYWxpZGF0ZVVwZGF0ZURpc2tSZXNwb25zZSIbChlNVk1TZXJ2aWNlQWRkRGlza1Jlc3BvbnNlIh4KHE1WTVNlcnZpY2VVcGRhdGVEaXNrUmVzcG9uc2UiHgocTVZNU2VydmljZURlbGV0ZURpc2tSZXNwb25zZSLQAQoYTVZNU2VydmljZUFkZERpc2tSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgDIAEoCRIrCgVsaW51eBgEIAEoCzIaLmZpdHMuYXBpLm12bS52MS5MaW51eERpc2tIABIvCgd3aW5kb3dzGAUgASgLMhwuZml0cy5hcGkubXZtLnYxLldpbmRvd3NEaXNrSABCDQoEZGlzaxIFukgCCAEiyQEKG01WTVNlcnZpY2VVcGRhdGVEaXNrUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIbCglkaXNrX3V1aWQYAiABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgEIAEoCRIYCgthdXRvX2V4dGVuZBgFIAEoCEgAiAEBEhEKBHNpemUYBiABKARIAYgBAUIOCgxfYXV0b19leHRlbmRCBwoFX3NpemUigwEKG01WTVNlcnZpY2VEZWxldGVEaXNrUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIbCglkaXNrX3V1aWQYAiABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgEIAEoCSInCiVNVk1TZXJ2aWNlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIigKJk1WTVNlcnZpY2VNb3ZlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIioKKE1WTVNlcnZpY2VEZWxldGVOZXR3b3JrSW50ZXJmYWNlUmVzcG9uc2UibwokTVZNU2VydmljZUFkZE5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBEhQKDG9yZGVyX251bWJlchgDIAEoCSK1AQolTVZNU2VydmljZU1vdmVOZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIgCg5pbnRlcmZhY2VfdXVpZBgCIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAQgASgJEiEKD3RhcmdldF9tdm1fdXVpZBgFIAEoCUIIukgFcgOwAQEilAEKJ01WTVNlcnZpY2VEZWxldGVOZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIgCg5pbnRlcmZhY2VfdXVpZBgCIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESFAoMb3JkZXJfbnVtYmVyGAQgASgJIowBCixNVk1TZXJ2aWNlVmFsaWRhdGVBZGROZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBJcChVhZGRfbmV0d29ya19pbnRlcmZhY2UYASABKAsyNS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZUFkZE5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0Qga6SAPIAQEiLwotTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlKqYBCgxBdmFpbGFiaWxpdHkSIgoYQVZBSUxBQklMSVRZX1VOU1BFQ0lGSUVEEAAaBIKyGQASGwoPQVZBSUxBQklMSVRZX1YwEAEaBoKyGQJWMBIbCg9BVkFJTEFCSUxJVFlfVjEQAhoGgrIZAlYxEhsKD0FWQUlMQUJJTElUWV9WMhADGgaCshkCVjISGwoPQVZBSUxBQklMSVRZX1YzEAQaBoKyGQJWMyqTAQoMU2VydmljZUNsYXNzEiMKGVNFUlZJQ0VfQ0xBU1NfVU5TUEVDSUZJRUQQABoEgrIZABIeChFTRVJWSUNFX0NMQVNTX1NaMRABGgeCshkDU1oxEh4KEVNFUlZJQ0VfQ0xBU1NfU1oyEAIaB4KyGQNTWjISHgoRU0VSVklDRV9DTEFTU19TWjMQAxoHgrIZA1NaMypQCglNVk1TdGF0dXMSIAoWTVZNX1NUQVRVU19VTlNQRUNJRklFRBAAGgSCshkAEiEKEU1WTV9TVEFUVVNfQUNUSVZFEAEaCoKyGQZhY3RpdmUqhQEKCERpc2tUeXBlEh8KFURJU0tfVFlQRV9VTlNQRUNJRklFRBAAGgSCshkAEhgKDERJU0tfVFlQRV9PUxABGgaCshkCb3MSIAoQRElTS19UWVBFX1NZU1RFTRACGgqCshkGc3lzdGVtEhwKDkRJU0tfVFlQRV9EQVRBEAMaCIKyGQRkYXRhMv0OCgpNVk1TZXJ2aWNlEmEKA0dldBIlLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlR2V0UmVxdWVzdBomLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmkKBkNyZWF0ZRIoLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBopLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAESaQoGVXBkYXRlEiguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VVcGRhdGVSZXF1ZXN0GikuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VVcGRhdGVSZXNwb25zZSIKyvMYAgEC4PMYARJkCgRMaXN0EiYuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VMaXN0UmVxdWVzdBonLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlTGlzdFJlc3BvbnNlIgvK8xgDAQID4PMYAhJpCgZEZWxldGUSKC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZURlbGV0ZVJlcXVlc3QaKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZURlbGV0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBEmwKB0FkZERpc2sSKS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZUFkZERpc2tSZXF1ZXN0GiouZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGREaXNrUmVzcG9uc2UiCsrzGAIBAuDzGAESdQoKVXBkYXRlRGlzaxIsLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVXBkYXRlRGlza1JlcXVlc3QaLS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVVwZGF0ZURpc2tSZXNwb25zZSIKyvMYAgEC4PMYARJ1CgpEZWxldGVEaXNrEiwuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VEZWxldGVEaXNrUmVxdWVzdBotLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlRGVsZXRlRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgBEpABChNBZGROZXR3b3JrSW50ZXJmYWNlEjUuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VBZGROZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBo2LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEpMBChRNb3ZlTmV0d29ya0ludGVyZmFjZRI2LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlTW92ZU5ldHdvcmtJbnRlcmZhY2VSZXF1ZXN0GjcuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VNb3ZlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEpkBChZEZWxldGVOZXR3b3JrSW50ZXJmYWNlEjguZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VEZWxldGVOZXR3b3JrSW50ZXJmYWNlUmVxdWVzdBo5LmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlRGVsZXRlTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgBEoEBCg5WYWxpZGF0ZUNyZWF0ZRIwLmZpdHMuYXBpLm12bS52MS5NVk1TZXJ2aWNlVmFsaWRhdGVDcmVhdGVSZXF1ZXN0GjEuZml0cy5hcGkubXZtLnYxLk1WTVNlcnZpY2VWYWxpZGF0ZUNyZWF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgCEoQBCg9WYWxpZGF0ZUFkZERpc2sSMS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1JlcXVlc3QaMi5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgCEo0BChJWYWxpZGF0ZVVwZGF0ZURpc2sSNC5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1JlcXVlc3QaNS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlVXBkYXRlRGlza1Jlc3BvbnNlIgrK8xgCAQLg8xgCEqgBChtWYWxpZGF0ZUFkZE5ldHdvcmtJbnRlcmZhY2USPS5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlcXVlc3QaPi5maXRzLmFwaS5tdm0udjEuTVZNU2VydmljZVZhbGlkYXRlQWRkTmV0d29ya0ludGVyZmFjZVJlc3BvbnNlIgrK8xgCAQLg8xgCQq0BChNjb20uZml0cy5hcGkubXZtLnYxQghNdm1Qcm90b1ABWi1naXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS9tdm0vdjE7bXZtdjGiAgNGQU2qAg9GaXRzLkFwaS5Ndm0uVjHKAg9GaXRzXEFwaVxNdm1cVjHiAhtGaXRzXEFwaVxNdm1cVjFcR1BCTWV0YWRhdGHqAhJGaXRzOjpBcGk6Ok12bTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_mvm_v1_vlan, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]); /** * Linux-specific MVM details. @@ -667,6 +667,176 @@ export type MVMServiceCreateResponse = Message<"fits.api.mvm.v1.MVMServiceCreate export const MVMServiceCreateResponseSchema: GenMessage = /*@__PURE__*/ messageDesc(file_fits_api_mvm_v1_mvm, 11); +/** + * Request to change a mutable property of an existing MVM. + * Exactly one action must be set; each maps onto its own upstream endpoint. + * TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per + * action); combined changes would need + * server-side fan-out without rollback. + * TODO: clarify async semantics — this is a queued "request to update", not an + * immediate update (e.g. disk changes are applied overnight). Consider + * renaming to reflect that. + * TODO: differentiate between fire-and-forget and queued actions in the API. + * TODO: is it possible to expose the pending-change queue (list/cancel) to the caller? + * TODO: clarify who enqueues the request and whether a pending change blocks + * further edits (e.g. after AddDisk, until the change executes). + * + * @generated from message fits.api.mvm.v1.MVMServiceUpdateRequest + */ +export type MVMServiceUpdateRequest = Message<"fits.api.mvm.v1.MVMServiceUpdateRequest"> & { + /** + * UUID of the MVM to update. + * + * @generated from field: string uuid = 1; + */ + uuid: string; + + /** + * Project the MVM belongs to. + * + * @generated from field: string project = 2; + */ + project: string; + + /** + * Order reference for this operation. + * TODO: can this be optional? + * + * @generated from field: string order_number = 3; + */ + orderNumber: string; + + /** + * Timestamp and strategy for this update. + * + * @generated from field: fits.api.v1.UpdateMeta update_meta = 4; + */ + updateMeta?: UpdateMeta | undefined; + + /** + * The change to apply. + * + * @generated from oneof fits.api.mvm.v1.MVMServiceUpdateRequest.action + */ + action: { + /** + * Change the CPU/RAM performance class. + * + * @generated from field: fits.api.mvm.v1.PerformanceClassChange performance_class = 5; + */ + value: PerformanceClassChange; + case: "performanceClass"; + } | { + /** + * Change the service class. + * + * @generated from field: fits.api.mvm.v1.ServiceClassChange service_class = 6; + */ + value: ServiceClassChange; + case: "serviceClass"; + } | { + /** + * Change the contact person. + * + * @generated from field: fits.api.mvm.v1.ContactChange contact = 7; + */ + value: ContactChange; + case: "contact"; + } | { case: undefined; value?: undefined }; +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceUpdateRequest. + * Use `create(MVMServiceUpdateRequestSchema)` to create a new message. + */ +export const MVMServiceUpdateRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 12); + +/** + * PerformanceClassChange is the payload for changing a MVM's CPU and RAM. + * + * @generated from message fits.api.mvm.v1.PerformanceClassChange + */ +export type PerformanceClassChange = Message<"fits.api.mvm.v1.PerformanceClassChange"> & { + /** + * Number of vCPUs (1-64). + * + * @generated from field: uint32 cpu = 1; + */ + cpu: number; + + /** + * RAM size in GB. + * + * @generated from field: uint32 ram = 2; + */ + ram: number; +}; + +/** + * Describes the message fits.api.mvm.v1.PerformanceClassChange. + * Use `create(PerformanceClassChangeSchema)` to create a new message. + */ +export const PerformanceClassChangeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 13); + +/** + * ServiceClassChange is the payload for changing a MVM's service class. + * + * @generated from message fits.api.mvm.v1.ServiceClassChange + */ +export type ServiceClassChange = Message<"fits.api.mvm.v1.ServiceClassChange"> & { + /** + * Target service class. + * + * @generated from field: fits.api.mvm.v1.ServiceClass serviceclass = 1; + */ + serviceclass: ServiceClass; +}; + +/** + * Describes the message fits.api.mvm.v1.ServiceClassChange. + * Use `create(ServiceClassChangeSchema)` to create a new message. + */ +export const ServiceClassChangeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 14); + +/** + * ContactChange is the payload for changing a MVM's contact person. + * + * @generated from message fits.api.mvm.v1.ContactChange + */ +export type ContactChange = Message<"fits.api.mvm.v1.ContactChange"> & { + /** + * UUID of the new contact. + * + * @generated from field: string contact_uuid = 1; + */ + contactUuid: string; +}; + +/** + * Describes the message fits.api.mvm.v1.ContactChange. + * Use `create(ContactChangeSchema)` to create a new message. + */ +export const ContactChangeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 15); + +/** + * Response for Update; an empty response means the change was accepted. + * + * @generated from message fits.api.mvm.v1.MVMServiceUpdateResponse + */ +export type MVMServiceUpdateResponse = Message<"fits.api.mvm.v1.MVMServiceUpdateResponse"> & { +}; + +/** + * Describes the message fits.api.mvm.v1.MVMServiceUpdateResponse. + * Use `create(MVMServiceUpdateResponseSchema)` to create a new message. + */ +export const MVMServiceUpdateResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_fits_api_mvm_v1_mvm, 16); + /** * Request to list MVMs. * @@ -686,7 +856,7 @@ export type MVMServiceListRequest = Message<"fits.api.mvm.v1.MVMServiceListReque * Use `create(MVMServiceListRequestSchema)` to create a new message. */ export const MVMServiceListRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 12); + messageDesc(file_fits_api_mvm_v1_mvm, 17); /** * Response containing the list of MVMs. @@ -707,7 +877,7 @@ export type MVMServiceListResponse = Message<"fits.api.mvm.v1.MVMServiceListResp * Use `create(MVMServiceListResponseSchema)` to create a new message. */ export const MVMServiceListResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 13); + messageDesc(file_fits_api_mvm_v1_mvm, 18); /** * Request to cancel a MVM instance. @@ -743,7 +913,7 @@ export type MVMServiceDeleteRequest = Message<"fits.api.mvm.v1.MVMServiceDeleteR * Use `create(MVMServiceDeleteRequestSchema)` to create a new message. */ export const MVMServiceDeleteRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 14); + messageDesc(file_fits_api_mvm_v1_mvm, 19); /** * Response for Delete; an empty response means the cancellation was accepted. @@ -758,7 +928,7 @@ export type MVMServiceDeleteResponse = Message<"fits.api.mvm.v1.MVMServiceDelete * Use `create(MVMServiceDeleteResponseSchema)` to create a new message. */ export const MVMServiceDeleteResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 15); + messageDesc(file_fits_api_mvm_v1_mvm, 20); /** * Request to validate a MVM create without creating anything. @@ -779,7 +949,7 @@ export type MVMServiceValidateCreateRequest = Message<"fits.api.mvm.v1.MVMServic * Use `create(MVMServiceValidateCreateRequestSchema)` to create a new message. */ export const MVMServiceValidateCreateRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 16); + messageDesc(file_fits_api_mvm_v1_mvm, 21); /** * Response for ValidateCreate; violations are returned as an InvalidArgument error. @@ -794,7 +964,7 @@ export type MVMServiceValidateCreateResponse = Message<"fits.api.mvm.v1.MVMServi * Use `create(MVMServiceValidateCreateResponseSchema)` to create a new message. */ export const MVMServiceValidateCreateResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 17); + messageDesc(file_fits_api_mvm_v1_mvm, 22); /** * Request to validate an AddDisk without ordering anything. @@ -815,7 +985,7 @@ export type MVMServiceValidateAddDiskRequest = Message<"fits.api.mvm.v1.MVMServi * Use `create(MVMServiceValidateAddDiskRequestSchema)` to create a new message. */ export const MVMServiceValidateAddDiskRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 18); + messageDesc(file_fits_api_mvm_v1_mvm, 23); /** * Response for ValidateAddDisk; violations are returned as an InvalidArgument error. @@ -830,7 +1000,7 @@ export type MVMServiceValidateAddDiskResponse = Message<"fits.api.mvm.v1.MVMServ * Use `create(MVMServiceValidateAddDiskResponseSchema)` to create a new message. */ export const MVMServiceValidateAddDiskResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 19); + messageDesc(file_fits_api_mvm_v1_mvm, 24); /** * Request to validate an UpdateDisk without changing anything. @@ -851,7 +1021,7 @@ export type MVMServiceValidateUpdateDiskRequest = Message<"fits.api.mvm.v1.MVMSe * Use `create(MVMServiceValidateUpdateDiskRequestSchema)` to create a new message. */ export const MVMServiceValidateUpdateDiskRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 20); + messageDesc(file_fits_api_mvm_v1_mvm, 25); /** * Response for ValidateUpdateDisk; violations are returned as an InvalidArgument error. @@ -866,7 +1036,7 @@ export type MVMServiceValidateUpdateDiskResponse = Message<"fits.api.mvm.v1.MVMS * Use `create(MVMServiceValidateUpdateDiskResponseSchema)` to create a new message. */ export const MVMServiceValidateUpdateDiskResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 21); + messageDesc(file_fits_api_mvm_v1_mvm, 26); /** * Response for AddDisk. @@ -881,7 +1051,7 @@ export type MVMServiceAddDiskResponse = Message<"fits.api.mvm.v1.MVMServiceAddDi * Use `create(MVMServiceAddDiskResponseSchema)` to create a new message. */ export const MVMServiceAddDiskResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 22); + messageDesc(file_fits_api_mvm_v1_mvm, 27); /** * Response for UpdateDisk. @@ -896,7 +1066,7 @@ export type MVMServiceUpdateDiskResponse = Message<"fits.api.mvm.v1.MVMServiceUp * Use `create(MVMServiceUpdateDiskResponseSchema)` to create a new message. */ export const MVMServiceUpdateDiskResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 23); + messageDesc(file_fits_api_mvm_v1_mvm, 28); /** * Response for DeleteDisk. @@ -911,7 +1081,7 @@ export type MVMServiceDeleteDiskResponse = Message<"fits.api.mvm.v1.MVMServiceDe * Use `create(MVMServiceDeleteDiskResponseSchema)` to create a new message. */ export const MVMServiceDeleteDiskResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 24); + messageDesc(file_fits_api_mvm_v1_mvm, 29); /** * Request to order an additional data disk for a MVM. @@ -970,7 +1140,7 @@ export type MVMServiceAddDiskRequest = Message<"fits.api.mvm.v1.MVMServiceAddDis * Use `create(MVMServiceAddDiskRequestSchema)` to create a new message. */ export const MVMServiceAddDiskRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 25); + messageDesc(file_fits_api_mvm_v1_mvm, 30); /** * Request to change an existing disk; only size and auto-extend are @@ -1028,7 +1198,7 @@ export type MVMServiceUpdateDiskRequest = Message<"fits.api.mvm.v1.MVMServiceUpd * Use `create(MVMServiceUpdateDiskRequestSchema)` to create a new message. */ export const MVMServiceUpdateDiskRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 26); + messageDesc(file_fits_api_mvm_v1_mvm, 31); /** * Request to cancel a data disk; OS and system disks are rejected by the @@ -1072,7 +1242,7 @@ export type MVMServiceDeleteDiskRequest = Message<"fits.api.mvm.v1.MVMServiceDel * Use `create(MVMServiceDeleteDiskRequestSchema)` to create a new message. */ export const MVMServiceDeleteDiskRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 27); + messageDesc(file_fits_api_mvm_v1_mvm, 32); /** * Response for AddNetworkInterface. @@ -1087,7 +1257,7 @@ export type MVMServiceAddNetworkInterfaceResponse = Message<"fits.api.mvm.v1.MVM * Use `create(MVMServiceAddNetworkInterfaceResponseSchema)` to create a new message. */ export const MVMServiceAddNetworkInterfaceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 28); + messageDesc(file_fits_api_mvm_v1_mvm, 33); /** * Response for MoveNetworkInterface. @@ -1102,7 +1272,7 @@ export type MVMServiceMoveNetworkInterfaceResponse = Message<"fits.api.mvm.v1.MV * Use `create(MVMServiceMoveNetworkInterfaceResponseSchema)` to create a new message. */ export const MVMServiceMoveNetworkInterfaceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 29); + messageDesc(file_fits_api_mvm_v1_mvm, 34); /** * Response for DeleteNetworkInterface. @@ -1117,7 +1287,7 @@ export type MVMServiceDeleteNetworkInterfaceResponse = Message<"fits.api.mvm.v1. * Use `create(MVMServiceDeleteNetworkInterfaceResponseSchema)` to create a new message. */ export const MVMServiceDeleteNetworkInterfaceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 30); + messageDesc(file_fits_api_mvm_v1_mvm, 35); /** * Request to order an additional network interface for a MVM. @@ -1155,7 +1325,7 @@ export type MVMServiceAddNetworkInterfaceRequest = Message<"fits.api.mvm.v1.MVMS * Use `create(MVMServiceAddNetworkInterfaceRequestSchema)` to create a new message. */ export const MVMServiceAddNetworkInterfaceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 31); + messageDesc(file_fits_api_mvm_v1_mvm, 36); /** * Request to move a network interface from one MVM to another. @@ -1205,7 +1375,7 @@ export type MVMServiceMoveNetworkInterfaceRequest = Message<"fits.api.mvm.v1.MVM * Use `create(MVMServiceMoveNetworkInterfaceRequestSchema)` to create a new message. */ export const MVMServiceMoveNetworkInterfaceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 32); + messageDesc(file_fits_api_mvm_v1_mvm, 37); /** * Request to delete a network interface from a MVM. @@ -1248,7 +1418,7 @@ export type MVMServiceDeleteNetworkInterfaceRequest = Message<"fits.api.mvm.v1.M * Use `create(MVMServiceDeleteNetworkInterfaceRequestSchema)` to create a new message. */ export const MVMServiceDeleteNetworkInterfaceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 33); + messageDesc(file_fits_api_mvm_v1_mvm, 38); /** * Request to validate an AddNetworkInterface without ordering anything. @@ -1269,7 +1439,7 @@ export type MVMServiceValidateAddNetworkInterfaceRequest = Message<"fits.api.mvm * Use `create(MVMServiceValidateAddNetworkInterfaceRequestSchema)` to create a new message. */ export const MVMServiceValidateAddNetworkInterfaceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 34); + messageDesc(file_fits_api_mvm_v1_mvm, 39); /** * Response for ValidateAddNetworkInterface; violations are returned as an InvalidArgument error. @@ -1284,7 +1454,7 @@ export type MVMServiceValidateAddNetworkInterfaceResponse = Message<"fits.api.mv * Use `create(MVMServiceValidateAddNetworkInterfaceResponseSchema)` to create a new message. */ export const MVMServiceValidateAddNetworkInterfaceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_fits_api_mvm_v1_mvm, 35); + messageDesc(file_fits_api_mvm_v1_mvm, 40); /** * Availability specifies the availability level of a MVM; higher value = higher availability. @@ -1496,6 +1666,16 @@ export const MVMService: GenService<{ input: typeof MVMServiceCreateRequestSchema; output: typeof MVMServiceCreateResponseSchema; }, + /** + * Updates a MVM. + * + * @generated from rpc fits.api.mvm.v1.MVMService.Update + */ + update: { + methodKind: "unary"; + input: typeof MVMServiceUpdateRequestSchema; + output: typeof MVMServiceUpdateResponseSchema; + }, /** * Returns the list of all MVMs. * diff --git a/proto/fits/api/mvm/v1/mvm.proto b/proto/fits/api/mvm/v1/mvm.proto index d019a2e..ccb2607 100644 --- a/proto/fits/api/mvm/v1/mvm.proto +++ b/proto/fits/api/mvm/v1/mvm.proto @@ -22,7 +22,12 @@ service MVMService { option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; option (fits.api.v1.auditing) = AUDITING_INCLUDED; } - + // Updates a MVM. + rpc Update(MVMServiceUpdateRequest) returns (MVMServiceUpdateResponse) { + option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; + option (fits.api.v1.project_roles) = PROJECT_ROLE_EDITOR; + option (fits.api.v1.auditing) = AUDITING_INCLUDED; + } // Returns the list of all MVMs. rpc List(MVMServiceListRequest) returns (MVMServiceListResponse) { option (fits.api.v1.project_roles) = PROJECT_ROLE_OWNER; @@ -373,6 +378,66 @@ message WindowsDisk { // Response for Create; an empty response means the MVM was accepted. message MVMServiceCreateResponse {} +// Request to change a mutable property of an existing MVM. +// Exactly one action must be set; each maps onto its own upstream endpoint. +// TODO: the oneof mirrors the upstream constraint (nulink has one endpoint per +// action); combined changes would need +// server-side fan-out without rollback. +// TODO: clarify async semantics — this is a queued "request to update", not an +// immediate update (e.g. disk changes are applied overnight). Consider +// renaming to reflect that. +// TODO: differentiate between fire-and-forget and queued actions in the API. +// TODO: is it possible to expose the pending-change queue (list/cancel) to the caller? +// TODO: clarify who enqueues the request and whether a pending change blocks +// further edits (e.g. after AddDisk, until the change executes). +message MVMServiceUpdateRequest { + // UUID of the MVM to update. + string uuid = 1 [(buf.validate.field).string.uuid = true]; + // Project the MVM belongs to. + string project = 2 [(buf.validate.field).string.uuid = true]; + // Order reference for this operation. + // TODO: can this be optional? + string order_number = 3; + // Timestamp and strategy for this update. + fits.api.v1.UpdateMeta update_meta = 4 [(buf.validate.field).required = true]; + // The change to apply. + oneof action { + option (buf.validate.oneof).required = true; + // Change the CPU/RAM performance class. + PerformanceClassChange performance_class = 5; + // Change the service class. + ServiceClassChange service_class = 6; + // Change the contact person. + ContactChange contact = 7; + } +} + +// PerformanceClassChange is the payload for changing a MVM's CPU and RAM. +message PerformanceClassChange { + // Number of vCPUs (1-64). + uint32 cpu = 1 [ + (buf.validate.field).uint32.gte = 1, + (buf.validate.field).uint32.lte = 64 + ]; + // RAM size in GB. + uint32 ram = 2 [(buf.validate.field).uint32.gt = 0]; +} + +// ServiceClassChange is the payload for changing a MVM's service class. +message ServiceClassChange { + // Target service class. + ServiceClass serviceclass = 1 [(buf.validate.field).enum.defined_only = true]; +} + +// ContactChange is the payload for changing a MVM's contact person. +message ContactChange { + // UUID of the new contact. + string contact_uuid = 1 [(buf.validate.field).string.uuid = true]; +} + +// Response for Update; an empty response means the change was accepted. +message MVMServiceUpdateResponse {} + // Request to list MVMs. message MVMServiceListRequest { // Tenant of the MVMs. diff --git a/python/fits/api/mvm/v1/mvm_connect.py b/python/fits/api/mvm/v1/mvm_connect.py index 1da90f1..2a95968 100644 --- a/python/fits/api/mvm/v1/mvm_connect.py +++ b/python/fits/api/mvm/v1/mvm_connect.py @@ -24,6 +24,9 @@ async def get(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMService async def create(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + async def update(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + async def list(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") @@ -86,6 +89,16 @@ def __init__(self, service: MVMService | AsyncGenerator[MVMService], *, intercep ), function=svc.create, ), + "/fits.api.mvm.v1.MVMService/Update": Endpoint.unary( + method=MethodInfo( + name="Update", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update, + ), "/fits.api.mvm.v1.MVMService/List": Endpoint.unary( method=MethodInfo( name="List", @@ -260,6 +273,26 @@ async def create( timeout_ms=timeout_ms, ) + async def update( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="Update", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + async def list( self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, @@ -509,6 +542,8 @@ def get(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceGetReq raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") def create(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceCreateResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") def list(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListResponse: raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") def delete(self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteRequest, ctx: RequestContext) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceDeleteResponse: @@ -559,6 +594,16 @@ def __init__(self, service: MVMServiceSync, interceptors: Iterable[InterceptorSy ), function=service.create, ), + "/fits.api.mvm.v1.MVMService/Update": EndpointSync.unary( + method=MethodInfo( + name="Update", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update, + ), "/fits.api.mvm.v1.MVMService/List": EndpointSync.unary( method=MethodInfo( name="List", @@ -733,6 +778,26 @@ def create( timeout_ms=timeout_ms, ) + def update( + self, + request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="Update", + service_name="fits.api.mvm.v1.MVMService", + input=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateRequest, + output=fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceUpdateResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + def list( self, request: fits_dot_api_dot_mvm_dot_v1_dot_mvm__pb2.MVMServiceListRequest, diff --git a/python/fits/api/mvm/v1/mvm_pb2.py b/python/fits/api/mvm/v1/mvm_pb2.py index cb71ad6..6d5fdba 100644 --- a/python/fits/api/mvm/v1/mvm_pb2.py +++ b/python/fits/api/mvm/v1/mvm_pb2.py @@ -28,7 +28,7 @@ from fits.api.v1 import predefined_rules_pb2 as fits_dot_api_dot_v1_dot_predefined__rules__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/mvm/v1/mvm.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1a\x66its/api/mvm/v1/vlan.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x91\x01\n\x0cLinuxDetails\x12\x30\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskR\x05\x64isks\x12%\n\tldap_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12(\n\tldap_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08ldapFqdn\"\x9d\x01\n\x0eWindowsDetails\x12\x32\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskR\x05\x64isks\x12)\n\x0b\x64omain_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12,\n\x0b\x64omain_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\ndomainFqdn\"{\n\x10NetworkInterface\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n\tipaddress\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xe8\xb3\xae\xb1\x02\x01R\tipaddress\x12\x1e\n\nmacaddress\x18\x03 \x01(\tR\nmacaddress\"\xac\x07\n\tManagedVM\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04\x66qdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04\x66qdn\x12#\n\x06tenant\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n\x0cproject_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12!\n\x07os_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\t \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\n \x01(\rR\x03ram\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12<\n\x06status\x18\x0c \x01(\x0e\x32\x1a.fits.api.mvm.v1.MVMStatusB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12\x1f\n\x0bstatus_info\x18\r \x01(\tR\nstatusInfo\x12K\n\x0c\x61vailability\x18\x0e \x01(\x0e\x32\x1d.fits.api.mvm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12K\n\x0cserviceclass\x18\x0f \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12J\n\x0fwindows_details\x18\x10 \x01(\x0b\x32\x1f.fits.api.mvm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12\x44\n\rlinux_details\x18\x11 \x01(\x0b\x32\x1d.fits.api.mvm.v1.LinuxDetailsH\x00R\x0clinuxDetails\x12\x41\n\ninterfaces\x18\x12 \x03(\x0b\x32!.fits.api.mvm.v1.NetworkInterfaceR\ninterfaces\x12)\n\x04vlan\x18\x13 \x01(\x0b\x32\x15.fits.api.mvm.v1.VLANR\x04vlan\x12!\n\x0corder_number\x18\x14 \x01(\tR\x0borderNumberB\x10\n\x07\x64\x65tails\x12\x05\xbaH\x02\x08\x01\"g\n\x14MVMServiceGetRequest\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12#\n\x06tenant\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x07\n\x05_uuid\"E\n\x15MVMServiceGetResponse\x12,\n\x03mvm\x18\x01 \x01(\x0b\x32\x1a.fits.api.mvm.v1.ManagedVMR\x03mvm\"\x89\x01\n\x1eMVMServiceCreateWindowsRequest\x12)\n\x0b\x64omain_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12<\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\x81\x01\n\x1cMVMServiceCreateLinuxRequest\x12%\n\tldap_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12:\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\xe7\x05\n\x17MVMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n\x07os_uuid\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\x07 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x08 \x01(\rR\x03ram\x12!\n\x0corder_number\x18\t \x01(\tR\x0borderNumber\x12+\n\x06labels\x18\n \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12K\n\x0c\x61vailability\x18\x0c \x01(\x0e\x32\x1d.fits.api.mvm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12K\n\x0cserviceclass\x18\r \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12K\n\x07windows\x18\x0e \x01(\x0b\x32/.fits.api.mvm.v1.MVMServiceCreateWindowsRequestH\x00R\x07windows\x12\x45\n\x05linux\x18\x0f \x01(\x0b\x32-.fits.api.mvm.v1.MVMServiceCreateLinuxRequestH\x00R\x05linuxB\x10\n\x07mvmtype\x12\x05\xbaH\x02\x08\x01\x42\x07\n\x05_name\"\x9b\x02\n\tLinuxDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x02R\nmountPoint\x88\x01\x01\x12\x45\n\tdisk_type\x18\x06 \x01(\x0e\x32\x19.fits.api.mvm.v1.DiskTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x08\x64iskType\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_mount_pointB\x0c\n\n_disk_type\"\x9e\x02\n\x0bWindowsDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12%\n\x0b\x64riveletter\x18\x05 \x01(\tH\x02R\x0b\x64riveletter\x88\x01\x01\x12\x45\n\tdisk_type\x18\x06 \x01(\x0e\x32\x19.fits.api.mvm.v1.DiskTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x08\x64iskType\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_driveletterB\x0c\n\n_disk_type\"\x1a\n\x18MVMServiceCreateResponse\"L\n\x15MVMServiceListRequest\x12(\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01\x42\t\n\x07_tenant\"H\n\x16MVMServiceListResponse\x12.\n\x04mvms\x18\x01 \x03(\x0b\x32\x1a.fits.api.mvm.v1.ManagedVMR\x04mvms\"~\n\x17MVMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x1c\n\x04uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\x1a\n\x18MVMServiceDeleteResponse\"k\n\x1fMVMServiceValidateCreateRequest\x12H\n\x06\x63reate\x18\x01 \x01(\x0b\x32(.fits.api.mvm.v1.MVMServiceCreateRequestB\x06\xbaH\x03\xc8\x01\x01R\x06\x63reate\"\"\n MVMServiceValidateCreateResponse\"p\n MVMServiceValidateAddDiskRequest\x12L\n\x08\x61\x64\x64_disk\x18\x01 \x01(\x0b\x32).fits.api.mvm.v1.MVMServiceAddDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\x07\x61\x64\x64\x44isk\"#\n!MVMServiceValidateAddDiskResponse\"|\n#MVMServiceValidateUpdateDiskRequest\x12U\n\x0bupdate_disk\x18\x01 \x01(\x0b\x32,.fits.api.mvm.v1.MVMServiceUpdateDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\nupdateDisk\"&\n$MVMServiceValidateUpdateDiskResponse\"\x1b\n\x19MVMServiceAddDiskResponse\"\x1e\n\x1cMVMServiceUpdateDiskResponse\"\x1e\n\x1cMVMServiceDeleteDiskResponse\"\xfc\x01\n\x18MVMServiceAddDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12\x32\n\x05linux\x18\x04 \x01(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskH\x00R\x05linux\x12\x38\n\x07windows\x18\x05 \x01(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskH\x00R\x07windowsB\r\n\x04\x64isk\x12\x05\xbaH\x02\x08\x01\"\x81\x02\n\x1bMVMServiceUpdateDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12$\n\x0b\x61uto_extend\x18\x05 \x01(\x08H\x00R\nautoExtend\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\x04H\x01R\x04size\x88\x01\x01\x42\x0e\n\x0c_auto_extendB\x07\n\x05_size\"\xa9\x01\n\x1bMVMServiceDeleteDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\'\n%MVMServiceAddNetworkInterfaceResponse\"(\n&MVMServiceMoveNetworkInterfaceResponse\"*\n(MVMServiceDeleteNetworkInterfaceResponse\"\x8b\x01\n$MVMServiceAddNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\xef\x01\n%MVMServiceMoveNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12\x30\n\x0ftarget_mvm_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtargetMvmUuid\"\xbf\x01\n\'MVMServiceDeleteNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\xa1\x01\n,MVMServiceValidateAddNetworkInterfaceRequest\x12q\n\x15\x61\x64\x64_network_interface\x18\x01 \x01(\x0b\x32\x35.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequestB\x06\xbaH\x03\xc8\x01\x01R\x13\x61\x64\x64NetworkInterface\"/\n-MVMServiceValidateAddNetworkInterfaceResponse*\xa6\x01\n\x0c\x41vailability\x12\"\n\x18\x41VAILABILITY_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1b\n\x0f\x41VAILABILITY_V0\x10\x01\x1a\x06\x82\xb2\x19\x02V0\x12\x1b\n\x0f\x41VAILABILITY_V1\x10\x02\x1a\x06\x82\xb2\x19\x02V1\x12\x1b\n\x0f\x41VAILABILITY_V2\x10\x03\x1a\x06\x82\xb2\x19\x02V2\x12\x1b\n\x0f\x41VAILABILITY_V3\x10\x04\x1a\x06\x82\xb2\x19\x02V3*\x93\x01\n\x0cServiceClass\x12#\n\x19SERVICE_CLASS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1e\n\x11SERVICE_CLASS_SZ1\x10\x01\x1a\x07\x82\xb2\x19\x03SZ1\x12\x1e\n\x11SERVICE_CLASS_SZ2\x10\x02\x1a\x07\x82\xb2\x19\x03SZ2\x12\x1e\n\x11SERVICE_CLASS_SZ3\x10\x03\x1a\x07\x82\xb2\x19\x03SZ3*P\n\tMVMStatus\x12 \n\x16MVM_STATUS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12!\n\x11MVM_STATUS_ACTIVE\x10\x01\x1a\n\x82\xb2\x19\x06\x61\x63tive*\x85\x01\n\x08\x44iskType\x12\x1f\n\x15\x44ISK_TYPE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x18\n\x0c\x44ISK_TYPE_OS\x10\x01\x1a\x06\x82\xb2\x19\x02os\x12 \n\x10\x44ISK_TYPE_SYSTEM\x10\x02\x1a\n\x82\xb2\x19\x06system\x12\x1c\n\x0e\x44ISK_TYPE_DATA\x10\x03\x1a\x08\x82\xb2\x19\x04\x64\x61ta2\x92\x0e\n\nMVMService\x12\x61\n\x03Get\x12%.fits.api.mvm.v1.MVMServiceGetRequest\x1a&.fits.api.mvm.v1.MVMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x43reate\x12(.fits.api.mvm.v1.MVMServiceCreateRequest\x1a).fits.api.mvm.v1.MVMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x64\n\x04List\x12&.fits.api.mvm.v1.MVMServiceListRequest\x1a\'.fits.api.mvm.v1.MVMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x44\x65lete\x12(.fits.api.mvm.v1.MVMServiceDeleteRequest\x1a).fits.api.mvm.v1.MVMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12l\n\x07\x41\x64\x64\x44isk\x12).fits.api.mvm.v1.MVMServiceAddDiskRequest\x1a*.fits.api.mvm.v1.MVMServiceAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\nUpdateDisk\x12,.fits.api.mvm.v1.MVMServiceUpdateDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\nDeleteDisk\x12,.fits.api.mvm.v1.MVMServiceDeleteDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceDeleteDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x90\x01\n\x13\x41\x64\x64NetworkInterface\x12\x35.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest\x1a\x36.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x93\x01\n\x14MoveNetworkInterface\x12\x36.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest\x1a\x37.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x99\x01\n\x16\x44\x65leteNetworkInterface\x12\x38.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest\x1a\x39.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x81\x01\n\x0eValidateCreate\x12\x30.fits.api.mvm.v1.MVMServiceValidateCreateRequest\x1a\x31.fits.api.mvm.v1.MVMServiceValidateCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x84\x01\n\x0fValidateAddDisk\x12\x31.fits.api.mvm.v1.MVMServiceValidateAddDiskRequest\x1a\x32.fits.api.mvm.v1.MVMServiceValidateAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x8d\x01\n\x12ValidateUpdateDisk\x12\x34.fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest\x1a\x35.fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\xa8\x01\n\x1bValidateAddNetworkInterface\x12=.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest\x1a>.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x42\xad\x01\n\x13\x63om.fits.api.mvm.v1B\x08MvmProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x66its/api/mvm/v1/mvm.proto\x12\x0f\x66its.api.mvm.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1a\x66its/api/mvm/v1/vlan.proto\x1a\x18\x66its/api/v1/common.proto\x1a\"fits/api/v1/predefined_rules.proto\"\x91\x01\n\x0cLinuxDetails\x12\x30\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskR\x05\x64isks\x12%\n\tldap_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12(\n\tldap_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x08ldapFqdn\"\x9d\x01\n\x0eWindowsDetails\x12\x32\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskR\x05\x64isks\x12)\n\x0b\x64omain_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12,\n\x0b\x64omain_fqdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\ndomainFqdn\"{\n\x10NetworkInterface\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12)\n\tipaddress\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xe8\xb3\xae\xb1\x02\x01R\tipaddress\x12\x1e\n\nmacaddress\x18\x03 \x01(\tR\nmacaddress\"\xac\x07\n\tManagedVM\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\x04meta\x18\x02 \x01(\x0b\x32\x11.fits.api.v1.MetaR\x04meta\x12\x1f\n\x04\x66qdn\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04\x66qdn\x12#\n\x06tenant\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenant\x12+\n\x0cproject_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12!\n\x07os_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12-\n\rlocation_uuid\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x08 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\t \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\n \x01(\rR\x03ram\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12<\n\x06status\x18\x0c \x01(\x0e\x32\x1a.fits.api.mvm.v1.MVMStatusB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12\x1f\n\x0bstatus_info\x18\r \x01(\tR\nstatusInfo\x12K\n\x0c\x61vailability\x18\x0e \x01(\x0e\x32\x1d.fits.api.mvm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12K\n\x0cserviceclass\x18\x0f \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12J\n\x0fwindows_details\x18\x10 \x01(\x0b\x32\x1f.fits.api.mvm.v1.WindowsDetailsH\x00R\x0ewindowsDetails\x12\x44\n\rlinux_details\x18\x11 \x01(\x0b\x32\x1d.fits.api.mvm.v1.LinuxDetailsH\x00R\x0clinuxDetails\x12\x41\n\ninterfaces\x18\x12 \x03(\x0b\x32!.fits.api.mvm.v1.NetworkInterfaceR\ninterfaces\x12)\n\x04vlan\x18\x13 \x01(\x0b\x32\x15.fits.api.mvm.v1.VLANR\x04vlan\x12!\n\x0corder_number\x18\x14 \x01(\tR\x0borderNumberB\x10\n\x07\x64\x65tails\x12\x05\xbaH\x02\x08\x01\"g\n\x14MVMServiceGetRequest\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12#\n\x06tenant\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06tenantB\x07\n\x05_uuid\"E\n\x15MVMServiceGetResponse\x12,\n\x03mvm\x18\x01 \x01(\x0b\x32\x1a.fits.api.mvm.v1.ManagedVMR\x03mvm\"\x89\x01\n\x1eMVMServiceCreateWindowsRequest\x12)\n\x0b\x64omain_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\ndomainUuid\x12<\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\x81\x01\n\x1cMVMServiceCreateLinuxRequest\x12%\n\tldap_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08ldapUuid\x12:\n\x05\x64isks\x18\x02 \x03(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05\x64isks\"\xe7\x05\n\x17MVMServiceCreateRequest\x12+\n\x0cproject_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0bprojectUuid\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12!\n\x07os_uuid\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x06osUuid\x12%\n\tvlan_uuid\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08vlanUuid\x12-\n\rlocation_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0clocationUuid\x12+\n\x0c\x63ontact_uuid\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\x12\x10\n\x03\x63pu\x18\x07 \x01(\rR\x03\x63pu\x12\x10\n\x03ram\x18\x08 \x01(\rR\x03ram\x12!\n\x0corder_number\x18\t \x01(\tR\x0borderNumber\x12+\n\x06labels\x18\n \x01(\x0b\x32\x13.fits.api.v1.LabelsR\x06labels\x12\x16\n\x06\x62\x61\x63kup\x18\x0b \x01(\x08R\x06\x62\x61\x63kup\x12K\n\x0c\x61vailability\x18\x0c \x01(\x0e\x32\x1d.fits.api.mvm.v1.AvailabilityB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0c\x61vailability\x12K\n\x0cserviceclass\x18\r \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\x12K\n\x07windows\x18\x0e \x01(\x0b\x32/.fits.api.mvm.v1.MVMServiceCreateWindowsRequestH\x00R\x07windows\x12\x45\n\x05linux\x18\x0f \x01(\x0b\x32-.fits.api.mvm.v1.MVMServiceCreateLinuxRequestH\x00R\x05linuxB\x10\n\x07mvmtype\x12\x05\xbaH\x02\x08\x01\x42\x07\n\x05_name\"\x9b\x02\n\tLinuxDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12$\n\x0bmount_point\x18\x05 \x01(\tH\x02R\nmountPoint\x88\x01\x01\x12\x45\n\tdisk_type\x18\x06 \x01(\x0e\x32\x19.fits.api.mvm.v1.DiskTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x08\x64iskType\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_mount_pointB\x0c\n\n_disk_type\"\x9e\x02\n\x0bWindowsDisk\x12!\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x04uuid\x88\x01\x01\x12\x14\n\x05label\x18\x02 \x01(\tR\x05label\x12\x1f\n\x0b\x61uto_extend\x18\x03 \x01(\x08R\nautoExtend\x12\x17\n\x04size\x18\x04 \x01(\x04H\x01R\x04size\x88\x01\x01\x12%\n\x0b\x64riveletter\x18\x05 \x01(\tH\x02R\x0b\x64riveletter\x88\x01\x01\x12\x45\n\tdisk_type\x18\x06 \x01(\x0e\x32\x19.fits.api.mvm.v1.DiskTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x08\x64iskType\x88\x01\x01\x42\x07\n\x05_uuidB\x07\n\x05_sizeB\x0e\n\x0c_driveletterB\x0c\n\n_disk_type\"\x1a\n\x18MVMServiceCreateResponse\"\xb1\x03\n\x17MVMServiceUpdateRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12@\n\x0bupdate_meta\x18\x04 \x01(\x0b\x32\x17.fits.api.v1.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12V\n\x11performance_class\x18\x05 \x01(\x0b\x32\'.fits.api.mvm.v1.PerformanceClassChangeH\x00R\x10performanceClass\x12J\n\rservice_class\x18\x06 \x01(\x0b\x32#.fits.api.mvm.v1.ServiceClassChangeH\x00R\x0cserviceClass\x12:\n\x07\x63ontact\x18\x07 \x01(\x0b\x32\x1e.fits.api.mvm.v1.ContactChangeH\x00R\x07\x63ontactB\x0f\n\x06\x61\x63tion\x12\x05\xbaH\x02\x08\x01\"P\n\x16PerformanceClassChange\x12\x1b\n\x03\x63pu\x18\x01 \x01(\rB\t\xbaH\x06*\x04\x18@(\x01R\x03\x63pu\x12\x19\n\x03ram\x18\x02 \x01(\rB\x07\xbaH\x04*\x02 \x00R\x03ram\"a\n\x12ServiceClassChange\x12K\n\x0cserviceclass\x18\x01 \x01(\x0e\x32\x1d.fits.api.mvm.v1.ServiceClassB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0cserviceclass\"<\n\rContactChange\x12+\n\x0c\x63ontact_uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0b\x63ontactUuid\"\x1a\n\x18MVMServiceUpdateResponse\"L\n\x15MVMServiceListRequest\x12(\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01\x42\t\n\x07_tenant\"H\n\x16MVMServiceListResponse\x12.\n\x04mvms\x18\x01 \x03(\x0b\x32\x1a.fits.api.mvm.v1.ManagedVMR\x04mvms\"~\n\x17MVMServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x1c\n\x04uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\x1a\n\x18MVMServiceDeleteResponse\"k\n\x1fMVMServiceValidateCreateRequest\x12H\n\x06\x63reate\x18\x01 \x01(\x0b\x32(.fits.api.mvm.v1.MVMServiceCreateRequestB\x06\xbaH\x03\xc8\x01\x01R\x06\x63reate\"\"\n MVMServiceValidateCreateResponse\"p\n MVMServiceValidateAddDiskRequest\x12L\n\x08\x61\x64\x64_disk\x18\x01 \x01(\x0b\x32).fits.api.mvm.v1.MVMServiceAddDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\x07\x61\x64\x64\x44isk\"#\n!MVMServiceValidateAddDiskResponse\"|\n#MVMServiceValidateUpdateDiskRequest\x12U\n\x0bupdate_disk\x18\x01 \x01(\x0b\x32,.fits.api.mvm.v1.MVMServiceUpdateDiskRequestB\x06\xbaH\x03\xc8\x01\x01R\nupdateDisk\"&\n$MVMServiceValidateUpdateDiskResponse\"\x1b\n\x19MVMServiceAddDiskResponse\"\x1e\n\x1cMVMServiceUpdateDiskResponse\"\x1e\n\x1cMVMServiceDeleteDiskResponse\"\xfc\x01\n\x18MVMServiceAddDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\x12\x32\n\x05linux\x18\x04 \x01(\x0b\x32\x1a.fits.api.mvm.v1.LinuxDiskH\x00R\x05linux\x12\x38\n\x07windows\x18\x05 \x01(\x0b\x32\x1c.fits.api.mvm.v1.WindowsDiskH\x00R\x07windowsB\r\n\x04\x64isk\x12\x05\xbaH\x02\x08\x01\"\x81\x02\n\x1bMVMServiceUpdateDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12$\n\x0b\x61uto_extend\x18\x05 \x01(\x08H\x00R\nautoExtend\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\x04H\x01R\x04size\x88\x01\x01\x42\x0e\n\x0c_auto_extendB\x07\n\x05_size\"\xa9\x01\n\x1bMVMServiceDeleteDiskRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12%\n\tdisk_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x64iskUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\'\n%MVMServiceAddNetworkInterfaceResponse\"(\n&MVMServiceMoveNetworkInterfaceResponse\"*\n(MVMServiceDeleteNetworkInterfaceResponse\"\x8b\x01\n$MVMServiceAddNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x03 \x01(\tR\x0borderNumber\"\xef\x01\n%MVMServiceMoveNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\x12\x30\n\x0ftarget_mvm_uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtargetMvmUuid\"\xbf\x01\n\'MVMServiceDeleteNetworkInterfaceRequest\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12/\n\x0einterface_uuid\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rinterfaceUuid\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12!\n\x0corder_number\x18\x04 \x01(\tR\x0borderNumber\"\xa1\x01\n,MVMServiceValidateAddNetworkInterfaceRequest\x12q\n\x15\x61\x64\x64_network_interface\x18\x01 \x01(\x0b\x32\x35.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequestB\x06\xbaH\x03\xc8\x01\x01R\x13\x61\x64\x64NetworkInterface\"/\n-MVMServiceValidateAddNetworkInterfaceResponse*\xa6\x01\n\x0c\x41vailability\x12\"\n\x18\x41VAILABILITY_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1b\n\x0f\x41VAILABILITY_V0\x10\x01\x1a\x06\x82\xb2\x19\x02V0\x12\x1b\n\x0f\x41VAILABILITY_V1\x10\x02\x1a\x06\x82\xb2\x19\x02V1\x12\x1b\n\x0f\x41VAILABILITY_V2\x10\x03\x1a\x06\x82\xb2\x19\x02V2\x12\x1b\n\x0f\x41VAILABILITY_V3\x10\x04\x1a\x06\x82\xb2\x19\x02V3*\x93\x01\n\x0cServiceClass\x12#\n\x19SERVICE_CLASS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x1e\n\x11SERVICE_CLASS_SZ1\x10\x01\x1a\x07\x82\xb2\x19\x03SZ1\x12\x1e\n\x11SERVICE_CLASS_SZ2\x10\x02\x1a\x07\x82\xb2\x19\x03SZ2\x12\x1e\n\x11SERVICE_CLASS_SZ3\x10\x03\x1a\x07\x82\xb2\x19\x03SZ3*P\n\tMVMStatus\x12 \n\x16MVM_STATUS_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12!\n\x11MVM_STATUS_ACTIVE\x10\x01\x1a\n\x82\xb2\x19\x06\x61\x63tive*\x85\x01\n\x08\x44iskType\x12\x1f\n\x15\x44ISK_TYPE_UNSPECIFIED\x10\x00\x1a\x04\x82\xb2\x19\x00\x12\x18\n\x0c\x44ISK_TYPE_OS\x10\x01\x1a\x06\x82\xb2\x19\x02os\x12 \n\x10\x44ISK_TYPE_SYSTEM\x10\x02\x1a\n\x82\xb2\x19\x06system\x12\x1c\n\x0e\x44ISK_TYPE_DATA\x10\x03\x1a\x08\x82\xb2\x19\x04\x64\x61ta2\xfd\x0e\n\nMVMService\x12\x61\n\x03Get\x12%.fits.api.mvm.v1.MVMServiceGetRequest\x1a&.fits.api.mvm.v1.MVMServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x43reate\x12(.fits.api.mvm.v1.MVMServiceCreateRequest\x1a).fits.api.mvm.v1.MVMServiceCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12i\n\x06Update\x12(.fits.api.mvm.v1.MVMServiceUpdateRequest\x1a).fits.api.mvm.v1.MVMServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x64\n\x04List\x12&.fits.api.mvm.v1.MVMServiceListRequest\x1a\'.fits.api.mvm.v1.MVMServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12i\n\x06\x44\x65lete\x12(.fits.api.mvm.v1.MVMServiceDeleteRequest\x1a).fits.api.mvm.v1.MVMServiceDeleteResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12l\n\x07\x41\x64\x64\x44isk\x12).fits.api.mvm.v1.MVMServiceAddDiskRequest\x1a*.fits.api.mvm.v1.MVMServiceAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\nUpdateDisk\x12,.fits.api.mvm.v1.MVMServiceUpdateDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12u\n\nDeleteDisk\x12,.fits.api.mvm.v1.MVMServiceDeleteDiskRequest\x1a-.fits.api.mvm.v1.MVMServiceDeleteDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x90\x01\n\x13\x41\x64\x64NetworkInterface\x12\x35.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceRequest\x1a\x36.fits.api.mvm.v1.MVMServiceAddNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x93\x01\n\x14MoveNetworkInterface\x12\x36.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceRequest\x1a\x37.fits.api.mvm.v1.MVMServiceMoveNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x99\x01\n\x16\x44\x65leteNetworkInterface\x12\x38.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceRequest\x1a\x39.fits.api.mvm.v1.MVMServiceDeleteNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x81\x01\n\x0eValidateCreate\x12\x30.fits.api.mvm.v1.MVMServiceValidateCreateRequest\x1a\x31.fits.api.mvm.v1.MVMServiceValidateCreateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x84\x01\n\x0fValidateAddDisk\x12\x31.fits.api.mvm.v1.MVMServiceValidateAddDiskRequest\x1a\x32.fits.api.mvm.v1.MVMServiceValidateAddDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\x8d\x01\n\x12ValidateUpdateDisk\x12\x34.fits.api.mvm.v1.MVMServiceValidateUpdateDiskRequest\x1a\x35.fits.api.mvm.v1.MVMServiceValidateUpdateDiskResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12\xa8\x01\n\x1bValidateAddNetworkInterface\x12=.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceRequest\x1a>.fits.api.mvm.v1.MVMServiceValidateAddNetworkInterfaceResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x42\xad\x01\n\x13\x63om.fits.api.mvm.v1B\x08MvmProtoP\x01Z-github.com/fi-ts/api/go/fits/api/mvm/v1;mvmv1\xa2\x02\x03\x46\x41M\xaa\x02\x0f\x46its.Api.Mvm.V1\xca\x02\x0f\x46its\\Api\\Mvm\\V1\xe2\x02\x1b\x46its\\Api\\Mvm\\V1\\GPBMetadata\xea\x02\x12\x46its::Api::Mvm::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -138,6 +138,22 @@ _globals['_WINDOWSDISK'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_WINDOWSDISK'].fields_by_name['disk_type']._loaded_options = None _globals['_WINDOWSDISK'].fields_by_name['disk_type']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_MVMSERVICEUPDATEREQUEST'].oneofs_by_name['action']._loaded_options = None + _globals['_MVMSERVICEUPDATEREQUEST'].oneofs_by_name['action']._serialized_options = b'\272H\002\010\001' + _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['uuid']._loaded_options = None + _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['uuid']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['project']._loaded_options = None + _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001' + _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._loaded_options = None + _globals['_MVMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._serialized_options = b'\272H\003\310\001\001' + _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['cpu']._loaded_options = None + _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['cpu']._serialized_options = b'\272H\006*\004\030@(\001' + _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['ram']._loaded_options = None + _globals['_PERFORMANCECLASSCHANGE'].fields_by_name['ram']._serialized_options = b'\272H\004*\002 \000' + _globals['_SERVICECLASSCHANGE'].fields_by_name['serviceclass']._loaded_options = None + _globals['_SERVICECLASSCHANGE'].fields_by_name['serviceclass']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_CONTACTCHANGE'].fields_by_name['contact_uuid']._loaded_options = None + _globals['_CONTACTCHANGE'].fields_by_name['contact_uuid']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_MVMSERVICELISTREQUEST'].fields_by_name['tenant']._loaded_options = None _globals['_MVMSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001' _globals['_MVMSERVICEDELETEREQUEST'].fields_by_name['project']._loaded_options = None @@ -192,6 +208,8 @@ _globals['_MVMSERVICE'].methods_by_name['Get']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' _globals['_MVMSERVICE'].methods_by_name['Create']._loaded_options = None _globals['_MVMSERVICE'].methods_by_name['Create']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' + _globals['_MVMSERVICE'].methods_by_name['Update']._loaded_options = None + _globals['_MVMSERVICE'].methods_by_name['Update']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001' _globals['_MVMSERVICE'].methods_by_name['List']._loaded_options = None _globals['_MVMSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002' _globals['_MVMSERVICE'].methods_by_name['Delete']._loaded_options = None @@ -216,14 +234,14 @@ _globals['_MVMSERVICE'].methods_by_name['ValidateUpdateDisk']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' _globals['_MVMSERVICE'].methods_by_name['ValidateAddNetworkInterface']._loaded_options = None _globals['_MVMSERVICE'].methods_by_name['ValidateAddNetworkInterface']._serialized_options = b'\312\363\030\002\001\002\340\363\030\002' - _globals['_AVAILABILITY']._serialized_start=5807 - _globals['_AVAILABILITY']._serialized_end=5973 - _globals['_SERVICECLASS']._serialized_start=5976 - _globals['_SERVICECLASS']._serialized_end=6123 - _globals['_MVMSTATUS']._serialized_start=6125 - _globals['_MVMSTATUS']._serialized_end=6205 - _globals['_DISKTYPE']._serialized_start=6208 - _globals['_DISKTYPE']._serialized_end=6341 + _globals['_AVAILABILITY']._serialized_start=6514 + _globals['_AVAILABILITY']._serialized_end=6680 + _globals['_SERVICECLASS']._serialized_start=6683 + _globals['_SERVICECLASS']._serialized_end=6830 + _globals['_MVMSTATUS']._serialized_start=6832 + _globals['_MVMSTATUS']._serialized_end=6912 + _globals['_DISKTYPE']._serialized_start=6915 + _globals['_DISKTYPE']._serialized_end=7048 _globals['_LINUXDETAILS']._serialized_start=166 _globals['_LINUXDETAILS']._serialized_end=311 _globals['_WINDOWSDETAILS']._serialized_start=314 @@ -248,54 +266,64 @@ _globals['_WINDOWSDISK']._serialized_end=3308 _globals['_MVMSERVICECREATERESPONSE']._serialized_start=3310 _globals['_MVMSERVICECREATERESPONSE']._serialized_end=3336 - _globals['_MVMSERVICELISTREQUEST']._serialized_start=3338 - _globals['_MVMSERVICELISTREQUEST']._serialized_end=3414 - _globals['_MVMSERVICELISTRESPONSE']._serialized_start=3416 - _globals['_MVMSERVICELISTRESPONSE']._serialized_end=3488 - _globals['_MVMSERVICEDELETEREQUEST']._serialized_start=3490 - _globals['_MVMSERVICEDELETEREQUEST']._serialized_end=3616 - _globals['_MVMSERVICEDELETERESPONSE']._serialized_start=3618 - _globals['_MVMSERVICEDELETERESPONSE']._serialized_end=3644 - _globals['_MVMSERVICEVALIDATECREATEREQUEST']._serialized_start=3646 - _globals['_MVMSERVICEVALIDATECREATEREQUEST']._serialized_end=3753 - _globals['_MVMSERVICEVALIDATECREATERESPONSE']._serialized_start=3755 - _globals['_MVMSERVICEVALIDATECREATERESPONSE']._serialized_end=3789 - _globals['_MVMSERVICEVALIDATEADDDISKREQUEST']._serialized_start=3791 - _globals['_MVMSERVICEVALIDATEADDDISKREQUEST']._serialized_end=3903 - _globals['_MVMSERVICEVALIDATEADDDISKRESPONSE']._serialized_start=3905 - _globals['_MVMSERVICEVALIDATEADDDISKRESPONSE']._serialized_end=3940 - _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_start=3942 - _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_end=4066 - _globals['_MVMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_start=4068 - _globals['_MVMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_end=4106 - _globals['_MVMSERVICEADDDISKRESPONSE']._serialized_start=4108 - _globals['_MVMSERVICEADDDISKRESPONSE']._serialized_end=4135 - _globals['_MVMSERVICEUPDATEDISKRESPONSE']._serialized_start=4137 - _globals['_MVMSERVICEUPDATEDISKRESPONSE']._serialized_end=4167 - _globals['_MVMSERVICEDELETEDISKRESPONSE']._serialized_start=4169 - _globals['_MVMSERVICEDELETEDISKRESPONSE']._serialized_end=4199 - _globals['_MVMSERVICEADDDISKREQUEST']._serialized_start=4202 - _globals['_MVMSERVICEADDDISKREQUEST']._serialized_end=4454 - _globals['_MVMSERVICEUPDATEDISKREQUEST']._serialized_start=4457 - _globals['_MVMSERVICEUPDATEDISKREQUEST']._serialized_end=4714 - _globals['_MVMSERVICEDELETEDISKREQUEST']._serialized_start=4717 - _globals['_MVMSERVICEDELETEDISKREQUEST']._serialized_end=4886 - _globals['_MVMSERVICEADDNETWORKINTERFACERESPONSE']._serialized_start=4888 - _globals['_MVMSERVICEADDNETWORKINTERFACERESPONSE']._serialized_end=4927 - _globals['_MVMSERVICEMOVENETWORKINTERFACERESPONSE']._serialized_start=4929 - _globals['_MVMSERVICEMOVENETWORKINTERFACERESPONSE']._serialized_end=4969 - _globals['_MVMSERVICEDELETENETWORKINTERFACERESPONSE']._serialized_start=4971 - _globals['_MVMSERVICEDELETENETWORKINTERFACERESPONSE']._serialized_end=5013 - _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST']._serialized_start=5016 - _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST']._serialized_end=5155 - _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST']._serialized_start=5158 - _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST']._serialized_end=5397 - _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST']._serialized_start=5400 - _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST']._serialized_end=5591 - _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST']._serialized_start=5594 - _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST']._serialized_end=5755 - _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACERESPONSE']._serialized_start=5757 - _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACERESPONSE']._serialized_end=5804 - _globals['_MVMSERVICE']._serialized_start=6344 - _globals['_MVMSERVICE']._serialized_end=8154 + _globals['_MVMSERVICEUPDATEREQUEST']._serialized_start=3339 + _globals['_MVMSERVICEUPDATEREQUEST']._serialized_end=3772 + _globals['_PERFORMANCECLASSCHANGE']._serialized_start=3774 + _globals['_PERFORMANCECLASSCHANGE']._serialized_end=3854 + _globals['_SERVICECLASSCHANGE']._serialized_start=3856 + _globals['_SERVICECLASSCHANGE']._serialized_end=3953 + _globals['_CONTACTCHANGE']._serialized_start=3955 + _globals['_CONTACTCHANGE']._serialized_end=4015 + _globals['_MVMSERVICEUPDATERESPONSE']._serialized_start=4017 + _globals['_MVMSERVICEUPDATERESPONSE']._serialized_end=4043 + _globals['_MVMSERVICELISTREQUEST']._serialized_start=4045 + _globals['_MVMSERVICELISTREQUEST']._serialized_end=4121 + _globals['_MVMSERVICELISTRESPONSE']._serialized_start=4123 + _globals['_MVMSERVICELISTRESPONSE']._serialized_end=4195 + _globals['_MVMSERVICEDELETEREQUEST']._serialized_start=4197 + _globals['_MVMSERVICEDELETEREQUEST']._serialized_end=4323 + _globals['_MVMSERVICEDELETERESPONSE']._serialized_start=4325 + _globals['_MVMSERVICEDELETERESPONSE']._serialized_end=4351 + _globals['_MVMSERVICEVALIDATECREATEREQUEST']._serialized_start=4353 + _globals['_MVMSERVICEVALIDATECREATEREQUEST']._serialized_end=4460 + _globals['_MVMSERVICEVALIDATECREATERESPONSE']._serialized_start=4462 + _globals['_MVMSERVICEVALIDATECREATERESPONSE']._serialized_end=4496 + _globals['_MVMSERVICEVALIDATEADDDISKREQUEST']._serialized_start=4498 + _globals['_MVMSERVICEVALIDATEADDDISKREQUEST']._serialized_end=4610 + _globals['_MVMSERVICEVALIDATEADDDISKRESPONSE']._serialized_start=4612 + _globals['_MVMSERVICEVALIDATEADDDISKRESPONSE']._serialized_end=4647 + _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_start=4649 + _globals['_MVMSERVICEVALIDATEUPDATEDISKREQUEST']._serialized_end=4773 + _globals['_MVMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_start=4775 + _globals['_MVMSERVICEVALIDATEUPDATEDISKRESPONSE']._serialized_end=4813 + _globals['_MVMSERVICEADDDISKRESPONSE']._serialized_start=4815 + _globals['_MVMSERVICEADDDISKRESPONSE']._serialized_end=4842 + _globals['_MVMSERVICEUPDATEDISKRESPONSE']._serialized_start=4844 + _globals['_MVMSERVICEUPDATEDISKRESPONSE']._serialized_end=4874 + _globals['_MVMSERVICEDELETEDISKRESPONSE']._serialized_start=4876 + _globals['_MVMSERVICEDELETEDISKRESPONSE']._serialized_end=4906 + _globals['_MVMSERVICEADDDISKREQUEST']._serialized_start=4909 + _globals['_MVMSERVICEADDDISKREQUEST']._serialized_end=5161 + _globals['_MVMSERVICEUPDATEDISKREQUEST']._serialized_start=5164 + _globals['_MVMSERVICEUPDATEDISKREQUEST']._serialized_end=5421 + _globals['_MVMSERVICEDELETEDISKREQUEST']._serialized_start=5424 + _globals['_MVMSERVICEDELETEDISKREQUEST']._serialized_end=5593 + _globals['_MVMSERVICEADDNETWORKINTERFACERESPONSE']._serialized_start=5595 + _globals['_MVMSERVICEADDNETWORKINTERFACERESPONSE']._serialized_end=5634 + _globals['_MVMSERVICEMOVENETWORKINTERFACERESPONSE']._serialized_start=5636 + _globals['_MVMSERVICEMOVENETWORKINTERFACERESPONSE']._serialized_end=5676 + _globals['_MVMSERVICEDELETENETWORKINTERFACERESPONSE']._serialized_start=5678 + _globals['_MVMSERVICEDELETENETWORKINTERFACERESPONSE']._serialized_end=5720 + _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST']._serialized_start=5723 + _globals['_MVMSERVICEADDNETWORKINTERFACEREQUEST']._serialized_end=5862 + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST']._serialized_start=5865 + _globals['_MVMSERVICEMOVENETWORKINTERFACEREQUEST']._serialized_end=6104 + _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST']._serialized_start=6107 + _globals['_MVMSERVICEDELETENETWORKINTERFACEREQUEST']._serialized_end=6298 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST']._serialized_start=6301 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACEREQUEST']._serialized_end=6462 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACERESPONSE']._serialized_start=6464 + _globals['_MVMSERVICEVALIDATEADDNETWORKINTERFACERESPONSE']._serialized_end=6511 + _globals['_MVMSERVICE']._serialized_start=7051 + _globals['_MVMSERVICE']._serialized_end=8968 # @@protoc_insertion_point(module_scope) diff --git a/python/fits/api/mvm/v1/mvm_pb2.pyi b/python/fits/api/mvm/v1/mvm_pb2.pyi index b19a8f3..9ee1844 100644 --- a/python/fits/api/mvm/v1/mvm_pb2.pyi +++ b/python/fits/api/mvm/v1/mvm_pb2.pyi @@ -227,6 +227,48 @@ class MVMServiceCreateResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... +class MVMServiceUpdateRequest(_message.Message): + __slots__ = ("uuid", "project", "order_number", "update_meta", "performance_class", "service_class", "contact") + UUID_FIELD_NUMBER: _ClassVar[int] + PROJECT_FIELD_NUMBER: _ClassVar[int] + ORDER_NUMBER_FIELD_NUMBER: _ClassVar[int] + UPDATE_META_FIELD_NUMBER: _ClassVar[int] + PERFORMANCE_CLASS_FIELD_NUMBER: _ClassVar[int] + SERVICE_CLASS_FIELD_NUMBER: _ClassVar[int] + CONTACT_FIELD_NUMBER: _ClassVar[int] + uuid: str + project: str + order_number: str + update_meta: _common_pb2.UpdateMeta + performance_class: PerformanceClassChange + service_class: ServiceClassChange + contact: ContactChange + def __init__(self, uuid: _Optional[str] = ..., project: _Optional[str] = ..., order_number: _Optional[str] = ..., update_meta: _Optional[_Union[_common_pb2.UpdateMeta, _Mapping]] = ..., performance_class: _Optional[_Union[PerformanceClassChange, _Mapping]] = ..., service_class: _Optional[_Union[ServiceClassChange, _Mapping]] = ..., contact: _Optional[_Union[ContactChange, _Mapping]] = ...) -> None: ... + +class PerformanceClassChange(_message.Message): + __slots__ = ("cpu", "ram") + CPU_FIELD_NUMBER: _ClassVar[int] + RAM_FIELD_NUMBER: _ClassVar[int] + cpu: int + ram: int + def __init__(self, cpu: _Optional[int] = ..., ram: _Optional[int] = ...) -> None: ... + +class ServiceClassChange(_message.Message): + __slots__ = ("serviceclass",) + SERVICECLASS_FIELD_NUMBER: _ClassVar[int] + serviceclass: ServiceClass + def __init__(self, serviceclass: _Optional[_Union[ServiceClass, str]] = ...) -> None: ... + +class ContactChange(_message.Message): + __slots__ = ("contact_uuid",) + CONTACT_UUID_FIELD_NUMBER: _ClassVar[int] + contact_uuid: str + def __init__(self, contact_uuid: _Optional[str] = ...) -> None: ... + +class MVMServiceUpdateResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + class MVMServiceListRequest(_message.Message): __slots__ = ("tenant",) TENANT_FIELD_NUMBER: _ClassVar[int]