grpc-pve-cloud 3.2.2__tar.gz → 3.2.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (19) hide show
  1. {grpc_pve_cloud-3.2.2/src/grpc_pve_cloud.egg-info → grpc_pve_cloud-3.2.4}/PKG-INFO +2 -2
  2. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4}/requirements.txt +1 -1
  3. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4/src/grpc_pve_cloud.egg-info}/PKG-INFO +2 -2
  4. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4}/src/grpc_pve_cloud.egg-info/requires.txt +1 -1
  5. grpc_pve_cloud-3.2.4/src/pve_cloud_rpc/_version.py +1 -0
  6. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4}/src/pve_cloud_rpc/protos/cloud_pb2.py +7 -3
  7. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4}/src/pve_cloud_rpc/protos/cloud_pb2_grpc.py +43 -0
  8. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4}/src/pve_cloud_rpc/server.py +55 -71
  9. grpc_pve_cloud-3.2.2/src/pve_cloud_rpc/_version.py +0 -1
  10. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4}/LICENSE.md +0 -0
  11. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4}/README.md +0 -0
  12. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4}/pyproject.toml +0 -0
  13. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4}/setup.cfg +0 -0
  14. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4}/src/grpc_pve_cloud.egg-info/SOURCES.txt +0 -0
  15. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4}/src/grpc_pve_cloud.egg-info/dependency_links.txt +0 -0
  16. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4}/src/grpc_pve_cloud.egg-info/entry_points.txt +0 -0
  17. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4}/src/grpc_pve_cloud.egg-info/top_level.txt +0 -0
  18. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4}/src/pve_cloud_rpc/protos/health_pb2.py +0 -0
  19. {grpc_pve_cloud-3.2.2 → grpc_pve_cloud-3.2.4}/src/pve_cloud_rpc/protos/health_pb2_grpc.py +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: grpc-pve-cloud
3
- Version: 3.2.2
3
+ Version: 3.2.4
4
4
  Author-email: Tobias Huebner <tobias.huebner@vmzberlin.com>
5
5
  License-Expression: GPL-3.0-or-later
6
6
  License-File: LICENSE.md
7
- Requires-Dist: py-pve-cloud<3.2.0,>=3.1.2
7
+ Requires-Dist: py-pve-cloud<3.2.0,>=3.1.4
8
8
  Requires-Dist: grpcio==1.81.0
9
9
  Requires-Dist: protobuf==6.33.5
10
10
  Dynamic: license-file
@@ -1,4 +1,4 @@
1
1
  # pessimistic operator for local tdd installs (pip install -e .)
2
- py-pve-cloud>=3.1.2,<3.2.0
2
+ py-pve-cloud>=3.1.4,<3.2.0
3
3
  grpcio==1.81.0
4
4
  protobuf==6.33.5
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: grpc-pve-cloud
3
- Version: 3.2.2
3
+ Version: 3.2.4
4
4
  Author-email: Tobias Huebner <tobias.huebner@vmzberlin.com>
5
5
  License-Expression: GPL-3.0-or-later
6
6
  License-File: LICENSE.md
7
- Requires-Dist: py-pve-cloud<3.2.0,>=3.1.2
7
+ Requires-Dist: py-pve-cloud<3.2.0,>=3.1.4
8
8
  Requires-Dist: grpcio==1.81.0
9
9
  Requires-Dist: protobuf==6.33.5
10
10
  Dynamic: license-file
@@ -1,3 +1,3 @@
1
- py-pve-cloud<3.2.0,>=3.1.2
1
+ py-pve-cloud<3.2.0,>=3.1.4
2
2
  grpcio==1.81.0
3
3
  protobuf==6.33.5
@@ -0,0 +1 @@
1
+ __version__ = "3.2.4"
@@ -24,7 +24,7 @@ _sym_db = _symbol_database.Default()
24
24
 
25
25
 
26
26
 
27
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0b\x63loud.proto\x12\x06protos\",\n\x16GetPveInventoryRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\"B\n\x17GetPveInventoryResponse\x12\x11\n\tinventory\x18\x01 \x01(\t\x12\x14\n\x0c\x63loud_domain\x18\x02 \x01(\t\"+\n\x15GetProxmoxHostRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\"*\n\x16GetProxmoxHostResponse\x12\x10\n\x08pve_host\x18\x01 \x01(\t\"\xa9\x01\n\x14GetProxmoxApiRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\x12\x10\n\x08\x61pi_path\x18\x02 \x01(\t\x12;\n\x08get_args\x18\x03 \x03(\x0b\x32).protos.GetProxmoxApiRequest.GetArgsEntry\x1a.\n\x0cGetArgsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"*\n\x15GetProxmoxApiResponse\x12\x11\n\tjson_resp\x18\x01 \x01(\t\"\xb8\x01\n\x17\x43reateProxmoxApiRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\x12\x10\n\x08\x61pi_path\x18\x02 \x01(\t\x12\x44\n\x0b\x63reate_args\x18\x03 \x03(\x0b\x32/.protos.CreateProxmoxApiRequest.CreateArgsEntry\x1a\x31\n\x0f\x43reateArgsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"@\n\x18\x43reateProxmoxApiResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x13\n\x0b\x65rr_message\x18\x02 \x01(\t\"?\n\x17\x44\x65leteProxmoxApiRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\x12\x10\n\x08\x61pi_path\x18\x02 \x01(\t\"@\n\x18\x44\x65leteProxmoxApiResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x13\n\x0b\x65rr_message\x18\x02 \x01(\t\"\x87\x01\n\x10GetSshKeyRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\x12\x32\n\x08key_type\x18\x02 \x01(\x0e\x32 .protos.GetSshKeyRequest.KeyType\"+\n\x07KeyType\x12\x0e\n\nAUTOMATION\x10\x00\x12\x10\n\x0cPVE_HOST_RSA\x10\x01\" \n\x11GetSshKeyResponse\x12\x0b\n\x03key\x18\x01 \x01(\t\"*\n\x14GetCephAccessRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\"A\n\x15GetCephAccessResponse\x12\x11\n\tceph_conf\x18\x01 \x01(\t\x12\x15\n\radmin_keyring\x18\x02 \x01(\t\"`\n\x14GetKubeconfigRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\x12\x12\n\nstack_name\x18\x02 \x01(\t\x12 \n\x18\x65xtra_control_plane_sans\x18\x03 \x03(\t\"\'\n\x15GetKubeconfigResponse\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\"+\n\x15GetClusterVarsRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\"&\n\x16GetClusterVarsResponse\x12\x0c\n\x04vars\x18\x01 \x01(\t\"T\n\x19GetCloudFileSecretRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\x12\x13\n\x0bsecret_name\x18\x02 \x01(\t\x12\x0e\n\x06rstrip\x18\x03 \x01(\x08\",\n\x1aGetCloudFileSecretResponse\x12\x0e\n\x06secret\x18\x01 \x01(\t\"\x83\x01\n\x18\x43reateCloudSecretRequest\x12\x14\n\x0c\x63loud_domain\x18\x01 \x01(\t\x12\x12\n\ntarget_pve\x18\x02 \x01(\t\x12\x13\n\x0bsecret_name\x18\x03 \x01(\t\x12\x13\n\x0bsecret_data\x18\x04 \x01(\t\x12\x13\n\x0bsecret_type\x18\x05 \x01(\t\"A\n\x19\x43reateCloudSecretResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x13\n\x0b\x65rr_message\x18\x02 \x01(\t\"Y\n\x18\x44\x65leteCloudSecretRequest\x12\x14\n\x0c\x63loud_domain\x18\x01 \x01(\t\x12\x12\n\ntarget_pve\x18\x02 \x01(\t\x12\x13\n\x0bsecret_name\x18\x03 \x01(\t\"A\n\x19\x44\x65leteCloudSecretResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x13\n\x0b\x65rr_message\x18\x02 \x01(\t\"V\n\x15GetCloudSecretRequest\x12\x14\n\x0c\x63loud_domain\x18\x01 \x01(\t\x12\x12\n\ntarget_pve\x18\x02 \x01(\t\x12\x13\n\x0bsecret_name\x18\x03 \x01(\t\"(\n\x16GetCloudSecretResponse\x12\x0e\n\x06secret\x18\x01 \x01(\t\"W\n\x16GetCloudSecretsRequest\x12\x14\n\x0c\x63loud_domain\x18\x01 \x01(\t\x12\x12\n\ntarget_pve\x18\x02 \x01(\t\x12\x13\n\x0bsecret_type\x18\x03 \x01(\t\"*\n\x17GetCloudSecretsResponse\x12\x0f\n\x07secrets\x18\x01 \x01(\t\"T\n\x15GetVmVarsBlakeRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\x12\x14\n\x0c\x63loud_domain\x18\x02 \x01(\t\x12\x11\n\tblake_ids\x18\x03 \x03(\t\"\x94\x01\n\x16GetVmVarsBlakeResponse\x12\x46\n\rblake_id_vars\x18\x01 \x03(\x0b\x32/.protos.GetVmVarsBlakeResponse.BlakeIdVarsEntry\x1a\x32\n\x10\x42lakeIdVarsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"+\n\x15GetCloudDomainRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\"(\n\x16GetCloudDomainResponse\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t2\xbc\n\n\x0c\x43loudService\x12R\n\x13GetMasterKubeconfig\x12\x1c.protos.GetKubeconfigRequest\x1a\x1d.protos.GetKubeconfigResponse\x12O\n\x0eGetClusterVars\x12\x1d.protos.GetClusterVarsRequest\x1a\x1e.protos.GetClusterVarsResponse\x12[\n\x12GetCloudFileSecret\x12!.protos.GetCloudFileSecretRequest\x1a\".protos.GetCloudFileSecretResponse\x12X\n\x11\x43reateCloudSecret\x12 .protos.CreateCloudSecretRequest\x1a!.protos.CreateCloudSecretResponse\x12X\n\x11\x44\x65leteCloudSecret\x12 .protos.DeleteCloudSecretRequest\x1a!.protos.DeleteCloudSecretResponse\x12O\n\x0eGetCloudSecret\x12\x1d.protos.GetCloudSecretRequest\x1a\x1e.protos.GetCloudSecretResponse\x12R\n\x0fGetCloudSecrets\x12\x1e.protos.GetCloudSecretsRequest\x1a\x1f.protos.GetCloudSecretsResponse\x12L\n\rGetCephAccess\x12\x1c.protos.GetCephAccessRequest\x1a\x1d.protos.GetCephAccessResponse\x12@\n\tGetSshKey\x12\x18.protos.GetSshKeyRequest\x1a\x19.protos.GetSshKeyResponse\x12L\n\rGetProxmoxApi\x12\x1c.protos.GetProxmoxApiRequest\x1a\x1d.protos.GetProxmoxApiResponse\x12U\n\x10\x43reateProxmoxApi\x12\x1f.protos.CreateProxmoxApiRequest\x1a .protos.CreateProxmoxApiResponse\x12U\n\x10\x44\x65leteProxmoxApi\x12\x1f.protos.DeleteProxmoxApiRequest\x1a .protos.DeleteProxmoxApiResponse\x12O\n\x0eGetProxmoxHost\x12\x1d.protos.GetProxmoxHostRequest\x1a\x1e.protos.GetProxmoxHostResponse\x12R\n\x0fGetPveInventory\x12\x1e.protos.GetPveInventoryRequest\x1a\x1f.protos.GetPveInventoryResponse\x12O\n\x0eGetCloudDomain\x12\x1d.protos.GetCloudDomainRequest\x1a\x1e.protos.GetCloudDomainResponse\x12O\n\x0eGetVmVarsBlake\x12\x1d.protos.GetVmVarsBlakeRequest\x1a\x1e.protos.GetVmVarsBlakeResponseBQZOgithub.com/Proxmox-Cloud/terraform-provider-pxc/internal/provider/protos;protosb\x06proto3')
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0b\x63loud.proto\x12\x06protos\",\n\x16GetPveInventoryRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\"B\n\x17GetPveInventoryResponse\x12\x11\n\tinventory\x18\x01 \x01(\t\x12\x14\n\x0c\x63loud_domain\x18\x02 \x01(\t\"+\n\x15GetProxmoxHostRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\"*\n\x16GetProxmoxHostResponse\x12\x10\n\x08pve_host\x18\x01 \x01(\t\"\xa9\x01\n\x14GetProxmoxApiRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\x12\x10\n\x08\x61pi_path\x18\x02 \x01(\t\x12;\n\x08get_args\x18\x03 \x03(\x0b\x32).protos.GetProxmoxApiRequest.GetArgsEntry\x1a.\n\x0cGetArgsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"*\n\x15GetProxmoxApiResponse\x12\x11\n\tjson_resp\x18\x01 \x01(\t\"\xb8\x01\n\x17\x43reateProxmoxApiRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\x12\x10\n\x08\x61pi_path\x18\x02 \x01(\t\x12\x44\n\x0b\x63reate_args\x18\x03 \x03(\x0b\x32/.protos.CreateProxmoxApiRequest.CreateArgsEntry\x1a\x31\n\x0f\x43reateArgsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"@\n\x18\x43reateProxmoxApiResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x13\n\x0b\x65rr_message\x18\x02 \x01(\t\"?\n\x17\x44\x65leteProxmoxApiRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\x12\x10\n\x08\x61pi_path\x18\x02 \x01(\t\"@\n\x18\x44\x65leteProxmoxApiResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x13\n\x0b\x65rr_message\x18\x02 \x01(\t\"\x87\x01\n\x10GetSshKeyRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\x12\x32\n\x08key_type\x18\x02 \x01(\x0e\x32 .protos.GetSshKeyRequest.KeyType\"+\n\x07KeyType\x12\x0e\n\nAUTOMATION\x10\x00\x12\x10\n\x0cPVE_HOST_RSA\x10\x01\" \n\x11GetSshKeyResponse\x12\x0b\n\x03key\x18\x01 \x01(\t\"*\n\x14GetCephAccessRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\"A\n\x15GetCephAccessResponse\x12\x11\n\tceph_conf\x18\x01 \x01(\t\x12\x15\n\radmin_keyring\x18\x02 \x01(\t\"`\n\x14GetKubeconfigRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\x12\x12\n\nstack_name\x18\x02 \x01(\t\x12 \n\x18\x65xtra_control_plane_sans\x18\x03 \x03(\t\"\'\n\x15GetKubeconfigResponse\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\"+\n\x15GetClusterVarsRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\"&\n\x16GetClusterVarsResponse\x12\x0c\n\x04vars\x18\x01 \x01(\t\"T\n\x19GetCloudFileSecretRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\x12\x13\n\x0bsecret_name\x18\x02 \x01(\t\x12\x0e\n\x06rstrip\x18\x03 \x01(\x08\",\n\x1aGetCloudFileSecretResponse\x12\x0e\n\x06secret\x18\x01 \x01(\t\"\x83\x01\n\x18\x43reateCloudSecretRequest\x12\x14\n\x0c\x63loud_domain\x18\x01 \x01(\t\x12\x12\n\ntarget_pve\x18\x02 \x01(\t\x12\x13\n\x0bsecret_name\x18\x03 \x01(\t\x12\x13\n\x0bsecret_data\x18\x04 \x01(\t\x12\x13\n\x0bsecret_type\x18\x05 \x01(\t\"A\n\x19\x43reateCloudSecretResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x13\n\x0b\x65rr_message\x18\x02 \x01(\t\"Y\n\x18\x44\x65leteCloudSecretRequest\x12\x14\n\x0c\x63loud_domain\x18\x01 \x01(\t\x12\x12\n\ntarget_pve\x18\x02 \x01(\t\x12\x13\n\x0bsecret_name\x18\x03 \x01(\t\"A\n\x19\x44\x65leteCloudSecretResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x13\n\x0b\x65rr_message\x18\x02 \x01(\t\"V\n\x15GetCloudSecretRequest\x12\x14\n\x0c\x63loud_domain\x18\x01 \x01(\t\x12\x12\n\ntarget_pve\x18\x02 \x01(\t\x12\x13\n\x0bsecret_name\x18\x03 \x01(\t\"(\n\x16GetCloudSecretResponse\x12\x0e\n\x06secret\x18\x01 \x01(\t\"W\n\x16GetCloudSecretsRequest\x12\x14\n\x0c\x63loud_domain\x18\x01 \x01(\t\x12\x12\n\ntarget_pve\x18\x02 \x01(\t\x12\x13\n\x0bsecret_type\x18\x03 \x01(\t\"*\n\x17GetCloudSecretsResponse\x12\x0f\n\x07secrets\x18\x01 \x01(\t\"T\n\x15GetVmVarsBlakeRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\x12\x14\n\x0c\x63loud_domain\x18\x02 \x01(\t\x12\x11\n\tblake_ids\x18\x03 \x03(\t\"\x94\x01\n\x16GetVmVarsBlakeResponse\x12\x46\n\rblake_id_vars\x18\x01 \x03(\x0b\x32/.protos.GetVmVarsBlakeResponse.BlakeIdVarsEntry\x1a\x32\n\x10\x42lakeIdVarsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"+\n\x15GetCloudDomainRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\"(\n\x16GetCloudDomainResponse\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\";\n\x17GetDnsARecordSetRequest\x12\x12\n\ntarget_pve\x18\x01 \x01(\t\x12\x0c\n\x04host\x18\x02 \x01(\t\")\n\x18GetDnsARecordSetResponse\x12\r\n\x05\x61\x64\x64rs\x18\x01 \x03(\t2\x93\x0b\n\x0c\x43loudService\x12R\n\x13GetMasterKubeconfig\x12\x1c.protos.GetKubeconfigRequest\x1a\x1d.protos.GetKubeconfigResponse\x12O\n\x0eGetClusterVars\x12\x1d.protos.GetClusterVarsRequest\x1a\x1e.protos.GetClusterVarsResponse\x12[\n\x12GetCloudFileSecret\x12!.protos.GetCloudFileSecretRequest\x1a\".protos.GetCloudFileSecretResponse\x12X\n\x11\x43reateCloudSecret\x12 .protos.CreateCloudSecretRequest\x1a!.protos.CreateCloudSecretResponse\x12X\n\x11\x44\x65leteCloudSecret\x12 .protos.DeleteCloudSecretRequest\x1a!.protos.DeleteCloudSecretResponse\x12O\n\x0eGetCloudSecret\x12\x1d.protos.GetCloudSecretRequest\x1a\x1e.protos.GetCloudSecretResponse\x12R\n\x0fGetCloudSecrets\x12\x1e.protos.GetCloudSecretsRequest\x1a\x1f.protos.GetCloudSecretsResponse\x12L\n\rGetCephAccess\x12\x1c.protos.GetCephAccessRequest\x1a\x1d.protos.GetCephAccessResponse\x12@\n\tGetSshKey\x12\x18.protos.GetSshKeyRequest\x1a\x19.protos.GetSshKeyResponse\x12L\n\rGetProxmoxApi\x12\x1c.protos.GetProxmoxApiRequest\x1a\x1d.protos.GetProxmoxApiResponse\x12U\n\x10\x43reateProxmoxApi\x12\x1f.protos.CreateProxmoxApiRequest\x1a .protos.CreateProxmoxApiResponse\x12U\n\x10\x44\x65leteProxmoxApi\x12\x1f.protos.DeleteProxmoxApiRequest\x1a .protos.DeleteProxmoxApiResponse\x12O\n\x0eGetProxmoxHost\x12\x1d.protos.GetProxmoxHostRequest\x1a\x1e.protos.GetProxmoxHostResponse\x12R\n\x0fGetPveInventory\x12\x1e.protos.GetPveInventoryRequest\x1a\x1f.protos.GetPveInventoryResponse\x12O\n\x0eGetCloudDomain\x12\x1d.protos.GetCloudDomainRequest\x1a\x1e.protos.GetCloudDomainResponse\x12O\n\x0eGetVmVarsBlake\x12\x1d.protos.GetVmVarsBlakeRequest\x1a\x1e.protos.GetVmVarsBlakeResponse\x12U\n\x10GetDnsARecordSet\x12\x1f.protos.GetDnsARecordSetRequest\x1a .protos.GetDnsARecordSetResponseBQZOgithub.com/Proxmox-Cloud/terraform-provider-pxc/internal/provider/protos;protosb\x06proto3')
28
28
 
29
29
  _globals = globals()
30
30
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -110,6 +110,10 @@ if not _descriptor._USE_C_DESCRIPTORS:
110
110
  _globals['_GETCLOUDDOMAINREQUEST']._serialized_end=2367
111
111
  _globals['_GETCLOUDDOMAINRESPONSE']._serialized_start=2369
112
112
  _globals['_GETCLOUDDOMAINRESPONSE']._serialized_end=2409
113
- _globals['_CLOUDSERVICE']._serialized_start=2412
114
- _globals['_CLOUDSERVICE']._serialized_end=3752
113
+ _globals['_GETDNSARECORDSETREQUEST']._serialized_start=2411
114
+ _globals['_GETDNSARECORDSETREQUEST']._serialized_end=2470
115
+ _globals['_GETDNSARECORDSETRESPONSE']._serialized_start=2472
116
+ _globals['_GETDNSARECORDSETRESPONSE']._serialized_end=2513
117
+ _globals['_CLOUDSERVICE']._serialized_start=2516
118
+ _globals['_CLOUDSERVICE']._serialized_end=3943
115
119
  # @@protoc_insertion_point(module_scope)
@@ -114,6 +114,11 @@ class CloudServiceStub:
114
114
  request_serializer=cloud__pb2.GetVmVarsBlakeRequest.SerializeToString,
115
115
  response_deserializer=cloud__pb2.GetVmVarsBlakeResponse.FromString,
116
116
  _registered_method=True)
117
+ self.GetDnsARecordSet = channel.unary_unary(
118
+ '/protos.CloudService/GetDnsARecordSet',
119
+ request_serializer=cloud__pb2.GetDnsARecordSetRequest.SerializeToString,
120
+ response_deserializer=cloud__pb2.GetDnsARecordSetResponse.FromString,
121
+ _registered_method=True)
117
122
 
118
123
 
119
124
  class CloudServiceServicer:
@@ -215,6 +220,12 @@ class CloudServiceServicer:
215
220
  context.set_details('Method not implemented!')
216
221
  raise NotImplementedError('Method not implemented!')
217
222
 
223
+ def GetDnsARecordSet(self, request, context):
224
+ """Missing associated documentation comment in .proto file."""
225
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
226
+ context.set_details('Method not implemented!')
227
+ raise NotImplementedError('Method not implemented!')
228
+
218
229
 
219
230
  def add_CloudServiceServicer_to_server(servicer, server):
220
231
  rpc_method_handlers = {
@@ -298,6 +309,11 @@ def add_CloudServiceServicer_to_server(servicer, server):
298
309
  request_deserializer=cloud__pb2.GetVmVarsBlakeRequest.FromString,
299
310
  response_serializer=cloud__pb2.GetVmVarsBlakeResponse.SerializeToString,
300
311
  ),
312
+ 'GetDnsARecordSet': grpc.unary_unary_rpc_method_handler(
313
+ servicer.GetDnsARecordSet,
314
+ request_deserializer=cloud__pb2.GetDnsARecordSetRequest.FromString,
315
+ response_serializer=cloud__pb2.GetDnsARecordSetResponse.SerializeToString,
316
+ ),
301
317
  }
302
318
  generic_handler = grpc.method_handlers_generic_handler(
303
319
  'protos.CloudService', rpc_method_handlers)
@@ -740,3 +756,30 @@ class CloudService:
740
756
  timeout,
741
757
  metadata,
742
758
  _registered_method=True)
759
+
760
+ @staticmethod
761
+ def GetDnsARecordSet(request,
762
+ target,
763
+ options=(),
764
+ channel_credentials=None,
765
+ call_credentials=None,
766
+ insecure=False,
767
+ compression=None,
768
+ wait_for_ready=None,
769
+ timeout=None,
770
+ metadata=None):
771
+ return grpc.experimental.unary_unary(
772
+ request,
773
+ target,
774
+ '/protos.CloudService/GetDnsARecordSet',
775
+ cloud__pb2.GetDnsARecordSetRequest.SerializeToString,
776
+ cloud__pb2.GetDnsARecordSetResponse.FromString,
777
+ options,
778
+ channel_credentials,
779
+ insecure,
780
+ call_credentials,
781
+ compression,
782
+ wait_for_ready,
783
+ timeout,
784
+ metadata,
785
+ _registered_method=True)
@@ -5,6 +5,7 @@ import sys
5
5
  from contextlib import AsyncExitStack
6
6
 
7
7
  import asyncssh
8
+ import dns.resolver
8
9
  import grpc
9
10
  import yaml
10
11
  from pve_cloud.cli.pvclu import (get_ssh_master_kubeconfig,
@@ -13,6 +14,7 @@ from pve_cloud.cli.pxrpc import launch_pxrpc_async
13
14
  from pve_cloud.lib.inventory import (get_cloud_domain, get_cluster_vars,
14
15
  get_online_pve_host_from_target_pve,
15
16
  get_pve_inventory)
17
+ from pve_cloud.lib.ssh import cleanup_jumphosts_async, get_jump_host_async
16
18
  from pve_cloud.orm.alchemy import ProxmoxCloudSecrets, VirtualMachineVars
17
19
  from sqlalchemy import create_engine, delete, select
18
20
  from sqlalchemy.exc import IntegrityError
@@ -65,19 +67,6 @@ async def get_engine(online_pve_host):
65
67
  return engine
66
68
 
67
69
 
68
- # fabric host
69
- def get_pg_conn_str(pve_host):
70
- result = pve_host.run("cat /etc/pve/cloud/secrets/patroni.pass")
71
- patroni_pass = result.stdout.rstrip()
72
-
73
- result = pve_host.run("cat /etc/pve/cloud/cluster_vars.yaml")
74
- cluster_vars = yaml.safe_load(result.stdout)
75
-
76
- patroni_cstr = f"postgresql+psycopg2://postgres:{patroni_pass}@{cluster_vars['pve_haproxy_floating_ip_internal']}:5000/pve_cloud?sslmode=disable"
77
-
78
- return patroni_cstr
79
-
80
-
81
70
  class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
82
71
 
83
72
  def __init__(self):
@@ -94,9 +83,7 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
94
83
  launch_pxrpc_async(jump_host, online_pve_host)
95
84
  )
96
85
 
97
- pxrpc, pve_host = self.pxrpcs[pxrpc_id]
98
-
99
- return pxrpc, pve_host
86
+ return self.pxrpcs[pxrpc_id]
100
87
 
101
88
  # close the pxrpc connection(s)
102
89
  async def shutdown(self):
@@ -154,7 +141,7 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
154
141
  # go through jump host if defined
155
142
  jc = None
156
143
  if jump_host:
157
- jc = await asyncssh.connect(jump_host, username="root", known_hosts=None)
144
+ jc = await get_jump_host_async(jump_host)
158
145
 
159
146
  async with asyncssh.connect(
160
147
  online_pve_host, username="root", known_hosts=None, tunnel=jc
@@ -169,11 +156,6 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
169
156
  ): # defaults to true but in special cases user might want to keep newlines (e.g. certs)
170
157
  catted_secret = catted_secret.rstrip()
171
158
 
172
- # close the jumphost if it was defined
173
- if jc:
174
- jc.close()
175
- await jc.wait_closed()
176
-
177
159
  return cloud_pb2.GetCloudFileSecretResponse(secret=catted_secret)
178
160
 
179
161
  # non file proxmox cloud secrets are stored in the patroni database
@@ -189,11 +171,9 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
189
171
  )
190
172
  if jump_host:
191
173
  # need to execute via pxrpc on jumphost
192
- pxrpc, pve_host = await self.get_pxrpc(online_pve_host, jump_host)
174
+ pxrpc = await self.get_pxrpc(online_pve_host, jump_host)
193
175
 
194
- pg_conn_str = get_pg_conn_str(pve_host)
195
176
  success = await pxrpc.inject_cloud_secret(
196
- pg_conn_str,
197
177
  cloud_domain,
198
178
  secret_name,
199
179
  json.dumps(secret_data),
@@ -240,10 +220,9 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
240
220
  )
241
221
 
242
222
  if jump_host:
243
- pxrpc, pve_host = await self.get_pxrpc(online_pve_host, jump_host)
223
+ pxrpc = await self.get_pxrpc(online_pve_host, jump_host)
244
224
 
245
- pg_conn_str = get_pg_conn_str(pve_host)
246
- await pxrpc.delete_cloud_secret(pg_conn_str, cloud_domain, secret_name)
225
+ await pxrpc.delete_cloud_secret(cloud_domain, secret_name)
247
226
 
248
227
  return cloud_pb2.DeleteCloudSecretResponse(success=True)
249
228
 
@@ -271,13 +250,9 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
271
250
  )
272
251
 
273
252
  if jump_host:
274
- pxrpc, pve_host = await self.get_pxrpc(online_pve_host, jump_host)
275
-
276
- pg_conn_str = get_pg_conn_str(pve_host)
253
+ pxrpc = await self.get_pxrpc(online_pve_host, jump_host)
277
254
 
278
- secret_json = await pxrpc.get_cloud_secret(
279
- pg_conn_str, cloud_domain, secret_name
280
- )
255
+ secret_json = await pxrpc.get_cloud_secret(cloud_domain, secret_name)
281
256
 
282
257
  if secret_json == "":
283
258
  return cloud_pb2.GetCloudSecretResponse()
@@ -312,13 +287,9 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
312
287
  )
313
288
 
314
289
  if jump_host:
315
- pxrpc, pve_host = await self.get_pxrpc(online_pve_host, jump_host)
316
-
317
- pg_conn_str = get_pg_conn_str(pve_host)
290
+ pxrpc = await self.get_pxrpc(online_pve_host, jump_host)
318
291
 
319
- secrets_json = await pxrpc.get_cloud_secrets(
320
- pg_conn_str, cloud_domain, secret_type
321
- )
292
+ secrets_json = await pxrpc.get_cloud_secrets(cloud_domain, secret_type)
322
293
 
323
294
  return cloud_pb2.GetCloudSecretsResponse(secrets=secrets_json)
324
295
 
@@ -348,14 +319,10 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
348
319
  )
349
320
 
350
321
  if jump_host:
351
- pxrpc, pve_host = await self.get_pxrpc(online_pve_host, jump_host)
352
-
353
- pg_conn_str = get_pg_conn_str(pve_host)
322
+ pxrpc = await self.get_pxrpc(online_pve_host, jump_host)
354
323
 
355
324
  blake_ids_json = json.dumps(list(blake_ids))
356
- return_vars = await pxrpc.get_vm_vars_blake(
357
- pg_conn_str, blake_ids_json, cloud_domain
358
- )
325
+ return_vars = await pxrpc.get_vm_vars_blake(blake_ids_json, cloud_domain)
359
326
 
360
327
  return cloud_pb2.GetVmVarsBlakeResponse(
361
328
  blake_id_vars={
@@ -389,7 +356,7 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
389
356
 
390
357
  jc = None
391
358
  if jump_host:
392
- jc = await asyncssh.connect(jump_host, username="root", known_hosts=None)
359
+ jc = await get_jump_host_async(jump_host)
393
360
 
394
361
  async with asyncssh.connect(
395
362
  online_pve_host, username="root", known_hosts=None, tunnel=jc
@@ -402,10 +369,6 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
402
369
  )
403
370
  catted_keyring = cmd.stdout
404
371
 
405
- if jc:
406
- jc.close()
407
- await jc.wait_closed()
408
-
409
372
  return cloud_pb2.GetCephAccessResponse(
410
373
  ceph_conf=catted_conf, admin_keyring=catted_keyring
411
374
  )
@@ -419,7 +382,7 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
419
382
 
420
383
  jc = None
421
384
  if jump_host:
422
- jc = await asyncssh.connect(jump_host, username="root", known_hosts=None)
385
+ jc = await get_jump_host_async(jump_host)
423
386
 
424
387
  async with asyncssh.connect(
425
388
  online_pve_host, username="root", known_hosts=None, tunnel=jc
@@ -434,10 +397,6 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
434
397
  )
435
398
  catted_key = cmd.stdout
436
399
 
437
- if jc:
438
- jc.close()
439
- await jc.wait_closed()
440
-
441
400
  return cloud_pb2.GetSshKeyResponse(key=catted_key)
442
401
 
443
402
  async def GetProxmoxApi(self, request, context):
@@ -449,7 +408,7 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
449
408
 
450
409
  jc = None
451
410
  if jump_host:
452
- jc = await asyncssh.connect(jump_host, username="root", known_hosts=None)
411
+ jc = await get_jump_host_async(jump_host)
453
412
 
454
413
  async with asyncssh.connect(
455
414
  online_pve_host, username="root", known_hosts=None, tunnel=jc
@@ -466,10 +425,6 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
466
425
  )
467
426
  resp_json = cmd.stdout
468
427
 
469
- if jc:
470
- jc.close()
471
- await jc.wait_closed()
472
-
473
428
  return cloud_pb2.GetProxmoxApiResponse(json_resp=resp_json)
474
429
 
475
430
  async def CreateProxmoxApi(self, request, context):
@@ -481,7 +436,7 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
481
436
 
482
437
  jc = None
483
438
  if jump_host:
484
- jc = await asyncssh.connect(jump_host, username="root", known_hosts=None)
439
+ jc = await get_jump_host_async(jump_host)
485
440
 
486
441
  async with asyncssh.connect(
487
442
  online_pve_host, username="root", known_hosts=None, tunnel=jc
@@ -503,10 +458,6 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
503
458
  success=False, err_message=f"Exit code {e.exit_status} - {e.stderr}"
504
459
  )
505
460
 
506
- if jc:
507
- jc.close()
508
- await jc.wait_closed()
509
-
510
461
  return cloud_pb2.CreateProxmoxApiResponse(success=True)
511
462
 
512
463
  async def DeleteProxmoxApi(self, request, context):
@@ -518,7 +469,7 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
518
469
 
519
470
  jc = None
520
471
  if jump_host:
521
- jc = await asyncssh.connect(jump_host, username="root", known_hosts=None)
472
+ jc = await get_jump_host_async(jump_host)
522
473
 
523
474
  async with asyncssh.connect(
524
475
  online_pve_host, username="root", known_hosts=None, tunnel=jc
@@ -534,10 +485,6 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
534
485
  success=False, err_message=f"Exit code {e.exit_status} - {e.stderr}"
535
486
  )
536
487
 
537
- if jc:
538
- jc.close()
539
- await jc.wait_closed()
540
-
541
488
  return cloud_pb2.DeleteProxmoxApiResponse(success=True)
542
489
 
543
490
  async def GetProxmoxHost(self, request, context):
@@ -565,8 +512,42 @@ class CloudServiceServicer(cloud_pb2_grpc.CloudServiceServicer):
565
512
  inventory=yaml.safe_dump(pve_inventory), cloud_domain=cloud_domain
566
513
  )
567
514
 
515
+ async def GetDnsARecordSet(self, request, context):
516
+ target_pve = request.target_pve
517
+ host = request.host
518
+ online_pve_host, jump_host = get_online_pve_host_from_target_pve(
519
+ target_pve, skip_py_cloud_check=True
520
+ )
521
+
522
+ if jump_host:
523
+ pxrpc = await self.get_pxrpc(online_pve_host, jump_host)
524
+
525
+ addresses_json = await pxrpc.get_dns_a_record(host)
526
+
527
+ return cloud_pb2.GetDnsARecordSetResponse(addrs=json.loads(addresses_json))
528
+
529
+ else:
530
+ cluster_vars = get_cluster_vars(online_pve_host, jump_host)
531
+
532
+ resolver = dns.resolver.Resolver()
533
+ resolver.nameservers = [
534
+ cluster_vars["bind_master_ip"],
535
+ cluster_vars["bind_slave_ip"],
536
+ ]
537
+
538
+ try:
539
+ answers = resolver.resolve(host, "A")
540
+ addrs = [rdata.address for rdata in answers]
541
+ except (dns.resolver.NoAnswer, dns.resolver.NXDOMAIN):
542
+ addrs = []
543
+
544
+ return cloud_pb2.GetDnsARecordSetResponse(addrs=addrs)
545
+
568
546
 
569
547
  async def serve():
548
+ # patch the current asyncio loop to allow pxc async ssh calls
549
+ asyncio.get_running_loop()._pxc_ssh_managed = True
550
+
570
551
  server = grpc.aio.server()
571
552
  servicer = CloudServiceServicer()
572
553
  cloud_pb2_grpc.add_CloudServiceServicer_to_server(servicer, server)
@@ -588,6 +569,9 @@ async def serve():
588
569
  await server.stop(grace=0)
589
570
  print("gRPC server stopped and port released.")
590
571
 
572
+ # call pxc cleanup functions
573
+ await cleanup_jumphosts_async()
574
+
591
575
  # delete unix socket file
592
576
  if os.path.exists(socket_file):
593
577
  os.remove(socket_file)
@@ -1 +0,0 @@
1
- __version__ = "3.2.2"
File without changes
File without changes