From 1254c08db2001cfbed634a97da5dffa742886c6f Mon Sep 17 00:00:00 2001 From: santaspeen Date: Thu, 18 Jul 2024 12:03:06 +0300 Subject: [PATCH] [!] Fix ipv4 founding --- src/main.py | 56 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/src/main.py b/src/main.py index ea14c4a..8ac26e7 100644 --- a/src/main.py +++ b/src/main.py @@ -240,8 +240,6 @@ class VMKer: print("Unknown command.") logger.info("Exited from configuration mode.") - def _parse_yml(self): - pass def _search_vm(self, _template_name, _new_name, datacenter): logger.debug("Checking VMs.") @@ -256,6 +254,22 @@ class VMKer: container_view.Destroy() return vm, new + @staticmethod + def _get_vm_ip(vm): + ipv4 = [] + ipv6 = [] + for nic in vm.guest.net: + if nic.ipConfig: + for ip in nic.ipConfig.ipAddress: + if ":" not in ip.ipAddress: # Skip IPv6 addresses + ipv4.append(ip.ipAddress) + else: + ipv6.append(ip.ipAddress) + return ipv4, ipv6 + + def _parse_yml(self): + pass + def _create(self): if len(sys.argv) > 3: self._load_config() @@ -269,12 +283,13 @@ class VMKer: datacenter = datacenter[0] logger.debug("datacenter found") + template_name = f"{sys.argv[2]}-template" new_name = sys.argv[3] - template, _new = self._search_vm(f"{sys.argv[2]}-template", new_name, datacenter) + template, _new = self._search_vm(template_name, new_name, datacenter) if _new: return logger.error(f"Error: {new_name!r} already exist.") if not template: - return logger.error(f"Template not found: {sys.argv[2]}-template") + return logger.error(f"Template not found: {template_name}") logger.debug("template found") if self.config['resource_pool']: @@ -295,7 +310,7 @@ class VMKer: datastore = datastore[0] logger.debug("datastore found") - logger.info(f"Cloning: {sys.argv[2]!r} > {new_name}") + logger.info(f"Cloning: {template_name!r} > {new_name!r}") destfolder = datacenter.vmFolder relocate_spec = vim.vm.RelocateSpec() relocate_spec.datastore = datastore @@ -311,23 +326,23 @@ class VMKer: logger.success("Cloned") vm = task.info.result - ipv4 = [] - ipv6 = [] - for nic in vm.guest.net: - if nic.ipConfig: - for ip in nic.ipConfig.ipAddress: - if ":" not in ip.ipAddress: # Skip IPv6 addresses - ipv4.append(ip.ipAddress) - else: - ipv6.append(ip.ipAddress) - logger.info(f"IPv4: {ipv4}") - logger.info(f"IPv6: {ipv6}") - if len(ipv4) == 0: - return logger.error("No IPv4 address found.") + logger.info("Waiting to PowerOn..") + + t = 0 + while True: + ipv4, ipv6 = self._get_vm_ip(vm) + if len(ipv4) > 0: + break + time.sleep(0.3) + t += 1 + if t > 50: + return logger.error("No IPv4 address found.") + + logger.info(f"IPv4: {', '.join(ipv4)}") + logger.info(f"IPv6: {', '.join(ipv6)}") # TODO: length _pwd1 = ''.join(random.choice(chars) for _ in range(12)) - _pwd2 = ''.join(random.choice(chars) for _ in range(12)) # TODO: Default user ssh = ConnectHandler( @@ -337,10 +352,7 @@ class VMKer: password="toor", ) ssh.send_command(f'echo -e "{_pwd1}\n{_pwd1}" | passwd root') - ssh.send_command(f'echo -e "{_pwd2}\n{_pwd2}" | passwd user') - logger.info(f"Password for root: {_pwd1}") - logger.info(f"Password for user: {_pwd2}") # TODO: yml logger.info("Executing %.yml")