diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 47b6708..31396e1 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @leoparente @mfiedorowicz +* @leoparente @ltucker @mfiedorowicz diff --git a/.github/workflows/lint-tests.yml b/.github/workflows/lint-tests.yml index e2e0ca0..36efcb3 100644 --- a/.github/workflows/lint-tests.yml +++ b/.github/workflows/lint-tests.yml @@ -43,7 +43,7 @@ jobs: pytest --junitxml=pytest.xml --cov-report=term-missing:skip-covered --cov=netboxlabs.diode.sdk tests/ | tee pytest-coverage.txt - name: Pytest coverage comment - uses: MishaKav/pytest-coverage-comment@main + uses: MishaKav/pytest-coverage-comment@81882822c5b22af01f91bd3eacb1cefb6ad73dc2 # v1 with: pytest-coverage-path: ./pytest-coverage.txt junitxml-path: ./pytest.xml diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 328952b..d2ec69e 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -44,7 +44,7 @@ jobs: with: node-version: "lts/*" - name: Write package.json - uses: DamianReeves/write-file-action@master + uses: DamianReeves/write-file-action@6929a9a6d1807689191dcc8bbe62b54d70a32b42 # v1.3 with: path: ./package.json write-mode: overwrite @@ -58,7 +58,7 @@ jobs: } } - name: Write .releaserc.json - uses: DamianReeves/write-file-action@master + uses: DamianReeves/write-file-action@6929a9a6d1807689191dcc8bbe62b54d70a32b42 # v1.3 with: path: ./.releaserc.json write-mode: overwrite @@ -168,7 +168,7 @@ jobs: retention-days: 30 if-no-files-found: error - name: Publish release distributions to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 + uses: pypa/gh-action-pypi-publish@67339c736fd9354cd4f8cb0b744f2b82a74b5c70 # v.1.12.3 with: packages-dir: dist @@ -183,7 +183,7 @@ jobs: with: node-version: "lts/*" - name: Write package.json - uses: DamianReeves/write-file-action@master + uses: DamianReeves/write-file-action@6929a9a6d1807689191dcc8bbe62b54d70a32b42 # v1.3 with: path: ./package.json write-mode: overwrite @@ -197,7 +197,7 @@ jobs: } } - name: Write .releaserc.json - uses: DamianReeves/write-file-action@master + uses: DamianReeves/write-file-action@6929a9a6d1807689191dcc8bbe62b54d70a32b42 # v1.3 with: path: ./.releaserc.json write-mode: overwrite diff --git a/.gitignore b/.gitignore index 257791d..65f0a15 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,5 @@ __pycache__/ build/ dist/ .eggs/ -*.egg-info \ No newline at end of file +*.egg-info +poetry.lock diff --git a/README.md b/README.md index 53cac60..10119ce 100644 --- a/README.md +++ b/README.md @@ -20,9 +20,10 @@ pip install netboxlabs-diode-sdk ### Environment variables -* `DIODE_API_KEY` - API key for the Diode service * `DIODE_SDK_LOG_LEVEL` - Log level for the SDK (default: `INFO`) * `DIODE_SENTRY_DSN` - Optional Sentry DSN for error reporting +* `DIODE_CLIENT_ID` - Client ID for OAuth2 authentication +* `DIODE_CLIENT_SECRET` - Client Secret for OAuth2 authentication ### Example @@ -76,26 +77,94 @@ if __name__ == "__main__": ## Supported entities (object types) -* [Device](./docs/entities.md#device) -* [Interface](./docs/entities.md#interface) -* [Device Type](./docs/entities.md#device-type) -* [Platform](./docs/entities.md#platform) -* [Manufacturer](./docs/entities.md#manufacturer) -* [Site](./docs/entities.md#site) -* [Role](./docs/entities.md#role) -* [IP Address](./docs/entities.md#ip-address) -* [Prefix](./docs/entities.md#prefix) -* [Cluster Group](./docs/entities.md#cluster-group) -* [Cluster Type](./docs/entities.md#cluster-type) -* [Cluster](./docs/entities.md#cluster) -* [Virtual Machine](./docs/entities.md#virtual-machine) -* [Virtual Disk](./docs/entities.md#virtual-disk) -* [VM Interface](./docs/entities.md#vm-interface) +* ASN +* ASN Range +* Aggregate +* Circuit +* Circuit Group +* Circuit Group Assignment +* Circuit Termination +* Circuit Type +* Cluster +* Cluster Group +* Cluster Type +* Console Port +* Console Server Port +* Contact +* Contact Assignment +* Contact Group +* Contact Role +* Device +* Device Bay +* Device Role +* Device Type +* FHRP Group +* FHRP Group Assignment +* Front Port +* IKE Policy +* IKE Proposal +* IP Address +* IP Range +* IP Sec Policy +* IP Sec Profile +* IP Sec Proposal +* Interface +* Inventory Item +* Inventory Item Role +* L2VPN +* L2VPN Termination +* Location +* MAC Address +* Manufacturer +* Module +* Module Bay +* Module Type +* Platform +* Power Feed +* Power Outlet +* Power Panel +* Power Port +* Prefix +* Provider +* Provider Account +* Provider Network +* RIR +* Rack +* Rack Role +* Rack Type +* Rear Port +* Region +* Role +* Route Target +* Service +* Site +* Site Group +* Tag +* Tenant +* Tenant Group +* Tunnel +* Tunnel Group +* Tunnel Termination +* VLAN +* VLAN Group +* VLAN Translation Policy +* VLAN Translation Rule +* VM Interface +* VRF +* Virtual Chassis +* Virtual Circuit +* Virtual Circuit Termination +* Virtual Circuit Type +* Virtual Device Context +* Virtual Disk +* Virtual Machine +* Wireless Lan +* Wireless Lan Group +* Wireless Link ## Development notes -Code in `netboxlabs/diode/sdk/diode/*` is generated from Protocol Buffers definitions (will be published and referred -here soon). +Code in `netboxlabs/diode/sdk/diode/*` is generated from Protocol Buffers definitions (will be published and referenced here soon). #### Linting @@ -107,7 +176,7 @@ black netboxlabs/ #### Testing ```shell -pytest tests/ +PYTHONPATH=$(pwd) pytest ``` ## License diff --git a/netboxlabs/diode/sdk/client.py b/netboxlabs/diode/sdk/client.py index 44049c8..3c650f1 100644 --- a/netboxlabs/diode/sdk/client.py +++ b/netboxlabs/diode/sdk/client.py @@ -1,13 +1,17 @@ #!/usr/bin/env python # Copyright 2024 NetBox Labs Inc """NetBox Labs, Diode - SDK - Client.""" + import collections +import http.client +import json import logging import os import platform +import ssl import uuid from collections.abc import Iterable -from urllib.parse import urlparse +from urllib.parse import urlencode, urlparse import certifi import grpc @@ -18,9 +22,12 @@ from netboxlabs.diode.sdk.ingester import Entity from netboxlabs.diode.sdk.version import version_semver -_DIODE_API_KEY_ENVVAR_NAME = "DIODE_API_KEY" +_MAX_RETRIES_ENVVAR_NAME = "DIODE_MAX_AUTH_RETRIES" _DIODE_SDK_LOG_LEVEL_ENVVAR_NAME = "DIODE_SDK_LOG_LEVEL" _DIODE_SENTRY_DSN_ENVVAR_NAME = "DIODE_SENTRY_DSN" +_CLIENT_ID_ENVVAR_NAME = "DIODE_CLIENT_ID" +_CLIENT_SECRET_ENVVAR_NAME = "DIODE_CLIENT_SECRET" +_INGEST_SCOPE = "diode:ingest" _DEFAULT_STREAM = "latest" _LOGGER = logging.getLogger(__name__) @@ -31,17 +38,6 @@ def _load_certs() -> bytes: return f.read() -def _get_api_key(api_key: str | None = None) -> str: - """Get API Key either from provided value or environment variable.""" - if api_key is None: - api_key = os.getenv(_DIODE_API_KEY_ENVVAR_NAME) - if api_key is None: - raise DiodeConfigError( - f"api_key param or {_DIODE_API_KEY_ENVVAR_NAME} environment variable required" - ) - return api_key - - def parse_target(target: str) -> tuple[str, str, bool]: """Parse the target into authority, path and tls_verify.""" parsed_target = urlparse(target) @@ -66,6 +62,26 @@ def _get_sentry_dsn(sentry_dsn: str | None = None) -> str | None: return sentry_dsn +def _get_required_config_value(env_var_name: str, value: str | None = None) -> str: + """Get required config value either from provided value or environment variable.""" + if value is None: + value = os.getenv(env_var_name) + if value is None: + raise DiodeConfigError( + f"parameter or {env_var_name} environment variable required" + ) + return value + + +def _get_optional_config_value( + env_var_name: str, value: str | None = None +) -> str | None: + """Get optional config value either from provided value or environment variable.""" + if value is None: + value = os.getenv(env_var_name) + return value + + class DiodeClient: """Diode Client.""" @@ -81,30 +97,44 @@ def __init__( target: str, app_name: str, app_version: str, - api_key: str | None = None, + client_id: str | None = None, + client_secret: str | None = None, sentry_dsn: str = None, sentry_traces_sample_rate: float = 1.0, sentry_profiles_sample_rate: float = 1.0, + max_auth_retries: int = 3, ): """Initiate a new client.""" log_level = os.getenv(_DIODE_SDK_LOG_LEVEL_ENVVAR_NAME, "INFO").upper() logging.basicConfig(level=log_level) + self._max_auth_retries = _get_optional_config_value( + _MAX_RETRIES_ENVVAR_NAME, max_auth_retries + ) self._target, self._path, self._tls_verify = parse_target(target) self._app_name = app_name self._app_version = app_version self._platform = platform.platform() self._python_version = platform.python_version() - api_key = _get_api_key(api_key) + # Read client credentials from environment variables + self._client_id = _get_required_config_value(_CLIENT_ID_ENVVAR_NAME, client_id) + self._client_secret = _get_required_config_value( + _CLIENT_SECRET_ENVVAR_NAME, client_secret + ) + self._metadata = ( - ("diode-api-key", api_key), ("platform", self._platform), ("python-version", self._python_version), ) + self._authenticate(_INGEST_SCOPE) + channel_opts = ( - ("grpc.primary_user_agent", f"{self._name}/{self._version} {self._app_name}/{self._app_version}"), + ( + "grpc.primary_user_agent", + f"{self._name}/{self._version} {self._app_name}/{self._app_version}", + ), ) if self._tls_verify: @@ -202,20 +232,28 @@ def ingest( stream: str | None = _DEFAULT_STREAM, ) -> ingester_pb2.IngestResponse: """Ingest entities.""" - try: - request = ingester_pb2.IngestRequest( - stream=stream, - id=str(uuid.uuid4()), - entities=entities, - sdk_name=self.name, - sdk_version=self.version, - producer_app_name=self.app_name, - producer_app_version=self.app_version, - ) - - return self._stub.Ingest(request, metadata=self._metadata) - except grpc.RpcError as err: - raise DiodeClientError(err) from err + for attempt in range(self._max_auth_retries): + try: + request = ingester_pb2.IngestRequest( + stream=stream, + id=str(uuid.uuid4()), + entities=entities, + sdk_name=self.name, + sdk_version=self.version, + producer_app_name=self.app_name, + producer_app_version=self.app_version, + ) + return self._stub.Ingest(request, metadata=self._metadata) + except grpc.RpcError as err: + if err.code() == grpc.StatusCode.UNAUTHENTICATED: + if attempt < self._max_auth_retries - 1: + _LOGGER.info( + f"Retrying ingestion due to UNAUTHENTICATED error, attempt {attempt + 1}" + ) + self._authenticate(_INGEST_SCOPE) + continue + raise DiodeClientError(err) from err + raise RuntimeError("Max retries exceeded") def _setup_sentry( self, dsn: str, traces_sample_rate: float, profiles_sample_rate: float @@ -234,6 +272,82 @@ def _setup_sentry( sentry_sdk.set_tag("platform", self._platform) sentry_sdk.set_tag("python_version", self._python_version) + def _authenticate(self, scope: str): + authentication_client = _DiodeAuthentication( + self._target, + self._path, + self._tls_verify, + self._client_id, + self._client_secret, + scope, + ) + access_token = authentication_client.authenticate() + self._metadata = list( + filter(lambda x: x[0] != "authorization", self._metadata) + ) + [("authorization", f"Bearer {access_token}")] + + +class _DiodeAuthentication: + def __init__( + self, + target: str, + path: str, + tls_verify: bool, + client_id: str, + client_secret: str, + scope: str, + ): + self._target = target + self._tls_verify = tls_verify + self._client_id = client_id + self._client_secret = client_secret + self._path = path + self._scope = scope + + def authenticate(self) -> str: + """Request an OAuth2 token using client credentials and return it.""" + if self._tls_verify: + conn = http.client.HTTPSConnection( + self._target, + context=None if self._tls_verify else ssl._create_unverified_context(), + ) + else: + conn = http.client.HTTPConnection( + self._target, + ) + headers = {"Content-type": "application/x-www-form-urlencoded"} + data = urlencode( + { + "grant_type": "client_credentials", + "client_id": self._client_id, + "client_secret": self._client_secret, + "scope": self._scope, + } + ) + url = self._get_auth_url() + try: + conn.request("POST", url, data, headers) + response = conn.getresponse() + except Exception as e: + raise DiodeConfigError(f"Failed to obtain access token: {e}") + if response.status != 200: + raise DiodeConfigError(f"Failed to obtain access token: {response.reason}") + token_info = json.loads(response.read().decode()) + access_token = token_info.get("access_token") + if not access_token: + raise DiodeConfigError( + f"Failed to obtain access token for client {self._client_id}" + ) + + _LOGGER.debug(f"Access token obtained for client {self._client_id}") + return access_token + + def _get_auth_url(self) -> str: + """Construct the authentication URL, handling trailing slashes in the path.""" + # Ensure the path does not have trailing slashes + path = self._path.rstrip("/") if self._path else "" + return f"{path}/auth/token" + class _ClientCallDetails( collections.namedtuple( @@ -256,8 +370,6 @@ class _ClientCallDetails( """ - pass - class DiodeMethodClientInterceptor( grpc.UnaryUnaryClientInterceptor, grpc.StreamUnaryClientInterceptor diff --git a/netboxlabs/diode/sdk/diode/v1/ingester_pb2.py b/netboxlabs/diode/sdk/diode/v1/ingester_pb2.py index 4897938..8b7594f 100644 --- a/netboxlabs/diode/sdk/diode/v1/ingester_pb2.py +++ b/netboxlabs/diode/sdk/diode/v1/ingester_pb2.py @@ -16,7 +16,7 @@ from netboxlabs.diode.sdk.validate import validate_pb2 as validate_dot_validate__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x64iode/v1/ingester.proto\x12\x08\x64iode.v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17validate/validate.proto\"\xe4\x05\n\x06\x44\x65vice\x12\x1b\n\x04name\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x18@R\x04name\x12\x30\n\x0b\x64\x65vice_fqdn\x18\x02 \x01(\tB\n\xfa\x42\x07r\x05\x10\x01\x18\xff\x01H\x00R\ndeviceFqdn\x88\x01\x01\x12\x35\n\x0b\x64\x65vice_type\x18\x03 \x01(\x0b\x32\x14.diode.v1.DeviceTypeR\ndeviceType\x12\"\n\x04role\x18\x04 \x01(\x0b\x32\x0e.diode.v1.RoleR\x04role\x12.\n\x08platform\x18\x05 \x01(\x0b\x32\x12.diode.v1.PlatformR\x08platform\x12$\n\x06serial\x18\x06 \x01(\tB\x07\xfa\x42\x04r\x02\x18\x32H\x01R\x06serial\x88\x01\x01\x12\"\n\x04site\x18\x07 \x01(\x0b\x32\x0e.diode.v1.SiteR\x04site\x12*\n\tasset_tag\x18\x08 \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x02R\x08\x61ssetTag\x88\x01\x01\x12\x63\n\x06status\x18\t \x01(\tBK\xfa\x42HrFR\x07offlineR\x06\x61\x63tiveR\x07plannedR\x06stagedR\x06\x66\x61iledR\tinventoryR\x0f\x64\x65\x63ommissioningR\x06status\x12/\n\x0b\x64\x65scription\x18\n \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x03R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x0b \x01(\tH\x04R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x0c \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12\x34\n\x0bprimary_ip4\x18\r \x01(\x0b\x32\x13.diode.v1.IPAddressR\nprimaryIp4\x12\x34\n\x0bprimary_ip6\x18\x0e \x01(\x0b\x32\x13.diode.v1.IPAddressR\nprimaryIp6B\x0e\n\x0c_device_fqdnB\t\n\x07_serialB\x0c\n\n_asset_tagB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xef\x11\n\tInterface\x12\x32\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32\x10.diode.v1.DeviceB\x08\xfa\x42\x05\xa2\x01\x02\x08\x01R\x06\x64\x65vice\x12\x1d\n\x04name\x18\x02 \x01(\tB\t\xfa\x42\x06r\x04\x10\x01\x18@R\x04name\x12$\n\x05label\x18\x03 \x01(\tB\t\xfa\x42\x06r\x04\x10\x01\x18@H\x00R\x05label\x88\x01\x01\x12\xfa\x0c\n\x04type\x18\x04 \x01(\tB\xe5\x0c\xfa\x42\xe1\x0cr\xde\x0cR\x07virtualR\x06\x62ridgeR\x03lagR\n100base-fxR\x0b\x31\x30\x30\x62\x61se-lfxR\n100base-txR\n100base-t1R\n1000base-tR\x0f\x31\x30\x30\x30\x62\x61se-x-gbicR\x0e\x31\x30\x30\x30\x62\x61se-x-sfpR\n2.5gbase-tR\x08\x35gbase-tR\t10gbase-tR\x0b\x31\x30gbase-cx4R\x0e\x31\x30gbase-x-sfppR\r10gbase-x-xfpR\x10\x31\x30gbase-x-xenpakR\x0c\x31\x30gbase-x-x2R\x0f\x32\x35gbase-x-sfp28R\x0f\x35\x30gbase-x-sfp56R\x0f\x34\x30gbase-x-qsfppR\x0f\x35\x30gbase-x-sfp28R\x0e\x31\x30\x30gbase-x-cfpR\x0f\x31\x30\x30gbase-x-cfp2R\x0f\x31\x30\x30gbase-x-cfp4R\x0e\x31\x30\x30gbase-x-cxpR\x0f\x31\x30\x30gbase-x-cpakR\x0f\x31\x30\x30gbase-x-dsfpR\x10\x31\x30\x30gbase-x-sfpddR\x11\x31\x30\x30gbase-x-qsfp28R\x11\x31\x30\x30gbase-x-qsfpddR\x0f\x32\x30\x30gbase-x-cfp2R\x11\x32\x30\x30gbase-x-qsfp56R\x11\x32\x30\x30gbase-x-qsfpddR\x0f\x34\x30\x30gbase-x-cfp2R\x12\x34\x30\x30gbase-x-qsfp112R\x11\x34\x30\x30gbase-x-qsfpddR\x0f\x34\x30\x30gbase-x-osfpR\x13\x34\x30\x30gbase-x-osfp-rhsR\x0f\x34\x30\x30gbase-x-cdfpR\x0f\x34\x30\x30gbase-x-cfp8R\x11\x38\x30\x30gbase-x-qsfpddR\x0f\x38\x30\x30gbase-x-osfpR\x0b\x31\x30\x30\x30\x62\x61se-kxR\n10gbase-krR\x0b\x31\x30gbase-kx4R\n25gbase-krR\x0b\x34\x30gbase-kr4R\n50gbase-krR\x0c\x31\x30\x30gbase-kp4R\x0c\x31\x30\x30gbase-kr2R\x0c\x31\x30\x30gbase-kr4R\x0bieee802.11aR\x0bieee802.11gR\x0bieee802.11nR\x0cieee802.11acR\x0cieee802.11adR\x0cieee802.11axR\x0cieee802.11ayR\x0cieee802.15.1R\x0eother-wirelessR\x03gsmR\x04\x63\x64maR\x03lteR\tsonet-oc3R\nsonet-oc12R\nsonet-oc48R\x0bsonet-oc192R\x0bsonet-oc768R\x0csonet-oc1920R\x0csonet-oc3840R\x08\x31gfc-sfpR\x08\x32gfc-sfpR\x08\x34gfc-sfpR\t8gfc-sfppR\n16gfc-sfppR\x0b\x33\x32gfc-sfp28R\x0b\x36\x34gfc-qsfppR\r128gfc-qsfp28R\x0einfiniband-sdrR\x0einfiniband-ddrR\x0einfiniband-qdrR\x10infiniband-fdr10R\x0einfiniband-fdrR\x0einfiniband-edrR\x0einfiniband-hdrR\x0einfiniband-ndrR\x0einfiniband-xdrR\x02t1R\x02\x65\x31R\x02t3R\x02\x65\x33R\x04xdslR\x06\x64ocsisR\x04gponR\x06xg-ponR\x07xgs-ponR\x07ng-pon2R\x04\x65ponR\x08\x31\x30g-eponR\x0f\x63isco-stackwiseR\x14\x63isco-stackwise-plusR\x0f\x63isco-flexstackR\x14\x63isco-flexstack-plusR\x12\x63isco-stackwise-80R\x13\x63isco-stackwise-160R\x13\x63isco-stackwise-320R\x13\x63isco-stackwise-480R\x12\x63isco-stackwise-1tR\x0bjuniper-vcpR\x13\x65xtreme-summitstackR\x17\x65xtreme-summitstack-128R\x17\x65xtreme-summitstack-256R\x17\x65xtreme-summitstack-512R\x05otherR\x04type\x12\x1d\n\x07\x65nabled\x18\x05 \x01(\x08H\x01R\x07\x65nabled\x88\x01\x01\x12\"\n\x03mtu\x18\x06 \x01(\x05\x42\x0b\xfa\x42\x08\x1a\x06\x18\x80\x80\x04(\x01H\x02R\x03mtu\x88\x01\x01\x12$\n\x0bmac_address\x18\x07 \x01(\tH\x03R\nmacAddress\x88\x01\x01\x12\"\n\x05speed\x18\x08 \x01(\x05\x42\x07\xfa\x42\x04\x1a\x02(\x00H\x04R\x05speed\x88\x01\x01\x12\x15\n\x03wwn\x18\t \x01(\tH\x05R\x03wwn\x88\x01\x01\x12 \n\tmgmt_only\x18\n \x01(\x08H\x06R\x08mgmtOnly\x88\x01\x01\x12/\n\x0b\x64\x65scription\x18\x0b \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x07R\x0b\x64\x65scription\x88\x01\x01\x12*\n\x0emark_connected\x18\x0c \x01(\x08H\x08R\rmarkConnected\x88\x01\x01\x12\x35\n\x04mode\x18\r \x01(\tB!\xfa\x42\x1er\x1cR\x06\x61\x63\x63\x65ssR\x06taggedR\ntagged-allR\x04mode\x12!\n\x04tags\x18\x0e \x03(\x0b\x32\r.diode.v1.TagR\x04tagsB\x08\n\x06_labelB\n\n\x08_enabledB\x06\n\x04_mtuB\x0e\n\x0c_mac_addressB\x08\n\x06_speedB\x06\n\x04_wwnB\x0c\n\n_mgmt_onlyB\x0e\n\x0c_descriptionB\x11\n\x0f_mark_connected\"\xe3\x02\n\x07\x43luster\x12\x1d\n\x04name\x18\x01 \x01(\tB\t\xfa\x42\x06r\x04\x10\x01\x18\x64R\x04name\x12)\n\x04type\x18\x02 \x01(\x0b\x32\x15.diode.v1.ClusterTypeR\x04type\x12,\n\x05group\x18\x03 \x01(\x0b\x32\x16.diode.v1.ClusterGroupR\x05group\x12\"\n\x04site\x18\x04 \x01(\x0b\x32\x0e.diode.v1.SiteR\x04site\x12X\n\x06status\x18\x05 \x01(\tB@\xfa\x42=r;R\x07offlineR\x06\x61\x63tiveR\x07plannedR\x06stagedR\x06\x66\x61iledR\x0f\x64\x65\x63ommissioningR\x06status\x12/\n\x0b\x64\x65scription\x18\x06 \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x07 \x03(\x0b\x32\r.diode.v1.TagR\x04tagsB\x0e\n\x0c_description\"\xc1\x01\n\x0b\x43lusterType\x12\x1d\n\x04name\x18\x01 \x01(\tB\t\xfa\x42\x06r\x04\x10\x01\x18\x64R\x04name\x12/\n\x04slug\x18\x02 \x01(\tB\x1b\xfa\x42\x18r\x16\x10\x01\x18\x64\x32\x10^[-a-zA-Z0-9_]+$R\x04slug\x12/\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x04 \x03(\x0b\x32\r.diode.v1.TagR\x04tagsB\x0e\n\x0c_description\"\xc2\x01\n\x0c\x43lusterGroup\x12\x1d\n\x04name\x18\x01 \x01(\tB\t\xfa\x42\x06r\x04\x10\x01\x18\x64R\x04name\x12/\n\x04slug\x18\x02 \x01(\tB\x1b\xfa\x42\x18r\x16\x10\x01\x18\x64\x32\x10^[-a-zA-Z0-9_]+$R\x04slug\x12/\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x04 \x03(\x0b\x32\r.diode.v1.TagR\x04tagsB\x0e\n\x0c_description\"\xde\x05\n\x0eVirtualMachine\x12\x1b\n\x04name\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02\x18@R\x04name\x12X\n\x06status\x18\x02 \x01(\tB@\xfa\x42=r;R\x07offlineR\x06\x61\x63tiveR\x07plannedR\x06stagedR\x06\x66\x61iledR\x0f\x64\x65\x63ommissioningR\x06status\x12\"\n\x04site\x18\x03 \x01(\x0b\x32\x0e.diode.v1.SiteR\x04site\x12+\n\x07\x63luster\x18\x04 \x01(\x0b\x32\x11.diode.v1.ClusterR\x07\x63luster\x12\"\n\x04role\x18\x05 \x01(\x0b\x32\x0e.diode.v1.RoleR\x04role\x12(\n\x06\x64\x65vice\x18\x06 \x01(\x0b\x32\x10.diode.v1.DeviceR\x06\x64\x65vice\x12.\n\x08platform\x18\x07 \x01(\x0b\x32\x12.diode.v1.PlatformR\x08platform\x12\x34\n\x0bprimary_ip4\x18\x08 \x01(\x0b\x32\x13.diode.v1.IPAddressR\nprimaryIp4\x12\x34\n\x0bprimary_ip6\x18\t \x01(\x0b\x32\x13.diode.v1.IPAddressR\nprimaryIp6\x12\"\n\x05vcpus\x18\n \x01(\x05\x42\x07\xfa\x42\x04\x1a\x02(\x00H\x00R\x05vcpus\x88\x01\x01\x12$\n\x06memory\x18\x0b \x01(\x05\x42\x07\xfa\x42\x04\x1a\x02(\x00H\x01R\x06memory\x88\x01\x01\x12 \n\x04\x64isk\x18\x0c \x01(\x05\x42\x07\xfa\x42\x04\x1a\x02(\x00H\x02R\x04\x64isk\x88\x01\x01\x12/\n\x0b\x64\x65scription\x18\r \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x03R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x0e \x01(\tH\x04R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x0f \x03(\x0b\x32\r.diode.v1.TagR\x04tagsB\x08\n\x06_vcpusB\t\n\x07_memoryB\x07\n\x05_diskB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xea\x02\n\x0bVMInterface\x12K\n\x0fvirtual_machine\x18\x01 \x01(\x0b\x32\x18.diode.v1.VirtualMachineB\x08\xfa\x42\x05\xa2\x01\x02\x08\x01R\x0evirtualMachine\x12\x1d\n\x04name\x18\x02 \x01(\tB\t\xfa\x42\x06r\x04\x10\x01\x18@R\x04name\x12\x1d\n\x07\x65nabled\x18\x03 \x01(\x08H\x00R\x07\x65nabled\x88\x01\x01\x12\"\n\x03mtu\x18\x04 \x01(\x05\x42\x0b\xfa\x42\x08\x1a\x06\x18\x80\x80\x04(\x01H\x01R\x03mtu\x88\x01\x01\x12$\n\x0bmac_address\x18\x05 \x01(\tH\x02R\nmacAddress\x88\x01\x01\x12/\n\x0b\x64\x65scription\x18\x06 \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x03R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x07 \x03(\x0b\x32\r.diode.v1.TagR\x04tagsB\n\n\x08_enabledB\x06\n\x04_mtuB\x0e\n\x0c_mac_addressB\x0e\n\x0c_description\"\xfa\x01\n\x0bVirtualDisk\x12K\n\x0fvirtual_machine\x18\x01 \x01(\x0b\x32\x18.diode.v1.VirtualMachineB\x08\xfa\x42\x05\xa2\x01\x02\x08\x01R\x0evirtualMachine\x12\x1d\n\x04name\x18\x02 \x01(\tB\t\xfa\x42\x06r\x04\x10\x01\x18\x64R\x04name\x12\x1b\n\x04size\x18\x03 \x01(\x05\x42\x07\xfa\x42\x04\x1a\x02(\x00R\x04size\x12/\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x05 \x03(\x0b\x32\r.diode.v1.TagR\x04tagsB\x0e\n\x0c_description\"\x8c\x04\n\tIPAddress\x12!\n\x07\x61\x64\x64ress\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02p\x01R\x07\x61\x64\x64ress\x12\x33\n\tinterface\x18\x02 \x01(\x0b\x32\x13.diode.v1.InterfaceH\x00R\tinterface\x12H\n\x06status\x18\x03 \x01(\tB0\xfa\x42-r+R\x06\x61\x63tiveR\x08reservedR\ndeprecatedR\x04\x64hcpR\x05slaacR\x06status\x12T\n\x04role\x18\x04 \x01(\tB@\xfa\x42=r;R\x08loopbackR\tsecondaryR\x07\x61nycastR\x03vipR\x04vrrpR\x04hsrpR\x04glbpR\x04\x63\x61rpR\x04role\x12U\n\x08\x64ns_name\x18\x05 \x01(\tB5\xfa\x42\x32r0\x18\xff\x01\x32+^([0-9A-Za-z_-]+|\\*)(\\.[0-9A-Za-z_-]+)*\\.?$H\x01R\x07\x64nsName\x88\x01\x01\x12/\n\x0b\x64\x65scription\x18\x06 \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x02R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x07 \x01(\tH\x03R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x08 \x03(\x0b\x32\r.diode.v1.TagR\x04tagsB\x11\n\x0f\x61ssigned_objectB\x0b\n\t_dns_nameB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xeb\x02\n\nDeviceType\x12\x1f\n\x05model\x18\x01 \x01(\tB\t\xfa\x42\x06r\x04\x10\x01\x18\x64R\x05model\x12/\n\x04slug\x18\x02 \x01(\tB\x1b\xfa\x42\x18r\x16\x10\x01\x18\x64\x32\x10^[-a-zA-Z0-9_]+$R\x04slug\x12:\n\x0cmanufacturer\x18\x03 \x01(\x0b\x32\x16.diode.v1.ManufacturerR\x0cmanufacturer\x12/\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x05 \x01(\tH\x01R\x08\x63omments\x88\x01\x01\x12-\n\x0bpart_number\x18\x06 \x01(\tB\x07\xfa\x42\x04r\x02\x18\x32H\x02R\npartNumber\x88\x01\x01\x12!\n\x04tags\x18\x07 \x03(\x0b\x32\r.diode.v1.TagR\x04tagsB\x0e\n\x0c_descriptionB\x0b\n\t_commentsB\x0e\n\x0c_part_number\"\xc2\x01\n\x0cManufacturer\x12\x1d\n\x04name\x18\x01 \x01(\tB\t\xfa\x42\x06r\x04\x10\x01\x18\x64R\x04name\x12/\n\x04slug\x18\x02 \x01(\tB\x1b\xfa\x42\x18r\x16\x10\x01\x18\x64\x32\x10^[-a-zA-Z0-9_]+$R\x04slug\x12/\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x04 \x03(\x0b\x32\r.diode.v1.TagR\x04tagsB\x0e\n\x0c_description\"\xfa\x01\n\x08Platform\x12\x1d\n\x04name\x18\x01 \x01(\tB\t\xfa\x42\x06r\x04\x10\x01\x18\x64R\x04name\x12/\n\x04slug\x18\x02 \x01(\tB\x1b\xfa\x42\x18r\x16\x10\x01\x18\x64\x32\x10^[-a-zA-Z0-9_]+$R\x04slug\x12:\n\x0cmanufacturer\x18\x03 \x01(\x0b\x32\x16.diode.v1.ManufacturerR\x0cmanufacturer\x12/\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x05 \x03(\x0b\x32\r.diode.v1.TagR\x04tagsB\x0e\n\x0c_description\"\x8d\x03\n\x06Prefix\x12\x1f\n\x06prefix\x18\x01 \x01(\tB\x07\xfa\x42\x04r\x02p\x01R\x06prefix\x12\"\n\x04site\x18\x02 \x01(\x0b\x32\x0e.diode.v1.SiteR\x04site\x12\x46\n\x06status\x18\x03 \x01(\tB.\xfa\x42+r)R\x06\x61\x63tiveR\tcontainerR\x08reservedR\ndeprecatedR\x06status\x12\x1c\n\x07is_pool\x18\x04 \x01(\x08H\x00R\x06isPool\x88\x01\x01\x12(\n\rmark_utilized\x18\x05 \x01(\x08H\x01R\x0cmarkUtilized\x88\x01\x01\x12/\n\x0b\x64\x65scription\x18\x06 \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x02R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x07 \x01(\tH\x03R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x08 \x03(\x0b\x32\r.diode.v1.TagR\x04tagsB\n\n\x08_is_poolB\x10\n\x0e_mark_utilizedB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xea\x01\n\x04Role\x12\x1d\n\x04name\x18\x01 \x01(\tB\t\xfa\x42\x06r\x04\x10\x01\x18\x64R\x04name\x12/\n\x04slug\x18\x02 \x01(\tB\x1b\xfa\x42\x18r\x16\x10\x01\x18\x64\x32\x10^[-a-zA-Z0-9_]+$R\x04slug\x12.\n\x05\x63olor\x18\x03 \x01(\tB\x18\xfa\x42\x15r\x13\x10\x06\x18\x06\x32\r^[0-9a-f]{6}$R\x05\x63olor\x12/\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x05 \x03(\x0b\x32\r.diode.v1.TagR\x04tagsB\x0e\n\x0c_description\"\xa2\x03\n\x04Site\x12\x1d\n\x04name\x18\x01 \x01(\tB\t\xfa\x42\x06r\x04\x10\x01\x18\x64R\x04name\x12/\n\x04slug\x18\x02 \x01(\tB\x1b\xfa\x42\x18r\x16\x10\x01\x18\x64\x32\x10^[-a-zA-Z0-9_]+$R\x04slug\x12Q\n\x06status\x18\x03 \x01(\tB9\xfa\x42\x36r4R\x07plannedR\x07stagingR\x06\x61\x63tiveR\x0f\x64\x65\x63ommissioningR\x07retiredR\x06status\x12(\n\x08\x66\x61\x63ility\x18\x04 \x01(\tB\x07\xfa\x42\x04r\x02\x18\x32H\x00R\x08\x66\x61\x63ility\x88\x01\x01\x12 \n\ttime_zone\x18\x05 \x01(\tH\x01R\x08timeZone\x88\x01\x01\x12/\n\x0b\x64\x65scription\x18\x06 \x01(\tB\x08\xfa\x42\x05r\x03\x18\xc8\x01H\x02R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x07 \x01(\tH\x03R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x08 \x03(\x0b\x32\r.diode.v1.TagR\x04tagsB\x0b\n\t_facilityB\x0c\n\n_time_zoneB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\x85\x01\n\x03Tag\x12\x1d\n\x04name\x18\x01 \x01(\tB\t\xfa\x42\x06r\x04\x10\x01\x18\x64R\x04name\x12/\n\x04slug\x18\x02 \x01(\tB\x1b\xfa\x42\x18r\x16\x10\x01\x18\x64\x32\x10^[-a-zA-Z0-9_]+$R\x04slug\x12.\n\x05\x63olor\x18\x03 \x01(\tB\x18\xfa\x42\x15r\x13\x10\x06\x18\x06\x32\r^[0-9a-f]{6}$R\x05\x63olor\"\x83\x07\n\x06\x45ntity\x12$\n\x04site\x18\x01 \x01(\x0b\x32\x0e.diode.v1.SiteH\x00R\x04site\x12\x30\n\x08platform\x18\x02 \x01(\x0b\x32\x12.diode.v1.PlatformH\x00R\x08platform\x12<\n\x0cmanufacturer\x18\x03 \x01(\x0b\x32\x16.diode.v1.ManufacturerH\x00R\x0cmanufacturer\x12*\n\x06\x64\x65vice\x18\x04 \x01(\x0b\x32\x10.diode.v1.DeviceH\x00R\x06\x64\x65vice\x12\x31\n\x0b\x64\x65vice_role\x18\x05 \x01(\x0b\x32\x0e.diode.v1.RoleH\x00R\ndeviceRole\x12\x37\n\x0b\x64\x65vice_type\x18\x06 \x01(\x0b\x32\x14.diode.v1.DeviceTypeH\x00R\ndeviceType\x12\x33\n\tinterface\x18\x07 \x01(\x0b\x32\x13.diode.v1.InterfaceH\x00R\tinterface\x12\x34\n\nip_address\x18\t \x01(\x0b\x32\x13.diode.v1.IPAddressH\x00R\tipAddress\x12*\n\x06prefix\x18\n \x01(\x0b\x32\x10.diode.v1.PrefixH\x00R\x06prefix\x12=\n\rcluster_group\x18\x0b \x01(\x0b\x32\x16.diode.v1.ClusterGroupH\x00R\x0c\x63lusterGroup\x12:\n\x0c\x63luster_type\x18\x0c \x01(\x0b\x32\x15.diode.v1.ClusterTypeH\x00R\x0b\x63lusterType\x12-\n\x07\x63luster\x18\r \x01(\x0b\x32\x11.diode.v1.ClusterH\x00R\x07\x63luster\x12\x43\n\x0fvirtual_machine\x18\x0e \x01(\x0b\x32\x18.diode.v1.VirtualMachineH\x00R\x0evirtualMachine\x12\x39\n\x0bvminterface\x18\x0f \x01(\x0b\x32\x15.diode.v1.VMInterfaceH\x00R\x0bvminterface\x12:\n\x0cvirtual_disk\x18\x10 \x01(\x0b\x32\x15.diode.v1.VirtualDiskH\x00R\x0bvirtualDisk\x12\x44\n\ttimestamp\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\n\xfa\x42\x07\xb2\x01\x04\x08\x01\x38\x01R\ttimestampB\x08\n\x06\x65ntity\"\xe4\x02\n\rIngestRequest\x12\"\n\x06stream\x18\x01 \x01(\tB\n\xfa\x42\x07r\x05\x10\x01\x18\xff\x01R\x06stream\x12\x39\n\x08\x65ntities\x18\x02 \x03(\x0b\x32\x10.diode.v1.EntityB\x0b\xfa\x42\x08\x92\x01\x05\x08\x01\x10\xe8\x07R\x08\x65ntities\x12\x18\n\x02id\x18\x03 \x01(\tB\x08\xfa\x42\x05r\x03\xb0\x01\x01R\x02id\x12\x36\n\x11producer_app_name\x18\x04 \x01(\tB\n\xfa\x42\x07r\x05\x10\x01\x18\xff\x01R\x0fproducerAppName\x12<\n\x14producer_app_version\x18\x05 \x01(\tB\n\xfa\x42\x07r\x05\x10\x01\x18\xff\x01R\x12producerAppVersion\x12%\n\x08sdk_name\x18\x06 \x01(\tB\n\xfa\x42\x07r\x05\x10\x01\x18\xff\x01R\x07sdkName\x12=\n\x0bsdk_version\x18\x07 \x01(\tB\x1c\xfa\x42\x19r\x17\x32\x15^(\\d)+\\.(\\d)+\\.(\\d)+$R\nsdkVersion\"(\n\x0eIngestResponse\x12\x16\n\x06\x65rrors\x18\x01 \x03(\tR\x06\x65rrors2P\n\x0fIngesterService\x12=\n\x06Ingest\x12\x17.diode.v1.IngestRequest\x1a\x18.diode.v1.IngestResponse\"\x00\x42\x35Z3github.com/netboxlabs/diode-sdk-go/diode/v1/diodepbb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x64iode/v1/ingester.proto\x12\x08\x64iode.v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17validate/validate.proto\"\x91)\n\x06\x45ntity\x12\x44\n\ttimestamp\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\n\xfa\x42\x07\xb2\x01\x04\x08\x01\x38\x01R\ttimestamp\x12!\n\x03\x61sn\x18\x02 \x01(\x0b\x32\r.diode.v1.ASNH\x00R\x03\x61sn\x12\x31\n\tasn_range\x18\x03 \x01(\x0b\x32\x12.diode.v1.ASNRangeH\x00R\x08\x61snRange\x12\x33\n\taggregate\x18\x04 \x01(\x0b\x32\x13.diode.v1.AggregateH\x00R\taggregate\x12\'\n\x05\x63\x61\x62le\x18\x05 \x01(\x0b\x32\x0f.diode.v1.CableH\x00R\x05\x63\x61\x62le\x12\x34\n\ncable_path\x18\x06 \x01(\x0b\x32\x13.diode.v1.CablePathH\x00R\tcablePath\x12I\n\x11\x63\x61\x62le_termination\x18\x07 \x01(\x0b\x32\x1a.diode.v1.CableTerminationH\x00R\x10\x63\x61\x62leTermination\x12-\n\x07\x63ircuit\x18\x08 \x01(\x0b\x32\x11.diode.v1.CircuitH\x00R\x07\x63ircuit\x12=\n\rcircuit_group\x18\t \x01(\x0b\x32\x16.diode.v1.CircuitGroupH\x00R\x0c\x63ircuitGroup\x12\\\n\x18\x63ircuit_group_assignment\x18\n \x01(\x0b\x32 .diode.v1.CircuitGroupAssignmentH\x00R\x16\x63ircuitGroupAssignment\x12O\n\x13\x63ircuit_termination\x18\x0b \x01(\x0b\x32\x1c.diode.v1.CircuitTerminationH\x00R\x12\x63ircuitTermination\x12:\n\x0c\x63ircuit_type\x18\x0c \x01(\x0b\x32\x15.diode.v1.CircuitTypeH\x00R\x0b\x63ircuitType\x12-\n\x07\x63luster\x18\r \x01(\x0b\x32\x11.diode.v1.ClusterH\x00R\x07\x63luster\x12=\n\rcluster_group\x18\x0e \x01(\x0b\x32\x16.diode.v1.ClusterGroupH\x00R\x0c\x63lusterGroup\x12:\n\x0c\x63luster_type\x18\x0f \x01(\x0b\x32\x15.diode.v1.ClusterTypeH\x00R\x0b\x63lusterType\x12:\n\x0c\x63onsole_port\x18\x10 \x01(\x0b\x32\x15.diode.v1.ConsolePortH\x00R\x0b\x63onsolePort\x12M\n\x13\x63onsole_server_port\x18\x11 \x01(\x0b\x32\x1b.diode.v1.ConsoleServerPortH\x00R\x11\x63onsoleServerPort\x12-\n\x07\x63ontact\x18\x12 \x01(\x0b\x32\x11.diode.v1.ContactH\x00R\x07\x63ontact\x12L\n\x12\x63ontact_assignment\x18\x13 \x01(\x0b\x32\x1b.diode.v1.ContactAssignmentH\x00R\x11\x63ontactAssignment\x12=\n\rcontact_group\x18\x14 \x01(\x0b\x32\x16.diode.v1.ContactGroupH\x00R\x0c\x63ontactGroup\x12:\n\x0c\x63ontact_role\x18\x15 \x01(\x0b\x32\x15.diode.v1.ContactRoleH\x00R\x0b\x63ontactRole\x12*\n\x06\x64\x65vice\x18\x16 \x01(\x0b\x32\x10.diode.v1.DeviceH\x00R\x06\x64\x65vice\x12\x34\n\ndevice_bay\x18\x17 \x01(\x0b\x32\x13.diode.v1.DeviceBayH\x00R\tdeviceBay\x12\x37\n\x0b\x64\x65vice_role\x18\x18 \x01(\x0b\x32\x14.diode.v1.DeviceRoleH\x00R\ndeviceRole\x12\x37\n\x0b\x64\x65vice_type\x18\x19 \x01(\x0b\x32\x14.diode.v1.DeviceTypeH\x00R\ndeviceType\x12\x34\n\nfhrp_group\x18\x1a \x01(\x0b\x32\x13.diode.v1.FHRPGroupH\x00R\tfhrpGroup\x12S\n\x15\x66hrp_group_assignment\x18\x1b \x01(\x0b\x32\x1d.diode.v1.FHRPGroupAssignmentH\x00R\x13\x66hrpGroupAssignment\x12\x34\n\nfront_port\x18\x1c \x01(\x0b\x32\x13.diode.v1.FrontPortH\x00R\tfrontPort\x12\x34\n\nike_policy\x18\x1d \x01(\x0b\x32\x13.diode.v1.IKEPolicyH\x00R\tikePolicy\x12:\n\x0cike_proposal\x18\x1e \x01(\x0b\x32\x15.diode.v1.IKEProposalH\x00R\x0bikeProposal\x12\x34\n\nip_address\x18\x1f \x01(\x0b\x32\x13.diode.v1.IPAddressH\x00R\tipAddress\x12.\n\x08ip_range\x18 \x01(\x0b\x32\x11.diode.v1.IPRangeH\x00R\x07ipRange\x12;\n\rip_sec_policy\x18! \x01(\x0b\x32\x15.diode.v1.IPSecPolicyH\x00R\x0bipSecPolicy\x12>\n\x0eip_sec_profile\x18\" \x01(\x0b\x32\x16.diode.v1.IPSecProfileH\x00R\x0cipSecProfile\x12\x41\n\x0fip_sec_proposal\x18# \x01(\x0b\x32\x17.diode.v1.IPSecProposalH\x00R\ripSecProposal\x12\x33\n\tinterface\x18$ \x01(\x0b\x32\x13.diode.v1.InterfaceH\x00R\tinterface\x12@\n\x0einventory_item\x18% \x01(\x0b\x32\x17.diode.v1.InventoryItemH\x00R\rinventoryItem\x12M\n\x13inventory_item_role\x18& \x01(\x0b\x32\x1b.diode.v1.InventoryItemRoleH\x00R\x11inventoryItemRole\x12\'\n\x05l2vpn\x18\' \x01(\x0b\x32\x0f.diode.v1.L2VPNH\x00R\x05l2vpn\x12I\n\x11l2vpn_termination\x18( \x01(\x0b\x32\x1a.diode.v1.L2VPNTerminationH\x00R\x10l2vpnTermination\x12\x30\n\x08location\x18) \x01(\x0b\x32\x12.diode.v1.LocationH\x00R\x08location\x12\x37\n\x0bmac_address\x18* \x01(\x0b\x32\x14.diode.v1.MACAddressH\x00R\nmacAddress\x12<\n\x0cmanufacturer\x18+ \x01(\x0b\x32\x16.diode.v1.ManufacturerH\x00R\x0cmanufacturer\x12*\n\x06module\x18, \x01(\x0b\x32\x10.diode.v1.ModuleH\x00R\x06module\x12\x34\n\nmodule_bay\x18- \x01(\x0b\x32\x13.diode.v1.ModuleBayH\x00R\tmoduleBay\x12\x37\n\x0bmodule_type\x18. \x01(\x0b\x32\x14.diode.v1.ModuleTypeH\x00R\nmoduleType\x12\x30\n\x08platform\x18/ \x01(\x0b\x32\x12.diode.v1.PlatformH\x00R\x08platform\x12\x34\n\npower_feed\x18\x30 \x01(\x0b\x32\x13.diode.v1.PowerFeedH\x00R\tpowerFeed\x12:\n\x0cpower_outlet\x18\x31 \x01(\x0b\x32\x15.diode.v1.PowerOutletH\x00R\x0bpowerOutlet\x12\x37\n\x0bpower_panel\x18\x32 \x01(\x0b\x32\x14.diode.v1.PowerPanelH\x00R\npowerPanel\x12\x34\n\npower_port\x18\x33 \x01(\x0b\x32\x13.diode.v1.PowerPortH\x00R\tpowerPort\x12*\n\x06prefix\x18\x34 \x01(\x0b\x32\x10.diode.v1.PrefixH\x00R\x06prefix\x12\x30\n\x08provider\x18\x35 \x01(\x0b\x32\x12.diode.v1.ProviderH\x00R\x08provider\x12\x46\n\x10provider_account\x18\x36 \x01(\x0b\x32\x19.diode.v1.ProviderAccountH\x00R\x0fproviderAccount\x12\x46\n\x10provider_network\x18\x37 \x01(\x0b\x32\x19.diode.v1.ProviderNetworkH\x00R\x0fproviderNetwork\x12!\n\x03rir\x18\x38 \x01(\x0b\x32\r.diode.v1.RIRH\x00R\x03rir\x12$\n\x04rack\x18\x39 \x01(\x0b\x32\x0e.diode.v1.RackH\x00R\x04rack\x12\x46\n\x10rack_reservation\x18: \x01(\x0b\x32\x19.diode.v1.RackReservationH\x00R\x0frackReservation\x12\x31\n\track_role\x18; \x01(\x0b\x32\x12.diode.v1.RackRoleH\x00R\x08rackRole\x12\x31\n\track_type\x18< \x01(\x0b\x32\x12.diode.v1.RackTypeH\x00R\x08rackType\x12\x31\n\trear_port\x18= \x01(\x0b\x32\x12.diode.v1.RearPortH\x00R\x08rearPort\x12*\n\x06region\x18> \x01(\x0b\x32\x10.diode.v1.RegionH\x00R\x06region\x12$\n\x04role\x18? \x01(\x0b\x32\x0e.diode.v1.RoleH\x00R\x04role\x12:\n\x0croute_target\x18@ \x01(\x0b\x32\x15.diode.v1.RouteTargetH\x00R\x0brouteTarget\x12-\n\x07service\x18\x41 \x01(\x0b\x32\x11.diode.v1.ServiceH\x00R\x07service\x12$\n\x04site\x18\x42 \x01(\x0b\x32\x0e.diode.v1.SiteH\x00R\x04site\x12\x34\n\nsite_group\x18\x43 \x01(\x0b\x32\x13.diode.v1.SiteGroupH\x00R\tsiteGroup\x12!\n\x03tag\x18\x44 \x01(\x0b\x32\r.diode.v1.TagH\x00R\x03tag\x12*\n\x06tenant\x18\x45 \x01(\x0b\x32\x10.diode.v1.TenantH\x00R\x06tenant\x12:\n\x0ctenant_group\x18\x46 \x01(\x0b\x32\x15.diode.v1.TenantGroupH\x00R\x0btenantGroup\x12*\n\x06tunnel\x18G \x01(\x0b\x32\x10.diode.v1.TunnelH\x00R\x06tunnel\x12:\n\x0ctunnel_group\x18H \x01(\x0b\x32\x15.diode.v1.TunnelGroupH\x00R\x0btunnelGroup\x12L\n\x12tunnel_termination\x18I \x01(\x0b\x32\x1b.diode.v1.TunnelTerminationH\x00R\x11tunnelTermination\x12$\n\x04vlan\x18J \x01(\x0b\x32\x0e.diode.v1.VLANH\x00R\x04vlan\x12\x34\n\nvlan_group\x18K \x01(\x0b\x32\x13.diode.v1.VLANGroupH\x00R\tvlanGroup\x12Y\n\x17vlan_translation_policy\x18L \x01(\x0b\x32\x1f.diode.v1.VLANTranslationPolicyH\x00R\x15vlanTranslationPolicy\x12S\n\x15vlan_translation_rule\x18M \x01(\x0b\x32\x1d.diode.v1.VLANTranslationRuleH\x00R\x13vlanTranslationRule\x12:\n\x0cvm_interface\x18N \x01(\x0b\x32\x15.diode.v1.VMInterfaceH\x00R\x0bvmInterface\x12!\n\x03vrf\x18O \x01(\x0b\x32\r.diode.v1.VRFH\x00R\x03vrf\x12\x43\n\x0fvirtual_chassis\x18P \x01(\x0b\x32\x18.diode.v1.VirtualChassisH\x00R\x0evirtualChassis\x12\x43\n\x0fvirtual_circuit\x18Q \x01(\x0b\x32\x18.diode.v1.VirtualCircuitH\x00R\x0evirtualCircuit\x12\x65\n\x1bvirtual_circuit_termination\x18R \x01(\x0b\x32#.diode.v1.VirtualCircuitTerminationH\x00R\x19virtualCircuitTermination\x12P\n\x14virtual_circuit_type\x18S \x01(\x0b\x32\x1c.diode.v1.VirtualCircuitTypeH\x00R\x12virtualCircuitType\x12V\n\x16virtual_device_context\x18T \x01(\x0b\x32\x1e.diode.v1.VirtualDeviceContextH\x00R\x14virtualDeviceContext\x12:\n\x0cvirtual_disk\x18U \x01(\x0b\x32\x15.diode.v1.VirtualDiskH\x00R\x0bvirtualDisk\x12\x43\n\x0fvirtual_machine\x18V \x01(\x0b\x32\x18.diode.v1.VirtualMachineH\x00R\x0evirtualMachine\x12:\n\x0cwireless_lan\x18W \x01(\x0b\x32\x15.diode.v1.WirelessLANH\x00R\x0bwirelessLan\x12J\n\x12wireless_lan_group\x18X \x01(\x0b\x32\x1a.diode.v1.WirelessLANGroupH\x00R\x10wirelessLanGroup\x12=\n\rwireless_link\x18Y \x01(\x0b\x32\x16.diode.v1.WirelessLinkH\x00R\x0cwirelessLinkB\x08\n\x06\x65ntity\"\xe4\x02\n\rIngestRequest\x12\"\n\x06stream\x18\x01 \x01(\tB\n\xfa\x42\x07r\x05\x10\x01\x18\xff\x01R\x06stream\x12\x39\n\x08\x65ntities\x18\x02 \x03(\x0b\x32\x10.diode.v1.EntityB\x0b\xfa\x42\x08\x92\x01\x05\x08\x01\x10\xe8\x07R\x08\x65ntities\x12\x18\n\x02id\x18\x03 \x01(\tB\x08\xfa\x42\x05r\x03\xb0\x01\x01R\x02id\x12\x36\n\x11producer_app_name\x18\x04 \x01(\tB\n\xfa\x42\x07r\x05\x10\x01\x18\xff\x01R\x0fproducerAppName\x12<\n\x14producer_app_version\x18\x05 \x01(\tB\n\xfa\x42\x07r\x05\x10\x01\x18\xff\x01R\x12producerAppVersion\x12%\n\x08sdk_name\x18\x06 \x01(\tB\n\xfa\x42\x07r\x05\x10\x01\x18\xff\x01R\x07sdkName\x12=\n\x0bsdk_version\x18\x07 \x01(\tB\x1c\xfa\x42\x19r\x17\x32\x15^(\\d)+\\.(\\d)+\\.(\\d)+$R\nsdkVersion\"(\n\x0eIngestResponse\x12\x16\n\x06\x65rrors\x18\x01 \x03(\tR\x06\x65rrors\"\xaa\x03\n\x03\x41SN\x12\x10\n\x03\x61sn\x18\x01 \x01(\x03R\x03\x61sn\x12$\n\x03rir\x18\x02 \x01(\x0b\x32\r.diode.v1.RIRH\x00R\x03rir\x88\x01\x01\x12-\n\x06tenant\x18\x03 \x01(\x0b\x32\x10.diode.v1.TenantH\x01R\x06tenant\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x02R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x05 \x01(\tH\x03R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x06 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12\x44\n\rcustom_fields\x18\x07 \x03(\x0b\x32\x1f.diode.v1.ASN.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x06\n\x04_rirB\t\n\x07_tenantB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xb7\x03\n\x08\x41SNRange\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n\x04slug\x18\x02 \x01(\tR\x04slug\x12\x1f\n\x03rir\x18\x03 \x01(\x0b\x32\r.diode.v1.RIRR\x03rir\x12\x14\n\x05start\x18\x04 \x01(\x03R\x05start\x12\x10\n\x03\x65nd\x18\x05 \x01(\x03R\x03\x65nd\x12-\n\x06tenant\x18\x06 \x01(\x0b\x32\x10.diode.v1.TenantH\x00R\x06tenant\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x08 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12I\n\rcustom_fields\x18\t \x03(\x0b\x32$.diode.v1.ASNRange.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\t\n\x07_tenantB\x0e\n\x0c_description\"\xfe\x03\n\tAggregate\x12\x16\n\x06prefix\x18\x01 \x01(\tR\x06prefix\x12\x1f\n\x03rir\x18\x02 \x01(\x0b\x32\r.diode.v1.RIRR\x03rir\x12-\n\x06tenant\x18\x03 \x01(\x0b\x32\x10.diode.v1.TenantH\x00R\x06tenant\x88\x01\x01\x12>\n\ndate_added\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\tdateAdded\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x02R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x06 \x01(\tH\x03R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x07 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12J\n\rcustom_fields\x18\x08 \x03(\x0b\x32%.diode.v1.Aggregate.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\t\n\x07_tenantB\r\n\x0b_date_addedB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xf1\x07\n\x05\x43\x61\x62le\x12\xdd\x01\n\x04type\x18\x01 \x01(\tB\xc3\x01\xfa\x42\xbf\x01r\xbc\x01R\x03\x61ocR\x04\x63\x61t3R\x04\x63\x61t5R\x05\x63\x61t5eR\x04\x63\x61t6R\x05\x63\x61t6aR\x04\x63\x61t7R\x05\x63\x61t7aR\x04\x63\x61t8R\x07\x63oaxialR\ndac-activeR\x0b\x64\x61\x63-passiveR\x03mmfR\x07mmf-om1R\x07mmf-om2R\x07mmf-om3R\x07mmf-om4R\x07mmf-om5R\x0bmrj21-trunkR\x05powerR\x03smfR\x07smf-os1R\x07smf-os2R\x03usbH\x00R\x04type\x88\x01\x01\x12>\n\x0e\x61_terminations\x18\x02 \x03(\x0b\x32\x17.diode.v1.GenericObjectR\raTerminations\x12>\n\x0e\x62_terminations\x18\x03 \x03(\x0b\x32\x17.diode.v1.GenericObjectR\rbTerminations\x12G\n\x06status\x18\x04 \x01(\tB*\xfa\x42\'r%R\tconnectedR\x0f\x64\x65\x63ommissioningR\x07plannedH\x01R\x06status\x88\x01\x01\x12-\n\x06tenant\x18\x05 \x01(\x0b\x32\x10.diode.v1.TenantH\x02R\x06tenant\x88\x01\x01\x12\x19\n\x05label\x18\x06 \x01(\tH\x03R\x05label\x88\x01\x01\x12\x19\n\x05\x63olor\x18\x07 \x01(\tH\x04R\x05\x63olor\x88\x01\x01\x12\x1b\n\x06length\x18\x08 \x01(\x01H\x05R\x06length\x88\x01\x01\x12\x42\n\x0blength_unit\x18\t \x01(\tB\x1c\xfa\x42\x19r\x17R\x02\x63mR\x02\x66tR\x02inR\x02kmR\x01mR\x02miH\x06R\nlengthUnit\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\n \x01(\tH\x07R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x0b \x01(\tH\x08R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x0c \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12\x46\n\rcustom_fields\x18\r \x03(\x0b\x32!.diode.v1.Cable.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x07\n\x05_typeB\t\n\x07_statusB\t\n\x07_tenantB\x08\n\x06_labelB\x08\n\x06_colorB\t\n\x07_lengthB\x0e\n\x0c_length_unitB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\x9e\x01\n\tCablePath\x12 \n\tis_active\x18\x01 \x01(\x08H\x00R\x08isActive\x88\x01\x01\x12$\n\x0bis_complete\x18\x02 \x01(\x08H\x01R\nisComplete\x88\x01\x01\x12\x1e\n\x08is_split\x18\x03 \x01(\x08H\x02R\x07isSplit\x88\x01\x01\x42\x0c\n\n_is_activeB\x0e\n\x0c_is_completeB\x0b\n\t_is_split\"\xe3\x06\n\x10\x43\x61\x62leTermination\x12%\n\x05\x63\x61\x62le\x18\x01 \x01(\x0b\x32\x0f.diode.v1.CableR\x05\x63\x61\x62le\x12(\n\tcable_end\x18\x02 \x01(\tB\x0b\xfa\x42\x08r\x06R\x01\x41R\x01\x42R\x08\x63\x61\x62leEnd\x12\x66\n\x1ftermination_circuit_termination\x18\x03 \x01(\x0b\x32\x1c.diode.v1.CircuitTerminationH\x00R\x1dterminationCircuitTermination\x12Q\n\x18termination_console_port\x18\x04 \x01(\x0b\x32\x15.diode.v1.ConsolePortH\x00R\x16terminationConsolePort\x12\x64\n\x1ftermination_console_server_port\x18\x05 \x01(\x0b\x32\x1b.diode.v1.ConsoleServerPortH\x00R\x1cterminationConsoleServerPort\x12K\n\x16termination_front_port\x18\x06 \x01(\x0b\x32\x13.diode.v1.FrontPortH\x00R\x14terminationFrontPort\x12J\n\x15termination_interface\x18\x07 \x01(\x0b\x32\x13.diode.v1.InterfaceH\x00R\x14terminationInterface\x12K\n\x16termination_power_feed\x18\x08 \x01(\x0b\x32\x13.diode.v1.PowerFeedH\x00R\x14terminationPowerFeed\x12Q\n\x18termination_power_outlet\x18\t \x01(\x0b\x32\x15.diode.v1.PowerOutletH\x00R\x16terminationPowerOutlet\x12K\n\x16termination_power_port\x18\n \x01(\x0b\x32\x13.diode.v1.PowerPortH\x00R\x14terminationPowerPort\x12H\n\x15termination_rear_port\x18\x0b \x01(\x0b\x32\x12.diode.v1.RearPortH\x00R\x13terminationRearPortB\r\n\x0btermination\"\xe6\x08\n\x07\x43ircuit\x12\x10\n\x03\x63id\x18\x01 \x01(\tR\x03\x63id\x12.\n\x08provider\x18\x02 \x01(\x0b\x32\x12.diode.v1.ProviderR\x08provider\x12I\n\x10provider_account\x18\x03 \x01(\x0b\x32\x19.diode.v1.ProviderAccountH\x00R\x0fproviderAccount\x88\x01\x01\x12)\n\x04type\x18\x04 \x01(\x0b\x32\x15.diode.v1.CircuitTypeR\x04type\x12j\n\x06status\x18\x05 \x01(\tBM\xfa\x42JrHR\x06\x61\x63tiveR\x0e\x64\x65\x63ommissionedR\x0e\x64\x65provisioningR\x07offlineR\x07plannedR\x0cprovisioningH\x01R\x06status\x88\x01\x01\x12-\n\x06tenant\x18\x06 \x01(\x0b\x32\x10.diode.v1.TenantH\x02R\x06tenant\x88\x01\x01\x12\x42\n\x0cinstall_date\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x03R\x0binstallDate\x88\x01\x01\x12J\n\x10termination_date\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x04R\x0fterminationDate\x88\x01\x01\x12$\n\x0b\x63ommit_rate\x18\t \x01(\x03H\x05R\ncommitRate\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\n \x01(\tH\x06R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x64istance\x18\x0b \x01(\x01H\x07R\x08\x64istance\x88\x01\x01\x12>\n\rdistance_unit\x18\x0c \x01(\tB\x14\xfa\x42\x11r\x0fR\x02\x66tR\x02kmR\x01mR\x02miH\x08R\x0c\x64istanceUnit\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\r \x01(\tH\tR\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x0e \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12\x42\n\x0b\x61ssignments\x18\x0f \x03(\x0b\x32 .diode.v1.CircuitGroupAssignmentR\x0b\x61ssignments\x12H\n\rcustom_fields\x18\x10 \x03(\x0b\x32#.diode.v1.Circuit.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x13\n\x11_provider_accountB\t\n\x07_statusB\t\n\x07_tenantB\x0f\n\r_install_dateB\x13\n\x11_termination_dateB\x0e\n\x0c_commit_rateB\x0e\n\x0c_descriptionB\x0b\n\t_distanceB\x10\n\x0e_distance_unitB\x0b\n\t_comments\"\xf6\x02\n\x0c\x43ircuitGroup\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n\x04slug\x18\x02 \x01(\tR\x04slug\x12%\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12-\n\x06tenant\x18\x04 \x01(\x0b\x32\x10.diode.v1.TenantH\x01R\x06tenant\x88\x01\x01\x12!\n\x04tags\x18\x05 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12M\n\rcustom_fields\x18\x06 \x03(\x0b\x32(.diode.v1.CircuitGroup.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x0e\n\x0c_descriptionB\t\n\x07_tenant\"\xde\x02\n\x16\x43ircuitGroupAssignment\x12,\n\x05group\x18\x01 \x01(\x0b\x32\x16.diode.v1.CircuitGroupR\x05group\x12:\n\x0emember_circuit\x18\x02 \x01(\x0b\x32\x11.diode.v1.CircuitH\x00R\rmemberCircuit\x12P\n\x16member_virtual_circuit\x18\x03 \x01(\x0b\x32\x18.diode.v1.VirtualCircuitH\x00R\x14memberVirtualCircuit\x12N\n\x08priority\x18\x04 \x01(\tB-\xfa\x42*r(R\x08inactiveR\x07primaryR\tsecondaryR\x08tertiaryH\x01R\x08priority\x88\x01\x01\x12!\n\x04tags\x18\x05 \x03(\x0b\x32\r.diode.v1.TagR\x04tagsB\x08\n\x06memberB\x0b\n\t_priority\"\x8c\x08\n\x12\x43ircuitTermination\x12+\n\x07\x63ircuit\x18\x01 \x01(\x0b\x32\x11.diode.v1.CircuitR\x07\x63ircuit\x12(\n\tterm_side\x18\x02 \x01(\tB\x0b\xfa\x42\x08r\x06R\x01\x41R\x01ZR\x08termSide\x12G\n\x14termination_location\x18\x03 \x01(\x0b\x32\x12.diode.v1.LocationH\x00R\x13terminationLocation\x12]\n\x1ctermination_provider_network\x18\x04 \x01(\x0b\x32\x19.diode.v1.ProviderNetworkH\x00R\x1aterminationProviderNetwork\x12\x41\n\x12termination_region\x18\x05 \x01(\x0b\x32\x10.diode.v1.RegionH\x00R\x11terminationRegion\x12;\n\x10termination_site\x18\x06 \x01(\x0b\x32\x0e.diode.v1.SiteH\x00R\x0fterminationSite\x12K\n\x16termination_site_group\x18\x07 \x01(\x0b\x32\x13.diode.v1.SiteGroupH\x00R\x14terminationSiteGroup\x12\"\n\nport_speed\x18\x08 \x01(\x03H\x01R\tportSpeed\x88\x01\x01\x12*\n\x0eupstream_speed\x18\t \x01(\x03H\x02R\rupstreamSpeed\x88\x01\x01\x12$\n\x0bxconnect_id\x18\n \x01(\tH\x03R\nxconnectId\x88\x01\x01\x12\x1c\n\x07pp_info\x18\x0b \x01(\tH\x04R\x06ppInfo\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x0c \x01(\tH\x05R\x0b\x64\x65scription\x88\x01\x01\x12*\n\x0emark_connected\x18\r \x01(\x08H\x06R\rmarkConnected\x88\x01\x01\x12!\n\x04tags\x18\x0e \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12S\n\rcustom_fields\x18\x0f \x03(\x0b\x32..diode.v1.CircuitTermination.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\r\n\x0bterminationB\r\n\x0b_port_speedB\x11\n\x0f_upstream_speedB\x0e\n\x0c_xconnect_idB\n\n\x08_pp_infoB\x0e\n\x0c_descriptionB\x11\n\x0f_mark_connected\"\xdf\x02\n\x0b\x43ircuitType\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n\x04slug\x18\x02 \x01(\tR\x04slug\x12\x19\n\x05\x63olor\x18\x03 \x01(\tH\x00R\x05\x63olor\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x01R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x05 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12L\n\rcustom_fields\x18\x06 \x03(\x0b\x32\'.diode.v1.CircuitType.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x08\n\x06_colorB\x0e\n\x0c_description\"\xc0\x06\n\x07\x43luster\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12)\n\x04type\x18\x02 \x01(\x0b\x32\x15.diode.v1.ClusterTypeR\x04type\x12\x31\n\x05group\x18\x03 \x01(\x0b\x32\x16.diode.v1.ClusterGroupH\x01R\x05group\x88\x01\x01\x12V\n\x06status\x18\x04 \x01(\tB9\xfa\x42\x36r4R\x06\x61\x63tiveR\x0f\x64\x65\x63ommissioningR\x07offlineR\x07plannedR\x07stagingH\x02R\x06status\x88\x01\x01\x12-\n\x06tenant\x18\x05 \x01(\x0b\x32\x10.diode.v1.TenantH\x03R\x06tenant\x88\x01\x01\x12;\n\x0escope_location\x18\x06 \x01(\x0b\x32\x12.diode.v1.LocationH\x00R\rscopeLocation\x12\x35\n\x0cscope_region\x18\x07 \x01(\x0b\x32\x10.diode.v1.RegionH\x00R\x0bscopeRegion\x12/\n\nscope_site\x18\x08 \x01(\x0b\x32\x0e.diode.v1.SiteH\x00R\tscopeSite\x12?\n\x10scope_site_group\x18\t \x01(\x0b\x32\x13.diode.v1.SiteGroupH\x00R\x0escopeSiteGroup\x12%\n\x0b\x64\x65scription\x18\n \x01(\tH\x04R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x0b \x01(\tH\x05R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x0c \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12H\n\rcustom_fields\x18\r \x03(\x0b\x32#.diode.v1.Cluster.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x07\n\x05scopeB\x08\n\x06_groupB\t\n\x07_statusB\t\n\x07_tenantB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xbc\x02\n\x0c\x43lusterGroup\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n\x04slug\x18\x02 \x01(\tR\x04slug\x12%\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x04 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12M\n\rcustom_fields\x18\x05 \x03(\x0b\x32(.diode.v1.ClusterGroup.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x0e\n\x0c_description\"\xba\x02\n\x0b\x43lusterType\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n\x04slug\x18\x02 \x01(\tR\x04slug\x12%\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x04 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12L\n\rcustom_fields\x18\x05 \x03(\x0b\x32\'.diode.v1.ClusterType.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x0e\n\x0c_description\"\xed\x05\n\x0b\x43onsolePort\x12(\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32\x10.diode.v1.DeviceR\x06\x64\x65vice\x12-\n\x06module\x18\x02 \x01(\x0b\x32\x10.diode.v1.ModuleH\x00R\x06module\x88\x01\x01\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x19\n\x05label\x18\x04 \x01(\tH\x01R\x05label\x88\x01\x01\x12\xab\x01\n\x04type\x18\x05 \x01(\tB\x91\x01\xfa\x42\x8d\x01r\x8a\x01R\x05\x64\x62-25R\x04\x64\x65-9R\nmini-din-8R\x05otherR\x05rj-11R\x05rj-12R\x05rj-45R\x05usb-aR\x05usb-bR\x05usb-cR\x0busb-micro-aR\x0cusb-micro-abR\x0busb-micro-bR\nusb-mini-aR\nusb-mini-bH\x02R\x04type\x88\x01\x01\x12<\n\x05speed\x18\x06 \x01(\x03\x42!\xfa\x42\x1e\"\x1c\x30\xb0\t0\xe0\x12\x30\xc0%0\x80K0\x80\x96\x01\x30\x80\xac\x02\x30\x80\xc2\x03\x30\x80\x84\x07H\x03R\x05speed\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x04R\x0b\x64\x65scription\x88\x01\x01\x12*\n\x0emark_connected\x18\x08 \x01(\x08H\x05R\rmarkConnected\x88\x01\x01\x12!\n\x04tags\x18\t \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12L\n\rcustom_fields\x18\n \x03(\x0b\x32\'.diode.v1.ConsolePort.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\t\n\x07_moduleB\x08\n\x06_labelB\x07\n\x05_typeB\x08\n\x06_speedB\x0e\n\x0c_descriptionB\x11\n\x0f_mark_connected\"\xf9\x05\n\x11\x43onsoleServerPort\x12(\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32\x10.diode.v1.DeviceR\x06\x64\x65vice\x12-\n\x06module\x18\x02 \x01(\x0b\x32\x10.diode.v1.ModuleH\x00R\x06module\x88\x01\x01\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x19\n\x05label\x18\x04 \x01(\tH\x01R\x05label\x88\x01\x01\x12\xab\x01\n\x04type\x18\x05 \x01(\tB\x91\x01\xfa\x42\x8d\x01r\x8a\x01R\x05\x64\x62-25R\x04\x64\x65-9R\nmini-din-8R\x05otherR\x05rj-11R\x05rj-12R\x05rj-45R\x05usb-aR\x05usb-bR\x05usb-cR\x0busb-micro-aR\x0cusb-micro-abR\x0busb-micro-bR\nusb-mini-aR\nusb-mini-bH\x02R\x04type\x88\x01\x01\x12<\n\x05speed\x18\x06 \x01(\x03\x42!\xfa\x42\x1e\"\x1c\x30\xb0\t0\xe0\x12\x30\xc0%0\x80K0\x80\x96\x01\x30\x80\xac\x02\x30\x80\xc2\x03\x30\x80\x84\x07H\x03R\x05speed\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x04R\x0b\x64\x65scription\x88\x01\x01\x12*\n\x0emark_connected\x18\x08 \x01(\x08H\x05R\rmarkConnected\x88\x01\x01\x12!\n\x04tags\x18\t \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12R\n\rcustom_fields\x18\n \x03(\x0b\x32-.diode.v1.ConsoleServerPort.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\t\n\x07_moduleB\x08\n\x06_labelB\x07\n\x05_typeB\x08\n\x06_speedB\x0e\n\x0c_descriptionB\x11\n\x0f_mark_connected\"\xc5\x04\n\x07\x43ontact\x12\x31\n\x05group\x18\x01 \x01(\x0b\x32\x16.diode.v1.ContactGroupH\x00R\x05group\x88\x01\x01\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x19\n\x05title\x18\x03 \x01(\tH\x01R\x05title\x88\x01\x01\x12\x19\n\x05phone\x18\x04 \x01(\tH\x02R\x05phone\x88\x01\x01\x12\x19\n\x05\x65mail\x18\x05 \x01(\tH\x03R\x05\x65mail\x88\x01\x01\x12\x1d\n\x07\x61\x64\x64ress\x18\x06 \x01(\tH\x04R\x07\x61\x64\x64ress\x88\x01\x01\x12\x17\n\x04link\x18\x07 \x01(\tH\x05R\x04link\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x08 \x01(\tH\x06R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\t \x01(\tH\x07R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\n \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12H\n\rcustom_fields\x18\x0b \x03(\x0b\x32#.diode.v1.Contact.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x08\n\x06_groupB\x08\n\x06_titleB\x08\n\x06_phoneB\x08\n\x06_emailB\n\n\x08_addressB\x07\n\x05_linkB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xe5\x34\n\x11\x43ontactAssignment\x12.\n\nobject_asn\x18\x01 \x01(\x0b\x32\r.diode.v1.ASNH\x00R\tobjectAsn\x12>\n\x10object_asn_range\x18\x02 \x01(\x0b\x32\x12.diode.v1.ASNRangeH\x00R\x0eobjectAsnRange\x12@\n\x10object_aggregate\x18\x03 \x01(\x0b\x32\x13.diode.v1.AggregateH\x00R\x0fobjectAggregate\x12\x34\n\x0cobject_cable\x18\x04 \x01(\x0b\x32\x0f.diode.v1.CableH\x00R\x0bobjectCable\x12\x41\n\x11object_cable_path\x18\x05 \x01(\x0b\x32\x13.diode.v1.CablePathH\x00R\x0fobjectCablePath\x12V\n\x18object_cable_termination\x18\x06 \x01(\x0b\x32\x1a.diode.v1.CableTerminationH\x00R\x16objectCableTermination\x12:\n\x0eobject_circuit\x18\x07 \x01(\x0b\x32\x11.diode.v1.CircuitH\x00R\robjectCircuit\x12J\n\x14object_circuit_group\x18\x08 \x01(\x0b\x32\x16.diode.v1.CircuitGroupH\x00R\x12objectCircuitGroup\x12i\n\x1fobject_circuit_group_assignment\x18\t \x01(\x0b\x32 .diode.v1.CircuitGroupAssignmentH\x00R\x1cobjectCircuitGroupAssignment\x12\\\n\x1aobject_circuit_termination\x18\n \x01(\x0b\x32\x1c.diode.v1.CircuitTerminationH\x00R\x18objectCircuitTermination\x12G\n\x13object_circuit_type\x18\x0b \x01(\x0b\x32\x15.diode.v1.CircuitTypeH\x00R\x11objectCircuitType\x12:\n\x0eobject_cluster\x18\x0c \x01(\x0b\x32\x11.diode.v1.ClusterH\x00R\robjectCluster\x12J\n\x14object_cluster_group\x18\r \x01(\x0b\x32\x16.diode.v1.ClusterGroupH\x00R\x12objectClusterGroup\x12G\n\x13object_cluster_type\x18\x0e \x01(\x0b\x32\x15.diode.v1.ClusterTypeH\x00R\x11objectClusterType\x12G\n\x13object_console_port\x18\x0f \x01(\x0b\x32\x15.diode.v1.ConsolePortH\x00R\x11objectConsolePort\x12Z\n\x1aobject_console_server_port\x18\x10 \x01(\x0b\x32\x1b.diode.v1.ConsoleServerPortH\x00R\x17objectConsoleServerPort\x12:\n\x0eobject_contact\x18\x11 \x01(\x0b\x32\x11.diode.v1.ContactH\x00R\robjectContact\x12Y\n\x19object_contact_assignment\x18\x12 \x01(\x0b\x32\x1b.diode.v1.ContactAssignmentH\x00R\x17objectContactAssignment\x12J\n\x14object_contact_group\x18\x13 \x01(\x0b\x32\x16.diode.v1.ContactGroupH\x00R\x12objectContactGroup\x12G\n\x13object_contact_role\x18\x14 \x01(\x0b\x32\x15.diode.v1.ContactRoleH\x00R\x11objectContactRole\x12\x37\n\robject_device\x18\x15 \x01(\x0b\x32\x10.diode.v1.DeviceH\x00R\x0cobjectDevice\x12\x41\n\x11object_device_bay\x18\x16 \x01(\x0b\x32\x13.diode.v1.DeviceBayH\x00R\x0fobjectDeviceBay\x12\x44\n\x12object_device_role\x18\x17 \x01(\x0b\x32\x14.diode.v1.DeviceRoleH\x00R\x10objectDeviceRole\x12\x44\n\x12object_device_type\x18\x18 \x01(\x0b\x32\x14.diode.v1.DeviceTypeH\x00R\x10objectDeviceType\x12\x41\n\x11object_fhrp_group\x18\x19 \x01(\x0b\x32\x13.diode.v1.FHRPGroupH\x00R\x0fobjectFhrpGroup\x12`\n\x1cobject_fhrp_group_assignment\x18\x1a \x01(\x0b\x32\x1d.diode.v1.FHRPGroupAssignmentH\x00R\x19objectFhrpGroupAssignment\x12\x41\n\x11object_front_port\x18\x1b \x01(\x0b\x32\x13.diode.v1.FrontPortH\x00R\x0fobjectFrontPort\x12\x41\n\x11object_ike_policy\x18\x1c \x01(\x0b\x32\x13.diode.v1.IKEPolicyH\x00R\x0fobjectIkePolicy\x12G\n\x13object_ike_proposal\x18\x1d \x01(\x0b\x32\x15.diode.v1.IKEProposalH\x00R\x11objectIkeProposal\x12\x41\n\x11object_ip_address\x18\x1e \x01(\x0b\x32\x13.diode.v1.IPAddressH\x00R\x0fobjectIpAddress\x12;\n\x0fobject_ip_range\x18\x1f \x01(\x0b\x32\x11.diode.v1.IPRangeH\x00R\robjectIpRange\x12H\n\x14object_ip_sec_policy\x18 \x01(\x0b\x32\x15.diode.v1.IPSecPolicyH\x00R\x11objectIpSecPolicy\x12K\n\x15object_ip_sec_profile\x18! \x01(\x0b\x32\x16.diode.v1.IPSecProfileH\x00R\x12objectIpSecProfile\x12N\n\x16object_ip_sec_proposal\x18\" \x01(\x0b\x32\x17.diode.v1.IPSecProposalH\x00R\x13objectIpSecProposal\x12@\n\x10object_interface\x18# \x01(\x0b\x32\x13.diode.v1.InterfaceH\x00R\x0fobjectInterface\x12M\n\x15object_inventory_item\x18$ \x01(\x0b\x32\x17.diode.v1.InventoryItemH\x00R\x13objectInventoryItem\x12Z\n\x1aobject_inventory_item_role\x18% \x01(\x0b\x32\x1b.diode.v1.InventoryItemRoleH\x00R\x17objectInventoryItemRole\x12\x34\n\x0cobject_l2vpn\x18& \x01(\x0b\x32\x0f.diode.v1.L2VPNH\x00R\x0bobjectL2vpn\x12V\n\x18object_l2vpn_termination\x18\' \x01(\x0b\x32\x1a.diode.v1.L2VPNTerminationH\x00R\x16objectL2vpnTermination\x12=\n\x0fobject_location\x18( \x01(\x0b\x32\x12.diode.v1.LocationH\x00R\x0eobjectLocation\x12\x44\n\x12object_mac_address\x18) \x01(\x0b\x32\x14.diode.v1.MACAddressH\x00R\x10objectMacAddress\x12I\n\x13object_manufacturer\x18* \x01(\x0b\x32\x16.diode.v1.ManufacturerH\x00R\x12objectManufacturer\x12\x37\n\robject_module\x18+ \x01(\x0b\x32\x10.diode.v1.ModuleH\x00R\x0cobjectModule\x12\x41\n\x11object_module_bay\x18, \x01(\x0b\x32\x13.diode.v1.ModuleBayH\x00R\x0fobjectModuleBay\x12\x44\n\x12object_module_type\x18- \x01(\x0b\x32\x14.diode.v1.ModuleTypeH\x00R\x10objectModuleType\x12=\n\x0fobject_platform\x18. \x01(\x0b\x32\x12.diode.v1.PlatformH\x00R\x0eobjectPlatform\x12\x41\n\x11object_power_feed\x18/ \x01(\x0b\x32\x13.diode.v1.PowerFeedH\x00R\x0fobjectPowerFeed\x12G\n\x13object_power_outlet\x18\x30 \x01(\x0b\x32\x15.diode.v1.PowerOutletH\x00R\x11objectPowerOutlet\x12\x44\n\x12object_power_panel\x18\x31 \x01(\x0b\x32\x14.diode.v1.PowerPanelH\x00R\x10objectPowerPanel\x12\x41\n\x11object_power_port\x18\x32 \x01(\x0b\x32\x13.diode.v1.PowerPortH\x00R\x0fobjectPowerPort\x12\x37\n\robject_prefix\x18\x33 \x01(\x0b\x32\x10.diode.v1.PrefixH\x00R\x0cobjectPrefix\x12=\n\x0fobject_provider\x18\x34 \x01(\x0b\x32\x12.diode.v1.ProviderH\x00R\x0eobjectProvider\x12S\n\x17object_provider_account\x18\x35 \x01(\x0b\x32\x19.diode.v1.ProviderAccountH\x00R\x15objectProviderAccount\x12S\n\x17object_provider_network\x18\x36 \x01(\x0b\x32\x19.diode.v1.ProviderNetworkH\x00R\x15objectProviderNetwork\x12.\n\nobject_rir\x18\x37 \x01(\x0b\x32\r.diode.v1.RIRH\x00R\tobjectRir\x12\x31\n\x0bobject_rack\x18\x38 \x01(\x0b\x32\x0e.diode.v1.RackH\x00R\nobjectRack\x12S\n\x17object_rack_reservation\x18\x39 \x01(\x0b\x32\x19.diode.v1.RackReservationH\x00R\x15objectRackReservation\x12>\n\x10object_rack_role\x18: \x01(\x0b\x32\x12.diode.v1.RackRoleH\x00R\x0eobjectRackRole\x12>\n\x10object_rack_type\x18; \x01(\x0b\x32\x12.diode.v1.RackTypeH\x00R\x0eobjectRackType\x12>\n\x10object_rear_port\x18< \x01(\x0b\x32\x12.diode.v1.RearPortH\x00R\x0eobjectRearPort\x12\x37\n\robject_region\x18= \x01(\x0b\x32\x10.diode.v1.RegionH\x00R\x0cobjectRegion\x12\x31\n\x0bobject_role\x18> \x01(\x0b\x32\x0e.diode.v1.RoleH\x00R\nobjectRole\x12G\n\x13object_route_target\x18? \x01(\x0b\x32\x15.diode.v1.RouteTargetH\x00R\x11objectRouteTarget\x12:\n\x0eobject_service\x18@ \x01(\x0b\x32\x11.diode.v1.ServiceH\x00R\robjectService\x12\x31\n\x0bobject_site\x18\x41 \x01(\x0b\x32\x0e.diode.v1.SiteH\x00R\nobjectSite\x12\x41\n\x11object_site_group\x18\x42 \x01(\x0b\x32\x13.diode.v1.SiteGroupH\x00R\x0fobjectSiteGroup\x12.\n\nobject_tag\x18\x43 \x01(\x0b\x32\r.diode.v1.TagH\x00R\tobjectTag\x12\x37\n\robject_tenant\x18\x44 \x01(\x0b\x32\x10.diode.v1.TenantH\x00R\x0cobjectTenant\x12G\n\x13object_tenant_group\x18\x45 \x01(\x0b\x32\x15.diode.v1.TenantGroupH\x00R\x11objectTenantGroup\x12\x37\n\robject_tunnel\x18\x46 \x01(\x0b\x32\x10.diode.v1.TunnelH\x00R\x0cobjectTunnel\x12G\n\x13object_tunnel_group\x18G \x01(\x0b\x32\x15.diode.v1.TunnelGroupH\x00R\x11objectTunnelGroup\x12Y\n\x19object_tunnel_termination\x18H \x01(\x0b\x32\x1b.diode.v1.TunnelTerminationH\x00R\x17objectTunnelTermination\x12\x31\n\x0bobject_vlan\x18I \x01(\x0b\x32\x0e.diode.v1.VLANH\x00R\nobjectVlan\x12\x41\n\x11object_vlan_group\x18J \x01(\x0b\x32\x13.diode.v1.VLANGroupH\x00R\x0fobjectVlanGroup\x12\x66\n\x1eobject_vlan_translation_policy\x18K \x01(\x0b\x32\x1f.diode.v1.VLANTranslationPolicyH\x00R\x1bobjectVlanTranslationPolicy\x12`\n\x1cobject_vlan_translation_rule\x18L \x01(\x0b\x32\x1d.diode.v1.VLANTranslationRuleH\x00R\x19objectVlanTranslationRule\x12G\n\x13object_vm_interface\x18M \x01(\x0b\x32\x15.diode.v1.VMInterfaceH\x00R\x11objectVmInterface\x12.\n\nobject_vrf\x18N \x01(\x0b\x32\r.diode.v1.VRFH\x00R\tobjectVrf\x12P\n\x16object_virtual_chassis\x18O \x01(\x0b\x32\x18.diode.v1.VirtualChassisH\x00R\x14objectVirtualChassis\x12P\n\x16object_virtual_circuit\x18P \x01(\x0b\x32\x18.diode.v1.VirtualCircuitH\x00R\x14objectVirtualCircuit\x12r\n\"object_virtual_circuit_termination\x18Q \x01(\x0b\x32#.diode.v1.VirtualCircuitTerminationH\x00R\x1fobjectVirtualCircuitTermination\x12]\n\x1bobject_virtual_circuit_type\x18R \x01(\x0b\x32\x1c.diode.v1.VirtualCircuitTypeH\x00R\x18objectVirtualCircuitType\x12\x63\n\x1dobject_virtual_device_context\x18S \x01(\x0b\x32\x1e.diode.v1.VirtualDeviceContextH\x00R\x1aobjectVirtualDeviceContext\x12G\n\x13object_virtual_disk\x18T \x01(\x0b\x32\x15.diode.v1.VirtualDiskH\x00R\x11objectVirtualDisk\x12P\n\x16object_virtual_machine\x18U \x01(\x0b\x32\x18.diode.v1.VirtualMachineH\x00R\x14objectVirtualMachine\x12G\n\x13object_wireless_lan\x18V \x01(\x0b\x32\x15.diode.v1.WirelessLANH\x00R\x11objectWirelessLan\x12W\n\x19object_wireless_lan_group\x18W \x01(\x0b\x32\x1a.diode.v1.WirelessLANGroupH\x00R\x16objectWirelessLanGroup\x12J\n\x14object_wireless_link\x18X \x01(\x0b\x32\x16.diode.v1.WirelessLinkH\x00R\x12objectWirelessLink\x12+\n\x07\x63ontact\x18Y \x01(\x0b\x32\x11.diode.v1.ContactR\x07\x63ontact\x12.\n\x04role\x18Z \x01(\x0b\x32\x15.diode.v1.ContactRoleH\x01R\x04role\x88\x01\x01\x12N\n\x08priority\x18[ \x01(\tB-\xfa\x42*r(R\x08inactiveR\x07primaryR\tsecondaryR\x08tertiaryH\x02R\x08priority\x88\x01\x01\x12!\n\x04tags\x18\\ \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12R\n\rcustom_fields\x18] \x03(\x0b\x32-.diode.v1.ContactAssignment.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x08\n\x06objectB\x07\n\x05_roleB\x0b\n\t_priority\"\xfc\x02\n\x0c\x43ontactGroup\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n\x04slug\x18\x02 \x01(\tR\x04slug\x12\x33\n\x06parent\x18\x03 \x01(\x0b\x32\x16.diode.v1.ContactGroupH\x00R\x06parent\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x01R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x05 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12M\n\rcustom_fields\x18\x06 \x03(\x0b\x32(.diode.v1.ContactGroup.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\t\n\x07_parentB\x0e\n\x0c_description\"\xba\x02\n\x0b\x43ontactRole\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n\x04slug\x18\x02 \x01(\tR\x04slug\x12%\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x04 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12L\n\rcustom_fields\x18\x05 \x03(\x0b\x32\'.diode.v1.ContactRole.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x0e\n\x0c_description\"\xdf(\n\x1a\x43ustomFieldObjectReference\x12!\n\x03\x61sn\x18\x01 \x01(\x0b\x32\r.diode.v1.ASNH\x00R\x03\x61sn\x12\x31\n\tasn_range\x18\x02 \x01(\x0b\x32\x12.diode.v1.ASNRangeH\x00R\x08\x61snRange\x12\x33\n\taggregate\x18\x03 \x01(\x0b\x32\x13.diode.v1.AggregateH\x00R\taggregate\x12\'\n\x05\x63\x61\x62le\x18\x04 \x01(\x0b\x32\x0f.diode.v1.CableH\x00R\x05\x63\x61\x62le\x12\x34\n\ncable_path\x18\x05 \x01(\x0b\x32\x13.diode.v1.CablePathH\x00R\tcablePath\x12I\n\x11\x63\x61\x62le_termination\x18\x06 \x01(\x0b\x32\x1a.diode.v1.CableTerminationH\x00R\x10\x63\x61\x62leTermination\x12-\n\x07\x63ircuit\x18\x07 \x01(\x0b\x32\x11.diode.v1.CircuitH\x00R\x07\x63ircuit\x12=\n\rcircuit_group\x18\x08 \x01(\x0b\x32\x16.diode.v1.CircuitGroupH\x00R\x0c\x63ircuitGroup\x12\\\n\x18\x63ircuit_group_assignment\x18\t \x01(\x0b\x32 .diode.v1.CircuitGroupAssignmentH\x00R\x16\x63ircuitGroupAssignment\x12O\n\x13\x63ircuit_termination\x18\n \x01(\x0b\x32\x1c.diode.v1.CircuitTerminationH\x00R\x12\x63ircuitTermination\x12:\n\x0c\x63ircuit_type\x18\x0b \x01(\x0b\x32\x15.diode.v1.CircuitTypeH\x00R\x0b\x63ircuitType\x12-\n\x07\x63luster\x18\x0c \x01(\x0b\x32\x11.diode.v1.ClusterH\x00R\x07\x63luster\x12=\n\rcluster_group\x18\r \x01(\x0b\x32\x16.diode.v1.ClusterGroupH\x00R\x0c\x63lusterGroup\x12:\n\x0c\x63luster_type\x18\x0e \x01(\x0b\x32\x15.diode.v1.ClusterTypeH\x00R\x0b\x63lusterType\x12:\n\x0c\x63onsole_port\x18\x0f \x01(\x0b\x32\x15.diode.v1.ConsolePortH\x00R\x0b\x63onsolePort\x12M\n\x13\x63onsole_server_port\x18\x10 \x01(\x0b\x32\x1b.diode.v1.ConsoleServerPortH\x00R\x11\x63onsoleServerPort\x12-\n\x07\x63ontact\x18\x11 \x01(\x0b\x32\x11.diode.v1.ContactH\x00R\x07\x63ontact\x12L\n\x12\x63ontact_assignment\x18\x12 \x01(\x0b\x32\x1b.diode.v1.ContactAssignmentH\x00R\x11\x63ontactAssignment\x12=\n\rcontact_group\x18\x13 \x01(\x0b\x32\x16.diode.v1.ContactGroupH\x00R\x0c\x63ontactGroup\x12:\n\x0c\x63ontact_role\x18\x14 \x01(\x0b\x32\x15.diode.v1.ContactRoleH\x00R\x0b\x63ontactRole\x12*\n\x06\x64\x65vice\x18\x15 \x01(\x0b\x32\x10.diode.v1.DeviceH\x00R\x06\x64\x65vice\x12\x34\n\ndevice_bay\x18\x16 \x01(\x0b\x32\x13.diode.v1.DeviceBayH\x00R\tdeviceBay\x12\x37\n\x0b\x64\x65vice_role\x18\x17 \x01(\x0b\x32\x14.diode.v1.DeviceRoleH\x00R\ndeviceRole\x12\x37\n\x0b\x64\x65vice_type\x18\x18 \x01(\x0b\x32\x14.diode.v1.DeviceTypeH\x00R\ndeviceType\x12\x34\n\nfhrp_group\x18\x19 \x01(\x0b\x32\x13.diode.v1.FHRPGroupH\x00R\tfhrpGroup\x12S\n\x15\x66hrp_group_assignment\x18\x1a \x01(\x0b\x32\x1d.diode.v1.FHRPGroupAssignmentH\x00R\x13\x66hrpGroupAssignment\x12\x34\n\nfront_port\x18\x1b \x01(\x0b\x32\x13.diode.v1.FrontPortH\x00R\tfrontPort\x12\x34\n\nike_policy\x18\x1c \x01(\x0b\x32\x13.diode.v1.IKEPolicyH\x00R\tikePolicy\x12:\n\x0cike_proposal\x18\x1d \x01(\x0b\x32\x15.diode.v1.IKEProposalH\x00R\x0bikeProposal\x12\x34\n\nip_address\x18\x1e \x01(\x0b\x32\x13.diode.v1.IPAddressH\x00R\tipAddress\x12.\n\x08ip_range\x18\x1f \x01(\x0b\x32\x11.diode.v1.IPRangeH\x00R\x07ipRange\x12;\n\rip_sec_policy\x18 \x01(\x0b\x32\x15.diode.v1.IPSecPolicyH\x00R\x0bipSecPolicy\x12>\n\x0eip_sec_profile\x18! \x01(\x0b\x32\x16.diode.v1.IPSecProfileH\x00R\x0cipSecProfile\x12\x41\n\x0fip_sec_proposal\x18\" \x01(\x0b\x32\x17.diode.v1.IPSecProposalH\x00R\ripSecProposal\x12\x33\n\tinterface\x18# \x01(\x0b\x32\x13.diode.v1.InterfaceH\x00R\tinterface\x12@\n\x0einventory_item\x18$ \x01(\x0b\x32\x17.diode.v1.InventoryItemH\x00R\rinventoryItem\x12M\n\x13inventory_item_role\x18% \x01(\x0b\x32\x1b.diode.v1.InventoryItemRoleH\x00R\x11inventoryItemRole\x12\'\n\x05l2vpn\x18& \x01(\x0b\x32\x0f.diode.v1.L2VPNH\x00R\x05l2vpn\x12I\n\x11l2vpn_termination\x18\' \x01(\x0b\x32\x1a.diode.v1.L2VPNTerminationH\x00R\x10l2vpnTermination\x12\x30\n\x08location\x18( \x01(\x0b\x32\x12.diode.v1.LocationH\x00R\x08location\x12\x37\n\x0bmac_address\x18) \x01(\x0b\x32\x14.diode.v1.MACAddressH\x00R\nmacAddress\x12<\n\x0cmanufacturer\x18* \x01(\x0b\x32\x16.diode.v1.ManufacturerH\x00R\x0cmanufacturer\x12*\n\x06module\x18+ \x01(\x0b\x32\x10.diode.v1.ModuleH\x00R\x06module\x12\x34\n\nmodule_bay\x18, \x01(\x0b\x32\x13.diode.v1.ModuleBayH\x00R\tmoduleBay\x12\x37\n\x0bmodule_type\x18- \x01(\x0b\x32\x14.diode.v1.ModuleTypeH\x00R\nmoduleType\x12\x30\n\x08platform\x18. \x01(\x0b\x32\x12.diode.v1.PlatformH\x00R\x08platform\x12\x34\n\npower_feed\x18/ \x01(\x0b\x32\x13.diode.v1.PowerFeedH\x00R\tpowerFeed\x12:\n\x0cpower_outlet\x18\x30 \x01(\x0b\x32\x15.diode.v1.PowerOutletH\x00R\x0bpowerOutlet\x12\x37\n\x0bpower_panel\x18\x31 \x01(\x0b\x32\x14.diode.v1.PowerPanelH\x00R\npowerPanel\x12\x34\n\npower_port\x18\x32 \x01(\x0b\x32\x13.diode.v1.PowerPortH\x00R\tpowerPort\x12*\n\x06prefix\x18\x33 \x01(\x0b\x32\x10.diode.v1.PrefixH\x00R\x06prefix\x12\x30\n\x08provider\x18\x34 \x01(\x0b\x32\x12.diode.v1.ProviderH\x00R\x08provider\x12\x46\n\x10provider_account\x18\x35 \x01(\x0b\x32\x19.diode.v1.ProviderAccountH\x00R\x0fproviderAccount\x12\x46\n\x10provider_network\x18\x36 \x01(\x0b\x32\x19.diode.v1.ProviderNetworkH\x00R\x0fproviderNetwork\x12!\n\x03rir\x18\x37 \x01(\x0b\x32\r.diode.v1.RIRH\x00R\x03rir\x12$\n\x04rack\x18\x38 \x01(\x0b\x32\x0e.diode.v1.RackH\x00R\x04rack\x12\x46\n\x10rack_reservation\x18\x39 \x01(\x0b\x32\x19.diode.v1.RackReservationH\x00R\x0frackReservation\x12\x31\n\track_role\x18: \x01(\x0b\x32\x12.diode.v1.RackRoleH\x00R\x08rackRole\x12\x31\n\track_type\x18; \x01(\x0b\x32\x12.diode.v1.RackTypeH\x00R\x08rackType\x12\x31\n\trear_port\x18< \x01(\x0b\x32\x12.diode.v1.RearPortH\x00R\x08rearPort\x12*\n\x06region\x18= \x01(\x0b\x32\x10.diode.v1.RegionH\x00R\x06region\x12$\n\x04role\x18> \x01(\x0b\x32\x0e.diode.v1.RoleH\x00R\x04role\x12:\n\x0croute_target\x18? \x01(\x0b\x32\x15.diode.v1.RouteTargetH\x00R\x0brouteTarget\x12-\n\x07service\x18@ \x01(\x0b\x32\x11.diode.v1.ServiceH\x00R\x07service\x12$\n\x04site\x18\x41 \x01(\x0b\x32\x0e.diode.v1.SiteH\x00R\x04site\x12\x34\n\nsite_group\x18\x42 \x01(\x0b\x32\x13.diode.v1.SiteGroupH\x00R\tsiteGroup\x12!\n\x03tag\x18\x43 \x01(\x0b\x32\r.diode.v1.TagH\x00R\x03tag\x12*\n\x06tenant\x18\x44 \x01(\x0b\x32\x10.diode.v1.TenantH\x00R\x06tenant\x12:\n\x0ctenant_group\x18\x45 \x01(\x0b\x32\x15.diode.v1.TenantGroupH\x00R\x0btenantGroup\x12*\n\x06tunnel\x18\x46 \x01(\x0b\x32\x10.diode.v1.TunnelH\x00R\x06tunnel\x12:\n\x0ctunnel_group\x18G \x01(\x0b\x32\x15.diode.v1.TunnelGroupH\x00R\x0btunnelGroup\x12L\n\x12tunnel_termination\x18H \x01(\x0b\x32\x1b.diode.v1.TunnelTerminationH\x00R\x11tunnelTermination\x12$\n\x04vlan\x18I \x01(\x0b\x32\x0e.diode.v1.VLANH\x00R\x04vlan\x12\x34\n\nvlan_group\x18J \x01(\x0b\x32\x13.diode.v1.VLANGroupH\x00R\tvlanGroup\x12Y\n\x17vlan_translation_policy\x18K \x01(\x0b\x32\x1f.diode.v1.VLANTranslationPolicyH\x00R\x15vlanTranslationPolicy\x12S\n\x15vlan_translation_rule\x18L \x01(\x0b\x32\x1d.diode.v1.VLANTranslationRuleH\x00R\x13vlanTranslationRule\x12:\n\x0cvm_interface\x18M \x01(\x0b\x32\x15.diode.v1.VMInterfaceH\x00R\x0bvmInterface\x12!\n\x03vrf\x18N \x01(\x0b\x32\r.diode.v1.VRFH\x00R\x03vrf\x12\x43\n\x0fvirtual_chassis\x18O \x01(\x0b\x32\x18.diode.v1.VirtualChassisH\x00R\x0evirtualChassis\x12\x43\n\x0fvirtual_circuit\x18P \x01(\x0b\x32\x18.diode.v1.VirtualCircuitH\x00R\x0evirtualCircuit\x12\x65\n\x1bvirtual_circuit_termination\x18Q \x01(\x0b\x32#.diode.v1.VirtualCircuitTerminationH\x00R\x19virtualCircuitTermination\x12P\n\x14virtual_circuit_type\x18R \x01(\x0b\x32\x1c.diode.v1.VirtualCircuitTypeH\x00R\x12virtualCircuitType\x12V\n\x16virtual_device_context\x18S \x01(\x0b\x32\x1e.diode.v1.VirtualDeviceContextH\x00R\x14virtualDeviceContext\x12:\n\x0cvirtual_disk\x18T \x01(\x0b\x32\x15.diode.v1.VirtualDiskH\x00R\x0bvirtualDisk\x12\x43\n\x0fvirtual_machine\x18U \x01(\x0b\x32\x18.diode.v1.VirtualMachineH\x00R\x0evirtualMachine\x12:\n\x0cwireless_lan\x18V \x01(\x0b\x32\x15.diode.v1.WirelessLANH\x00R\x0bwirelessLan\x12J\n\x12wireless_lan_group\x18W \x01(\x0b\x32\x1a.diode.v1.WirelessLANGroupH\x00R\x10wirelessLanGroup\x12=\n\rwireless_link\x18X \x01(\x0b\x32\x16.diode.v1.WirelessLinkH\x00R\x0cwirelessLinkB\x08\n\x06object\"\x9a\x04\n\x10\x43ustomFieldValue\x12-\n\x12multiple_selection\x18\x01 \x03(\tR\x11multipleSelection\x12O\n\x10multiple_objects\x18\x02 \x03(\x0b\x32$.diode.v1.CustomFieldObjectReferenceR\x0fmultipleObjects\x12\x14\n\x04text\x18\x03 \x01(\tH\x00R\x04text\x12\x1d\n\tlong_text\x18\x04 \x01(\tH\x00R\x08longText\x12\x1a\n\x07integer\x18\x05 \x01(\x03H\x00R\x07integer\x12\x1a\n\x07\x64\x65\x63imal\x18\x06 \x01(\x01H\x00R\x07\x64\x65\x63imal\x12\x1a\n\x07\x62oolean\x18\x07 \x01(\x08H\x00R\x07\x62oolean\x12\x30\n\x04\x64\x61te\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\x04\x64\x61te\x12\x38\n\x08\x64\x61tetime\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\x08\x64\x61tetime\x12\x12\n\x03url\x18\n \x01(\tH\x00R\x03url\x12\x14\n\x04json\x18\x0b \x01(\tH\x00R\x04json\x12\x1e\n\tselection\x18\x0c \x01(\tH\x00R\tselection\x12>\n\x06object\x18\r \x01(\x0b\x32$.diode.v1.CustomFieldObjectReferenceH\x00R\x06objectB\x07\n\x05value\"\xf1\r\n\x06\x44\x65vice\x12\x17\n\x04name\x18\x01 \x01(\tH\x00R\x04name\x88\x01\x01\x12\x35\n\x0b\x64\x65vice_type\x18\x02 \x01(\x0b\x32\x14.diode.v1.DeviceTypeR\ndeviceType\x12(\n\x04role\x18\x03 \x01(\x0b\x32\x14.diode.v1.DeviceRoleR\x04role\x12-\n\x06tenant\x18\x04 \x01(\x0b\x32\x10.diode.v1.TenantH\x01R\x06tenant\x88\x01\x01\x12\x33\n\x08platform\x18\x05 \x01(\x0b\x32\x12.diode.v1.PlatformH\x02R\x08platform\x88\x01\x01\x12\x1b\n\x06serial\x18\x06 \x01(\tH\x03R\x06serial\x88\x01\x01\x12 \n\tasset_tag\x18\x07 \x01(\tH\x04R\x08\x61ssetTag\x88\x01\x01\x12\"\n\x04site\x18\x08 \x01(\x0b\x32\x0e.diode.v1.SiteR\x04site\x12\x33\n\x08location\x18\t \x01(\x0b\x32\x12.diode.v1.LocationH\x05R\x08location\x88\x01\x01\x12\'\n\x04rack\x18\n \x01(\x0b\x32\x0e.diode.v1.RackH\x06R\x04rack\x88\x01\x01\x12\x1f\n\x08position\x18\x0b \x01(\x01H\x07R\x08position\x88\x01\x01\x12+\n\x04\x66\x61\x63\x65\x18\x0c \x01(\tB\x12\xfa\x42\x0fr\rR\x05\x66rontR\x04rearH\x08R\x04\x66\x61\x63\x65\x88\x01\x01\x12\x1f\n\x08latitude\x18\r \x01(\x01H\tR\x08latitude\x88\x01\x01\x12!\n\tlongitude\x18\x0e \x01(\x01H\nR\tlongitude\x88\x01\x01\x12h\n\x06status\x18\x0f \x01(\tBK\xfa\x42HrFR\x06\x61\x63tiveR\x0f\x64\x65\x63ommissioningR\x06\x66\x61iledR\tinventoryR\x07offlineR\x07plannedR\x06stagedH\x0bR\x06status\x88\x01\x01\x12\xad\x01\n\x07\x61irflow\x18\x10 \x01(\tB\x8d\x01\xfa\x42\x89\x01r\x86\x01R\rbottom-to-topR\rfront-to-rearR\rleft-to-rightR\x05mixedR\x07passiveR\rrear-to-frontR\x0crear-to-sideR\rright-to-leftR\x0cside-to-rearR\rtop-to-bottomH\x0cR\x07\x61irflow\x88\x01\x01\x12\x39\n\x0bprimary_ip4\x18\x11 \x01(\x0b\x32\x13.diode.v1.IPAddressH\rR\nprimaryIp4\x88\x01\x01\x12\x39\n\x0bprimary_ip6\x18\x12 \x01(\x0b\x32\x13.diode.v1.IPAddressH\x0eR\nprimaryIp6\x88\x01\x01\x12/\n\x06oob_ip\x18\x13 \x01(\x0b\x32\x13.diode.v1.IPAddressH\x0fR\x05oobIp\x88\x01\x01\x12\x30\n\x07\x63luster\x18\x14 \x01(\x0b\x32\x11.diode.v1.ClusterH\x10R\x07\x63luster\x88\x01\x01\x12\x46\n\x0fvirtual_chassis\x18\x15 \x01(\x0b\x32\x18.diode.v1.VirtualChassisH\x11R\x0evirtualChassis\x88\x01\x01\x12$\n\x0bvc_position\x18\x16 \x01(\x03H\x12R\nvcPosition\x88\x01\x01\x12$\n\x0bvc_priority\x18\x17 \x01(\x03H\x13R\nvcPriority\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x18 \x01(\tH\x14R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x19 \x01(\tH\x15R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x1a \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12G\n\rcustom_fields\x18\x1b \x03(\x0b\x32\".diode.v1.Device.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x07\n\x05_nameB\t\n\x07_tenantB\x0b\n\t_platformB\t\n\x07_serialB\x0c\n\n_asset_tagB\x0b\n\t_locationB\x07\n\x05_rackB\x0b\n\t_positionB\x07\n\x05_faceB\x0b\n\t_latitudeB\x0c\n\n_longitudeB\t\n\x07_statusB\n\n\x08_airflowB\x0e\n\x0c_primary_ip4B\x0e\n\x0c_primary_ip6B\t\n\x07_oob_ipB\n\n\x08_clusterB\x12\n\x10_virtual_chassisB\x0e\n\x0c_vc_positionB\x0e\n\x0c_vc_priorityB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xc8\x03\n\tDeviceBay\x12(\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32\x10.diode.v1.DeviceR\x06\x64\x65vice\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x19\n\x05label\x18\x03 \x01(\tH\x00R\x05label\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x01R\x0b\x64\x65scription\x88\x01\x01\x12@\n\x10installed_device\x18\x05 \x01(\x0b\x32\x10.diode.v1.DeviceH\x02R\x0finstalledDevice\x88\x01\x01\x12!\n\x04tags\x18\x06 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12J\n\rcustom_fields\x18\x07 \x03(\x0b\x32%.diode.v1.DeviceBay.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x13\n\x11_installed_device\"\x87\x03\n\nDeviceRole\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n\x04slug\x18\x02 \x01(\tR\x04slug\x12\x19\n\x05\x63olor\x18\x03 \x01(\tH\x00R\x05\x63olor\x88\x01\x01\x12\x1c\n\x07vm_role\x18\x04 \x01(\x08H\x01R\x06vmRole\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x02R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x06 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12K\n\rcustom_fields\x18\x07 \x03(\x0b\x32&.diode.v1.DeviceRole.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x08\n\x06_colorB\n\n\x08_vm_roleB\x0e\n\x0c_description\"\xfc\x08\n\nDeviceType\x12:\n\x0cmanufacturer\x18\x01 \x01(\x0b\x32\x16.diode.v1.ManufacturerR\x0cmanufacturer\x12\x42\n\x10\x64\x65\x66\x61ult_platform\x18\x02 \x01(\x0b\x32\x12.diode.v1.PlatformH\x00R\x0f\x64\x65\x66\x61ultPlatform\x88\x01\x01\x12\x14\n\x05model\x18\x03 \x01(\tR\x05model\x12\x12\n\x04slug\x18\x04 \x01(\tR\x04slug\x12$\n\x0bpart_number\x18\x05 \x01(\tH\x01R\npartNumber\x88\x01\x01\x12\x1e\n\x08u_height\x18\x06 \x01(\x01H\x02R\x07uHeight\x88\x01\x01\x12=\n\x18\x65xclude_from_utilization\x18\x07 \x01(\x08H\x03R\x16\x65xcludeFromUtilization\x88\x01\x01\x12\'\n\ris_full_depth\x18\x08 \x01(\x08H\x04R\x0bisFullDepth\x88\x01\x01\x12@\n\x0esubdevice_role\x18\t \x01(\tB\x14\xfa\x42\x11r\x0fR\x05\x63hildR\x06parentH\x05R\rsubdeviceRole\x88\x01\x01\x12\xad\x01\n\x07\x61irflow\x18\n \x01(\tB\x8d\x01\xfa\x42\x89\x01r\x86\x01R\rbottom-to-topR\rfront-to-rearR\rleft-to-rightR\x05mixedR\x07passiveR\rrear-to-frontR\x0crear-to-sideR\rright-to-leftR\x0cside-to-rearR\rtop-to-bottomH\x06R\x07\x61irflow\x88\x01\x01\x12\x1b\n\x06weight\x18\x0b \x01(\x01H\x07R\x06weight\x88\x01\x01\x12:\n\x0bweight_unit\x18\x0c \x01(\tB\x14\xfa\x42\x11r\x0fR\x01gR\x02kgR\x02lbR\x02ozH\x08R\nweightUnit\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\r \x01(\tH\tR\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x0e \x01(\tH\nR\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x0f \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12K\n\rcustom_fields\x18\x10 \x03(\x0b\x32&.diode.v1.DeviceType.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x13\n\x11_default_platformB\x0e\n\x0c_part_numberB\x0b\n\t_u_heightB\x1b\n\x19_exclude_from_utilizationB\x10\n\x0e_is_full_depthB\x11\n\x0f_subdevice_roleB\n\n\x08_airflowB\t\n\x07_weightB\x0e\n\x0c_weight_unitB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xc2\x04\n\tFHRPGroup\x12\x17\n\x04name\x18\x01 \x01(\tH\x00R\x04name\x88\x01\x01\x12S\n\x08protocol\x18\x02 \x01(\tB7\xfa\x42\x34r2R\x04\x63\x61rpR\tclusterxlR\x04glbpR\x04hsrpR\x05otherR\x05vrrp2R\x05vrrp3R\x08protocol\x12\x19\n\x08group_id\x18\x03 \x01(\x03R\x07groupId\x12\x37\n\tauth_type\x18\x04 \x01(\tB\x15\xfa\x42\x12r\x10R\x03md5R\tplaintextH\x01R\x08\x61uthType\x88\x01\x01\x12\x1e\n\x08\x61uth_key\x18\x05 \x01(\tH\x02R\x07\x61uthKey\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x06 \x01(\tH\x03R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x07 \x01(\tH\x04R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x08 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12J\n\rcustom_fields\x18\t \x03(\x0b\x32%.diode.v1.FHRPGroup.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x07\n\x05_nameB\x0c\n\n_auth_typeB\x0b\n\t_auth_keyB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xaa\x36\n\x13\x46HRPGroupAssignment\x12)\n\x05group\x18\x01 \x01(\x0b\x32\x13.diode.v1.FHRPGroupR\x05group\x12\x34\n\rinterface_asn\x18\x02 \x01(\x0b\x32\r.diode.v1.ASNH\x00R\x0cinterfaceAsn\x12\x44\n\x13interface_asn_range\x18\x03 \x01(\x0b\x32\x12.diode.v1.ASNRangeH\x00R\x11interfaceAsnRange\x12\x46\n\x13interface_aggregate\x18\x04 \x01(\x0b\x32\x13.diode.v1.AggregateH\x00R\x12interfaceAggregate\x12:\n\x0finterface_cable\x18\x05 \x01(\x0b\x32\x0f.diode.v1.CableH\x00R\x0einterfaceCable\x12G\n\x14interface_cable_path\x18\x06 \x01(\x0b\x32\x13.diode.v1.CablePathH\x00R\x12interfaceCablePath\x12\\\n\x1binterface_cable_termination\x18\x07 \x01(\x0b\x32\x1a.diode.v1.CableTerminationH\x00R\x19interfaceCableTermination\x12@\n\x11interface_circuit\x18\x08 \x01(\x0b\x32\x11.diode.v1.CircuitH\x00R\x10interfaceCircuit\x12P\n\x17interface_circuit_group\x18\t \x01(\x0b\x32\x16.diode.v1.CircuitGroupH\x00R\x15interfaceCircuitGroup\x12o\n\"interface_circuit_group_assignment\x18\n \x01(\x0b\x32 .diode.v1.CircuitGroupAssignmentH\x00R\x1finterfaceCircuitGroupAssignment\x12\x62\n\x1dinterface_circuit_termination\x18\x0b \x01(\x0b\x32\x1c.diode.v1.CircuitTerminationH\x00R\x1binterfaceCircuitTermination\x12M\n\x16interface_circuit_type\x18\x0c \x01(\x0b\x32\x15.diode.v1.CircuitTypeH\x00R\x14interfaceCircuitType\x12@\n\x11interface_cluster\x18\r \x01(\x0b\x32\x11.diode.v1.ClusterH\x00R\x10interfaceCluster\x12P\n\x17interface_cluster_group\x18\x0e \x01(\x0b\x32\x16.diode.v1.ClusterGroupH\x00R\x15interfaceClusterGroup\x12M\n\x16interface_cluster_type\x18\x0f \x01(\x0b\x32\x15.diode.v1.ClusterTypeH\x00R\x14interfaceClusterType\x12M\n\x16interface_console_port\x18\x10 \x01(\x0b\x32\x15.diode.v1.ConsolePortH\x00R\x14interfaceConsolePort\x12`\n\x1dinterface_console_server_port\x18\x11 \x01(\x0b\x32\x1b.diode.v1.ConsoleServerPortH\x00R\x1ainterfaceConsoleServerPort\x12@\n\x11interface_contact\x18\x12 \x01(\x0b\x32\x11.diode.v1.ContactH\x00R\x10interfaceContact\x12_\n\x1cinterface_contact_assignment\x18\x13 \x01(\x0b\x32\x1b.diode.v1.ContactAssignmentH\x00R\x1ainterfaceContactAssignment\x12P\n\x17interface_contact_group\x18\x14 \x01(\x0b\x32\x16.diode.v1.ContactGroupH\x00R\x15interfaceContactGroup\x12M\n\x16interface_contact_role\x18\x15 \x01(\x0b\x32\x15.diode.v1.ContactRoleH\x00R\x14interfaceContactRole\x12=\n\x10interface_device\x18\x16 \x01(\x0b\x32\x10.diode.v1.DeviceH\x00R\x0finterfaceDevice\x12G\n\x14interface_device_bay\x18\x17 \x01(\x0b\x32\x13.diode.v1.DeviceBayH\x00R\x12interfaceDeviceBay\x12J\n\x15interface_device_role\x18\x18 \x01(\x0b\x32\x14.diode.v1.DeviceRoleH\x00R\x13interfaceDeviceRole\x12J\n\x15interface_device_type\x18\x19 \x01(\x0b\x32\x14.diode.v1.DeviceTypeH\x00R\x13interfaceDeviceType\x12G\n\x14interface_fhrp_group\x18\x1a \x01(\x0b\x32\x13.diode.v1.FHRPGroupH\x00R\x12interfaceFhrpGroup\x12\x66\n\x1finterface_fhrp_group_assignment\x18\x1b \x01(\x0b\x32\x1d.diode.v1.FHRPGroupAssignmentH\x00R\x1cinterfaceFhrpGroupAssignment\x12G\n\x14interface_front_port\x18\x1c \x01(\x0b\x32\x13.diode.v1.FrontPortH\x00R\x12interfaceFrontPort\x12G\n\x14interface_ike_policy\x18\x1d \x01(\x0b\x32\x13.diode.v1.IKEPolicyH\x00R\x12interfaceIkePolicy\x12M\n\x16interface_ike_proposal\x18\x1e \x01(\x0b\x32\x15.diode.v1.IKEProposalH\x00R\x14interfaceIkeProposal\x12G\n\x14interface_ip_address\x18\x1f \x01(\x0b\x32\x13.diode.v1.IPAddressH\x00R\x12interfaceIpAddress\x12\x41\n\x12interface_ip_range\x18 \x01(\x0b\x32\x11.diode.v1.IPRangeH\x00R\x10interfaceIpRange\x12N\n\x17interface_ip_sec_policy\x18! \x01(\x0b\x32\x15.diode.v1.IPSecPolicyH\x00R\x14interfaceIpSecPolicy\x12Q\n\x18interface_ip_sec_profile\x18\" \x01(\x0b\x32\x16.diode.v1.IPSecProfileH\x00R\x15interfaceIpSecProfile\x12T\n\x19interface_ip_sec_proposal\x18# \x01(\x0b\x32\x17.diode.v1.IPSecProposalH\x00R\x16interfaceIpSecProposal\x12\x46\n\x13interface_interface\x18$ \x01(\x0b\x32\x13.diode.v1.InterfaceH\x00R\x12interfaceInterface\x12S\n\x18interface_inventory_item\x18% \x01(\x0b\x32\x17.diode.v1.InventoryItemH\x00R\x16interfaceInventoryItem\x12`\n\x1dinterface_inventory_item_role\x18& \x01(\x0b\x32\x1b.diode.v1.InventoryItemRoleH\x00R\x1ainterfaceInventoryItemRole\x12:\n\x0finterface_l2vpn\x18\' \x01(\x0b\x32\x0f.diode.v1.L2VPNH\x00R\x0einterfaceL2vpn\x12\\\n\x1binterface_l2vpn_termination\x18( \x01(\x0b\x32\x1a.diode.v1.L2VPNTerminationH\x00R\x19interfaceL2vpnTermination\x12\x43\n\x12interface_location\x18) \x01(\x0b\x32\x12.diode.v1.LocationH\x00R\x11interfaceLocation\x12J\n\x15interface_mac_address\x18* \x01(\x0b\x32\x14.diode.v1.MACAddressH\x00R\x13interfaceMacAddress\x12O\n\x16interface_manufacturer\x18+ \x01(\x0b\x32\x16.diode.v1.ManufacturerH\x00R\x15interfaceManufacturer\x12=\n\x10interface_module\x18, \x01(\x0b\x32\x10.diode.v1.ModuleH\x00R\x0finterfaceModule\x12G\n\x14interface_module_bay\x18- \x01(\x0b\x32\x13.diode.v1.ModuleBayH\x00R\x12interfaceModuleBay\x12J\n\x15interface_module_type\x18. \x01(\x0b\x32\x14.diode.v1.ModuleTypeH\x00R\x13interfaceModuleType\x12\x43\n\x12interface_platform\x18/ \x01(\x0b\x32\x12.diode.v1.PlatformH\x00R\x11interfacePlatform\x12G\n\x14interface_power_feed\x18\x30 \x01(\x0b\x32\x13.diode.v1.PowerFeedH\x00R\x12interfacePowerFeed\x12M\n\x16interface_power_outlet\x18\x31 \x01(\x0b\x32\x15.diode.v1.PowerOutletH\x00R\x14interfacePowerOutlet\x12J\n\x15interface_power_panel\x18\x32 \x01(\x0b\x32\x14.diode.v1.PowerPanelH\x00R\x13interfacePowerPanel\x12G\n\x14interface_power_port\x18\x33 \x01(\x0b\x32\x13.diode.v1.PowerPortH\x00R\x12interfacePowerPort\x12=\n\x10interface_prefix\x18\x34 \x01(\x0b\x32\x10.diode.v1.PrefixH\x00R\x0finterfacePrefix\x12\x43\n\x12interface_provider\x18\x35 \x01(\x0b\x32\x12.diode.v1.ProviderH\x00R\x11interfaceProvider\x12Y\n\x1ainterface_provider_account\x18\x36 \x01(\x0b\x32\x19.diode.v1.ProviderAccountH\x00R\x18interfaceProviderAccount\x12Y\n\x1ainterface_provider_network\x18\x37 \x01(\x0b\x32\x19.diode.v1.ProviderNetworkH\x00R\x18interfaceProviderNetwork\x12\x34\n\rinterface_rir\x18\x38 \x01(\x0b\x32\r.diode.v1.RIRH\x00R\x0cinterfaceRir\x12\x37\n\x0einterface_rack\x18\x39 \x01(\x0b\x32\x0e.diode.v1.RackH\x00R\rinterfaceRack\x12Y\n\x1ainterface_rack_reservation\x18: \x01(\x0b\x32\x19.diode.v1.RackReservationH\x00R\x18interfaceRackReservation\x12\x44\n\x13interface_rack_role\x18; \x01(\x0b\x32\x12.diode.v1.RackRoleH\x00R\x11interfaceRackRole\x12\x44\n\x13interface_rack_type\x18< \x01(\x0b\x32\x12.diode.v1.RackTypeH\x00R\x11interfaceRackType\x12\x44\n\x13interface_rear_port\x18= \x01(\x0b\x32\x12.diode.v1.RearPortH\x00R\x11interfaceRearPort\x12=\n\x10interface_region\x18> \x01(\x0b\x32\x10.diode.v1.RegionH\x00R\x0finterfaceRegion\x12\x37\n\x0einterface_role\x18? \x01(\x0b\x32\x0e.diode.v1.RoleH\x00R\rinterfaceRole\x12M\n\x16interface_route_target\x18@ \x01(\x0b\x32\x15.diode.v1.RouteTargetH\x00R\x14interfaceRouteTarget\x12@\n\x11interface_service\x18\x41 \x01(\x0b\x32\x11.diode.v1.ServiceH\x00R\x10interfaceService\x12\x37\n\x0einterface_site\x18\x42 \x01(\x0b\x32\x0e.diode.v1.SiteH\x00R\rinterfaceSite\x12G\n\x14interface_site_group\x18\x43 \x01(\x0b\x32\x13.diode.v1.SiteGroupH\x00R\x12interfaceSiteGroup\x12\x34\n\rinterface_tag\x18\x44 \x01(\x0b\x32\r.diode.v1.TagH\x00R\x0cinterfaceTag\x12=\n\x10interface_tenant\x18\x45 \x01(\x0b\x32\x10.diode.v1.TenantH\x00R\x0finterfaceTenant\x12M\n\x16interface_tenant_group\x18\x46 \x01(\x0b\x32\x15.diode.v1.TenantGroupH\x00R\x14interfaceTenantGroup\x12=\n\x10interface_tunnel\x18G \x01(\x0b\x32\x10.diode.v1.TunnelH\x00R\x0finterfaceTunnel\x12M\n\x16interface_tunnel_group\x18H \x01(\x0b\x32\x15.diode.v1.TunnelGroupH\x00R\x14interfaceTunnelGroup\x12_\n\x1cinterface_tunnel_termination\x18I \x01(\x0b\x32\x1b.diode.v1.TunnelTerminationH\x00R\x1ainterfaceTunnelTermination\x12\x37\n\x0einterface_vlan\x18J \x01(\x0b\x32\x0e.diode.v1.VLANH\x00R\rinterfaceVlan\x12G\n\x14interface_vlan_group\x18K \x01(\x0b\x32\x13.diode.v1.VLANGroupH\x00R\x12interfaceVlanGroup\x12l\n!interface_vlan_translation_policy\x18L \x01(\x0b\x32\x1f.diode.v1.VLANTranslationPolicyH\x00R\x1einterfaceVlanTranslationPolicy\x12\x66\n\x1finterface_vlan_translation_rule\x18M \x01(\x0b\x32\x1d.diode.v1.VLANTranslationRuleH\x00R\x1cinterfaceVlanTranslationRule\x12M\n\x16interface_vm_interface\x18N \x01(\x0b\x32\x15.diode.v1.VMInterfaceH\x00R\x14interfaceVmInterface\x12\x34\n\rinterface_vrf\x18O \x01(\x0b\x32\r.diode.v1.VRFH\x00R\x0cinterfaceVrf\x12V\n\x19interface_virtual_chassis\x18P \x01(\x0b\x32\x18.diode.v1.VirtualChassisH\x00R\x17interfaceVirtualChassis\x12V\n\x19interface_virtual_circuit\x18Q \x01(\x0b\x32\x18.diode.v1.VirtualCircuitH\x00R\x17interfaceVirtualCircuit\x12x\n%interface_virtual_circuit_termination\x18R \x01(\x0b\x32#.diode.v1.VirtualCircuitTerminationH\x00R\"interfaceVirtualCircuitTermination\x12\x63\n\x1einterface_virtual_circuit_type\x18S \x01(\x0b\x32\x1c.diode.v1.VirtualCircuitTypeH\x00R\x1binterfaceVirtualCircuitType\x12i\n interface_virtual_device_context\x18T \x01(\x0b\x32\x1e.diode.v1.VirtualDeviceContextH\x00R\x1dinterfaceVirtualDeviceContext\x12M\n\x16interface_virtual_disk\x18U \x01(\x0b\x32\x15.diode.v1.VirtualDiskH\x00R\x14interfaceVirtualDisk\x12V\n\x19interface_virtual_machine\x18V \x01(\x0b\x32\x18.diode.v1.VirtualMachineH\x00R\x17interfaceVirtualMachine\x12M\n\x16interface_wireless_lan\x18W \x01(\x0b\x32\x15.diode.v1.WirelessLANH\x00R\x14interfaceWirelessLan\x12]\n\x1cinterface_wireless_lan_group\x18X \x01(\x0b\x32\x1a.diode.v1.WirelessLANGroupH\x00R\x19interfaceWirelessLanGroup\x12P\n\x17interface_wireless_link\x18Y \x01(\x0b\x32\x16.diode.v1.WirelessLinkH\x00R\x15interfaceWirelessLink\x12\x1a\n\x08priority\x18Z \x01(\x03R\x08priorityB\x0b\n\tinterface\"\xba\x08\n\tFrontPort\x12(\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32\x10.diode.v1.DeviceR\x06\x64\x65vice\x12-\n\x06module\x18\x02 \x01(\x0b\x32\x10.diode.v1.ModuleH\x00R\x06module\x88\x01\x01\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x19\n\x05label\x18\x04 \x01(\tH\x01R\x05label\x88\x01\x01\x12\xad\x03\n\x04type\x18\x05 \x01(\tB\x98\x03\xfa\x42\x94\x03r\x91\x03R\t110-punchR\x04\x34p2cR\x04\x34p4cR\x04\x36p2cR\x04\x36p4cR\x04\x36p6cR\x04\x38p2cR\x04\x38p4cR\x04\x38p6cR\x04\x38p8cR\x03\x62ncR\x02\x63sR\x01\x66R\x02\x66\x63R\x04gg45R\x02lcR\x06lc-apcR\x05lc-pcR\x06lc-upcR\x03lshR\x07lsh-apcR\x06lsh-pcR\x07lsh-upcR\x03lx5R\x07lx5-apcR\x06lx5-pcR\x07lx5-upcR\x03mpoR\x05mrj21R\x04mtrjR\x01nR\x05otherR\x02scR\x06sc-apcR\x05sc-pcR\x06sc-upcR\x07sma-905R\x07sma-906R\x02snR\x06spliceR\x02stR\x07tera-1pR\x07tera-2pR\x07tera-4pR\x06urm-p2R\x06urm-p4R\x06urm-p8R\x05usb-aR\x05usb-bR\x05usb-cR\x0busb-micro-aR\x0cusb-micro-abR\x0busb-micro-bR\nusb-mini-aR\nusb-mini-bR\x04type\x12\x19\n\x05\x63olor\x18\x06 \x01(\tH\x02R\x05\x63olor\x88\x01\x01\x12/\n\trear_port\x18\x07 \x01(\x0b\x32\x12.diode.v1.RearPortR\x08rearPort\x12\x31\n\x12rear_port_position\x18\x08 \x01(\x03H\x03R\x10rearPortPosition\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\t \x01(\tH\x04R\x0b\x64\x65scription\x88\x01\x01\x12*\n\x0emark_connected\x18\n \x01(\x08H\x05R\rmarkConnected\x88\x01\x01\x12!\n\x04tags\x18\x0b \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12J\n\rcustom_fields\x18\x0c \x03(\x0b\x32%.diode.v1.FrontPort.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\t\n\x07_moduleB\x08\n\x06_labelB\x08\n\x06_colorB\x15\n\x13_rear_port_positionB\x0e\n\x0c_descriptionB\x11\n\x0f_mark_connected\"\xca\x31\n\rGenericObject\x12.\n\nobject_asn\x18\x01 \x01(\x0b\x32\r.diode.v1.ASNH\x00R\tobjectAsn\x12>\n\x10object_asn_range\x18\x02 \x01(\x0b\x32\x12.diode.v1.ASNRangeH\x00R\x0eobjectAsnRange\x12@\n\x10object_aggregate\x18\x03 \x01(\x0b\x32\x13.diode.v1.AggregateH\x00R\x0fobjectAggregate\x12\x34\n\x0cobject_cable\x18\x04 \x01(\x0b\x32\x0f.diode.v1.CableH\x00R\x0bobjectCable\x12\x41\n\x11object_cable_path\x18\x05 \x01(\x0b\x32\x13.diode.v1.CablePathH\x00R\x0fobjectCablePath\x12V\n\x18object_cable_termination\x18\x06 \x01(\x0b\x32\x1a.diode.v1.CableTerminationH\x00R\x16objectCableTermination\x12:\n\x0eobject_circuit\x18\x07 \x01(\x0b\x32\x11.diode.v1.CircuitH\x00R\robjectCircuit\x12J\n\x14object_circuit_group\x18\x08 \x01(\x0b\x32\x16.diode.v1.CircuitGroupH\x00R\x12objectCircuitGroup\x12i\n\x1fobject_circuit_group_assignment\x18\t \x01(\x0b\x32 .diode.v1.CircuitGroupAssignmentH\x00R\x1cobjectCircuitGroupAssignment\x12\\\n\x1aobject_circuit_termination\x18\n \x01(\x0b\x32\x1c.diode.v1.CircuitTerminationH\x00R\x18objectCircuitTermination\x12G\n\x13object_circuit_type\x18\x0b \x01(\x0b\x32\x15.diode.v1.CircuitTypeH\x00R\x11objectCircuitType\x12:\n\x0eobject_cluster\x18\x0c \x01(\x0b\x32\x11.diode.v1.ClusterH\x00R\robjectCluster\x12J\n\x14object_cluster_group\x18\r \x01(\x0b\x32\x16.diode.v1.ClusterGroupH\x00R\x12objectClusterGroup\x12G\n\x13object_cluster_type\x18\x0e \x01(\x0b\x32\x15.diode.v1.ClusterTypeH\x00R\x11objectClusterType\x12G\n\x13object_console_port\x18\x0f \x01(\x0b\x32\x15.diode.v1.ConsolePortH\x00R\x11objectConsolePort\x12Z\n\x1aobject_console_server_port\x18\x10 \x01(\x0b\x32\x1b.diode.v1.ConsoleServerPortH\x00R\x17objectConsoleServerPort\x12:\n\x0eobject_contact\x18\x11 \x01(\x0b\x32\x11.diode.v1.ContactH\x00R\robjectContact\x12Y\n\x19object_contact_assignment\x18\x12 \x01(\x0b\x32\x1b.diode.v1.ContactAssignmentH\x00R\x17objectContactAssignment\x12J\n\x14object_contact_group\x18\x13 \x01(\x0b\x32\x16.diode.v1.ContactGroupH\x00R\x12objectContactGroup\x12G\n\x13object_contact_role\x18\x14 \x01(\x0b\x32\x15.diode.v1.ContactRoleH\x00R\x11objectContactRole\x12\x37\n\robject_device\x18\x15 \x01(\x0b\x32\x10.diode.v1.DeviceH\x00R\x0cobjectDevice\x12\x41\n\x11object_device_bay\x18\x16 \x01(\x0b\x32\x13.diode.v1.DeviceBayH\x00R\x0fobjectDeviceBay\x12\x44\n\x12object_device_role\x18\x17 \x01(\x0b\x32\x14.diode.v1.DeviceRoleH\x00R\x10objectDeviceRole\x12\x44\n\x12object_device_type\x18\x18 \x01(\x0b\x32\x14.diode.v1.DeviceTypeH\x00R\x10objectDeviceType\x12\x41\n\x11object_fhrp_group\x18\x19 \x01(\x0b\x32\x13.diode.v1.FHRPGroupH\x00R\x0fobjectFhrpGroup\x12`\n\x1cobject_fhrp_group_assignment\x18\x1a \x01(\x0b\x32\x1d.diode.v1.FHRPGroupAssignmentH\x00R\x19objectFhrpGroupAssignment\x12\x41\n\x11object_front_port\x18\x1b \x01(\x0b\x32\x13.diode.v1.FrontPortH\x00R\x0fobjectFrontPort\x12\x41\n\x11object_ike_policy\x18\x1c \x01(\x0b\x32\x13.diode.v1.IKEPolicyH\x00R\x0fobjectIkePolicy\x12G\n\x13object_ike_proposal\x18\x1d \x01(\x0b\x32\x15.diode.v1.IKEProposalH\x00R\x11objectIkeProposal\x12\x41\n\x11object_ip_address\x18\x1e \x01(\x0b\x32\x13.diode.v1.IPAddressH\x00R\x0fobjectIpAddress\x12;\n\x0fobject_ip_range\x18\x1f \x01(\x0b\x32\x11.diode.v1.IPRangeH\x00R\robjectIpRange\x12H\n\x14object_ip_sec_policy\x18 \x01(\x0b\x32\x15.diode.v1.IPSecPolicyH\x00R\x11objectIpSecPolicy\x12K\n\x15object_ip_sec_profile\x18! \x01(\x0b\x32\x16.diode.v1.IPSecProfileH\x00R\x12objectIpSecProfile\x12N\n\x16object_ip_sec_proposal\x18\" \x01(\x0b\x32\x17.diode.v1.IPSecProposalH\x00R\x13objectIpSecProposal\x12@\n\x10object_interface\x18# \x01(\x0b\x32\x13.diode.v1.InterfaceH\x00R\x0fobjectInterface\x12M\n\x15object_inventory_item\x18$ \x01(\x0b\x32\x17.diode.v1.InventoryItemH\x00R\x13objectInventoryItem\x12Z\n\x1aobject_inventory_item_role\x18% \x01(\x0b\x32\x1b.diode.v1.InventoryItemRoleH\x00R\x17objectInventoryItemRole\x12\x34\n\x0cobject_l2vpn\x18& \x01(\x0b\x32\x0f.diode.v1.L2VPNH\x00R\x0bobjectL2vpn\x12V\n\x18object_l2vpn_termination\x18\' \x01(\x0b\x32\x1a.diode.v1.L2VPNTerminationH\x00R\x16objectL2vpnTermination\x12=\n\x0fobject_location\x18( \x01(\x0b\x32\x12.diode.v1.LocationH\x00R\x0eobjectLocation\x12\x44\n\x12object_mac_address\x18) \x01(\x0b\x32\x14.diode.v1.MACAddressH\x00R\x10objectMacAddress\x12I\n\x13object_manufacturer\x18* \x01(\x0b\x32\x16.diode.v1.ManufacturerH\x00R\x12objectManufacturer\x12\x37\n\robject_module\x18+ \x01(\x0b\x32\x10.diode.v1.ModuleH\x00R\x0cobjectModule\x12\x41\n\x11object_module_bay\x18, \x01(\x0b\x32\x13.diode.v1.ModuleBayH\x00R\x0fobjectModuleBay\x12\x44\n\x12object_module_type\x18- \x01(\x0b\x32\x14.diode.v1.ModuleTypeH\x00R\x10objectModuleType\x12=\n\x0fobject_platform\x18. \x01(\x0b\x32\x12.diode.v1.PlatformH\x00R\x0eobjectPlatform\x12\x41\n\x11object_power_feed\x18/ \x01(\x0b\x32\x13.diode.v1.PowerFeedH\x00R\x0fobjectPowerFeed\x12G\n\x13object_power_outlet\x18\x30 \x01(\x0b\x32\x15.diode.v1.PowerOutletH\x00R\x11objectPowerOutlet\x12\x44\n\x12object_power_panel\x18\x31 \x01(\x0b\x32\x14.diode.v1.PowerPanelH\x00R\x10objectPowerPanel\x12\x41\n\x11object_power_port\x18\x32 \x01(\x0b\x32\x13.diode.v1.PowerPortH\x00R\x0fobjectPowerPort\x12\x37\n\robject_prefix\x18\x33 \x01(\x0b\x32\x10.diode.v1.PrefixH\x00R\x0cobjectPrefix\x12=\n\x0fobject_provider\x18\x34 \x01(\x0b\x32\x12.diode.v1.ProviderH\x00R\x0eobjectProvider\x12S\n\x17object_provider_account\x18\x35 \x01(\x0b\x32\x19.diode.v1.ProviderAccountH\x00R\x15objectProviderAccount\x12S\n\x17object_provider_network\x18\x36 \x01(\x0b\x32\x19.diode.v1.ProviderNetworkH\x00R\x15objectProviderNetwork\x12.\n\nobject_rir\x18\x37 \x01(\x0b\x32\r.diode.v1.RIRH\x00R\tobjectRir\x12\x31\n\x0bobject_rack\x18\x38 \x01(\x0b\x32\x0e.diode.v1.RackH\x00R\nobjectRack\x12S\n\x17object_rack_reservation\x18\x39 \x01(\x0b\x32\x19.diode.v1.RackReservationH\x00R\x15objectRackReservation\x12>\n\x10object_rack_role\x18: \x01(\x0b\x32\x12.diode.v1.RackRoleH\x00R\x0eobjectRackRole\x12>\n\x10object_rack_type\x18; \x01(\x0b\x32\x12.diode.v1.RackTypeH\x00R\x0eobjectRackType\x12>\n\x10object_rear_port\x18< \x01(\x0b\x32\x12.diode.v1.RearPortH\x00R\x0eobjectRearPort\x12\x37\n\robject_region\x18= \x01(\x0b\x32\x10.diode.v1.RegionH\x00R\x0cobjectRegion\x12\x31\n\x0bobject_role\x18> \x01(\x0b\x32\x0e.diode.v1.RoleH\x00R\nobjectRole\x12G\n\x13object_route_target\x18? \x01(\x0b\x32\x15.diode.v1.RouteTargetH\x00R\x11objectRouteTarget\x12:\n\x0eobject_service\x18@ \x01(\x0b\x32\x11.diode.v1.ServiceH\x00R\robjectService\x12\x31\n\x0bobject_site\x18\x41 \x01(\x0b\x32\x0e.diode.v1.SiteH\x00R\nobjectSite\x12\x41\n\x11object_site_group\x18\x42 \x01(\x0b\x32\x13.diode.v1.SiteGroupH\x00R\x0fobjectSiteGroup\x12.\n\nobject_tag\x18\x43 \x01(\x0b\x32\r.diode.v1.TagH\x00R\tobjectTag\x12\x37\n\robject_tenant\x18\x44 \x01(\x0b\x32\x10.diode.v1.TenantH\x00R\x0cobjectTenant\x12G\n\x13object_tenant_group\x18\x45 \x01(\x0b\x32\x15.diode.v1.TenantGroupH\x00R\x11objectTenantGroup\x12\x37\n\robject_tunnel\x18\x46 \x01(\x0b\x32\x10.diode.v1.TunnelH\x00R\x0cobjectTunnel\x12G\n\x13object_tunnel_group\x18G \x01(\x0b\x32\x15.diode.v1.TunnelGroupH\x00R\x11objectTunnelGroup\x12Y\n\x19object_tunnel_termination\x18H \x01(\x0b\x32\x1b.diode.v1.TunnelTerminationH\x00R\x17objectTunnelTermination\x12\x31\n\x0bobject_vlan\x18I \x01(\x0b\x32\x0e.diode.v1.VLANH\x00R\nobjectVlan\x12\x41\n\x11object_vlan_group\x18J \x01(\x0b\x32\x13.diode.v1.VLANGroupH\x00R\x0fobjectVlanGroup\x12\x66\n\x1eobject_vlan_translation_policy\x18K \x01(\x0b\x32\x1f.diode.v1.VLANTranslationPolicyH\x00R\x1bobjectVlanTranslationPolicy\x12`\n\x1cobject_vlan_translation_rule\x18L \x01(\x0b\x32\x1d.diode.v1.VLANTranslationRuleH\x00R\x19objectVlanTranslationRule\x12G\n\x13object_vm_interface\x18M \x01(\x0b\x32\x15.diode.v1.VMInterfaceH\x00R\x11objectVmInterface\x12.\n\nobject_vrf\x18N \x01(\x0b\x32\r.diode.v1.VRFH\x00R\tobjectVrf\x12P\n\x16object_virtual_chassis\x18O \x01(\x0b\x32\x18.diode.v1.VirtualChassisH\x00R\x14objectVirtualChassis\x12P\n\x16object_virtual_circuit\x18P \x01(\x0b\x32\x18.diode.v1.VirtualCircuitH\x00R\x14objectVirtualCircuit\x12r\n\"object_virtual_circuit_termination\x18Q \x01(\x0b\x32#.diode.v1.VirtualCircuitTerminationH\x00R\x1fobjectVirtualCircuitTermination\x12]\n\x1bobject_virtual_circuit_type\x18R \x01(\x0b\x32\x1c.diode.v1.VirtualCircuitTypeH\x00R\x18objectVirtualCircuitType\x12\x63\n\x1dobject_virtual_device_context\x18S \x01(\x0b\x32\x1e.diode.v1.VirtualDeviceContextH\x00R\x1aobjectVirtualDeviceContext\x12G\n\x13object_virtual_disk\x18T \x01(\x0b\x32\x15.diode.v1.VirtualDiskH\x00R\x11objectVirtualDisk\x12P\n\x16object_virtual_machine\x18U \x01(\x0b\x32\x18.diode.v1.VirtualMachineH\x00R\x14objectVirtualMachine\x12G\n\x13object_wireless_lan\x18V \x01(\x0b\x32\x15.diode.v1.WirelessLANH\x00R\x11objectWirelessLan\x12W\n\x19object_wireless_lan_group\x18W \x01(\x0b\x32\x1a.diode.v1.WirelessLANGroupH\x00R\x16objectWirelessLanGroup\x12J\n\x14object_wireless_link\x18X \x01(\x0b\x32\x16.diode.v1.WirelessLinkH\x00R\x12objectWirelessLinkB\x08\n\x06object\"\xa1\x04\n\tIKEPolicy\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12%\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12#\n\x07version\x18\x03 \x01(\x03\x42\t\xfa\x42\x06\"\x04\x30\x01\x30\x02R\x07version\x12\x30\n\x04mode\x18\x04 \x01(\tB\x17\xfa\x42\x14r\x12R\naggressiveR\x04mainH\x01R\x04mode\x88\x01\x01\x12(\n\rpreshared_key\x18\x05 \x01(\tH\x02R\x0cpresharedKey\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x06 \x01(\tH\x03R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x07 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12J\n\rcustom_fields\x18\x08 \x03(\x0b\x32%.diode.v1.IKEPolicy.CustomFieldsEntryR\x0c\x63ustomFields\x12\x33\n\tproposals\x18\t \x03(\x0b\x32\x15.diode.v1.IKEProposalR\tproposals\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x0e\n\x0c_descriptionB\x07\n\x05_modeB\x10\n\x0e_preshared_keyB\x0b\n\t_comments\"\x8e\x07\n\x0bIKEProposal\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12%\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12x\n\x15\x61uthentication_method\x18\x03 \x01(\tBC\xfa\x42@r>R\x0c\x63\x65rtificatesR\x0e\x64sa-signaturesR\x0epreshared-keysR\x0ersa-signaturesR\x14\x61uthenticationMethod\x12\x99\x01\n\x14\x65ncryption_algorithm\x18\x04 \x01(\tBf\xfa\x42\x63raR\x08\x33\x64\x65s-cbcR\x0b\x61\x65s-128-cbcR\x0b\x61\x65s-128-gcmR\x0b\x61\x65s-192-cbcR\x0b\x61\x65s-192-gcmR\x0b\x61\x65s-256-cbcR\x0b\x61\x65s-256-gcmR\x07\x64\x65s-cbcR\x13\x65ncryptionAlgorithm\x12\x81\x01\n\x18\x61uthentication_algorithm\x18\x05 \x01(\tBA\xfa\x42>rr\n\x11termination_cable\x18\x06 \x01(\x0b\x32\x0f.diode.v1.CableH\x00R\x10terminationCable\x12K\n\x16termination_cable_path\x18\x07 \x01(\x0b\x32\x13.diode.v1.CablePathH\x00R\x14terminationCablePath\x12`\n\x1dtermination_cable_termination\x18\x08 \x01(\x0b\x32\x1a.diode.v1.CableTerminationH\x00R\x1bterminationCableTermination\x12\x44\n\x13termination_circuit\x18\t \x01(\x0b\x32\x11.diode.v1.CircuitH\x00R\x12terminationCircuit\x12T\n\x19termination_circuit_group\x18\n \x01(\x0b\x32\x16.diode.v1.CircuitGroupH\x00R\x17terminationCircuitGroup\x12s\n$termination_circuit_group_assignment\x18\x0b \x01(\x0b\x32 .diode.v1.CircuitGroupAssignmentH\x00R!terminationCircuitGroupAssignment\x12\x66\n\x1ftermination_circuit_termination\x18\x0c \x01(\x0b\x32\x1c.diode.v1.CircuitTerminationH\x00R\x1dterminationCircuitTermination\x12Q\n\x18termination_circuit_type\x18\r \x01(\x0b\x32\x15.diode.v1.CircuitTypeH\x00R\x16terminationCircuitType\x12\x44\n\x13termination_cluster\x18\x0e \x01(\x0b\x32\x11.diode.v1.ClusterH\x00R\x12terminationCluster\x12T\n\x19termination_cluster_group\x18\x0f \x01(\x0b\x32\x16.diode.v1.ClusterGroupH\x00R\x17terminationClusterGroup\x12Q\n\x18termination_cluster_type\x18\x10 \x01(\x0b\x32\x15.diode.v1.ClusterTypeH\x00R\x16terminationClusterType\x12Q\n\x18termination_console_port\x18\x11 \x01(\x0b\x32\x15.diode.v1.ConsolePortH\x00R\x16terminationConsolePort\x12\x64\n\x1ftermination_console_server_port\x18\x12 \x01(\x0b\x32\x1b.diode.v1.ConsoleServerPortH\x00R\x1cterminationConsoleServerPort\x12\x44\n\x13termination_contact\x18\x13 \x01(\x0b\x32\x11.diode.v1.ContactH\x00R\x12terminationContact\x12\x63\n\x1etermination_contact_assignment\x18\x14 \x01(\x0b\x32\x1b.diode.v1.ContactAssignmentH\x00R\x1cterminationContactAssignment\x12T\n\x19termination_contact_group\x18\x15 \x01(\x0b\x32\x16.diode.v1.ContactGroupH\x00R\x17terminationContactGroup\x12Q\n\x18termination_contact_role\x18\x16 \x01(\x0b\x32\x15.diode.v1.ContactRoleH\x00R\x16terminationContactRole\x12\x41\n\x12termination_device\x18\x17 \x01(\x0b\x32\x10.diode.v1.DeviceH\x00R\x11terminationDevice\x12K\n\x16termination_device_bay\x18\x18 \x01(\x0b\x32\x13.diode.v1.DeviceBayH\x00R\x14terminationDeviceBay\x12N\n\x17termination_device_role\x18\x19 \x01(\x0b\x32\x14.diode.v1.DeviceRoleH\x00R\x15terminationDeviceRole\x12N\n\x17termination_device_type\x18\x1a \x01(\x0b\x32\x14.diode.v1.DeviceTypeH\x00R\x15terminationDeviceType\x12K\n\x16termination_fhrp_group\x18\x1b \x01(\x0b\x32\x13.diode.v1.FHRPGroupH\x00R\x14terminationFhrpGroup\x12j\n!termination_fhrp_group_assignment\x18\x1c \x01(\x0b\x32\x1d.diode.v1.FHRPGroupAssignmentH\x00R\x1eterminationFhrpGroupAssignment\x12K\n\x16termination_front_port\x18\x1d \x01(\x0b\x32\x13.diode.v1.FrontPortH\x00R\x14terminationFrontPort\x12K\n\x16termination_ike_policy\x18\x1e \x01(\x0b\x32\x13.diode.v1.IKEPolicyH\x00R\x14terminationIkePolicy\x12Q\n\x18termination_ike_proposal\x18\x1f \x01(\x0b\x32\x15.diode.v1.IKEProposalH\x00R\x16terminationIkeProposal\x12K\n\x16termination_ip_address\x18 \x01(\x0b\x32\x13.diode.v1.IPAddressH\x00R\x14terminationIpAddress\x12\x45\n\x14termination_ip_range\x18! \x01(\x0b\x32\x11.diode.v1.IPRangeH\x00R\x12terminationIpRange\x12R\n\x19termination_ip_sec_policy\x18\" \x01(\x0b\x32\x15.diode.v1.IPSecPolicyH\x00R\x16terminationIpSecPolicy\x12U\n\x1atermination_ip_sec_profile\x18# \x01(\x0b\x32\x16.diode.v1.IPSecProfileH\x00R\x17terminationIpSecProfile\x12X\n\x1btermination_ip_sec_proposal\x18$ \x01(\x0b\x32\x17.diode.v1.IPSecProposalH\x00R\x18terminationIpSecProposal\x12J\n\x15termination_interface\x18% \x01(\x0b\x32\x13.diode.v1.InterfaceH\x00R\x14terminationInterface\x12W\n\x1atermination_inventory_item\x18& \x01(\x0b\x32\x17.diode.v1.InventoryItemH\x00R\x18terminationInventoryItem\x12\x64\n\x1ftermination_inventory_item_role\x18\' \x01(\x0b\x32\x1b.diode.v1.InventoryItemRoleH\x00R\x1cterminationInventoryItemRole\x12>\n\x11termination_l2vpn\x18( \x01(\x0b\x32\x0f.diode.v1.L2VPNH\x00R\x10terminationL2vpn\x12`\n\x1dtermination_l2vpn_termination\x18) \x01(\x0b\x32\x1a.diode.v1.L2VPNTerminationH\x00R\x1bterminationL2vpnTermination\x12G\n\x14termination_location\x18* \x01(\x0b\x32\x12.diode.v1.LocationH\x00R\x13terminationLocation\x12N\n\x17termination_mac_address\x18+ \x01(\x0b\x32\x14.diode.v1.MACAddressH\x00R\x15terminationMacAddress\x12S\n\x18termination_manufacturer\x18, \x01(\x0b\x32\x16.diode.v1.ManufacturerH\x00R\x17terminationManufacturer\x12\x41\n\x12termination_module\x18- \x01(\x0b\x32\x10.diode.v1.ModuleH\x00R\x11terminationModule\x12K\n\x16termination_module_bay\x18. \x01(\x0b\x32\x13.diode.v1.ModuleBayH\x00R\x14terminationModuleBay\x12N\n\x17termination_module_type\x18/ \x01(\x0b\x32\x14.diode.v1.ModuleTypeH\x00R\x15terminationModuleType\x12G\n\x14termination_platform\x18\x30 \x01(\x0b\x32\x12.diode.v1.PlatformH\x00R\x13terminationPlatform\x12K\n\x16termination_power_feed\x18\x31 \x01(\x0b\x32\x13.diode.v1.PowerFeedH\x00R\x14terminationPowerFeed\x12Q\n\x18termination_power_outlet\x18\x32 \x01(\x0b\x32\x15.diode.v1.PowerOutletH\x00R\x16terminationPowerOutlet\x12N\n\x17termination_power_panel\x18\x33 \x01(\x0b\x32\x14.diode.v1.PowerPanelH\x00R\x15terminationPowerPanel\x12K\n\x16termination_power_port\x18\x34 \x01(\x0b\x32\x13.diode.v1.PowerPortH\x00R\x14terminationPowerPort\x12\x41\n\x12termination_prefix\x18\x35 \x01(\x0b\x32\x10.diode.v1.PrefixH\x00R\x11terminationPrefix\x12G\n\x14termination_provider\x18\x36 \x01(\x0b\x32\x12.diode.v1.ProviderH\x00R\x13terminationProvider\x12]\n\x1ctermination_provider_account\x18\x37 \x01(\x0b\x32\x19.diode.v1.ProviderAccountH\x00R\x1aterminationProviderAccount\x12]\n\x1ctermination_provider_network\x18\x38 \x01(\x0b\x32\x19.diode.v1.ProviderNetworkH\x00R\x1aterminationProviderNetwork\x12\x38\n\x0ftermination_rir\x18\x39 \x01(\x0b\x32\r.diode.v1.RIRH\x00R\x0eterminationRir\x12;\n\x10termination_rack\x18: \x01(\x0b\x32\x0e.diode.v1.RackH\x00R\x0fterminationRack\x12]\n\x1ctermination_rack_reservation\x18; \x01(\x0b\x32\x19.diode.v1.RackReservationH\x00R\x1aterminationRackReservation\x12H\n\x15termination_rack_role\x18< \x01(\x0b\x32\x12.diode.v1.RackRoleH\x00R\x13terminationRackRole\x12H\n\x15termination_rack_type\x18= \x01(\x0b\x32\x12.diode.v1.RackTypeH\x00R\x13terminationRackType\x12H\n\x15termination_rear_port\x18> \x01(\x0b\x32\x12.diode.v1.RearPortH\x00R\x13terminationRearPort\x12\x41\n\x12termination_region\x18? \x01(\x0b\x32\x10.diode.v1.RegionH\x00R\x11terminationRegion\x12;\n\x10termination_role\x18@ \x01(\x0b\x32\x0e.diode.v1.RoleH\x00R\x0fterminationRole\x12Q\n\x18termination_route_target\x18\x41 \x01(\x0b\x32\x15.diode.v1.RouteTargetH\x00R\x16terminationRouteTarget\x12\x44\n\x13termination_service\x18\x42 \x01(\x0b\x32\x11.diode.v1.ServiceH\x00R\x12terminationService\x12;\n\x10termination_site\x18\x43 \x01(\x0b\x32\x0e.diode.v1.SiteH\x00R\x0fterminationSite\x12K\n\x16termination_site_group\x18\x44 \x01(\x0b\x32\x13.diode.v1.SiteGroupH\x00R\x14terminationSiteGroup\x12\x38\n\x0ftermination_tag\x18\x45 \x01(\x0b\x32\r.diode.v1.TagH\x00R\x0eterminationTag\x12\x41\n\x12termination_tenant\x18\x46 \x01(\x0b\x32\x10.diode.v1.TenantH\x00R\x11terminationTenant\x12Q\n\x18termination_tenant_group\x18G \x01(\x0b\x32\x15.diode.v1.TenantGroupH\x00R\x16terminationTenantGroup\x12\x41\n\x12termination_tunnel\x18H \x01(\x0b\x32\x10.diode.v1.TunnelH\x00R\x11terminationTunnel\x12Q\n\x18termination_tunnel_group\x18I \x01(\x0b\x32\x15.diode.v1.TunnelGroupH\x00R\x16terminationTunnelGroup\x12\x63\n\x1etermination_tunnel_termination\x18J \x01(\x0b\x32\x1b.diode.v1.TunnelTerminationH\x00R\x1cterminationTunnelTermination\x12;\n\x10termination_vlan\x18K \x01(\x0b\x32\x0e.diode.v1.VLANH\x00R\x0fterminationVlan\x12K\n\x16termination_vlan_group\x18L \x01(\x0b\x32\x13.diode.v1.VLANGroupH\x00R\x14terminationVlanGroup\x12p\n#termination_vlan_translation_policy\x18M \x01(\x0b\x32\x1f.diode.v1.VLANTranslationPolicyH\x00R terminationVlanTranslationPolicy\x12j\n!termination_vlan_translation_rule\x18N \x01(\x0b\x32\x1d.diode.v1.VLANTranslationRuleH\x00R\x1eterminationVlanTranslationRule\x12Q\n\x18termination_vm_interface\x18O \x01(\x0b\x32\x15.diode.v1.VMInterfaceH\x00R\x16terminationVmInterface\x12\x38\n\x0ftermination_vrf\x18P \x01(\x0b\x32\r.diode.v1.VRFH\x00R\x0eterminationVrf\x12Z\n\x1btermination_virtual_chassis\x18Q \x01(\x0b\x32\x18.diode.v1.VirtualChassisH\x00R\x19terminationVirtualChassis\x12Z\n\x1btermination_virtual_circuit\x18R \x01(\x0b\x32\x18.diode.v1.VirtualCircuitH\x00R\x19terminationVirtualCircuit\x12|\n\'termination_virtual_circuit_termination\x18S \x01(\x0b\x32#.diode.v1.VirtualCircuitTerminationH\x00R$terminationVirtualCircuitTermination\x12g\n termination_virtual_circuit_type\x18T \x01(\x0b\x32\x1c.diode.v1.VirtualCircuitTypeH\x00R\x1dterminationVirtualCircuitType\x12m\n\"termination_virtual_device_context\x18U \x01(\x0b\x32\x1e.diode.v1.VirtualDeviceContextH\x00R\x1fterminationVirtualDeviceContext\x12Q\n\x18termination_virtual_disk\x18V \x01(\x0b\x32\x15.diode.v1.VirtualDiskH\x00R\x16terminationVirtualDisk\x12Z\n\x1btermination_virtual_machine\x18W \x01(\x0b\x32\x18.diode.v1.VirtualMachineH\x00R\x19terminationVirtualMachine\x12Q\n\x18termination_wireless_lan\x18X \x01(\x0b\x32\x15.diode.v1.WirelessLANH\x00R\x16terminationWirelessLan\x12\x61\n\x1etermination_wireless_lan_group\x18Y \x01(\x0b\x32\x1a.diode.v1.WirelessLANGroupH\x00R\x1bterminationWirelessLanGroup\x12T\n\x19termination_wireless_link\x18Z \x01(\x0b\x32\x16.diode.v1.WirelessLinkH\x00R\x17terminationWirelessLink\x12\x37\n\noutside_ip\x18[ \x01(\x0b\x32\x13.diode.v1.IPAddressH\x01R\toutsideIp\x88\x01\x01\x12!\n\x04tags\x18\\ \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12R\n\rcustom_fields\x18] \x03(\x0b\x32-.diode.v1.TunnelTermination.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\r\n\x0bterminationB\r\n\x0b_outside_ip\"\x85\x06\n\x04VLAN\x12\'\n\x04site\x18\x01 \x01(\x0b\x32\x0e.diode.v1.SiteH\x00R\x04site\x88\x01\x01\x12.\n\x05group\x18\x02 \x01(\x0b\x32\x13.diode.v1.VLANGroupH\x01R\x05group\x88\x01\x01\x12\x10\n\x03vid\x18\x03 \x01(\x03R\x03vid\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12-\n\x06tenant\x18\x05 \x01(\x0b\x32\x10.diode.v1.TenantH\x02R\x06tenant\x88\x01\x01\x12@\n\x06status\x18\x06 \x01(\tB#\xfa\x42 r\x1eR\x06\x61\x63tiveR\ndeprecatedR\x08reservedH\x03R\x06status\x88\x01\x01\x12\'\n\x04role\x18\x07 \x01(\x0b\x32\x0e.diode.v1.RoleH\x04R\x04role\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x08 \x01(\tH\x05R\x0b\x64\x65scription\x88\x01\x01\x12\x35\n\tqinq_role\x18\t \x01(\tB\x13\xfa\x42\x10r\x0eR\x05\x63vlanR\x05svlanH\x06R\x08qinqRole\x88\x01\x01\x12\x32\n\nqinq_svlan\x18\n \x01(\x0b\x32\x0e.diode.v1.VLANH\x07R\tqinqSvlan\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x0b \x01(\tH\x08R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x0c \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12\x45\n\rcustom_fields\x18\r \x03(\x0b\x32 .diode.v1.VLAN.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x07\n\x05_siteB\x08\n\x06_groupB\t\n\x07_tenantB\t\n\x07_statusB\x07\n\x05_roleB\x0e\n\x0c_descriptionB\x0c\n\n_qinq_roleB\r\n\x0b_qinq_svlanB\x0b\n\t_comments\"\xf9\x05\n\tVLANGroup\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n\x04slug\x18\x02 \x01(\tR\x04slug\x12\x38\n\rscope_cluster\x18\x03 \x01(\x0b\x32\x11.diode.v1.ClusterH\x00R\x0cscopeCluster\x12H\n\x13scope_cluster_group\x18\x04 \x01(\x0b\x32\x16.diode.v1.ClusterGroupH\x00R\x11scopeClusterGroup\x12;\n\x0escope_location\x18\x05 \x01(\x0b\x32\x12.diode.v1.LocationH\x00R\rscopeLocation\x12/\n\nscope_rack\x18\x06 \x01(\x0b\x32\x0e.diode.v1.RackH\x00R\tscopeRack\x12\x35\n\x0cscope_region\x18\x07 \x01(\x0b\x32\x10.diode.v1.RegionH\x00R\x0bscopeRegion\x12/\n\nscope_site\x18\x08 \x01(\x0b\x32\x0e.diode.v1.SiteH\x00R\tscopeSite\x12?\n\x10scope_site_group\x18\t \x01(\x0b\x32\x13.diode.v1.SiteGroupH\x00R\x0escopeSiteGroup\x12\x1d\n\nvid_ranges\x18\n \x03(\x03R\tvidRanges\x12%\n\x0b\x64\x65scription\x18\x0b \x01(\tH\x01R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x0c \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12J\n\rcustom_fields\x18\r \x03(\x0b\x32%.diode.v1.VLANGroup.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x07\n\x05scopeB\x0e\n\x0c_description\"b\n\x15VLANTranslationPolicy\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12%\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x42\x0e\n\x0c_description\"\xc1\x01\n\x13VLANTranslationRule\x12\x37\n\x06policy\x18\x01 \x01(\x0b\x32\x1f.diode.v1.VLANTranslationPolicyR\x06policy\x12\x1b\n\tlocal_vid\x18\x02 \x01(\x03R\x08localVid\x12\x1d\n\nremote_vid\x18\x03 \x01(\x03R\tremoteVid\x12%\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x42\x0e\n\x0c_description\"\xcb\x08\n\x0bVMInterface\x12\x41\n\x0fvirtual_machine\x18\x01 \x01(\x0b\x32\x18.diode.v1.VirtualMachineR\x0evirtualMachine\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x1d\n\x07\x65nabled\x18\x03 \x01(\x08H\x00R\x07\x65nabled\x88\x01\x01\x12\x32\n\x06parent\x18\x04 \x01(\x0b\x32\x15.diode.v1.VMInterfaceH\x01R\x06parent\x88\x01\x01\x12\x32\n\x06\x62ridge\x18\x05 \x01(\x0b\x32\x15.diode.v1.VMInterfaceH\x02R\x06\x62ridge\x88\x01\x01\x12\x15\n\x03mtu\x18\x06 \x01(\x03H\x03R\x03mtu\x88\x01\x01\x12I\n\x13primary_mac_address\x18\x07 \x01(\x0b\x32\x14.diode.v1.MACAddressH\x04R\x11primaryMacAddress\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x08 \x01(\tH\x05R\x0b\x64\x65scription\x88\x01\x01\x12\x42\n\x04mode\x18\t \x01(\tB)\xfa\x42&r$R\x06\x61\x63\x63\x65ssR\x06q-in-qR\x06taggedR\ntagged-allH\x06R\x04mode\x88\x01\x01\x12\x38\n\runtagged_vlan\x18\n \x01(\x0b\x32\x0e.diode.v1.VLANH\x07R\x0cuntaggedVlan\x88\x01\x01\x12\x32\n\nqinq_svlan\x18\x0b \x01(\x0b\x32\x0e.diode.v1.VLANH\x08R\tqinqSvlan\x88\x01\x01\x12\\\n\x17vlan_translation_policy\x18\x0c \x01(\x0b\x32\x1f.diode.v1.VLANTranslationPolicyH\tR\x15vlanTranslationPolicy\x88\x01\x01\x12$\n\x03vrf\x18\r \x01(\x0b\x32\r.diode.v1.VRFH\nR\x03vrf\x88\x01\x01\x12!\n\x04tags\x18\x0e \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12L\n\rcustom_fields\x18\x0f \x03(\x0b\x32\'.diode.v1.VMInterface.CustomFieldsEntryR\x0c\x63ustomFields\x12\x31\n\x0ctagged_vlans\x18\x10 \x03(\x0b\x32\x0e.diode.v1.VLANR\x0btaggedVlans\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\n\n\x08_enabledB\t\n\x07_parentB\t\n\x07_bridgeB\x06\n\x04_mtuB\x16\n\x14_primary_mac_addressB\x0e\n\x0c_descriptionB\x07\n\x05_modeB\x10\n\x0e_untagged_vlanB\r\n\x0b_qinq_svlanB\x1a\n\x18_vlan_translation_policyB\x06\n\x04_vrf\"\xd5\x04\n\x03VRF\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x13\n\x02rd\x18\x02 \x01(\tH\x00R\x02rd\x88\x01\x01\x12-\n\x06tenant\x18\x03 \x01(\x0b\x32\x10.diode.v1.TenantH\x01R\x06tenant\x88\x01\x01\x12*\n\x0e\x65nforce_unique\x18\x04 \x01(\x08H\x02R\renforceUnique\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x03R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x06 \x01(\tH\x04R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x07 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12\x44\n\rcustom_fields\x18\x08 \x03(\x0b\x32\x1f.diode.v1.VRF.CustomFieldsEntryR\x0c\x63ustomFields\x12<\n\x0eimport_targets\x18\t \x03(\x0b\x32\x15.diode.v1.RouteTargetR\rimportTargets\x12<\n\x0e\x65xport_targets\x18\n \x03(\x0b\x32\x15.diode.v1.RouteTargetR\rexportTargets\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x05\n\x03_rdB\t\n\x07_tenantB\x11\n\x0f_enforce_uniqueB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xbc\x03\n\x0eVirtualChassis\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1b\n\x06\x64omain\x18\x02 \x01(\tH\x00R\x06\x64omain\x88\x01\x01\x12-\n\x06master\x18\x03 \x01(\x0b\x32\x10.diode.v1.DeviceH\x01R\x06master\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x02R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x05 \x01(\tH\x03R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x06 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12O\n\rcustom_fields\x18\x07 \x03(\x0b\x32*.diode.v1.VirtualChassis.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\t\n\x07_domainB\t\n\x07_masterB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xe1\x05\n\x0eVirtualCircuit\x12\x10\n\x03\x63id\x18\x01 \x01(\tR\x03\x63id\x12\x44\n\x10provider_network\x18\x02 \x01(\x0b\x32\x19.diode.v1.ProviderNetworkR\x0fproviderNetwork\x12I\n\x10provider_account\x18\x03 \x01(\x0b\x32\x19.diode.v1.ProviderAccountH\x00R\x0fproviderAccount\x88\x01\x01\x12\x30\n\x04type\x18\x04 \x01(\x0b\x32\x1c.diode.v1.VirtualCircuitTypeR\x04type\x12j\n\x06status\x18\x05 \x01(\tBM\xfa\x42JrHR\x06\x61\x63tiveR\x0e\x64\x65\x63ommissionedR\x0e\x64\x65provisioningR\x07offlineR\x07plannedR\x0cprovisioningH\x01R\x06status\x88\x01\x01\x12-\n\x06tenant\x18\x06 \x01(\x0b\x32\x10.diode.v1.TenantH\x02R\x06tenant\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x03R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x08 \x01(\tH\x04R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\t \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12O\n\rcustom_fields\x18\n \x03(\x0b\x32*.diode.v1.VirtualCircuit.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x13\n\x11_provider_accountB\t\n\x07_statusB\t\n\x07_tenantB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xdf\x03\n\x19VirtualCircuitTermination\x12\x41\n\x0fvirtual_circuit\x18\x01 \x01(\x0b\x32\x18.diode.v1.VirtualCircuitR\x0evirtualCircuit\x12\x30\n\x04role\x18\x02 \x01(\tB\x17\xfa\x42\x14r\x12R\x03hubR\x04peerR\x05spokeH\x00R\x04role\x88\x01\x01\x12\x31\n\tinterface\x18\x03 \x01(\x0b\x32\x13.diode.v1.InterfaceR\tinterface\x12%\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x01R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x05 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12Z\n\rcustom_fields\x18\x06 \x03(\x0b\x32\x35.diode.v1.VirtualCircuitTermination.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x07\n\x05_roleB\x0e\n\x0c_description\"\xed\x02\n\x12VirtualCircuitType\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n\x04slug\x18\x02 \x01(\tR\x04slug\x12\x19\n\x05\x63olor\x18\x03 \x01(\tH\x00R\x05\x63olor\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x01R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x05 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12S\n\rcustom_fields\x18\x06 \x03(\x0b\x32..diode.v1.VirtualCircuitType.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x08\n\x06_colorB\x0e\n\x0c_description\"\xcd\x05\n\x14VirtualDeviceContext\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12(\n\x06\x64\x65vice\x18\x02 \x01(\x0b\x32\x10.diode.v1.DeviceR\x06\x64\x65vice\x12#\n\nidentifier\x18\x03 \x01(\x03H\x00R\nidentifier\x88\x01\x01\x12-\n\x06tenant\x18\x04 \x01(\x0b\x32\x10.diode.v1.TenantH\x01R\x06tenant\x88\x01\x01\x12\x39\n\x0bprimary_ip4\x18\x05 \x01(\x0b\x32\x13.diode.v1.IPAddressH\x02R\nprimaryIp4\x88\x01\x01\x12\x39\n\x0bprimary_ip6\x18\x06 \x01(\x0b\x32\x13.diode.v1.IPAddressH\x03R\nprimaryIp6\x88\x01\x01\x12\x37\n\x06status\x18\x07 \x01(\tB\x1f\xfa\x42\x1cr\x1aR\x06\x61\x63tiveR\x07offlineR\x07plannedR\x06status\x12%\n\x0b\x64\x65scription\x18\x08 \x01(\tH\x04R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\t \x01(\tH\x05R\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\n \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12U\n\rcustom_fields\x18\x0b \x03(\x0b\x32\x30.diode.v1.VirtualDeviceContext.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\r\n\x0b_identifierB\t\n\x07_tenantB\x0e\n\x0c_primary_ip4B\x0e\n\x0c_primary_ip6B\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xfd\x02\n\x0bVirtualDisk\x12\x41\n\x0fvirtual_machine\x18\x01 \x01(\x0b\x32\x18.diode.v1.VirtualMachineR\x0evirtualMachine\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12%\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\x12\n\x04size\x18\x04 \x01(\x03R\x04size\x12!\n\x04tags\x18\x05 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12L\n\rcustom_fields\x18\x06 \x03(\x0b\x32\'.diode.v1.VirtualDisk.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x0e\n\x0c_description\"\xcf\x08\n\x0eVirtualMachine\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12]\n\x06status\x18\x02 \x01(\tB@\xfa\x42=r;R\x06\x61\x63tiveR\x0f\x64\x65\x63ommissioningR\x06\x66\x61iledR\x07offlineR\x07plannedR\x06stagedH\x00R\x06status\x88\x01\x01\x12\'\n\x04site\x18\x03 \x01(\x0b\x32\x0e.diode.v1.SiteH\x01R\x04site\x88\x01\x01\x12\x30\n\x07\x63luster\x18\x04 \x01(\x0b\x32\x11.diode.v1.ClusterH\x02R\x07\x63luster\x88\x01\x01\x12-\n\x06\x64\x65vice\x18\x05 \x01(\x0b\x32\x10.diode.v1.DeviceH\x03R\x06\x64\x65vice\x88\x01\x01\x12\x1b\n\x06serial\x18\x06 \x01(\tH\x04R\x06serial\x88\x01\x01\x12-\n\x04role\x18\x07 \x01(\x0b\x32\x14.diode.v1.DeviceRoleH\x05R\x04role\x88\x01\x01\x12-\n\x06tenant\x18\x08 \x01(\x0b\x32\x10.diode.v1.TenantH\x06R\x06tenant\x88\x01\x01\x12\x33\n\x08platform\x18\t \x01(\x0b\x32\x12.diode.v1.PlatformH\x07R\x08platform\x88\x01\x01\x12\x39\n\x0bprimary_ip4\x18\n \x01(\x0b\x32\x13.diode.v1.IPAddressH\x08R\nprimaryIp4\x88\x01\x01\x12\x39\n\x0bprimary_ip6\x18\x0b \x01(\x0b\x32\x13.diode.v1.IPAddressH\tR\nprimaryIp6\x88\x01\x01\x12\x19\n\x05vcpus\x18\x0c \x01(\x01H\nR\x05vcpus\x88\x01\x01\x12\x1b\n\x06memory\x18\r \x01(\x03H\x0bR\x06memory\x88\x01\x01\x12\x17\n\x04\x64isk\x18\x0e \x01(\x03H\x0cR\x04\x64isk\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x0f \x01(\tH\rR\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x10 \x01(\tH\x0eR\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x11 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12O\n\rcustom_fields\x18\x12 \x03(\x0b\x32*.diode.v1.VirtualMachine.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\t\n\x07_statusB\x07\n\x05_siteB\n\n\x08_clusterB\t\n\x07_deviceB\t\n\x07_serialB\x07\n\x05_roleB\t\n\x07_tenantB\x0b\n\t_platformB\x0e\n\x0c_primary_ip4B\x0e\n\x0c_primary_ip6B\x08\n\x06_vcpusB\t\n\x07_memoryB\x07\n\x05_diskB\x0e\n\x0c_descriptionB\x0b\n\t_comments\"\xa2\x08\n\x0bWirelessLAN\x12\x12\n\x04ssid\x18\x01 \x01(\tR\x04ssid\x12%\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x01R\x0b\x64\x65scription\x88\x01\x01\x12\x35\n\x05group\x18\x03 \x01(\x0b\x32\x1a.diode.v1.WirelessLANGroupH\x02R\x05group\x88\x01\x01\x12J\n\x06status\x18\x04 \x01(\tB-\xfa\x42*r(R\x06\x61\x63tiveR\ndeprecatedR\x08\x64isabledR\x08reservedH\x03R\x06status\x88\x01\x01\x12\'\n\x04vlan\x18\x05 \x01(\x0b\x32\x0e.diode.v1.VLANH\x04R\x04vlan\x88\x01\x01\x12;\n\x0escope_location\x18\x06 \x01(\x0b\x32\x12.diode.v1.LocationH\x00R\rscopeLocation\x12\x35\n\x0cscope_region\x18\x07 \x01(\x0b\x32\x10.diode.v1.RegionH\x00R\x0bscopeRegion\x12/\n\nscope_site\x18\x08 \x01(\x0b\x32\x0e.diode.v1.SiteH\x00R\tscopeSite\x12?\n\x10scope_site_group\x18\t \x01(\x0b\x32\x13.diode.v1.SiteGroupH\x00R\x0escopeSiteGroup\x12-\n\x06tenant\x18\n \x01(\x0b\x32\x10.diode.v1.TenantH\x05R\x06tenant\x88\x01\x01\x12P\n\tauth_type\x18\x0b \x01(\tB.\xfa\x42+r)R\x04openR\x03wepR\x0ewpa-enterpriseR\x0cwpa-personalH\x06R\x08\x61uthType\x88\x01\x01\x12<\n\x0b\x61uth_cipher\x18\x0c \x01(\tB\x16\xfa\x42\x13r\x11R\x03\x61\x65sR\x04\x61utoR\x04tkipH\x07R\nauthCipher\x88\x01\x01\x12\x1e\n\x08\x61uth_psk\x18\r \x01(\tH\x08R\x07\x61uthPsk\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x0e \x01(\tH\tR\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\x0f \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12L\n\rcustom_fields\x18\x10 \x03(\x0b\x32\'.diode.v1.WirelessLAN.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x07\n\x05scopeB\x0e\n\x0c_descriptionB\x08\n\x06_groupB\t\n\x07_statusB\x07\n\x05_vlanB\t\n\x07_tenantB\x0c\n\n_auth_typeB\x0e\n\x0c_auth_cipherB\x0b\n\t_auth_pskB\x0b\n\t_comments\"\x88\x03\n\x10WirelessLANGroup\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n\x04slug\x18\x02 \x01(\tR\x04slug\x12\x37\n\x06parent\x18\x03 \x01(\x0b\x32\x1a.diode.v1.WirelessLANGroupH\x00R\x06parent\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x01R\x0b\x64\x65scription\x88\x01\x01\x12!\n\x04tags\x18\x05 \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12Q\n\rcustom_fields\x18\x06 \x03(\x0b\x32,.diode.v1.WirelessLANGroup.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\t\n\x07_parentB\x0e\n\x0c_description\"\xb9\x07\n\x0cWirelessLink\x12\x34\n\x0binterface_a\x18\x01 \x01(\x0b\x32\x13.diode.v1.InterfaceR\ninterfaceA\x12\x34\n\x0binterface_b\x18\x02 \x01(\x0b\x32\x13.diode.v1.InterfaceR\ninterfaceB\x12\x17\n\x04ssid\x18\x03 \x01(\tH\x00R\x04ssid\x88\x01\x01\x12G\n\x06status\x18\x04 \x01(\tB*\xfa\x42\'r%R\tconnectedR\x0f\x64\x65\x63ommissioningR\x07plannedH\x01R\x06status\x88\x01\x01\x12-\n\x06tenant\x18\x05 \x01(\x0b\x32\x10.diode.v1.TenantH\x02R\x06tenant\x88\x01\x01\x12P\n\tauth_type\x18\x06 \x01(\tB.\xfa\x42+r)R\x04openR\x03wepR\x0ewpa-enterpriseR\x0cwpa-personalH\x03R\x08\x61uthType\x88\x01\x01\x12<\n\x0b\x61uth_cipher\x18\x07 \x01(\tB\x16\xfa\x42\x13r\x11R\x03\x61\x65sR\x04\x61utoR\x04tkipH\x04R\nauthCipher\x88\x01\x01\x12\x1e\n\x08\x61uth_psk\x18\x08 \x01(\tH\x05R\x07\x61uthPsk\x88\x01\x01\x12\x1f\n\x08\x64istance\x18\t \x01(\x01H\x06R\x08\x64istance\x88\x01\x01\x12>\n\rdistance_unit\x18\n \x01(\tB\x14\xfa\x42\x11r\x0fR\x02\x66tR\x02kmR\x01mR\x02miH\x07R\x0c\x64istanceUnit\x88\x01\x01\x12%\n\x0b\x64\x65scription\x18\x0b \x01(\tH\x08R\x0b\x64\x65scription\x88\x01\x01\x12\x1f\n\x08\x63omments\x18\x0c \x01(\tH\tR\x08\x63omments\x88\x01\x01\x12!\n\x04tags\x18\r \x03(\x0b\x32\r.diode.v1.TagR\x04tags\x12M\n\rcustom_fields\x18\x0e \x03(\x0b\x32(.diode.v1.WirelessLink.CustomFieldsEntryR\x0c\x63ustomFields\x1a[\n\x11\x43ustomFieldsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.diode.v1.CustomFieldValueR\x05value:\x02\x38\x01\x42\x07\n\x05_ssidB\t\n\x07_statusB\t\n\x07_tenantB\x0c\n\n_auth_typeB\x0e\n\x0c_auth_cipherB\x0b\n\t_auth_pskB\x0b\n\t_distanceB\x10\n\x0e_distance_unitB\x0e\n\x0c_descriptionB\x0b\n\t_comments2N\n\x0fIngesterService\x12;\n\x06Ingest\x12\x17.diode.v1.IngestRequest\x1a\x18.diode.v1.IngestResponseB5Z3github.com/netboxlabs/diode-sdk-go/diode/v1/diodepbb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -24,140 +24,6 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z3github.com/netboxlabs/diode-sdk-go/diode/v1/diodepb' - _globals['_DEVICE'].fields_by_name['name']._loaded_options = None - _globals['_DEVICE'].fields_by_name['name']._serialized_options = b'\372B\004r\002\030@' - _globals['_DEVICE'].fields_by_name['device_fqdn']._loaded_options = None - _globals['_DEVICE'].fields_by_name['device_fqdn']._serialized_options = b'\372B\007r\005\020\001\030\377\001' - _globals['_DEVICE'].fields_by_name['serial']._loaded_options = None - _globals['_DEVICE'].fields_by_name['serial']._serialized_options = b'\372B\004r\002\0302' - _globals['_DEVICE'].fields_by_name['asset_tag']._loaded_options = None - _globals['_DEVICE'].fields_by_name['asset_tag']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_DEVICE'].fields_by_name['status']._loaded_options = None - _globals['_DEVICE'].fields_by_name['status']._serialized_options = b'\372BHrFR\007offlineR\006activeR\007plannedR\006stagedR\006failedR\tinventoryR\017decommissioning' - _globals['_DEVICE'].fields_by_name['description']._loaded_options = None - _globals['_DEVICE'].fields_by_name['description']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_INTERFACE'].fields_by_name['device']._loaded_options = None - _globals['_INTERFACE'].fields_by_name['device']._serialized_options = b'\372B\005\242\001\002\010\001' - _globals['_INTERFACE'].fields_by_name['name']._loaded_options = None - _globals['_INTERFACE'].fields_by_name['name']._serialized_options = b'\372B\006r\004\020\001\030@' - _globals['_INTERFACE'].fields_by_name['label']._loaded_options = None - _globals['_INTERFACE'].fields_by_name['label']._serialized_options = b'\372B\006r\004\020\001\030@' - _globals['_INTERFACE'].fields_by_name['type']._loaded_options = None - _globals['_INTERFACE'].fields_by_name['type']._serialized_options = b'\372B\341\014r\336\014R\007virtualR\006bridgeR\003lagR\n100base-fxR\013100base-lfxR\n100base-txR\n100base-t1R\n1000base-tR\0171000base-x-gbicR\0161000base-x-sfpR\n2.5gbase-tR\0105gbase-tR\t10gbase-tR\01310gbase-cx4R\01610gbase-x-sfppR\r10gbase-x-xfpR\02010gbase-x-xenpakR\01410gbase-x-x2R\01725gbase-x-sfp28R\01750gbase-x-sfp56R\01740gbase-x-qsfppR\01750gbase-x-sfp28R\016100gbase-x-cfpR\017100gbase-x-cfp2R\017100gbase-x-cfp4R\016100gbase-x-cxpR\017100gbase-x-cpakR\017100gbase-x-dsfpR\020100gbase-x-sfpddR\021100gbase-x-qsfp28R\021100gbase-x-qsfpddR\017200gbase-x-cfp2R\021200gbase-x-qsfp56R\021200gbase-x-qsfpddR\017400gbase-x-cfp2R\022400gbase-x-qsfp112R\021400gbase-x-qsfpddR\017400gbase-x-osfpR\023400gbase-x-osfp-rhsR\017400gbase-x-cdfpR\017400gbase-x-cfp8R\021800gbase-x-qsfpddR\017800gbase-x-osfpR\0131000base-kxR\n10gbase-krR\01310gbase-kx4R\n25gbase-krR\01340gbase-kr4R\n50gbase-krR\014100gbase-kp4R\014100gbase-kr2R\014100gbase-kr4R\013ieee802.11aR\013ieee802.11gR\013ieee802.11nR\014ieee802.11acR\014ieee802.11adR\014ieee802.11axR\014ieee802.11ayR\014ieee802.15.1R\016other-wirelessR\003gsmR\004cdmaR\003lteR\tsonet-oc3R\nsonet-oc12R\nsonet-oc48R\013sonet-oc192R\013sonet-oc768R\014sonet-oc1920R\014sonet-oc3840R\0101gfc-sfpR\0102gfc-sfpR\0104gfc-sfpR\t8gfc-sfppR\n16gfc-sfppR\01332gfc-sfp28R\01364gfc-qsfppR\r128gfc-qsfp28R\016infiniband-sdrR\016infiniband-ddrR\016infiniband-qdrR\020infiniband-fdr10R\016infiniband-fdrR\016infiniband-edrR\016infiniband-hdrR\016infiniband-ndrR\016infiniband-xdrR\002t1R\002e1R\002t3R\002e3R\004xdslR\006docsisR\004gponR\006xg-ponR\007xgs-ponR\007ng-pon2R\004eponR\01010g-eponR\017cisco-stackwiseR\024cisco-stackwise-plusR\017cisco-flexstackR\024cisco-flexstack-plusR\022cisco-stackwise-80R\023cisco-stackwise-160R\023cisco-stackwise-320R\023cisco-stackwise-480R\022cisco-stackwise-1tR\013juniper-vcpR\023extreme-summitstackR\027extreme-summitstack-128R\027extreme-summitstack-256R\027extreme-summitstack-512R\005other' - _globals['_INTERFACE'].fields_by_name['mtu']._loaded_options = None - _globals['_INTERFACE'].fields_by_name['mtu']._serialized_options = b'\372B\010\032\006\030\200\200\004(\001' - _globals['_INTERFACE'].fields_by_name['speed']._loaded_options = None - _globals['_INTERFACE'].fields_by_name['speed']._serialized_options = b'\372B\004\032\002(\000' - _globals['_INTERFACE'].fields_by_name['description']._loaded_options = None - _globals['_INTERFACE'].fields_by_name['description']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_INTERFACE'].fields_by_name['mode']._loaded_options = None - _globals['_INTERFACE'].fields_by_name['mode']._serialized_options = b'\372B\036r\034R\006accessR\006taggedR\ntagged-all' - _globals['_CLUSTER'].fields_by_name['name']._loaded_options = None - _globals['_CLUSTER'].fields_by_name['name']._serialized_options = b'\372B\006r\004\020\001\030d' - _globals['_CLUSTER'].fields_by_name['status']._loaded_options = None - _globals['_CLUSTER'].fields_by_name['status']._serialized_options = b'\372B=r;R\007offlineR\006activeR\007plannedR\006stagedR\006failedR\017decommissioning' - _globals['_CLUSTER'].fields_by_name['description']._loaded_options = None - _globals['_CLUSTER'].fields_by_name['description']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_CLUSTERTYPE'].fields_by_name['name']._loaded_options = None - _globals['_CLUSTERTYPE'].fields_by_name['name']._serialized_options = b'\372B\006r\004\020\001\030d' - _globals['_CLUSTERTYPE'].fields_by_name['slug']._loaded_options = None - _globals['_CLUSTERTYPE'].fields_by_name['slug']._serialized_options = b'\372B\030r\026\020\001\030d2\020^[-a-zA-Z0-9_]+$' - _globals['_CLUSTERTYPE'].fields_by_name['description']._loaded_options = None - _globals['_CLUSTERTYPE'].fields_by_name['description']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_CLUSTERGROUP'].fields_by_name['name']._loaded_options = None - _globals['_CLUSTERGROUP'].fields_by_name['name']._serialized_options = b'\372B\006r\004\020\001\030d' - _globals['_CLUSTERGROUP'].fields_by_name['slug']._loaded_options = None - _globals['_CLUSTERGROUP'].fields_by_name['slug']._serialized_options = b'\372B\030r\026\020\001\030d2\020^[-a-zA-Z0-9_]+$' - _globals['_CLUSTERGROUP'].fields_by_name['description']._loaded_options = None - _globals['_CLUSTERGROUP'].fields_by_name['description']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_VIRTUALMACHINE'].fields_by_name['name']._loaded_options = None - _globals['_VIRTUALMACHINE'].fields_by_name['name']._serialized_options = b'\372B\004r\002\030@' - _globals['_VIRTUALMACHINE'].fields_by_name['status']._loaded_options = None - _globals['_VIRTUALMACHINE'].fields_by_name['status']._serialized_options = b'\372B=r;R\007offlineR\006activeR\007plannedR\006stagedR\006failedR\017decommissioning' - _globals['_VIRTUALMACHINE'].fields_by_name['vcpus']._loaded_options = None - _globals['_VIRTUALMACHINE'].fields_by_name['vcpus']._serialized_options = b'\372B\004\032\002(\000' - _globals['_VIRTUALMACHINE'].fields_by_name['memory']._loaded_options = None - _globals['_VIRTUALMACHINE'].fields_by_name['memory']._serialized_options = b'\372B\004\032\002(\000' - _globals['_VIRTUALMACHINE'].fields_by_name['disk']._loaded_options = None - _globals['_VIRTUALMACHINE'].fields_by_name['disk']._serialized_options = b'\372B\004\032\002(\000' - _globals['_VIRTUALMACHINE'].fields_by_name['description']._loaded_options = None - _globals['_VIRTUALMACHINE'].fields_by_name['description']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_VMINTERFACE'].fields_by_name['virtual_machine']._loaded_options = None - _globals['_VMINTERFACE'].fields_by_name['virtual_machine']._serialized_options = b'\372B\005\242\001\002\010\001' - _globals['_VMINTERFACE'].fields_by_name['name']._loaded_options = None - _globals['_VMINTERFACE'].fields_by_name['name']._serialized_options = b'\372B\006r\004\020\001\030@' - _globals['_VMINTERFACE'].fields_by_name['mtu']._loaded_options = None - _globals['_VMINTERFACE'].fields_by_name['mtu']._serialized_options = b'\372B\010\032\006\030\200\200\004(\001' - _globals['_VMINTERFACE'].fields_by_name['description']._loaded_options = None - _globals['_VMINTERFACE'].fields_by_name['description']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_VIRTUALDISK'].fields_by_name['virtual_machine']._loaded_options = None - _globals['_VIRTUALDISK'].fields_by_name['virtual_machine']._serialized_options = b'\372B\005\242\001\002\010\001' - _globals['_VIRTUALDISK'].fields_by_name['name']._loaded_options = None - _globals['_VIRTUALDISK'].fields_by_name['name']._serialized_options = b'\372B\006r\004\020\001\030d' - _globals['_VIRTUALDISK'].fields_by_name['size']._loaded_options = None - _globals['_VIRTUALDISK'].fields_by_name['size']._serialized_options = b'\372B\004\032\002(\000' - _globals['_VIRTUALDISK'].fields_by_name['description']._loaded_options = None - _globals['_VIRTUALDISK'].fields_by_name['description']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_IPADDRESS'].fields_by_name['address']._loaded_options = None - _globals['_IPADDRESS'].fields_by_name['address']._serialized_options = b'\372B\004r\002p\001' - _globals['_IPADDRESS'].fields_by_name['status']._loaded_options = None - _globals['_IPADDRESS'].fields_by_name['status']._serialized_options = b'\372B-r+R\006activeR\010reservedR\ndeprecatedR\004dhcpR\005slaac' - _globals['_IPADDRESS'].fields_by_name['role']._loaded_options = None - _globals['_IPADDRESS'].fields_by_name['role']._serialized_options = b'\372B=r;R\010loopbackR\tsecondaryR\007anycastR\003vipR\004vrrpR\004hsrpR\004glbpR\004carp' - _globals['_IPADDRESS'].fields_by_name['dns_name']._loaded_options = None - _globals['_IPADDRESS'].fields_by_name['dns_name']._serialized_options = b'\372B2r0\030\377\0012+^([0-9A-Za-z_-]+|\\*)(\\.[0-9A-Za-z_-]+)*\\.?$' - _globals['_IPADDRESS'].fields_by_name['description']._loaded_options = None - _globals['_IPADDRESS'].fields_by_name['description']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_DEVICETYPE'].fields_by_name['model']._loaded_options = None - _globals['_DEVICETYPE'].fields_by_name['model']._serialized_options = b'\372B\006r\004\020\001\030d' - _globals['_DEVICETYPE'].fields_by_name['slug']._loaded_options = None - _globals['_DEVICETYPE'].fields_by_name['slug']._serialized_options = b'\372B\030r\026\020\001\030d2\020^[-a-zA-Z0-9_]+$' - _globals['_DEVICETYPE'].fields_by_name['description']._loaded_options = None - _globals['_DEVICETYPE'].fields_by_name['description']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_DEVICETYPE'].fields_by_name['part_number']._loaded_options = None - _globals['_DEVICETYPE'].fields_by_name['part_number']._serialized_options = b'\372B\004r\002\0302' - _globals['_MANUFACTURER'].fields_by_name['name']._loaded_options = None - _globals['_MANUFACTURER'].fields_by_name['name']._serialized_options = b'\372B\006r\004\020\001\030d' - _globals['_MANUFACTURER'].fields_by_name['slug']._loaded_options = None - _globals['_MANUFACTURER'].fields_by_name['slug']._serialized_options = b'\372B\030r\026\020\001\030d2\020^[-a-zA-Z0-9_]+$' - _globals['_MANUFACTURER'].fields_by_name['description']._loaded_options = None - _globals['_MANUFACTURER'].fields_by_name['description']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_PLATFORM'].fields_by_name['name']._loaded_options = None - _globals['_PLATFORM'].fields_by_name['name']._serialized_options = b'\372B\006r\004\020\001\030d' - _globals['_PLATFORM'].fields_by_name['slug']._loaded_options = None - _globals['_PLATFORM'].fields_by_name['slug']._serialized_options = b'\372B\030r\026\020\001\030d2\020^[-a-zA-Z0-9_]+$' - _globals['_PLATFORM'].fields_by_name['description']._loaded_options = None - _globals['_PLATFORM'].fields_by_name['description']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_PREFIX'].fields_by_name['prefix']._loaded_options = None - _globals['_PREFIX'].fields_by_name['prefix']._serialized_options = b'\372B\004r\002p\001' - _globals['_PREFIX'].fields_by_name['status']._loaded_options = None - _globals['_PREFIX'].fields_by_name['status']._serialized_options = b'\372B+r)R\006activeR\tcontainerR\010reservedR\ndeprecated' - _globals['_PREFIX'].fields_by_name['description']._loaded_options = None - _globals['_PREFIX'].fields_by_name['description']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_ROLE'].fields_by_name['name']._loaded_options = None - _globals['_ROLE'].fields_by_name['name']._serialized_options = b'\372B\006r\004\020\001\030d' - _globals['_ROLE'].fields_by_name['slug']._loaded_options = None - _globals['_ROLE'].fields_by_name['slug']._serialized_options = b'\372B\030r\026\020\001\030d2\020^[-a-zA-Z0-9_]+$' - _globals['_ROLE'].fields_by_name['color']._loaded_options = None - _globals['_ROLE'].fields_by_name['color']._serialized_options = b'\372B\025r\023\020\006\030\0062\r^[0-9a-f]{6}$' - _globals['_ROLE'].fields_by_name['description']._loaded_options = None - _globals['_ROLE'].fields_by_name['description']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_SITE'].fields_by_name['name']._loaded_options = None - _globals['_SITE'].fields_by_name['name']._serialized_options = b'\372B\006r\004\020\001\030d' - _globals['_SITE'].fields_by_name['slug']._loaded_options = None - _globals['_SITE'].fields_by_name['slug']._serialized_options = b'\372B\030r\026\020\001\030d2\020^[-a-zA-Z0-9_]+$' - _globals['_SITE'].fields_by_name['status']._loaded_options = None - _globals['_SITE'].fields_by_name['status']._serialized_options = b'\372B6r4R\007plannedR\007stagingR\006activeR\017decommissioningR\007retired' - _globals['_SITE'].fields_by_name['facility']._loaded_options = None - _globals['_SITE'].fields_by_name['facility']._serialized_options = b'\372B\004r\002\0302' - _globals['_SITE'].fields_by_name['description']._loaded_options = None - _globals['_SITE'].fields_by_name['description']._serialized_options = b'\372B\005r\003\030\310\001' - _globals['_TAG'].fields_by_name['name']._loaded_options = None - _globals['_TAG'].fields_by_name['name']._serialized_options = b'\372B\006r\004\020\001\030d' - _globals['_TAG'].fields_by_name['slug']._loaded_options = None - _globals['_TAG'].fields_by_name['slug']._serialized_options = b'\372B\030r\026\020\001\030d2\020^[-a-zA-Z0-9_]+$' - _globals['_TAG'].fields_by_name['color']._loaded_options = None - _globals['_TAG'].fields_by_name['color']._serialized_options = b'\372B\025r\023\020\006\030\0062\r^[0-9a-f]{6}$' _globals['_ENTITY'].fields_by_name['timestamp']._loaded_options = None _globals['_ENTITY'].fields_by_name['timestamp']._serialized_options = b'\372B\007\262\001\004\010\0018\001' _globals['_INGESTREQUEST'].fields_by_name['stream']._loaded_options = None @@ -174,44 +40,692 @@ _globals['_INGESTREQUEST'].fields_by_name['sdk_name']._serialized_options = b'\372B\007r\005\020\001\030\377\001' _globals['_INGESTREQUEST'].fields_by_name['sdk_version']._loaded_options = None _globals['_INGESTREQUEST'].fields_by_name['sdk_version']._serialized_options = b'\372B\031r\0272\025^(\\d)+\\.(\\d)+\\.(\\d)+$' - _globals['_DEVICE']._serialized_start=96 - _globals['_DEVICE']._serialized_end=836 - _globals['_INTERFACE']._serialized_start=839 - _globals['_INTERFACE']._serialized_end=3126 - _globals['_CLUSTER']._serialized_start=3129 - _globals['_CLUSTER']._serialized_end=3484 - _globals['_CLUSTERTYPE']._serialized_start=3487 - _globals['_CLUSTERTYPE']._serialized_end=3680 - _globals['_CLUSTERGROUP']._serialized_start=3683 - _globals['_CLUSTERGROUP']._serialized_end=3877 - _globals['_VIRTUALMACHINE']._serialized_start=3880 - _globals['_VIRTUALMACHINE']._serialized_end=4614 - _globals['_VMINTERFACE']._serialized_start=4617 - _globals['_VMINTERFACE']._serialized_end=4979 - _globals['_VIRTUALDISK']._serialized_start=4982 - _globals['_VIRTUALDISK']._serialized_end=5232 - _globals['_IPADDRESS']._serialized_start=5235 - _globals['_IPADDRESS']._serialized_end=5759 - _globals['_DEVICETYPE']._serialized_start=5762 - _globals['_DEVICETYPE']._serialized_end=6125 - _globals['_MANUFACTURER']._serialized_start=6128 - _globals['_MANUFACTURER']._serialized_end=6322 - _globals['_PLATFORM']._serialized_start=6325 - _globals['_PLATFORM']._serialized_end=6575 - _globals['_PREFIX']._serialized_start=6578 - _globals['_PREFIX']._serialized_end=6975 - _globals['_ROLE']._serialized_start=6978 - _globals['_ROLE']._serialized_end=7212 - _globals['_SITE']._serialized_start=7215 - _globals['_SITE']._serialized_end=7633 - _globals['_TAG']._serialized_start=7636 - _globals['_TAG']._serialized_end=7769 - _globals['_ENTITY']._serialized_start=7772 - _globals['_ENTITY']._serialized_end=8671 - _globals['_INGESTREQUEST']._serialized_start=8674 - _globals['_INGESTREQUEST']._serialized_end=9030 - _globals['_INGESTRESPONSE']._serialized_start=9032 - _globals['_INGESTRESPONSE']._serialized_end=9072 - _globals['_INGESTERSERVICE']._serialized_start=9074 - _globals['_INGESTERSERVICE']._serialized_end=9154 + _globals['_ASN_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_ASN_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_ASNRANGE_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_ASNRANGE_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_AGGREGATE_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_AGGREGATE_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_CABLE_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_CABLE_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_CABLE'].fields_by_name['type']._loaded_options = None + _globals['_CABLE'].fields_by_name['type']._serialized_options = b'\372B\277\001r\274\001R\003aocR\004cat3R\004cat5R\005cat5eR\004cat6R\005cat6aR\004cat7R\005cat7aR\004cat8R\007coaxialR\ndac-activeR\013dac-passiveR\003mmfR\007mmf-om1R\007mmf-om2R\007mmf-om3R\007mmf-om4R\007mmf-om5R\013mrj21-trunkR\005powerR\003smfR\007smf-os1R\007smf-os2R\003usb' + _globals['_CABLE'].fields_by_name['status']._loaded_options = None + _globals['_CABLE'].fields_by_name['status']._serialized_options = b'\372B\'r%R\tconnectedR\017decommissioningR\007planned' + _globals['_CABLE'].fields_by_name['length_unit']._loaded_options = None + _globals['_CABLE'].fields_by_name['length_unit']._serialized_options = b'\372B\031r\027R\002cmR\002ftR\002inR\002kmR\001mR\002mi' + _globals['_CABLETERMINATION'].fields_by_name['cable_end']._loaded_options = None + _globals['_CABLETERMINATION'].fields_by_name['cable_end']._serialized_options = b'\372B\010r\006R\001AR\001B' + _globals['_CIRCUIT_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_CIRCUIT_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_CIRCUIT'].fields_by_name['status']._loaded_options = None + _globals['_CIRCUIT'].fields_by_name['status']._serialized_options = b'\372BJrHR\006activeR\016decommissionedR\016deprovisioningR\007offlineR\007plannedR\014provisioning' + _globals['_CIRCUIT'].fields_by_name['distance_unit']._loaded_options = None + _globals['_CIRCUIT'].fields_by_name['distance_unit']._serialized_options = b'\372B\021r\017R\002ftR\002kmR\001mR\002mi' + _globals['_CIRCUITGROUP_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_CIRCUITGROUP_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_CIRCUITGROUPASSIGNMENT'].fields_by_name['priority']._loaded_options = None + _globals['_CIRCUITGROUPASSIGNMENT'].fields_by_name['priority']._serialized_options = b'\372B*r(R\010inactiveR\007primaryR\tsecondaryR\010tertiary' + _globals['_CIRCUITTERMINATION_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_CIRCUITTERMINATION_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_CIRCUITTERMINATION'].fields_by_name['term_side']._loaded_options = None + _globals['_CIRCUITTERMINATION'].fields_by_name['term_side']._serialized_options = b'\372B\010r\006R\001AR\001Z' + _globals['_CIRCUITTYPE_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_CIRCUITTYPE_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_CLUSTER_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_CLUSTER_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_CLUSTER'].fields_by_name['status']._loaded_options = None + _globals['_CLUSTER'].fields_by_name['status']._serialized_options = b'\372B6r4R\006activeR\017decommissioningR\007offlineR\007plannedR\007staging' + _globals['_CLUSTERGROUP_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_CLUSTERGROUP_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_CLUSTERTYPE_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_CLUSTERTYPE_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_CONSOLEPORT_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_CONSOLEPORT_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_CONSOLEPORT'].fields_by_name['type']._loaded_options = None + _globals['_CONSOLEPORT'].fields_by_name['type']._serialized_options = b'\372B\215\001r\212\001R\005db-25R\004de-9R\nmini-din-8R\005otherR\005rj-11R\005rj-12R\005rj-45R\005usb-aR\005usb-bR\005usb-cR\013usb-micro-aR\014usb-micro-abR\013usb-micro-bR\nusb-mini-aR\nusb-mini-b' + _globals['_CONSOLEPORT'].fields_by_name['speed']._loaded_options = None + _globals['_CONSOLEPORT'].fields_by_name['speed']._serialized_options = b'\372B\036\"\0340\260\t0\340\0220\300%0\200K0\200\226\0010\200\254\0020\200\302\0030\200\204\007' + _globals['_CONSOLESERVERPORT_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_CONSOLESERVERPORT_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_CONSOLESERVERPORT'].fields_by_name['type']._loaded_options = None + _globals['_CONSOLESERVERPORT'].fields_by_name['type']._serialized_options = b'\372B\215\001r\212\001R\005db-25R\004de-9R\nmini-din-8R\005otherR\005rj-11R\005rj-12R\005rj-45R\005usb-aR\005usb-bR\005usb-cR\013usb-micro-aR\014usb-micro-abR\013usb-micro-bR\nusb-mini-aR\nusb-mini-b' + _globals['_CONSOLESERVERPORT'].fields_by_name['speed']._loaded_options = None + _globals['_CONSOLESERVERPORT'].fields_by_name['speed']._serialized_options = b'\372B\036\"\0340\260\t0\340\0220\300%0\200K0\200\226\0010\200\254\0020\200\302\0030\200\204\007' + _globals['_CONTACT_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_CONTACT_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_CONTACTASSIGNMENT_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_CONTACTASSIGNMENT_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_CONTACTASSIGNMENT'].fields_by_name['priority']._loaded_options = None + _globals['_CONTACTASSIGNMENT'].fields_by_name['priority']._serialized_options = b'\372B*r(R\010inactiveR\007primaryR\tsecondaryR\010tertiary' + _globals['_CONTACTGROUP_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_CONTACTGROUP_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_CONTACTROLE_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_CONTACTROLE_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_DEVICE_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_DEVICE_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_DEVICE'].fields_by_name['face']._loaded_options = None + _globals['_DEVICE'].fields_by_name['face']._serialized_options = b'\372B\017r\rR\005frontR\004rear' + _globals['_DEVICE'].fields_by_name['status']._loaded_options = None + _globals['_DEVICE'].fields_by_name['status']._serialized_options = b'\372BHrFR\006activeR\017decommissioningR\006failedR\tinventoryR\007offlineR\007plannedR\006staged' + _globals['_DEVICE'].fields_by_name['airflow']._loaded_options = None + _globals['_DEVICE'].fields_by_name['airflow']._serialized_options = b'\372B\211\001r\206\001R\rbottom-to-topR\rfront-to-rearR\rleft-to-rightR\005mixedR\007passiveR\rrear-to-frontR\014rear-to-sideR\rright-to-leftR\014side-to-rearR\rtop-to-bottom' + _globals['_DEVICEBAY_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_DEVICEBAY_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_DEVICEROLE_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_DEVICEROLE_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_DEVICETYPE_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_DEVICETYPE_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_DEVICETYPE'].fields_by_name['subdevice_role']._loaded_options = None + _globals['_DEVICETYPE'].fields_by_name['subdevice_role']._serialized_options = b'\372B\021r\017R\005childR\006parent' + _globals['_DEVICETYPE'].fields_by_name['airflow']._loaded_options = None + _globals['_DEVICETYPE'].fields_by_name['airflow']._serialized_options = b'\372B\211\001r\206\001R\rbottom-to-topR\rfront-to-rearR\rleft-to-rightR\005mixedR\007passiveR\rrear-to-frontR\014rear-to-sideR\rright-to-leftR\014side-to-rearR\rtop-to-bottom' + _globals['_DEVICETYPE'].fields_by_name['weight_unit']._loaded_options = None + _globals['_DEVICETYPE'].fields_by_name['weight_unit']._serialized_options = b'\372B\021r\017R\001gR\002kgR\002lbR\002oz' + _globals['_FHRPGROUP_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_FHRPGROUP_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_FHRPGROUP'].fields_by_name['protocol']._loaded_options = None + _globals['_FHRPGROUP'].fields_by_name['protocol']._serialized_options = b'\372B4r2R\004carpR\tclusterxlR\004glbpR\004hsrpR\005otherR\005vrrp2R\005vrrp3' + _globals['_FHRPGROUP'].fields_by_name['auth_type']._loaded_options = None + _globals['_FHRPGROUP'].fields_by_name['auth_type']._serialized_options = b'\372B\022r\020R\003md5R\tplaintext' + _globals['_FRONTPORT_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_FRONTPORT_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_FRONTPORT'].fields_by_name['type']._loaded_options = None + _globals['_FRONTPORT'].fields_by_name['type']._serialized_options = b'\372B\224\003r\221\003R\t110-punchR\0044p2cR\0044p4cR\0046p2cR\0046p4cR\0046p6cR\0048p2cR\0048p4cR\0048p6cR\0048p8cR\003bncR\002csR\001fR\002fcR\004gg45R\002lcR\006lc-apcR\005lc-pcR\006lc-upcR\003lshR\007lsh-apcR\006lsh-pcR\007lsh-upcR\003lx5R\007lx5-apcR\006lx5-pcR\007lx5-upcR\003mpoR\005mrj21R\004mtrjR\001nR\005otherR\002scR\006sc-apcR\005sc-pcR\006sc-upcR\007sma-905R\007sma-906R\002snR\006spliceR\002stR\007tera-1pR\007tera-2pR\007tera-4pR\006urm-p2R\006urm-p4R\006urm-p8R\005usb-aR\005usb-bR\005usb-cR\013usb-micro-aR\014usb-micro-abR\013usb-micro-bR\nusb-mini-aR\nusb-mini-b' + _globals['_IKEPOLICY_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_IKEPOLICY_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_IKEPOLICY'].fields_by_name['version']._loaded_options = None + _globals['_IKEPOLICY'].fields_by_name['version']._serialized_options = b'\372B\006\"\0040\0010\002' + _globals['_IKEPOLICY'].fields_by_name['mode']._loaded_options = None + _globals['_IKEPOLICY'].fields_by_name['mode']._serialized_options = b'\372B\024r\022R\naggressiveR\004main' + _globals['_IKEPROPOSAL_CUSTOMFIELDSENTRY']._loaded_options = None + _globals['_IKEPROPOSAL_CUSTOMFIELDSENTRY']._serialized_options = b'8\001' + _globals['_IKEPROPOSAL'].fields_by_name['authentication_method']._loaded_options = None + _globals['_IKEPROPOSAL'].fields_by_name['authentication_method']._serialized_options = b'\372B@r>R\014certificatesR\016dsa-signaturesR\016preshared-keysR\016rsa-signatures' + _globals['_IKEPROPOSAL'].fields_by_name['encryption_algorithm']._loaded_options = None + _globals['_IKEPROPOSAL'].fields_by_name['encryption_algorithm']._serialized_options = b'\372BcraR\0103des-cbcR\013aes-128-cbcR\013aes-128-gcmR\013aes-192-cbcR\013aes-192-gcmR\013aes-256-cbcR\013aes-256-gcmR\007des-cbc' + _globals['_IKEPROPOSAL'].fields_by_name['authentication_algorithm']._loaded_options = None + _globals['_IKEPROPOSAL'].fields_by_name['authentication_algorithm']._serialized_options = b'\372B>rr None: ... + +class IngestRequest(_message.Message): + __slots__ = ("stream", "entities", "id", "producer_app_name", "producer_app_version", "sdk_name", "sdk_version") + STREAM_FIELD_NUMBER: _ClassVar[int] + ENTITIES_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + PRODUCER_APP_NAME_FIELD_NUMBER: _ClassVar[int] + PRODUCER_APP_VERSION_FIELD_NUMBER: _ClassVar[int] + SDK_NAME_FIELD_NUMBER: _ClassVar[int] + SDK_VERSION_FIELD_NUMBER: _ClassVar[int] + stream: str + entities: _containers.RepeatedCompositeFieldContainer[Entity] + id: str + producer_app_name: str + producer_app_version: str + sdk_name: str + sdk_version: str + def __init__(self, stream: _Optional[str] = ..., entities: _Optional[_Iterable[_Union[Entity, _Mapping]]] = ..., id: _Optional[str] = ..., producer_app_name: _Optional[str] = ..., producer_app_version: _Optional[str] = ..., sdk_name: _Optional[str] = ..., sdk_version: _Optional[str] = ...) -> None: ... + +class IngestResponse(_message.Message): + __slots__ = ("errors",) + ERRORS_FIELD_NUMBER: _ClassVar[int] + errors: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, errors: _Optional[_Iterable[str]] = ...) -> None: ... + +class ASN(_message.Message): + __slots__ = ("asn", "rir", "tenant", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + ASN_FIELD_NUMBER: _ClassVar[int] + RIR_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + asn: int + rir: RIR + tenant: Tenant + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, asn: _Optional[int] = ..., rir: _Optional[_Union[RIR, _Mapping]] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class ASNRange(_message.Message): + __slots__ = ("name", "slug", "rir", "start", "end", "tenant", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + RIR_FIELD_NUMBER: _ClassVar[int] + START_FIELD_NUMBER: _ClassVar[int] + END_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + rir: RIR + start: int + end: int + tenant: Tenant + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., rir: _Optional[_Union[RIR, _Mapping]] = ..., start: _Optional[int] = ..., end: _Optional[int] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Aggregate(_message.Message): + __slots__ = ("prefix", "rir", "tenant", "date_added", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + PREFIX_FIELD_NUMBER: _ClassVar[int] + RIR_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + DATE_ADDED_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + prefix: str + rir: RIR + tenant: Tenant + date_added: _timestamp_pb2.Timestamp + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, prefix: _Optional[str] = ..., rir: _Optional[_Union[RIR, _Mapping]] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., date_added: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Cable(_message.Message): + __slots__ = ("type", "a_terminations", "b_terminations", "status", "tenant", "label", "color", "length", "length_unit", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + TYPE_FIELD_NUMBER: _ClassVar[int] + A_TERMINATIONS_FIELD_NUMBER: _ClassVar[int] + B_TERMINATIONS_FIELD_NUMBER: _ClassVar[int] STATUS_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + LABEL_FIELD_NUMBER: _ClassVar[int] + COLOR_FIELD_NUMBER: _ClassVar[int] + LENGTH_FIELD_NUMBER: _ClassVar[int] + LENGTH_UNIT_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] COMMENTS_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] - PRIMARY_IP4_FIELD_NUMBER: _ClassVar[int] - PRIMARY_IP6_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + type: str + a_terminations: _containers.RepeatedCompositeFieldContainer[GenericObject] + b_terminations: _containers.RepeatedCompositeFieldContainer[GenericObject] + status: str + tenant: Tenant + label: str + color: str + length: float + length_unit: str + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, type: _Optional[str] = ..., a_terminations: _Optional[_Iterable[_Union[GenericObject, _Mapping]]] = ..., b_terminations: _Optional[_Iterable[_Union[GenericObject, _Mapping]]] = ..., status: _Optional[str] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., label: _Optional[str] = ..., color: _Optional[str] = ..., length: _Optional[float] = ..., length_unit: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class CablePath(_message.Message): + __slots__ = ("is_active", "is_complete", "is_split") + IS_ACTIVE_FIELD_NUMBER: _ClassVar[int] + IS_COMPLETE_FIELD_NUMBER: _ClassVar[int] + IS_SPLIT_FIELD_NUMBER: _ClassVar[int] + is_active: bool + is_complete: bool + is_split: bool + def __init__(self, is_active: bool = ..., is_complete: bool = ..., is_split: bool = ...) -> None: ... + +class CableTermination(_message.Message): + __slots__ = ("cable", "cable_end", "termination_circuit_termination", "termination_console_port", "termination_console_server_port", "termination_front_port", "termination_interface", "termination_power_feed", "termination_power_outlet", "termination_power_port", "termination_rear_port") + CABLE_FIELD_NUMBER: _ClassVar[int] + CABLE_END_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CIRCUIT_TERMINATION_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CONSOLE_PORT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CONSOLE_SERVER_PORT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_FRONT_PORT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_INTERFACE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_POWER_FEED_FIELD_NUMBER: _ClassVar[int] + TERMINATION_POWER_OUTLET_FIELD_NUMBER: _ClassVar[int] + TERMINATION_POWER_PORT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_REAR_PORT_FIELD_NUMBER: _ClassVar[int] + cable: Cable + cable_end: str + termination_circuit_termination: CircuitTermination + termination_console_port: ConsolePort + termination_console_server_port: ConsoleServerPort + termination_front_port: FrontPort + termination_interface: Interface + termination_power_feed: PowerFeed + termination_power_outlet: PowerOutlet + termination_power_port: PowerPort + termination_rear_port: RearPort + def __init__(self, cable: _Optional[_Union[Cable, _Mapping]] = ..., cable_end: _Optional[str] = ..., termination_circuit_termination: _Optional[_Union[CircuitTermination, _Mapping]] = ..., termination_console_port: _Optional[_Union[ConsolePort, _Mapping]] = ..., termination_console_server_port: _Optional[_Union[ConsoleServerPort, _Mapping]] = ..., termination_front_port: _Optional[_Union[FrontPort, _Mapping]] = ..., termination_interface: _Optional[_Union[Interface, _Mapping]] = ..., termination_power_feed: _Optional[_Union[PowerFeed, _Mapping]] = ..., termination_power_outlet: _Optional[_Union[PowerOutlet, _Mapping]] = ..., termination_power_port: _Optional[_Union[PowerPort, _Mapping]] = ..., termination_rear_port: _Optional[_Union[RearPort, _Mapping]] = ...) -> None: ... + +class Circuit(_message.Message): + __slots__ = ("cid", "provider", "provider_account", "type", "status", "tenant", "install_date", "termination_date", "commit_rate", "description", "distance", "distance_unit", "comments", "tags", "assignments", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + CID_FIELD_NUMBER: _ClassVar[int] + PROVIDER_FIELD_NUMBER: _ClassVar[int] + PROVIDER_ACCOUNT_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + INSTALL_DATE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_DATE_FIELD_NUMBER: _ClassVar[int] + COMMIT_RATE_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + DISTANCE_FIELD_NUMBER: _ClassVar[int] + DISTANCE_UNIT_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + ASSIGNMENTS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + cid: str + provider: Provider + provider_account: ProviderAccount + type: CircuitType + status: str + tenant: Tenant + install_date: _timestamp_pb2.Timestamp + termination_date: _timestamp_pb2.Timestamp + commit_rate: int + description: str + distance: float + distance_unit: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + assignments: _containers.RepeatedCompositeFieldContainer[CircuitGroupAssignment] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, cid: _Optional[str] = ..., provider: _Optional[_Union[Provider, _Mapping]] = ..., provider_account: _Optional[_Union[ProviderAccount, _Mapping]] = ..., type: _Optional[_Union[CircuitType, _Mapping]] = ..., status: _Optional[str] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., install_date: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., termination_date: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., commit_rate: _Optional[int] = ..., description: _Optional[str] = ..., distance: _Optional[float] = ..., distance_unit: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., assignments: _Optional[_Iterable[_Union[CircuitGroupAssignment, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class CircuitGroup(_message.Message): + __slots__ = ("name", "slug", "description", "tenant", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] name: str - device_fqdn: str - device_type: DeviceType - role: Role - platform: Platform - serial: str - site: Site - asset_tag: str + slug: str + description: str + tenant: Tenant + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., description: _Optional[str] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class CircuitGroupAssignment(_message.Message): + __slots__ = ("group", "member_circuit", "member_virtual_circuit", "priority", "tags") + GROUP_FIELD_NUMBER: _ClassVar[int] + MEMBER_CIRCUIT_FIELD_NUMBER: _ClassVar[int] + MEMBER_VIRTUAL_CIRCUIT_FIELD_NUMBER: _ClassVar[int] + PRIORITY_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + group: CircuitGroup + member_circuit: Circuit + member_virtual_circuit: VirtualCircuit + priority: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + def __init__(self, group: _Optional[_Union[CircuitGroup, _Mapping]] = ..., member_circuit: _Optional[_Union[Circuit, _Mapping]] = ..., member_virtual_circuit: _Optional[_Union[VirtualCircuit, _Mapping]] = ..., priority: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ...) -> None: ... + +class CircuitTermination(_message.Message): + __slots__ = ("circuit", "term_side", "termination_location", "termination_provider_network", "termination_region", "termination_site", "termination_site_group", "port_speed", "upstream_speed", "xconnect_id", "pp_info", "description", "mark_connected", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + CIRCUIT_FIELD_NUMBER: _ClassVar[int] + TERM_SIDE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_LOCATION_FIELD_NUMBER: _ClassVar[int] + TERMINATION_PROVIDER_NETWORK_FIELD_NUMBER: _ClassVar[int] + TERMINATION_REGION_FIELD_NUMBER: _ClassVar[int] + TERMINATION_SITE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_SITE_GROUP_FIELD_NUMBER: _ClassVar[int] + PORT_SPEED_FIELD_NUMBER: _ClassVar[int] + UPSTREAM_SPEED_FIELD_NUMBER: _ClassVar[int] + XCONNECT_ID_FIELD_NUMBER: _ClassVar[int] + PP_INFO_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + MARK_CONNECTED_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + circuit: Circuit + term_side: str + termination_location: Location + termination_provider_network: ProviderNetwork + termination_region: Region + termination_site: Site + termination_site_group: SiteGroup + port_speed: int + upstream_speed: int + xconnect_id: str + pp_info: str + description: str + mark_connected: bool + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, circuit: _Optional[_Union[Circuit, _Mapping]] = ..., term_side: _Optional[str] = ..., termination_location: _Optional[_Union[Location, _Mapping]] = ..., termination_provider_network: _Optional[_Union[ProviderNetwork, _Mapping]] = ..., termination_region: _Optional[_Union[Region, _Mapping]] = ..., termination_site: _Optional[_Union[Site, _Mapping]] = ..., termination_site_group: _Optional[_Union[SiteGroup, _Mapping]] = ..., port_speed: _Optional[int] = ..., upstream_speed: _Optional[int] = ..., xconnect_id: _Optional[str] = ..., pp_info: _Optional[str] = ..., description: _Optional[str] = ..., mark_connected: bool = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class CircuitType(_message.Message): + __slots__ = ("name", "slug", "color", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + COLOR_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + color: str + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., color: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Cluster(_message.Message): + __slots__ = ("name", "type", "group", "status", "tenant", "scope_location", "scope_region", "scope_site", "scope_site_group", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + GROUP_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + SCOPE_LOCATION_FIELD_NUMBER: _ClassVar[int] + SCOPE_REGION_FIELD_NUMBER: _ClassVar[int] + SCOPE_SITE_FIELD_NUMBER: _ClassVar[int] + SCOPE_SITE_GROUP_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + type: ClusterType + group: ClusterGroup status: str + tenant: Tenant + scope_location: Location + scope_region: Region + scope_site: Site + scope_site_group: SiteGroup description: str comments: str tags: _containers.RepeatedCompositeFieldContainer[Tag] - primary_ip4: IPAddress - primary_ip6: IPAddress - def __init__(self, name: _Optional[str] = ..., device_fqdn: _Optional[str] = ..., device_type: _Optional[_Union[DeviceType, _Mapping]] = ..., role: _Optional[_Union[Role, _Mapping]] = ..., platform: _Optional[_Union[Platform, _Mapping]] = ..., serial: _Optional[str] = ..., site: _Optional[_Union[Site, _Mapping]] = ..., asset_tag: _Optional[str] = ..., status: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., primary_ip4: _Optional[_Union[IPAddress, _Mapping]] = ..., primary_ip6: _Optional[_Union[IPAddress, _Mapping]] = ...) -> None: ... + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., type: _Optional[_Union[ClusterType, _Mapping]] = ..., group: _Optional[_Union[ClusterGroup, _Mapping]] = ..., status: _Optional[str] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., scope_location: _Optional[_Union[Location, _Mapping]] = ..., scope_region: _Optional[_Union[Region, _Mapping]] = ..., scope_site: _Optional[_Union[Site, _Mapping]] = ..., scope_site_group: _Optional[_Union[SiteGroup, _Mapping]] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... -class Interface(_message.Message): - __slots__ = ("device", "name", "label", "type", "enabled", "mtu", "mac_address", "speed", "wwn", "mgmt_only", "description", "mark_connected", "mode", "tags") +class ClusterGroup(_message.Message): + __slots__ = ("name", "slug", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class ClusterType(_message.Message): + __slots__ = ("name", "slug", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class ConsolePort(_message.Message): + __slots__ = ("device", "module", "name", "label", "type", "speed", "description", "mark_connected", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... DEVICE_FIELD_NUMBER: _ClassVar[int] + MODULE_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] LABEL_FIELD_NUMBER: _ClassVar[int] TYPE_FIELD_NUMBER: _ClassVar[int] - ENABLED_FIELD_NUMBER: _ClassVar[int] - MTU_FIELD_NUMBER: _ClassVar[int] - MAC_ADDRESS_FIELD_NUMBER: _ClassVar[int] SPEED_FIELD_NUMBER: _ClassVar[int] - WWN_FIELD_NUMBER: _ClassVar[int] - MGMT_ONLY_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] MARK_CONNECTED_FIELD_NUMBER: _ClassVar[int] - MODE_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] device: Device + module: Module name: str label: str type: str - enabled: bool - mtu: int - mac_address: str speed: int - wwn: str - mgmt_only: bool description: str mark_connected: bool - mode: str tags: _containers.RepeatedCompositeFieldContainer[Tag] - def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ..., name: _Optional[str] = ..., label: _Optional[str] = ..., type: _Optional[str] = ..., enabled: bool = ..., mtu: _Optional[int] = ..., mac_address: _Optional[str] = ..., speed: _Optional[int] = ..., wwn: _Optional[str] = ..., mgmt_only: bool = ..., description: _Optional[str] = ..., mark_connected: bool = ..., mode: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ...) -> None: ... + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ..., module: _Optional[_Union[Module, _Mapping]] = ..., name: _Optional[str] = ..., label: _Optional[str] = ..., type: _Optional[str] = ..., speed: _Optional[int] = ..., description: _Optional[str] = ..., mark_connected: bool = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class ConsoleServerPort(_message.Message): + __slots__ = ("device", "module", "name", "label", "type", "speed", "description", "mark_connected", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + DEVICE_FIELD_NUMBER: _ClassVar[int] + MODULE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + LABEL_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + SPEED_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + MARK_CONNECTED_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + device: Device + module: Module + name: str + label: str + type: str + speed: int + description: str + mark_connected: bool + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ..., module: _Optional[_Union[Module, _Mapping]] = ..., name: _Optional[str] = ..., label: _Optional[str] = ..., type: _Optional[str] = ..., speed: _Optional[int] = ..., description: _Optional[str] = ..., mark_connected: bool = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Contact(_message.Message): + __slots__ = ("group", "name", "title", "phone", "email", "address", "link", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + GROUP_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + TITLE_FIELD_NUMBER: _ClassVar[int] + PHONE_FIELD_NUMBER: _ClassVar[int] + EMAIL_FIELD_NUMBER: _ClassVar[int] + ADDRESS_FIELD_NUMBER: _ClassVar[int] + LINK_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + group: ContactGroup + name: str + title: str + phone: str + email: str + address: str + link: str + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, group: _Optional[_Union[ContactGroup, _Mapping]] = ..., name: _Optional[str] = ..., title: _Optional[str] = ..., phone: _Optional[str] = ..., email: _Optional[str] = ..., address: _Optional[str] = ..., link: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class ContactAssignment(_message.Message): + __slots__ = ("object_asn", "object_asn_range", "object_aggregate", "object_cable", "object_cable_path", "object_cable_termination", "object_circuit", "object_circuit_group", "object_circuit_group_assignment", "object_circuit_termination", "object_circuit_type", "object_cluster", "object_cluster_group", "object_cluster_type", "object_console_port", "object_console_server_port", "object_contact", "object_contact_assignment", "object_contact_group", "object_contact_role", "object_device", "object_device_bay", "object_device_role", "object_device_type", "object_fhrp_group", "object_fhrp_group_assignment", "object_front_port", "object_ike_policy", "object_ike_proposal", "object_ip_address", "object_ip_range", "object_ip_sec_policy", "object_ip_sec_profile", "object_ip_sec_proposal", "object_interface", "object_inventory_item", "object_inventory_item_role", "object_l2vpn", "object_l2vpn_termination", "object_location", "object_mac_address", "object_manufacturer", "object_module", "object_module_bay", "object_module_type", "object_platform", "object_power_feed", "object_power_outlet", "object_power_panel", "object_power_port", "object_prefix", "object_provider", "object_provider_account", "object_provider_network", "object_rir", "object_rack", "object_rack_reservation", "object_rack_role", "object_rack_type", "object_rear_port", "object_region", "object_role", "object_route_target", "object_service", "object_site", "object_site_group", "object_tag", "object_tenant", "object_tenant_group", "object_tunnel", "object_tunnel_group", "object_tunnel_termination", "object_vlan", "object_vlan_group", "object_vlan_translation_policy", "object_vlan_translation_rule", "object_vm_interface", "object_vrf", "object_virtual_chassis", "object_virtual_circuit", "object_virtual_circuit_termination", "object_virtual_circuit_type", "object_virtual_device_context", "object_virtual_disk", "object_virtual_machine", "object_wireless_lan", "object_wireless_lan_group", "object_wireless_link", "contact", "role", "priority", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + OBJECT_ASN_FIELD_NUMBER: _ClassVar[int] + OBJECT_ASN_RANGE_FIELD_NUMBER: _ClassVar[int] + OBJECT_AGGREGATE_FIELD_NUMBER: _ClassVar[int] + OBJECT_CABLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_CABLE_PATH_FIELD_NUMBER: _ClassVar[int] + OBJECT_CABLE_TERMINATION_FIELD_NUMBER: _ClassVar[int] + OBJECT_CIRCUIT_FIELD_NUMBER: _ClassVar[int] + OBJECT_CIRCUIT_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_CIRCUIT_GROUP_ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] + OBJECT_CIRCUIT_TERMINATION_FIELD_NUMBER: _ClassVar[int] + OBJECT_CIRCUIT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_CLUSTER_FIELD_NUMBER: _ClassVar[int] + OBJECT_CLUSTER_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_CLUSTER_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_CONSOLE_PORT_FIELD_NUMBER: _ClassVar[int] + OBJECT_CONSOLE_SERVER_PORT_FIELD_NUMBER: _ClassVar[int] + OBJECT_CONTACT_FIELD_NUMBER: _ClassVar[int] + OBJECT_CONTACT_ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] + OBJECT_CONTACT_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_CONTACT_ROLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_DEVICE_FIELD_NUMBER: _ClassVar[int] + OBJECT_DEVICE_BAY_FIELD_NUMBER: _ClassVar[int] + OBJECT_DEVICE_ROLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_DEVICE_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_FHRP_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_FHRP_GROUP_ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] + OBJECT_FRONT_PORT_FIELD_NUMBER: _ClassVar[int] + OBJECT_IKE_POLICY_FIELD_NUMBER: _ClassVar[int] + OBJECT_IKE_PROPOSAL_FIELD_NUMBER: _ClassVar[int] + OBJECT_IP_ADDRESS_FIELD_NUMBER: _ClassVar[int] + OBJECT_IP_RANGE_FIELD_NUMBER: _ClassVar[int] + OBJECT_IP_SEC_POLICY_FIELD_NUMBER: _ClassVar[int] + OBJECT_IP_SEC_PROFILE_FIELD_NUMBER: _ClassVar[int] + OBJECT_IP_SEC_PROPOSAL_FIELD_NUMBER: _ClassVar[int] + OBJECT_INTERFACE_FIELD_NUMBER: _ClassVar[int] + OBJECT_INVENTORY_ITEM_FIELD_NUMBER: _ClassVar[int] + OBJECT_INVENTORY_ITEM_ROLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_L2VPN_FIELD_NUMBER: _ClassVar[int] + OBJECT_L2VPN_TERMINATION_FIELD_NUMBER: _ClassVar[int] + OBJECT_LOCATION_FIELD_NUMBER: _ClassVar[int] + OBJECT_MAC_ADDRESS_FIELD_NUMBER: _ClassVar[int] + OBJECT_MANUFACTURER_FIELD_NUMBER: _ClassVar[int] + OBJECT_MODULE_FIELD_NUMBER: _ClassVar[int] + OBJECT_MODULE_BAY_FIELD_NUMBER: _ClassVar[int] + OBJECT_MODULE_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_PLATFORM_FIELD_NUMBER: _ClassVar[int] + OBJECT_POWER_FEED_FIELD_NUMBER: _ClassVar[int] + OBJECT_POWER_OUTLET_FIELD_NUMBER: _ClassVar[int] + OBJECT_POWER_PANEL_FIELD_NUMBER: _ClassVar[int] + OBJECT_POWER_PORT_FIELD_NUMBER: _ClassVar[int] + OBJECT_PREFIX_FIELD_NUMBER: _ClassVar[int] + OBJECT_PROVIDER_FIELD_NUMBER: _ClassVar[int] + OBJECT_PROVIDER_ACCOUNT_FIELD_NUMBER: _ClassVar[int] + OBJECT_PROVIDER_NETWORK_FIELD_NUMBER: _ClassVar[int] + OBJECT_RIR_FIELD_NUMBER: _ClassVar[int] + OBJECT_RACK_FIELD_NUMBER: _ClassVar[int] + OBJECT_RACK_RESERVATION_FIELD_NUMBER: _ClassVar[int] + OBJECT_RACK_ROLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_RACK_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_REAR_PORT_FIELD_NUMBER: _ClassVar[int] + OBJECT_REGION_FIELD_NUMBER: _ClassVar[int] + OBJECT_ROLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ROUTE_TARGET_FIELD_NUMBER: _ClassVar[int] + OBJECT_SERVICE_FIELD_NUMBER: _ClassVar[int] + OBJECT_SITE_FIELD_NUMBER: _ClassVar[int] + OBJECT_SITE_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_TAG_FIELD_NUMBER: _ClassVar[int] + OBJECT_TENANT_FIELD_NUMBER: _ClassVar[int] + OBJECT_TENANT_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_TUNNEL_FIELD_NUMBER: _ClassVar[int] + OBJECT_TUNNEL_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_TUNNEL_TERMINATION_FIELD_NUMBER: _ClassVar[int] + OBJECT_VLAN_FIELD_NUMBER: _ClassVar[int] + OBJECT_VLAN_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_VLAN_TRANSLATION_POLICY_FIELD_NUMBER: _ClassVar[int] + OBJECT_VLAN_TRANSLATION_RULE_FIELD_NUMBER: _ClassVar[int] + OBJECT_VM_INTERFACE_FIELD_NUMBER: _ClassVar[int] + OBJECT_VRF_FIELD_NUMBER: _ClassVar[int] + OBJECT_VIRTUAL_CHASSIS_FIELD_NUMBER: _ClassVar[int] + OBJECT_VIRTUAL_CIRCUIT_FIELD_NUMBER: _ClassVar[int] + OBJECT_VIRTUAL_CIRCUIT_TERMINATION_FIELD_NUMBER: _ClassVar[int] + OBJECT_VIRTUAL_CIRCUIT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_VIRTUAL_DEVICE_CONTEXT_FIELD_NUMBER: _ClassVar[int] + OBJECT_VIRTUAL_DISK_FIELD_NUMBER: _ClassVar[int] + OBJECT_VIRTUAL_MACHINE_FIELD_NUMBER: _ClassVar[int] + OBJECT_WIRELESS_LAN_FIELD_NUMBER: _ClassVar[int] + OBJECT_WIRELESS_LAN_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_WIRELESS_LINK_FIELD_NUMBER: _ClassVar[int] + CONTACT_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + PRIORITY_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + object_asn: ASN + object_asn_range: ASNRange + object_aggregate: Aggregate + object_cable: Cable + object_cable_path: CablePath + object_cable_termination: CableTermination + object_circuit: Circuit + object_circuit_group: CircuitGroup + object_circuit_group_assignment: CircuitGroupAssignment + object_circuit_termination: CircuitTermination + object_circuit_type: CircuitType + object_cluster: Cluster + object_cluster_group: ClusterGroup + object_cluster_type: ClusterType + object_console_port: ConsolePort + object_console_server_port: ConsoleServerPort + object_contact: Contact + object_contact_assignment: ContactAssignment + object_contact_group: ContactGroup + object_contact_role: ContactRole + object_device: Device + object_device_bay: DeviceBay + object_device_role: DeviceRole + object_device_type: DeviceType + object_fhrp_group: FHRPGroup + object_fhrp_group_assignment: FHRPGroupAssignment + object_front_port: FrontPort + object_ike_policy: IKEPolicy + object_ike_proposal: IKEProposal + object_ip_address: IPAddress + object_ip_range: IPRange + object_ip_sec_policy: IPSecPolicy + object_ip_sec_profile: IPSecProfile + object_ip_sec_proposal: IPSecProposal + object_interface: Interface + object_inventory_item: InventoryItem + object_inventory_item_role: InventoryItemRole + object_l2vpn: L2VPN + object_l2vpn_termination: L2VPNTermination + object_location: Location + object_mac_address: MACAddress + object_manufacturer: Manufacturer + object_module: Module + object_module_bay: ModuleBay + object_module_type: ModuleType + object_platform: Platform + object_power_feed: PowerFeed + object_power_outlet: PowerOutlet + object_power_panel: PowerPanel + object_power_port: PowerPort + object_prefix: Prefix + object_provider: Provider + object_provider_account: ProviderAccount + object_provider_network: ProviderNetwork + object_rir: RIR + object_rack: Rack + object_rack_reservation: RackReservation + object_rack_role: RackRole + object_rack_type: RackType + object_rear_port: RearPort + object_region: Region + object_role: Role + object_route_target: RouteTarget + object_service: Service + object_site: Site + object_site_group: SiteGroup + object_tag: Tag + object_tenant: Tenant + object_tenant_group: TenantGroup + object_tunnel: Tunnel + object_tunnel_group: TunnelGroup + object_tunnel_termination: TunnelTermination + object_vlan: VLAN + object_vlan_group: VLANGroup + object_vlan_translation_policy: VLANTranslationPolicy + object_vlan_translation_rule: VLANTranslationRule + object_vm_interface: VMInterface + object_vrf: VRF + object_virtual_chassis: VirtualChassis + object_virtual_circuit: VirtualCircuit + object_virtual_circuit_termination: VirtualCircuitTermination + object_virtual_circuit_type: VirtualCircuitType + object_virtual_device_context: VirtualDeviceContext + object_virtual_disk: VirtualDisk + object_virtual_machine: VirtualMachine + object_wireless_lan: WirelessLAN + object_wireless_lan_group: WirelessLANGroup + object_wireless_link: WirelessLink + contact: Contact + role: ContactRole + priority: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, object_asn: _Optional[_Union[ASN, _Mapping]] = ..., object_asn_range: _Optional[_Union[ASNRange, _Mapping]] = ..., object_aggregate: _Optional[_Union[Aggregate, _Mapping]] = ..., object_cable: _Optional[_Union[Cable, _Mapping]] = ..., object_cable_path: _Optional[_Union[CablePath, _Mapping]] = ..., object_cable_termination: _Optional[_Union[CableTermination, _Mapping]] = ..., object_circuit: _Optional[_Union[Circuit, _Mapping]] = ..., object_circuit_group: _Optional[_Union[CircuitGroup, _Mapping]] = ..., object_circuit_group_assignment: _Optional[_Union[CircuitGroupAssignment, _Mapping]] = ..., object_circuit_termination: _Optional[_Union[CircuitTermination, _Mapping]] = ..., object_circuit_type: _Optional[_Union[CircuitType, _Mapping]] = ..., object_cluster: _Optional[_Union[Cluster, _Mapping]] = ..., object_cluster_group: _Optional[_Union[ClusterGroup, _Mapping]] = ..., object_cluster_type: _Optional[_Union[ClusterType, _Mapping]] = ..., object_console_port: _Optional[_Union[ConsolePort, _Mapping]] = ..., object_console_server_port: _Optional[_Union[ConsoleServerPort, _Mapping]] = ..., object_contact: _Optional[_Union[Contact, _Mapping]] = ..., object_contact_assignment: _Optional[_Union[ContactAssignment, _Mapping]] = ..., object_contact_group: _Optional[_Union[ContactGroup, _Mapping]] = ..., object_contact_role: _Optional[_Union[ContactRole, _Mapping]] = ..., object_device: _Optional[_Union[Device, _Mapping]] = ..., object_device_bay: _Optional[_Union[DeviceBay, _Mapping]] = ..., object_device_role: _Optional[_Union[DeviceRole, _Mapping]] = ..., object_device_type: _Optional[_Union[DeviceType, _Mapping]] = ..., object_fhrp_group: _Optional[_Union[FHRPGroup, _Mapping]] = ..., object_fhrp_group_assignment: _Optional[_Union[FHRPGroupAssignment, _Mapping]] = ..., object_front_port: _Optional[_Union[FrontPort, _Mapping]] = ..., object_ike_policy: _Optional[_Union[IKEPolicy, _Mapping]] = ..., object_ike_proposal: _Optional[_Union[IKEProposal, _Mapping]] = ..., object_ip_address: _Optional[_Union[IPAddress, _Mapping]] = ..., object_ip_range: _Optional[_Union[IPRange, _Mapping]] = ..., object_ip_sec_policy: _Optional[_Union[IPSecPolicy, _Mapping]] = ..., object_ip_sec_profile: _Optional[_Union[IPSecProfile, _Mapping]] = ..., object_ip_sec_proposal: _Optional[_Union[IPSecProposal, _Mapping]] = ..., object_interface: _Optional[_Union[Interface, _Mapping]] = ..., object_inventory_item: _Optional[_Union[InventoryItem, _Mapping]] = ..., object_inventory_item_role: _Optional[_Union[InventoryItemRole, _Mapping]] = ..., object_l2vpn: _Optional[_Union[L2VPN, _Mapping]] = ..., object_l2vpn_termination: _Optional[_Union[L2VPNTermination, _Mapping]] = ..., object_location: _Optional[_Union[Location, _Mapping]] = ..., object_mac_address: _Optional[_Union[MACAddress, _Mapping]] = ..., object_manufacturer: _Optional[_Union[Manufacturer, _Mapping]] = ..., object_module: _Optional[_Union[Module, _Mapping]] = ..., object_module_bay: _Optional[_Union[ModuleBay, _Mapping]] = ..., object_module_type: _Optional[_Union[ModuleType, _Mapping]] = ..., object_platform: _Optional[_Union[Platform, _Mapping]] = ..., object_power_feed: _Optional[_Union[PowerFeed, _Mapping]] = ..., object_power_outlet: _Optional[_Union[PowerOutlet, _Mapping]] = ..., object_power_panel: _Optional[_Union[PowerPanel, _Mapping]] = ..., object_power_port: _Optional[_Union[PowerPort, _Mapping]] = ..., object_prefix: _Optional[_Union[Prefix, _Mapping]] = ..., object_provider: _Optional[_Union[Provider, _Mapping]] = ..., object_provider_account: _Optional[_Union[ProviderAccount, _Mapping]] = ..., object_provider_network: _Optional[_Union[ProviderNetwork, _Mapping]] = ..., object_rir: _Optional[_Union[RIR, _Mapping]] = ..., object_rack: _Optional[_Union[Rack, _Mapping]] = ..., object_rack_reservation: _Optional[_Union[RackReservation, _Mapping]] = ..., object_rack_role: _Optional[_Union[RackRole, _Mapping]] = ..., object_rack_type: _Optional[_Union[RackType, _Mapping]] = ..., object_rear_port: _Optional[_Union[RearPort, _Mapping]] = ..., object_region: _Optional[_Union[Region, _Mapping]] = ..., object_role: _Optional[_Union[Role, _Mapping]] = ..., object_route_target: _Optional[_Union[RouteTarget, _Mapping]] = ..., object_service: _Optional[_Union[Service, _Mapping]] = ..., object_site: _Optional[_Union[Site, _Mapping]] = ..., object_site_group: _Optional[_Union[SiteGroup, _Mapping]] = ..., object_tag: _Optional[_Union[Tag, _Mapping]] = ..., object_tenant: _Optional[_Union[Tenant, _Mapping]] = ..., object_tenant_group: _Optional[_Union[TenantGroup, _Mapping]] = ..., object_tunnel: _Optional[_Union[Tunnel, _Mapping]] = ..., object_tunnel_group: _Optional[_Union[TunnelGroup, _Mapping]] = ..., object_tunnel_termination: _Optional[_Union[TunnelTermination, _Mapping]] = ..., object_vlan: _Optional[_Union[VLAN, _Mapping]] = ..., object_vlan_group: _Optional[_Union[VLANGroup, _Mapping]] = ..., object_vlan_translation_policy: _Optional[_Union[VLANTranslationPolicy, _Mapping]] = ..., object_vlan_translation_rule: _Optional[_Union[VLANTranslationRule, _Mapping]] = ..., object_vm_interface: _Optional[_Union[VMInterface, _Mapping]] = ..., object_vrf: _Optional[_Union[VRF, _Mapping]] = ..., object_virtual_chassis: _Optional[_Union[VirtualChassis, _Mapping]] = ..., object_virtual_circuit: _Optional[_Union[VirtualCircuit, _Mapping]] = ..., object_virtual_circuit_termination: _Optional[_Union[VirtualCircuitTermination, _Mapping]] = ..., object_virtual_circuit_type: _Optional[_Union[VirtualCircuitType, _Mapping]] = ..., object_virtual_device_context: _Optional[_Union[VirtualDeviceContext, _Mapping]] = ..., object_virtual_disk: _Optional[_Union[VirtualDisk, _Mapping]] = ..., object_virtual_machine: _Optional[_Union[VirtualMachine, _Mapping]] = ..., object_wireless_lan: _Optional[_Union[WirelessLAN, _Mapping]] = ..., object_wireless_lan_group: _Optional[_Union[WirelessLANGroup, _Mapping]] = ..., object_wireless_link: _Optional[_Union[WirelessLink, _Mapping]] = ..., contact: _Optional[_Union[Contact, _Mapping]] = ..., role: _Optional[_Union[ContactRole, _Mapping]] = ..., priority: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class ContactGroup(_message.Message): + __slots__ = ("name", "slug", "parent", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + PARENT_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + parent: ContactGroup + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., parent: _Optional[_Union[ContactGroup, _Mapping]] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class ContactRole(_message.Message): + __slots__ = ("name", "slug", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class CustomFieldObjectReference(_message.Message): + __slots__ = ("asn", "asn_range", "aggregate", "cable", "cable_path", "cable_termination", "circuit", "circuit_group", "circuit_group_assignment", "circuit_termination", "circuit_type", "cluster", "cluster_group", "cluster_type", "console_port", "console_server_port", "contact", "contact_assignment", "contact_group", "contact_role", "device", "device_bay", "device_role", "device_type", "fhrp_group", "fhrp_group_assignment", "front_port", "ike_policy", "ike_proposal", "ip_address", "ip_range", "ip_sec_policy", "ip_sec_profile", "ip_sec_proposal", "interface", "inventory_item", "inventory_item_role", "l2vpn", "l2vpn_termination", "location", "mac_address", "manufacturer", "module", "module_bay", "module_type", "platform", "power_feed", "power_outlet", "power_panel", "power_port", "prefix", "provider", "provider_account", "provider_network", "rir", "rack", "rack_reservation", "rack_role", "rack_type", "rear_port", "region", "role", "route_target", "service", "site", "site_group", "tag", "tenant", "tenant_group", "tunnel", "tunnel_group", "tunnel_termination", "vlan", "vlan_group", "vlan_translation_policy", "vlan_translation_rule", "vm_interface", "vrf", "virtual_chassis", "virtual_circuit", "virtual_circuit_termination", "virtual_circuit_type", "virtual_device_context", "virtual_disk", "virtual_machine", "wireless_lan", "wireless_lan_group", "wireless_link") + ASN_FIELD_NUMBER: _ClassVar[int] + ASN_RANGE_FIELD_NUMBER: _ClassVar[int] + AGGREGATE_FIELD_NUMBER: _ClassVar[int] + CABLE_FIELD_NUMBER: _ClassVar[int] + CABLE_PATH_FIELD_NUMBER: _ClassVar[int] + CABLE_TERMINATION_FIELD_NUMBER: _ClassVar[int] + CIRCUIT_FIELD_NUMBER: _ClassVar[int] + CIRCUIT_GROUP_FIELD_NUMBER: _ClassVar[int] + CIRCUIT_GROUP_ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] + CIRCUIT_TERMINATION_FIELD_NUMBER: _ClassVar[int] + CIRCUIT_TYPE_FIELD_NUMBER: _ClassVar[int] + CLUSTER_FIELD_NUMBER: _ClassVar[int] + CLUSTER_GROUP_FIELD_NUMBER: _ClassVar[int] + CLUSTER_TYPE_FIELD_NUMBER: _ClassVar[int] + CONSOLE_PORT_FIELD_NUMBER: _ClassVar[int] + CONSOLE_SERVER_PORT_FIELD_NUMBER: _ClassVar[int] + CONTACT_FIELD_NUMBER: _ClassVar[int] + CONTACT_ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] + CONTACT_GROUP_FIELD_NUMBER: _ClassVar[int] + CONTACT_ROLE_FIELD_NUMBER: _ClassVar[int] + DEVICE_FIELD_NUMBER: _ClassVar[int] + DEVICE_BAY_FIELD_NUMBER: _ClassVar[int] + DEVICE_ROLE_FIELD_NUMBER: _ClassVar[int] + DEVICE_TYPE_FIELD_NUMBER: _ClassVar[int] + FHRP_GROUP_FIELD_NUMBER: _ClassVar[int] + FHRP_GROUP_ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] + FRONT_PORT_FIELD_NUMBER: _ClassVar[int] + IKE_POLICY_FIELD_NUMBER: _ClassVar[int] + IKE_PROPOSAL_FIELD_NUMBER: _ClassVar[int] + IP_ADDRESS_FIELD_NUMBER: _ClassVar[int] + IP_RANGE_FIELD_NUMBER: _ClassVar[int] + IP_SEC_POLICY_FIELD_NUMBER: _ClassVar[int] + IP_SEC_PROFILE_FIELD_NUMBER: _ClassVar[int] + IP_SEC_PROPOSAL_FIELD_NUMBER: _ClassVar[int] + INTERFACE_FIELD_NUMBER: _ClassVar[int] + INVENTORY_ITEM_FIELD_NUMBER: _ClassVar[int] + INVENTORY_ITEM_ROLE_FIELD_NUMBER: _ClassVar[int] + L2VPN_FIELD_NUMBER: _ClassVar[int] + L2VPN_TERMINATION_FIELD_NUMBER: _ClassVar[int] + LOCATION_FIELD_NUMBER: _ClassVar[int] + MAC_ADDRESS_FIELD_NUMBER: _ClassVar[int] + MANUFACTURER_FIELD_NUMBER: _ClassVar[int] + MODULE_FIELD_NUMBER: _ClassVar[int] + MODULE_BAY_FIELD_NUMBER: _ClassVar[int] + MODULE_TYPE_FIELD_NUMBER: _ClassVar[int] + PLATFORM_FIELD_NUMBER: _ClassVar[int] + POWER_FEED_FIELD_NUMBER: _ClassVar[int] + POWER_OUTLET_FIELD_NUMBER: _ClassVar[int] + POWER_PANEL_FIELD_NUMBER: _ClassVar[int] + POWER_PORT_FIELD_NUMBER: _ClassVar[int] + PREFIX_FIELD_NUMBER: _ClassVar[int] + PROVIDER_FIELD_NUMBER: _ClassVar[int] + PROVIDER_ACCOUNT_FIELD_NUMBER: _ClassVar[int] + PROVIDER_NETWORK_FIELD_NUMBER: _ClassVar[int] + RIR_FIELD_NUMBER: _ClassVar[int] + RACK_FIELD_NUMBER: _ClassVar[int] + RACK_RESERVATION_FIELD_NUMBER: _ClassVar[int] + RACK_ROLE_FIELD_NUMBER: _ClassVar[int] + RACK_TYPE_FIELD_NUMBER: _ClassVar[int] + REAR_PORT_FIELD_NUMBER: _ClassVar[int] + REGION_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + ROUTE_TARGET_FIELD_NUMBER: _ClassVar[int] + SERVICE_FIELD_NUMBER: _ClassVar[int] + SITE_FIELD_NUMBER: _ClassVar[int] + SITE_GROUP_FIELD_NUMBER: _ClassVar[int] + TAG_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + TENANT_GROUP_FIELD_NUMBER: _ClassVar[int] + TUNNEL_FIELD_NUMBER: _ClassVar[int] + TUNNEL_GROUP_FIELD_NUMBER: _ClassVar[int] + TUNNEL_TERMINATION_FIELD_NUMBER: _ClassVar[int] + VLAN_FIELD_NUMBER: _ClassVar[int] + VLAN_GROUP_FIELD_NUMBER: _ClassVar[int] + VLAN_TRANSLATION_POLICY_FIELD_NUMBER: _ClassVar[int] + VLAN_TRANSLATION_RULE_FIELD_NUMBER: _ClassVar[int] + VM_INTERFACE_FIELD_NUMBER: _ClassVar[int] + VRF_FIELD_NUMBER: _ClassVar[int] + VIRTUAL_CHASSIS_FIELD_NUMBER: _ClassVar[int] + VIRTUAL_CIRCUIT_FIELD_NUMBER: _ClassVar[int] + VIRTUAL_CIRCUIT_TERMINATION_FIELD_NUMBER: _ClassVar[int] + VIRTUAL_CIRCUIT_TYPE_FIELD_NUMBER: _ClassVar[int] + VIRTUAL_DEVICE_CONTEXT_FIELD_NUMBER: _ClassVar[int] + VIRTUAL_DISK_FIELD_NUMBER: _ClassVar[int] + VIRTUAL_MACHINE_FIELD_NUMBER: _ClassVar[int] + WIRELESS_LAN_FIELD_NUMBER: _ClassVar[int] + WIRELESS_LAN_GROUP_FIELD_NUMBER: _ClassVar[int] + WIRELESS_LINK_FIELD_NUMBER: _ClassVar[int] + asn: ASN + asn_range: ASNRange + aggregate: Aggregate + cable: Cable + cable_path: CablePath + cable_termination: CableTermination + circuit: Circuit + circuit_group: CircuitGroup + circuit_group_assignment: CircuitGroupAssignment + circuit_termination: CircuitTermination + circuit_type: CircuitType + cluster: Cluster + cluster_group: ClusterGroup + cluster_type: ClusterType + console_port: ConsolePort + console_server_port: ConsoleServerPort + contact: Contact + contact_assignment: ContactAssignment + contact_group: ContactGroup + contact_role: ContactRole + device: Device + device_bay: DeviceBay + device_role: DeviceRole + device_type: DeviceType + fhrp_group: FHRPGroup + fhrp_group_assignment: FHRPGroupAssignment + front_port: FrontPort + ike_policy: IKEPolicy + ike_proposal: IKEProposal + ip_address: IPAddress + ip_range: IPRange + ip_sec_policy: IPSecPolicy + ip_sec_profile: IPSecProfile + ip_sec_proposal: IPSecProposal + interface: Interface + inventory_item: InventoryItem + inventory_item_role: InventoryItemRole + l2vpn: L2VPN + l2vpn_termination: L2VPNTermination + location: Location + mac_address: MACAddress + manufacturer: Manufacturer + module: Module + module_bay: ModuleBay + module_type: ModuleType + platform: Platform + power_feed: PowerFeed + power_outlet: PowerOutlet + power_panel: PowerPanel + power_port: PowerPort + prefix: Prefix + provider: Provider + provider_account: ProviderAccount + provider_network: ProviderNetwork + rir: RIR + rack: Rack + rack_reservation: RackReservation + rack_role: RackRole + rack_type: RackType + rear_port: RearPort + region: Region + role: Role + route_target: RouteTarget + service: Service + site: Site + site_group: SiteGroup + tag: Tag + tenant: Tenant + tenant_group: TenantGroup + tunnel: Tunnel + tunnel_group: TunnelGroup + tunnel_termination: TunnelTermination + vlan: VLAN + vlan_group: VLANGroup + vlan_translation_policy: VLANTranslationPolicy + vlan_translation_rule: VLANTranslationRule + vm_interface: VMInterface + vrf: VRF + virtual_chassis: VirtualChassis + virtual_circuit: VirtualCircuit + virtual_circuit_termination: VirtualCircuitTermination + virtual_circuit_type: VirtualCircuitType + virtual_device_context: VirtualDeviceContext + virtual_disk: VirtualDisk + virtual_machine: VirtualMachine + wireless_lan: WirelessLAN + wireless_lan_group: WirelessLANGroup + wireless_link: WirelessLink + def __init__(self, asn: _Optional[_Union[ASN, _Mapping]] = ..., asn_range: _Optional[_Union[ASNRange, _Mapping]] = ..., aggregate: _Optional[_Union[Aggregate, _Mapping]] = ..., cable: _Optional[_Union[Cable, _Mapping]] = ..., cable_path: _Optional[_Union[CablePath, _Mapping]] = ..., cable_termination: _Optional[_Union[CableTermination, _Mapping]] = ..., circuit: _Optional[_Union[Circuit, _Mapping]] = ..., circuit_group: _Optional[_Union[CircuitGroup, _Mapping]] = ..., circuit_group_assignment: _Optional[_Union[CircuitGroupAssignment, _Mapping]] = ..., circuit_termination: _Optional[_Union[CircuitTermination, _Mapping]] = ..., circuit_type: _Optional[_Union[CircuitType, _Mapping]] = ..., cluster: _Optional[_Union[Cluster, _Mapping]] = ..., cluster_group: _Optional[_Union[ClusterGroup, _Mapping]] = ..., cluster_type: _Optional[_Union[ClusterType, _Mapping]] = ..., console_port: _Optional[_Union[ConsolePort, _Mapping]] = ..., console_server_port: _Optional[_Union[ConsoleServerPort, _Mapping]] = ..., contact: _Optional[_Union[Contact, _Mapping]] = ..., contact_assignment: _Optional[_Union[ContactAssignment, _Mapping]] = ..., contact_group: _Optional[_Union[ContactGroup, _Mapping]] = ..., contact_role: _Optional[_Union[ContactRole, _Mapping]] = ..., device: _Optional[_Union[Device, _Mapping]] = ..., device_bay: _Optional[_Union[DeviceBay, _Mapping]] = ..., device_role: _Optional[_Union[DeviceRole, _Mapping]] = ..., device_type: _Optional[_Union[DeviceType, _Mapping]] = ..., fhrp_group: _Optional[_Union[FHRPGroup, _Mapping]] = ..., fhrp_group_assignment: _Optional[_Union[FHRPGroupAssignment, _Mapping]] = ..., front_port: _Optional[_Union[FrontPort, _Mapping]] = ..., ike_policy: _Optional[_Union[IKEPolicy, _Mapping]] = ..., ike_proposal: _Optional[_Union[IKEProposal, _Mapping]] = ..., ip_address: _Optional[_Union[IPAddress, _Mapping]] = ..., ip_range: _Optional[_Union[IPRange, _Mapping]] = ..., ip_sec_policy: _Optional[_Union[IPSecPolicy, _Mapping]] = ..., ip_sec_profile: _Optional[_Union[IPSecProfile, _Mapping]] = ..., ip_sec_proposal: _Optional[_Union[IPSecProposal, _Mapping]] = ..., interface: _Optional[_Union[Interface, _Mapping]] = ..., inventory_item: _Optional[_Union[InventoryItem, _Mapping]] = ..., inventory_item_role: _Optional[_Union[InventoryItemRole, _Mapping]] = ..., l2vpn: _Optional[_Union[L2VPN, _Mapping]] = ..., l2vpn_termination: _Optional[_Union[L2VPNTermination, _Mapping]] = ..., location: _Optional[_Union[Location, _Mapping]] = ..., mac_address: _Optional[_Union[MACAddress, _Mapping]] = ..., manufacturer: _Optional[_Union[Manufacturer, _Mapping]] = ..., module: _Optional[_Union[Module, _Mapping]] = ..., module_bay: _Optional[_Union[ModuleBay, _Mapping]] = ..., module_type: _Optional[_Union[ModuleType, _Mapping]] = ..., platform: _Optional[_Union[Platform, _Mapping]] = ..., power_feed: _Optional[_Union[PowerFeed, _Mapping]] = ..., power_outlet: _Optional[_Union[PowerOutlet, _Mapping]] = ..., power_panel: _Optional[_Union[PowerPanel, _Mapping]] = ..., power_port: _Optional[_Union[PowerPort, _Mapping]] = ..., prefix: _Optional[_Union[Prefix, _Mapping]] = ..., provider: _Optional[_Union[Provider, _Mapping]] = ..., provider_account: _Optional[_Union[ProviderAccount, _Mapping]] = ..., provider_network: _Optional[_Union[ProviderNetwork, _Mapping]] = ..., rir: _Optional[_Union[RIR, _Mapping]] = ..., rack: _Optional[_Union[Rack, _Mapping]] = ..., rack_reservation: _Optional[_Union[RackReservation, _Mapping]] = ..., rack_role: _Optional[_Union[RackRole, _Mapping]] = ..., rack_type: _Optional[_Union[RackType, _Mapping]] = ..., rear_port: _Optional[_Union[RearPort, _Mapping]] = ..., region: _Optional[_Union[Region, _Mapping]] = ..., role: _Optional[_Union[Role, _Mapping]] = ..., route_target: _Optional[_Union[RouteTarget, _Mapping]] = ..., service: _Optional[_Union[Service, _Mapping]] = ..., site: _Optional[_Union[Site, _Mapping]] = ..., site_group: _Optional[_Union[SiteGroup, _Mapping]] = ..., tag: _Optional[_Union[Tag, _Mapping]] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., tenant_group: _Optional[_Union[TenantGroup, _Mapping]] = ..., tunnel: _Optional[_Union[Tunnel, _Mapping]] = ..., tunnel_group: _Optional[_Union[TunnelGroup, _Mapping]] = ..., tunnel_termination: _Optional[_Union[TunnelTermination, _Mapping]] = ..., vlan: _Optional[_Union[VLAN, _Mapping]] = ..., vlan_group: _Optional[_Union[VLANGroup, _Mapping]] = ..., vlan_translation_policy: _Optional[_Union[VLANTranslationPolicy, _Mapping]] = ..., vlan_translation_rule: _Optional[_Union[VLANTranslationRule, _Mapping]] = ..., vm_interface: _Optional[_Union[VMInterface, _Mapping]] = ..., vrf: _Optional[_Union[VRF, _Mapping]] = ..., virtual_chassis: _Optional[_Union[VirtualChassis, _Mapping]] = ..., virtual_circuit: _Optional[_Union[VirtualCircuit, _Mapping]] = ..., virtual_circuit_termination: _Optional[_Union[VirtualCircuitTermination, _Mapping]] = ..., virtual_circuit_type: _Optional[_Union[VirtualCircuitType, _Mapping]] = ..., virtual_device_context: _Optional[_Union[VirtualDeviceContext, _Mapping]] = ..., virtual_disk: _Optional[_Union[VirtualDisk, _Mapping]] = ..., virtual_machine: _Optional[_Union[VirtualMachine, _Mapping]] = ..., wireless_lan: _Optional[_Union[WirelessLAN, _Mapping]] = ..., wireless_lan_group: _Optional[_Union[WirelessLANGroup, _Mapping]] = ..., wireless_link: _Optional[_Union[WirelessLink, _Mapping]] = ...) -> None: ... + +class CustomFieldValue(_message.Message): + __slots__ = ("multiple_selection", "multiple_objects", "text", "long_text", "integer", "decimal", "boolean", "date", "datetime", "url", "json", "selection", "object") + MULTIPLE_SELECTION_FIELD_NUMBER: _ClassVar[int] + MULTIPLE_OBJECTS_FIELD_NUMBER: _ClassVar[int] + TEXT_FIELD_NUMBER: _ClassVar[int] + LONG_TEXT_FIELD_NUMBER: _ClassVar[int] + INTEGER_FIELD_NUMBER: _ClassVar[int] + DECIMAL_FIELD_NUMBER: _ClassVar[int] + BOOLEAN_FIELD_NUMBER: _ClassVar[int] + DATE_FIELD_NUMBER: _ClassVar[int] + DATETIME_FIELD_NUMBER: _ClassVar[int] + URL_FIELD_NUMBER: _ClassVar[int] + JSON_FIELD_NUMBER: _ClassVar[int] + SELECTION_FIELD_NUMBER: _ClassVar[int] + OBJECT_FIELD_NUMBER: _ClassVar[int] + multiple_selection: _containers.RepeatedScalarFieldContainer[str] + multiple_objects: _containers.RepeatedCompositeFieldContainer[CustomFieldObjectReference] + text: str + long_text: str + integer: int + decimal: float + boolean: bool + date: _timestamp_pb2.Timestamp + datetime: _timestamp_pb2.Timestamp + url: str + json: str + selection: str + object: CustomFieldObjectReference + def __init__(self, multiple_selection: _Optional[_Iterable[str]] = ..., multiple_objects: _Optional[_Iterable[_Union[CustomFieldObjectReference, _Mapping]]] = ..., text: _Optional[str] = ..., long_text: _Optional[str] = ..., integer: _Optional[int] = ..., decimal: _Optional[float] = ..., boolean: bool = ..., date: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., datetime: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., url: _Optional[str] = ..., json: _Optional[str] = ..., selection: _Optional[str] = ..., object: _Optional[_Union[CustomFieldObjectReference, _Mapping]] = ...) -> None: ... + +class Device(_message.Message): + __slots__ = ("name", "device_type", "role", "tenant", "platform", "serial", "asset_tag", "site", "location", "rack", "position", "face", "latitude", "longitude", "status", "airflow", "primary_ip4", "primary_ip6", "oob_ip", "cluster", "virtual_chassis", "vc_position", "vc_priority", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + DEVICE_TYPE_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + PLATFORM_FIELD_NUMBER: _ClassVar[int] + SERIAL_FIELD_NUMBER: _ClassVar[int] + ASSET_TAG_FIELD_NUMBER: _ClassVar[int] + SITE_FIELD_NUMBER: _ClassVar[int] + LOCATION_FIELD_NUMBER: _ClassVar[int] + RACK_FIELD_NUMBER: _ClassVar[int] + POSITION_FIELD_NUMBER: _ClassVar[int] + FACE_FIELD_NUMBER: _ClassVar[int] + LATITUDE_FIELD_NUMBER: _ClassVar[int] + LONGITUDE_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + AIRFLOW_FIELD_NUMBER: _ClassVar[int] + PRIMARY_IP4_FIELD_NUMBER: _ClassVar[int] + PRIMARY_IP6_FIELD_NUMBER: _ClassVar[int] + OOB_IP_FIELD_NUMBER: _ClassVar[int] + CLUSTER_FIELD_NUMBER: _ClassVar[int] + VIRTUAL_CHASSIS_FIELD_NUMBER: _ClassVar[int] + VC_POSITION_FIELD_NUMBER: _ClassVar[int] + VC_PRIORITY_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + device_type: DeviceType + role: DeviceRole + tenant: Tenant + platform: Platform + serial: str + asset_tag: str + site: Site + location: Location + rack: Rack + position: float + face: str + latitude: float + longitude: float + status: str + airflow: str + primary_ip4: IPAddress + primary_ip6: IPAddress + oob_ip: IPAddress + cluster: Cluster + virtual_chassis: VirtualChassis + vc_position: int + vc_priority: int + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., device_type: _Optional[_Union[DeviceType, _Mapping]] = ..., role: _Optional[_Union[DeviceRole, _Mapping]] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., platform: _Optional[_Union[Platform, _Mapping]] = ..., serial: _Optional[str] = ..., asset_tag: _Optional[str] = ..., site: _Optional[_Union[Site, _Mapping]] = ..., location: _Optional[_Union[Location, _Mapping]] = ..., rack: _Optional[_Union[Rack, _Mapping]] = ..., position: _Optional[float] = ..., face: _Optional[str] = ..., latitude: _Optional[float] = ..., longitude: _Optional[float] = ..., status: _Optional[str] = ..., airflow: _Optional[str] = ..., primary_ip4: _Optional[_Union[IPAddress, _Mapping]] = ..., primary_ip6: _Optional[_Union[IPAddress, _Mapping]] = ..., oob_ip: _Optional[_Union[IPAddress, _Mapping]] = ..., cluster: _Optional[_Union[Cluster, _Mapping]] = ..., virtual_chassis: _Optional[_Union[VirtualChassis, _Mapping]] = ..., vc_position: _Optional[int] = ..., vc_priority: _Optional[int] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class DeviceBay(_message.Message): + __slots__ = ("device", "name", "label", "description", "installed_device", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + DEVICE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + LABEL_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + INSTALLED_DEVICE_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + device: Device + name: str + label: str + description: str + installed_device: Device + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ..., name: _Optional[str] = ..., label: _Optional[str] = ..., description: _Optional[str] = ..., installed_device: _Optional[_Union[Device, _Mapping]] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class DeviceRole(_message.Message): + __slots__ = ("name", "slug", "color", "vm_role", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + COLOR_FIELD_NUMBER: _ClassVar[int] + VM_ROLE_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + color: str + vm_role: bool + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., color: _Optional[str] = ..., vm_role: bool = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class DeviceType(_message.Message): + __slots__ = ("manufacturer", "default_platform", "model", "slug", "part_number", "u_height", "exclude_from_utilization", "is_full_depth", "subdevice_role", "airflow", "weight", "weight_unit", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + MANUFACTURER_FIELD_NUMBER: _ClassVar[int] + DEFAULT_PLATFORM_FIELD_NUMBER: _ClassVar[int] + MODEL_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + PART_NUMBER_FIELD_NUMBER: _ClassVar[int] + U_HEIGHT_FIELD_NUMBER: _ClassVar[int] + EXCLUDE_FROM_UTILIZATION_FIELD_NUMBER: _ClassVar[int] + IS_FULL_DEPTH_FIELD_NUMBER: _ClassVar[int] + SUBDEVICE_ROLE_FIELD_NUMBER: _ClassVar[int] + AIRFLOW_FIELD_NUMBER: _ClassVar[int] + WEIGHT_FIELD_NUMBER: _ClassVar[int] + WEIGHT_UNIT_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + manufacturer: Manufacturer + default_platform: Platform + model: str + slug: str + part_number: str + u_height: float + exclude_from_utilization: bool + is_full_depth: bool + subdevice_role: str + airflow: str + weight: float + weight_unit: str + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, manufacturer: _Optional[_Union[Manufacturer, _Mapping]] = ..., default_platform: _Optional[_Union[Platform, _Mapping]] = ..., model: _Optional[str] = ..., slug: _Optional[str] = ..., part_number: _Optional[str] = ..., u_height: _Optional[float] = ..., exclude_from_utilization: bool = ..., is_full_depth: bool = ..., subdevice_role: _Optional[str] = ..., airflow: _Optional[str] = ..., weight: _Optional[float] = ..., weight_unit: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class FHRPGroup(_message.Message): + __slots__ = ("name", "protocol", "group_id", "auth_type", "auth_key", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + PROTOCOL_FIELD_NUMBER: _ClassVar[int] + GROUP_ID_FIELD_NUMBER: _ClassVar[int] + AUTH_TYPE_FIELD_NUMBER: _ClassVar[int] + AUTH_KEY_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + protocol: str + group_id: int + auth_type: str + auth_key: str + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., protocol: _Optional[str] = ..., group_id: _Optional[int] = ..., auth_type: _Optional[str] = ..., auth_key: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class FHRPGroupAssignment(_message.Message): + __slots__ = ("group", "interface_asn", "interface_asn_range", "interface_aggregate", "interface_cable", "interface_cable_path", "interface_cable_termination", "interface_circuit", "interface_circuit_group", "interface_circuit_group_assignment", "interface_circuit_termination", "interface_circuit_type", "interface_cluster", "interface_cluster_group", "interface_cluster_type", "interface_console_port", "interface_console_server_port", "interface_contact", "interface_contact_assignment", "interface_contact_group", "interface_contact_role", "interface_device", "interface_device_bay", "interface_device_role", "interface_device_type", "interface_fhrp_group", "interface_fhrp_group_assignment", "interface_front_port", "interface_ike_policy", "interface_ike_proposal", "interface_ip_address", "interface_ip_range", "interface_ip_sec_policy", "interface_ip_sec_profile", "interface_ip_sec_proposal", "interface_interface", "interface_inventory_item", "interface_inventory_item_role", "interface_l2vpn", "interface_l2vpn_termination", "interface_location", "interface_mac_address", "interface_manufacturer", "interface_module", "interface_module_bay", "interface_module_type", "interface_platform", "interface_power_feed", "interface_power_outlet", "interface_power_panel", "interface_power_port", "interface_prefix", "interface_provider", "interface_provider_account", "interface_provider_network", "interface_rir", "interface_rack", "interface_rack_reservation", "interface_rack_role", "interface_rack_type", "interface_rear_port", "interface_region", "interface_role", "interface_route_target", "interface_service", "interface_site", "interface_site_group", "interface_tag", "interface_tenant", "interface_tenant_group", "interface_tunnel", "interface_tunnel_group", "interface_tunnel_termination", "interface_vlan", "interface_vlan_group", "interface_vlan_translation_policy", "interface_vlan_translation_rule", "interface_vm_interface", "interface_vrf", "interface_virtual_chassis", "interface_virtual_circuit", "interface_virtual_circuit_termination", "interface_virtual_circuit_type", "interface_virtual_device_context", "interface_virtual_disk", "interface_virtual_machine", "interface_wireless_lan", "interface_wireless_lan_group", "interface_wireless_link", "priority") + GROUP_FIELD_NUMBER: _ClassVar[int] + INTERFACE_ASN_FIELD_NUMBER: _ClassVar[int] + INTERFACE_ASN_RANGE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_AGGREGATE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CABLE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CABLE_PATH_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CABLE_TERMINATION_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CIRCUIT_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CIRCUIT_GROUP_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CIRCUIT_GROUP_ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CIRCUIT_TERMINATION_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CIRCUIT_TYPE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CLUSTER_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CLUSTER_GROUP_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CLUSTER_TYPE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CONSOLE_PORT_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CONSOLE_SERVER_PORT_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CONTACT_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CONTACT_ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CONTACT_GROUP_FIELD_NUMBER: _ClassVar[int] + INTERFACE_CONTACT_ROLE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_DEVICE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_DEVICE_BAY_FIELD_NUMBER: _ClassVar[int] + INTERFACE_DEVICE_ROLE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_DEVICE_TYPE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_FHRP_GROUP_FIELD_NUMBER: _ClassVar[int] + INTERFACE_FHRP_GROUP_ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] + INTERFACE_FRONT_PORT_FIELD_NUMBER: _ClassVar[int] + INTERFACE_IKE_POLICY_FIELD_NUMBER: _ClassVar[int] + INTERFACE_IKE_PROPOSAL_FIELD_NUMBER: _ClassVar[int] + INTERFACE_IP_ADDRESS_FIELD_NUMBER: _ClassVar[int] + INTERFACE_IP_RANGE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_IP_SEC_POLICY_FIELD_NUMBER: _ClassVar[int] + INTERFACE_IP_SEC_PROFILE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_IP_SEC_PROPOSAL_FIELD_NUMBER: _ClassVar[int] + INTERFACE_INTERFACE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_INVENTORY_ITEM_FIELD_NUMBER: _ClassVar[int] + INTERFACE_INVENTORY_ITEM_ROLE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_L2VPN_FIELD_NUMBER: _ClassVar[int] + INTERFACE_L2VPN_TERMINATION_FIELD_NUMBER: _ClassVar[int] + INTERFACE_LOCATION_FIELD_NUMBER: _ClassVar[int] + INTERFACE_MAC_ADDRESS_FIELD_NUMBER: _ClassVar[int] + INTERFACE_MANUFACTURER_FIELD_NUMBER: _ClassVar[int] + INTERFACE_MODULE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_MODULE_BAY_FIELD_NUMBER: _ClassVar[int] + INTERFACE_MODULE_TYPE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_PLATFORM_FIELD_NUMBER: _ClassVar[int] + INTERFACE_POWER_FEED_FIELD_NUMBER: _ClassVar[int] + INTERFACE_POWER_OUTLET_FIELD_NUMBER: _ClassVar[int] + INTERFACE_POWER_PANEL_FIELD_NUMBER: _ClassVar[int] + INTERFACE_POWER_PORT_FIELD_NUMBER: _ClassVar[int] + INTERFACE_PREFIX_FIELD_NUMBER: _ClassVar[int] + INTERFACE_PROVIDER_FIELD_NUMBER: _ClassVar[int] + INTERFACE_PROVIDER_ACCOUNT_FIELD_NUMBER: _ClassVar[int] + INTERFACE_PROVIDER_NETWORK_FIELD_NUMBER: _ClassVar[int] + INTERFACE_RIR_FIELD_NUMBER: _ClassVar[int] + INTERFACE_RACK_FIELD_NUMBER: _ClassVar[int] + INTERFACE_RACK_RESERVATION_FIELD_NUMBER: _ClassVar[int] + INTERFACE_RACK_ROLE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_RACK_TYPE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_REAR_PORT_FIELD_NUMBER: _ClassVar[int] + INTERFACE_REGION_FIELD_NUMBER: _ClassVar[int] + INTERFACE_ROLE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_ROUTE_TARGET_FIELD_NUMBER: _ClassVar[int] + INTERFACE_SERVICE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_SITE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_SITE_GROUP_FIELD_NUMBER: _ClassVar[int] + INTERFACE_TAG_FIELD_NUMBER: _ClassVar[int] + INTERFACE_TENANT_FIELD_NUMBER: _ClassVar[int] + INTERFACE_TENANT_GROUP_FIELD_NUMBER: _ClassVar[int] + INTERFACE_TUNNEL_FIELD_NUMBER: _ClassVar[int] + INTERFACE_TUNNEL_GROUP_FIELD_NUMBER: _ClassVar[int] + INTERFACE_TUNNEL_TERMINATION_FIELD_NUMBER: _ClassVar[int] + INTERFACE_VLAN_FIELD_NUMBER: _ClassVar[int] + INTERFACE_VLAN_GROUP_FIELD_NUMBER: _ClassVar[int] + INTERFACE_VLAN_TRANSLATION_POLICY_FIELD_NUMBER: _ClassVar[int] + INTERFACE_VLAN_TRANSLATION_RULE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_VM_INTERFACE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_VRF_FIELD_NUMBER: _ClassVar[int] + INTERFACE_VIRTUAL_CHASSIS_FIELD_NUMBER: _ClassVar[int] + INTERFACE_VIRTUAL_CIRCUIT_FIELD_NUMBER: _ClassVar[int] + INTERFACE_VIRTUAL_CIRCUIT_TERMINATION_FIELD_NUMBER: _ClassVar[int] + INTERFACE_VIRTUAL_CIRCUIT_TYPE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_VIRTUAL_DEVICE_CONTEXT_FIELD_NUMBER: _ClassVar[int] + INTERFACE_VIRTUAL_DISK_FIELD_NUMBER: _ClassVar[int] + INTERFACE_VIRTUAL_MACHINE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_WIRELESS_LAN_FIELD_NUMBER: _ClassVar[int] + INTERFACE_WIRELESS_LAN_GROUP_FIELD_NUMBER: _ClassVar[int] + INTERFACE_WIRELESS_LINK_FIELD_NUMBER: _ClassVar[int] + PRIORITY_FIELD_NUMBER: _ClassVar[int] + group: FHRPGroup + interface_asn: ASN + interface_asn_range: ASNRange + interface_aggregate: Aggregate + interface_cable: Cable + interface_cable_path: CablePath + interface_cable_termination: CableTermination + interface_circuit: Circuit + interface_circuit_group: CircuitGroup + interface_circuit_group_assignment: CircuitGroupAssignment + interface_circuit_termination: CircuitTermination + interface_circuit_type: CircuitType + interface_cluster: Cluster + interface_cluster_group: ClusterGroup + interface_cluster_type: ClusterType + interface_console_port: ConsolePort + interface_console_server_port: ConsoleServerPort + interface_contact: Contact + interface_contact_assignment: ContactAssignment + interface_contact_group: ContactGroup + interface_contact_role: ContactRole + interface_device: Device + interface_device_bay: DeviceBay + interface_device_role: DeviceRole + interface_device_type: DeviceType + interface_fhrp_group: FHRPGroup + interface_fhrp_group_assignment: FHRPGroupAssignment + interface_front_port: FrontPort + interface_ike_policy: IKEPolicy + interface_ike_proposal: IKEProposal + interface_ip_address: IPAddress + interface_ip_range: IPRange + interface_ip_sec_policy: IPSecPolicy + interface_ip_sec_profile: IPSecProfile + interface_ip_sec_proposal: IPSecProposal + interface_interface: Interface + interface_inventory_item: InventoryItem + interface_inventory_item_role: InventoryItemRole + interface_l2vpn: L2VPN + interface_l2vpn_termination: L2VPNTermination + interface_location: Location + interface_mac_address: MACAddress + interface_manufacturer: Manufacturer + interface_module: Module + interface_module_bay: ModuleBay + interface_module_type: ModuleType + interface_platform: Platform + interface_power_feed: PowerFeed + interface_power_outlet: PowerOutlet + interface_power_panel: PowerPanel + interface_power_port: PowerPort + interface_prefix: Prefix + interface_provider: Provider + interface_provider_account: ProviderAccount + interface_provider_network: ProviderNetwork + interface_rir: RIR + interface_rack: Rack + interface_rack_reservation: RackReservation + interface_rack_role: RackRole + interface_rack_type: RackType + interface_rear_port: RearPort + interface_region: Region + interface_role: Role + interface_route_target: RouteTarget + interface_service: Service + interface_site: Site + interface_site_group: SiteGroup + interface_tag: Tag + interface_tenant: Tenant + interface_tenant_group: TenantGroup + interface_tunnel: Tunnel + interface_tunnel_group: TunnelGroup + interface_tunnel_termination: TunnelTermination + interface_vlan: VLAN + interface_vlan_group: VLANGroup + interface_vlan_translation_policy: VLANTranslationPolicy + interface_vlan_translation_rule: VLANTranslationRule + interface_vm_interface: VMInterface + interface_vrf: VRF + interface_virtual_chassis: VirtualChassis + interface_virtual_circuit: VirtualCircuit + interface_virtual_circuit_termination: VirtualCircuitTermination + interface_virtual_circuit_type: VirtualCircuitType + interface_virtual_device_context: VirtualDeviceContext + interface_virtual_disk: VirtualDisk + interface_virtual_machine: VirtualMachine + interface_wireless_lan: WirelessLAN + interface_wireless_lan_group: WirelessLANGroup + interface_wireless_link: WirelessLink + priority: int + def __init__(self, group: _Optional[_Union[FHRPGroup, _Mapping]] = ..., interface_asn: _Optional[_Union[ASN, _Mapping]] = ..., interface_asn_range: _Optional[_Union[ASNRange, _Mapping]] = ..., interface_aggregate: _Optional[_Union[Aggregate, _Mapping]] = ..., interface_cable: _Optional[_Union[Cable, _Mapping]] = ..., interface_cable_path: _Optional[_Union[CablePath, _Mapping]] = ..., interface_cable_termination: _Optional[_Union[CableTermination, _Mapping]] = ..., interface_circuit: _Optional[_Union[Circuit, _Mapping]] = ..., interface_circuit_group: _Optional[_Union[CircuitGroup, _Mapping]] = ..., interface_circuit_group_assignment: _Optional[_Union[CircuitGroupAssignment, _Mapping]] = ..., interface_circuit_termination: _Optional[_Union[CircuitTermination, _Mapping]] = ..., interface_circuit_type: _Optional[_Union[CircuitType, _Mapping]] = ..., interface_cluster: _Optional[_Union[Cluster, _Mapping]] = ..., interface_cluster_group: _Optional[_Union[ClusterGroup, _Mapping]] = ..., interface_cluster_type: _Optional[_Union[ClusterType, _Mapping]] = ..., interface_console_port: _Optional[_Union[ConsolePort, _Mapping]] = ..., interface_console_server_port: _Optional[_Union[ConsoleServerPort, _Mapping]] = ..., interface_contact: _Optional[_Union[Contact, _Mapping]] = ..., interface_contact_assignment: _Optional[_Union[ContactAssignment, _Mapping]] = ..., interface_contact_group: _Optional[_Union[ContactGroup, _Mapping]] = ..., interface_contact_role: _Optional[_Union[ContactRole, _Mapping]] = ..., interface_device: _Optional[_Union[Device, _Mapping]] = ..., interface_device_bay: _Optional[_Union[DeviceBay, _Mapping]] = ..., interface_device_role: _Optional[_Union[DeviceRole, _Mapping]] = ..., interface_device_type: _Optional[_Union[DeviceType, _Mapping]] = ..., interface_fhrp_group: _Optional[_Union[FHRPGroup, _Mapping]] = ..., interface_fhrp_group_assignment: _Optional[_Union[FHRPGroupAssignment, _Mapping]] = ..., interface_front_port: _Optional[_Union[FrontPort, _Mapping]] = ..., interface_ike_policy: _Optional[_Union[IKEPolicy, _Mapping]] = ..., interface_ike_proposal: _Optional[_Union[IKEProposal, _Mapping]] = ..., interface_ip_address: _Optional[_Union[IPAddress, _Mapping]] = ..., interface_ip_range: _Optional[_Union[IPRange, _Mapping]] = ..., interface_ip_sec_policy: _Optional[_Union[IPSecPolicy, _Mapping]] = ..., interface_ip_sec_profile: _Optional[_Union[IPSecProfile, _Mapping]] = ..., interface_ip_sec_proposal: _Optional[_Union[IPSecProposal, _Mapping]] = ..., interface_interface: _Optional[_Union[Interface, _Mapping]] = ..., interface_inventory_item: _Optional[_Union[InventoryItem, _Mapping]] = ..., interface_inventory_item_role: _Optional[_Union[InventoryItemRole, _Mapping]] = ..., interface_l2vpn: _Optional[_Union[L2VPN, _Mapping]] = ..., interface_l2vpn_termination: _Optional[_Union[L2VPNTermination, _Mapping]] = ..., interface_location: _Optional[_Union[Location, _Mapping]] = ..., interface_mac_address: _Optional[_Union[MACAddress, _Mapping]] = ..., interface_manufacturer: _Optional[_Union[Manufacturer, _Mapping]] = ..., interface_module: _Optional[_Union[Module, _Mapping]] = ..., interface_module_bay: _Optional[_Union[ModuleBay, _Mapping]] = ..., interface_module_type: _Optional[_Union[ModuleType, _Mapping]] = ..., interface_platform: _Optional[_Union[Platform, _Mapping]] = ..., interface_power_feed: _Optional[_Union[PowerFeed, _Mapping]] = ..., interface_power_outlet: _Optional[_Union[PowerOutlet, _Mapping]] = ..., interface_power_panel: _Optional[_Union[PowerPanel, _Mapping]] = ..., interface_power_port: _Optional[_Union[PowerPort, _Mapping]] = ..., interface_prefix: _Optional[_Union[Prefix, _Mapping]] = ..., interface_provider: _Optional[_Union[Provider, _Mapping]] = ..., interface_provider_account: _Optional[_Union[ProviderAccount, _Mapping]] = ..., interface_provider_network: _Optional[_Union[ProviderNetwork, _Mapping]] = ..., interface_rir: _Optional[_Union[RIR, _Mapping]] = ..., interface_rack: _Optional[_Union[Rack, _Mapping]] = ..., interface_rack_reservation: _Optional[_Union[RackReservation, _Mapping]] = ..., interface_rack_role: _Optional[_Union[RackRole, _Mapping]] = ..., interface_rack_type: _Optional[_Union[RackType, _Mapping]] = ..., interface_rear_port: _Optional[_Union[RearPort, _Mapping]] = ..., interface_region: _Optional[_Union[Region, _Mapping]] = ..., interface_role: _Optional[_Union[Role, _Mapping]] = ..., interface_route_target: _Optional[_Union[RouteTarget, _Mapping]] = ..., interface_service: _Optional[_Union[Service, _Mapping]] = ..., interface_site: _Optional[_Union[Site, _Mapping]] = ..., interface_site_group: _Optional[_Union[SiteGroup, _Mapping]] = ..., interface_tag: _Optional[_Union[Tag, _Mapping]] = ..., interface_tenant: _Optional[_Union[Tenant, _Mapping]] = ..., interface_tenant_group: _Optional[_Union[TenantGroup, _Mapping]] = ..., interface_tunnel: _Optional[_Union[Tunnel, _Mapping]] = ..., interface_tunnel_group: _Optional[_Union[TunnelGroup, _Mapping]] = ..., interface_tunnel_termination: _Optional[_Union[TunnelTermination, _Mapping]] = ..., interface_vlan: _Optional[_Union[VLAN, _Mapping]] = ..., interface_vlan_group: _Optional[_Union[VLANGroup, _Mapping]] = ..., interface_vlan_translation_policy: _Optional[_Union[VLANTranslationPolicy, _Mapping]] = ..., interface_vlan_translation_rule: _Optional[_Union[VLANTranslationRule, _Mapping]] = ..., interface_vm_interface: _Optional[_Union[VMInterface, _Mapping]] = ..., interface_vrf: _Optional[_Union[VRF, _Mapping]] = ..., interface_virtual_chassis: _Optional[_Union[VirtualChassis, _Mapping]] = ..., interface_virtual_circuit: _Optional[_Union[VirtualCircuit, _Mapping]] = ..., interface_virtual_circuit_termination: _Optional[_Union[VirtualCircuitTermination, _Mapping]] = ..., interface_virtual_circuit_type: _Optional[_Union[VirtualCircuitType, _Mapping]] = ..., interface_virtual_device_context: _Optional[_Union[VirtualDeviceContext, _Mapping]] = ..., interface_virtual_disk: _Optional[_Union[VirtualDisk, _Mapping]] = ..., interface_virtual_machine: _Optional[_Union[VirtualMachine, _Mapping]] = ..., interface_wireless_lan: _Optional[_Union[WirelessLAN, _Mapping]] = ..., interface_wireless_lan_group: _Optional[_Union[WirelessLANGroup, _Mapping]] = ..., interface_wireless_link: _Optional[_Union[WirelessLink, _Mapping]] = ..., priority: _Optional[int] = ...) -> None: ... + +class FrontPort(_message.Message): + __slots__ = ("device", "module", "name", "label", "type", "color", "rear_port", "rear_port_position", "description", "mark_connected", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + DEVICE_FIELD_NUMBER: _ClassVar[int] + MODULE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + LABEL_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + COLOR_FIELD_NUMBER: _ClassVar[int] + REAR_PORT_FIELD_NUMBER: _ClassVar[int] + REAR_PORT_POSITION_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + MARK_CONNECTED_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + device: Device + module: Module + name: str + label: str + type: str + color: str + rear_port: RearPort + rear_port_position: int + description: str + mark_connected: bool + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ..., module: _Optional[_Union[Module, _Mapping]] = ..., name: _Optional[str] = ..., label: _Optional[str] = ..., type: _Optional[str] = ..., color: _Optional[str] = ..., rear_port: _Optional[_Union[RearPort, _Mapping]] = ..., rear_port_position: _Optional[int] = ..., description: _Optional[str] = ..., mark_connected: bool = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class GenericObject(_message.Message): + __slots__ = ("object_asn", "object_asn_range", "object_aggregate", "object_cable", "object_cable_path", "object_cable_termination", "object_circuit", "object_circuit_group", "object_circuit_group_assignment", "object_circuit_termination", "object_circuit_type", "object_cluster", "object_cluster_group", "object_cluster_type", "object_console_port", "object_console_server_port", "object_contact", "object_contact_assignment", "object_contact_group", "object_contact_role", "object_device", "object_device_bay", "object_device_role", "object_device_type", "object_fhrp_group", "object_fhrp_group_assignment", "object_front_port", "object_ike_policy", "object_ike_proposal", "object_ip_address", "object_ip_range", "object_ip_sec_policy", "object_ip_sec_profile", "object_ip_sec_proposal", "object_interface", "object_inventory_item", "object_inventory_item_role", "object_l2vpn", "object_l2vpn_termination", "object_location", "object_mac_address", "object_manufacturer", "object_module", "object_module_bay", "object_module_type", "object_platform", "object_power_feed", "object_power_outlet", "object_power_panel", "object_power_port", "object_prefix", "object_provider", "object_provider_account", "object_provider_network", "object_rir", "object_rack", "object_rack_reservation", "object_rack_role", "object_rack_type", "object_rear_port", "object_region", "object_role", "object_route_target", "object_service", "object_site", "object_site_group", "object_tag", "object_tenant", "object_tenant_group", "object_tunnel", "object_tunnel_group", "object_tunnel_termination", "object_vlan", "object_vlan_group", "object_vlan_translation_policy", "object_vlan_translation_rule", "object_vm_interface", "object_vrf", "object_virtual_chassis", "object_virtual_circuit", "object_virtual_circuit_termination", "object_virtual_circuit_type", "object_virtual_device_context", "object_virtual_disk", "object_virtual_machine", "object_wireless_lan", "object_wireless_lan_group", "object_wireless_link") + OBJECT_ASN_FIELD_NUMBER: _ClassVar[int] + OBJECT_ASN_RANGE_FIELD_NUMBER: _ClassVar[int] + OBJECT_AGGREGATE_FIELD_NUMBER: _ClassVar[int] + OBJECT_CABLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_CABLE_PATH_FIELD_NUMBER: _ClassVar[int] + OBJECT_CABLE_TERMINATION_FIELD_NUMBER: _ClassVar[int] + OBJECT_CIRCUIT_FIELD_NUMBER: _ClassVar[int] + OBJECT_CIRCUIT_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_CIRCUIT_GROUP_ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] + OBJECT_CIRCUIT_TERMINATION_FIELD_NUMBER: _ClassVar[int] + OBJECT_CIRCUIT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_CLUSTER_FIELD_NUMBER: _ClassVar[int] + OBJECT_CLUSTER_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_CLUSTER_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_CONSOLE_PORT_FIELD_NUMBER: _ClassVar[int] + OBJECT_CONSOLE_SERVER_PORT_FIELD_NUMBER: _ClassVar[int] + OBJECT_CONTACT_FIELD_NUMBER: _ClassVar[int] + OBJECT_CONTACT_ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] + OBJECT_CONTACT_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_CONTACT_ROLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_DEVICE_FIELD_NUMBER: _ClassVar[int] + OBJECT_DEVICE_BAY_FIELD_NUMBER: _ClassVar[int] + OBJECT_DEVICE_ROLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_DEVICE_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_FHRP_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_FHRP_GROUP_ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] + OBJECT_FRONT_PORT_FIELD_NUMBER: _ClassVar[int] + OBJECT_IKE_POLICY_FIELD_NUMBER: _ClassVar[int] + OBJECT_IKE_PROPOSAL_FIELD_NUMBER: _ClassVar[int] + OBJECT_IP_ADDRESS_FIELD_NUMBER: _ClassVar[int] + OBJECT_IP_RANGE_FIELD_NUMBER: _ClassVar[int] + OBJECT_IP_SEC_POLICY_FIELD_NUMBER: _ClassVar[int] + OBJECT_IP_SEC_PROFILE_FIELD_NUMBER: _ClassVar[int] + OBJECT_IP_SEC_PROPOSAL_FIELD_NUMBER: _ClassVar[int] + OBJECT_INTERFACE_FIELD_NUMBER: _ClassVar[int] + OBJECT_INVENTORY_ITEM_FIELD_NUMBER: _ClassVar[int] + OBJECT_INVENTORY_ITEM_ROLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_L2VPN_FIELD_NUMBER: _ClassVar[int] + OBJECT_L2VPN_TERMINATION_FIELD_NUMBER: _ClassVar[int] + OBJECT_LOCATION_FIELD_NUMBER: _ClassVar[int] + OBJECT_MAC_ADDRESS_FIELD_NUMBER: _ClassVar[int] + OBJECT_MANUFACTURER_FIELD_NUMBER: _ClassVar[int] + OBJECT_MODULE_FIELD_NUMBER: _ClassVar[int] + OBJECT_MODULE_BAY_FIELD_NUMBER: _ClassVar[int] + OBJECT_MODULE_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_PLATFORM_FIELD_NUMBER: _ClassVar[int] + OBJECT_POWER_FEED_FIELD_NUMBER: _ClassVar[int] + OBJECT_POWER_OUTLET_FIELD_NUMBER: _ClassVar[int] + OBJECT_POWER_PANEL_FIELD_NUMBER: _ClassVar[int] + OBJECT_POWER_PORT_FIELD_NUMBER: _ClassVar[int] + OBJECT_PREFIX_FIELD_NUMBER: _ClassVar[int] + OBJECT_PROVIDER_FIELD_NUMBER: _ClassVar[int] + OBJECT_PROVIDER_ACCOUNT_FIELD_NUMBER: _ClassVar[int] + OBJECT_PROVIDER_NETWORK_FIELD_NUMBER: _ClassVar[int] + OBJECT_RIR_FIELD_NUMBER: _ClassVar[int] + OBJECT_RACK_FIELD_NUMBER: _ClassVar[int] + OBJECT_RACK_RESERVATION_FIELD_NUMBER: _ClassVar[int] + OBJECT_RACK_ROLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_RACK_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_REAR_PORT_FIELD_NUMBER: _ClassVar[int] + OBJECT_REGION_FIELD_NUMBER: _ClassVar[int] + OBJECT_ROLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ROUTE_TARGET_FIELD_NUMBER: _ClassVar[int] + OBJECT_SERVICE_FIELD_NUMBER: _ClassVar[int] + OBJECT_SITE_FIELD_NUMBER: _ClassVar[int] + OBJECT_SITE_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_TAG_FIELD_NUMBER: _ClassVar[int] + OBJECT_TENANT_FIELD_NUMBER: _ClassVar[int] + OBJECT_TENANT_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_TUNNEL_FIELD_NUMBER: _ClassVar[int] + OBJECT_TUNNEL_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_TUNNEL_TERMINATION_FIELD_NUMBER: _ClassVar[int] + OBJECT_VLAN_FIELD_NUMBER: _ClassVar[int] + OBJECT_VLAN_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_VLAN_TRANSLATION_POLICY_FIELD_NUMBER: _ClassVar[int] + OBJECT_VLAN_TRANSLATION_RULE_FIELD_NUMBER: _ClassVar[int] + OBJECT_VM_INTERFACE_FIELD_NUMBER: _ClassVar[int] + OBJECT_VRF_FIELD_NUMBER: _ClassVar[int] + OBJECT_VIRTUAL_CHASSIS_FIELD_NUMBER: _ClassVar[int] + OBJECT_VIRTUAL_CIRCUIT_FIELD_NUMBER: _ClassVar[int] + OBJECT_VIRTUAL_CIRCUIT_TERMINATION_FIELD_NUMBER: _ClassVar[int] + OBJECT_VIRTUAL_CIRCUIT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_VIRTUAL_DEVICE_CONTEXT_FIELD_NUMBER: _ClassVar[int] + OBJECT_VIRTUAL_DISK_FIELD_NUMBER: _ClassVar[int] + OBJECT_VIRTUAL_MACHINE_FIELD_NUMBER: _ClassVar[int] + OBJECT_WIRELESS_LAN_FIELD_NUMBER: _ClassVar[int] + OBJECT_WIRELESS_LAN_GROUP_FIELD_NUMBER: _ClassVar[int] + OBJECT_WIRELESS_LINK_FIELD_NUMBER: _ClassVar[int] + object_asn: ASN + object_asn_range: ASNRange + object_aggregate: Aggregate + object_cable: Cable + object_cable_path: CablePath + object_cable_termination: CableTermination + object_circuit: Circuit + object_circuit_group: CircuitGroup + object_circuit_group_assignment: CircuitGroupAssignment + object_circuit_termination: CircuitTermination + object_circuit_type: CircuitType + object_cluster: Cluster + object_cluster_group: ClusterGroup + object_cluster_type: ClusterType + object_console_port: ConsolePort + object_console_server_port: ConsoleServerPort + object_contact: Contact + object_contact_assignment: ContactAssignment + object_contact_group: ContactGroup + object_contact_role: ContactRole + object_device: Device + object_device_bay: DeviceBay + object_device_role: DeviceRole + object_device_type: DeviceType + object_fhrp_group: FHRPGroup + object_fhrp_group_assignment: FHRPGroupAssignment + object_front_port: FrontPort + object_ike_policy: IKEPolicy + object_ike_proposal: IKEProposal + object_ip_address: IPAddress + object_ip_range: IPRange + object_ip_sec_policy: IPSecPolicy + object_ip_sec_profile: IPSecProfile + object_ip_sec_proposal: IPSecProposal + object_interface: Interface + object_inventory_item: InventoryItem + object_inventory_item_role: InventoryItemRole + object_l2vpn: L2VPN + object_l2vpn_termination: L2VPNTermination + object_location: Location + object_mac_address: MACAddress + object_manufacturer: Manufacturer + object_module: Module + object_module_bay: ModuleBay + object_module_type: ModuleType + object_platform: Platform + object_power_feed: PowerFeed + object_power_outlet: PowerOutlet + object_power_panel: PowerPanel + object_power_port: PowerPort + object_prefix: Prefix + object_provider: Provider + object_provider_account: ProviderAccount + object_provider_network: ProviderNetwork + object_rir: RIR + object_rack: Rack + object_rack_reservation: RackReservation + object_rack_role: RackRole + object_rack_type: RackType + object_rear_port: RearPort + object_region: Region + object_role: Role + object_route_target: RouteTarget + object_service: Service + object_site: Site + object_site_group: SiteGroup + object_tag: Tag + object_tenant: Tenant + object_tenant_group: TenantGroup + object_tunnel: Tunnel + object_tunnel_group: TunnelGroup + object_tunnel_termination: TunnelTermination + object_vlan: VLAN + object_vlan_group: VLANGroup + object_vlan_translation_policy: VLANTranslationPolicy + object_vlan_translation_rule: VLANTranslationRule + object_vm_interface: VMInterface + object_vrf: VRF + object_virtual_chassis: VirtualChassis + object_virtual_circuit: VirtualCircuit + object_virtual_circuit_termination: VirtualCircuitTermination + object_virtual_circuit_type: VirtualCircuitType + object_virtual_device_context: VirtualDeviceContext + object_virtual_disk: VirtualDisk + object_virtual_machine: VirtualMachine + object_wireless_lan: WirelessLAN + object_wireless_lan_group: WirelessLANGroup + object_wireless_link: WirelessLink + def __init__(self, object_asn: _Optional[_Union[ASN, _Mapping]] = ..., object_asn_range: _Optional[_Union[ASNRange, _Mapping]] = ..., object_aggregate: _Optional[_Union[Aggregate, _Mapping]] = ..., object_cable: _Optional[_Union[Cable, _Mapping]] = ..., object_cable_path: _Optional[_Union[CablePath, _Mapping]] = ..., object_cable_termination: _Optional[_Union[CableTermination, _Mapping]] = ..., object_circuit: _Optional[_Union[Circuit, _Mapping]] = ..., object_circuit_group: _Optional[_Union[CircuitGroup, _Mapping]] = ..., object_circuit_group_assignment: _Optional[_Union[CircuitGroupAssignment, _Mapping]] = ..., object_circuit_termination: _Optional[_Union[CircuitTermination, _Mapping]] = ..., object_circuit_type: _Optional[_Union[CircuitType, _Mapping]] = ..., object_cluster: _Optional[_Union[Cluster, _Mapping]] = ..., object_cluster_group: _Optional[_Union[ClusterGroup, _Mapping]] = ..., object_cluster_type: _Optional[_Union[ClusterType, _Mapping]] = ..., object_console_port: _Optional[_Union[ConsolePort, _Mapping]] = ..., object_console_server_port: _Optional[_Union[ConsoleServerPort, _Mapping]] = ..., object_contact: _Optional[_Union[Contact, _Mapping]] = ..., object_contact_assignment: _Optional[_Union[ContactAssignment, _Mapping]] = ..., object_contact_group: _Optional[_Union[ContactGroup, _Mapping]] = ..., object_contact_role: _Optional[_Union[ContactRole, _Mapping]] = ..., object_device: _Optional[_Union[Device, _Mapping]] = ..., object_device_bay: _Optional[_Union[DeviceBay, _Mapping]] = ..., object_device_role: _Optional[_Union[DeviceRole, _Mapping]] = ..., object_device_type: _Optional[_Union[DeviceType, _Mapping]] = ..., object_fhrp_group: _Optional[_Union[FHRPGroup, _Mapping]] = ..., object_fhrp_group_assignment: _Optional[_Union[FHRPGroupAssignment, _Mapping]] = ..., object_front_port: _Optional[_Union[FrontPort, _Mapping]] = ..., object_ike_policy: _Optional[_Union[IKEPolicy, _Mapping]] = ..., object_ike_proposal: _Optional[_Union[IKEProposal, _Mapping]] = ..., object_ip_address: _Optional[_Union[IPAddress, _Mapping]] = ..., object_ip_range: _Optional[_Union[IPRange, _Mapping]] = ..., object_ip_sec_policy: _Optional[_Union[IPSecPolicy, _Mapping]] = ..., object_ip_sec_profile: _Optional[_Union[IPSecProfile, _Mapping]] = ..., object_ip_sec_proposal: _Optional[_Union[IPSecProposal, _Mapping]] = ..., object_interface: _Optional[_Union[Interface, _Mapping]] = ..., object_inventory_item: _Optional[_Union[InventoryItem, _Mapping]] = ..., object_inventory_item_role: _Optional[_Union[InventoryItemRole, _Mapping]] = ..., object_l2vpn: _Optional[_Union[L2VPN, _Mapping]] = ..., object_l2vpn_termination: _Optional[_Union[L2VPNTermination, _Mapping]] = ..., object_location: _Optional[_Union[Location, _Mapping]] = ..., object_mac_address: _Optional[_Union[MACAddress, _Mapping]] = ..., object_manufacturer: _Optional[_Union[Manufacturer, _Mapping]] = ..., object_module: _Optional[_Union[Module, _Mapping]] = ..., object_module_bay: _Optional[_Union[ModuleBay, _Mapping]] = ..., object_module_type: _Optional[_Union[ModuleType, _Mapping]] = ..., object_platform: _Optional[_Union[Platform, _Mapping]] = ..., object_power_feed: _Optional[_Union[PowerFeed, _Mapping]] = ..., object_power_outlet: _Optional[_Union[PowerOutlet, _Mapping]] = ..., object_power_panel: _Optional[_Union[PowerPanel, _Mapping]] = ..., object_power_port: _Optional[_Union[PowerPort, _Mapping]] = ..., object_prefix: _Optional[_Union[Prefix, _Mapping]] = ..., object_provider: _Optional[_Union[Provider, _Mapping]] = ..., object_provider_account: _Optional[_Union[ProviderAccount, _Mapping]] = ..., object_provider_network: _Optional[_Union[ProviderNetwork, _Mapping]] = ..., object_rir: _Optional[_Union[RIR, _Mapping]] = ..., object_rack: _Optional[_Union[Rack, _Mapping]] = ..., object_rack_reservation: _Optional[_Union[RackReservation, _Mapping]] = ..., object_rack_role: _Optional[_Union[RackRole, _Mapping]] = ..., object_rack_type: _Optional[_Union[RackType, _Mapping]] = ..., object_rear_port: _Optional[_Union[RearPort, _Mapping]] = ..., object_region: _Optional[_Union[Region, _Mapping]] = ..., object_role: _Optional[_Union[Role, _Mapping]] = ..., object_route_target: _Optional[_Union[RouteTarget, _Mapping]] = ..., object_service: _Optional[_Union[Service, _Mapping]] = ..., object_site: _Optional[_Union[Site, _Mapping]] = ..., object_site_group: _Optional[_Union[SiteGroup, _Mapping]] = ..., object_tag: _Optional[_Union[Tag, _Mapping]] = ..., object_tenant: _Optional[_Union[Tenant, _Mapping]] = ..., object_tenant_group: _Optional[_Union[TenantGroup, _Mapping]] = ..., object_tunnel: _Optional[_Union[Tunnel, _Mapping]] = ..., object_tunnel_group: _Optional[_Union[TunnelGroup, _Mapping]] = ..., object_tunnel_termination: _Optional[_Union[TunnelTermination, _Mapping]] = ..., object_vlan: _Optional[_Union[VLAN, _Mapping]] = ..., object_vlan_group: _Optional[_Union[VLANGroup, _Mapping]] = ..., object_vlan_translation_policy: _Optional[_Union[VLANTranslationPolicy, _Mapping]] = ..., object_vlan_translation_rule: _Optional[_Union[VLANTranslationRule, _Mapping]] = ..., object_vm_interface: _Optional[_Union[VMInterface, _Mapping]] = ..., object_vrf: _Optional[_Union[VRF, _Mapping]] = ..., object_virtual_chassis: _Optional[_Union[VirtualChassis, _Mapping]] = ..., object_virtual_circuit: _Optional[_Union[VirtualCircuit, _Mapping]] = ..., object_virtual_circuit_termination: _Optional[_Union[VirtualCircuitTermination, _Mapping]] = ..., object_virtual_circuit_type: _Optional[_Union[VirtualCircuitType, _Mapping]] = ..., object_virtual_device_context: _Optional[_Union[VirtualDeviceContext, _Mapping]] = ..., object_virtual_disk: _Optional[_Union[VirtualDisk, _Mapping]] = ..., object_virtual_machine: _Optional[_Union[VirtualMachine, _Mapping]] = ..., object_wireless_lan: _Optional[_Union[WirelessLAN, _Mapping]] = ..., object_wireless_lan_group: _Optional[_Union[WirelessLANGroup, _Mapping]] = ..., object_wireless_link: _Optional[_Union[WirelessLink, _Mapping]] = ...) -> None: ... + +class IKEPolicy(_message.Message): + __slots__ = ("name", "description", "version", "mode", "preshared_key", "comments", "tags", "custom_fields", "proposals") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + MODE_FIELD_NUMBER: _ClassVar[int] + PRESHARED_KEY_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + PROPOSALS_FIELD_NUMBER: _ClassVar[int] + name: str + description: str + version: int + mode: str + preshared_key: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + proposals: _containers.RepeatedCompositeFieldContainer[IKEProposal] + def __init__(self, name: _Optional[str] = ..., description: _Optional[str] = ..., version: _Optional[int] = ..., mode: _Optional[str] = ..., preshared_key: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ..., proposals: _Optional[_Iterable[_Union[IKEProposal, _Mapping]]] = ...) -> None: ... + +class IKEProposal(_message.Message): + __slots__ = ("name", "description", "authentication_method", "encryption_algorithm", "authentication_algorithm", "group", "sa_lifetime", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + AUTHENTICATION_METHOD_FIELD_NUMBER: _ClassVar[int] + ENCRYPTION_ALGORITHM_FIELD_NUMBER: _ClassVar[int] + AUTHENTICATION_ALGORITHM_FIELD_NUMBER: _ClassVar[int] + GROUP_FIELD_NUMBER: _ClassVar[int] + SA_LIFETIME_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + description: str + authentication_method: str + encryption_algorithm: str + authentication_algorithm: str + group: int + sa_lifetime: int + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., description: _Optional[str] = ..., authentication_method: _Optional[str] = ..., encryption_algorithm: _Optional[str] = ..., authentication_algorithm: _Optional[str] = ..., group: _Optional[int] = ..., sa_lifetime: _Optional[int] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class IPAddress(_message.Message): + __slots__ = ("address", "vrf", "tenant", "status", "role", "assigned_object_fhrp_group", "assigned_object_interface", "assigned_object_vm_interface", "nat_inside", "dns_name", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + ADDRESS_FIELD_NUMBER: _ClassVar[int] + VRF_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + ASSIGNED_OBJECT_FHRP_GROUP_FIELD_NUMBER: _ClassVar[int] + ASSIGNED_OBJECT_INTERFACE_FIELD_NUMBER: _ClassVar[int] + ASSIGNED_OBJECT_VM_INTERFACE_FIELD_NUMBER: _ClassVar[int] + NAT_INSIDE_FIELD_NUMBER: _ClassVar[int] + DNS_NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + address: str + vrf: VRF + tenant: Tenant + status: str + role: str + assigned_object_fhrp_group: FHRPGroup + assigned_object_interface: Interface + assigned_object_vm_interface: VMInterface + nat_inside: IPAddress + dns_name: str + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, address: _Optional[str] = ..., vrf: _Optional[_Union[VRF, _Mapping]] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., status: _Optional[str] = ..., role: _Optional[str] = ..., assigned_object_fhrp_group: _Optional[_Union[FHRPGroup, _Mapping]] = ..., assigned_object_interface: _Optional[_Union[Interface, _Mapping]] = ..., assigned_object_vm_interface: _Optional[_Union[VMInterface, _Mapping]] = ..., nat_inside: _Optional[_Union[IPAddress, _Mapping]] = ..., dns_name: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class IPRange(_message.Message): + __slots__ = ("start_address", "end_address", "vrf", "tenant", "status", "role", "description", "comments", "tags", "mark_utilized", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + START_ADDRESS_FIELD_NUMBER: _ClassVar[int] + END_ADDRESS_FIELD_NUMBER: _ClassVar[int] + VRF_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + MARK_UTILIZED_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + start_address: str + end_address: str + vrf: VRF + tenant: Tenant + status: str + role: Role + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + mark_utilized: bool + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, start_address: _Optional[str] = ..., end_address: _Optional[str] = ..., vrf: _Optional[_Union[VRF, _Mapping]] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., status: _Optional[str] = ..., role: _Optional[_Union[Role, _Mapping]] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., mark_utilized: bool = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class IPSecPolicy(_message.Message): + __slots__ = ("name", "description", "pfs_group", "comments", "tags", "custom_fields", "proposals") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + PFS_GROUP_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + PROPOSALS_FIELD_NUMBER: _ClassVar[int] + name: str + description: str + pfs_group: int + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + proposals: _containers.RepeatedCompositeFieldContainer[IPSecProposal] + def __init__(self, name: _Optional[str] = ..., description: _Optional[str] = ..., pfs_group: _Optional[int] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ..., proposals: _Optional[_Iterable[_Union[IPSecProposal, _Mapping]]] = ...) -> None: ... + +class IPSecProfile(_message.Message): + __slots__ = ("name", "description", "mode", "ike_policy", "ipsec_policy", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + MODE_FIELD_NUMBER: _ClassVar[int] + IKE_POLICY_FIELD_NUMBER: _ClassVar[int] + IPSEC_POLICY_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + description: str + mode: str + ike_policy: IKEPolicy + ipsec_policy: IPSecPolicy + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., description: _Optional[str] = ..., mode: _Optional[str] = ..., ike_policy: _Optional[_Union[IKEPolicy, _Mapping]] = ..., ipsec_policy: _Optional[_Union[IPSecPolicy, _Mapping]] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class IPSecProposal(_message.Message): + __slots__ = ("name", "description", "encryption_algorithm", "authentication_algorithm", "sa_lifetime_seconds", "sa_lifetime_data", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + ENCRYPTION_ALGORITHM_FIELD_NUMBER: _ClassVar[int] + AUTHENTICATION_ALGORITHM_FIELD_NUMBER: _ClassVar[int] + SA_LIFETIME_SECONDS_FIELD_NUMBER: _ClassVar[int] + SA_LIFETIME_DATA_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + description: str + encryption_algorithm: str + authentication_algorithm: str + sa_lifetime_seconds: int + sa_lifetime_data: int + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., description: _Optional[str] = ..., encryption_algorithm: _Optional[str] = ..., authentication_algorithm: _Optional[str] = ..., sa_lifetime_seconds: _Optional[int] = ..., sa_lifetime_data: _Optional[int] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Interface(_message.Message): + __slots__ = ("device", "module", "name", "label", "type", "enabled", "parent", "bridge", "lag", "mtu", "primary_mac_address", "speed", "duplex", "wwn", "mgmt_only", "description", "mode", "rf_role", "rf_channel", "poe_mode", "poe_type", "rf_channel_frequency", "rf_channel_width", "tx_power", "untagged_vlan", "qinq_svlan", "vlan_translation_policy", "mark_connected", "vrf", "tags", "custom_fields", "vdcs", "tagged_vlans", "wireless_lans") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + DEVICE_FIELD_NUMBER: _ClassVar[int] + MODULE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + LABEL_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + ENABLED_FIELD_NUMBER: _ClassVar[int] + PARENT_FIELD_NUMBER: _ClassVar[int] + BRIDGE_FIELD_NUMBER: _ClassVar[int] + LAG_FIELD_NUMBER: _ClassVar[int] + MTU_FIELD_NUMBER: _ClassVar[int] + PRIMARY_MAC_ADDRESS_FIELD_NUMBER: _ClassVar[int] + SPEED_FIELD_NUMBER: _ClassVar[int] + DUPLEX_FIELD_NUMBER: _ClassVar[int] + WWN_FIELD_NUMBER: _ClassVar[int] + MGMT_ONLY_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + MODE_FIELD_NUMBER: _ClassVar[int] + RF_ROLE_FIELD_NUMBER: _ClassVar[int] + RF_CHANNEL_FIELD_NUMBER: _ClassVar[int] + POE_MODE_FIELD_NUMBER: _ClassVar[int] + POE_TYPE_FIELD_NUMBER: _ClassVar[int] + RF_CHANNEL_FREQUENCY_FIELD_NUMBER: _ClassVar[int] + RF_CHANNEL_WIDTH_FIELD_NUMBER: _ClassVar[int] + TX_POWER_FIELD_NUMBER: _ClassVar[int] + UNTAGGED_VLAN_FIELD_NUMBER: _ClassVar[int] + QINQ_SVLAN_FIELD_NUMBER: _ClassVar[int] + VLAN_TRANSLATION_POLICY_FIELD_NUMBER: _ClassVar[int] + MARK_CONNECTED_FIELD_NUMBER: _ClassVar[int] + VRF_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + VDCS_FIELD_NUMBER: _ClassVar[int] + TAGGED_VLANS_FIELD_NUMBER: _ClassVar[int] + WIRELESS_LANS_FIELD_NUMBER: _ClassVar[int] + device: Device + module: Module + name: str + label: str + type: str + enabled: bool + parent: Interface + bridge: Interface + lag: Interface + mtu: int + primary_mac_address: MACAddress + speed: int + duplex: str + wwn: str + mgmt_only: bool + description: str + mode: str + rf_role: str + rf_channel: str + poe_mode: str + poe_type: str + rf_channel_frequency: float + rf_channel_width: float + tx_power: int + untagged_vlan: VLAN + qinq_svlan: VLAN + vlan_translation_policy: VLANTranslationPolicy + mark_connected: bool + vrf: VRF + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + vdcs: _containers.RepeatedCompositeFieldContainer[VirtualDeviceContext] + tagged_vlans: _containers.RepeatedCompositeFieldContainer[VLAN] + wireless_lans: _containers.RepeatedCompositeFieldContainer[WirelessLAN] + def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ..., module: _Optional[_Union[Module, _Mapping]] = ..., name: _Optional[str] = ..., label: _Optional[str] = ..., type: _Optional[str] = ..., enabled: bool = ..., parent: _Optional[_Union[Interface, _Mapping]] = ..., bridge: _Optional[_Union[Interface, _Mapping]] = ..., lag: _Optional[_Union[Interface, _Mapping]] = ..., mtu: _Optional[int] = ..., primary_mac_address: _Optional[_Union[MACAddress, _Mapping]] = ..., speed: _Optional[int] = ..., duplex: _Optional[str] = ..., wwn: _Optional[str] = ..., mgmt_only: bool = ..., description: _Optional[str] = ..., mode: _Optional[str] = ..., rf_role: _Optional[str] = ..., rf_channel: _Optional[str] = ..., poe_mode: _Optional[str] = ..., poe_type: _Optional[str] = ..., rf_channel_frequency: _Optional[float] = ..., rf_channel_width: _Optional[float] = ..., tx_power: _Optional[int] = ..., untagged_vlan: _Optional[_Union[VLAN, _Mapping]] = ..., qinq_svlan: _Optional[_Union[VLAN, _Mapping]] = ..., vlan_translation_policy: _Optional[_Union[VLANTranslationPolicy, _Mapping]] = ..., mark_connected: bool = ..., vrf: _Optional[_Union[VRF, _Mapping]] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ..., vdcs: _Optional[_Iterable[_Union[VirtualDeviceContext, _Mapping]]] = ..., tagged_vlans: _Optional[_Iterable[_Union[VLAN, _Mapping]]] = ..., wireless_lans: _Optional[_Iterable[_Union[WirelessLAN, _Mapping]]] = ...) -> None: ... + +class InventoryItem(_message.Message): + __slots__ = ("device", "parent", "name", "label", "status", "role", "manufacturer", "part_id", "serial", "asset_tag", "discovered", "description", "component_console_port", "component_console_server_port", "component_front_port", "component_interface", "component_power_outlet", "component_power_port", "component_rear_port", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + DEVICE_FIELD_NUMBER: _ClassVar[int] + PARENT_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + LABEL_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + MANUFACTURER_FIELD_NUMBER: _ClassVar[int] + PART_ID_FIELD_NUMBER: _ClassVar[int] + SERIAL_FIELD_NUMBER: _ClassVar[int] + ASSET_TAG_FIELD_NUMBER: _ClassVar[int] + DISCOVERED_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMPONENT_CONSOLE_PORT_FIELD_NUMBER: _ClassVar[int] + COMPONENT_CONSOLE_SERVER_PORT_FIELD_NUMBER: _ClassVar[int] + COMPONENT_FRONT_PORT_FIELD_NUMBER: _ClassVar[int] + COMPONENT_INTERFACE_FIELD_NUMBER: _ClassVar[int] + COMPONENT_POWER_OUTLET_FIELD_NUMBER: _ClassVar[int] + COMPONENT_POWER_PORT_FIELD_NUMBER: _ClassVar[int] + COMPONENT_REAR_PORT_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + device: Device + parent: InventoryItem + name: str + label: str + status: str + role: InventoryItemRole + manufacturer: Manufacturer + part_id: str + serial: str + asset_tag: str + discovered: bool + description: str + component_console_port: ConsolePort + component_console_server_port: ConsoleServerPort + component_front_port: FrontPort + component_interface: Interface + component_power_outlet: PowerOutlet + component_power_port: PowerPort + component_rear_port: RearPort + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ..., parent: _Optional[_Union[InventoryItem, _Mapping]] = ..., name: _Optional[str] = ..., label: _Optional[str] = ..., status: _Optional[str] = ..., role: _Optional[_Union[InventoryItemRole, _Mapping]] = ..., manufacturer: _Optional[_Union[Manufacturer, _Mapping]] = ..., part_id: _Optional[str] = ..., serial: _Optional[str] = ..., asset_tag: _Optional[str] = ..., discovered: bool = ..., description: _Optional[str] = ..., component_console_port: _Optional[_Union[ConsolePort, _Mapping]] = ..., component_console_server_port: _Optional[_Union[ConsoleServerPort, _Mapping]] = ..., component_front_port: _Optional[_Union[FrontPort, _Mapping]] = ..., component_interface: _Optional[_Union[Interface, _Mapping]] = ..., component_power_outlet: _Optional[_Union[PowerOutlet, _Mapping]] = ..., component_power_port: _Optional[_Union[PowerPort, _Mapping]] = ..., component_rear_port: _Optional[_Union[RearPort, _Mapping]] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class InventoryItemRole(_message.Message): + __slots__ = ("name", "slug", "color", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + COLOR_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + color: str + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., color: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class L2VPN(_message.Message): + __slots__ = ("identifier", "name", "slug", "type", "description", "comments", "tenant", "tags", "custom_fields", "import_targets", "export_targets") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + IDENTIFIER_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + IMPORT_TARGETS_FIELD_NUMBER: _ClassVar[int] + EXPORT_TARGETS_FIELD_NUMBER: _ClassVar[int] + identifier: int + name: str + slug: str + type: str + description: str + comments: str + tenant: Tenant + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + import_targets: _containers.RepeatedCompositeFieldContainer[RouteTarget] + export_targets: _containers.RepeatedCompositeFieldContainer[RouteTarget] + def __init__(self, identifier: _Optional[int] = ..., name: _Optional[str] = ..., slug: _Optional[str] = ..., type: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ..., import_targets: _Optional[_Iterable[_Union[RouteTarget, _Mapping]]] = ..., export_targets: _Optional[_Iterable[_Union[RouteTarget, _Mapping]]] = ...) -> None: ... + +class L2VPNTermination(_message.Message): + __slots__ = ("l2vpn", "assigned_object_interface", "assigned_object_vlan", "assigned_object_vm_interface", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + L2VPN_FIELD_NUMBER: _ClassVar[int] + ASSIGNED_OBJECT_INTERFACE_FIELD_NUMBER: _ClassVar[int] + ASSIGNED_OBJECT_VLAN_FIELD_NUMBER: _ClassVar[int] + ASSIGNED_OBJECT_VM_INTERFACE_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + l2vpn: L2VPN + assigned_object_interface: Interface + assigned_object_vlan: VLAN + assigned_object_vm_interface: VMInterface + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, l2vpn: _Optional[_Union[L2VPN, _Mapping]] = ..., assigned_object_interface: _Optional[_Union[Interface, _Mapping]] = ..., assigned_object_vlan: _Optional[_Union[VLAN, _Mapping]] = ..., assigned_object_vm_interface: _Optional[_Union[VMInterface, _Mapping]] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Location(_message.Message): + __slots__ = ("name", "slug", "site", "parent", "status", "tenant", "facility", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + SITE_FIELD_NUMBER: _ClassVar[int] + PARENT_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + FACILITY_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + site: Site + parent: Location + status: str + tenant: Tenant + facility: str + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., site: _Optional[_Union[Site, _Mapping]] = ..., parent: _Optional[_Union[Location, _Mapping]] = ..., status: _Optional[str] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., facility: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class MACAddress(_message.Message): + __slots__ = ("mac_address", "assigned_object_interface", "assigned_object_vm_interface", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + MAC_ADDRESS_FIELD_NUMBER: _ClassVar[int] + ASSIGNED_OBJECT_INTERFACE_FIELD_NUMBER: _ClassVar[int] + ASSIGNED_OBJECT_VM_INTERFACE_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + mac_address: str + assigned_object_interface: Interface + assigned_object_vm_interface: VMInterface + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, mac_address: _Optional[str] = ..., assigned_object_interface: _Optional[_Union[Interface, _Mapping]] = ..., assigned_object_vm_interface: _Optional[_Union[VMInterface, _Mapping]] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Manufacturer(_message.Message): + __slots__ = ("name", "slug", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Module(_message.Message): + __slots__ = ("device", "module_bay", "module_type", "status", "serial", "asset_tag", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + DEVICE_FIELD_NUMBER: _ClassVar[int] + MODULE_BAY_FIELD_NUMBER: _ClassVar[int] + MODULE_TYPE_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + SERIAL_FIELD_NUMBER: _ClassVar[int] + ASSET_TAG_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + device: Device + module_bay: ModuleBay + module_type: ModuleType + status: str + serial: str + asset_tag: str + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ..., module_bay: _Optional[_Union[ModuleBay, _Mapping]] = ..., module_type: _Optional[_Union[ModuleType, _Mapping]] = ..., status: _Optional[str] = ..., serial: _Optional[str] = ..., asset_tag: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class ModuleBay(_message.Message): + __slots__ = ("device", "module", "name", "installed_module", "label", "position", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + DEVICE_FIELD_NUMBER: _ClassVar[int] + MODULE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + INSTALLED_MODULE_FIELD_NUMBER: _ClassVar[int] + LABEL_FIELD_NUMBER: _ClassVar[int] + POSITION_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + device: Device + module: Module + name: str + installed_module: Module + label: str + position: str + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ..., module: _Optional[_Union[Module, _Mapping]] = ..., name: _Optional[str] = ..., installed_module: _Optional[_Union[Module, _Mapping]] = ..., label: _Optional[str] = ..., position: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class ModuleType(_message.Message): + __slots__ = ("manufacturer", "model", "part_number", "airflow", "weight", "weight_unit", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + MANUFACTURER_FIELD_NUMBER: _ClassVar[int] + MODEL_FIELD_NUMBER: _ClassVar[int] + PART_NUMBER_FIELD_NUMBER: _ClassVar[int] + AIRFLOW_FIELD_NUMBER: _ClassVar[int] + WEIGHT_FIELD_NUMBER: _ClassVar[int] + WEIGHT_UNIT_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + manufacturer: Manufacturer + model: str + part_number: str + airflow: str + weight: float + weight_unit: str + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, manufacturer: _Optional[_Union[Manufacturer, _Mapping]] = ..., model: _Optional[str] = ..., part_number: _Optional[str] = ..., airflow: _Optional[str] = ..., weight: _Optional[float] = ..., weight_unit: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Platform(_message.Message): + __slots__ = ("name", "slug", "manufacturer", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + MANUFACTURER_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + manufacturer: Manufacturer + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., manufacturer: _Optional[_Union[Manufacturer, _Mapping]] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class PowerFeed(_message.Message): + __slots__ = ("power_panel", "rack", "name", "status", "type", "supply", "phase", "voltage", "amperage", "max_utilization", "mark_connected", "description", "tenant", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + POWER_PANEL_FIELD_NUMBER: _ClassVar[int] + RACK_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + SUPPLY_FIELD_NUMBER: _ClassVar[int] + PHASE_FIELD_NUMBER: _ClassVar[int] + VOLTAGE_FIELD_NUMBER: _ClassVar[int] + AMPERAGE_FIELD_NUMBER: _ClassVar[int] + MAX_UTILIZATION_FIELD_NUMBER: _ClassVar[int] + MARK_CONNECTED_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + power_panel: PowerPanel + rack: Rack + name: str + status: str + type: str + supply: str + phase: str + voltage: int + amperage: int + max_utilization: int + mark_connected: bool + description: str + tenant: Tenant + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, power_panel: _Optional[_Union[PowerPanel, _Mapping]] = ..., rack: _Optional[_Union[Rack, _Mapping]] = ..., name: _Optional[str] = ..., status: _Optional[str] = ..., type: _Optional[str] = ..., supply: _Optional[str] = ..., phase: _Optional[str] = ..., voltage: _Optional[int] = ..., amperage: _Optional[int] = ..., max_utilization: _Optional[int] = ..., mark_connected: bool = ..., description: _Optional[str] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class PowerOutlet(_message.Message): + __slots__ = ("device", "module", "name", "label", "type", "color", "power_port", "feed_leg", "description", "mark_connected", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + DEVICE_FIELD_NUMBER: _ClassVar[int] + MODULE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + LABEL_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + COLOR_FIELD_NUMBER: _ClassVar[int] + POWER_PORT_FIELD_NUMBER: _ClassVar[int] + FEED_LEG_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + MARK_CONNECTED_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + device: Device + module: Module + name: str + label: str + type: str + color: str + power_port: PowerPort + feed_leg: str + description: str + mark_connected: bool + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ..., module: _Optional[_Union[Module, _Mapping]] = ..., name: _Optional[str] = ..., label: _Optional[str] = ..., type: _Optional[str] = ..., color: _Optional[str] = ..., power_port: _Optional[_Union[PowerPort, _Mapping]] = ..., feed_leg: _Optional[str] = ..., description: _Optional[str] = ..., mark_connected: bool = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class PowerPanel(_message.Message): + __slots__ = ("site", "location", "name", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + SITE_FIELD_NUMBER: _ClassVar[int] + LOCATION_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + site: Site + location: Location + name: str + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, site: _Optional[_Union[Site, _Mapping]] = ..., location: _Optional[_Union[Location, _Mapping]] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class PowerPort(_message.Message): + __slots__ = ("device", "module", "name", "label", "type", "maximum_draw", "allocated_draw", "description", "mark_connected", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + DEVICE_FIELD_NUMBER: _ClassVar[int] + MODULE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + LABEL_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + MAXIMUM_DRAW_FIELD_NUMBER: _ClassVar[int] + ALLOCATED_DRAW_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + MARK_CONNECTED_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + device: Device + module: Module + name: str + label: str + type: str + maximum_draw: int + allocated_draw: int + description: str + mark_connected: bool + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ..., module: _Optional[_Union[Module, _Mapping]] = ..., name: _Optional[str] = ..., label: _Optional[str] = ..., type: _Optional[str] = ..., maximum_draw: _Optional[int] = ..., allocated_draw: _Optional[int] = ..., description: _Optional[str] = ..., mark_connected: bool = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Prefix(_message.Message): + __slots__ = ("prefix", "vrf", "scope_location", "scope_region", "scope_site", "scope_site_group", "tenant", "vlan", "status", "role", "is_pool", "mark_utilized", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + PREFIX_FIELD_NUMBER: _ClassVar[int] + VRF_FIELD_NUMBER: _ClassVar[int] + SCOPE_LOCATION_FIELD_NUMBER: _ClassVar[int] + SCOPE_REGION_FIELD_NUMBER: _ClassVar[int] + SCOPE_SITE_FIELD_NUMBER: _ClassVar[int] + SCOPE_SITE_GROUP_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + VLAN_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + IS_POOL_FIELD_NUMBER: _ClassVar[int] + MARK_UTILIZED_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + prefix: str + vrf: VRF + scope_location: Location + scope_region: Region + scope_site: Site + scope_site_group: SiteGroup + tenant: Tenant + vlan: VLAN + status: str + role: Role + is_pool: bool + mark_utilized: bool + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, prefix: _Optional[str] = ..., vrf: _Optional[_Union[VRF, _Mapping]] = ..., scope_location: _Optional[_Union[Location, _Mapping]] = ..., scope_region: _Optional[_Union[Region, _Mapping]] = ..., scope_site: _Optional[_Union[Site, _Mapping]] = ..., scope_site_group: _Optional[_Union[SiteGroup, _Mapping]] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., vlan: _Optional[_Union[VLAN, _Mapping]] = ..., status: _Optional[str] = ..., role: _Optional[_Union[Role, _Mapping]] = ..., is_pool: bool = ..., mark_utilized: bool = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Provider(_message.Message): + __slots__ = ("name", "slug", "description", "comments", "tags", "custom_fields", "accounts", "asns") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + ACCOUNTS_FIELD_NUMBER: _ClassVar[int] + ASNS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + accounts: _containers.RepeatedCompositeFieldContainer[ProviderAccount] + asns: _containers.RepeatedCompositeFieldContainer[ASN] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ..., accounts: _Optional[_Iterable[_Union[ProviderAccount, _Mapping]]] = ..., asns: _Optional[_Iterable[_Union[ASN, _Mapping]]] = ...) -> None: ... + +class ProviderAccount(_message.Message): + __slots__ = ("provider", "name", "account", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + PROVIDER_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + ACCOUNT_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + provider: Provider + name: str + account: str + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, provider: _Optional[_Union[Provider, _Mapping]] = ..., name: _Optional[str] = ..., account: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class ProviderNetwork(_message.Message): + __slots__ = ("provider", "name", "service_id", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + PROVIDER_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + SERVICE_ID_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + provider: Provider + name: str + service_id: str + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, provider: _Optional[_Union[Provider, _Mapping]] = ..., name: _Optional[str] = ..., service_id: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class RIR(_message.Message): + __slots__ = ("name", "slug", "is_private", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + IS_PRIVATE_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + is_private: bool + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., is_private: bool = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Rack(_message.Message): + __slots__ = ("name", "facility_id", "site", "location", "tenant", "status", "role", "serial", "asset_tag", "rack_type", "form_factor", "width", "u_height", "starting_unit", "weight", "max_weight", "weight_unit", "desc_units", "outer_width", "outer_depth", "outer_unit", "mounting_depth", "airflow", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + FACILITY_ID_FIELD_NUMBER: _ClassVar[int] + SITE_FIELD_NUMBER: _ClassVar[int] + LOCATION_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + SERIAL_FIELD_NUMBER: _ClassVar[int] + ASSET_TAG_FIELD_NUMBER: _ClassVar[int] + RACK_TYPE_FIELD_NUMBER: _ClassVar[int] + FORM_FACTOR_FIELD_NUMBER: _ClassVar[int] + WIDTH_FIELD_NUMBER: _ClassVar[int] + U_HEIGHT_FIELD_NUMBER: _ClassVar[int] + STARTING_UNIT_FIELD_NUMBER: _ClassVar[int] + WEIGHT_FIELD_NUMBER: _ClassVar[int] + MAX_WEIGHT_FIELD_NUMBER: _ClassVar[int] + WEIGHT_UNIT_FIELD_NUMBER: _ClassVar[int] + DESC_UNITS_FIELD_NUMBER: _ClassVar[int] + OUTER_WIDTH_FIELD_NUMBER: _ClassVar[int] + OUTER_DEPTH_FIELD_NUMBER: _ClassVar[int] + OUTER_UNIT_FIELD_NUMBER: _ClassVar[int] + MOUNTING_DEPTH_FIELD_NUMBER: _ClassVar[int] + AIRFLOW_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + facility_id: str + site: Site + location: Location + tenant: Tenant + status: str + role: RackRole + serial: str + asset_tag: str + rack_type: RackType + form_factor: str + width: int + u_height: int + starting_unit: int + weight: float + max_weight: int + weight_unit: str + desc_units: bool + outer_width: int + outer_depth: int + outer_unit: str + mounting_depth: int + airflow: str + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., facility_id: _Optional[str] = ..., site: _Optional[_Union[Site, _Mapping]] = ..., location: _Optional[_Union[Location, _Mapping]] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., status: _Optional[str] = ..., role: _Optional[_Union[RackRole, _Mapping]] = ..., serial: _Optional[str] = ..., asset_tag: _Optional[str] = ..., rack_type: _Optional[_Union[RackType, _Mapping]] = ..., form_factor: _Optional[str] = ..., width: _Optional[int] = ..., u_height: _Optional[int] = ..., starting_unit: _Optional[int] = ..., weight: _Optional[float] = ..., max_weight: _Optional[int] = ..., weight_unit: _Optional[str] = ..., desc_units: bool = ..., outer_width: _Optional[int] = ..., outer_depth: _Optional[int] = ..., outer_unit: _Optional[str] = ..., mounting_depth: _Optional[int] = ..., airflow: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class RackReservation(_message.Message): + __slots__ = ("rack", "units", "tenant", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + RACK_FIELD_NUMBER: _ClassVar[int] + UNITS_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + rack: Rack + units: _containers.RepeatedScalarFieldContainer[int] + tenant: Tenant + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, rack: _Optional[_Union[Rack, _Mapping]] = ..., units: _Optional[_Iterable[int]] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class RackRole(_message.Message): + __slots__ = ("name", "slug", "color", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + COLOR_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + color: str + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., color: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class RackType(_message.Message): + __slots__ = ("manufacturer", "model", "slug", "description", "form_factor", "width", "u_height", "starting_unit", "desc_units", "outer_width", "outer_depth", "outer_unit", "weight", "max_weight", "weight_unit", "mounting_depth", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + MANUFACTURER_FIELD_NUMBER: _ClassVar[int] + MODEL_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + FORM_FACTOR_FIELD_NUMBER: _ClassVar[int] + WIDTH_FIELD_NUMBER: _ClassVar[int] + U_HEIGHT_FIELD_NUMBER: _ClassVar[int] + STARTING_UNIT_FIELD_NUMBER: _ClassVar[int] + DESC_UNITS_FIELD_NUMBER: _ClassVar[int] + OUTER_WIDTH_FIELD_NUMBER: _ClassVar[int] + OUTER_DEPTH_FIELD_NUMBER: _ClassVar[int] + OUTER_UNIT_FIELD_NUMBER: _ClassVar[int] + WEIGHT_FIELD_NUMBER: _ClassVar[int] + MAX_WEIGHT_FIELD_NUMBER: _ClassVar[int] + WEIGHT_UNIT_FIELD_NUMBER: _ClassVar[int] + MOUNTING_DEPTH_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + manufacturer: Manufacturer + model: str + slug: str + description: str + form_factor: str + width: int + u_height: int + starting_unit: int + desc_units: bool + outer_width: int + outer_depth: int + outer_unit: str + weight: float + max_weight: int + weight_unit: str + mounting_depth: int + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, manufacturer: _Optional[_Union[Manufacturer, _Mapping]] = ..., model: _Optional[str] = ..., slug: _Optional[str] = ..., description: _Optional[str] = ..., form_factor: _Optional[str] = ..., width: _Optional[int] = ..., u_height: _Optional[int] = ..., starting_unit: _Optional[int] = ..., desc_units: bool = ..., outer_width: _Optional[int] = ..., outer_depth: _Optional[int] = ..., outer_unit: _Optional[str] = ..., weight: _Optional[float] = ..., max_weight: _Optional[int] = ..., weight_unit: _Optional[str] = ..., mounting_depth: _Optional[int] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class RearPort(_message.Message): + __slots__ = ("device", "module", "name", "label", "type", "color", "positions", "description", "mark_connected", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + DEVICE_FIELD_NUMBER: _ClassVar[int] + MODULE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + LABEL_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + COLOR_FIELD_NUMBER: _ClassVar[int] + POSITIONS_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + MARK_CONNECTED_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + device: Device + module: Module + name: str + label: str + type: str + color: str + positions: int + description: str + mark_connected: bool + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ..., module: _Optional[_Union[Module, _Mapping]] = ..., name: _Optional[str] = ..., label: _Optional[str] = ..., type: _Optional[str] = ..., color: _Optional[str] = ..., positions: _Optional[int] = ..., description: _Optional[str] = ..., mark_connected: bool = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Region(_message.Message): + __slots__ = ("name", "slug", "parent", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + PARENT_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + parent: Region + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., parent: _Optional[_Union[Region, _Mapping]] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Role(_message.Message): + __slots__ = ("name", "slug", "weight", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + WEIGHT_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + weight: int + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., weight: _Optional[int] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class RouteTarget(_message.Message): + __slots__ = ("name", "tenant", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + tenant: Tenant + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Service(_message.Message): + __slots__ = ("device", "virtual_machine", "name", "protocol", "ports", "description", "comments", "tags", "custom_fields", "ipaddresses") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + DEVICE_FIELD_NUMBER: _ClassVar[int] + VIRTUAL_MACHINE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + PROTOCOL_FIELD_NUMBER: _ClassVar[int] + PORTS_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + IPADDRESSES_FIELD_NUMBER: _ClassVar[int] + device: Device + virtual_machine: VirtualMachine + name: str + protocol: str + ports: _containers.RepeatedScalarFieldContainer[int] + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + ipaddresses: _containers.RepeatedCompositeFieldContainer[IPAddress] + def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ..., virtual_machine: _Optional[_Union[VirtualMachine, _Mapping]] = ..., name: _Optional[str] = ..., protocol: _Optional[str] = ..., ports: _Optional[_Iterable[int]] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ..., ipaddresses: _Optional[_Iterable[_Union[IPAddress, _Mapping]]] = ...) -> None: ... + +class Site(_message.Message): + __slots__ = ("name", "slug", "status", "region", "group", "tenant", "facility", "time_zone", "description", "physical_address", "shipping_address", "latitude", "longitude", "comments", "tags", "custom_fields", "asns") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + REGION_FIELD_NUMBER: _ClassVar[int] + GROUP_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + FACILITY_FIELD_NUMBER: _ClassVar[int] + TIME_ZONE_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + PHYSICAL_ADDRESS_FIELD_NUMBER: _ClassVar[int] + SHIPPING_ADDRESS_FIELD_NUMBER: _ClassVar[int] + LATITUDE_FIELD_NUMBER: _ClassVar[int] + LONGITUDE_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + ASNS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + status: str + region: Region + group: SiteGroup + tenant: Tenant + facility: str + time_zone: str + description: str + physical_address: str + shipping_address: str + latitude: float + longitude: float + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + asns: _containers.RepeatedCompositeFieldContainer[ASN] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., status: _Optional[str] = ..., region: _Optional[_Union[Region, _Mapping]] = ..., group: _Optional[_Union[SiteGroup, _Mapping]] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., facility: _Optional[str] = ..., time_zone: _Optional[str] = ..., description: _Optional[str] = ..., physical_address: _Optional[str] = ..., shipping_address: _Optional[str] = ..., latitude: _Optional[float] = ..., longitude: _Optional[float] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ..., asns: _Optional[_Iterable[_Union[ASN, _Mapping]]] = ...) -> None: ... + +class SiteGroup(_message.Message): + __slots__ = ("name", "slug", "parent", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + PARENT_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + parent: SiteGroup + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., parent: _Optional[_Union[SiteGroup, _Mapping]] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class Tag(_message.Message): + __slots__ = ("name", "slug", "color") + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + COLOR_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + color: str + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., color: _Optional[str] = ...) -> None: ... -class Cluster(_message.Message): - __slots__ = ("name", "type", "group", "site", "status", "description", "tags") +class Tenant(_message.Message): + __slots__ = ("name", "slug", "group", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... NAME_FIELD_NUMBER: _ClassVar[int] - TYPE_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] GROUP_FIELD_NUMBER: _ClassVar[int] - SITE_FIELD_NUMBER: _ClassVar[int] - STATUS_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] name: str - type: ClusterType - group: ClusterGroup - site: Site - status: str + slug: str + group: TenantGroup description: str + comments: str tags: _containers.RepeatedCompositeFieldContainer[Tag] - def __init__(self, name: _Optional[str] = ..., type: _Optional[_Union[ClusterType, _Mapping]] = ..., group: _Optional[_Union[ClusterGroup, _Mapping]] = ..., site: _Optional[_Union[Site, _Mapping]] = ..., status: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ...) -> None: ... + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., group: _Optional[_Union[TenantGroup, _Mapping]] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... -class ClusterType(_message.Message): - __slots__ = ("name", "slug", "description", "tags") +class TenantGroup(_message.Message): + __slots__ = ("name", "slug", "parent", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... NAME_FIELD_NUMBER: _ClassVar[int] SLUG_FIELD_NUMBER: _ClassVar[int] + PARENT_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] name: str slug: str + parent: TenantGroup description: str tags: _containers.RepeatedCompositeFieldContainer[Tag] - def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ...) -> None: ... + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., parent: _Optional[_Union[TenantGroup, _Mapping]] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... -class ClusterGroup(_message.Message): - __slots__ = ("name", "slug", "description", "tags") +class Tunnel(_message.Message): + __slots__ = ("name", "status", "group", "encapsulation", "ipsec_profile", "tenant", "tunnel_id", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + GROUP_FIELD_NUMBER: _ClassVar[int] + ENCAPSULATION_FIELD_NUMBER: _ClassVar[int] + IPSEC_PROFILE_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + TUNNEL_ID_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + status: str + group: TunnelGroup + encapsulation: str + ipsec_profile: IPSecProfile + tenant: Tenant + tunnel_id: int + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., status: _Optional[str] = ..., group: _Optional[_Union[TunnelGroup, _Mapping]] = ..., encapsulation: _Optional[str] = ..., ipsec_profile: _Optional[_Union[IPSecProfile, _Mapping]] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., tunnel_id: _Optional[int] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class TunnelGroup(_message.Message): + __slots__ = ("name", "slug", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... NAME_FIELD_NUMBER: _ClassVar[int] SLUG_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] name: str slug: str description: str tags: _containers.RepeatedCompositeFieldContainer[Tag] - def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ...) -> None: ... + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... -class VirtualMachine(_message.Message): - __slots__ = ("name", "status", "site", "cluster", "role", "device", "platform", "primary_ip4", "primary_ip6", "vcpus", "memory", "disk", "description", "comments", "tags") +class TunnelTermination(_message.Message): + __slots__ = ("tunnel", "role", "termination_asn", "termination_asn_range", "termination_aggregate", "termination_cable", "termination_cable_path", "termination_cable_termination", "termination_circuit", "termination_circuit_group", "termination_circuit_group_assignment", "termination_circuit_termination", "termination_circuit_type", "termination_cluster", "termination_cluster_group", "termination_cluster_type", "termination_console_port", "termination_console_server_port", "termination_contact", "termination_contact_assignment", "termination_contact_group", "termination_contact_role", "termination_device", "termination_device_bay", "termination_device_role", "termination_device_type", "termination_fhrp_group", "termination_fhrp_group_assignment", "termination_front_port", "termination_ike_policy", "termination_ike_proposal", "termination_ip_address", "termination_ip_range", "termination_ip_sec_policy", "termination_ip_sec_profile", "termination_ip_sec_proposal", "termination_interface", "termination_inventory_item", "termination_inventory_item_role", "termination_l2vpn", "termination_l2vpn_termination", "termination_location", "termination_mac_address", "termination_manufacturer", "termination_module", "termination_module_bay", "termination_module_type", "termination_platform", "termination_power_feed", "termination_power_outlet", "termination_power_panel", "termination_power_port", "termination_prefix", "termination_provider", "termination_provider_account", "termination_provider_network", "termination_rir", "termination_rack", "termination_rack_reservation", "termination_rack_role", "termination_rack_type", "termination_rear_port", "termination_region", "termination_role", "termination_route_target", "termination_service", "termination_site", "termination_site_group", "termination_tag", "termination_tenant", "termination_tenant_group", "termination_tunnel", "termination_tunnel_group", "termination_tunnel_termination", "termination_vlan", "termination_vlan_group", "termination_vlan_translation_policy", "termination_vlan_translation_rule", "termination_vm_interface", "termination_vrf", "termination_virtual_chassis", "termination_virtual_circuit", "termination_virtual_circuit_termination", "termination_virtual_circuit_type", "termination_virtual_device_context", "termination_virtual_disk", "termination_virtual_machine", "termination_wireless_lan", "termination_wireless_lan_group", "termination_wireless_link", "outside_ip", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + TUNNEL_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_ASN_FIELD_NUMBER: _ClassVar[int] + TERMINATION_ASN_RANGE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_AGGREGATE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CABLE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CABLE_PATH_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CABLE_TERMINATION_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CIRCUIT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CIRCUIT_GROUP_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CIRCUIT_GROUP_ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CIRCUIT_TERMINATION_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CIRCUIT_TYPE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CLUSTER_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CLUSTER_GROUP_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CLUSTER_TYPE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CONSOLE_PORT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CONSOLE_SERVER_PORT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CONTACT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CONTACT_ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CONTACT_GROUP_FIELD_NUMBER: _ClassVar[int] + TERMINATION_CONTACT_ROLE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_DEVICE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_DEVICE_BAY_FIELD_NUMBER: _ClassVar[int] + TERMINATION_DEVICE_ROLE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_DEVICE_TYPE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_FHRP_GROUP_FIELD_NUMBER: _ClassVar[int] + TERMINATION_FHRP_GROUP_ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_FRONT_PORT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_IKE_POLICY_FIELD_NUMBER: _ClassVar[int] + TERMINATION_IKE_PROPOSAL_FIELD_NUMBER: _ClassVar[int] + TERMINATION_IP_ADDRESS_FIELD_NUMBER: _ClassVar[int] + TERMINATION_IP_RANGE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_IP_SEC_POLICY_FIELD_NUMBER: _ClassVar[int] + TERMINATION_IP_SEC_PROFILE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_IP_SEC_PROPOSAL_FIELD_NUMBER: _ClassVar[int] + TERMINATION_INTERFACE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_INVENTORY_ITEM_FIELD_NUMBER: _ClassVar[int] + TERMINATION_INVENTORY_ITEM_ROLE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_L2VPN_FIELD_NUMBER: _ClassVar[int] + TERMINATION_L2VPN_TERMINATION_FIELD_NUMBER: _ClassVar[int] + TERMINATION_LOCATION_FIELD_NUMBER: _ClassVar[int] + TERMINATION_MAC_ADDRESS_FIELD_NUMBER: _ClassVar[int] + TERMINATION_MANUFACTURER_FIELD_NUMBER: _ClassVar[int] + TERMINATION_MODULE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_MODULE_BAY_FIELD_NUMBER: _ClassVar[int] + TERMINATION_MODULE_TYPE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_PLATFORM_FIELD_NUMBER: _ClassVar[int] + TERMINATION_POWER_FEED_FIELD_NUMBER: _ClassVar[int] + TERMINATION_POWER_OUTLET_FIELD_NUMBER: _ClassVar[int] + TERMINATION_POWER_PANEL_FIELD_NUMBER: _ClassVar[int] + TERMINATION_POWER_PORT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_PREFIX_FIELD_NUMBER: _ClassVar[int] + TERMINATION_PROVIDER_FIELD_NUMBER: _ClassVar[int] + TERMINATION_PROVIDER_ACCOUNT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_PROVIDER_NETWORK_FIELD_NUMBER: _ClassVar[int] + TERMINATION_RIR_FIELD_NUMBER: _ClassVar[int] + TERMINATION_RACK_FIELD_NUMBER: _ClassVar[int] + TERMINATION_RACK_RESERVATION_FIELD_NUMBER: _ClassVar[int] + TERMINATION_RACK_ROLE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_RACK_TYPE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_REAR_PORT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_REGION_FIELD_NUMBER: _ClassVar[int] + TERMINATION_ROLE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_ROUTE_TARGET_FIELD_NUMBER: _ClassVar[int] + TERMINATION_SERVICE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_SITE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_SITE_GROUP_FIELD_NUMBER: _ClassVar[int] + TERMINATION_TAG_FIELD_NUMBER: _ClassVar[int] + TERMINATION_TENANT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_TENANT_GROUP_FIELD_NUMBER: _ClassVar[int] + TERMINATION_TUNNEL_FIELD_NUMBER: _ClassVar[int] + TERMINATION_TUNNEL_GROUP_FIELD_NUMBER: _ClassVar[int] + TERMINATION_TUNNEL_TERMINATION_FIELD_NUMBER: _ClassVar[int] + TERMINATION_VLAN_FIELD_NUMBER: _ClassVar[int] + TERMINATION_VLAN_GROUP_FIELD_NUMBER: _ClassVar[int] + TERMINATION_VLAN_TRANSLATION_POLICY_FIELD_NUMBER: _ClassVar[int] + TERMINATION_VLAN_TRANSLATION_RULE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_VM_INTERFACE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_VRF_FIELD_NUMBER: _ClassVar[int] + TERMINATION_VIRTUAL_CHASSIS_FIELD_NUMBER: _ClassVar[int] + TERMINATION_VIRTUAL_CIRCUIT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_VIRTUAL_CIRCUIT_TERMINATION_FIELD_NUMBER: _ClassVar[int] + TERMINATION_VIRTUAL_CIRCUIT_TYPE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_VIRTUAL_DEVICE_CONTEXT_FIELD_NUMBER: _ClassVar[int] + TERMINATION_VIRTUAL_DISK_FIELD_NUMBER: _ClassVar[int] + TERMINATION_VIRTUAL_MACHINE_FIELD_NUMBER: _ClassVar[int] + TERMINATION_WIRELESS_LAN_FIELD_NUMBER: _ClassVar[int] + TERMINATION_WIRELESS_LAN_GROUP_FIELD_NUMBER: _ClassVar[int] + TERMINATION_WIRELESS_LINK_FIELD_NUMBER: _ClassVar[int] + OUTSIDE_IP_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + tunnel: Tunnel + role: str + termination_asn: ASN + termination_asn_range: ASNRange + termination_aggregate: Aggregate + termination_cable: Cable + termination_cable_path: CablePath + termination_cable_termination: CableTermination + termination_circuit: Circuit + termination_circuit_group: CircuitGroup + termination_circuit_group_assignment: CircuitGroupAssignment + termination_circuit_termination: CircuitTermination + termination_circuit_type: CircuitType + termination_cluster: Cluster + termination_cluster_group: ClusterGroup + termination_cluster_type: ClusterType + termination_console_port: ConsolePort + termination_console_server_port: ConsoleServerPort + termination_contact: Contact + termination_contact_assignment: ContactAssignment + termination_contact_group: ContactGroup + termination_contact_role: ContactRole + termination_device: Device + termination_device_bay: DeviceBay + termination_device_role: DeviceRole + termination_device_type: DeviceType + termination_fhrp_group: FHRPGroup + termination_fhrp_group_assignment: FHRPGroupAssignment + termination_front_port: FrontPort + termination_ike_policy: IKEPolicy + termination_ike_proposal: IKEProposal + termination_ip_address: IPAddress + termination_ip_range: IPRange + termination_ip_sec_policy: IPSecPolicy + termination_ip_sec_profile: IPSecProfile + termination_ip_sec_proposal: IPSecProposal + termination_interface: Interface + termination_inventory_item: InventoryItem + termination_inventory_item_role: InventoryItemRole + termination_l2vpn: L2VPN + termination_l2vpn_termination: L2VPNTermination + termination_location: Location + termination_mac_address: MACAddress + termination_manufacturer: Manufacturer + termination_module: Module + termination_module_bay: ModuleBay + termination_module_type: ModuleType + termination_platform: Platform + termination_power_feed: PowerFeed + termination_power_outlet: PowerOutlet + termination_power_panel: PowerPanel + termination_power_port: PowerPort + termination_prefix: Prefix + termination_provider: Provider + termination_provider_account: ProviderAccount + termination_provider_network: ProviderNetwork + termination_rir: RIR + termination_rack: Rack + termination_rack_reservation: RackReservation + termination_rack_role: RackRole + termination_rack_type: RackType + termination_rear_port: RearPort + termination_region: Region + termination_role: Role + termination_route_target: RouteTarget + termination_service: Service + termination_site: Site + termination_site_group: SiteGroup + termination_tag: Tag + termination_tenant: Tenant + termination_tenant_group: TenantGroup + termination_tunnel: Tunnel + termination_tunnel_group: TunnelGroup + termination_tunnel_termination: TunnelTermination + termination_vlan: VLAN + termination_vlan_group: VLANGroup + termination_vlan_translation_policy: VLANTranslationPolicy + termination_vlan_translation_rule: VLANTranslationRule + termination_vm_interface: VMInterface + termination_vrf: VRF + termination_virtual_chassis: VirtualChassis + termination_virtual_circuit: VirtualCircuit + termination_virtual_circuit_termination: VirtualCircuitTermination + termination_virtual_circuit_type: VirtualCircuitType + termination_virtual_device_context: VirtualDeviceContext + termination_virtual_disk: VirtualDisk + termination_virtual_machine: VirtualMachine + termination_wireless_lan: WirelessLAN + termination_wireless_lan_group: WirelessLANGroup + termination_wireless_link: WirelessLink + outside_ip: IPAddress + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, tunnel: _Optional[_Union[Tunnel, _Mapping]] = ..., role: _Optional[str] = ..., termination_asn: _Optional[_Union[ASN, _Mapping]] = ..., termination_asn_range: _Optional[_Union[ASNRange, _Mapping]] = ..., termination_aggregate: _Optional[_Union[Aggregate, _Mapping]] = ..., termination_cable: _Optional[_Union[Cable, _Mapping]] = ..., termination_cable_path: _Optional[_Union[CablePath, _Mapping]] = ..., termination_cable_termination: _Optional[_Union[CableTermination, _Mapping]] = ..., termination_circuit: _Optional[_Union[Circuit, _Mapping]] = ..., termination_circuit_group: _Optional[_Union[CircuitGroup, _Mapping]] = ..., termination_circuit_group_assignment: _Optional[_Union[CircuitGroupAssignment, _Mapping]] = ..., termination_circuit_termination: _Optional[_Union[CircuitTermination, _Mapping]] = ..., termination_circuit_type: _Optional[_Union[CircuitType, _Mapping]] = ..., termination_cluster: _Optional[_Union[Cluster, _Mapping]] = ..., termination_cluster_group: _Optional[_Union[ClusterGroup, _Mapping]] = ..., termination_cluster_type: _Optional[_Union[ClusterType, _Mapping]] = ..., termination_console_port: _Optional[_Union[ConsolePort, _Mapping]] = ..., termination_console_server_port: _Optional[_Union[ConsoleServerPort, _Mapping]] = ..., termination_contact: _Optional[_Union[Contact, _Mapping]] = ..., termination_contact_assignment: _Optional[_Union[ContactAssignment, _Mapping]] = ..., termination_contact_group: _Optional[_Union[ContactGroup, _Mapping]] = ..., termination_contact_role: _Optional[_Union[ContactRole, _Mapping]] = ..., termination_device: _Optional[_Union[Device, _Mapping]] = ..., termination_device_bay: _Optional[_Union[DeviceBay, _Mapping]] = ..., termination_device_role: _Optional[_Union[DeviceRole, _Mapping]] = ..., termination_device_type: _Optional[_Union[DeviceType, _Mapping]] = ..., termination_fhrp_group: _Optional[_Union[FHRPGroup, _Mapping]] = ..., termination_fhrp_group_assignment: _Optional[_Union[FHRPGroupAssignment, _Mapping]] = ..., termination_front_port: _Optional[_Union[FrontPort, _Mapping]] = ..., termination_ike_policy: _Optional[_Union[IKEPolicy, _Mapping]] = ..., termination_ike_proposal: _Optional[_Union[IKEProposal, _Mapping]] = ..., termination_ip_address: _Optional[_Union[IPAddress, _Mapping]] = ..., termination_ip_range: _Optional[_Union[IPRange, _Mapping]] = ..., termination_ip_sec_policy: _Optional[_Union[IPSecPolicy, _Mapping]] = ..., termination_ip_sec_profile: _Optional[_Union[IPSecProfile, _Mapping]] = ..., termination_ip_sec_proposal: _Optional[_Union[IPSecProposal, _Mapping]] = ..., termination_interface: _Optional[_Union[Interface, _Mapping]] = ..., termination_inventory_item: _Optional[_Union[InventoryItem, _Mapping]] = ..., termination_inventory_item_role: _Optional[_Union[InventoryItemRole, _Mapping]] = ..., termination_l2vpn: _Optional[_Union[L2VPN, _Mapping]] = ..., termination_l2vpn_termination: _Optional[_Union[L2VPNTermination, _Mapping]] = ..., termination_location: _Optional[_Union[Location, _Mapping]] = ..., termination_mac_address: _Optional[_Union[MACAddress, _Mapping]] = ..., termination_manufacturer: _Optional[_Union[Manufacturer, _Mapping]] = ..., termination_module: _Optional[_Union[Module, _Mapping]] = ..., termination_module_bay: _Optional[_Union[ModuleBay, _Mapping]] = ..., termination_module_type: _Optional[_Union[ModuleType, _Mapping]] = ..., termination_platform: _Optional[_Union[Platform, _Mapping]] = ..., termination_power_feed: _Optional[_Union[PowerFeed, _Mapping]] = ..., termination_power_outlet: _Optional[_Union[PowerOutlet, _Mapping]] = ..., termination_power_panel: _Optional[_Union[PowerPanel, _Mapping]] = ..., termination_power_port: _Optional[_Union[PowerPort, _Mapping]] = ..., termination_prefix: _Optional[_Union[Prefix, _Mapping]] = ..., termination_provider: _Optional[_Union[Provider, _Mapping]] = ..., termination_provider_account: _Optional[_Union[ProviderAccount, _Mapping]] = ..., termination_provider_network: _Optional[_Union[ProviderNetwork, _Mapping]] = ..., termination_rir: _Optional[_Union[RIR, _Mapping]] = ..., termination_rack: _Optional[_Union[Rack, _Mapping]] = ..., termination_rack_reservation: _Optional[_Union[RackReservation, _Mapping]] = ..., termination_rack_role: _Optional[_Union[RackRole, _Mapping]] = ..., termination_rack_type: _Optional[_Union[RackType, _Mapping]] = ..., termination_rear_port: _Optional[_Union[RearPort, _Mapping]] = ..., termination_region: _Optional[_Union[Region, _Mapping]] = ..., termination_role: _Optional[_Union[Role, _Mapping]] = ..., termination_route_target: _Optional[_Union[RouteTarget, _Mapping]] = ..., termination_service: _Optional[_Union[Service, _Mapping]] = ..., termination_site: _Optional[_Union[Site, _Mapping]] = ..., termination_site_group: _Optional[_Union[SiteGroup, _Mapping]] = ..., termination_tag: _Optional[_Union[Tag, _Mapping]] = ..., termination_tenant: _Optional[_Union[Tenant, _Mapping]] = ..., termination_tenant_group: _Optional[_Union[TenantGroup, _Mapping]] = ..., termination_tunnel: _Optional[_Union[Tunnel, _Mapping]] = ..., termination_tunnel_group: _Optional[_Union[TunnelGroup, _Mapping]] = ..., termination_tunnel_termination: _Optional[_Union[TunnelTermination, _Mapping]] = ..., termination_vlan: _Optional[_Union[VLAN, _Mapping]] = ..., termination_vlan_group: _Optional[_Union[VLANGroup, _Mapping]] = ..., termination_vlan_translation_policy: _Optional[_Union[VLANTranslationPolicy, _Mapping]] = ..., termination_vlan_translation_rule: _Optional[_Union[VLANTranslationRule, _Mapping]] = ..., termination_vm_interface: _Optional[_Union[VMInterface, _Mapping]] = ..., termination_vrf: _Optional[_Union[VRF, _Mapping]] = ..., termination_virtual_chassis: _Optional[_Union[VirtualChassis, _Mapping]] = ..., termination_virtual_circuit: _Optional[_Union[VirtualCircuit, _Mapping]] = ..., termination_virtual_circuit_termination: _Optional[_Union[VirtualCircuitTermination, _Mapping]] = ..., termination_virtual_circuit_type: _Optional[_Union[VirtualCircuitType, _Mapping]] = ..., termination_virtual_device_context: _Optional[_Union[VirtualDeviceContext, _Mapping]] = ..., termination_virtual_disk: _Optional[_Union[VirtualDisk, _Mapping]] = ..., termination_virtual_machine: _Optional[_Union[VirtualMachine, _Mapping]] = ..., termination_wireless_lan: _Optional[_Union[WirelessLAN, _Mapping]] = ..., termination_wireless_lan_group: _Optional[_Union[WirelessLANGroup, _Mapping]] = ..., termination_wireless_link: _Optional[_Union[WirelessLink, _Mapping]] = ..., outside_ip: _Optional[_Union[IPAddress, _Mapping]] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class VLAN(_message.Message): + __slots__ = ("site", "group", "vid", "name", "tenant", "status", "role", "description", "qinq_role", "qinq_svlan", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + SITE_FIELD_NUMBER: _ClassVar[int] + GROUP_FIELD_NUMBER: _ClassVar[int] + VID_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] STATUS_FIELD_NUMBER: _ClassVar[int] - SITE_FIELD_NUMBER: _ClassVar[int] - CLUSTER_FIELD_NUMBER: _ClassVar[int] ROLE_FIELD_NUMBER: _ClassVar[int] - DEVICE_FIELD_NUMBER: _ClassVar[int] - PLATFORM_FIELD_NUMBER: _ClassVar[int] - PRIMARY_IP4_FIELD_NUMBER: _ClassVar[int] - PRIMARY_IP6_FIELD_NUMBER: _ClassVar[int] - VCPUS_FIELD_NUMBER: _ClassVar[int] - MEMORY_FIELD_NUMBER: _ClassVar[int] - DISK_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + QINQ_ROLE_FIELD_NUMBER: _ClassVar[int] + QINQ_SVLAN_FIELD_NUMBER: _ClassVar[int] COMMENTS_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + site: Site + group: VLANGroup + vid: int name: str + tenant: Tenant status: str - site: Site - cluster: Cluster role: Role - device: Device - platform: Platform - primary_ip4: IPAddress - primary_ip6: IPAddress - vcpus: int - memory: int - disk: int description: str + qinq_role: str + qinq_svlan: VLAN comments: str tags: _containers.RepeatedCompositeFieldContainer[Tag] - def __init__(self, name: _Optional[str] = ..., status: _Optional[str] = ..., site: _Optional[_Union[Site, _Mapping]] = ..., cluster: _Optional[_Union[Cluster, _Mapping]] = ..., role: _Optional[_Union[Role, _Mapping]] = ..., device: _Optional[_Union[Device, _Mapping]] = ..., platform: _Optional[_Union[Platform, _Mapping]] = ..., primary_ip4: _Optional[_Union[IPAddress, _Mapping]] = ..., primary_ip6: _Optional[_Union[IPAddress, _Mapping]] = ..., vcpus: _Optional[int] = ..., memory: _Optional[int] = ..., disk: _Optional[int] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ...) -> None: ... + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, site: _Optional[_Union[Site, _Mapping]] = ..., group: _Optional[_Union[VLANGroup, _Mapping]] = ..., vid: _Optional[int] = ..., name: _Optional[str] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., status: _Optional[str] = ..., role: _Optional[_Union[Role, _Mapping]] = ..., description: _Optional[str] = ..., qinq_role: _Optional[str] = ..., qinq_svlan: _Optional[_Union[VLAN, _Mapping]] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class VLANGroup(_message.Message): + __slots__ = ("name", "slug", "scope_cluster", "scope_cluster_group", "scope_location", "scope_rack", "scope_region", "scope_site", "scope_site_group", "vid_ranges", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] + SCOPE_CLUSTER_FIELD_NUMBER: _ClassVar[int] + SCOPE_CLUSTER_GROUP_FIELD_NUMBER: _ClassVar[int] + SCOPE_LOCATION_FIELD_NUMBER: _ClassVar[int] + SCOPE_RACK_FIELD_NUMBER: _ClassVar[int] + SCOPE_REGION_FIELD_NUMBER: _ClassVar[int] + SCOPE_SITE_FIELD_NUMBER: _ClassVar[int] + SCOPE_SITE_GROUP_FIELD_NUMBER: _ClassVar[int] + VID_RANGES_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + slug: str + scope_cluster: Cluster + scope_cluster_group: ClusterGroup + scope_location: Location + scope_rack: Rack + scope_region: Region + scope_site: Site + scope_site_group: SiteGroup + vid_ranges: _containers.RepeatedScalarFieldContainer[int] + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., scope_cluster: _Optional[_Union[Cluster, _Mapping]] = ..., scope_cluster_group: _Optional[_Union[ClusterGroup, _Mapping]] = ..., scope_location: _Optional[_Union[Location, _Mapping]] = ..., scope_rack: _Optional[_Union[Rack, _Mapping]] = ..., scope_region: _Optional[_Union[Region, _Mapping]] = ..., scope_site: _Optional[_Union[Site, _Mapping]] = ..., scope_site_group: _Optional[_Union[SiteGroup, _Mapping]] = ..., vid_ranges: _Optional[_Iterable[int]] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class VLANTranslationPolicy(_message.Message): + __slots__ = ("name", "description") + NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + name: str + description: str + def __init__(self, name: _Optional[str] = ..., description: _Optional[str] = ...) -> None: ... + +class VLANTranslationRule(_message.Message): + __slots__ = ("policy", "local_vid", "remote_vid", "description") + POLICY_FIELD_NUMBER: _ClassVar[int] + LOCAL_VID_FIELD_NUMBER: _ClassVar[int] + REMOTE_VID_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + policy: VLANTranslationPolicy + local_vid: int + remote_vid: int + description: str + def __init__(self, policy: _Optional[_Union[VLANTranslationPolicy, _Mapping]] = ..., local_vid: _Optional[int] = ..., remote_vid: _Optional[int] = ..., description: _Optional[str] = ...) -> None: ... class VMInterface(_message.Message): - __slots__ = ("virtual_machine", "name", "enabled", "mtu", "mac_address", "description", "tags") + __slots__ = ("virtual_machine", "name", "enabled", "parent", "bridge", "mtu", "primary_mac_address", "description", "mode", "untagged_vlan", "qinq_svlan", "vlan_translation_policy", "vrf", "tags", "custom_fields", "tagged_vlans") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... VIRTUAL_MACHINE_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] ENABLED_FIELD_NUMBER: _ClassVar[int] + PARENT_FIELD_NUMBER: _ClassVar[int] + BRIDGE_FIELD_NUMBER: _ClassVar[int] MTU_FIELD_NUMBER: _ClassVar[int] - MAC_ADDRESS_FIELD_NUMBER: _ClassVar[int] + PRIMARY_MAC_ADDRESS_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + MODE_FIELD_NUMBER: _ClassVar[int] + UNTAGGED_VLAN_FIELD_NUMBER: _ClassVar[int] + QINQ_SVLAN_FIELD_NUMBER: _ClassVar[int] + VLAN_TRANSLATION_POLICY_FIELD_NUMBER: _ClassVar[int] + VRF_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + TAGGED_VLANS_FIELD_NUMBER: _ClassVar[int] virtual_machine: VirtualMachine name: str enabled: bool + parent: VMInterface + bridge: VMInterface mtu: int - mac_address: str + primary_mac_address: MACAddress description: str + mode: str + untagged_vlan: VLAN + qinq_svlan: VLAN + vlan_translation_policy: VLANTranslationPolicy + vrf: VRF tags: _containers.RepeatedCompositeFieldContainer[Tag] - def __init__(self, virtual_machine: _Optional[_Union[VirtualMachine, _Mapping]] = ..., name: _Optional[str] = ..., enabled: bool = ..., mtu: _Optional[int] = ..., mac_address: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ...) -> None: ... + custom_fields: _containers.MessageMap[str, CustomFieldValue] + tagged_vlans: _containers.RepeatedCompositeFieldContainer[VLAN] + def __init__(self, virtual_machine: _Optional[_Union[VirtualMachine, _Mapping]] = ..., name: _Optional[str] = ..., enabled: bool = ..., parent: _Optional[_Union[VMInterface, _Mapping]] = ..., bridge: _Optional[_Union[VMInterface, _Mapping]] = ..., mtu: _Optional[int] = ..., primary_mac_address: _Optional[_Union[MACAddress, _Mapping]] = ..., description: _Optional[str] = ..., mode: _Optional[str] = ..., untagged_vlan: _Optional[_Union[VLAN, _Mapping]] = ..., qinq_svlan: _Optional[_Union[VLAN, _Mapping]] = ..., vlan_translation_policy: _Optional[_Union[VLANTranslationPolicy, _Mapping]] = ..., vrf: _Optional[_Union[VRF, _Mapping]] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ..., tagged_vlans: _Optional[_Iterable[_Union[VLAN, _Mapping]]] = ...) -> None: ... -class VirtualDisk(_message.Message): - __slots__ = ("virtual_machine", "name", "size", "description", "tags") - VIRTUAL_MACHINE_FIELD_NUMBER: _ClassVar[int] +class VRF(_message.Message): + __slots__ = ("name", "rd", "tenant", "enforce_unique", "description", "comments", "tags", "custom_fields", "import_targets", "export_targets") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... NAME_FIELD_NUMBER: _ClassVar[int] - SIZE_FIELD_NUMBER: _ClassVar[int] + RD_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + ENFORCE_UNIQUE_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] - virtual_machine: VirtualMachine + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + IMPORT_TARGETS_FIELD_NUMBER: _ClassVar[int] + EXPORT_TARGETS_FIELD_NUMBER: _ClassVar[int] name: str - size: int + rd: str + tenant: Tenant + enforce_unique: bool description: str + comments: str tags: _containers.RepeatedCompositeFieldContainer[Tag] - def __init__(self, virtual_machine: _Optional[_Union[VirtualMachine, _Mapping]] = ..., name: _Optional[str] = ..., size: _Optional[int] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ...) -> None: ... + custom_fields: _containers.MessageMap[str, CustomFieldValue] + import_targets: _containers.RepeatedCompositeFieldContainer[RouteTarget] + export_targets: _containers.RepeatedCompositeFieldContainer[RouteTarget] + def __init__(self, name: _Optional[str] = ..., rd: _Optional[str] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., enforce_unique: bool = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ..., import_targets: _Optional[_Iterable[_Union[RouteTarget, _Mapping]]] = ..., export_targets: _Optional[_Iterable[_Union[RouteTarget, _Mapping]]] = ...) -> None: ... -class IPAddress(_message.Message): - __slots__ = ("address", "interface", "status", "role", "dns_name", "description", "comments", "tags") - ADDRESS_FIELD_NUMBER: _ClassVar[int] - INTERFACE_FIELD_NUMBER: _ClassVar[int] - STATUS_FIELD_NUMBER: _ClassVar[int] - ROLE_FIELD_NUMBER: _ClassVar[int] - DNS_NAME_FIELD_NUMBER: _ClassVar[int] +class VirtualChassis(_message.Message): + __slots__ = ("name", "domain", "master", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + DOMAIN_FIELD_NUMBER: _ClassVar[int] + MASTER_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] COMMENTS_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] - address: str - interface: Interface - status: str - role: str - dns_name: str + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + domain: str + master: Device description: str comments: str tags: _containers.RepeatedCompositeFieldContainer[Tag] - def __init__(self, address: _Optional[str] = ..., interface: _Optional[_Union[Interface, _Mapping]] = ..., status: _Optional[str] = ..., role: _Optional[str] = ..., dns_name: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ...) -> None: ... + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., domain: _Optional[str] = ..., master: _Optional[_Union[Device, _Mapping]] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... -class DeviceType(_message.Message): - __slots__ = ("model", "slug", "manufacturer", "description", "comments", "part_number", "tags") - MODEL_FIELD_NUMBER: _ClassVar[int] - SLUG_FIELD_NUMBER: _ClassVar[int] - MANUFACTURER_FIELD_NUMBER: _ClassVar[int] +class VirtualCircuit(_message.Message): + __slots__ = ("cid", "provider_network", "provider_account", "type", "status", "tenant", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + CID_FIELD_NUMBER: _ClassVar[int] + PROVIDER_NETWORK_FIELD_NUMBER: _ClassVar[int] + PROVIDER_ACCOUNT_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] COMMENTS_FIELD_NUMBER: _ClassVar[int] - PART_NUMBER_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] - model: str - slug: str - manufacturer: Manufacturer + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + cid: str + provider_network: ProviderNetwork + provider_account: ProviderAccount + type: VirtualCircuitType + status: str + tenant: Tenant description: str comments: str - part_number: str tags: _containers.RepeatedCompositeFieldContainer[Tag] - def __init__(self, model: _Optional[str] = ..., slug: _Optional[str] = ..., manufacturer: _Optional[_Union[Manufacturer, _Mapping]] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., part_number: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ...) -> None: ... + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, cid: _Optional[str] = ..., provider_network: _Optional[_Union[ProviderNetwork, _Mapping]] = ..., provider_account: _Optional[_Union[ProviderAccount, _Mapping]] = ..., type: _Optional[_Union[VirtualCircuitType, _Mapping]] = ..., status: _Optional[str] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... -class Manufacturer(_message.Message): - __slots__ = ("name", "slug", "description", "tags") - NAME_FIELD_NUMBER: _ClassVar[int] - SLUG_FIELD_NUMBER: _ClassVar[int] +class VirtualCircuitTermination(_message.Message): + __slots__ = ("virtual_circuit", "role", "interface", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + VIRTUAL_CIRCUIT_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + INTERFACE_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] - name: str - slug: str + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + virtual_circuit: VirtualCircuit + role: str + interface: Interface description: str tags: _containers.RepeatedCompositeFieldContainer[Tag] - def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ...) -> None: ... + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, virtual_circuit: _Optional[_Union[VirtualCircuit, _Mapping]] = ..., role: _Optional[str] = ..., interface: _Optional[_Union[Interface, _Mapping]] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... -class Platform(_message.Message): - __slots__ = ("name", "slug", "manufacturer", "description", "tags") +class VirtualCircuitType(_message.Message): + __slots__ = ("name", "slug", "color", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... NAME_FIELD_NUMBER: _ClassVar[int] SLUG_FIELD_NUMBER: _ClassVar[int] - MANUFACTURER_FIELD_NUMBER: _ClassVar[int] + COLOR_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] name: str slug: str - manufacturer: Manufacturer + color: str description: str tags: _containers.RepeatedCompositeFieldContainer[Tag] - def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., manufacturer: _Optional[_Union[Manufacturer, _Mapping]] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ...) -> None: ... + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., color: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... -class Prefix(_message.Message): - __slots__ = ("prefix", "site", "status", "is_pool", "mark_utilized", "description", "comments", "tags") - PREFIX_FIELD_NUMBER: _ClassVar[int] - SITE_FIELD_NUMBER: _ClassVar[int] +class VirtualDeviceContext(_message.Message): + __slots__ = ("name", "device", "identifier", "tenant", "primary_ip4", "primary_ip6", "status", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + DEVICE_FIELD_NUMBER: _ClassVar[int] + IDENTIFIER_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + PRIMARY_IP4_FIELD_NUMBER: _ClassVar[int] + PRIMARY_IP6_FIELD_NUMBER: _ClassVar[int] STATUS_FIELD_NUMBER: _ClassVar[int] - IS_POOL_FIELD_NUMBER: _ClassVar[int] - MARK_UTILIZED_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] COMMENTS_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] - prefix: str - site: Site + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + name: str + device: Device + identifier: int + tenant: Tenant + primary_ip4: IPAddress + primary_ip6: IPAddress status: str - is_pool: bool - mark_utilized: bool description: str comments: str tags: _containers.RepeatedCompositeFieldContainer[Tag] - def __init__(self, prefix: _Optional[str] = ..., site: _Optional[_Union[Site, _Mapping]] = ..., status: _Optional[str] = ..., is_pool: bool = ..., mark_utilized: bool = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ...) -> None: ... + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., device: _Optional[_Union[Device, _Mapping]] = ..., identifier: _Optional[int] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., primary_ip4: _Optional[_Union[IPAddress, _Mapping]] = ..., primary_ip6: _Optional[_Union[IPAddress, _Mapping]] = ..., status: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... -class Role(_message.Message): - __slots__ = ("name", "slug", "color", "description", "tags") +class VirtualDisk(_message.Message): + __slots__ = ("virtual_machine", "name", "description", "size", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + VIRTUAL_MACHINE_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] - SLUG_FIELD_NUMBER: _ClassVar[int] - COLOR_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + SIZE_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + virtual_machine: VirtualMachine name: str - slug: str - color: str description: str + size: int tags: _containers.RepeatedCompositeFieldContainer[Tag] - def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., color: _Optional[str] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ...) -> None: ... + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, virtual_machine: _Optional[_Union[VirtualMachine, _Mapping]] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., size: _Optional[int] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... -class Site(_message.Message): - __slots__ = ("name", "slug", "status", "facility", "time_zone", "description", "comments", "tags") +class VirtualMachine(_message.Message): + __slots__ = ("name", "status", "site", "cluster", "device", "serial", "role", "tenant", "platform", "primary_ip4", "primary_ip6", "vcpus", "memory", "disk", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... NAME_FIELD_NUMBER: _ClassVar[int] - SLUG_FIELD_NUMBER: _ClassVar[int] STATUS_FIELD_NUMBER: _ClassVar[int] - FACILITY_FIELD_NUMBER: _ClassVar[int] - TIME_ZONE_FIELD_NUMBER: _ClassVar[int] + SITE_FIELD_NUMBER: _ClassVar[int] + CLUSTER_FIELD_NUMBER: _ClassVar[int] + DEVICE_FIELD_NUMBER: _ClassVar[int] + SERIAL_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + PLATFORM_FIELD_NUMBER: _ClassVar[int] + PRIMARY_IP4_FIELD_NUMBER: _ClassVar[int] + PRIMARY_IP6_FIELD_NUMBER: _ClassVar[int] + VCPUS_FIELD_NUMBER: _ClassVar[int] + MEMORY_FIELD_NUMBER: _ClassVar[int] + DISK_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] COMMENTS_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] name: str - slug: str status: str - facility: str - time_zone: str + site: Site + cluster: Cluster + device: Device + serial: str + role: DeviceRole + tenant: Tenant + platform: Platform + primary_ip4: IPAddress + primary_ip6: IPAddress + vcpus: float + memory: int + disk: int description: str comments: str tags: _containers.RepeatedCompositeFieldContainer[Tag] - def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., status: _Optional[str] = ..., facility: _Optional[str] = ..., time_zone: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ...) -> None: ... + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., status: _Optional[str] = ..., site: _Optional[_Union[Site, _Mapping]] = ..., cluster: _Optional[_Union[Cluster, _Mapping]] = ..., device: _Optional[_Union[Device, _Mapping]] = ..., serial: _Optional[str] = ..., role: _Optional[_Union[DeviceRole, _Mapping]] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., platform: _Optional[_Union[Platform, _Mapping]] = ..., primary_ip4: _Optional[_Union[IPAddress, _Mapping]] = ..., primary_ip6: _Optional[_Union[IPAddress, _Mapping]] = ..., vcpus: _Optional[float] = ..., memory: _Optional[int] = ..., disk: _Optional[int] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... -class Tag(_message.Message): - __slots__ = ("name", "slug", "color") +class WirelessLAN(_message.Message): + __slots__ = ("ssid", "description", "group", "status", "vlan", "scope_location", "scope_region", "scope_site", "scope_site_group", "tenant", "auth_type", "auth_cipher", "auth_psk", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + SSID_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + GROUP_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + VLAN_FIELD_NUMBER: _ClassVar[int] + SCOPE_LOCATION_FIELD_NUMBER: _ClassVar[int] + SCOPE_REGION_FIELD_NUMBER: _ClassVar[int] + SCOPE_SITE_FIELD_NUMBER: _ClassVar[int] + SCOPE_SITE_GROUP_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + AUTH_TYPE_FIELD_NUMBER: _ClassVar[int] + AUTH_CIPHER_FIELD_NUMBER: _ClassVar[int] + AUTH_PSK_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + ssid: str + description: str + group: WirelessLANGroup + status: str + vlan: VLAN + scope_location: Location + scope_region: Region + scope_site: Site + scope_site_group: SiteGroup + tenant: Tenant + auth_type: str + auth_cipher: str + auth_psk: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, ssid: _Optional[str] = ..., description: _Optional[str] = ..., group: _Optional[_Union[WirelessLANGroup, _Mapping]] = ..., status: _Optional[str] = ..., vlan: _Optional[_Union[VLAN, _Mapping]] = ..., scope_location: _Optional[_Union[Location, _Mapping]] = ..., scope_region: _Optional[_Union[Region, _Mapping]] = ..., scope_site: _Optional[_Union[Site, _Mapping]] = ..., scope_site_group: _Optional[_Union[SiteGroup, _Mapping]] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., auth_type: _Optional[str] = ..., auth_cipher: _Optional[str] = ..., auth_psk: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... + +class WirelessLANGroup(_message.Message): + __slots__ = ("name", "slug", "parent", "description", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... NAME_FIELD_NUMBER: _ClassVar[int] SLUG_FIELD_NUMBER: _ClassVar[int] - COLOR_FIELD_NUMBER: _ClassVar[int] + PARENT_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] name: str slug: str - color: str - def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., color: _Optional[str] = ...) -> None: ... - -class Entity(_message.Message): - __slots__ = ("site", "platform", "manufacturer", "device", "device_role", "device_type", "interface", "ip_address", "prefix", "cluster_group", "cluster_type", "cluster", "virtual_machine", "vminterface", "virtual_disk", "timestamp") - SITE_FIELD_NUMBER: _ClassVar[int] - PLATFORM_FIELD_NUMBER: _ClassVar[int] - MANUFACTURER_FIELD_NUMBER: _ClassVar[int] - DEVICE_FIELD_NUMBER: _ClassVar[int] - DEVICE_ROLE_FIELD_NUMBER: _ClassVar[int] - DEVICE_TYPE_FIELD_NUMBER: _ClassVar[int] - INTERFACE_FIELD_NUMBER: _ClassVar[int] - IP_ADDRESS_FIELD_NUMBER: _ClassVar[int] - PREFIX_FIELD_NUMBER: _ClassVar[int] - CLUSTER_GROUP_FIELD_NUMBER: _ClassVar[int] - CLUSTER_TYPE_FIELD_NUMBER: _ClassVar[int] - CLUSTER_FIELD_NUMBER: _ClassVar[int] - VIRTUAL_MACHINE_FIELD_NUMBER: _ClassVar[int] - VMINTERFACE_FIELD_NUMBER: _ClassVar[int] - VIRTUAL_DISK_FIELD_NUMBER: _ClassVar[int] - TIMESTAMP_FIELD_NUMBER: _ClassVar[int] - site: Site - platform: Platform - manufacturer: Manufacturer - device: Device - device_role: Role - device_type: DeviceType - interface: Interface - ip_address: IPAddress - prefix: Prefix - cluster_group: ClusterGroup - cluster_type: ClusterType - cluster: Cluster - virtual_machine: VirtualMachine - vminterface: VMInterface - virtual_disk: VirtualDisk - timestamp: _timestamp_pb2.Timestamp - def __init__(self, site: _Optional[_Union[Site, _Mapping]] = ..., platform: _Optional[_Union[Platform, _Mapping]] = ..., manufacturer: _Optional[_Union[Manufacturer, _Mapping]] = ..., device: _Optional[_Union[Device, _Mapping]] = ..., device_role: _Optional[_Union[Role, _Mapping]] = ..., device_type: _Optional[_Union[DeviceType, _Mapping]] = ..., interface: _Optional[_Union[Interface, _Mapping]] = ..., ip_address: _Optional[_Union[IPAddress, _Mapping]] = ..., prefix: _Optional[_Union[Prefix, _Mapping]] = ..., cluster_group: _Optional[_Union[ClusterGroup, _Mapping]] = ..., cluster_type: _Optional[_Union[ClusterType, _Mapping]] = ..., cluster: _Optional[_Union[Cluster, _Mapping]] = ..., virtual_machine: _Optional[_Union[VirtualMachine, _Mapping]] = ..., vminterface: _Optional[_Union[VMInterface, _Mapping]] = ..., virtual_disk: _Optional[_Union[VirtualDisk, _Mapping]] = ..., timestamp: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... - -class IngestRequest(_message.Message): - __slots__ = ("stream", "entities", "id", "producer_app_name", "producer_app_version", "sdk_name", "sdk_version") - STREAM_FIELD_NUMBER: _ClassVar[int] - ENTITIES_FIELD_NUMBER: _ClassVar[int] - ID_FIELD_NUMBER: _ClassVar[int] - PRODUCER_APP_NAME_FIELD_NUMBER: _ClassVar[int] - PRODUCER_APP_VERSION_FIELD_NUMBER: _ClassVar[int] - SDK_NAME_FIELD_NUMBER: _ClassVar[int] - SDK_VERSION_FIELD_NUMBER: _ClassVar[int] - stream: str - entities: _containers.RepeatedCompositeFieldContainer[Entity] - id: str - producer_app_name: str - producer_app_version: str - sdk_name: str - sdk_version: str - def __init__(self, stream: _Optional[str] = ..., entities: _Optional[_Iterable[_Union[Entity, _Mapping]]] = ..., id: _Optional[str] = ..., producer_app_name: _Optional[str] = ..., producer_app_version: _Optional[str] = ..., sdk_name: _Optional[str] = ..., sdk_version: _Optional[str] = ...) -> None: ... + parent: WirelessLANGroup + description: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, name: _Optional[str] = ..., slug: _Optional[str] = ..., parent: _Optional[_Union[WirelessLANGroup, _Mapping]] = ..., description: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... -class IngestResponse(_message.Message): - __slots__ = ("errors",) - ERRORS_FIELD_NUMBER: _ClassVar[int] - errors: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, errors: _Optional[_Iterable[str]] = ...) -> None: ... +class WirelessLink(_message.Message): + __slots__ = ("interface_a", "interface_b", "ssid", "status", "tenant", "auth_type", "auth_cipher", "auth_psk", "distance", "distance_unit", "description", "comments", "tags", "custom_fields") + class CustomFieldsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: CustomFieldValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[CustomFieldValue, _Mapping]] = ...) -> None: ... + INTERFACE_A_FIELD_NUMBER: _ClassVar[int] + INTERFACE_B_FIELD_NUMBER: _ClassVar[int] + SSID_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + TENANT_FIELD_NUMBER: _ClassVar[int] + AUTH_TYPE_FIELD_NUMBER: _ClassVar[int] + AUTH_CIPHER_FIELD_NUMBER: _ClassVar[int] + AUTH_PSK_FIELD_NUMBER: _ClassVar[int] + DISTANCE_FIELD_NUMBER: _ClassVar[int] + DISTANCE_UNIT_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + COMMENTS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELDS_FIELD_NUMBER: _ClassVar[int] + interface_a: Interface + interface_b: Interface + ssid: str + status: str + tenant: Tenant + auth_type: str + auth_cipher: str + auth_psk: str + distance: float + distance_unit: str + description: str + comments: str + tags: _containers.RepeatedCompositeFieldContainer[Tag] + custom_fields: _containers.MessageMap[str, CustomFieldValue] + def __init__(self, interface_a: _Optional[_Union[Interface, _Mapping]] = ..., interface_b: _Optional[_Union[Interface, _Mapping]] = ..., ssid: _Optional[str] = ..., status: _Optional[str] = ..., tenant: _Optional[_Union[Tenant, _Mapping]] = ..., auth_type: _Optional[str] = ..., auth_cipher: _Optional[str] = ..., auth_psk: _Optional[str] = ..., distance: _Optional[float] = ..., distance_unit: _Optional[str] = ..., description: _Optional[str] = ..., comments: _Optional[str] = ..., tags: _Optional[_Iterable[_Union[Tag, _Mapping]]] = ..., custom_fields: _Optional[_Mapping[str, CustomFieldValue]] = ...) -> None: ... diff --git a/netboxlabs/diode/sdk/diode/v1/ingester_pb2_grpc.py b/netboxlabs/diode/sdk/diode/v1/ingester_pb2_grpc.py index 8fb6144..2bf5c8d 100644 --- a/netboxlabs/diode/sdk/diode/v1/ingester_pb2_grpc.py +++ b/netboxlabs/diode/sdk/diode/v1/ingester_pb2_grpc.py @@ -7,6 +7,7 @@ class IngesterServiceStub(object): """Ingestion API + """ def __init__(self, channel): @@ -24,6 +25,7 @@ def __init__(self, channel): class IngesterServiceServicer(object): """Ingestion API + """ def Ingest(self, request, context): @@ -50,6 +52,7 @@ def add_IngesterServiceServicer_to_server(servicer, server): # This class is part of an EXPERIMENTAL API. class IngesterService(object): """Ingestion API + """ @staticmethod diff --git a/netboxlabs/diode/sdk/ingester.py b/netboxlabs/diode/sdk/ingester.py index ad4c90b..3bf7f0b 100644 --- a/netboxlabs/diode/sdk/ingester.py +++ b/netboxlabs/diode/sdk/ingester.py @@ -1,594 +1,4842 @@ -#!/usr/bin/env python -# Copyright 2024 NetBox Labs Inc -"""NetBox Labs, Diode - SDK - ingester protobuf message wrappers.""" +"""Python SDK wrappers for the Diode protobuf schema.""" + +# +# Generated code. DO NOT EDIT. +# Timestamp: 2025-04-10 14:44:19Z +# +# ruff: noqa: C901 + +from __future__ import annotations + +import datetime +import re from typing import Any from google.protobuf import timestamp_pb2 as _timestamp_pb2 -# ruff: noqa: I001 -from netboxlabs.diode.sdk.diode.v1.ingester_pb2 import ( - Cluster as ClusterPb, - ClusterGroup as ClusterGroupPb, - ClusterType as ClusterTypePb, - Device as DevicePb, - DeviceType as DeviceTypePb, - Entity as EntityPb, - IPAddress as IPAddressPb, - Interface as InterfacePb, - Manufacturer as ManufacturerPb, - Platform as PlatformPb, - Prefix as PrefixPb, - Role as RolePb, - Site as SitePb, - Tag as TagPb, - VirtualDisk as VirtualDiskPb, - VMInterface as VMInterfacePb, - VirtualMachine as VirtualMachinePb, -) - - -def convert_to_protobuf(value: Any, protobuf_class, **kwargs): +import netboxlabs.diode.sdk.diode.v1.ingester_pb2 as pb + +PRIMARY_VALUE_MAP = { + 'ASN': 'asn', + 'ASNRange': 'name', + 'Circuit': 'cid', + 'CircuitGroup': 'name', + 'CircuitType': 'name', + 'Cluster': 'name', + 'ClusterGroup': 'name', + 'ClusterType': 'name', + 'ConsolePort': 'name', + 'ConsoleServerPort': 'name', + 'Contact': 'name', + 'ContactGroup': 'name', + 'ContactRole': 'name', + 'Device': 'name', + 'DeviceBay': 'name', + 'DeviceRole': 'name', + 'DeviceType': 'model', + 'FHRPGroup': 'name', + 'FrontPort': 'name', + 'IKEPolicy': 'name', + 'IKEProposal': 'name', + 'IPAddress': 'address', + 'IPSecPolicy': 'name', + 'IPSecProfile': 'name', + 'IPSecProposal': 'name', + 'Interface': 'name', + 'InventoryItem': 'name', + 'InventoryItemRole': 'name', + 'L2VPN': 'name', + 'Location': 'name', + 'MACAddress': 'mac_address', + 'Manufacturer': 'name', + 'ModuleBay': 'name', + 'ModuleType': 'model', + 'Platform': 'name', + 'PowerFeed': 'name', + 'PowerOutlet': 'name', + 'PowerPanel': 'name', + 'PowerPort': 'name', + 'Prefix': 'prefix', + 'Provider': 'name', + 'ProviderAccount': 'name', + 'ProviderNetwork': 'name', + 'RIR': 'name', + 'Rack': 'name', + 'RackRole': 'name', + 'RackType': 'model', + 'RearPort': 'name', + 'Region': 'name', + 'Role': 'name', + 'RouteTarget': 'name', + 'Service': 'name', + 'Site': 'name', + 'SiteGroup': 'name', + 'Tag': 'name', + 'Tenant': 'name', + 'TenantGroup': 'name', + 'Tunnel': 'name', + 'TunnelGroup': 'name', + 'VLAN': 'name', + 'VLANGroup': 'name', + 'VLANTranslationPolicy': 'name', + 'VMInterface': 'name', + 'VRF': 'name', + 'VirtualChassis': 'name', + 'VirtualCircuit': 'cid', + 'VirtualCircuitType': 'name', + 'VirtualDeviceContext': 'name', + 'VirtualDisk': 'name', + 'VirtualMachine': 'name', + 'WirelessLAN': 'ssid', + 'WirelessLANGroup': 'name', +} + + +def slugify(value: Any) -> str: + """Utility to convert a value to a slug.""" + value = str(value).strip().strip('_').lower() + value = re.sub(r'[^\w\s-]', '', value) + return re.sub(r'[-\s]+', '-', value) + + +def is_field_set(value: Any, field_name: str) -> bool: + """Check if a protobuf field is set. HasField() only works for message fields in proto3.""" + if value is None: + return False + for field_descriptor, _ in value.ListFields(): + if field_descriptor.name == field_name: + return True + return False + + +def convert_to_protobuf(value: Any, protobuf_class): """Convert a value to a protobuf message.""" - if isinstance(value, str): - return protobuf_class(**kwargs) + if value is None: + return None + if isinstance(value, str|int|float): + pvk = PRIMARY_VALUE_MAP.get(protobuf_class.__name__) + if pvk is None: + raise ValueError(f'{protobuf_class.__name__} cannot be initialized with {type(value)}') + kwargs = {pvk: value} + value = protobuf_class(**kwargs) return value -class Tag: - """Tag message wrapper.""" +def convert_to_protobuf_list(value: list | None, protobuf_class): + """Convert a list of values to a list of protobuf messages.""" + if value is None: + return None + return [convert_to_protobuf(x, protobuf_class) for x in value] + + +def convert_to_protobuf_dict(value: dict | None, protobuf_class): + """Convert a dictionary of values to a dictionary of protobuf messages.""" + if value is None: + return None + return {k: convert_to_protobuf(v, protobuf_class) for k, v in value.items()} + + +class Entity: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Entity.""" + + def __new__( + cls, + timestamp: datetime.datetime | None = None, + asn: str | ASN | pb.ASN | None = None, + asn_range: str | ASNRange | pb.ASNRange | None = None, + aggregate: str | Aggregate | pb.Aggregate | None = None, + cable: str | Cable | pb.Cable | None = None, + cable_path: str | CablePath | pb.CablePath | None = None, + cable_termination: str | CableTermination | pb.CableTermination | None = None, + circuit: str | Circuit | pb.Circuit | None = None, + circuit_group: str | CircuitGroup | pb.CircuitGroup | None = None, + circuit_group_assignment: str | CircuitGroupAssignment | pb.CircuitGroupAssignment | None = None, + circuit_termination: str | CircuitTermination | pb.CircuitTermination | None = None, + circuit_type: str | CircuitType | pb.CircuitType | None = None, + cluster: str | Cluster | pb.Cluster | None = None, + cluster_group: str | ClusterGroup | pb.ClusterGroup | None = None, + cluster_type: str | ClusterType | pb.ClusterType | None = None, + console_port: str | ConsolePort | pb.ConsolePort | None = None, + console_server_port: str | ConsoleServerPort | pb.ConsoleServerPort | None = None, + contact: str | Contact | pb.Contact | None = None, + contact_assignment: str | ContactAssignment | pb.ContactAssignment | None = None, + contact_group: str | ContactGroup | pb.ContactGroup | None = None, + contact_role: str | ContactRole | pb.ContactRole | None = None, + device: str | Device | pb.Device | None = None, + device_bay: str | DeviceBay | pb.DeviceBay | None = None, + device_role: str | DeviceRole | pb.DeviceRole | None = None, + device_type: str | DeviceType | pb.DeviceType | None = None, + fhrp_group: str | FHRPGroup | pb.FHRPGroup | None = None, + fhrp_group_assignment: str | FHRPGroupAssignment | pb.FHRPGroupAssignment | None = None, + front_port: str | FrontPort | pb.FrontPort | None = None, + ike_policy: str | IKEPolicy | pb.IKEPolicy | None = None, + ike_proposal: str | IKEProposal | pb.IKEProposal | None = None, + ip_address: str | IPAddress | pb.IPAddress | None = None, + ip_range: str | IPRange | pb.IPRange | None = None, + ip_sec_policy: str | IPSecPolicy | pb.IPSecPolicy | None = None, + ip_sec_profile: str | IPSecProfile | pb.IPSecProfile | None = None, + ip_sec_proposal: str | IPSecProposal | pb.IPSecProposal | None = None, + interface: str | Interface | pb.Interface | None = None, + inventory_item: str | InventoryItem | pb.InventoryItem | None = None, + inventory_item_role: str | InventoryItemRole | pb.InventoryItemRole | None = None, + l2vpn: str | L2VPN | pb.L2VPN | None = None, + l2vpn_termination: str | L2VPNTermination | pb.L2VPNTermination | None = None, + location: str | Location | pb.Location | None = None, + mac_address: str | MACAddress | pb.MACAddress | None = None, + manufacturer: str | Manufacturer | pb.Manufacturer | None = None, + module: str | Module | pb.Module | None = None, + module_bay: str | ModuleBay | pb.ModuleBay | None = None, + module_type: str | ModuleType | pb.ModuleType | None = None, + platform: str | Platform | pb.Platform | None = None, + power_feed: str | PowerFeed | pb.PowerFeed | None = None, + power_outlet: str | PowerOutlet | pb.PowerOutlet | None = None, + power_panel: str | PowerPanel | pb.PowerPanel | None = None, + power_port: str | PowerPort | pb.PowerPort | None = None, + prefix: str | Prefix | pb.Prefix | None = None, + provider: str | Provider | pb.Provider | None = None, + provider_account: str | ProviderAccount | pb.ProviderAccount | None = None, + provider_network: str | ProviderNetwork | pb.ProviderNetwork | None = None, + rir: str | RIR | pb.RIR | None = None, + rack: str | Rack | pb.Rack | None = None, + rack_reservation: str | RackReservation | pb.RackReservation | None = None, + rack_role: str | RackRole | pb.RackRole | None = None, + rack_type: str | RackType | pb.RackType | None = None, + rear_port: str | RearPort | pb.RearPort | None = None, + region: str | Region | pb.Region | None = None, + role: str | Role | pb.Role | None = None, + route_target: str | RouteTarget | pb.RouteTarget | None = None, + service: str | Service | pb.Service | None = None, + site: str | Site | pb.Site | None = None, + site_group: str | SiteGroup | pb.SiteGroup | None = None, + tag: str | Tag | pb.Tag | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + tenant_group: str | TenantGroup | pb.TenantGroup | None = None, + tunnel: str | Tunnel | pb.Tunnel | None = None, + tunnel_group: str | TunnelGroup | pb.TunnelGroup | None = None, + tunnel_termination: str | TunnelTermination | pb.TunnelTermination | None = None, + vlan: str | VLAN | pb.VLAN | None = None, + vlan_group: str | VLANGroup | pb.VLANGroup | None = None, + vlan_translation_policy: str | VLANTranslationPolicy | pb.VLANTranslationPolicy | None = None, + vlan_translation_rule: str | VLANTranslationRule | pb.VLANTranslationRule | None = None, + vm_interface: str | VMInterface | pb.VMInterface | None = None, + vrf: str | VRF | pb.VRF | None = None, + virtual_chassis: str | VirtualChassis | pb.VirtualChassis | None = None, + virtual_circuit: str | VirtualCircuit | pb.VirtualCircuit | None = None, + virtual_circuit_termination: str | VirtualCircuitTermination | pb.VirtualCircuitTermination | None = None, + virtual_circuit_type: str | VirtualCircuitType | pb.VirtualCircuitType | None = None, + virtual_device_context: str | VirtualDeviceContext | pb.VirtualDeviceContext | None = None, + virtual_disk: str | VirtualDisk | pb.VirtualDisk | None = None, + virtual_machine: str | VirtualMachine | pb.VirtualMachine | None = None, + wireless_lan: str | WirelessLAN | pb.WirelessLAN | None = None, + wireless_lan_group: str | WirelessLANGroup | pb.WirelessLANGroup | None = None, + wireless_link: str | WirelessLink | pb.WirelessLink | None = None, + ) -> pb.Entity: + """Create a new Entity.""" + asn = convert_to_protobuf(asn, pb.ASN) + asn_range = convert_to_protobuf(asn_range, pb.ASNRange) + aggregate = convert_to_protobuf(aggregate, pb.Aggregate) + cable = convert_to_protobuf(cable, pb.Cable) + cable_path = convert_to_protobuf(cable_path, pb.CablePath) + cable_termination = convert_to_protobuf(cable_termination, pb.CableTermination) + circuit = convert_to_protobuf(circuit, pb.Circuit) + circuit_group = convert_to_protobuf(circuit_group, pb.CircuitGroup) + circuit_group_assignment = convert_to_protobuf(circuit_group_assignment, pb.CircuitGroupAssignment) + circuit_termination = convert_to_protobuf(circuit_termination, pb.CircuitTermination) + circuit_type = convert_to_protobuf(circuit_type, pb.CircuitType) + cluster = convert_to_protobuf(cluster, pb.Cluster) + cluster_group = convert_to_protobuf(cluster_group, pb.ClusterGroup) + cluster_type = convert_to_protobuf(cluster_type, pb.ClusterType) + console_port = convert_to_protobuf(console_port, pb.ConsolePort) + console_server_port = convert_to_protobuf(console_server_port, pb.ConsoleServerPort) + contact = convert_to_protobuf(contact, pb.Contact) + contact_assignment = convert_to_protobuf(contact_assignment, pb.ContactAssignment) + contact_group = convert_to_protobuf(contact_group, pb.ContactGroup) + contact_role = convert_to_protobuf(contact_role, pb.ContactRole) + device = convert_to_protobuf(device, pb.Device) + device_bay = convert_to_protobuf(device_bay, pb.DeviceBay) + device_role = convert_to_protobuf(device_role, pb.DeviceRole) + device_type = convert_to_protobuf(device_type, pb.DeviceType) + fhrp_group = convert_to_protobuf(fhrp_group, pb.FHRPGroup) + fhrp_group_assignment = convert_to_protobuf(fhrp_group_assignment, pb.FHRPGroupAssignment) + front_port = convert_to_protobuf(front_port, pb.FrontPort) + ike_policy = convert_to_protobuf(ike_policy, pb.IKEPolicy) + ike_proposal = convert_to_protobuf(ike_proposal, pb.IKEProposal) + ip_address = convert_to_protobuf(ip_address, pb.IPAddress) + ip_range = convert_to_protobuf(ip_range, pb.IPRange) + ip_sec_policy = convert_to_protobuf(ip_sec_policy, pb.IPSecPolicy) + ip_sec_profile = convert_to_protobuf(ip_sec_profile, pb.IPSecProfile) + ip_sec_proposal = convert_to_protobuf(ip_sec_proposal, pb.IPSecProposal) + interface = convert_to_protobuf(interface, pb.Interface) + inventory_item = convert_to_protobuf(inventory_item, pb.InventoryItem) + inventory_item_role = convert_to_protobuf(inventory_item_role, pb.InventoryItemRole) + l2vpn = convert_to_protobuf(l2vpn, pb.L2VPN) + l2vpn_termination = convert_to_protobuf(l2vpn_termination, pb.L2VPNTermination) + location = convert_to_protobuf(location, pb.Location) + mac_address = convert_to_protobuf(mac_address, pb.MACAddress) + manufacturer = convert_to_protobuf(manufacturer, pb.Manufacturer) + module = convert_to_protobuf(module, pb.Module) + module_bay = convert_to_protobuf(module_bay, pb.ModuleBay) + module_type = convert_to_protobuf(module_type, pb.ModuleType) + platform = convert_to_protobuf(platform, pb.Platform) + power_feed = convert_to_protobuf(power_feed, pb.PowerFeed) + power_outlet = convert_to_protobuf(power_outlet, pb.PowerOutlet) + power_panel = convert_to_protobuf(power_panel, pb.PowerPanel) + power_port = convert_to_protobuf(power_port, pb.PowerPort) + prefix = convert_to_protobuf(prefix, pb.Prefix) + provider = convert_to_protobuf(provider, pb.Provider) + provider_account = convert_to_protobuf(provider_account, pb.ProviderAccount) + provider_network = convert_to_protobuf(provider_network, pb.ProviderNetwork) + rir = convert_to_protobuf(rir, pb.RIR) + rack = convert_to_protobuf(rack, pb.Rack) + rack_reservation = convert_to_protobuf(rack_reservation, pb.RackReservation) + rack_role = convert_to_protobuf(rack_role, pb.RackRole) + rack_type = convert_to_protobuf(rack_type, pb.RackType) + rear_port = convert_to_protobuf(rear_port, pb.RearPort) + region = convert_to_protobuf(region, pb.Region) + role = convert_to_protobuf(role, pb.Role) + route_target = convert_to_protobuf(route_target, pb.RouteTarget) + service = convert_to_protobuf(service, pb.Service) + site = convert_to_protobuf(site, pb.Site) + site_group = convert_to_protobuf(site_group, pb.SiteGroup) + tag = convert_to_protobuf(tag, pb.Tag) + tenant = convert_to_protobuf(tenant, pb.Tenant) + tenant_group = convert_to_protobuf(tenant_group, pb.TenantGroup) + tunnel = convert_to_protobuf(tunnel, pb.Tunnel) + tunnel_group = convert_to_protobuf(tunnel_group, pb.TunnelGroup) + tunnel_termination = convert_to_protobuf(tunnel_termination, pb.TunnelTermination) + vlan = convert_to_protobuf(vlan, pb.VLAN) + vlan_group = convert_to_protobuf(vlan_group, pb.VLANGroup) + vlan_translation_policy = convert_to_protobuf(vlan_translation_policy, pb.VLANTranslationPolicy) + vlan_translation_rule = convert_to_protobuf(vlan_translation_rule, pb.VLANTranslationRule) + vm_interface = convert_to_protobuf(vm_interface, pb.VMInterface) + vrf = convert_to_protobuf(vrf, pb.VRF) + virtual_chassis = convert_to_protobuf(virtual_chassis, pb.VirtualChassis) + virtual_circuit = convert_to_protobuf(virtual_circuit, pb.VirtualCircuit) + virtual_circuit_termination = convert_to_protobuf(virtual_circuit_termination, pb.VirtualCircuitTermination) + virtual_circuit_type = convert_to_protobuf(virtual_circuit_type, pb.VirtualCircuitType) + virtual_device_context = convert_to_protobuf(virtual_device_context, pb.VirtualDeviceContext) + virtual_disk = convert_to_protobuf(virtual_disk, pb.VirtualDisk) + virtual_machine = convert_to_protobuf(virtual_machine, pb.VirtualMachine) + wireless_lan = convert_to_protobuf(wireless_lan, pb.WirelessLAN) + wireless_lan_group = convert_to_protobuf(wireless_lan_group, pb.WirelessLANGroup) + wireless_link = convert_to_protobuf(wireless_link, pb.WirelessLink) + if timestamp is None: + ts = _timestamp_pb2.Timestamp() + ts.GetCurrentTime() + timestamp = ts + return pb.Entity( + timestamp=timestamp, + asn=asn, + asn_range=asn_range, + aggregate=aggregate, + cable=cable, + cable_path=cable_path, + cable_termination=cable_termination, + circuit=circuit, + circuit_group=circuit_group, + circuit_group_assignment=circuit_group_assignment, + circuit_termination=circuit_termination, + circuit_type=circuit_type, + cluster=cluster, + cluster_group=cluster_group, + cluster_type=cluster_type, + console_port=console_port, + console_server_port=console_server_port, + contact=contact, + contact_assignment=contact_assignment, + contact_group=contact_group, + contact_role=contact_role, + device=device, + device_bay=device_bay, + device_role=device_role, + device_type=device_type, + fhrp_group=fhrp_group, + fhrp_group_assignment=fhrp_group_assignment, + front_port=front_port, + ike_policy=ike_policy, + ike_proposal=ike_proposal, + ip_address=ip_address, + ip_range=ip_range, + ip_sec_policy=ip_sec_policy, + ip_sec_profile=ip_sec_profile, + ip_sec_proposal=ip_sec_proposal, + interface=interface, + inventory_item=inventory_item, + inventory_item_role=inventory_item_role, + l2vpn=l2vpn, + l2vpn_termination=l2vpn_termination, + location=location, + mac_address=mac_address, + manufacturer=manufacturer, + module=module, + module_bay=module_bay, + module_type=module_type, + platform=platform, + power_feed=power_feed, + power_outlet=power_outlet, + power_panel=power_panel, + power_port=power_port, + prefix=prefix, + provider=provider, + provider_account=provider_account, + provider_network=provider_network, + rir=rir, + rack=rack, + rack_reservation=rack_reservation, + rack_role=rack_role, + rack_type=rack_type, + rear_port=rear_port, + region=region, + role=role, + route_target=route_target, + service=service, + site=site, + site_group=site_group, + tag=tag, + tenant=tenant, + tenant_group=tenant_group, + tunnel=tunnel, + tunnel_group=tunnel_group, + tunnel_termination=tunnel_termination, + vlan=vlan, + vlan_group=vlan_group, + vlan_translation_policy=vlan_translation_policy, + vlan_translation_rule=vlan_translation_rule, + vm_interface=vm_interface, + vrf=vrf, + virtual_chassis=virtual_chassis, + virtual_circuit=virtual_circuit, + virtual_circuit_termination=virtual_circuit_termination, + virtual_circuit_type=virtual_circuit_type, + virtual_device_context=virtual_device_context, + virtual_disk=virtual_disk, + virtual_machine=virtual_machine, + wireless_lan=wireless_lan, + wireless_lan_group=wireless_lan_group, + wireless_link=wireless_link, + ) + + +class ASN: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.ASN.""" + + def __new__( + cls, + asn: int | None = None, + rir: str | RIR | pb.RIR | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.ASN: + """Create a new ASN.""" + rir = convert_to_protobuf(rir, pb.RIR) + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.ASN( + asn=asn, + rir=rir, + tenant=tenant, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class ASNRange: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.ASNRange.""" def __new__( cls, name: str | None = None, slug: str | None = None, + rir: str | RIR | pb.RIR | None = None, + start: int | None = None, + end: int | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.ASNRange: + """Create a new ASNRange.""" + rir = convert_to_protobuf(rir, pb.RIR) + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.ASNRange( + name=name, + slug=slug, + rir=rir, + start=start, + end=end, + tenant=tenant, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class Aggregate: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Aggregate.""" + + def __new__( + cls, + prefix: str | None = None, + rir: str | RIR | pb.RIR | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + date_added: datetime.datetime | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.Aggregate: + """Create a new Aggregate.""" + rir = convert_to_protobuf(rir, pb.RIR) + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.Aggregate( + prefix=prefix, + rir=rir, + tenant=tenant, + date_added=date_added, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class Cable: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Cable.""" + + def __new__( + cls, + type: str | None = None, + a_terminations: list[str | GenericObject | pb.GenericObject] | None = None, + b_terminations: list[str | GenericObject | pb.GenericObject] | None = None, + status: str | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + label: str | None = None, color: str | None = None, - ) -> TagPb: - """Create a new Tag protobuf message.""" - return TagPb(name=name, slug=slug, color=color) + length: float | None = None, + length_unit: str | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.Cable: + """Create a new Cable.""" + a_terminations = convert_to_protobuf_list(a_terminations, pb.GenericObject) + b_terminations = convert_to_protobuf_list(b_terminations, pb.GenericObject) + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.Cable( + type=type, + a_terminations=a_terminations, + b_terminations=b_terminations, + status=status, + tenant=tenant, + label=label, + color=color, + length=length, + length_unit=length_unit, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) -class Manufacturer: - """Manufacturer message wrapper.""" +class CablePath: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.CablePath.""" + + def __new__( + cls, + is_active: bool | None = None, + is_complete: bool | None = None, + is_split: bool | None = None, + ) -> pb.CablePath: + """Create a new CablePath.""" + return pb.CablePath( + is_active=is_active, + is_complete=is_complete, + is_split=is_split, + ) + + +class CableTermination: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.CableTermination.""" + + def __new__( + cls, + cable: str | Cable | pb.Cable | None = None, + cable_end: str | None = None, + termination_circuit_termination: str | CircuitTermination | pb.CircuitTermination | None = None, + termination_console_port: str | ConsolePort | pb.ConsolePort | None = None, + termination_console_server_port: str | ConsoleServerPort | pb.ConsoleServerPort | None = None, + termination_front_port: str | FrontPort | pb.FrontPort | None = None, + termination_interface: str | Interface | pb.Interface | None = None, + termination_power_feed: str | PowerFeed | pb.PowerFeed | None = None, + termination_power_outlet: str | PowerOutlet | pb.PowerOutlet | None = None, + termination_power_port: str | PowerPort | pb.PowerPort | None = None, + termination_rear_port: str | RearPort | pb.RearPort | None = None, + ) -> pb.CableTermination: + """Create a new CableTermination.""" + cable = convert_to_protobuf(cable, pb.Cable) + termination_circuit_termination = convert_to_protobuf(termination_circuit_termination, pb.CircuitTermination) + termination_console_port = convert_to_protobuf(termination_console_port, pb.ConsolePort) + termination_console_server_port = convert_to_protobuf(termination_console_server_port, pb.ConsoleServerPort) + termination_front_port = convert_to_protobuf(termination_front_port, pb.FrontPort) + termination_interface = convert_to_protobuf(termination_interface, pb.Interface) + termination_power_feed = convert_to_protobuf(termination_power_feed, pb.PowerFeed) + termination_power_outlet = convert_to_protobuf(termination_power_outlet, pb.PowerOutlet) + termination_power_port = convert_to_protobuf(termination_power_port, pb.PowerPort) + termination_rear_port = convert_to_protobuf(termination_rear_port, pb.RearPort) + return pb.CableTermination( + cable=cable, + cable_end=cable_end, + termination_circuit_termination=termination_circuit_termination, + termination_console_port=termination_console_port, + termination_console_server_port=termination_console_server_port, + termination_front_port=termination_front_port, + termination_interface=termination_interface, + termination_power_feed=termination_power_feed, + termination_power_outlet=termination_power_outlet, + termination_power_port=termination_power_port, + termination_rear_port=termination_rear_port, + ) + + +class Circuit: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Circuit.""" + + def __new__( + cls, + cid: str | None = None, + provider: str | Provider | pb.Provider | None = None, + provider_account: str | ProviderAccount | pb.ProviderAccount | None = None, + type: str | CircuitType | pb.CircuitType | None = None, + status: str | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + install_date: datetime.datetime | None = None, + termination_date: datetime.datetime | None = None, + commit_rate: int | None = None, + description: str | None = None, + distance: float | None = None, + distance_unit: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + assignments: list[str | CircuitGroupAssignment | pb.CircuitGroupAssignment] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.Circuit: + """Create a new Circuit.""" + provider = convert_to_protobuf(provider, pb.Provider) + provider_account = convert_to_protobuf(provider_account, pb.ProviderAccount) + type = convert_to_protobuf(type, pb.CircuitType) + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + assignments = convert_to_protobuf_list(assignments, pb.CircuitGroupAssignment) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.Circuit( + cid=cid, + provider=provider, + provider_account=provider_account, + type=type, + status=status, + tenant=tenant, + install_date=install_date, + termination_date=termination_date, + commit_rate=commit_rate, + description=description, + distance=distance, + distance_unit=distance_unit, + comments=comments, + tags=tags, + assignments=assignments, + custom_fields=custom_fields, + ) + + +class CircuitGroup: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.CircuitGroup.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + description: str | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.CircuitGroup: + """Create a new CircuitGroup.""" + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.CircuitGroup( + name=name, + slug=slug, + description=description, + tenant=tenant, + tags=tags, + custom_fields=custom_fields, + ) + + +class CircuitGroupAssignment: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.CircuitGroupAssignment.""" + + def __new__( + cls, + group: str | CircuitGroup | pb.CircuitGroup | None = None, + member_circuit: str | Circuit | pb.Circuit | None = None, + member_virtual_circuit: str | VirtualCircuit | pb.VirtualCircuit | None = None, + priority: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + ) -> pb.CircuitGroupAssignment: + """Create a new CircuitGroupAssignment.""" + group = convert_to_protobuf(group, pb.CircuitGroup) + member_circuit = convert_to_protobuf(member_circuit, pb.Circuit) + member_virtual_circuit = convert_to_protobuf(member_virtual_circuit, pb.VirtualCircuit) + tags = convert_to_protobuf_list(tags, pb.Tag) + return pb.CircuitGroupAssignment( + group=group, + member_circuit=member_circuit, + member_virtual_circuit=member_virtual_circuit, + priority=priority, + tags=tags, + ) + + +class CircuitTermination: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.CircuitTermination.""" + + def __new__( + cls, + circuit: str | Circuit | pb.Circuit | None = None, + term_side: str | None = None, + termination_location: str | Location | pb.Location | None = None, + termination_provider_network: str | ProviderNetwork | pb.ProviderNetwork | None = None, + termination_region: str | Region | pb.Region | None = None, + termination_site: str | Site | pb.Site | None = None, + termination_site_group: str | SiteGroup | pb.SiteGroup | None = None, + port_speed: int | None = None, + upstream_speed: int | None = None, + xconnect_id: str | None = None, + pp_info: str | None = None, + description: str | None = None, + mark_connected: bool | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.CircuitTermination: + """Create a new CircuitTermination.""" + circuit = convert_to_protobuf(circuit, pb.Circuit) + termination_location = convert_to_protobuf(termination_location, pb.Location) + termination_provider_network = convert_to_protobuf(termination_provider_network, pb.ProviderNetwork) + termination_region = convert_to_protobuf(termination_region, pb.Region) + termination_site = convert_to_protobuf(termination_site, pb.Site) + termination_site_group = convert_to_protobuf(termination_site_group, pb.SiteGroup) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.CircuitTermination( + circuit=circuit, + term_side=term_side, + termination_location=termination_location, + termination_provider_network=termination_provider_network, + termination_region=termination_region, + termination_site=termination_site, + termination_site_group=termination_site_group, + port_speed=port_speed, + upstream_speed=upstream_speed, + xconnect_id=xconnect_id, + pp_info=pp_info, + description=description, + mark_connected=mark_connected, + tags=tags, + custom_fields=custom_fields, + ) + + +class CircuitType: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.CircuitType.""" def __new__( cls, name: str | None = None, slug: str | None = None, + color: str | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.CircuitType: + """Create a new CircuitType.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.CircuitType( + name=name, + slug=slug, + color=color, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class Cluster: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Cluster.""" + + def __new__( + cls, + name: str | None = None, + type: str | ClusterType | pb.ClusterType | None = None, + group: str | ClusterGroup | pb.ClusterGroup | None = None, + status: str | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + scope_location: str | Location | pb.Location | None = None, + scope_region: str | Region | pb.Region | None = None, + scope_site: str | Site | pb.Site | None = None, + scope_site_group: str | SiteGroup | pb.SiteGroup | None = None, description: str | None = None, - tags: list[str | Tag | TagPb] | None = None, - ) -> ManufacturerPb: - """Create a new Manufacturer protobuf message.""" - if isinstance(tags, list) and all(isinstance(t, str) for t in tags): - tags = [TagPb(name=tag) for tag in tags] + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.Cluster: + """Create a new Cluster.""" + type = convert_to_protobuf(type, pb.ClusterType) + group = convert_to_protobuf(group, pb.ClusterGroup) + tenant = convert_to_protobuf(tenant, pb.Tenant) + scope_location = convert_to_protobuf(scope_location, pb.Location) + scope_region = convert_to_protobuf(scope_region, pb.Region) + scope_site = convert_to_protobuf(scope_site, pb.Site) + scope_site_group = convert_to_protobuf(scope_site_group, pb.SiteGroup) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.Cluster( + name=name, + type=type, + group=group, + status=status, + tenant=tenant, + scope_location=scope_location, + scope_region=scope_region, + scope_site=scope_site, + scope_site_group=scope_site_group, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class ClusterGroup: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.ClusterGroup.""" - return ManufacturerPb( + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.ClusterGroup: + """Create a new ClusterGroup.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.ClusterGroup( name=name, slug=slug, description=description, tags=tags, + custom_fields=custom_fields, ) -class Platform: - """Platform message wrapper.""" +class ClusterType: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.ClusterType.""" def __new__( cls, name: str | None = None, slug: str | None = None, - manufacturer: str | Manufacturer | ManufacturerPb | None = None, description: str | None = None, - tags: list[str | Tag | TagPb] | None = None, - ) -> PlatformPb: - """Create a new Platform protobuf message.""" - manufacturer = convert_to_protobuf( - manufacturer, ManufacturerPb, name=manufacturer + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.ClusterType: + """Create a new ClusterType.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.ClusterType( + name=name, + slug=slug, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class ConsolePort: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.ConsolePort.""" + + def __new__( + cls, + device: str | Device | pb.Device | None = None, + module: str | Module | pb.Module | None = None, + name: str | None = None, + label: str | None = None, + type: str | None = None, + speed: int | None = None, + description: str | None = None, + mark_connected: bool | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.ConsolePort: + """Create a new ConsolePort.""" + device = convert_to_protobuf(device, pb.Device) + module = convert_to_protobuf(module, pb.Module) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.ConsolePort( + device=device, + module=module, + name=name, + label=label, + type=type, + speed=speed, + description=description, + mark_connected=mark_connected, + tags=tags, + custom_fields=custom_fields, + ) + + +class ConsoleServerPort: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.ConsoleServerPort.""" + + def __new__( + cls, + device: str | Device | pb.Device | None = None, + module: str | Module | pb.Module | None = None, + name: str | None = None, + label: str | None = None, + type: str | None = None, + speed: int | None = None, + description: str | None = None, + mark_connected: bool | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.ConsoleServerPort: + """Create a new ConsoleServerPort.""" + device = convert_to_protobuf(device, pb.Device) + module = convert_to_protobuf(module, pb.Module) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.ConsoleServerPort( + device=device, + module=module, + name=name, + label=label, + type=type, + speed=speed, + description=description, + mark_connected=mark_connected, + tags=tags, + custom_fields=custom_fields, + ) + + +class Contact: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Contact.""" + + def __new__( + cls, + group: str | ContactGroup | pb.ContactGroup | None = None, + name: str | None = None, + title: str | None = None, + phone: str | None = None, + email: str | None = None, + address: str | None = None, + link: str | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.Contact: + """Create a new Contact.""" + group = convert_to_protobuf(group, pb.ContactGroup) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.Contact( + group=group, + name=name, + title=title, + phone=phone, + email=email, + address=address, + link=link, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class ContactAssignment: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.ContactAssignment.""" + + def __new__( + cls, + object_asn: str | ASN | pb.ASN | None = None, + object_asn_range: str | ASNRange | pb.ASNRange | None = None, + object_aggregate: str | Aggregate | pb.Aggregate | None = None, + object_cable: str | Cable | pb.Cable | None = None, + object_cable_path: str | CablePath | pb.CablePath | None = None, + object_cable_termination: str | CableTermination | pb.CableTermination | None = None, + object_circuit: str | Circuit | pb.Circuit | None = None, + object_circuit_group: str | CircuitGroup | pb.CircuitGroup | None = None, + object_circuit_group_assignment: str | CircuitGroupAssignment | pb.CircuitGroupAssignment | None = None, + object_circuit_termination: str | CircuitTermination | pb.CircuitTermination | None = None, + object_circuit_type: str | CircuitType | pb.CircuitType | None = None, + object_cluster: str | Cluster | pb.Cluster | None = None, + object_cluster_group: str | ClusterGroup | pb.ClusterGroup | None = None, + object_cluster_type: str | ClusterType | pb.ClusterType | None = None, + object_console_port: str | ConsolePort | pb.ConsolePort | None = None, + object_console_server_port: str | ConsoleServerPort | pb.ConsoleServerPort | None = None, + object_contact: str | Contact | pb.Contact | None = None, + object_contact_assignment: str | ContactAssignment | pb.ContactAssignment | None = None, + object_contact_group: str | ContactGroup | pb.ContactGroup | None = None, + object_contact_role: str | ContactRole | pb.ContactRole | None = None, + object_device: str | Device | pb.Device | None = None, + object_device_bay: str | DeviceBay | pb.DeviceBay | None = None, + object_device_role: str | DeviceRole | pb.DeviceRole | None = None, + object_device_type: str | DeviceType | pb.DeviceType | None = None, + object_fhrp_group: str | FHRPGroup | pb.FHRPGroup | None = None, + object_fhrp_group_assignment: str | FHRPGroupAssignment | pb.FHRPGroupAssignment | None = None, + object_front_port: str | FrontPort | pb.FrontPort | None = None, + object_ike_policy: str | IKEPolicy | pb.IKEPolicy | None = None, + object_ike_proposal: str | IKEProposal | pb.IKEProposal | None = None, + object_ip_address: str | IPAddress | pb.IPAddress | None = None, + object_ip_range: str | IPRange | pb.IPRange | None = None, + object_ip_sec_policy: str | IPSecPolicy | pb.IPSecPolicy | None = None, + object_ip_sec_profile: str | IPSecProfile | pb.IPSecProfile | None = None, + object_ip_sec_proposal: str | IPSecProposal | pb.IPSecProposal | None = None, + object_interface: str | Interface | pb.Interface | None = None, + object_inventory_item: str | InventoryItem | pb.InventoryItem | None = None, + object_inventory_item_role: str | InventoryItemRole | pb.InventoryItemRole | None = None, + object_l2vpn: str | L2VPN | pb.L2VPN | None = None, + object_l2vpn_termination: str | L2VPNTermination | pb.L2VPNTermination | None = None, + object_location: str | Location | pb.Location | None = None, + object_mac_address: str | MACAddress | pb.MACAddress | None = None, + object_manufacturer: str | Manufacturer | pb.Manufacturer | None = None, + object_module: str | Module | pb.Module | None = None, + object_module_bay: str | ModuleBay | pb.ModuleBay | None = None, + object_module_type: str | ModuleType | pb.ModuleType | None = None, + object_platform: str | Platform | pb.Platform | None = None, + object_power_feed: str | PowerFeed | pb.PowerFeed | None = None, + object_power_outlet: str | PowerOutlet | pb.PowerOutlet | None = None, + object_power_panel: str | PowerPanel | pb.PowerPanel | None = None, + object_power_port: str | PowerPort | pb.PowerPort | None = None, + object_prefix: str | Prefix | pb.Prefix | None = None, + object_provider: str | Provider | pb.Provider | None = None, + object_provider_account: str | ProviderAccount | pb.ProviderAccount | None = None, + object_provider_network: str | ProviderNetwork | pb.ProviderNetwork | None = None, + object_rir: str | RIR | pb.RIR | None = None, + object_rack: str | Rack | pb.Rack | None = None, + object_rack_reservation: str | RackReservation | pb.RackReservation | None = None, + object_rack_role: str | RackRole | pb.RackRole | None = None, + object_rack_type: str | RackType | pb.RackType | None = None, + object_rear_port: str | RearPort | pb.RearPort | None = None, + object_region: str | Region | pb.Region | None = None, + object_role: str | Role | pb.Role | None = None, + object_route_target: str | RouteTarget | pb.RouteTarget | None = None, + object_service: str | Service | pb.Service | None = None, + object_site: str | Site | pb.Site | None = None, + object_site_group: str | SiteGroup | pb.SiteGroup | None = None, + object_tag: str | Tag | pb.Tag | None = None, + object_tenant: str | Tenant | pb.Tenant | None = None, + object_tenant_group: str | TenantGroup | pb.TenantGroup | None = None, + object_tunnel: str | Tunnel | pb.Tunnel | None = None, + object_tunnel_group: str | TunnelGroup | pb.TunnelGroup | None = None, + object_tunnel_termination: str | TunnelTermination | pb.TunnelTermination | None = None, + object_vlan: str | VLAN | pb.VLAN | None = None, + object_vlan_group: str | VLANGroup | pb.VLANGroup | None = None, + object_vlan_translation_policy: str | VLANTranslationPolicy | pb.VLANTranslationPolicy | None = None, + object_vlan_translation_rule: str | VLANTranslationRule | pb.VLANTranslationRule | None = None, + object_vm_interface: str | VMInterface | pb.VMInterface | None = None, + object_vrf: str | VRF | pb.VRF | None = None, + object_virtual_chassis: str | VirtualChassis | pb.VirtualChassis | None = None, + object_virtual_circuit: str | VirtualCircuit | pb.VirtualCircuit | None = None, + object_virtual_circuit_termination: str | VirtualCircuitTermination | pb.VirtualCircuitTermination | None = None, + object_virtual_circuit_type: str | VirtualCircuitType | pb.VirtualCircuitType | None = None, + object_virtual_device_context: str | VirtualDeviceContext | pb.VirtualDeviceContext | None = None, + object_virtual_disk: str | VirtualDisk | pb.VirtualDisk | None = None, + object_virtual_machine: str | VirtualMachine | pb.VirtualMachine | None = None, + object_wireless_lan: str | WirelessLAN | pb.WirelessLAN | None = None, + object_wireless_lan_group: str | WirelessLANGroup | pb.WirelessLANGroup | None = None, + object_wireless_link: str | WirelessLink | pb.WirelessLink | None = None, + contact: str | Contact | pb.Contact | None = None, + role: str | ContactRole | pb.ContactRole | None = None, + priority: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.ContactAssignment: + """Create a new ContactAssignment.""" + object_asn = convert_to_protobuf(object_asn, pb.ASN) + object_asn_range = convert_to_protobuf(object_asn_range, pb.ASNRange) + object_aggregate = convert_to_protobuf(object_aggregate, pb.Aggregate) + object_cable = convert_to_protobuf(object_cable, pb.Cable) + object_cable_path = convert_to_protobuf(object_cable_path, pb.CablePath) + object_cable_termination = convert_to_protobuf(object_cable_termination, pb.CableTermination) + object_circuit = convert_to_protobuf(object_circuit, pb.Circuit) + object_circuit_group = convert_to_protobuf(object_circuit_group, pb.CircuitGroup) + object_circuit_group_assignment = convert_to_protobuf(object_circuit_group_assignment, pb.CircuitGroupAssignment) + object_circuit_termination = convert_to_protobuf(object_circuit_termination, pb.CircuitTermination) + object_circuit_type = convert_to_protobuf(object_circuit_type, pb.CircuitType) + object_cluster = convert_to_protobuf(object_cluster, pb.Cluster) + object_cluster_group = convert_to_protobuf(object_cluster_group, pb.ClusterGroup) + object_cluster_type = convert_to_protobuf(object_cluster_type, pb.ClusterType) + object_console_port = convert_to_protobuf(object_console_port, pb.ConsolePort) + object_console_server_port = convert_to_protobuf(object_console_server_port, pb.ConsoleServerPort) + object_contact = convert_to_protobuf(object_contact, pb.Contact) + object_contact_assignment = convert_to_protobuf(object_contact_assignment, pb.ContactAssignment) + object_contact_group = convert_to_protobuf(object_contact_group, pb.ContactGroup) + object_contact_role = convert_to_protobuf(object_contact_role, pb.ContactRole) + object_device = convert_to_protobuf(object_device, pb.Device) + object_device_bay = convert_to_protobuf(object_device_bay, pb.DeviceBay) + object_device_role = convert_to_protobuf(object_device_role, pb.DeviceRole) + object_device_type = convert_to_protobuf(object_device_type, pb.DeviceType) + object_fhrp_group = convert_to_protobuf(object_fhrp_group, pb.FHRPGroup) + object_fhrp_group_assignment = convert_to_protobuf(object_fhrp_group_assignment, pb.FHRPGroupAssignment) + object_front_port = convert_to_protobuf(object_front_port, pb.FrontPort) + object_ike_policy = convert_to_protobuf(object_ike_policy, pb.IKEPolicy) + object_ike_proposal = convert_to_protobuf(object_ike_proposal, pb.IKEProposal) + object_ip_address = convert_to_protobuf(object_ip_address, pb.IPAddress) + object_ip_range = convert_to_protobuf(object_ip_range, pb.IPRange) + object_ip_sec_policy = convert_to_protobuf(object_ip_sec_policy, pb.IPSecPolicy) + object_ip_sec_profile = convert_to_protobuf(object_ip_sec_profile, pb.IPSecProfile) + object_ip_sec_proposal = convert_to_protobuf(object_ip_sec_proposal, pb.IPSecProposal) + object_interface = convert_to_protobuf(object_interface, pb.Interface) + object_inventory_item = convert_to_protobuf(object_inventory_item, pb.InventoryItem) + object_inventory_item_role = convert_to_protobuf(object_inventory_item_role, pb.InventoryItemRole) + object_l2vpn = convert_to_protobuf(object_l2vpn, pb.L2VPN) + object_l2vpn_termination = convert_to_protobuf(object_l2vpn_termination, pb.L2VPNTermination) + object_location = convert_to_protobuf(object_location, pb.Location) + object_mac_address = convert_to_protobuf(object_mac_address, pb.MACAddress) + object_manufacturer = convert_to_protobuf(object_manufacturer, pb.Manufacturer) + object_module = convert_to_protobuf(object_module, pb.Module) + object_module_bay = convert_to_protobuf(object_module_bay, pb.ModuleBay) + object_module_type = convert_to_protobuf(object_module_type, pb.ModuleType) + object_platform = convert_to_protobuf(object_platform, pb.Platform) + object_power_feed = convert_to_protobuf(object_power_feed, pb.PowerFeed) + object_power_outlet = convert_to_protobuf(object_power_outlet, pb.PowerOutlet) + object_power_panel = convert_to_protobuf(object_power_panel, pb.PowerPanel) + object_power_port = convert_to_protobuf(object_power_port, pb.PowerPort) + object_prefix = convert_to_protobuf(object_prefix, pb.Prefix) + object_provider = convert_to_protobuf(object_provider, pb.Provider) + object_provider_account = convert_to_protobuf(object_provider_account, pb.ProviderAccount) + object_provider_network = convert_to_protobuf(object_provider_network, pb.ProviderNetwork) + object_rir = convert_to_protobuf(object_rir, pb.RIR) + object_rack = convert_to_protobuf(object_rack, pb.Rack) + object_rack_reservation = convert_to_protobuf(object_rack_reservation, pb.RackReservation) + object_rack_role = convert_to_protobuf(object_rack_role, pb.RackRole) + object_rack_type = convert_to_protobuf(object_rack_type, pb.RackType) + object_rear_port = convert_to_protobuf(object_rear_port, pb.RearPort) + object_region = convert_to_protobuf(object_region, pb.Region) + object_role = convert_to_protobuf(object_role, pb.Role) + object_route_target = convert_to_protobuf(object_route_target, pb.RouteTarget) + object_service = convert_to_protobuf(object_service, pb.Service) + object_site = convert_to_protobuf(object_site, pb.Site) + object_site_group = convert_to_protobuf(object_site_group, pb.SiteGroup) + object_tag = convert_to_protobuf(object_tag, pb.Tag) + object_tenant = convert_to_protobuf(object_tenant, pb.Tenant) + object_tenant_group = convert_to_protobuf(object_tenant_group, pb.TenantGroup) + object_tunnel = convert_to_protobuf(object_tunnel, pb.Tunnel) + object_tunnel_group = convert_to_protobuf(object_tunnel_group, pb.TunnelGroup) + object_tunnel_termination = convert_to_protobuf(object_tunnel_termination, pb.TunnelTermination) + object_vlan = convert_to_protobuf(object_vlan, pb.VLAN) + object_vlan_group = convert_to_protobuf(object_vlan_group, pb.VLANGroup) + object_vlan_translation_policy = convert_to_protobuf(object_vlan_translation_policy, pb.VLANTranslationPolicy) + object_vlan_translation_rule = convert_to_protobuf(object_vlan_translation_rule, pb.VLANTranslationRule) + object_vm_interface = convert_to_protobuf(object_vm_interface, pb.VMInterface) + object_vrf = convert_to_protobuf(object_vrf, pb.VRF) + object_virtual_chassis = convert_to_protobuf(object_virtual_chassis, pb.VirtualChassis) + object_virtual_circuit = convert_to_protobuf(object_virtual_circuit, pb.VirtualCircuit) + object_virtual_circuit_termination = convert_to_protobuf(object_virtual_circuit_termination, pb.VirtualCircuitTermination) + object_virtual_circuit_type = convert_to_protobuf(object_virtual_circuit_type, pb.VirtualCircuitType) + object_virtual_device_context = convert_to_protobuf(object_virtual_device_context, pb.VirtualDeviceContext) + object_virtual_disk = convert_to_protobuf(object_virtual_disk, pb.VirtualDisk) + object_virtual_machine = convert_to_protobuf(object_virtual_machine, pb.VirtualMachine) + object_wireless_lan = convert_to_protobuf(object_wireless_lan, pb.WirelessLAN) + object_wireless_lan_group = convert_to_protobuf(object_wireless_lan_group, pb.WirelessLANGroup) + object_wireless_link = convert_to_protobuf(object_wireless_link, pb.WirelessLink) + contact = convert_to_protobuf(contact, pb.Contact) + role = convert_to_protobuf(role, pb.ContactRole) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.ContactAssignment( + object_asn=object_asn, + object_asn_range=object_asn_range, + object_aggregate=object_aggregate, + object_cable=object_cable, + object_cable_path=object_cable_path, + object_cable_termination=object_cable_termination, + object_circuit=object_circuit, + object_circuit_group=object_circuit_group, + object_circuit_group_assignment=object_circuit_group_assignment, + object_circuit_termination=object_circuit_termination, + object_circuit_type=object_circuit_type, + object_cluster=object_cluster, + object_cluster_group=object_cluster_group, + object_cluster_type=object_cluster_type, + object_console_port=object_console_port, + object_console_server_port=object_console_server_port, + object_contact=object_contact, + object_contact_assignment=object_contact_assignment, + object_contact_group=object_contact_group, + object_contact_role=object_contact_role, + object_device=object_device, + object_device_bay=object_device_bay, + object_device_role=object_device_role, + object_device_type=object_device_type, + object_fhrp_group=object_fhrp_group, + object_fhrp_group_assignment=object_fhrp_group_assignment, + object_front_port=object_front_port, + object_ike_policy=object_ike_policy, + object_ike_proposal=object_ike_proposal, + object_ip_address=object_ip_address, + object_ip_range=object_ip_range, + object_ip_sec_policy=object_ip_sec_policy, + object_ip_sec_profile=object_ip_sec_profile, + object_ip_sec_proposal=object_ip_sec_proposal, + object_interface=object_interface, + object_inventory_item=object_inventory_item, + object_inventory_item_role=object_inventory_item_role, + object_l2vpn=object_l2vpn, + object_l2vpn_termination=object_l2vpn_termination, + object_location=object_location, + object_mac_address=object_mac_address, + object_manufacturer=object_manufacturer, + object_module=object_module, + object_module_bay=object_module_bay, + object_module_type=object_module_type, + object_platform=object_platform, + object_power_feed=object_power_feed, + object_power_outlet=object_power_outlet, + object_power_panel=object_power_panel, + object_power_port=object_power_port, + object_prefix=object_prefix, + object_provider=object_provider, + object_provider_account=object_provider_account, + object_provider_network=object_provider_network, + object_rir=object_rir, + object_rack=object_rack, + object_rack_reservation=object_rack_reservation, + object_rack_role=object_rack_role, + object_rack_type=object_rack_type, + object_rear_port=object_rear_port, + object_region=object_region, + object_role=object_role, + object_route_target=object_route_target, + object_service=object_service, + object_site=object_site, + object_site_group=object_site_group, + object_tag=object_tag, + object_tenant=object_tenant, + object_tenant_group=object_tenant_group, + object_tunnel=object_tunnel, + object_tunnel_group=object_tunnel_group, + object_tunnel_termination=object_tunnel_termination, + object_vlan=object_vlan, + object_vlan_group=object_vlan_group, + object_vlan_translation_policy=object_vlan_translation_policy, + object_vlan_translation_rule=object_vlan_translation_rule, + object_vm_interface=object_vm_interface, + object_vrf=object_vrf, + object_virtual_chassis=object_virtual_chassis, + object_virtual_circuit=object_virtual_circuit, + object_virtual_circuit_termination=object_virtual_circuit_termination, + object_virtual_circuit_type=object_virtual_circuit_type, + object_virtual_device_context=object_virtual_device_context, + object_virtual_disk=object_virtual_disk, + object_virtual_machine=object_virtual_machine, + object_wireless_lan=object_wireless_lan, + object_wireless_lan_group=object_wireless_lan_group, + object_wireless_link=object_wireless_link, + contact=contact, + role=role, + priority=priority, + tags=tags, + custom_fields=custom_fields, ) - if isinstance(tags, list) and all(isinstance(t, str) for t in tags): - tags = [TagPb(name=tag) for tag in tags] - return PlatformPb( +class ContactGroup: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.ContactGroup.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + parent: str | ContactGroup | pb.ContactGroup | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.ContactGroup: + """Create a new ContactGroup.""" + parent = convert_to_protobuf(parent, pb.ContactGroup) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.ContactGroup( name=name, slug=slug, - manufacturer=manufacturer, + parent=parent, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class ContactRole: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.ContactRole.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.ContactRole: + """Create a new ContactRole.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.ContactRole( + name=name, + slug=slug, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class CustomFieldObjectReference: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.CustomFieldObjectReference.""" + + def __new__( + cls, + asn: str | ASN | pb.ASN | None = None, + asn_range: str | ASNRange | pb.ASNRange | None = None, + aggregate: str | Aggregate | pb.Aggregate | None = None, + cable: str | Cable | pb.Cable | None = None, + cable_path: str | CablePath | pb.CablePath | None = None, + cable_termination: str | CableTermination | pb.CableTermination | None = None, + circuit: str | Circuit | pb.Circuit | None = None, + circuit_group: str | CircuitGroup | pb.CircuitGroup | None = None, + circuit_group_assignment: str | CircuitGroupAssignment | pb.CircuitGroupAssignment | None = None, + circuit_termination: str | CircuitTermination | pb.CircuitTermination | None = None, + circuit_type: str | CircuitType | pb.CircuitType | None = None, + cluster: str | Cluster | pb.Cluster | None = None, + cluster_group: str | ClusterGroup | pb.ClusterGroup | None = None, + cluster_type: str | ClusterType | pb.ClusterType | None = None, + console_port: str | ConsolePort | pb.ConsolePort | None = None, + console_server_port: str | ConsoleServerPort | pb.ConsoleServerPort | None = None, + contact: str | Contact | pb.Contact | None = None, + contact_assignment: str | ContactAssignment | pb.ContactAssignment | None = None, + contact_group: str | ContactGroup | pb.ContactGroup | None = None, + contact_role: str | ContactRole | pb.ContactRole | None = None, + device: str | Device | pb.Device | None = None, + device_bay: str | DeviceBay | pb.DeviceBay | None = None, + device_role: str | DeviceRole | pb.DeviceRole | None = None, + device_type: str | DeviceType | pb.DeviceType | None = None, + fhrp_group: str | FHRPGroup | pb.FHRPGroup | None = None, + fhrp_group_assignment: str | FHRPGroupAssignment | pb.FHRPGroupAssignment | None = None, + front_port: str | FrontPort | pb.FrontPort | None = None, + ike_policy: str | IKEPolicy | pb.IKEPolicy | None = None, + ike_proposal: str | IKEProposal | pb.IKEProposal | None = None, + ip_address: str | IPAddress | pb.IPAddress | None = None, + ip_range: str | IPRange | pb.IPRange | None = None, + ip_sec_policy: str | IPSecPolicy | pb.IPSecPolicy | None = None, + ip_sec_profile: str | IPSecProfile | pb.IPSecProfile | None = None, + ip_sec_proposal: str | IPSecProposal | pb.IPSecProposal | None = None, + interface: str | Interface | pb.Interface | None = None, + inventory_item: str | InventoryItem | pb.InventoryItem | None = None, + inventory_item_role: str | InventoryItemRole | pb.InventoryItemRole | None = None, + l2vpn: str | L2VPN | pb.L2VPN | None = None, + l2vpn_termination: str | L2VPNTermination | pb.L2VPNTermination | None = None, + location: str | Location | pb.Location | None = None, + mac_address: str | MACAddress | pb.MACAddress | None = None, + manufacturer: str | Manufacturer | pb.Manufacturer | None = None, + module: str | Module | pb.Module | None = None, + module_bay: str | ModuleBay | pb.ModuleBay | None = None, + module_type: str | ModuleType | pb.ModuleType | None = None, + platform: str | Platform | pb.Platform | None = None, + power_feed: str | PowerFeed | pb.PowerFeed | None = None, + power_outlet: str | PowerOutlet | pb.PowerOutlet | None = None, + power_panel: str | PowerPanel | pb.PowerPanel | None = None, + power_port: str | PowerPort | pb.PowerPort | None = None, + prefix: str | Prefix | pb.Prefix | None = None, + provider: str | Provider | pb.Provider | None = None, + provider_account: str | ProviderAccount | pb.ProviderAccount | None = None, + provider_network: str | ProviderNetwork | pb.ProviderNetwork | None = None, + rir: str | RIR | pb.RIR | None = None, + rack: str | Rack | pb.Rack | None = None, + rack_reservation: str | RackReservation | pb.RackReservation | None = None, + rack_role: str | RackRole | pb.RackRole | None = None, + rack_type: str | RackType | pb.RackType | None = None, + rear_port: str | RearPort | pb.RearPort | None = None, + region: str | Region | pb.Region | None = None, + role: str | Role | pb.Role | None = None, + route_target: str | RouteTarget | pb.RouteTarget | None = None, + service: str | Service | pb.Service | None = None, + site: str | Site | pb.Site | None = None, + site_group: str | SiteGroup | pb.SiteGroup | None = None, + tag: str | Tag | pb.Tag | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + tenant_group: str | TenantGroup | pb.TenantGroup | None = None, + tunnel: str | Tunnel | pb.Tunnel | None = None, + tunnel_group: str | TunnelGroup | pb.TunnelGroup | None = None, + tunnel_termination: str | TunnelTermination | pb.TunnelTermination | None = None, + vlan: str | VLAN | pb.VLAN | None = None, + vlan_group: str | VLANGroup | pb.VLANGroup | None = None, + vlan_translation_policy: str | VLANTranslationPolicy | pb.VLANTranslationPolicy | None = None, + vlan_translation_rule: str | VLANTranslationRule | pb.VLANTranslationRule | None = None, + vm_interface: str | VMInterface | pb.VMInterface | None = None, + vrf: str | VRF | pb.VRF | None = None, + virtual_chassis: str | VirtualChassis | pb.VirtualChassis | None = None, + virtual_circuit: str | VirtualCircuit | pb.VirtualCircuit | None = None, + virtual_circuit_termination: str | VirtualCircuitTermination | pb.VirtualCircuitTermination | None = None, + virtual_circuit_type: str | VirtualCircuitType | pb.VirtualCircuitType | None = None, + virtual_device_context: str | VirtualDeviceContext | pb.VirtualDeviceContext | None = None, + virtual_disk: str | VirtualDisk | pb.VirtualDisk | None = None, + virtual_machine: str | VirtualMachine | pb.VirtualMachine | None = None, + wireless_lan: str | WirelessLAN | pb.WirelessLAN | None = None, + wireless_lan_group: str | WirelessLANGroup | pb.WirelessLANGroup | None = None, + wireless_link: str | WirelessLink | pb.WirelessLink | None = None, + ) -> pb.CustomFieldObjectReference: + """Create a new CustomFieldObjectReference.""" + asn = convert_to_protobuf(asn, pb.ASN) + asn_range = convert_to_protobuf(asn_range, pb.ASNRange) + aggregate = convert_to_protobuf(aggregate, pb.Aggregate) + cable = convert_to_protobuf(cable, pb.Cable) + cable_path = convert_to_protobuf(cable_path, pb.CablePath) + cable_termination = convert_to_protobuf(cable_termination, pb.CableTermination) + circuit = convert_to_protobuf(circuit, pb.Circuit) + circuit_group = convert_to_protobuf(circuit_group, pb.CircuitGroup) + circuit_group_assignment = convert_to_protobuf(circuit_group_assignment, pb.CircuitGroupAssignment) + circuit_termination = convert_to_protobuf(circuit_termination, pb.CircuitTermination) + circuit_type = convert_to_protobuf(circuit_type, pb.CircuitType) + cluster = convert_to_protobuf(cluster, pb.Cluster) + cluster_group = convert_to_protobuf(cluster_group, pb.ClusterGroup) + cluster_type = convert_to_protobuf(cluster_type, pb.ClusterType) + console_port = convert_to_protobuf(console_port, pb.ConsolePort) + console_server_port = convert_to_protobuf(console_server_port, pb.ConsoleServerPort) + contact = convert_to_protobuf(contact, pb.Contact) + contact_assignment = convert_to_protobuf(contact_assignment, pb.ContactAssignment) + contact_group = convert_to_protobuf(contact_group, pb.ContactGroup) + contact_role = convert_to_protobuf(contact_role, pb.ContactRole) + device = convert_to_protobuf(device, pb.Device) + device_bay = convert_to_protobuf(device_bay, pb.DeviceBay) + device_role = convert_to_protobuf(device_role, pb.DeviceRole) + device_type = convert_to_protobuf(device_type, pb.DeviceType) + fhrp_group = convert_to_protobuf(fhrp_group, pb.FHRPGroup) + fhrp_group_assignment = convert_to_protobuf(fhrp_group_assignment, pb.FHRPGroupAssignment) + front_port = convert_to_protobuf(front_port, pb.FrontPort) + ike_policy = convert_to_protobuf(ike_policy, pb.IKEPolicy) + ike_proposal = convert_to_protobuf(ike_proposal, pb.IKEProposal) + ip_address = convert_to_protobuf(ip_address, pb.IPAddress) + ip_range = convert_to_protobuf(ip_range, pb.IPRange) + ip_sec_policy = convert_to_protobuf(ip_sec_policy, pb.IPSecPolicy) + ip_sec_profile = convert_to_protobuf(ip_sec_profile, pb.IPSecProfile) + ip_sec_proposal = convert_to_protobuf(ip_sec_proposal, pb.IPSecProposal) + interface = convert_to_protobuf(interface, pb.Interface) + inventory_item = convert_to_protobuf(inventory_item, pb.InventoryItem) + inventory_item_role = convert_to_protobuf(inventory_item_role, pb.InventoryItemRole) + l2vpn = convert_to_protobuf(l2vpn, pb.L2VPN) + l2vpn_termination = convert_to_protobuf(l2vpn_termination, pb.L2VPNTermination) + location = convert_to_protobuf(location, pb.Location) + mac_address = convert_to_protobuf(mac_address, pb.MACAddress) + manufacturer = convert_to_protobuf(manufacturer, pb.Manufacturer) + module = convert_to_protobuf(module, pb.Module) + module_bay = convert_to_protobuf(module_bay, pb.ModuleBay) + module_type = convert_to_protobuf(module_type, pb.ModuleType) + platform = convert_to_protobuf(platform, pb.Platform) + power_feed = convert_to_protobuf(power_feed, pb.PowerFeed) + power_outlet = convert_to_protobuf(power_outlet, pb.PowerOutlet) + power_panel = convert_to_protobuf(power_panel, pb.PowerPanel) + power_port = convert_to_protobuf(power_port, pb.PowerPort) + prefix = convert_to_protobuf(prefix, pb.Prefix) + provider = convert_to_protobuf(provider, pb.Provider) + provider_account = convert_to_protobuf(provider_account, pb.ProviderAccount) + provider_network = convert_to_protobuf(provider_network, pb.ProviderNetwork) + rir = convert_to_protobuf(rir, pb.RIR) + rack = convert_to_protobuf(rack, pb.Rack) + rack_reservation = convert_to_protobuf(rack_reservation, pb.RackReservation) + rack_role = convert_to_protobuf(rack_role, pb.RackRole) + rack_type = convert_to_protobuf(rack_type, pb.RackType) + rear_port = convert_to_protobuf(rear_port, pb.RearPort) + region = convert_to_protobuf(region, pb.Region) + role = convert_to_protobuf(role, pb.Role) + route_target = convert_to_protobuf(route_target, pb.RouteTarget) + service = convert_to_protobuf(service, pb.Service) + site = convert_to_protobuf(site, pb.Site) + site_group = convert_to_protobuf(site_group, pb.SiteGroup) + tag = convert_to_protobuf(tag, pb.Tag) + tenant = convert_to_protobuf(tenant, pb.Tenant) + tenant_group = convert_to_protobuf(tenant_group, pb.TenantGroup) + tunnel = convert_to_protobuf(tunnel, pb.Tunnel) + tunnel_group = convert_to_protobuf(tunnel_group, pb.TunnelGroup) + tunnel_termination = convert_to_protobuf(tunnel_termination, pb.TunnelTermination) + vlan = convert_to_protobuf(vlan, pb.VLAN) + vlan_group = convert_to_protobuf(vlan_group, pb.VLANGroup) + vlan_translation_policy = convert_to_protobuf(vlan_translation_policy, pb.VLANTranslationPolicy) + vlan_translation_rule = convert_to_protobuf(vlan_translation_rule, pb.VLANTranslationRule) + vm_interface = convert_to_protobuf(vm_interface, pb.VMInterface) + vrf = convert_to_protobuf(vrf, pb.VRF) + virtual_chassis = convert_to_protobuf(virtual_chassis, pb.VirtualChassis) + virtual_circuit = convert_to_protobuf(virtual_circuit, pb.VirtualCircuit) + virtual_circuit_termination = convert_to_protobuf(virtual_circuit_termination, pb.VirtualCircuitTermination) + virtual_circuit_type = convert_to_protobuf(virtual_circuit_type, pb.VirtualCircuitType) + virtual_device_context = convert_to_protobuf(virtual_device_context, pb.VirtualDeviceContext) + virtual_disk = convert_to_protobuf(virtual_disk, pb.VirtualDisk) + virtual_machine = convert_to_protobuf(virtual_machine, pb.VirtualMachine) + wireless_lan = convert_to_protobuf(wireless_lan, pb.WirelessLAN) + wireless_lan_group = convert_to_protobuf(wireless_lan_group, pb.WirelessLANGroup) + wireless_link = convert_to_protobuf(wireless_link, pb.WirelessLink) + return pb.CustomFieldObjectReference( + asn=asn, + asn_range=asn_range, + aggregate=aggregate, + cable=cable, + cable_path=cable_path, + cable_termination=cable_termination, + circuit=circuit, + circuit_group=circuit_group, + circuit_group_assignment=circuit_group_assignment, + circuit_termination=circuit_termination, + circuit_type=circuit_type, + cluster=cluster, + cluster_group=cluster_group, + cluster_type=cluster_type, + console_port=console_port, + console_server_port=console_server_port, + contact=contact, + contact_assignment=contact_assignment, + contact_group=contact_group, + contact_role=contact_role, + device=device, + device_bay=device_bay, + device_role=device_role, + device_type=device_type, + fhrp_group=fhrp_group, + fhrp_group_assignment=fhrp_group_assignment, + front_port=front_port, + ike_policy=ike_policy, + ike_proposal=ike_proposal, + ip_address=ip_address, + ip_range=ip_range, + ip_sec_policy=ip_sec_policy, + ip_sec_profile=ip_sec_profile, + ip_sec_proposal=ip_sec_proposal, + interface=interface, + inventory_item=inventory_item, + inventory_item_role=inventory_item_role, + l2vpn=l2vpn, + l2vpn_termination=l2vpn_termination, + location=location, + mac_address=mac_address, + manufacturer=manufacturer, + module=module, + module_bay=module_bay, + module_type=module_type, + platform=platform, + power_feed=power_feed, + power_outlet=power_outlet, + power_panel=power_panel, + power_port=power_port, + prefix=prefix, + provider=provider, + provider_account=provider_account, + provider_network=provider_network, + rir=rir, + rack=rack, + rack_reservation=rack_reservation, + rack_role=rack_role, + rack_type=rack_type, + rear_port=rear_port, + region=region, + role=role, + route_target=route_target, + service=service, + site=site, + site_group=site_group, + tag=tag, + tenant=tenant, + tenant_group=tenant_group, + tunnel=tunnel, + tunnel_group=tunnel_group, + tunnel_termination=tunnel_termination, + vlan=vlan, + vlan_group=vlan_group, + vlan_translation_policy=vlan_translation_policy, + vlan_translation_rule=vlan_translation_rule, + vm_interface=vm_interface, + vrf=vrf, + virtual_chassis=virtual_chassis, + virtual_circuit=virtual_circuit, + virtual_circuit_termination=virtual_circuit_termination, + virtual_circuit_type=virtual_circuit_type, + virtual_device_context=virtual_device_context, + virtual_disk=virtual_disk, + virtual_machine=virtual_machine, + wireless_lan=wireless_lan, + wireless_lan_group=wireless_lan_group, + wireless_link=wireless_link, + ) + + +class CustomFieldValue: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.CustomFieldValue.""" + + def __new__( + cls, + multiple_selection: list[str] | None = None, + multiple_objects: list[str | CustomFieldObjectReference | pb.CustomFieldObjectReference] | None = None, + text: str | None = None, + long_text: str | None = None, + integer: int | None = None, + decimal: float | None = None, + boolean: bool | None = None, + date: datetime.datetime | None = None, + datetime: datetime.datetime | None = None, + url: str | None = None, + json: str | None = None, + selection: str | None = None, + object: str | CustomFieldObjectReference | pb.CustomFieldObjectReference | None = None, + ) -> pb.CustomFieldValue: + """Create a new CustomFieldValue.""" + multiple_objects = convert_to_protobuf_list(multiple_objects, pb.CustomFieldObjectReference) + object = convert_to_protobuf(object, pb.CustomFieldObjectReference) + return pb.CustomFieldValue( + multiple_selection=multiple_selection, + multiple_objects=multiple_objects, + text=text, + long_text=long_text, + integer=integer, + decimal=decimal, + boolean=boolean, + date=date, + datetime=datetime, + url=url, + json=json, + selection=selection, + object=object, + ) + + +class Device: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Device.""" + + def __new__( + cls, + name: str | None = None, + device_type: str | DeviceType | pb.DeviceType | None = None, + role: str | DeviceRole | pb.DeviceRole | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + platform: str | Platform | pb.Platform | None = None, + serial: str | None = None, + asset_tag: str | None = None, + site: str | Site | pb.Site | None = None, + location: str | Location | pb.Location | None = None, + rack: str | Rack | pb.Rack | None = None, + position: float | None = None, + face: str | None = None, + latitude: float | None = None, + longitude: float | None = None, + status: str | None = None, + airflow: str | None = None, + primary_ip4: str | IPAddress | pb.IPAddress | None = None, + primary_ip6: str | IPAddress | pb.IPAddress | None = None, + oob_ip: str | IPAddress | pb.IPAddress | None = None, + cluster: str | Cluster | pb.Cluster | None = None, + virtual_chassis: str | VirtualChassis | pb.VirtualChassis | None = None, + vc_position: int | None = None, + vc_priority: int | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + # shortcuts + manufacturer: str | Manufacturer | pb.Manufacturer = None, + ) -> pb.Device: + """Create a new Device.""" + device_type = convert_to_protobuf(device_type, pb.DeviceType) + role = convert_to_protobuf(role, pb.DeviceRole) + tenant = convert_to_protobuf(tenant, pb.Tenant) + platform = convert_to_protobuf(platform, pb.Platform) + site = convert_to_protobuf(site, pb.Site) + location = convert_to_protobuf(location, pb.Location) + rack = convert_to_protobuf(rack, pb.Rack) + primary_ip4 = convert_to_protobuf(primary_ip4, pb.IPAddress) + primary_ip6 = convert_to_protobuf(primary_ip6, pb.IPAddress) + oob_ip = convert_to_protobuf(oob_ip, pb.IPAddress) + cluster = convert_to_protobuf(cluster, pb.Cluster) + virtual_chassis = convert_to_protobuf(virtual_chassis, pb.VirtualChassis) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + + # shortcut types (not directly used) + manufacturer = convert_to_protobuf(manufacturer, pb.Manufacturer) + + # apply shortcuts + if manufacturer is not None: + if platform is not None and not platform.HasField('manufacturer'): + platform.manufacturer.CopyFrom(manufacturer) + if device_type is not None and not device_type.HasField('manufacturer'): + device_type.manufacturer.CopyFrom(manufacturer) + return pb.Device( + name=name, + device_type=device_type, + role=role, + tenant=tenant, + platform=platform, + serial=serial, + asset_tag=asset_tag, + site=site, + location=location, + rack=rack, + position=position, + face=face, + latitude=latitude, + longitude=longitude, + status=status, + airflow=airflow, + primary_ip4=primary_ip4, + primary_ip6=primary_ip6, + oob_ip=oob_ip, + cluster=cluster, + virtual_chassis=virtual_chassis, + vc_position=vc_position, + vc_priority=vc_priority, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class DeviceBay: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.DeviceBay.""" + + def __new__( + cls, + device: str | Device | pb.Device | None = None, + name: str | None = None, + label: str | None = None, + description: str | None = None, + installed_device: str | Device | pb.Device | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.DeviceBay: + """Create a new DeviceBay.""" + device = convert_to_protobuf(device, pb.Device) + installed_device = convert_to_protobuf(installed_device, pb.Device) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.DeviceBay( + device=device, + name=name, + label=label, + description=description, + installed_device=installed_device, + tags=tags, + custom_fields=custom_fields, + ) + + +class DeviceRole: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.DeviceRole.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + color: str | None = None, + vm_role: bool | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.DeviceRole: + """Create a new DeviceRole.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.DeviceRole( + name=name, + slug=slug, + color=color, + vm_role=vm_role, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class DeviceType: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.DeviceType.""" + + def __new__( + cls, + manufacturer: str | Manufacturer | pb.Manufacturer | None = None, + default_platform: str | Platform | pb.Platform | None = None, + model: str | None = None, + slug: str | None = None, + part_number: str | None = None, + u_height: float | None = None, + exclude_from_utilization: bool | None = None, + is_full_depth: bool | None = None, + subdevice_role: str | None = None, + airflow: str | None = None, + weight: float | None = None, + weight_unit: str | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.DeviceType: + """Create a new DeviceType.""" + manufacturer = convert_to_protobuf(manufacturer, pb.Manufacturer) + default_platform = convert_to_protobuf(default_platform, pb.Platform) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.DeviceType( + manufacturer=manufacturer, + default_platform=default_platform, + model=model, + slug=slug, + part_number=part_number, + u_height=u_height, + exclude_from_utilization=exclude_from_utilization, + is_full_depth=is_full_depth, + subdevice_role=subdevice_role, + airflow=airflow, + weight=weight, + weight_unit=weight_unit, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class FHRPGroup: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.FHRPGroup.""" + + def __new__( + cls, + name: str | None = None, + protocol: str | None = None, + group_id: int | None = None, + auth_type: str | None = None, + auth_key: str | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.FHRPGroup: + """Create a new FHRPGroup.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.FHRPGroup( + name=name, + protocol=protocol, + group_id=group_id, + auth_type=auth_type, + auth_key=auth_key, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class FHRPGroupAssignment: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.FHRPGroupAssignment.""" + + def __new__( + cls, + group: str | FHRPGroup | pb.FHRPGroup | None = None, + interface_asn: str | ASN | pb.ASN | None = None, + interface_asn_range: str | ASNRange | pb.ASNRange | None = None, + interface_aggregate: str | Aggregate | pb.Aggregate | None = None, + interface_cable: str | Cable | pb.Cable | None = None, + interface_cable_path: str | CablePath | pb.CablePath | None = None, + interface_cable_termination: str | CableTermination | pb.CableTermination | None = None, + interface_circuit: str | Circuit | pb.Circuit | None = None, + interface_circuit_group: str | CircuitGroup | pb.CircuitGroup | None = None, + interface_circuit_group_assignment: str | CircuitGroupAssignment | pb.CircuitGroupAssignment | None = None, + interface_circuit_termination: str | CircuitTermination | pb.CircuitTermination | None = None, + interface_circuit_type: str | CircuitType | pb.CircuitType | None = None, + interface_cluster: str | Cluster | pb.Cluster | None = None, + interface_cluster_group: str | ClusterGroup | pb.ClusterGroup | None = None, + interface_cluster_type: str | ClusterType | pb.ClusterType | None = None, + interface_console_port: str | ConsolePort | pb.ConsolePort | None = None, + interface_console_server_port: str | ConsoleServerPort | pb.ConsoleServerPort | None = None, + interface_contact: str | Contact | pb.Contact | None = None, + interface_contact_assignment: str | ContactAssignment | pb.ContactAssignment | None = None, + interface_contact_group: str | ContactGroup | pb.ContactGroup | None = None, + interface_contact_role: str | ContactRole | pb.ContactRole | None = None, + interface_device: str | Device | pb.Device | None = None, + interface_device_bay: str | DeviceBay | pb.DeviceBay | None = None, + interface_device_role: str | DeviceRole | pb.DeviceRole | None = None, + interface_device_type: str | DeviceType | pb.DeviceType | None = None, + interface_fhrp_group: str | FHRPGroup | pb.FHRPGroup | None = None, + interface_fhrp_group_assignment: str | FHRPGroupAssignment | pb.FHRPGroupAssignment | None = None, + interface_front_port: str | FrontPort | pb.FrontPort | None = None, + interface_ike_policy: str | IKEPolicy | pb.IKEPolicy | None = None, + interface_ike_proposal: str | IKEProposal | pb.IKEProposal | None = None, + interface_ip_address: str | IPAddress | pb.IPAddress | None = None, + interface_ip_range: str | IPRange | pb.IPRange | None = None, + interface_ip_sec_policy: str | IPSecPolicy | pb.IPSecPolicy | None = None, + interface_ip_sec_profile: str | IPSecProfile | pb.IPSecProfile | None = None, + interface_ip_sec_proposal: str | IPSecProposal | pb.IPSecProposal | None = None, + interface_interface: str | Interface | pb.Interface | None = None, + interface_inventory_item: str | InventoryItem | pb.InventoryItem | None = None, + interface_inventory_item_role: str | InventoryItemRole | pb.InventoryItemRole | None = None, + interface_l2vpn: str | L2VPN | pb.L2VPN | None = None, + interface_l2vpn_termination: str | L2VPNTermination | pb.L2VPNTermination | None = None, + interface_location: str | Location | pb.Location | None = None, + interface_mac_address: str | MACAddress | pb.MACAddress | None = None, + interface_manufacturer: str | Manufacturer | pb.Manufacturer | None = None, + interface_module: str | Module | pb.Module | None = None, + interface_module_bay: str | ModuleBay | pb.ModuleBay | None = None, + interface_module_type: str | ModuleType | pb.ModuleType | None = None, + interface_platform: str | Platform | pb.Platform | None = None, + interface_power_feed: str | PowerFeed | pb.PowerFeed | None = None, + interface_power_outlet: str | PowerOutlet | pb.PowerOutlet | None = None, + interface_power_panel: str | PowerPanel | pb.PowerPanel | None = None, + interface_power_port: str | PowerPort | pb.PowerPort | None = None, + interface_prefix: str | Prefix | pb.Prefix | None = None, + interface_provider: str | Provider | pb.Provider | None = None, + interface_provider_account: str | ProviderAccount | pb.ProviderAccount | None = None, + interface_provider_network: str | ProviderNetwork | pb.ProviderNetwork | None = None, + interface_rir: str | RIR | pb.RIR | None = None, + interface_rack: str | Rack | pb.Rack | None = None, + interface_rack_reservation: str | RackReservation | pb.RackReservation | None = None, + interface_rack_role: str | RackRole | pb.RackRole | None = None, + interface_rack_type: str | RackType | pb.RackType | None = None, + interface_rear_port: str | RearPort | pb.RearPort | None = None, + interface_region: str | Region | pb.Region | None = None, + interface_role: str | Role | pb.Role | None = None, + interface_route_target: str | RouteTarget | pb.RouteTarget | None = None, + interface_service: str | Service | pb.Service | None = None, + interface_site: str | Site | pb.Site | None = None, + interface_site_group: str | SiteGroup | pb.SiteGroup | None = None, + interface_tag: str | Tag | pb.Tag | None = None, + interface_tenant: str | Tenant | pb.Tenant | None = None, + interface_tenant_group: str | TenantGroup | pb.TenantGroup | None = None, + interface_tunnel: str | Tunnel | pb.Tunnel | None = None, + interface_tunnel_group: str | TunnelGroup | pb.TunnelGroup | None = None, + interface_tunnel_termination: str | TunnelTermination | pb.TunnelTermination | None = None, + interface_vlan: str | VLAN | pb.VLAN | None = None, + interface_vlan_group: str | VLANGroup | pb.VLANGroup | None = None, + interface_vlan_translation_policy: str | VLANTranslationPolicy | pb.VLANTranslationPolicy | None = None, + interface_vlan_translation_rule: str | VLANTranslationRule | pb.VLANTranslationRule | None = None, + interface_vm_interface: str | VMInterface | pb.VMInterface | None = None, + interface_vrf: str | VRF | pb.VRF | None = None, + interface_virtual_chassis: str | VirtualChassis | pb.VirtualChassis | None = None, + interface_virtual_circuit: str | VirtualCircuit | pb.VirtualCircuit | None = None, + interface_virtual_circuit_termination: str | VirtualCircuitTermination | pb.VirtualCircuitTermination | None = None, + interface_virtual_circuit_type: str | VirtualCircuitType | pb.VirtualCircuitType | None = None, + interface_virtual_device_context: str | VirtualDeviceContext | pb.VirtualDeviceContext | None = None, + interface_virtual_disk: str | VirtualDisk | pb.VirtualDisk | None = None, + interface_virtual_machine: str | VirtualMachine | pb.VirtualMachine | None = None, + interface_wireless_lan: str | WirelessLAN | pb.WirelessLAN | None = None, + interface_wireless_lan_group: str | WirelessLANGroup | pb.WirelessLANGroup | None = None, + interface_wireless_link: str | WirelessLink | pb.WirelessLink | None = None, + priority: int | None = None, + ) -> pb.FHRPGroupAssignment: + """Create a new FHRPGroupAssignment.""" + group = convert_to_protobuf(group, pb.FHRPGroup) + interface_asn = convert_to_protobuf(interface_asn, pb.ASN) + interface_asn_range = convert_to_protobuf(interface_asn_range, pb.ASNRange) + interface_aggregate = convert_to_protobuf(interface_aggregate, pb.Aggregate) + interface_cable = convert_to_protobuf(interface_cable, pb.Cable) + interface_cable_path = convert_to_protobuf(interface_cable_path, pb.CablePath) + interface_cable_termination = convert_to_protobuf(interface_cable_termination, pb.CableTermination) + interface_circuit = convert_to_protobuf(interface_circuit, pb.Circuit) + interface_circuit_group = convert_to_protobuf(interface_circuit_group, pb.CircuitGroup) + interface_circuit_group_assignment = convert_to_protobuf(interface_circuit_group_assignment, pb.CircuitGroupAssignment) + interface_circuit_termination = convert_to_protobuf(interface_circuit_termination, pb.CircuitTermination) + interface_circuit_type = convert_to_protobuf(interface_circuit_type, pb.CircuitType) + interface_cluster = convert_to_protobuf(interface_cluster, pb.Cluster) + interface_cluster_group = convert_to_protobuf(interface_cluster_group, pb.ClusterGroup) + interface_cluster_type = convert_to_protobuf(interface_cluster_type, pb.ClusterType) + interface_console_port = convert_to_protobuf(interface_console_port, pb.ConsolePort) + interface_console_server_port = convert_to_protobuf(interface_console_server_port, pb.ConsoleServerPort) + interface_contact = convert_to_protobuf(interface_contact, pb.Contact) + interface_contact_assignment = convert_to_protobuf(interface_contact_assignment, pb.ContactAssignment) + interface_contact_group = convert_to_protobuf(interface_contact_group, pb.ContactGroup) + interface_contact_role = convert_to_protobuf(interface_contact_role, pb.ContactRole) + interface_device = convert_to_protobuf(interface_device, pb.Device) + interface_device_bay = convert_to_protobuf(interface_device_bay, pb.DeviceBay) + interface_device_role = convert_to_protobuf(interface_device_role, pb.DeviceRole) + interface_device_type = convert_to_protobuf(interface_device_type, pb.DeviceType) + interface_fhrp_group = convert_to_protobuf(interface_fhrp_group, pb.FHRPGroup) + interface_fhrp_group_assignment = convert_to_protobuf(interface_fhrp_group_assignment, pb.FHRPGroupAssignment) + interface_front_port = convert_to_protobuf(interface_front_port, pb.FrontPort) + interface_ike_policy = convert_to_protobuf(interface_ike_policy, pb.IKEPolicy) + interface_ike_proposal = convert_to_protobuf(interface_ike_proposal, pb.IKEProposal) + interface_ip_address = convert_to_protobuf(interface_ip_address, pb.IPAddress) + interface_ip_range = convert_to_protobuf(interface_ip_range, pb.IPRange) + interface_ip_sec_policy = convert_to_protobuf(interface_ip_sec_policy, pb.IPSecPolicy) + interface_ip_sec_profile = convert_to_protobuf(interface_ip_sec_profile, pb.IPSecProfile) + interface_ip_sec_proposal = convert_to_protobuf(interface_ip_sec_proposal, pb.IPSecProposal) + interface_interface = convert_to_protobuf(interface_interface, pb.Interface) + interface_inventory_item = convert_to_protobuf(interface_inventory_item, pb.InventoryItem) + interface_inventory_item_role = convert_to_protobuf(interface_inventory_item_role, pb.InventoryItemRole) + interface_l2vpn = convert_to_protobuf(interface_l2vpn, pb.L2VPN) + interface_l2vpn_termination = convert_to_protobuf(interface_l2vpn_termination, pb.L2VPNTermination) + interface_location = convert_to_protobuf(interface_location, pb.Location) + interface_mac_address = convert_to_protobuf(interface_mac_address, pb.MACAddress) + interface_manufacturer = convert_to_protobuf(interface_manufacturer, pb.Manufacturer) + interface_module = convert_to_protobuf(interface_module, pb.Module) + interface_module_bay = convert_to_protobuf(interface_module_bay, pb.ModuleBay) + interface_module_type = convert_to_protobuf(interface_module_type, pb.ModuleType) + interface_platform = convert_to_protobuf(interface_platform, pb.Platform) + interface_power_feed = convert_to_protobuf(interface_power_feed, pb.PowerFeed) + interface_power_outlet = convert_to_protobuf(interface_power_outlet, pb.PowerOutlet) + interface_power_panel = convert_to_protobuf(interface_power_panel, pb.PowerPanel) + interface_power_port = convert_to_protobuf(interface_power_port, pb.PowerPort) + interface_prefix = convert_to_protobuf(interface_prefix, pb.Prefix) + interface_provider = convert_to_protobuf(interface_provider, pb.Provider) + interface_provider_account = convert_to_protobuf(interface_provider_account, pb.ProviderAccount) + interface_provider_network = convert_to_protobuf(interface_provider_network, pb.ProviderNetwork) + interface_rir = convert_to_protobuf(interface_rir, pb.RIR) + interface_rack = convert_to_protobuf(interface_rack, pb.Rack) + interface_rack_reservation = convert_to_protobuf(interface_rack_reservation, pb.RackReservation) + interface_rack_role = convert_to_protobuf(interface_rack_role, pb.RackRole) + interface_rack_type = convert_to_protobuf(interface_rack_type, pb.RackType) + interface_rear_port = convert_to_protobuf(interface_rear_port, pb.RearPort) + interface_region = convert_to_protobuf(interface_region, pb.Region) + interface_role = convert_to_protobuf(interface_role, pb.Role) + interface_route_target = convert_to_protobuf(interface_route_target, pb.RouteTarget) + interface_service = convert_to_protobuf(interface_service, pb.Service) + interface_site = convert_to_protobuf(interface_site, pb.Site) + interface_site_group = convert_to_protobuf(interface_site_group, pb.SiteGroup) + interface_tag = convert_to_protobuf(interface_tag, pb.Tag) + interface_tenant = convert_to_protobuf(interface_tenant, pb.Tenant) + interface_tenant_group = convert_to_protobuf(interface_tenant_group, pb.TenantGroup) + interface_tunnel = convert_to_protobuf(interface_tunnel, pb.Tunnel) + interface_tunnel_group = convert_to_protobuf(interface_tunnel_group, pb.TunnelGroup) + interface_tunnel_termination = convert_to_protobuf(interface_tunnel_termination, pb.TunnelTermination) + interface_vlan = convert_to_protobuf(interface_vlan, pb.VLAN) + interface_vlan_group = convert_to_protobuf(interface_vlan_group, pb.VLANGroup) + interface_vlan_translation_policy = convert_to_protobuf(interface_vlan_translation_policy, pb.VLANTranslationPolicy) + interface_vlan_translation_rule = convert_to_protobuf(interface_vlan_translation_rule, pb.VLANTranslationRule) + interface_vm_interface = convert_to_protobuf(interface_vm_interface, pb.VMInterface) + interface_vrf = convert_to_protobuf(interface_vrf, pb.VRF) + interface_virtual_chassis = convert_to_protobuf(interface_virtual_chassis, pb.VirtualChassis) + interface_virtual_circuit = convert_to_protobuf(interface_virtual_circuit, pb.VirtualCircuit) + interface_virtual_circuit_termination = convert_to_protobuf(interface_virtual_circuit_termination, pb.VirtualCircuitTermination) + interface_virtual_circuit_type = convert_to_protobuf(interface_virtual_circuit_type, pb.VirtualCircuitType) + interface_virtual_device_context = convert_to_protobuf(interface_virtual_device_context, pb.VirtualDeviceContext) + interface_virtual_disk = convert_to_protobuf(interface_virtual_disk, pb.VirtualDisk) + interface_virtual_machine = convert_to_protobuf(interface_virtual_machine, pb.VirtualMachine) + interface_wireless_lan = convert_to_protobuf(interface_wireless_lan, pb.WirelessLAN) + interface_wireless_lan_group = convert_to_protobuf(interface_wireless_lan_group, pb.WirelessLANGroup) + interface_wireless_link = convert_to_protobuf(interface_wireless_link, pb.WirelessLink) + return pb.FHRPGroupAssignment( + group=group, + interface_asn=interface_asn, + interface_asn_range=interface_asn_range, + interface_aggregate=interface_aggregate, + interface_cable=interface_cable, + interface_cable_path=interface_cable_path, + interface_cable_termination=interface_cable_termination, + interface_circuit=interface_circuit, + interface_circuit_group=interface_circuit_group, + interface_circuit_group_assignment=interface_circuit_group_assignment, + interface_circuit_termination=interface_circuit_termination, + interface_circuit_type=interface_circuit_type, + interface_cluster=interface_cluster, + interface_cluster_group=interface_cluster_group, + interface_cluster_type=interface_cluster_type, + interface_console_port=interface_console_port, + interface_console_server_port=interface_console_server_port, + interface_contact=interface_contact, + interface_contact_assignment=interface_contact_assignment, + interface_contact_group=interface_contact_group, + interface_contact_role=interface_contact_role, + interface_device=interface_device, + interface_device_bay=interface_device_bay, + interface_device_role=interface_device_role, + interface_device_type=interface_device_type, + interface_fhrp_group=interface_fhrp_group, + interface_fhrp_group_assignment=interface_fhrp_group_assignment, + interface_front_port=interface_front_port, + interface_ike_policy=interface_ike_policy, + interface_ike_proposal=interface_ike_proposal, + interface_ip_address=interface_ip_address, + interface_ip_range=interface_ip_range, + interface_ip_sec_policy=interface_ip_sec_policy, + interface_ip_sec_profile=interface_ip_sec_profile, + interface_ip_sec_proposal=interface_ip_sec_proposal, + interface_interface=interface_interface, + interface_inventory_item=interface_inventory_item, + interface_inventory_item_role=interface_inventory_item_role, + interface_l2vpn=interface_l2vpn, + interface_l2vpn_termination=interface_l2vpn_termination, + interface_location=interface_location, + interface_mac_address=interface_mac_address, + interface_manufacturer=interface_manufacturer, + interface_module=interface_module, + interface_module_bay=interface_module_bay, + interface_module_type=interface_module_type, + interface_platform=interface_platform, + interface_power_feed=interface_power_feed, + interface_power_outlet=interface_power_outlet, + interface_power_panel=interface_power_panel, + interface_power_port=interface_power_port, + interface_prefix=interface_prefix, + interface_provider=interface_provider, + interface_provider_account=interface_provider_account, + interface_provider_network=interface_provider_network, + interface_rir=interface_rir, + interface_rack=interface_rack, + interface_rack_reservation=interface_rack_reservation, + interface_rack_role=interface_rack_role, + interface_rack_type=interface_rack_type, + interface_rear_port=interface_rear_port, + interface_region=interface_region, + interface_role=interface_role, + interface_route_target=interface_route_target, + interface_service=interface_service, + interface_site=interface_site, + interface_site_group=interface_site_group, + interface_tag=interface_tag, + interface_tenant=interface_tenant, + interface_tenant_group=interface_tenant_group, + interface_tunnel=interface_tunnel, + interface_tunnel_group=interface_tunnel_group, + interface_tunnel_termination=interface_tunnel_termination, + interface_vlan=interface_vlan, + interface_vlan_group=interface_vlan_group, + interface_vlan_translation_policy=interface_vlan_translation_policy, + interface_vlan_translation_rule=interface_vlan_translation_rule, + interface_vm_interface=interface_vm_interface, + interface_vrf=interface_vrf, + interface_virtual_chassis=interface_virtual_chassis, + interface_virtual_circuit=interface_virtual_circuit, + interface_virtual_circuit_termination=interface_virtual_circuit_termination, + interface_virtual_circuit_type=interface_virtual_circuit_type, + interface_virtual_device_context=interface_virtual_device_context, + interface_virtual_disk=interface_virtual_disk, + interface_virtual_machine=interface_virtual_machine, + interface_wireless_lan=interface_wireless_lan, + interface_wireless_lan_group=interface_wireless_lan_group, + interface_wireless_link=interface_wireless_link, + priority=priority, + ) + + +class FrontPort: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.FrontPort.""" + + def __new__( + cls, + device: str | Device | pb.Device | None = None, + module: str | Module | pb.Module | None = None, + name: str | None = None, + label: str | None = None, + type: str | None = None, + color: str | None = None, + rear_port: str | RearPort | pb.RearPort | None = None, + rear_port_position: int | None = None, + description: str | None = None, + mark_connected: bool | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.FrontPort: + """Create a new FrontPort.""" + device = convert_to_protobuf(device, pb.Device) + module = convert_to_protobuf(module, pb.Module) + rear_port = convert_to_protobuf(rear_port, pb.RearPort) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.FrontPort( + device=device, + module=module, + name=name, + label=label, + type=type, + color=color, + rear_port=rear_port, + rear_port_position=rear_port_position, + description=description, + mark_connected=mark_connected, + tags=tags, + custom_fields=custom_fields, + ) + + +class GenericObject: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.GenericObject.""" + + def __new__( + cls, + object_asn: str | ASN | pb.ASN | None = None, + object_asn_range: str | ASNRange | pb.ASNRange | None = None, + object_aggregate: str | Aggregate | pb.Aggregate | None = None, + object_cable: str | Cable | pb.Cable | None = None, + object_cable_path: str | CablePath | pb.CablePath | None = None, + object_cable_termination: str | CableTermination | pb.CableTermination | None = None, + object_circuit: str | Circuit | pb.Circuit | None = None, + object_circuit_group: str | CircuitGroup | pb.CircuitGroup | None = None, + object_circuit_group_assignment: str | CircuitGroupAssignment | pb.CircuitGroupAssignment | None = None, + object_circuit_termination: str | CircuitTermination | pb.CircuitTermination | None = None, + object_circuit_type: str | CircuitType | pb.CircuitType | None = None, + object_cluster: str | Cluster | pb.Cluster | None = None, + object_cluster_group: str | ClusterGroup | pb.ClusterGroup | None = None, + object_cluster_type: str | ClusterType | pb.ClusterType | None = None, + object_console_port: str | ConsolePort | pb.ConsolePort | None = None, + object_console_server_port: str | ConsoleServerPort | pb.ConsoleServerPort | None = None, + object_contact: str | Contact | pb.Contact | None = None, + object_contact_assignment: str | ContactAssignment | pb.ContactAssignment | None = None, + object_contact_group: str | ContactGroup | pb.ContactGroup | None = None, + object_contact_role: str | ContactRole | pb.ContactRole | None = None, + object_device: str | Device | pb.Device | None = None, + object_device_bay: str | DeviceBay | pb.DeviceBay | None = None, + object_device_role: str | DeviceRole | pb.DeviceRole | None = None, + object_device_type: str | DeviceType | pb.DeviceType | None = None, + object_fhrp_group: str | FHRPGroup | pb.FHRPGroup | None = None, + object_fhrp_group_assignment: str | FHRPGroupAssignment | pb.FHRPGroupAssignment | None = None, + object_front_port: str | FrontPort | pb.FrontPort | None = None, + object_ike_policy: str | IKEPolicy | pb.IKEPolicy | None = None, + object_ike_proposal: str | IKEProposal | pb.IKEProposal | None = None, + object_ip_address: str | IPAddress | pb.IPAddress | None = None, + object_ip_range: str | IPRange | pb.IPRange | None = None, + object_ip_sec_policy: str | IPSecPolicy | pb.IPSecPolicy | None = None, + object_ip_sec_profile: str | IPSecProfile | pb.IPSecProfile | None = None, + object_ip_sec_proposal: str | IPSecProposal | pb.IPSecProposal | None = None, + object_interface: str | Interface | pb.Interface | None = None, + object_inventory_item: str | InventoryItem | pb.InventoryItem | None = None, + object_inventory_item_role: str | InventoryItemRole | pb.InventoryItemRole | None = None, + object_l2vpn: str | L2VPN | pb.L2VPN | None = None, + object_l2vpn_termination: str | L2VPNTermination | pb.L2VPNTermination | None = None, + object_location: str | Location | pb.Location | None = None, + object_mac_address: str | MACAddress | pb.MACAddress | None = None, + object_manufacturer: str | Manufacturer | pb.Manufacturer | None = None, + object_module: str | Module | pb.Module | None = None, + object_module_bay: str | ModuleBay | pb.ModuleBay | None = None, + object_module_type: str | ModuleType | pb.ModuleType | None = None, + object_platform: str | Platform | pb.Platform | None = None, + object_power_feed: str | PowerFeed | pb.PowerFeed | None = None, + object_power_outlet: str | PowerOutlet | pb.PowerOutlet | None = None, + object_power_panel: str | PowerPanel | pb.PowerPanel | None = None, + object_power_port: str | PowerPort | pb.PowerPort | None = None, + object_prefix: str | Prefix | pb.Prefix | None = None, + object_provider: str | Provider | pb.Provider | None = None, + object_provider_account: str | ProviderAccount | pb.ProviderAccount | None = None, + object_provider_network: str | ProviderNetwork | pb.ProviderNetwork | None = None, + object_rir: str | RIR | pb.RIR | None = None, + object_rack: str | Rack | pb.Rack | None = None, + object_rack_reservation: str | RackReservation | pb.RackReservation | None = None, + object_rack_role: str | RackRole | pb.RackRole | None = None, + object_rack_type: str | RackType | pb.RackType | None = None, + object_rear_port: str | RearPort | pb.RearPort | None = None, + object_region: str | Region | pb.Region | None = None, + object_role: str | Role | pb.Role | None = None, + object_route_target: str | RouteTarget | pb.RouteTarget | None = None, + object_service: str | Service | pb.Service | None = None, + object_site: str | Site | pb.Site | None = None, + object_site_group: str | SiteGroup | pb.SiteGroup | None = None, + object_tag: str | Tag | pb.Tag | None = None, + object_tenant: str | Tenant | pb.Tenant | None = None, + object_tenant_group: str | TenantGroup | pb.TenantGroup | None = None, + object_tunnel: str | Tunnel | pb.Tunnel | None = None, + object_tunnel_group: str | TunnelGroup | pb.TunnelGroup | None = None, + object_tunnel_termination: str | TunnelTermination | pb.TunnelTermination | None = None, + object_vlan: str | VLAN | pb.VLAN | None = None, + object_vlan_group: str | VLANGroup | pb.VLANGroup | None = None, + object_vlan_translation_policy: str | VLANTranslationPolicy | pb.VLANTranslationPolicy | None = None, + object_vlan_translation_rule: str | VLANTranslationRule | pb.VLANTranslationRule | None = None, + object_vm_interface: str | VMInterface | pb.VMInterface | None = None, + object_vrf: str | VRF | pb.VRF | None = None, + object_virtual_chassis: str | VirtualChassis | pb.VirtualChassis | None = None, + object_virtual_circuit: str | VirtualCircuit | pb.VirtualCircuit | None = None, + object_virtual_circuit_termination: str | VirtualCircuitTermination | pb.VirtualCircuitTermination | None = None, + object_virtual_circuit_type: str | VirtualCircuitType | pb.VirtualCircuitType | None = None, + object_virtual_device_context: str | VirtualDeviceContext | pb.VirtualDeviceContext | None = None, + object_virtual_disk: str | VirtualDisk | pb.VirtualDisk | None = None, + object_virtual_machine: str | VirtualMachine | pb.VirtualMachine | None = None, + object_wireless_lan: str | WirelessLAN | pb.WirelessLAN | None = None, + object_wireless_lan_group: str | WirelessLANGroup | pb.WirelessLANGroup | None = None, + object_wireless_link: str | WirelessLink | pb.WirelessLink | None = None, + ) -> pb.GenericObject: + """Create a new GenericObject.""" + object_asn = convert_to_protobuf(object_asn, pb.ASN) + object_asn_range = convert_to_protobuf(object_asn_range, pb.ASNRange) + object_aggregate = convert_to_protobuf(object_aggregate, pb.Aggregate) + object_cable = convert_to_protobuf(object_cable, pb.Cable) + object_cable_path = convert_to_protobuf(object_cable_path, pb.CablePath) + object_cable_termination = convert_to_protobuf(object_cable_termination, pb.CableTermination) + object_circuit = convert_to_protobuf(object_circuit, pb.Circuit) + object_circuit_group = convert_to_protobuf(object_circuit_group, pb.CircuitGroup) + object_circuit_group_assignment = convert_to_protobuf(object_circuit_group_assignment, pb.CircuitGroupAssignment) + object_circuit_termination = convert_to_protobuf(object_circuit_termination, pb.CircuitTermination) + object_circuit_type = convert_to_protobuf(object_circuit_type, pb.CircuitType) + object_cluster = convert_to_protobuf(object_cluster, pb.Cluster) + object_cluster_group = convert_to_protobuf(object_cluster_group, pb.ClusterGroup) + object_cluster_type = convert_to_protobuf(object_cluster_type, pb.ClusterType) + object_console_port = convert_to_protobuf(object_console_port, pb.ConsolePort) + object_console_server_port = convert_to_protobuf(object_console_server_port, pb.ConsoleServerPort) + object_contact = convert_to_protobuf(object_contact, pb.Contact) + object_contact_assignment = convert_to_protobuf(object_contact_assignment, pb.ContactAssignment) + object_contact_group = convert_to_protobuf(object_contact_group, pb.ContactGroup) + object_contact_role = convert_to_protobuf(object_contact_role, pb.ContactRole) + object_device = convert_to_protobuf(object_device, pb.Device) + object_device_bay = convert_to_protobuf(object_device_bay, pb.DeviceBay) + object_device_role = convert_to_protobuf(object_device_role, pb.DeviceRole) + object_device_type = convert_to_protobuf(object_device_type, pb.DeviceType) + object_fhrp_group = convert_to_protobuf(object_fhrp_group, pb.FHRPGroup) + object_fhrp_group_assignment = convert_to_protobuf(object_fhrp_group_assignment, pb.FHRPGroupAssignment) + object_front_port = convert_to_protobuf(object_front_port, pb.FrontPort) + object_ike_policy = convert_to_protobuf(object_ike_policy, pb.IKEPolicy) + object_ike_proposal = convert_to_protobuf(object_ike_proposal, pb.IKEProposal) + object_ip_address = convert_to_protobuf(object_ip_address, pb.IPAddress) + object_ip_range = convert_to_protobuf(object_ip_range, pb.IPRange) + object_ip_sec_policy = convert_to_protobuf(object_ip_sec_policy, pb.IPSecPolicy) + object_ip_sec_profile = convert_to_protobuf(object_ip_sec_profile, pb.IPSecProfile) + object_ip_sec_proposal = convert_to_protobuf(object_ip_sec_proposal, pb.IPSecProposal) + object_interface = convert_to_protobuf(object_interface, pb.Interface) + object_inventory_item = convert_to_protobuf(object_inventory_item, pb.InventoryItem) + object_inventory_item_role = convert_to_protobuf(object_inventory_item_role, pb.InventoryItemRole) + object_l2vpn = convert_to_protobuf(object_l2vpn, pb.L2VPN) + object_l2vpn_termination = convert_to_protobuf(object_l2vpn_termination, pb.L2VPNTermination) + object_location = convert_to_protobuf(object_location, pb.Location) + object_mac_address = convert_to_protobuf(object_mac_address, pb.MACAddress) + object_manufacturer = convert_to_protobuf(object_manufacturer, pb.Manufacturer) + object_module = convert_to_protobuf(object_module, pb.Module) + object_module_bay = convert_to_protobuf(object_module_bay, pb.ModuleBay) + object_module_type = convert_to_protobuf(object_module_type, pb.ModuleType) + object_platform = convert_to_protobuf(object_platform, pb.Platform) + object_power_feed = convert_to_protobuf(object_power_feed, pb.PowerFeed) + object_power_outlet = convert_to_protobuf(object_power_outlet, pb.PowerOutlet) + object_power_panel = convert_to_protobuf(object_power_panel, pb.PowerPanel) + object_power_port = convert_to_protobuf(object_power_port, pb.PowerPort) + object_prefix = convert_to_protobuf(object_prefix, pb.Prefix) + object_provider = convert_to_protobuf(object_provider, pb.Provider) + object_provider_account = convert_to_protobuf(object_provider_account, pb.ProviderAccount) + object_provider_network = convert_to_protobuf(object_provider_network, pb.ProviderNetwork) + object_rir = convert_to_protobuf(object_rir, pb.RIR) + object_rack = convert_to_protobuf(object_rack, pb.Rack) + object_rack_reservation = convert_to_protobuf(object_rack_reservation, pb.RackReservation) + object_rack_role = convert_to_protobuf(object_rack_role, pb.RackRole) + object_rack_type = convert_to_protobuf(object_rack_type, pb.RackType) + object_rear_port = convert_to_protobuf(object_rear_port, pb.RearPort) + object_region = convert_to_protobuf(object_region, pb.Region) + object_role = convert_to_protobuf(object_role, pb.Role) + object_route_target = convert_to_protobuf(object_route_target, pb.RouteTarget) + object_service = convert_to_protobuf(object_service, pb.Service) + object_site = convert_to_protobuf(object_site, pb.Site) + object_site_group = convert_to_protobuf(object_site_group, pb.SiteGroup) + object_tag = convert_to_protobuf(object_tag, pb.Tag) + object_tenant = convert_to_protobuf(object_tenant, pb.Tenant) + object_tenant_group = convert_to_protobuf(object_tenant_group, pb.TenantGroup) + object_tunnel = convert_to_protobuf(object_tunnel, pb.Tunnel) + object_tunnel_group = convert_to_protobuf(object_tunnel_group, pb.TunnelGroup) + object_tunnel_termination = convert_to_protobuf(object_tunnel_termination, pb.TunnelTermination) + object_vlan = convert_to_protobuf(object_vlan, pb.VLAN) + object_vlan_group = convert_to_protobuf(object_vlan_group, pb.VLANGroup) + object_vlan_translation_policy = convert_to_protobuf(object_vlan_translation_policy, pb.VLANTranslationPolicy) + object_vlan_translation_rule = convert_to_protobuf(object_vlan_translation_rule, pb.VLANTranslationRule) + object_vm_interface = convert_to_protobuf(object_vm_interface, pb.VMInterface) + object_vrf = convert_to_protobuf(object_vrf, pb.VRF) + object_virtual_chassis = convert_to_protobuf(object_virtual_chassis, pb.VirtualChassis) + object_virtual_circuit = convert_to_protobuf(object_virtual_circuit, pb.VirtualCircuit) + object_virtual_circuit_termination = convert_to_protobuf(object_virtual_circuit_termination, pb.VirtualCircuitTermination) + object_virtual_circuit_type = convert_to_protobuf(object_virtual_circuit_type, pb.VirtualCircuitType) + object_virtual_device_context = convert_to_protobuf(object_virtual_device_context, pb.VirtualDeviceContext) + object_virtual_disk = convert_to_protobuf(object_virtual_disk, pb.VirtualDisk) + object_virtual_machine = convert_to_protobuf(object_virtual_machine, pb.VirtualMachine) + object_wireless_lan = convert_to_protobuf(object_wireless_lan, pb.WirelessLAN) + object_wireless_lan_group = convert_to_protobuf(object_wireless_lan_group, pb.WirelessLANGroup) + object_wireless_link = convert_to_protobuf(object_wireless_link, pb.WirelessLink) + return pb.GenericObject( + object_asn=object_asn, + object_asn_range=object_asn_range, + object_aggregate=object_aggregate, + object_cable=object_cable, + object_cable_path=object_cable_path, + object_cable_termination=object_cable_termination, + object_circuit=object_circuit, + object_circuit_group=object_circuit_group, + object_circuit_group_assignment=object_circuit_group_assignment, + object_circuit_termination=object_circuit_termination, + object_circuit_type=object_circuit_type, + object_cluster=object_cluster, + object_cluster_group=object_cluster_group, + object_cluster_type=object_cluster_type, + object_console_port=object_console_port, + object_console_server_port=object_console_server_port, + object_contact=object_contact, + object_contact_assignment=object_contact_assignment, + object_contact_group=object_contact_group, + object_contact_role=object_contact_role, + object_device=object_device, + object_device_bay=object_device_bay, + object_device_role=object_device_role, + object_device_type=object_device_type, + object_fhrp_group=object_fhrp_group, + object_fhrp_group_assignment=object_fhrp_group_assignment, + object_front_port=object_front_port, + object_ike_policy=object_ike_policy, + object_ike_proposal=object_ike_proposal, + object_ip_address=object_ip_address, + object_ip_range=object_ip_range, + object_ip_sec_policy=object_ip_sec_policy, + object_ip_sec_profile=object_ip_sec_profile, + object_ip_sec_proposal=object_ip_sec_proposal, + object_interface=object_interface, + object_inventory_item=object_inventory_item, + object_inventory_item_role=object_inventory_item_role, + object_l2vpn=object_l2vpn, + object_l2vpn_termination=object_l2vpn_termination, + object_location=object_location, + object_mac_address=object_mac_address, + object_manufacturer=object_manufacturer, + object_module=object_module, + object_module_bay=object_module_bay, + object_module_type=object_module_type, + object_platform=object_platform, + object_power_feed=object_power_feed, + object_power_outlet=object_power_outlet, + object_power_panel=object_power_panel, + object_power_port=object_power_port, + object_prefix=object_prefix, + object_provider=object_provider, + object_provider_account=object_provider_account, + object_provider_network=object_provider_network, + object_rir=object_rir, + object_rack=object_rack, + object_rack_reservation=object_rack_reservation, + object_rack_role=object_rack_role, + object_rack_type=object_rack_type, + object_rear_port=object_rear_port, + object_region=object_region, + object_role=object_role, + object_route_target=object_route_target, + object_service=object_service, + object_site=object_site, + object_site_group=object_site_group, + object_tag=object_tag, + object_tenant=object_tenant, + object_tenant_group=object_tenant_group, + object_tunnel=object_tunnel, + object_tunnel_group=object_tunnel_group, + object_tunnel_termination=object_tunnel_termination, + object_vlan=object_vlan, + object_vlan_group=object_vlan_group, + object_vlan_translation_policy=object_vlan_translation_policy, + object_vlan_translation_rule=object_vlan_translation_rule, + object_vm_interface=object_vm_interface, + object_vrf=object_vrf, + object_virtual_chassis=object_virtual_chassis, + object_virtual_circuit=object_virtual_circuit, + object_virtual_circuit_termination=object_virtual_circuit_termination, + object_virtual_circuit_type=object_virtual_circuit_type, + object_virtual_device_context=object_virtual_device_context, + object_virtual_disk=object_virtual_disk, + object_virtual_machine=object_virtual_machine, + object_wireless_lan=object_wireless_lan, + object_wireless_lan_group=object_wireless_lan_group, + object_wireless_link=object_wireless_link, + ) + + +class IKEPolicy: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.IKEPolicy.""" + + def __new__( + cls, + name: str | None = None, + description: str | None = None, + version: int | None = None, + mode: str | None = None, + preshared_key: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + proposals: list[str | IKEProposal | pb.IKEProposal] | None = None, + ) -> pb.IKEPolicy: + """Create a new IKEPolicy.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + proposals = convert_to_protobuf_list(proposals, pb.IKEProposal) + return pb.IKEPolicy( + name=name, + description=description, + version=version, + mode=mode, + preshared_key=preshared_key, + comments=comments, + tags=tags, + custom_fields=custom_fields, + proposals=proposals, + ) + + +class IKEProposal: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.IKEProposal.""" + + def __new__( + cls, + name: str | None = None, + description: str | None = None, + authentication_method: str | None = None, + encryption_algorithm: str | None = None, + authentication_algorithm: str | None = None, + group: int | None = None, + sa_lifetime: int | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.IKEProposal: + """Create a new IKEProposal.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.IKEProposal( + name=name, + description=description, + authentication_method=authentication_method, + encryption_algorithm=encryption_algorithm, + authentication_algorithm=authentication_algorithm, + group=group, + sa_lifetime=sa_lifetime, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class IPAddress: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.IPAddress.""" + + def __new__( + cls, + address: str | None = None, + vrf: str | VRF | pb.VRF | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + status: str | None = None, + role: str | None = None, + assigned_object_fhrp_group: str | FHRPGroup | pb.FHRPGroup | None = None, + assigned_object_interface: str | Interface | pb.Interface | None = None, + assigned_object_vm_interface: str | VMInterface | pb.VMInterface | None = None, + nat_inside: str | IPAddress | pb.IPAddress | None = None, + dns_name: str | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + # shortcuts + manufacturer: str | Manufacturer | pb.Manufacturer = None, + device_type: str | DeviceType | pb.DeviceType = None, + platform: str | Platform | pb.Platform = None, + site: str | Site | pb.Site = None, + device_role: str | DeviceRole | pb.DeviceRole = None, + device: str | Device | pb.Device = None, + ) -> pb.IPAddress: + """Create a new IPAddress.""" + vrf = convert_to_protobuf(vrf, pb.VRF) + tenant = convert_to_protobuf(tenant, pb.Tenant) + assigned_object_fhrp_group = convert_to_protobuf(assigned_object_fhrp_group, pb.FHRPGroup) + assigned_object_interface = convert_to_protobuf(assigned_object_interface, pb.Interface) + assigned_object_vm_interface = convert_to_protobuf(assigned_object_vm_interface, pb.VMInterface) + nat_inside = convert_to_protobuf(nat_inside, pb.IPAddress) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + + # shortcut types (not directly used) + manufacturer = convert_to_protobuf(manufacturer, pb.Manufacturer) + device_type = convert_to_protobuf(device_type, pb.DeviceType) + platform = convert_to_protobuf(platform, pb.Platform) + site = convert_to_protobuf(site, pb.Site) + device_role = convert_to_protobuf(device_role, pb.DeviceRole) + device = convert_to_protobuf(device, pb.Device) + + # apply shortcuts + if manufacturer is not None: + if platform is not None and not platform.HasField('manufacturer'): + platform.manufacturer.CopyFrom(manufacturer) + if device_type is not None and not device_type.HasField('manufacturer'): + device_type.manufacturer.CopyFrom(manufacturer) + if device_type is not None: + if device is not None and not device.HasField('device_type'): + device.device_type.CopyFrom(device_type) + if platform is not None: + if device is not None and not device.HasField('platform'): + device.platform.CopyFrom(platform) + if site is not None: + if device is not None and not device.HasField('site'): + device.site.CopyFrom(site) + if device_role is not None: + if device is not None and not device.HasField('role'): + device.role.CopyFrom(device_role) + if device is not None: + if assigned_object_interface is not None and not assigned_object_interface.HasField('device'): + assigned_object_interface.device.CopyFrom(device) + if assigned_object_vm_interface is not None and not assigned_object_vm_interface.HasField('device'): + assigned_object_vm_interface.device.CopyFrom(device) + return pb.IPAddress( + address=address, + vrf=vrf, + tenant=tenant, + status=status, + role=role, + assigned_object_fhrp_group=assigned_object_fhrp_group, + assigned_object_interface=assigned_object_interface, + assigned_object_vm_interface=assigned_object_vm_interface, + nat_inside=nat_inside, + dns_name=dns_name, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class IPRange: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.IPRange.""" + + def __new__( + cls, + start_address: str | None = None, + end_address: str | None = None, + vrf: str | VRF | pb.VRF | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + status: str | None = None, + role: str | Role | pb.Role | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + mark_utilized: bool | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.IPRange: + """Create a new IPRange.""" + vrf = convert_to_protobuf(vrf, pb.VRF) + tenant = convert_to_protobuf(tenant, pb.Tenant) + role = convert_to_protobuf(role, pb.Role) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.IPRange( + start_address=start_address, + end_address=end_address, + vrf=vrf, + tenant=tenant, + status=status, + role=role, + description=description, + comments=comments, + tags=tags, + mark_utilized=mark_utilized, + custom_fields=custom_fields, + ) + + +class IPSecPolicy: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.IPSecPolicy.""" + + def __new__( + cls, + name: str | None = None, + description: str | None = None, + pfs_group: int | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + proposals: list[str | IPSecProposal | pb.IPSecProposal] | None = None, + ) -> pb.IPSecPolicy: + """Create a new IPSecPolicy.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + proposals = convert_to_protobuf_list(proposals, pb.IPSecProposal) + return pb.IPSecPolicy( + name=name, + description=description, + pfs_group=pfs_group, + comments=comments, + tags=tags, + custom_fields=custom_fields, + proposals=proposals, + ) + + +class IPSecProfile: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.IPSecProfile.""" + + def __new__( + cls, + name: str | None = None, + description: str | None = None, + mode: str | None = None, + ike_policy: str | IKEPolicy | pb.IKEPolicy | None = None, + ipsec_policy: str | IPSecPolicy | pb.IPSecPolicy | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.IPSecProfile: + """Create a new IPSecProfile.""" + ike_policy = convert_to_protobuf(ike_policy, pb.IKEPolicy) + ipsec_policy = convert_to_protobuf(ipsec_policy, pb.IPSecPolicy) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.IPSecProfile( + name=name, + description=description, + mode=mode, + ike_policy=ike_policy, + ipsec_policy=ipsec_policy, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class IPSecProposal: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.IPSecProposal.""" + + def __new__( + cls, + name: str | None = None, + description: str | None = None, + encryption_algorithm: str | None = None, + authentication_algorithm: str | None = None, + sa_lifetime_seconds: int | None = None, + sa_lifetime_data: int | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.IPSecProposal: + """Create a new IPSecProposal.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.IPSecProposal( + name=name, + description=description, + encryption_algorithm=encryption_algorithm, + authentication_algorithm=authentication_algorithm, + sa_lifetime_seconds=sa_lifetime_seconds, + sa_lifetime_data=sa_lifetime_data, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class Interface: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Interface.""" + + def __new__( + cls, + device: str | Device | pb.Device | None = None, + module: str | Module | pb.Module | None = None, + name: str | None = None, + label: str | None = None, + type: str | None = None, + enabled: bool | None = None, + parent: str | Interface | pb.Interface | None = None, + bridge: str | Interface | pb.Interface | None = None, + lag: str | Interface | pb.Interface | None = None, + mtu: int | None = None, + primary_mac_address: str | MACAddress | pb.MACAddress | None = None, + speed: int | None = None, + duplex: str | None = None, + wwn: str | None = None, + mgmt_only: bool | None = None, + description: str | None = None, + mode: str | None = None, + rf_role: str | None = None, + rf_channel: str | None = None, + poe_mode: str | None = None, + poe_type: str | None = None, + rf_channel_frequency: float | None = None, + rf_channel_width: float | None = None, + tx_power: int | None = None, + untagged_vlan: str | VLAN | pb.VLAN | None = None, + qinq_svlan: str | VLAN | pb.VLAN | None = None, + vlan_translation_policy: str | VLANTranslationPolicy | pb.VLANTranslationPolicy | None = None, + mark_connected: bool | None = None, + vrf: str | VRF | pb.VRF | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + vdcs: list[str | VirtualDeviceContext | pb.VirtualDeviceContext] | None = None, + tagged_vlans: list[str | VLAN | pb.VLAN] | None = None, + wireless_lans: list[str | WirelessLAN | pb.WirelessLAN] | None = None, + # shortcuts + manufacturer: str | Manufacturer | pb.Manufacturer = None, + device_type: str | DeviceType | pb.DeviceType = None, + platform: str | Platform | pb.Platform = None, + site: str | Site | pb.Site = None, + role: str | DeviceRole | pb.DeviceRole = None, + ) -> pb.Interface: + """Create a new Interface.""" + device = convert_to_protobuf(device, pb.Device) + module = convert_to_protobuf(module, pb.Module) + parent = convert_to_protobuf(parent, pb.Interface) + bridge = convert_to_protobuf(bridge, pb.Interface) + lag = convert_to_protobuf(lag, pb.Interface) + primary_mac_address = convert_to_protobuf(primary_mac_address, pb.MACAddress) + untagged_vlan = convert_to_protobuf(untagged_vlan, pb.VLAN) + qinq_svlan = convert_to_protobuf(qinq_svlan, pb.VLAN) + vlan_translation_policy = convert_to_protobuf(vlan_translation_policy, pb.VLANTranslationPolicy) + vrf = convert_to_protobuf(vrf, pb.VRF) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + vdcs = convert_to_protobuf_list(vdcs, pb.VirtualDeviceContext) + tagged_vlans = convert_to_protobuf_list(tagged_vlans, pb.VLAN) + wireless_lans = convert_to_protobuf_list(wireless_lans, pb.WirelessLAN) + + # shortcut types (not directly used) + manufacturer = convert_to_protobuf(manufacturer, pb.Manufacturer) + device_type = convert_to_protobuf(device_type, pb.DeviceType) + platform = convert_to_protobuf(platform, pb.Platform) + site = convert_to_protobuf(site, pb.Site) + role = convert_to_protobuf(role, pb.DeviceRole) + + # apply shortcuts + if manufacturer is not None: + if platform is not None and not platform.HasField('manufacturer'): + platform.manufacturer.CopyFrom(manufacturer) + if device_type is not None and not device_type.HasField('manufacturer'): + device_type.manufacturer.CopyFrom(manufacturer) + if device_type is not None: + if device is not None and not device.HasField('device_type'): + device.device_type.CopyFrom(device_type) + if platform is not None: + if device is not None and not device.HasField('platform'): + device.platform.CopyFrom(platform) + if site is not None: + if device is not None and not device.HasField('site'): + device.site.CopyFrom(site) + if role is not None: + if device is not None and not device.HasField('role'): + device.role.CopyFrom(role) + return pb.Interface( + device=device, + module=module, + name=name, + label=label, + type=type, + enabled=enabled, + parent=parent, + bridge=bridge, + lag=lag, + mtu=mtu, + primary_mac_address=primary_mac_address, + speed=speed, + duplex=duplex, + wwn=wwn, + mgmt_only=mgmt_only, + description=description, + mode=mode, + rf_role=rf_role, + rf_channel=rf_channel, + poe_mode=poe_mode, + poe_type=poe_type, + rf_channel_frequency=rf_channel_frequency, + rf_channel_width=rf_channel_width, + tx_power=tx_power, + untagged_vlan=untagged_vlan, + qinq_svlan=qinq_svlan, + vlan_translation_policy=vlan_translation_policy, + mark_connected=mark_connected, + vrf=vrf, + tags=tags, + custom_fields=custom_fields, + vdcs=vdcs, + tagged_vlans=tagged_vlans, + wireless_lans=wireless_lans, + ) + + +class InventoryItem: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.InventoryItem.""" + + def __new__( + cls, + device: str | Device | pb.Device | None = None, + parent: str | InventoryItem | pb.InventoryItem | None = None, + name: str | None = None, + label: str | None = None, + status: str | None = None, + role: str | InventoryItemRole | pb.InventoryItemRole | None = None, + manufacturer: str | Manufacturer | pb.Manufacturer | None = None, + part_id: str | None = None, + serial: str | None = None, + asset_tag: str | None = None, + discovered: bool | None = None, + description: str | None = None, + component_console_port: str | ConsolePort | pb.ConsolePort | None = None, + component_console_server_port: str | ConsoleServerPort | pb.ConsoleServerPort | None = None, + component_front_port: str | FrontPort | pb.FrontPort | None = None, + component_interface: str | Interface | pb.Interface | None = None, + component_power_outlet: str | PowerOutlet | pb.PowerOutlet | None = None, + component_power_port: str | PowerPort | pb.PowerPort | None = None, + component_rear_port: str | RearPort | pb.RearPort | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.InventoryItem: + """Create a new InventoryItem.""" + device = convert_to_protobuf(device, pb.Device) + parent = convert_to_protobuf(parent, pb.InventoryItem) + role = convert_to_protobuf(role, pb.InventoryItemRole) + manufacturer = convert_to_protobuf(manufacturer, pb.Manufacturer) + component_console_port = convert_to_protobuf(component_console_port, pb.ConsolePort) + component_console_server_port = convert_to_protobuf(component_console_server_port, pb.ConsoleServerPort) + component_front_port = convert_to_protobuf(component_front_port, pb.FrontPort) + component_interface = convert_to_protobuf(component_interface, pb.Interface) + component_power_outlet = convert_to_protobuf(component_power_outlet, pb.PowerOutlet) + component_power_port = convert_to_protobuf(component_power_port, pb.PowerPort) + component_rear_port = convert_to_protobuf(component_rear_port, pb.RearPort) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.InventoryItem( + device=device, + parent=parent, + name=name, + label=label, + status=status, + role=role, + manufacturer=manufacturer, + part_id=part_id, + serial=serial, + asset_tag=asset_tag, + discovered=discovered, + description=description, + component_console_port=component_console_port, + component_console_server_port=component_console_server_port, + component_front_port=component_front_port, + component_interface=component_interface, + component_power_outlet=component_power_outlet, + component_power_port=component_power_port, + component_rear_port=component_rear_port, + tags=tags, + custom_fields=custom_fields, + ) + + +class InventoryItemRole: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.InventoryItemRole.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + color: str | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.InventoryItemRole: + """Create a new InventoryItemRole.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.InventoryItemRole( + name=name, + slug=slug, + color=color, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class L2VPN: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.L2VPN.""" + + def __new__( + cls, + identifier: int | None = None, + name: str | None = None, + slug: str | None = None, + type: str | None = None, + description: str | None = None, + comments: str | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + import_targets: list[str | RouteTarget | pb.RouteTarget] | None = None, + export_targets: list[str | RouteTarget | pb.RouteTarget] | None = None, + ) -> pb.L2VPN: + """Create a new L2VPN.""" + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + import_targets = convert_to_protobuf_list(import_targets, pb.RouteTarget) + export_targets = convert_to_protobuf_list(export_targets, pb.RouteTarget) + return pb.L2VPN( + identifier=identifier, + name=name, + slug=slug, + type=type, + description=description, + comments=comments, + tenant=tenant, + tags=tags, + custom_fields=custom_fields, + import_targets=import_targets, + export_targets=export_targets, + ) + + +class L2VPNTermination: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.L2VPNTermination.""" + + def __new__( + cls, + l2vpn: str | L2VPN | pb.L2VPN | None = None, + assigned_object_interface: str | Interface | pb.Interface | None = None, + assigned_object_vlan: str | VLAN | pb.VLAN | None = None, + assigned_object_vm_interface: str | VMInterface | pb.VMInterface | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.L2VPNTermination: + """Create a new L2VPNTermination.""" + l2vpn = convert_to_protobuf(l2vpn, pb.L2VPN) + assigned_object_interface = convert_to_protobuf(assigned_object_interface, pb.Interface) + assigned_object_vlan = convert_to_protobuf(assigned_object_vlan, pb.VLAN) + assigned_object_vm_interface = convert_to_protobuf(assigned_object_vm_interface, pb.VMInterface) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.L2VPNTermination( + l2vpn=l2vpn, + assigned_object_interface=assigned_object_interface, + assigned_object_vlan=assigned_object_vlan, + assigned_object_vm_interface=assigned_object_vm_interface, + tags=tags, + custom_fields=custom_fields, + ) + + +class Location: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Location.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + site: str | Site | pb.Site | None = None, + parent: str | Location | pb.Location | None = None, + status: str | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + facility: str | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.Location: + """Create a new Location.""" + site = convert_to_protobuf(site, pb.Site) + parent = convert_to_protobuf(parent, pb.Location) + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.Location( + name=name, + slug=slug, + site=site, + parent=parent, + status=status, + tenant=tenant, + facility=facility, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class MACAddress: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.MACAddress.""" + + def __new__( + cls, + mac_address: str | None = None, + assigned_object_interface: str | Interface | pb.Interface | None = None, + assigned_object_vm_interface: str | VMInterface | pb.VMInterface | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.MACAddress: + """Create a new MACAddress.""" + assigned_object_interface = convert_to_protobuf(assigned_object_interface, pb.Interface) + assigned_object_vm_interface = convert_to_protobuf(assigned_object_vm_interface, pb.VMInterface) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.MACAddress( + mac_address=mac_address, + assigned_object_interface=assigned_object_interface, + assigned_object_vm_interface=assigned_object_vm_interface, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class Manufacturer: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Manufacturer.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.Manufacturer: + """Create a new Manufacturer.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.Manufacturer( + name=name, + slug=slug, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class Module: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Module.""" + + def __new__( + cls, + device: str | Device | pb.Device | None = None, + module_bay: str | ModuleBay | pb.ModuleBay | None = None, + module_type: str | ModuleType | pb.ModuleType | None = None, + status: str | None = None, + serial: str | None = None, + asset_tag: str | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.Module: + """Create a new Module.""" + device = convert_to_protobuf(device, pb.Device) + module_bay = convert_to_protobuf(module_bay, pb.ModuleBay) + module_type = convert_to_protobuf(module_type, pb.ModuleType) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.Module( + device=device, + module_bay=module_bay, + module_type=module_type, + status=status, + serial=serial, + asset_tag=asset_tag, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class ModuleBay: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.ModuleBay.""" + + def __new__( + cls, + device: str | Device | pb.Device | None = None, + module: str | Module | pb.Module | None = None, + name: str | None = None, + installed_module: str | Module | pb.Module | None = None, + label: str | None = None, + position: str | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.ModuleBay: + """Create a new ModuleBay.""" + device = convert_to_protobuf(device, pb.Device) + module = convert_to_protobuf(module, pb.Module) + installed_module = convert_to_protobuf(installed_module, pb.Module) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.ModuleBay( + device=device, + module=module, + name=name, + installed_module=installed_module, + label=label, + position=position, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class ModuleType: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.ModuleType.""" + + def __new__( + cls, + manufacturer: str | Manufacturer | pb.Manufacturer | None = None, + model: str | None = None, + part_number: str | None = None, + airflow: str | None = None, + weight: float | None = None, + weight_unit: str | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.ModuleType: + """Create a new ModuleType.""" + manufacturer = convert_to_protobuf(manufacturer, pb.Manufacturer) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.ModuleType( + manufacturer=manufacturer, + model=model, + part_number=part_number, + airflow=airflow, + weight=weight, + weight_unit=weight_unit, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class Platform: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Platform.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + manufacturer: str | Manufacturer | pb.Manufacturer | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.Platform: + """Create a new Platform.""" + manufacturer = convert_to_protobuf(manufacturer, pb.Manufacturer) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.Platform( + name=name, + slug=slug, + manufacturer=manufacturer, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class PowerFeed: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.PowerFeed.""" + + def __new__( + cls, + power_panel: str | PowerPanel | pb.PowerPanel | None = None, + rack: str | Rack | pb.Rack | None = None, + name: str | None = None, + status: str | None = None, + type: str | None = None, + supply: str | None = None, + phase: str | None = None, + voltage: int | None = None, + amperage: int | None = None, + max_utilization: int | None = None, + mark_connected: bool | None = None, + description: str | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.PowerFeed: + """Create a new PowerFeed.""" + power_panel = convert_to_protobuf(power_panel, pb.PowerPanel) + rack = convert_to_protobuf(rack, pb.Rack) + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.PowerFeed( + power_panel=power_panel, + rack=rack, + name=name, + status=status, + type=type, + supply=supply, + phase=phase, + voltage=voltage, + amperage=amperage, + max_utilization=max_utilization, + mark_connected=mark_connected, + description=description, + tenant=tenant, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class PowerOutlet: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.PowerOutlet.""" + + def __new__( + cls, + device: str | Device | pb.Device | None = None, + module: str | Module | pb.Module | None = None, + name: str | None = None, + label: str | None = None, + type: str | None = None, + color: str | None = None, + power_port: str | PowerPort | pb.PowerPort | None = None, + feed_leg: str | None = None, + description: str | None = None, + mark_connected: bool | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.PowerOutlet: + """Create a new PowerOutlet.""" + device = convert_to_protobuf(device, pb.Device) + module = convert_to_protobuf(module, pb.Module) + power_port = convert_to_protobuf(power_port, pb.PowerPort) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.PowerOutlet( + device=device, + module=module, + name=name, + label=label, + type=type, + color=color, + power_port=power_port, + feed_leg=feed_leg, + description=description, + mark_connected=mark_connected, + tags=tags, + custom_fields=custom_fields, + ) + + +class PowerPanel: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.PowerPanel.""" + + def __new__( + cls, + site: str | Site | pb.Site | None = None, + location: str | Location | pb.Location | None = None, + name: str | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.PowerPanel: + """Create a new PowerPanel.""" + site = convert_to_protobuf(site, pb.Site) + location = convert_to_protobuf(location, pb.Location) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.PowerPanel( + site=site, + location=location, + name=name, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class PowerPort: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.PowerPort.""" + + def __new__( + cls, + device: str | Device | pb.Device | None = None, + module: str | Module | pb.Module | None = None, + name: str | None = None, + label: str | None = None, + type: str | None = None, + maximum_draw: int | None = None, + allocated_draw: int | None = None, + description: str | None = None, + mark_connected: bool | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.PowerPort: + """Create a new PowerPort.""" + device = convert_to_protobuf(device, pb.Device) + module = convert_to_protobuf(module, pb.Module) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.PowerPort( + device=device, + module=module, + name=name, + label=label, + type=type, + maximum_draw=maximum_draw, + allocated_draw=allocated_draw, + description=description, + mark_connected=mark_connected, + tags=tags, + custom_fields=custom_fields, + ) + + +class Prefix: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Prefix.""" + + def __new__( + cls, + prefix: str | None = None, + vrf: str | VRF | pb.VRF | None = None, + scope_location: str | Location | pb.Location | None = None, + scope_region: str | Region | pb.Region | None = None, + scope_site: str | Site | pb.Site | None = None, + scope_site_group: str | SiteGroup | pb.SiteGroup | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + vlan: str | VLAN | pb.VLAN | None = None, + status: str | None = None, + role: str | Role | pb.Role | None = None, + is_pool: bool | None = None, + mark_utilized: bool | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.Prefix: + """Create a new Prefix.""" + vrf = convert_to_protobuf(vrf, pb.VRF) + scope_location = convert_to_protobuf(scope_location, pb.Location) + scope_region = convert_to_protobuf(scope_region, pb.Region) + scope_site = convert_to_protobuf(scope_site, pb.Site) + scope_site_group = convert_to_protobuf(scope_site_group, pb.SiteGroup) + tenant = convert_to_protobuf(tenant, pb.Tenant) + vlan = convert_to_protobuf(vlan, pb.VLAN) + role = convert_to_protobuf(role, pb.Role) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.Prefix( + prefix=prefix, + vrf=vrf, + scope_location=scope_location, + scope_region=scope_region, + scope_site=scope_site, + scope_site_group=scope_site_group, + tenant=tenant, + vlan=vlan, + status=status, + role=role, + is_pool=is_pool, + mark_utilized=mark_utilized, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class Provider: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Provider.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + accounts: list[str | ProviderAccount | pb.ProviderAccount] | None = None, + asns: list[str | ASN | pb.ASN] | None = None, + ) -> pb.Provider: + """Create a new Provider.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + accounts = convert_to_protobuf_list(accounts, pb.ProviderAccount) + asns = convert_to_protobuf_list(asns, pb.ASN) + return pb.Provider( + name=name, + slug=slug, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + accounts=accounts, + asns=asns, + ) + + +class ProviderAccount: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.ProviderAccount.""" + + def __new__( + cls, + provider: str | Provider | pb.Provider | None = None, + name: str | None = None, + account: str | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.ProviderAccount: + """Create a new ProviderAccount.""" + provider = convert_to_protobuf(provider, pb.Provider) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.ProviderAccount( + provider=provider, + name=name, + account=account, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class ProviderNetwork: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.ProviderNetwork.""" + + def __new__( + cls, + provider: str | Provider | pb.Provider | None = None, + name: str | None = None, + service_id: str | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.ProviderNetwork: + """Create a new ProviderNetwork.""" + provider = convert_to_protobuf(provider, pb.Provider) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.ProviderNetwork( + provider=provider, + name=name, + service_id=service_id, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class RIR: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.RIR.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + is_private: bool | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.RIR: + """Create a new RIR.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.RIR( + name=name, + slug=slug, + is_private=is_private, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class Rack: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Rack.""" + + def __new__( + cls, + name: str | None = None, + facility_id: str | None = None, + site: str | Site | pb.Site | None = None, + location: str | Location | pb.Location | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + status: str | None = None, + role: str | RackRole | pb.RackRole | None = None, + serial: str | None = None, + asset_tag: str | None = None, + rack_type: str | RackType | pb.RackType | None = None, + form_factor: str | None = None, + width: int | None = None, + u_height: int | None = None, + starting_unit: int | None = None, + weight: float | None = None, + max_weight: int | None = None, + weight_unit: str | None = None, + desc_units: bool | None = None, + outer_width: int | None = None, + outer_depth: int | None = None, + outer_unit: str | None = None, + mounting_depth: int | None = None, + airflow: str | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.Rack: + """Create a new Rack.""" + site = convert_to_protobuf(site, pb.Site) + location = convert_to_protobuf(location, pb.Location) + tenant = convert_to_protobuf(tenant, pb.Tenant) + role = convert_to_protobuf(role, pb.RackRole) + rack_type = convert_to_protobuf(rack_type, pb.RackType) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.Rack( + name=name, + facility_id=facility_id, + site=site, + location=location, + tenant=tenant, + status=status, + role=role, + serial=serial, + asset_tag=asset_tag, + rack_type=rack_type, + form_factor=form_factor, + width=width, + u_height=u_height, + starting_unit=starting_unit, + weight=weight, + max_weight=max_weight, + weight_unit=weight_unit, + desc_units=desc_units, + outer_width=outer_width, + outer_depth=outer_depth, + outer_unit=outer_unit, + mounting_depth=mounting_depth, + airflow=airflow, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class RackReservation: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.RackReservation.""" + + def __new__( + cls, + rack: str | Rack | pb.Rack | None = None, + units: list[int] | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.RackReservation: + """Create a new RackReservation.""" + rack = convert_to_protobuf(rack, pb.Rack) + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.RackReservation( + rack=rack, + units=units, + tenant=tenant, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class RackRole: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.RackRole.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + color: str | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.RackRole: + """Create a new RackRole.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.RackRole( + name=name, + slug=slug, + color=color, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class RackType: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.RackType.""" + + def __new__( + cls, + manufacturer: str | Manufacturer | pb.Manufacturer | None = None, + model: str | None = None, + slug: str | None = None, + description: str | None = None, + form_factor: str | None = None, + width: int | None = None, + u_height: int | None = None, + starting_unit: int | None = None, + desc_units: bool | None = None, + outer_width: int | None = None, + outer_depth: int | None = None, + outer_unit: str | None = None, + weight: float | None = None, + max_weight: int | None = None, + weight_unit: str | None = None, + mounting_depth: int | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.RackType: + """Create a new RackType.""" + manufacturer = convert_to_protobuf(manufacturer, pb.Manufacturer) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.RackType( + manufacturer=manufacturer, + model=model, + slug=slug, + description=description, + form_factor=form_factor, + width=width, + u_height=u_height, + starting_unit=starting_unit, + desc_units=desc_units, + outer_width=outer_width, + outer_depth=outer_depth, + outer_unit=outer_unit, + weight=weight, + max_weight=max_weight, + weight_unit=weight_unit, + mounting_depth=mounting_depth, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class RearPort: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.RearPort.""" + + def __new__( + cls, + device: str | Device | pb.Device | None = None, + module: str | Module | pb.Module | None = None, + name: str | None = None, + label: str | None = None, + type: str | None = None, + color: str | None = None, + positions: int | None = None, + description: str | None = None, + mark_connected: bool | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.RearPort: + """Create a new RearPort.""" + device = convert_to_protobuf(device, pb.Device) + module = convert_to_protobuf(module, pb.Module) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.RearPort( + device=device, + module=module, + name=name, + label=label, + type=type, + color=color, + positions=positions, + description=description, + mark_connected=mark_connected, + tags=tags, + custom_fields=custom_fields, + ) + + +class Region: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Region.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + parent: str | Region | pb.Region | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.Region: + """Create a new Region.""" + parent = convert_to_protobuf(parent, pb.Region) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.Region( + name=name, + slug=slug, + parent=parent, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class Role: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Role.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + weight: int | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.Role: + """Create a new Role.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.Role( + name=name, + slug=slug, + weight=weight, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class RouteTarget: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.RouteTarget.""" + + def __new__( + cls, + name: str | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.RouteTarget: + """Create a new RouteTarget.""" + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.RouteTarget( + name=name, + tenant=tenant, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class Service: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Service.""" + + def __new__( + cls, + device: str | Device | pb.Device | None = None, + virtual_machine: str | VirtualMachine | pb.VirtualMachine | None = None, + name: str | None = None, + protocol: str | None = None, + ports: list[int] | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ipaddresses: list[str | IPAddress | pb.IPAddress] | None = None, + ) -> pb.Service: + """Create a new Service.""" + device = convert_to_protobuf(device, pb.Device) + virtual_machine = convert_to_protobuf(virtual_machine, pb.VirtualMachine) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + ipaddresses = convert_to_protobuf_list(ipaddresses, pb.IPAddress) + return pb.Service( + device=device, + virtual_machine=virtual_machine, + name=name, + protocol=protocol, + ports=ports, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ipaddresses=ipaddresses, + ) + + +class Site: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Site.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + status: str | None = None, + region: str | Region | pb.Region | None = None, + group: str | SiteGroup | pb.SiteGroup | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + facility: str | None = None, + time_zone: str | None = None, + description: str | None = None, + physical_address: str | None = None, + shipping_address: str | None = None, + latitude: float | None = None, + longitude: float | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + asns: list[str | ASN | pb.ASN] | None = None, + ) -> pb.Site: + """Create a new Site.""" + region = convert_to_protobuf(region, pb.Region) + group = convert_to_protobuf(group, pb.SiteGroup) + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + asns = convert_to_protobuf_list(asns, pb.ASN) + return pb.Site( + name=name, + slug=slug, + status=status, + region=region, + group=group, + tenant=tenant, + facility=facility, + time_zone=time_zone, + description=description, + physical_address=physical_address, + shipping_address=shipping_address, + latitude=latitude, + longitude=longitude, + comments=comments, + tags=tags, + custom_fields=custom_fields, + asns=asns, + ) + + +class SiteGroup: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.SiteGroup.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + parent: str | SiteGroup | pb.SiteGroup | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.SiteGroup: + """Create a new SiteGroup.""" + parent = convert_to_protobuf(parent, pb.SiteGroup) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.SiteGroup( + name=name, + slug=slug, + parent=parent, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class Tag: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Tag.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + color: str | None = None, + ) -> pb.Tag: + """Create a new Tag.""" + return pb.Tag( + name=name, + slug=slug, + color=color, + ) + + +class Tenant: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Tenant.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + group: str | TenantGroup | pb.TenantGroup | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.Tenant: + """Create a new Tenant.""" + group = convert_to_protobuf(group, pb.TenantGroup) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.Tenant( + name=name, + slug=slug, + group=group, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) + + +class TenantGroup: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.TenantGroup.""" + + def __new__( + cls, + name: str | None = None, + slug: str | None = None, + parent: str | TenantGroup | pb.TenantGroup | None = None, + description: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.TenantGroup: + """Create a new TenantGroup.""" + parent = convert_to_protobuf(parent, pb.TenantGroup) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.TenantGroup( + name=name, + slug=slug, + parent=parent, + description=description, + tags=tags, + custom_fields=custom_fields, + ) + + +class Tunnel: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.Tunnel.""" + + def __new__( + cls, + name: str | None = None, + status: str | None = None, + group: str | TunnelGroup | pb.TunnelGroup | None = None, + encapsulation: str | None = None, + ipsec_profile: str | IPSecProfile | pb.IPSecProfile | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + tunnel_id: int | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.Tunnel: + """Create a new Tunnel.""" + group = convert_to_protobuf(group, pb.TunnelGroup) + ipsec_profile = convert_to_protobuf(ipsec_profile, pb.IPSecProfile) + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.Tunnel( + name=name, + status=status, + group=group, + encapsulation=encapsulation, + ipsec_profile=ipsec_profile, + tenant=tenant, + tunnel_id=tunnel_id, description=description, + comments=comments, tags=tags, + custom_fields=custom_fields, ) -class Role: - """Role message wrapper.""" +class TunnelGroup: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.TunnelGroup.""" def __new__( cls, name: str | None = None, slug: str | None = None, - color: str | None = None, description: str | None = None, - tags: list[str | Tag | TagPb] | None = None, - ) -> RolePb: - """Create a new Role protobuf message.""" - if isinstance(tags, list) and all(isinstance(t, str) for t in tags): - tags = [TagPb(name=tag) for tag in tags] - - return RolePb( + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.TunnelGroup: + """Create a new TunnelGroup.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.TunnelGroup( name=name, slug=slug, - color=color, description=description, tags=tags, + custom_fields=custom_fields, ) -class DeviceType: - """DeviceType message wrapper.""" +class TunnelTermination: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.TunnelTermination.""" def __new__( cls, - model: str | None = None, - slug: str | None = None, - manufacturer: str | Manufacturer | ManufacturerPb | None = None, - description: str | None = None, - comments: str | None = None, - part_number: str | None = None, - tags: list[str | Tag | TagPb] | None = None, - ) -> DeviceTypePb: - """Create a new DeviceType protobuf message.""" - manufacturer = convert_to_protobuf( - manufacturer, ManufacturerPb, name=manufacturer - ) - - if isinstance(tags, list) and all(isinstance(t, str) for t in tags): - tags = [TagPb(name=tag) for tag in tags] - - return DeviceTypePb( - model=model, - slug=slug, - manufacturer=manufacturer, - description=description, - comments=comments, - part_number=part_number, + tunnel: str | Tunnel | pb.Tunnel | None = None, + role: str | None = None, + termination_asn: str | ASN | pb.ASN | None = None, + termination_asn_range: str | ASNRange | pb.ASNRange | None = None, + termination_aggregate: str | Aggregate | pb.Aggregate | None = None, + termination_cable: str | Cable | pb.Cable | None = None, + termination_cable_path: str | CablePath | pb.CablePath | None = None, + termination_cable_termination: str | CableTermination | pb.CableTermination | None = None, + termination_circuit: str | Circuit | pb.Circuit | None = None, + termination_circuit_group: str | CircuitGroup | pb.CircuitGroup | None = None, + termination_circuit_group_assignment: str | CircuitGroupAssignment | pb.CircuitGroupAssignment | None = None, + termination_circuit_termination: str | CircuitTermination | pb.CircuitTermination | None = None, + termination_circuit_type: str | CircuitType | pb.CircuitType | None = None, + termination_cluster: str | Cluster | pb.Cluster | None = None, + termination_cluster_group: str | ClusterGroup | pb.ClusterGroup | None = None, + termination_cluster_type: str | ClusterType | pb.ClusterType | None = None, + termination_console_port: str | ConsolePort | pb.ConsolePort | None = None, + termination_console_server_port: str | ConsoleServerPort | pb.ConsoleServerPort | None = None, + termination_contact: str | Contact | pb.Contact | None = None, + termination_contact_assignment: str | ContactAssignment | pb.ContactAssignment | None = None, + termination_contact_group: str | ContactGroup | pb.ContactGroup | None = None, + termination_contact_role: str | ContactRole | pb.ContactRole | None = None, + termination_device: str | Device | pb.Device | None = None, + termination_device_bay: str | DeviceBay | pb.DeviceBay | None = None, + termination_device_role: str | DeviceRole | pb.DeviceRole | None = None, + termination_device_type: str | DeviceType | pb.DeviceType | None = None, + termination_fhrp_group: str | FHRPGroup | pb.FHRPGroup | None = None, + termination_fhrp_group_assignment: str | FHRPGroupAssignment | pb.FHRPGroupAssignment | None = None, + termination_front_port: str | FrontPort | pb.FrontPort | None = None, + termination_ike_policy: str | IKEPolicy | pb.IKEPolicy | None = None, + termination_ike_proposal: str | IKEProposal | pb.IKEProposal | None = None, + termination_ip_address: str | IPAddress | pb.IPAddress | None = None, + termination_ip_range: str | IPRange | pb.IPRange | None = None, + termination_ip_sec_policy: str | IPSecPolicy | pb.IPSecPolicy | None = None, + termination_ip_sec_profile: str | IPSecProfile | pb.IPSecProfile | None = None, + termination_ip_sec_proposal: str | IPSecProposal | pb.IPSecProposal | None = None, + termination_interface: str | Interface | pb.Interface | None = None, + termination_inventory_item: str | InventoryItem | pb.InventoryItem | None = None, + termination_inventory_item_role: str | InventoryItemRole | pb.InventoryItemRole | None = None, + termination_l2vpn: str | L2VPN | pb.L2VPN | None = None, + termination_l2vpn_termination: str | L2VPNTermination | pb.L2VPNTermination | None = None, + termination_location: str | Location | pb.Location | None = None, + termination_mac_address: str | MACAddress | pb.MACAddress | None = None, + termination_manufacturer: str | Manufacturer | pb.Manufacturer | None = None, + termination_module: str | Module | pb.Module | None = None, + termination_module_bay: str | ModuleBay | pb.ModuleBay | None = None, + termination_module_type: str | ModuleType | pb.ModuleType | None = None, + termination_platform: str | Platform | pb.Platform | None = None, + termination_power_feed: str | PowerFeed | pb.PowerFeed | None = None, + termination_power_outlet: str | PowerOutlet | pb.PowerOutlet | None = None, + termination_power_panel: str | PowerPanel | pb.PowerPanel | None = None, + termination_power_port: str | PowerPort | pb.PowerPort | None = None, + termination_prefix: str | Prefix | pb.Prefix | None = None, + termination_provider: str | Provider | pb.Provider | None = None, + termination_provider_account: str | ProviderAccount | pb.ProviderAccount | None = None, + termination_provider_network: str | ProviderNetwork | pb.ProviderNetwork | None = None, + termination_rir: str | RIR | pb.RIR | None = None, + termination_rack: str | Rack | pb.Rack | None = None, + termination_rack_reservation: str | RackReservation | pb.RackReservation | None = None, + termination_rack_role: str | RackRole | pb.RackRole | None = None, + termination_rack_type: str | RackType | pb.RackType | None = None, + termination_rear_port: str | RearPort | pb.RearPort | None = None, + termination_region: str | Region | pb.Region | None = None, + termination_role: str | Role | pb.Role | None = None, + termination_route_target: str | RouteTarget | pb.RouteTarget | None = None, + termination_service: str | Service | pb.Service | None = None, + termination_site: str | Site | pb.Site | None = None, + termination_site_group: str | SiteGroup | pb.SiteGroup | None = None, + termination_tag: str | Tag | pb.Tag | None = None, + termination_tenant: str | Tenant | pb.Tenant | None = None, + termination_tenant_group: str | TenantGroup | pb.TenantGroup | None = None, + termination_tunnel: str | Tunnel | pb.Tunnel | None = None, + termination_tunnel_group: str | TunnelGroup | pb.TunnelGroup | None = None, + termination_tunnel_termination: str | TunnelTermination | pb.TunnelTermination | None = None, + termination_vlan: str | VLAN | pb.VLAN | None = None, + termination_vlan_group: str | VLANGroup | pb.VLANGroup | None = None, + termination_vlan_translation_policy: str | VLANTranslationPolicy | pb.VLANTranslationPolicy | None = None, + termination_vlan_translation_rule: str | VLANTranslationRule | pb.VLANTranslationRule | None = None, + termination_vm_interface: str | VMInterface | pb.VMInterface | None = None, + termination_vrf: str | VRF | pb.VRF | None = None, + termination_virtual_chassis: str | VirtualChassis | pb.VirtualChassis | None = None, + termination_virtual_circuit: str | VirtualCircuit | pb.VirtualCircuit | None = None, + termination_virtual_circuit_termination: str | VirtualCircuitTermination | pb.VirtualCircuitTermination | None = None, + termination_virtual_circuit_type: str | VirtualCircuitType | pb.VirtualCircuitType | None = None, + termination_virtual_device_context: str | VirtualDeviceContext | pb.VirtualDeviceContext | None = None, + termination_virtual_disk: str | VirtualDisk | pb.VirtualDisk | None = None, + termination_virtual_machine: str | VirtualMachine | pb.VirtualMachine | None = None, + termination_wireless_lan: str | WirelessLAN | pb.WirelessLAN | None = None, + termination_wireless_lan_group: str | WirelessLANGroup | pb.WirelessLANGroup | None = None, + termination_wireless_link: str | WirelessLink | pb.WirelessLink | None = None, + outside_ip: str | IPAddress | pb.IPAddress | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.TunnelTermination: + """Create a new TunnelTermination.""" + tunnel = convert_to_protobuf(tunnel, pb.Tunnel) + termination_asn = convert_to_protobuf(termination_asn, pb.ASN) + termination_asn_range = convert_to_protobuf(termination_asn_range, pb.ASNRange) + termination_aggregate = convert_to_protobuf(termination_aggregate, pb.Aggregate) + termination_cable = convert_to_protobuf(termination_cable, pb.Cable) + termination_cable_path = convert_to_protobuf(termination_cable_path, pb.CablePath) + termination_cable_termination = convert_to_protobuf(termination_cable_termination, pb.CableTermination) + termination_circuit = convert_to_protobuf(termination_circuit, pb.Circuit) + termination_circuit_group = convert_to_protobuf(termination_circuit_group, pb.CircuitGroup) + termination_circuit_group_assignment = convert_to_protobuf(termination_circuit_group_assignment, pb.CircuitGroupAssignment) + termination_circuit_termination = convert_to_protobuf(termination_circuit_termination, pb.CircuitTermination) + termination_circuit_type = convert_to_protobuf(termination_circuit_type, pb.CircuitType) + termination_cluster = convert_to_protobuf(termination_cluster, pb.Cluster) + termination_cluster_group = convert_to_protobuf(termination_cluster_group, pb.ClusterGroup) + termination_cluster_type = convert_to_protobuf(termination_cluster_type, pb.ClusterType) + termination_console_port = convert_to_protobuf(termination_console_port, pb.ConsolePort) + termination_console_server_port = convert_to_protobuf(termination_console_server_port, pb.ConsoleServerPort) + termination_contact = convert_to_protobuf(termination_contact, pb.Contact) + termination_contact_assignment = convert_to_protobuf(termination_contact_assignment, pb.ContactAssignment) + termination_contact_group = convert_to_protobuf(termination_contact_group, pb.ContactGroup) + termination_contact_role = convert_to_protobuf(termination_contact_role, pb.ContactRole) + termination_device = convert_to_protobuf(termination_device, pb.Device) + termination_device_bay = convert_to_protobuf(termination_device_bay, pb.DeviceBay) + termination_device_role = convert_to_protobuf(termination_device_role, pb.DeviceRole) + termination_device_type = convert_to_protobuf(termination_device_type, pb.DeviceType) + termination_fhrp_group = convert_to_protobuf(termination_fhrp_group, pb.FHRPGroup) + termination_fhrp_group_assignment = convert_to_protobuf(termination_fhrp_group_assignment, pb.FHRPGroupAssignment) + termination_front_port = convert_to_protobuf(termination_front_port, pb.FrontPort) + termination_ike_policy = convert_to_protobuf(termination_ike_policy, pb.IKEPolicy) + termination_ike_proposal = convert_to_protobuf(termination_ike_proposal, pb.IKEProposal) + termination_ip_address = convert_to_protobuf(termination_ip_address, pb.IPAddress) + termination_ip_range = convert_to_protobuf(termination_ip_range, pb.IPRange) + termination_ip_sec_policy = convert_to_protobuf(termination_ip_sec_policy, pb.IPSecPolicy) + termination_ip_sec_profile = convert_to_protobuf(termination_ip_sec_profile, pb.IPSecProfile) + termination_ip_sec_proposal = convert_to_protobuf(termination_ip_sec_proposal, pb.IPSecProposal) + termination_interface = convert_to_protobuf(termination_interface, pb.Interface) + termination_inventory_item = convert_to_protobuf(termination_inventory_item, pb.InventoryItem) + termination_inventory_item_role = convert_to_protobuf(termination_inventory_item_role, pb.InventoryItemRole) + termination_l2vpn = convert_to_protobuf(termination_l2vpn, pb.L2VPN) + termination_l2vpn_termination = convert_to_protobuf(termination_l2vpn_termination, pb.L2VPNTermination) + termination_location = convert_to_protobuf(termination_location, pb.Location) + termination_mac_address = convert_to_protobuf(termination_mac_address, pb.MACAddress) + termination_manufacturer = convert_to_protobuf(termination_manufacturer, pb.Manufacturer) + termination_module = convert_to_protobuf(termination_module, pb.Module) + termination_module_bay = convert_to_protobuf(termination_module_bay, pb.ModuleBay) + termination_module_type = convert_to_protobuf(termination_module_type, pb.ModuleType) + termination_platform = convert_to_protobuf(termination_platform, pb.Platform) + termination_power_feed = convert_to_protobuf(termination_power_feed, pb.PowerFeed) + termination_power_outlet = convert_to_protobuf(termination_power_outlet, pb.PowerOutlet) + termination_power_panel = convert_to_protobuf(termination_power_panel, pb.PowerPanel) + termination_power_port = convert_to_protobuf(termination_power_port, pb.PowerPort) + termination_prefix = convert_to_protobuf(termination_prefix, pb.Prefix) + termination_provider = convert_to_protobuf(termination_provider, pb.Provider) + termination_provider_account = convert_to_protobuf(termination_provider_account, pb.ProviderAccount) + termination_provider_network = convert_to_protobuf(termination_provider_network, pb.ProviderNetwork) + termination_rir = convert_to_protobuf(termination_rir, pb.RIR) + termination_rack = convert_to_protobuf(termination_rack, pb.Rack) + termination_rack_reservation = convert_to_protobuf(termination_rack_reservation, pb.RackReservation) + termination_rack_role = convert_to_protobuf(termination_rack_role, pb.RackRole) + termination_rack_type = convert_to_protobuf(termination_rack_type, pb.RackType) + termination_rear_port = convert_to_protobuf(termination_rear_port, pb.RearPort) + termination_region = convert_to_protobuf(termination_region, pb.Region) + termination_role = convert_to_protobuf(termination_role, pb.Role) + termination_route_target = convert_to_protobuf(termination_route_target, pb.RouteTarget) + termination_service = convert_to_protobuf(termination_service, pb.Service) + termination_site = convert_to_protobuf(termination_site, pb.Site) + termination_site_group = convert_to_protobuf(termination_site_group, pb.SiteGroup) + termination_tag = convert_to_protobuf(termination_tag, pb.Tag) + termination_tenant = convert_to_protobuf(termination_tenant, pb.Tenant) + termination_tenant_group = convert_to_protobuf(termination_tenant_group, pb.TenantGroup) + termination_tunnel = convert_to_protobuf(termination_tunnel, pb.Tunnel) + termination_tunnel_group = convert_to_protobuf(termination_tunnel_group, pb.TunnelGroup) + termination_tunnel_termination = convert_to_protobuf(termination_tunnel_termination, pb.TunnelTermination) + termination_vlan = convert_to_protobuf(termination_vlan, pb.VLAN) + termination_vlan_group = convert_to_protobuf(termination_vlan_group, pb.VLANGroup) + termination_vlan_translation_policy = convert_to_protobuf(termination_vlan_translation_policy, pb.VLANTranslationPolicy) + termination_vlan_translation_rule = convert_to_protobuf(termination_vlan_translation_rule, pb.VLANTranslationRule) + termination_vm_interface = convert_to_protobuf(termination_vm_interface, pb.VMInterface) + termination_vrf = convert_to_protobuf(termination_vrf, pb.VRF) + termination_virtual_chassis = convert_to_protobuf(termination_virtual_chassis, pb.VirtualChassis) + termination_virtual_circuit = convert_to_protobuf(termination_virtual_circuit, pb.VirtualCircuit) + termination_virtual_circuit_termination = convert_to_protobuf(termination_virtual_circuit_termination, pb.VirtualCircuitTermination) + termination_virtual_circuit_type = convert_to_protobuf(termination_virtual_circuit_type, pb.VirtualCircuitType) + termination_virtual_device_context = convert_to_protobuf(termination_virtual_device_context, pb.VirtualDeviceContext) + termination_virtual_disk = convert_to_protobuf(termination_virtual_disk, pb.VirtualDisk) + termination_virtual_machine = convert_to_protobuf(termination_virtual_machine, pb.VirtualMachine) + termination_wireless_lan = convert_to_protobuf(termination_wireless_lan, pb.WirelessLAN) + termination_wireless_lan_group = convert_to_protobuf(termination_wireless_lan_group, pb.WirelessLANGroup) + termination_wireless_link = convert_to_protobuf(termination_wireless_link, pb.WirelessLink) + outside_ip = convert_to_protobuf(outside_ip, pb.IPAddress) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.TunnelTermination( + tunnel=tunnel, + role=role, + termination_asn=termination_asn, + termination_asn_range=termination_asn_range, + termination_aggregate=termination_aggregate, + termination_cable=termination_cable, + termination_cable_path=termination_cable_path, + termination_cable_termination=termination_cable_termination, + termination_circuit=termination_circuit, + termination_circuit_group=termination_circuit_group, + termination_circuit_group_assignment=termination_circuit_group_assignment, + termination_circuit_termination=termination_circuit_termination, + termination_circuit_type=termination_circuit_type, + termination_cluster=termination_cluster, + termination_cluster_group=termination_cluster_group, + termination_cluster_type=termination_cluster_type, + termination_console_port=termination_console_port, + termination_console_server_port=termination_console_server_port, + termination_contact=termination_contact, + termination_contact_assignment=termination_contact_assignment, + termination_contact_group=termination_contact_group, + termination_contact_role=termination_contact_role, + termination_device=termination_device, + termination_device_bay=termination_device_bay, + termination_device_role=termination_device_role, + termination_device_type=termination_device_type, + termination_fhrp_group=termination_fhrp_group, + termination_fhrp_group_assignment=termination_fhrp_group_assignment, + termination_front_port=termination_front_port, + termination_ike_policy=termination_ike_policy, + termination_ike_proposal=termination_ike_proposal, + termination_ip_address=termination_ip_address, + termination_ip_range=termination_ip_range, + termination_ip_sec_policy=termination_ip_sec_policy, + termination_ip_sec_profile=termination_ip_sec_profile, + termination_ip_sec_proposal=termination_ip_sec_proposal, + termination_interface=termination_interface, + termination_inventory_item=termination_inventory_item, + termination_inventory_item_role=termination_inventory_item_role, + termination_l2vpn=termination_l2vpn, + termination_l2vpn_termination=termination_l2vpn_termination, + termination_location=termination_location, + termination_mac_address=termination_mac_address, + termination_manufacturer=termination_manufacturer, + termination_module=termination_module, + termination_module_bay=termination_module_bay, + termination_module_type=termination_module_type, + termination_platform=termination_platform, + termination_power_feed=termination_power_feed, + termination_power_outlet=termination_power_outlet, + termination_power_panel=termination_power_panel, + termination_power_port=termination_power_port, + termination_prefix=termination_prefix, + termination_provider=termination_provider, + termination_provider_account=termination_provider_account, + termination_provider_network=termination_provider_network, + termination_rir=termination_rir, + termination_rack=termination_rack, + termination_rack_reservation=termination_rack_reservation, + termination_rack_role=termination_rack_role, + termination_rack_type=termination_rack_type, + termination_rear_port=termination_rear_port, + termination_region=termination_region, + termination_role=termination_role, + termination_route_target=termination_route_target, + termination_service=termination_service, + termination_site=termination_site, + termination_site_group=termination_site_group, + termination_tag=termination_tag, + termination_tenant=termination_tenant, + termination_tenant_group=termination_tenant_group, + termination_tunnel=termination_tunnel, + termination_tunnel_group=termination_tunnel_group, + termination_tunnel_termination=termination_tunnel_termination, + termination_vlan=termination_vlan, + termination_vlan_group=termination_vlan_group, + termination_vlan_translation_policy=termination_vlan_translation_policy, + termination_vlan_translation_rule=termination_vlan_translation_rule, + termination_vm_interface=termination_vm_interface, + termination_vrf=termination_vrf, + termination_virtual_chassis=termination_virtual_chassis, + termination_virtual_circuit=termination_virtual_circuit, + termination_virtual_circuit_termination=termination_virtual_circuit_termination, + termination_virtual_circuit_type=termination_virtual_circuit_type, + termination_virtual_device_context=termination_virtual_device_context, + termination_virtual_disk=termination_virtual_disk, + termination_virtual_machine=termination_virtual_machine, + termination_wireless_lan=termination_wireless_lan, + termination_wireless_lan_group=termination_wireless_lan_group, + termination_wireless_link=termination_wireless_link, + outside_ip=outside_ip, tags=tags, + custom_fields=custom_fields, ) -class Device: - """Device message wrapper.""" +class VLAN: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.VLAN.""" def __new__( cls, + site: str | Site | pb.Site | None = None, + group: str | VLANGroup | pb.VLANGroup | None = None, + vid: int | None = None, name: str | None = None, - device_type: str | DeviceType | DeviceTypePb | None = None, - device_fqdn: str | None = None, - role: str | Role | RolePb | None = None, - platform: str | Platform | PlatformPb | None = None, - serial: str | None = None, - site: str | SitePb | None = None, - asset_tag: str | None = None, + tenant: str | Tenant | pb.Tenant | None = None, status: str | None = None, + role: str | Role | pb.Role | None = None, description: str | None = None, + qinq_role: str | None = None, + qinq_svlan: str | VLAN | pb.VLAN | None = None, comments: str | None = None, - tags: list[str | Tag | TagPb] | None = None, - primary_ip4: str | IPAddressPb | None = None, - primary_ip6: str | IPAddressPb | None = None, - manufacturer: str | Manufacturer | ManufacturerPb | None = None, - ) -> DevicePb: - """Create a new Device protobuf message.""" - manufacturer = convert_to_protobuf( - manufacturer, ManufacturerPb, name=manufacturer - ) - platform = convert_to_protobuf( - platform, PlatformPb, name=platform, manufacturer=manufacturer - ) - - if ( - isinstance(platform, PlatformPb) - and not platform.HasField("manufacturer") - and manufacturer is not None - ): - platform.manufacturer.CopyFrom(manufacturer) - - site = convert_to_protobuf(site, SitePb, name=site) - device_type = convert_to_protobuf( - device_type, DeviceTypePb, model=device_type, manufacturer=manufacturer - ) - - if ( - isinstance(device_type, DeviceTypePb) - and not device_type.HasField("manufacturer") - and manufacturer is not None - ): - device_type.manufacturer.CopyFrom(manufacturer) - - role = convert_to_protobuf(role, RolePb, name=role) - - if isinstance(tags, list) and all(isinstance(t, str) for t in tags): - tags = [TagPb(name=tag) for tag in tags] - - primary_ip4 = convert_to_protobuf(primary_ip4, IPAddressPb, address=primary_ip4) - primary_ip6 = convert_to_protobuf(primary_ip6, IPAddressPb, address=primary_ip6) - - return DevicePb( - name=name, - device_fqdn=device_fqdn, - device_type=device_type, - role=role, - platform=platform, - serial=serial, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.VLAN: + """Create a new VLAN.""" + site = convert_to_protobuf(site, pb.Site) + group = convert_to_protobuf(group, pb.VLANGroup) + tenant = convert_to_protobuf(tenant, pb.Tenant) + role = convert_to_protobuf(role, pb.Role) + qinq_svlan = convert_to_protobuf(qinq_svlan, pb.VLAN) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.VLAN( site=site, - asset_tag=asset_tag, + group=group, + vid=vid, + name=name, + tenant=tenant, status=status, + role=role, description=description, + qinq_role=qinq_role, + qinq_svlan=qinq_svlan, comments=comments, - primary_ip4=primary_ip4, - primary_ip6=primary_ip6, tags=tags, + custom_fields=custom_fields, ) -class Interface: - """Interface message wrapper.""" +class VLANGroup: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.VLANGroup.""" def __new__( cls, name: str | None = None, - device: str | Device | DevicePb | None = None, - device_type: str | DeviceType | DeviceTypePb | None = None, - role: str | Role | RolePb | None = None, - platform: str | Platform | PlatformPb | None = None, - manufacturer: str | Manufacturer | ManufacturerPb | None = None, - site: str | SitePb | None = None, - type: str | None = None, - enabled: bool | None = None, - mtu: int | None = None, - mac_address: str | None = None, - speed: int | None = None, - wwn: str | None = None, - mgmt_only: bool | None = None, + slug: str | None = None, + scope_cluster: str | Cluster | pb.Cluster | None = None, + scope_cluster_group: str | ClusterGroup | pb.ClusterGroup | None = None, + scope_location: str | Location | pb.Location | None = None, + scope_rack: str | Rack | pb.Rack | None = None, + scope_region: str | Region | pb.Region | None = None, + scope_site: str | Site | pb.Site | None = None, + scope_site_group: str | SiteGroup | pb.SiteGroup | None = None, + vid_ranges: list[int] | None = None, description: str | None = None, - mark_connected: bool | None = None, - mode: str | None = None, - tags: list[str | Tag | TagPb] | None = None, - ) -> InterfacePb: - """Create a new Interface protobuf message.""" - manufacturer = convert_to_protobuf( - manufacturer, ManufacturerPb, name=manufacturer - ) - - platform = convert_to_protobuf( - platform, PlatformPb, name=platform, manufacturer=manufacturer + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.VLANGroup: + """Create a new VLANGroup.""" + scope_cluster = convert_to_protobuf(scope_cluster, pb.Cluster) + scope_cluster_group = convert_to_protobuf(scope_cluster_group, pb.ClusterGroup) + scope_location = convert_to_protobuf(scope_location, pb.Location) + scope_rack = convert_to_protobuf(scope_rack, pb.Rack) + scope_region = convert_to_protobuf(scope_region, pb.Region) + scope_site = convert_to_protobuf(scope_site, pb.Site) + scope_site_group = convert_to_protobuf(scope_site_group, pb.SiteGroup) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.VLANGroup( + name=name, + slug=slug, + scope_cluster=scope_cluster, + scope_cluster_group=scope_cluster_group, + scope_location=scope_location, + scope_rack=scope_rack, + scope_region=scope_region, + scope_site=scope_site, + scope_site_group=scope_site_group, + vid_ranges=vid_ranges, + description=description, + tags=tags, + custom_fields=custom_fields, ) - if ( - isinstance(platform, PlatformPb) - and not platform.HasField("manufacturer") - and manufacturer is not None - ): - platform.manufacturer.CopyFrom(manufacturer) - site = convert_to_protobuf(site, SitePb, name=site) +class VLANTranslationPolicy: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.VLANTranslationPolicy.""" - device_type = convert_to_protobuf( - device_type, DeviceTypePb, model=device_type, manufacturer=manufacturer + def __new__( + cls, + name: str | None = None, + description: str | None = None, + ) -> pb.VLANTranslationPolicy: + """Create a new VLANTranslationPolicy.""" + return pb.VLANTranslationPolicy( + name=name, + description=description, ) - if ( - isinstance(device_type, DeviceTypePb) - and not device_type.HasField("manufacturer") - and manufacturer is not None - ): - device_type.manufacturer.CopyFrom(manufacturer) - role = convert_to_protobuf(role, RolePb, name=role) +class VLANTranslationRule: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.VLANTranslationRule.""" - device = convert_to_protobuf( - device, - DevicePb, - name=device, - device_type=device_type, - platform=platform, - site=site, - role=role, + def __new__( + cls, + policy: str | VLANTranslationPolicy | pb.VLANTranslationPolicy | None = None, + local_vid: int | None = None, + remote_vid: int | None = None, + description: str | None = None, + ) -> pb.VLANTranslationRule: + """Create a new VLANTranslationRule.""" + policy = convert_to_protobuf(policy, pb.VLANTranslationPolicy) + return pb.VLANTranslationRule( + policy=policy, + local_vid=local_vid, + remote_vid=remote_vid, + description=description, ) - if isinstance(tags, list) and all(isinstance(t, str) for t in tags): - tags = [TagPb(name=tag) for tag in tags] - return InterfacePb( +class VMInterface: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.VMInterface.""" + + def __new__( + cls, + virtual_machine: str | VirtualMachine | pb.VirtualMachine | None = None, + name: str | None = None, + enabled: bool | None = None, + parent: str | VMInterface | pb.VMInterface | None = None, + bridge: str | VMInterface | pb.VMInterface | None = None, + mtu: int | None = None, + primary_mac_address: str | MACAddress | pb.MACAddress | None = None, + description: str | None = None, + mode: str | None = None, + untagged_vlan: str | VLAN | pb.VLAN | None = None, + qinq_svlan: str | VLAN | pb.VLAN | None = None, + vlan_translation_policy: str | VLANTranslationPolicy | pb.VLANTranslationPolicy | None = None, + vrf: str | VRF | pb.VRF | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + tagged_vlans: list[str | VLAN | pb.VLAN] | None = None, + ) -> pb.VMInterface: + """Create a new VMInterface.""" + virtual_machine = convert_to_protobuf(virtual_machine, pb.VirtualMachine) + parent = convert_to_protobuf(parent, pb.VMInterface) + bridge = convert_to_protobuf(bridge, pb.VMInterface) + primary_mac_address = convert_to_protobuf(primary_mac_address, pb.MACAddress) + untagged_vlan = convert_to_protobuf(untagged_vlan, pb.VLAN) + qinq_svlan = convert_to_protobuf(qinq_svlan, pb.VLAN) + vlan_translation_policy = convert_to_protobuf(vlan_translation_policy, pb.VLANTranslationPolicy) + vrf = convert_to_protobuf(vrf, pb.VRF) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + tagged_vlans = convert_to_protobuf_list(tagged_vlans, pb.VLAN) + return pb.VMInterface( + virtual_machine=virtual_machine, name=name, - device=device, - type=type, enabled=enabled, + parent=parent, + bridge=bridge, mtu=mtu, - mac_address=mac_address, - speed=speed, - wwn=wwn, - mgmt_only=mgmt_only, + primary_mac_address=primary_mac_address, description=description, - mark_connected=mark_connected, mode=mode, + untagged_vlan=untagged_vlan, + qinq_svlan=qinq_svlan, + vlan_translation_policy=vlan_translation_policy, + vrf=vrf, tags=tags, + custom_fields=custom_fields, + tagged_vlans=tagged_vlans, ) -class IPAddress: - """IPAddress message wrapper.""" +class VRF: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.VRF.""" def __new__( cls, - address: str | None = None, - interface: str | Interface | InterfacePb | None = None, - device: str | Device | DevicePb | None = None, - device_type: str | DeviceType | DeviceTypePb | None = None, - device_role: str | Role | RolePb | None = None, - platform: str | Platform | PlatformPb | None = None, - manufacturer: str | Manufacturer | ManufacturerPb | None = None, - site: str | SitePb | None = None, - status: str | None = None, - role: str | None = None, - dns_name: str | None = None, + name: str | None = None, + rd: str | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + enforce_unique: bool | None = None, description: str | None = None, comments: str | None = None, - tags: list[str | Tag | TagPb] | None = None, - ) -> IPAddressPb: - """Create a new IPAddress protobuf message.""" - manufacturer = convert_to_protobuf( - manufacturer, ManufacturerPb, name=manufacturer - ) - - platform = convert_to_protobuf( - platform, PlatformPb, name=platform, manufacturer=manufacturer - ) - - if ( - isinstance(platform, PlatformPb) - and not platform.HasField("manufacturer") - and manufacturer is not None - ): - platform.manufacturer.CopyFrom(manufacturer) - - site = convert_to_protobuf(site, SitePb, name=site) - - device_type = convert_to_protobuf( - device_type, DeviceTypePb, model=device_type, manufacturer=manufacturer - ) - - if ( - isinstance(device_type, DeviceTypePb) - and not device_type.HasField("manufacturer") - and manufacturer is not None - ): - device_type.manufacturer.CopyFrom(manufacturer) - - device_role = convert_to_protobuf(device_role, RolePb, name=device_role) - - device = convert_to_protobuf( - device, - DevicePb, - name=device, - device_type=device_type, - platform=platform, - site=site, - role=device_role, - ) - - interface = convert_to_protobuf( - interface, - InterfacePb, - name=interface, - device=device, - ) - - if isinstance(tags, list) and all(isinstance(t, str) for t in tags): - tags = [TagPb(name=tag) for tag in tags] - - return IPAddressPb( - address=address, - interface=interface, - status=status, - role=role, - dns_name=dns_name, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + import_targets: list[str | RouteTarget | pb.RouteTarget] | None = None, + export_targets: list[str | RouteTarget | pb.RouteTarget] | None = None, + ) -> pb.VRF: + """Create a new VRF.""" + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + import_targets = convert_to_protobuf_list(import_targets, pb.RouteTarget) + export_targets = convert_to_protobuf_list(export_targets, pb.RouteTarget) + return pb.VRF( + name=name, + rd=rd, + tenant=tenant, + enforce_unique=enforce_unique, description=description, comments=comments, tags=tags, + custom_fields=custom_fields, + import_targets=import_targets, + export_targets=export_targets, ) -class Prefix: - """Prefix message wrapper.""" +class VirtualChassis: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.VirtualChassis.""" def __new__( cls, - prefix: str | None = None, - site: str | SitePb | None = None, - status: str | None = None, - is_pool: bool | None = None, - mark_utilized: bool | None = None, + name: str | None = None, + domain: str | None = None, + master: str | Device | pb.Device | None = None, description: str | None = None, comments: str | None = None, - tags: list[str | Tag | TagPb] | None = None, - ) -> PrefixPb: - """Create a new Prefix protobuf message.""" - site = convert_to_protobuf(site, SitePb, name=site) - - if isinstance(tags, list) and all(isinstance(t, str) for t in tags): - tags = [TagPb(name=tag) for tag in tags] - - return PrefixPb( - prefix=prefix, - site=site, - status=status, - is_pool=is_pool, - mark_utilized=mark_utilized, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.VirtualChassis: + """Create a new VirtualChassis.""" + master = convert_to_protobuf(master, pb.Device) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.VirtualChassis( + name=name, + domain=domain, + master=master, description=description, comments=comments, tags=tags, + custom_fields=custom_fields, ) -class Site: - """Site message wrapper.""" +class VirtualCircuit: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.VirtualCircuit.""" def __new__( cls, - name: str | None = None, - slug: str | None = None, + cid: str | None = None, + provider_network: str | ProviderNetwork | pb.ProviderNetwork | None = None, + provider_account: str | ProviderAccount | pb.ProviderAccount | None = None, + type: str | VirtualCircuitType | pb.VirtualCircuitType | None = None, status: str | None = None, - facility: str | None = None, - time_zone: str | None = None, + tenant: str | Tenant | pb.Tenant | None = None, description: str | None = None, comments: str | None = None, - tags: list[str | Tag | TagPb] | None = None, - ) -> SitePb: - """Create a new Site protobuf message.""" - if isinstance(tags, list) and all(isinstance(t, str) for t in tags): - tags = [TagPb(name=tag) for tag in tags] - - return SitePb( - name=name, - slug=slug, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.VirtualCircuit: + """Create a new VirtualCircuit.""" + provider_network = convert_to_protobuf(provider_network, pb.ProviderNetwork) + provider_account = convert_to_protobuf(provider_account, pb.ProviderAccount) + type = convert_to_protobuf(type, pb.VirtualCircuitType) + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.VirtualCircuit( + cid=cid, + provider_network=provider_network, + provider_account=provider_account, + type=type, status=status, - facility=facility, - time_zone=time_zone, + tenant=tenant, description=description, comments=comments, tags=tags, + custom_fields=custom_fields, ) -class ClusterGroup: - """ClusterGroup message wrapper.""" +class VirtualCircuitTermination: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.VirtualCircuitTermination.""" def __new__( cls, - name: str | None = None, - slug: str | None = None, + virtual_circuit: str | VirtualCircuit | pb.VirtualCircuit | None = None, + role: str | None = None, + interface: str | Interface | pb.Interface | None = None, description: str | None = None, - tags: list[str | Tag | TagPb] | None = None, - ) -> ClusterGroupPb: - """Create a new cluster group protobuf message.""" - if isinstance(tags, list) and all(isinstance(t, str) for t in tags): - tags = [TagPb(name=tag) for tag in tags] - - return ClusterGroupPb( - name=name, - slug=slug, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.VirtualCircuitTermination: + """Create a new VirtualCircuitTermination.""" + virtual_circuit = convert_to_protobuf(virtual_circuit, pb.VirtualCircuit) + interface = convert_to_protobuf(interface, pb.Interface) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.VirtualCircuitTermination( + virtual_circuit=virtual_circuit, + role=role, + interface=interface, description=description, tags=tags, + custom_fields=custom_fields, ) -class ClusterType: - """ClusterType message wrapper.""" +class VirtualCircuitType: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.VirtualCircuitType.""" def __new__( cls, name: str | None = None, slug: str | None = None, + color: str | None = None, description: str | None = None, - tags: list[str | Tag | TagPb] | None = None, - ) -> ClusterTypePb: - """Create a new cluster type protobuf message.""" - if isinstance(tags, list) and all(isinstance(t, str) for t in tags): - tags = [TagPb(name=tag) for tag in tags] - - return ClusterTypePb( + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.VirtualCircuitType: + """Create a new VirtualCircuitType.""" + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.VirtualCircuitType( name=name, slug=slug, + color=color, description=description, tags=tags, + custom_fields=custom_fields, ) -class Cluster: - """Cluster message wrapper.""" +class VirtualDeviceContext: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.VirtualDeviceContext.""" def __new__( cls, name: str | None = None, - group: str | ClusterGroup | ClusterGroupPb | None = None, - type: str | ClusterType | ClusterTypePb | None = None, - site: str | Site | SitePb | None = None, + device: str | Device | pb.Device | None = None, + identifier: int | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + primary_ip4: str | IPAddress | pb.IPAddress | None = None, + primary_ip6: str | IPAddress | pb.IPAddress | None = None, status: str | None = None, description: str | None = None, - tags: list[str | Tag | TagPb] | None = None, - ) -> ClusterPb: - """Create a new cluster protobuf message.""" - group = convert_to_protobuf(group, ClusterGroupPb, name=group) - - type = convert_to_protobuf(type, ClusterTypePb, name=type) + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.VirtualDeviceContext: + """Create a new VirtualDeviceContext.""" + device = convert_to_protobuf(device, pb.Device) + tenant = convert_to_protobuf(tenant, pb.Tenant) + primary_ip4 = convert_to_protobuf(primary_ip4, pb.IPAddress) + primary_ip6 = convert_to_protobuf(primary_ip6, pb.IPAddress) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.VirtualDeviceContext( + name=name, + device=device, + identifier=identifier, + tenant=tenant, + primary_ip4=primary_ip4, + primary_ip6=primary_ip6, + status=status, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, + ) - site = convert_to_protobuf(site, SitePb, name=site) - if isinstance(tags, list) and all(isinstance(t, str) for t in tags): - tags = [TagPb(name=tag) for tag in tags] +class VirtualDisk: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.VirtualDisk.""" - return ClusterPb( + def __new__( + cls, + virtual_machine: str | VirtualMachine | pb.VirtualMachine | None = None, + name: str | None = None, + description: str | None = None, + size: int | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.VirtualDisk: + """Create a new VirtualDisk.""" + virtual_machine = convert_to_protobuf(virtual_machine, pb.VirtualMachine) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.VirtualDisk( + virtual_machine=virtual_machine, name=name, - group=group, - type=type, - site=site, - status=status, description=description, + size=size, tags=tags, + custom_fields=custom_fields, ) class VirtualMachine: - """VirtualMachine message wrapper.""" + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.VirtualMachine.""" def __new__( cls, name: str | None = None, status: str | None = None, - site: str | Site | SitePb | None = None, - cluster: str | Cluster | ClusterPb | None = None, - role: str | Role | RolePb | None = None, - device: str | Device | DevicePb | None = None, - platform: str | Platform | PlatformPb | None = None, - primary_ip4: str | IPAddressPb | None = None, - primary_ip6: str | IPAddressPb | None = None, - vcpus: int | None = None, + site: str | Site | pb.Site | None = None, + cluster: str | Cluster | pb.Cluster | None = None, + device: str | Device | pb.Device | None = None, + serial: str | None = None, + role: str | DeviceRole | pb.DeviceRole | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + platform: str | Platform | pb.Platform | None = None, + primary_ip4: str | IPAddress | pb.IPAddress | None = None, + primary_ip6: str | IPAddress | pb.IPAddress | None = None, + vcpus: float | None = None, memory: int | None = None, disk: int | None = None, description: str | None = None, comments: str | None = None, - tags: list[str | Tag | TagPb] | None = None, - ) -> VirtualMachinePb: - """Create a new virtual machine protobuf message.""" - site = convert_to_protobuf(site, SitePb, name=site) - - cluster = convert_to_protobuf(cluster, ClusterPb, name=cluster, site=site) - - if ( - isinstance(cluster, ClusterPb) - and not cluster.HasField("site") - and site is not None - ): - cluster.site.CopyFrom(site) + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.VirtualMachine: + """Create a new VirtualMachine.""" + site = convert_to_protobuf(site, pb.Site) + cluster = convert_to_protobuf(cluster, pb.Cluster) + device = convert_to_protobuf(device, pb.Device) + role = convert_to_protobuf(role, pb.DeviceRole) + tenant = convert_to_protobuf(tenant, pb.Tenant) + platform = convert_to_protobuf(platform, pb.Platform) + primary_ip4 = convert_to_protobuf(primary_ip4, pb.IPAddress) + primary_ip6 = convert_to_protobuf(primary_ip6, pb.IPAddress) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) - role = convert_to_protobuf(role, RolePb, name=role) - - platform = convert_to_protobuf(platform, PlatformPb, name=platform) - - device = convert_to_protobuf( - device, DevicePb, name=device, platform=platform, site=site, role=role - ) - - primary_ip4 = convert_to_protobuf(primary_ip4, IPAddressPb, address=primary_ip4) - primary_ip6 = convert_to_protobuf(primary_ip6, IPAddressPb, address=primary_ip6) - - if isinstance(tags, list) and all(isinstance(t, str) for t in tags): - tags = [TagPb(name=tag) for tag in tags] - - return VirtualMachinePb( + # apply shortcuts + if platform is not None: + if device is not None and not device.HasField('platform'): + device.platform.CopyFrom(platform) + if site is not None: + if device is not None and not device.HasField('site'): + device.site.CopyFrom(site) + if cluster is not None and not cluster.HasField('scope_site'): + cluster.scope_site.CopyFrom(site) + if role is not None: + if device is not None and not device.HasField('role'): + device.role.CopyFrom(role) + return pb.VirtualMachine( name=name, status=status, - cluster=cluster, site=site, - role=role, + cluster=cluster, device=device, + serial=serial, + role=role, + tenant=tenant, platform=platform, primary_ip4=primary_ip4, primary_ip6=primary_ip6, @@ -598,133 +4846,127 @@ def __new__( description=description, comments=comments, tags=tags, + custom_fields=custom_fields, ) -class VirtualDisk: - """VirtualDisk message wrapper.""" +class WirelessLAN: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.WirelessLAN.""" def __new__( cls, - name: str | None = None, - virtual_machine: str | VirtualMachine | VirtualMachinePb | None = None, - size: int | None = None, + ssid: str | None = None, description: str | None = None, - tags: list[str | Tag | TagPb] | None = None, - ) -> VirtualDiskPb: - """Create a new virtual disk protobuf message.""" - virtual_machine = convert_to_protobuf( - virtual_machine, VirtualMachinePb, name=virtual_machine - ) - - if isinstance(tags, list) and all(isinstance(t, str) for t in tags): - tags = [TagPb(name=tag) for tag in tags] - - return VirtualDiskPb( - name=name, - virtual_machine=virtual_machine, - size=size, + group: str | WirelessLANGroup | pb.WirelessLANGroup | None = None, + status: str | None = None, + vlan: str | VLAN | pb.VLAN | None = None, + scope_location: str | Location | pb.Location | None = None, + scope_region: str | Region | pb.Region | None = None, + scope_site: str | Site | pb.Site | None = None, + scope_site_group: str | SiteGroup | pb.SiteGroup | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + auth_type: str | None = None, + auth_cipher: str | None = None, + auth_psk: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.WirelessLAN: + """Create a new WirelessLAN.""" + group = convert_to_protobuf(group, pb.WirelessLANGroup) + vlan = convert_to_protobuf(vlan, pb.VLAN) + scope_location = convert_to_protobuf(scope_location, pb.Location) + scope_region = convert_to_protobuf(scope_region, pb.Region) + scope_site = convert_to_protobuf(scope_site, pb.Site) + scope_site_group = convert_to_protobuf(scope_site_group, pb.SiteGroup) + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.WirelessLAN( + ssid=ssid, description=description, + group=group, + status=status, + vlan=vlan, + scope_location=scope_location, + scope_region=scope_region, + scope_site=scope_site, + scope_site_group=scope_site_group, + tenant=tenant, + auth_type=auth_type, + auth_cipher=auth_cipher, + auth_psk=auth_psk, + comments=comments, tags=tags, + custom_fields=custom_fields, ) -class VMInterface: - """VMInterface message wrapper.""" +class WirelessLANGroup: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.WirelessLANGroup.""" def __new__( cls, name: str | None = None, - virtual_machine: str | VirtualMachine | VirtualMachinePb | None = None, - enabled: bool | None = None, - mtu: int | None = None, - mac_address: str | None = None, + slug: str | None = None, + parent: str | WirelessLANGroup | pb.WirelessLANGroup | None = None, description: str | None = None, - tags: list[str | Tag | TagPb] | None = None, - ) -> VMInterfacePb: - """Create a new virtual interface protobuf message.""" - virtual_machine = convert_to_protobuf( - virtual_machine, VirtualMachinePb, name=virtual_machine - ) - - if isinstance(tags, list) and all(isinstance(t, str) for t in tags): - tags = [TagPb(name=tag) for tag in tags] - - return VMInterfacePb( + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.WirelessLANGroup: + """Create a new WirelessLANGroup.""" + parent = convert_to_protobuf(parent, pb.WirelessLANGroup) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.WirelessLANGroup( name=name, - virtual_machine=virtual_machine, - enabled=enabled, - mtu=mtu, - mac_address=mac_address, + slug=slug, + parent=parent, description=description, tags=tags, + custom_fields=custom_fields, ) -class Entity: - """Entity message wrapper.""" - - def __new__( - cls, - site: str | Site | SitePb | None = None, - platform: str | Platform | PlatformPb | None = None, - manufacturer: str | Manufacturer | ManufacturerPb | None = None, - device: str | Device | DevicePb | None = None, - device_role: str | Role | RolePb | None = None, - device_type: str | DeviceType | DeviceTypePb | None = None, - interface: str | Interface | InterfacePb | None = None, - ip_address: str | IPAddress | IPAddressPb | None = None, - prefix: str | Prefix | PrefixPb | None = None, - cluster_group: str | ClusterGroup | ClusterGroupPb | None = None, - cluster_type: str | ClusterType | ClusterTypePb | None = None, - cluster: str | Cluster | ClusterPb | None = None, - virtual_disk: str | VirtualDisk | VirtualDiskPb | None = None, - vminterface: str | VMInterface | VMInterfacePb | None = None, - virtual_machine: str | VirtualMachine | VirtualMachinePb | None = None, - timestamp: _timestamp_pb2.Timestamp | None = None, - ): - """Create a new Entity protobuf message.""" - site = convert_to_protobuf(site, SitePb, name=site) - platform = convert_to_protobuf(platform, PlatformPb, name=platform) - manufacturer = convert_to_protobuf( - manufacturer, ManufacturerPb, name=manufacturer - ) - device = convert_to_protobuf(device, DevicePb, name=device) - device_role = convert_to_protobuf(device_role, RolePb, name=device_role) - device_type = convert_to_protobuf(device_type, DeviceTypePb, model=device_type) - ip_address = convert_to_protobuf(ip_address, IPAddressPb, address=ip_address) - interface = convert_to_protobuf(interface, InterfacePb, name=interface) - prefix = convert_to_protobuf(prefix, PrefixPb, prefix=prefix) - cluster_group = convert_to_protobuf( - cluster_group, ClusterGroupPb, name=cluster_group - ) - cluster_type = convert_to_protobuf( - cluster_type, ClusterTypePb, name=cluster_type - ) - cluster = convert_to_protobuf(cluster, ClusterPb, name=cluster) - virtual_disk = convert_to_protobuf( - virtual_disk, VirtualDiskPb, name=virtual_disk - ) - vminterface = convert_to_protobuf(vminterface, VMInterfacePb, name=vminterface) - virtual_machine = convert_to_protobuf( - virtual_machine, VirtualMachinePb, name=virtual_machine - ) - - return EntityPb( - site=site, - platform=platform, - manufacturer=manufacturer, - device=device, - device_role=device_role, - device_type=device_type, - interface=interface, - ip_address=ip_address, - prefix=prefix, - cluster_group=cluster_group, - cluster_type=cluster_type, - cluster=cluster, - virtual_disk=virtual_disk, - vminterface=vminterface, - virtual_machine=virtual_machine, - timestamp=timestamp, +class WirelessLink: + """wrapper for netboxlabs.diode.sdk.diode.v1.ingester_pb2.WirelessLink.""" + + def __new__( + cls, + interface_a: str | Interface | pb.Interface | None = None, + interface_b: str | Interface | pb.Interface | None = None, + ssid: str | None = None, + status: str | None = None, + tenant: str | Tenant | pb.Tenant | None = None, + auth_type: str | None = None, + auth_cipher: str | None = None, + auth_psk: str | None = None, + distance: float | None = None, + distance_unit: str | None = None, + description: str | None = None, + comments: str | None = None, + tags: list[str | Tag | pb.Tag] | None = None, + custom_fields: dict[str, str | CustomFieldValue | pb.CustomFieldValue] | None = None, + ) -> pb.WirelessLink: + """Create a new WirelessLink.""" + interface_a = convert_to_protobuf(interface_a, pb.Interface) + interface_b = convert_to_protobuf(interface_b, pb.Interface) + tenant = convert_to_protobuf(tenant, pb.Tenant) + tags = convert_to_protobuf_list(tags, pb.Tag) + custom_fields = convert_to_protobuf_dict(custom_fields, pb.CustomFieldValue) + return pb.WirelessLink( + interface_a=interface_a, + interface_b=interface_b, + ssid=ssid, + status=status, + tenant=tenant, + auth_type=auth_type, + auth_cipher=auth_cipher, + auth_psk=auth_psk, + distance=distance, + distance_unit=distance_unit, + description=description, + comments=comments, + tags=tags, + custom_fields=custom_fields, ) diff --git a/pyproject.toml b/pyproject.toml index 3388bec..249b6ed 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,18 +24,19 @@ classifiers = [ # Optional ] dependencies = [ - "certifi==2024.7.4", - "grpcio==1.68.1", - "grpcio-status==1.68.1", + "certifi>=2024.7.4", + "grpcio>=1.68.1", + "grpcio-status>=1.68.1", "sentry-sdk>=2.2.1", ] [project.optional-dependencies] # Optional dev = ["black", "check-manifest", "ruff"] -test = ["coverage", "pytest", "pytest-cov"] +test = ["coverage", "pytest", "pytest-cov==6.0.0"] [tool.coverage.run] omit = [ + "*/netboxlabs/diode/sdk/ingester.py", "*/netboxlabs/diode/sdk/diode/*", "*/netboxlabs/diode/sdk/validate/*", "*/tests/*", diff --git a/tests/test_client.py b/tests/test_client.py index 02a319c..7af797d 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -1,19 +1,21 @@ #!/usr/bin/env python # Copyright 2024 NetBox Labs Inc """NetBox Labs - Tests.""" + +import json import os from unittest import mock +from unittest.mock import MagicMock, patch import grpc import pytest from netboxlabs.diode.sdk.client import ( - _DIODE_API_KEY_ENVVAR_NAME, _DIODE_SENTRY_DSN_ENVVAR_NAME, DiodeClient, DiodeMethodClientInterceptor, _ClientCallDetails, - _get_api_key, + _DiodeAuthentication, _get_sentry_dsn, _load_certs, parse_target, @@ -22,13 +24,14 @@ from netboxlabs.diode.sdk.version import version_semver -def test_init(): +def test_init(mock_diode_authentication): """Check we can initiate a client configuration.""" config = DiodeClient( target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) assert config.target == "localhost:8081" assert config.name == "diode-sdk-python" @@ -39,25 +42,36 @@ def test_init(): assert config.path == "" -def test_config_error(): +@pytest.mark.parametrize( + "client_id,client_secret,env_var_name", + [ + (None, "123", "DIODE_CLIENT_ID"), + ("123", None, "DIODE_CLIENT_SECRET"), + (None, None, "DIODE_CLIENT_ID"), + ], +) +def test_config_errors(client_id, client_secret, env_var_name): """Check we can raise a config error.""" with pytest.raises(DiodeConfigError) as err: DiodeClient( - target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1" + target="grpc://localhost:8081", + app_name="my-producer", + app_version="0.0.1", + client_id=client_id, + client_secret=client_secret, ) - assert ( - str(err.value) == "api_key param or DIODE_API_KEY environment variable required" - ) + assert str(err.value) == f"parameter or {env_var_name} environment variable required" -def test_client_error(): +def test_client_error(mock_diode_authentication): """Check we can raise a client error.""" with pytest.raises(DiodeClientError) as err: client = DiodeClient( target="grpc://invalid:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) client.ingest(entities=[]) assert err.value.status_code == grpc.StatusCode.UNAVAILABLE @@ -72,10 +86,7 @@ def test_diode_client_error_repr_returns_correct_string(): error = DiodeClientError(grpc_error) error._status_code = grpc.StatusCode.UNAVAILABLE error._details = "Some details about the error" - assert ( - repr(error) - == "" - ) + assert repr(error) == "" def test_load_certs_returns_bytes(): @@ -83,26 +94,6 @@ def test_load_certs_returns_bytes(): assert isinstance(_load_certs(), bytes) -def test_get_api_key_returns_env_var_when_no_input(): - """Check that _get_api_key returns the env var when no input is provided.""" - os.environ[_DIODE_API_KEY_ENVVAR_NAME] = "env_var_key" - assert _get_api_key() == "env_var_key" - - -def test_get_api_key_returns_input_when_provided(): - """Check that _get_api_key returns the input when provided.""" - os.environ[_DIODE_API_KEY_ENVVAR_NAME] = "env_var_key" - assert _get_api_key("input_key") == "input_key" - - -def test_get_api_key_raises_error_when_no_input_or_env_var(): - """Check that _get_api_key raises an error when no input or env var is provided.""" - if _DIODE_API_KEY_ENVVAR_NAME in os.environ: - del os.environ[_DIODE_API_KEY_ENVVAR_NAME] - with pytest.raises(DiodeConfigError): - _get_api_key() - - def test_parse_target_handles_http_prefix(): """Check that parse_target raises an error when the target contains http://.""" with pytest.raises(ValueError): @@ -166,13 +157,14 @@ def test_get_sentry_dsn_returns_none_when_no_input_or_env_var(): assert _get_sentry_dsn() is None -def test_setup_sentry_initializes_with_correct_parameters(): +def test_setup_sentry_initializes_with_correct_parameters(mock_diode_authentication): """Check that DiodeClient._setup_sentry() initializes with the correct parameters.""" client = DiodeClient( target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) with mock.patch("sentry_sdk.init") as mock_init: client._setup_sentry("https://user@password.mock.dsn/123456", 0.5, 0.5) @@ -184,13 +176,14 @@ def test_setup_sentry_initializes_with_correct_parameters(): ) -def test_client_sets_up_secure_channel_when_grpcs_scheme_is_found_in_target(): +def test_client_sets_up_secure_channel_when_grpcs_scheme_is_found_in_target(mock_diode_authentication): """Check that DiodeClient.__init__() sets up the gRPC secure channel when grpcs:// scheme is found in the target.""" client = DiodeClient( target="grpcs://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) with ( mock.patch("grpc.secure_channel") as mock_secure_channel, @@ -200,20 +193,22 @@ def test_client_sets_up_secure_channel_when_grpcs_scheme_is_found_in_target(): target="grpcs://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) mock_debug.assert_called_once_with("Setting up gRPC secure channel") mock_secure_channel.assert_called_once() -def test_client_sets_up_insecure_channel_when_grpc_scheme_is_found_in_target(): +def test_client_sets_up_insecure_channel_when_grpc_scheme_is_found_in_target(mock_diode_authentication): """Check that DiodeClient.__init__() sets up the gRPC insecure channel when grpc:// scheme is found in the target.""" client = DiodeClient( target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) with ( mock.patch("grpc.insecure_channel") as mock_insecure_channel, @@ -223,7 +218,8 @@ def test_client_sets_up_insecure_channel_when_grpc_scheme_is_found_in_target(): target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) mock_debug.assert_called_with( @@ -232,14 +228,15 @@ def test_client_sets_up_insecure_channel_when_grpc_scheme_is_found_in_target(): mock_insecure_channel.assert_called_once() -def test_insecure_channel_options_with_primary_user_agent(): +def test_insecure_channel_options_with_primary_user_agent(mock_diode_authentication): """Check that DiodeClient.__init__() sets the gRPC primary_user_agent option for insecure channel.""" with mock.patch("grpc.insecure_channel") as mock_insecure_channel: client = DiodeClient( target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) mock_insecure_channel.assert_called_once() @@ -252,14 +249,15 @@ def test_insecure_channel_options_with_primary_user_agent(): ) -def test_secure_channel_options_with_primary_user_agent(): +def test_secure_channel_options_with_primary_user_agent(mock_diode_authentication): """Check that DiodeClient.__init__() sets the gRPC primary_user_agent option for secure channel.""" with mock.patch("grpc.secure_channel") as mock_secure_channel: client = DiodeClient( target="grpcs://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) mock_secure_channel.assert_called_once() @@ -272,13 +270,14 @@ def test_secure_channel_options_with_primary_user_agent(): ) -def test_client_interceptor_setup_with_path(): +def test_client_interceptor_setup_with_path(mock_diode_authentication): """Check that DiodeClient.__init__() sets up the gRPC interceptor when a path is provided.""" client = DiodeClient( target="grpc://localhost:8081/my-path", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) with ( mock.patch("grpc.intercept_channel") as mock_intercept_channel, @@ -288,7 +287,8 @@ def test_client_interceptor_setup_with_path(): target="grpc://localhost:8081/my-path", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) mock_debug.assert_called_with( @@ -297,13 +297,14 @@ def test_client_interceptor_setup_with_path(): mock_intercept_channel.assert_called_once() -def test_client_interceptor_not_setup_without_path(): +def test_client_interceptor_not_setup_without_path(mock_diode_authentication): """Check that DiodeClient.__init__() does not set up the gRPC interceptor when no path is provided.""" client = DiodeClient( target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) with ( mock.patch("grpc.intercept_channel") as mock_intercept_channel, @@ -313,7 +314,8 @@ def test_client_interceptor_not_setup_without_path(): target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) mock_debug.assert_called_with( @@ -322,13 +324,14 @@ def test_client_interceptor_not_setup_without_path(): mock_intercept_channel.assert_not_called() -def test_client_setup_sentry_called_when_sentry_dsn_exists(): +def test_client_setup_sentry_called_when_sentry_dsn_exists(mock_diode_authentication): """Check that DiodeClient._setup_sentry() is called when sentry_dsn exists.""" client = DiodeClient( target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", sentry_dsn="https://user@password.mock.dsn/123456", ) with mock.patch.object(client, "_setup_sentry") as mock_setup_sentry: @@ -336,39 +339,41 @@ def test_client_setup_sentry_called_when_sentry_dsn_exists(): target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", sentry_dsn="https://user@password.mock.dsn/123456", ) - mock_setup_sentry.assert_called_once_with( - "https://user@password.mock.dsn/123456", 1.0, 1.0 - ) + mock_setup_sentry.assert_called_once_with("https://user@password.mock.dsn/123456", 1.0, 1.0) -def test_client_setup_sentry_not_called_when_sentry_dsn_not_exists(): +def test_client_setup_sentry_not_called_when_sentry_dsn_not_exists(mock_diode_authentication): """Check that DiodeClient._setup_sentry() is not called when sentry_dsn does not exist.""" client = DiodeClient( target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) with mock.patch.object(client, "_setup_sentry") as mock_setup_sentry: client.__init__( target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) mock_setup_sentry.assert_not_called() -def test_client_properties_return_expected_values(): +def test_client_properties_return_expected_values(mock_diode_authentication): """Check that DiodeClient properties return the expected values.""" client = DiodeClient( target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) assert client.name == "diode-sdk-python" assert client.version == version_semver() @@ -380,50 +385,54 @@ def test_client_properties_return_expected_values(): assert isinstance(client.channel, grpc.Channel) -def test_client_enter_returns_self(): +def test_client_enter_returns_self(mock_diode_authentication): """Check that DiodeClient.__enter__() returns self.""" client = DiodeClient( target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) assert client.__enter__() is client -def test_client_exit_closes_channel(): +def test_client_exit_closes_channel(mock_diode_authentication): """Check that DiodeClient.__exit__() closes the channel.""" client = DiodeClient( target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) with mock.patch.object(client._channel, "close") as mock_close: client.__exit__(None, None, None) mock_close.assert_called_once() -def test_client_close_closes_channel(): +def test_client_close_closes_channel(mock_diode_authentication): """Check that DiodeClient.close() closes the channel.""" client = DiodeClient( target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) with mock.patch.object(client._channel, "close") as mock_close: client.close() mock_close.assert_called_once() -def test_setup_sentry_sets_correct_tags(): +def test_setup_sentry_sets_correct_tags(mock_diode_authentication): """Check that DiodeClient._setup_sentry() sets the correct tags.""" client = DiodeClient( target="grpc://localhost:8081", app_name="my-producer", app_version="0.0.1", - api_key="abcde", + client_id="abcde", + client_secret="123456", ) with mock.patch("sentry_sdk.set_tag") as mock_set_tag: client._setup_sentry("https://user@password.mock.dsn/123456", 0.5, 0.5) @@ -458,10 +467,7 @@ def continuation(x, _): None, ) request = None - assert ( - interceptor.intercept_unary_unary(continuation, client_call_details, request) - == "/my/path/diode.v1.IngesterService/Ingest" - ) + assert interceptor.intercept_unary_unary(continuation, client_call_details, request) == "/my/path/diode.v1.IngesterService/Ingest" def test_interceptor_intercepts_stream_unary_calls(): @@ -481,8 +487,151 @@ def continuation(x, _): ) request_iterator = None assert ( - interceptor.intercept_stream_unary( - continuation, client_call_details, request_iterator - ) + interceptor.intercept_stream_unary(continuation, client_call_details, request_iterator) == "/my/path/diode.v1.IngesterService/Ingest" ) + + +@pytest.fixture +def mock_diode_authentication(): + """ + Fixture to mock the Diode authentication process. + + This mock replaces the _DiodeAuthentication class with a mock object + that returns a mocked token for authentication. + """ + with patch("netboxlabs.diode.sdk.client._DiodeAuthentication") as MockAuth: + mock_instance = MockAuth.return_value + mock_instance.authenticate.return_value = "mocked_token" + yield MockAuth + + +def test_diode_client_with_mocked_authentication(mock_diode_authentication): + """ + Test the DiodeClient initialization with mocked authentication. + + This test verifies that the client is initialized correctly with the mocked + authentication token and that the metadata includes the expected platform + and authorization headers. + """ + client = DiodeClient( + target="grpc://localhost:8080/diode", + app_name="my-test-app", + app_version="0.0.1", + client_id="test_client_id", + client_secret="test_client_secret", + ) + assert client._metadata[0] == ("platform", client._platform) + assert client._metadata[-1] == ("authorization", "Bearer mocked_token") + + +def test_ingest_retries_on_unauthenticated_error(mock_diode_authentication): + """Test that the ingest method retries on UNAUTHENTICATED error.""" + # Create a mock stub that raises UNAUTHENTICATED error + mock_stub = MagicMock() + mock_stub.Ingest.side_effect = grpc.RpcError() + mock_stub.Ingest.side_effect.code = lambda: grpc.StatusCode.UNAUTHENTICATED + mock_stub.Ingest.side_effect.details = lambda: "Something went wrong" + + client = DiodeClient( + target="grpc://localhost:8081", + app_name="my-producer", + app_version="0.0.1", + client_id="abcde", + client_secret="123456", + ) + + # Patch the DiodeClient to use the mock stub + client._stub = mock_stub + + # Attempt to ingest entities and expect a DiodeClientError after retries + with pytest.raises(DiodeClientError): + client.ingest(entities=[]) + + # Verify that the Ingest method was called the expected number of times + assert mock_stub.Ingest.call_count == client._max_auth_retries + + +def test_diode_authentication_success(mock_diode_authentication): + """Test successful authentication in _DiodeAuthentication.""" + auth = _DiodeAuthentication( + target="localhost:8081", + path="/diode", + tls_verify=False, + client_id="test_client_id", + client_secret="test_client_secret", + scope="diode:ingest", + ) + with mock.patch("http.client.HTTPConnection") as mock_http_conn: + mock_conn_instance = mock_http_conn.return_value + mock_conn_instance.getresponse.return_value.status = 200 + mock_conn_instance.getresponse.return_value.read.return_value = json.dumps({"access_token": "mocked_token"}).encode() + + token = auth.authenticate() + assert token == "mocked_token" + + +def test_diode_authentication_failure(mock_diode_authentication): + """Test authentication failure in _DiodeAuthentication.""" + auth = _DiodeAuthentication( + target="localhost:8081", + path="/diode", + tls_verify=False, + client_id="test_client_id", + client_secret="test_client_secret", + scope="diode:ingest", + ) + with mock.patch("http.client.HTTPConnection") as mock_http_conn: + mock_conn_instance = mock_http_conn.return_value + mock_conn_instance.getresponse.return_value.status = 401 + mock_conn_instance.getresponse.return_value.reason = "Unauthorized" + + with pytest.raises(DiodeConfigError) as excinfo: + auth.authenticate() + assert "Failed to obtain access token" in str(excinfo.value) + + +@pytest.mark.parametrize("path", [ + "/diode", + "", + None, + "/diode/", + "diode", + "diode/", + ]) +def test_diode_authentication_url_with_path(mock_diode_authentication, path): + """Test that the authentication URL is correctly formatted with a path.""" + auth = _DiodeAuthentication( + target="localhost:8081", + path=path, + tls_verify=False, + client_id="test_client_id", + client_secret="test_client_secret", + scope="diode:ingest", + ) + with mock.patch("http.client.HTTPConnection") as mock_http_conn: + mock_conn_instance = mock_http_conn.return_value + mock_conn_instance.getresponse.return_value.status = 200 + mock_conn_instance.getresponse.return_value.read.return_value = json.dumps({"access_token": "mocked_token"}).encode() + auth.authenticate() + mock_conn_instance.request.assert_called_once_with("POST", f"{(path or '').rstrip('/')}/auth/token", mock.ANY, mock.ANY) + + +def test_diode_authentication_request_exception(mock_diode_authentication): + """Test that an exception during the request raises a DiodeConfigError.""" + auth = _DiodeAuthentication( + target="localhost:8081", + path="/diode", + tls_verify=False, + client_id="test_client_id", + client_secret="test_client_secret", + scope="diode:ingest", + ) + with mock.patch("http.client.HTTPConnection") as mock_http_conn: + mock_conn_instance = mock_http_conn.return_value + mock_conn_instance.request.side_effect = Exception("Connection error") + + with pytest.raises(DiodeConfigError) as excinfo: + auth.authenticate() + assert "Failed to obtain access token: Connection error" in str(excinfo.value) + diff --git a/tests/test_ingester.py b/tests/test_ingester.py index e666f50..56cf014 100644 --- a/tests/test_ingester.py +++ b/tests/test_ingester.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # Copyright 2024 NetBox Labs Inc """NetBox Labs - Tests.""" +from google.protobuf import timestamp_pb2 # ruff: noqa: I001 from netboxlabs.diode.sdk.diode.v1.ingester_pb2 import ( @@ -8,6 +9,7 @@ ClusterGroup as ClusterGroupPb, ClusterType as ClusterTypePb, Device as DevicePb, + DeviceRole as DeviceRolePb, DeviceType as DeviceTypePb, Entity as EntityPb, IPAddress as IPAddressPb, @@ -27,6 +29,7 @@ ClusterGroup, ClusterType, Device, + DeviceRole, DeviceType, Entity, IPAddress, @@ -46,14 +49,9 @@ def test_convert_to_protobuf_returns_correct_class_when_value_is_string(): """Check convert_to_protobuf returns correct class when value is string.""" - - class MockProtobufClass: - def __init__(self, name=None): - self.name = name - - result = convert_to_protobuf("test", MockProtobufClass, name="test") - assert isinstance(result, MockProtobufClass) - assert result.name == "test" + result = convert_to_protobuf("Test Site", SitePb) + assert isinstance(result, SitePb) + assert result.name == "Test Site" def test_convert_to_protobuf_returns_value_when_value_is_not_string(): @@ -173,14 +171,12 @@ def test_role_instantiation_with_all_fields(): role = Role( name="Admin", slug="admin", - color="blue", description="Administrator role", tags=["admin", "role"], ) assert isinstance(role, RolePb) assert role.name == "Admin" assert role.slug == "admin" - assert role.color == "blue" assert role.description == "Administrator role" assert len(role.tags) == 2 for tag in role.tags: @@ -216,7 +212,6 @@ def test_device_instantiation_with_all_fields(): device = Device( name="Device1", device_type="DeviceType1", - device_fqdn="device1.example.com", role="Role1", platform="Platform1", serial="123456", @@ -233,8 +228,7 @@ def test_device_instantiation_with_all_fields(): assert isinstance(device, DevicePb) assert device.name == "Device1" assert isinstance(device.device_type, DeviceTypePb) - assert device.device_fqdn == "device1.example.com" - assert isinstance(device.role, RolePb) + assert isinstance(device.role, DeviceRolePb) assert isinstance(device.platform, PlatformPb) assert device.serial == "123456" assert isinstance(device.site, SitePb) @@ -254,8 +248,7 @@ def test_device_instantiation_with_explicit_nested_object_types(): device = Device( name="Device1", device_type=DeviceType(model="DeviceType1"), - device_fqdn="device1.example.com", - role=Role(name="Role1"), + role=DeviceRole(name="Role1"), platform=Platform(name="Platform1"), serial="123456", site=Site(name="Site1"), @@ -269,7 +262,7 @@ def test_device_instantiation_with_explicit_nested_object_types(): ) assert isinstance(device, DevicePb) assert isinstance(device.device_type, DeviceTypePb) - assert isinstance(device.role, RolePb) + assert isinstance(device.role, DeviceRolePb) assert isinstance(device.platform, PlatformPb) assert isinstance(device.site, SitePb) assert isinstance(device.primary_ip4, IPAddressPb) @@ -291,7 +284,7 @@ def test_interface_instantiation_with_all_fields(): type="type1", enabled=True, mtu=1500, - mac_address="00:00:00:00:00:00", + primary_mac_address="00:00:00:00:00:00", speed=1000, wwn="wwn1", mgmt_only=True, @@ -306,7 +299,7 @@ def test_interface_instantiation_with_all_fields(): assert interface.device.name == "Device1" assert isinstance(interface.device.device_type, DeviceTypePb) assert interface.device.device_type.model == "DeviceType1" - assert isinstance(interface.device.role, RolePb) + assert isinstance(interface.device.role, DeviceRolePb) assert interface.device.role.name == "Role1" assert isinstance(interface.device.platform, PlatformPb) assert interface.device.platform.name == "Platform1" @@ -317,7 +310,7 @@ def test_interface_instantiation_with_all_fields(): assert interface.type == "type1" assert interface.enabled is True assert interface.mtu == 1500 - assert interface.mac_address == "00:00:00:00:00:00" + assert interface.primary_mac_address.mac_address == "00:00:00:00:00:00" assert interface.speed == 1000 assert interface.wwn == "wwn1" assert interface.mgmt_only is True @@ -335,14 +328,14 @@ def test_interface_instantiation_with_explicit_nested_object_types(): name="Interface1", device="Device1", device_type=DeviceType(model="DeviceType1"), - role=Role(name="Role1"), + role=DeviceRole(name="Role1"), platform=Platform(name="Platform1"), site=Site(name="Site1"), manufacturer=Manufacturer(name="Manufacturer1"), ) assert isinstance(interface, InterfacePb) assert isinstance(interface.device.device_type, DeviceTypePb) - assert isinstance(interface.device.role, RolePb) + assert isinstance(interface.device.role, DeviceRolePb) assert isinstance(interface.device.platform, PlatformPb) assert isinstance(interface.device.site, SitePb) assert interface.device.platform.manufacturer.name == "Manufacturer1" @@ -353,7 +346,7 @@ def test_ip_address_instantiation_with_all_fields(): """Check IPAddress instantiation with all fields.""" ip_address = IPAddress( address="192.168.0.1", - interface="Interface1", + assigned_object_interface="Interface1", device="Device1", device_type="DeviceType1", device_role="Role1", @@ -369,20 +362,20 @@ def test_ip_address_instantiation_with_all_fields(): ) assert isinstance(ip_address, IPAddressPb) assert ip_address.address == "192.168.0.1" - assert isinstance(ip_address.interface, InterfacePb) - assert ip_address.interface.name == "Interface1" - assert isinstance(ip_address.interface.device, DevicePb) - assert ip_address.interface.device.name == "Device1" - assert isinstance(ip_address.interface.device.device_type, DeviceTypePb) - assert ip_address.interface.device.device_type.model == "DeviceType1" - assert isinstance(ip_address.interface.device.role, RolePb) - assert ip_address.interface.device.role.name == "Role1" - assert isinstance(ip_address.interface.device.platform, PlatformPb) - assert ip_address.interface.device.platform.name == "Platform1" - assert isinstance(ip_address.interface.device.platform.manufacturer, ManufacturerPb) - assert ip_address.interface.device.platform.manufacturer.name == "Manufacturer1" - assert isinstance(ip_address.interface.device.site, SitePb) - assert ip_address.interface.device.site.name == "Site1" + assert isinstance(ip_address.assigned_object_interface, InterfacePb) + assert ip_address.assigned_object_interface.name == "Interface1" + assert isinstance(ip_address.assigned_object_interface.device, DevicePb) + assert ip_address.assigned_object_interface.device.name == "Device1" + assert isinstance(ip_address.assigned_object_interface.device.device_type, DeviceTypePb) + assert ip_address.assigned_object_interface.device.device_type.model == "DeviceType1" + assert isinstance(ip_address.assigned_object_interface.device.role, DeviceRolePb) + assert ip_address.assigned_object_interface.device.role.name == "Role1" + assert isinstance(ip_address.assigned_object_interface.device.platform, PlatformPb) + assert ip_address.assigned_object_interface.device.platform.name == "Platform1" + assert isinstance(ip_address.assigned_object_interface.device.platform.manufacturer, ManufacturerPb) + assert ip_address.assigned_object_interface.device.platform.manufacturer.name == "Manufacturer1" + assert isinstance(ip_address.assigned_object_interface.device.site, SitePb) + assert ip_address.assigned_object_interface.device.site.name == "Site1" assert ip_address.status == "active" assert ip_address.role == "admin" assert ip_address.dns_name == "dns.example.com" @@ -397,14 +390,14 @@ def test_ip_address_instantiation_with_explicit_nested_object_types(): """Check IPAddress instantiation with explicit nested object types.""" ip_address = IPAddress( address="192.168.0.1", - interface=Interface( + assigned_object_interface=Interface( name="Interface1", device=Device( name="Device1", device_type=DeviceType( model="DeviceType1", manufacturer="Manufacturer1" ), - role=Role(name="Role1"), + role=DeviceRole(name="Role1"), platform=Platform(name="Platform1", manufacturer="Manufacturer1"), site=Site(name="Site1"), ), @@ -416,14 +409,14 @@ def test_ip_address_instantiation_with_explicit_nested_object_types(): tags=["tag1", "tag2"], ) assert isinstance(ip_address, IPAddressPb) - assert isinstance(ip_address.interface, InterfacePb) - assert isinstance(ip_address.interface.device, DevicePb) - assert isinstance(ip_address.interface.device.device_type, DeviceTypePb) - assert isinstance(ip_address.interface.device.role, RolePb) - assert isinstance(ip_address.interface.device.platform, PlatformPb) - assert isinstance(ip_address.interface.device.site, SitePb) - assert ip_address.interface.device.platform.manufacturer.name == "Manufacturer1" - assert ip_address.interface.device.device_type.manufacturer.name == "Manufacturer1" + assert isinstance(ip_address.assigned_object_interface, InterfacePb) + assert isinstance(ip_address.assigned_object_interface.device, DevicePb) + assert isinstance(ip_address.assigned_object_interface.device.device_type, DeviceTypePb) + assert isinstance(ip_address.assigned_object_interface.device.role, DeviceRolePb) + assert isinstance(ip_address.assigned_object_interface.device.platform, PlatformPb) + assert isinstance(ip_address.assigned_object_interface.device.site, SitePb) + assert ip_address.assigned_object_interface.device.platform.manufacturer.name == "Manufacturer1" + assert ip_address.assigned_object_interface.device.device_type.manufacturer.name == "Manufacturer1" assert ip_address.status == "active" assert ip_address.dns_name == "dns.example.com" assert ip_address.description == "This is an IP address" @@ -435,7 +428,7 @@ def test_ip_address_instantiation_with_manufacturer_populated_to_device_type_and """Check IPAddress instantiation with manufacturer populated to DeviceType and Platform.""" ip_address = IPAddress( address="192.168.0.1", - interface="Interface1", + assigned_object_interface="Interface1", device="Device1", device_type=DeviceType(model="DeviceType1"), device_role="Role1", @@ -447,14 +440,14 @@ def test_ip_address_instantiation_with_manufacturer_populated_to_device_type_and dns_name="dns.example.com", ) assert isinstance(ip_address, IPAddressPb) - assert isinstance(ip_address.interface, InterfacePb) - assert isinstance(ip_address.interface.device, DevicePb) - assert isinstance(ip_address.interface.device.device_type, DeviceTypePb) - assert isinstance(ip_address.interface.device.role, RolePb) - assert isinstance(ip_address.interface.device.platform, PlatformPb) - assert isinstance(ip_address.interface.device.site, SitePb) - assert ip_address.interface.device.platform.manufacturer.name == "Manufacturer1" - assert ip_address.interface.device.device_type.manufacturer.name == "Manufacturer1" + assert isinstance(ip_address.assigned_object_interface, InterfacePb) + assert isinstance(ip_address.assigned_object_interface.device, DevicePb) + assert isinstance(ip_address.assigned_object_interface.device.device_type, DeviceTypePb) + assert isinstance(ip_address.assigned_object_interface.device.role, DeviceRolePb) + assert isinstance(ip_address.assigned_object_interface.device.platform, PlatformPb) + assert isinstance(ip_address.assigned_object_interface.device.site, SitePb) + assert ip_address.assigned_object_interface.device.platform.manufacturer.name == "Manufacturer1" + assert ip_address.assigned_object_interface.device.device_type.manufacturer.name == "Manufacturer1" assert ip_address.status == "active" assert ip_address.dns_name == "dns.example.com" @@ -463,7 +456,7 @@ def test_prefix_instantiation_with_all_fields(): """Check Prefix instantiation with all fields.""" prefix = Prefix( prefix="192.168.0.0/24", - site="Site1", + scope_site="Site1", status="active", is_pool=True, mark_utilized=False, @@ -472,8 +465,8 @@ def test_prefix_instantiation_with_all_fields(): ) assert isinstance(prefix, PrefixPb) assert prefix.prefix == "192.168.0.0/24" - assert isinstance(prefix.site, SitePb) - assert prefix.site.name == "Site1" + assert isinstance(prefix.scope_site, SitePb) + assert prefix.scope_site.name == "Site1" assert prefix.status == "active" assert prefix.is_pool is True assert prefix.mark_utilized is False @@ -524,17 +517,17 @@ def test_cluster_instantiation_with_all_fields(): status="active", group=ClusterGroup(name="North America"), type="Google Cloud", - site="Site1", + scope_site="Site1", description="Cluster on gc us east", tags=["us", "gc"], ) assert isinstance(cluster, ClusterPb) assert isinstance(cluster.group, ClusterGroupPb) assert isinstance(cluster.type, ClusterTypePb) - assert isinstance(cluster.site, SitePb) + assert isinstance(cluster.scope_site, SitePb) assert cluster.name == "gc-us-east1" assert cluster.status == "active" - assert cluster.site.name == "Site1" + assert cluster.scope_site.name == "Site1" assert cluster.description == "Cluster on gc us east" assert len(cluster.tags) == 2 for tag in cluster.tags: @@ -562,7 +555,7 @@ def test_virtual_machine_instantiation_with_all_fields(): assert isinstance(virtual_machine, VirtualMachinePb) assert isinstance(virtual_machine.cluster, ClusterPb) assert isinstance(virtual_machine.site, SitePb) - assert isinstance(virtual_machine.role, RolePb) + assert isinstance(virtual_machine.role, DeviceRolePb) assert isinstance(virtual_machine.device, DevicePb) assert isinstance(virtual_machine.platform, PlatformPb) assert isinstance(virtual_machine.primary_ip4, IPAddressPb) @@ -590,11 +583,11 @@ def test_virtual_machine_instantiation_with_cluster_without_site(): assert isinstance(virtual_machine, VirtualMachinePb) assert isinstance(virtual_machine.cluster, ClusterPb) assert isinstance(virtual_machine.site, SitePb) - assert isinstance(virtual_machine.role, RolePb) + assert isinstance(virtual_machine.role, DeviceRolePb) assert virtual_machine.name == "vm1" assert virtual_machine.status == "active" assert virtual_machine.site.name == "Site1" - assert virtual_machine.cluster.site.name == "Site1" + assert virtual_machine.cluster.scope_site.name == "Site1" def test_virtual_disk_instantiation_with_all_fields(): @@ -616,26 +609,26 @@ def test_virtual_disk_instantiation_with_all_fields(): assert isinstance(tag, TagPb) -def test_vminterface_instantiation_with_all_fields(): +def test_vm_interface_instantiation_with_all_fields(): """Check VMInterface instantiation with all fields.""" - vminterface = VMInterface( + vm_interface = VMInterface( name="eth01", virtual_machine="vm1", enabled=True, mtu=1500, - mac_address="00:00:00:00:00:00", + primary_mac_address="00:00:00:01:02:03", description="Virtual interface", - tags=["vm", "ifce"], - ) - assert isinstance(vminterface, VMInterfacePb) - assert isinstance(vminterface.virtual_machine, VirtualMachinePb) - assert vminterface.name == "eth01" - assert vminterface.virtual_machine.name == "vm1" - assert vminterface.mtu == 1500 - assert vminterface.mac_address == "00:00:00:00:00:00" - assert vminterface.description == "Virtual interface" - assert len(vminterface.tags) == 2 - for tag in vminterface.tags: + tags=["vm", "interface"], + ) + assert isinstance(vm_interface, VMInterfacePb) + assert isinstance(vm_interface.virtual_machine, VirtualMachinePb) + assert vm_interface.name == "eth01" + assert vm_interface.virtual_machine.name == "vm1" + assert vm_interface.mtu == 1500 + assert vm_interface.primary_mac_address.mac_address == "00:00:00:01:02:03" + assert vm_interface.description == "Virtual interface" + assert len(vm_interface.tags) == 2 + for tag in vm_interface.tags: assert isinstance(tag, TagPb) @@ -658,6 +651,38 @@ def test_site_instantiation_with_all_fields(): assert isinstance(tag, TagPb) +def test_entity_instantiation_with_no_timestamp_provided(): + """Check Entity instantiation with no timestamp provided.""" + entity = Entity( + site="Site1", + ) + assert isinstance(entity, EntityPb) + assert isinstance(entity.site, SitePb) + assert entity.site.name == "Site1" + assert entity.timestamp is not None + assert entity.timestamp.seconds > 0 + assert entity.timestamp.nanos > 0 + + +def test_entity_instantiation_with_timestamp_provided(): + """Check Entity instantiation with timestamp provided.""" + current_ts = timestamp_pb2.Timestamp() + current_ts.GetCurrentTime() + + entity = Entity( + site="Site1", + timestamp=current_ts, + ) + assert isinstance(entity, EntityPb) + assert isinstance(entity.site, SitePb) + assert entity.site.name == "Site1" + assert entity.timestamp is not None + assert entity.timestamp.seconds > 0 + assert entity.timestamp.nanos > 0 + assert entity.timestamp.seconds == current_ts.seconds + assert entity.timestamp.nanos == current_ts.nanos + + def test_entity_instantiation_with_site(): """Check Entity instantiation with site.""" entity = Entity( @@ -714,7 +739,7 @@ def test_entity_instantiation_with_role(): device_role="Role1", ) assert isinstance(entity, EntityPb) - assert isinstance(entity.device_role, RolePb) + assert isinstance(entity.device_role, DeviceRolePb) assert entity.device_role.name == "Role1" @@ -798,11 +823,11 @@ def test_entity_instantiation_with_virtual_disk(): assert entity.virtual_disk.name == "VirtualDisk1" -def test_entity_instantiation_with_vminterface(): +def test_entity_instantiation_with_vm_interface(): """Check Entity instantiation with virtual interface.""" entity = Entity( - vminterface="VMInterface1", + vm_interface="VMInterface1", ) assert isinstance(entity, EntityPb) - assert isinstance(entity.vminterface, VMInterfacePb) - assert entity.vminterface.name == "VMInterface1" + assert isinstance(entity.vm_interface, VMInterfacePb) + assert entity.vm_interface.name == "VMInterface1"