def test_delete_subnet(self, hetzner_client, bound_network, generic_action): hetzner_client.request.return_value = generic_action subnet = NetworkSubnet(ip_range="10.0.1.0/24") action = bound_network.delete_subnet(subnet) hetzner_client.request.assert_called_with(url="/networks/14/actions/delete_subnet", method="POST", json={"ip_range": "10.0.1.0/24"}) assert action.id == 1 assert action.progress == 0
def test_add_subnet(self, hetzner_client, bound_network, generic_action): hetzner_client.request.return_value = generic_action subnet = NetworkSubnet(type="cloud", ip_range="10.0.1.0/24", network_zone="eu-central") action = bound_network.add_subnet(subnet) hetzner_client.request.assert_called_with(url="/networks/14/actions/add_subnet", method="POST", json={"type": "cloud", "ip_range": "10.0.1.0/24", "network_zone": "eu-central"}) assert action.id == 1 assert action.progress == 0
def realise_modify_subnets(self, allow_recreate: bool) -> None: defn: NetworkOptions = self.get_defn().config prev_subnets = set(self._state.get("subnets", ())) final_subnets = set(defn.subnets) for ip_range in prev_subnets - final_subnets: self.logger.log(f"deleting subnet {ip_range}") self.wait_on_action(self.get_client().networks.delete_subnet( network=Network(self.resource_id), subnet=NetworkSubnet(ip_range, "cloud", "eu-central"), )) for ip_range in final_subnets - prev_subnets: self.logger.log(f"adding subnet {ip_range}") self.wait_on_action(self.get_client().networks.add_subnet( network=Network(self.resource_id), subnet=NetworkSubnet(ip_range, "cloud", "eu-central"), )) with self.depl._db: self._state["subnets"] = list(defn.subnets)
def _create_subnetwork(self): subnet = NetworkSubnet( ip_range=self.module.params.get("ip_range"), type=self.module.params.get('type'), network_zone=self.module.params.get('network_zone') ) if not self.module.check_mode: try: self.hcloud_network.add_subnet(subnet=subnet).wait_until_finished() except APIException as e: self.module.fail_json(msg=e.message) self._mark_as_changed() self._get_network() self._get_subnetwork()
def _create_subnetwork(self): params = { "ip_range": self.module.params.get("ip_range"), "type": self.module.params.get('type'), "network_zone": self.module.params.get('network_zone') } if self.module.params.get('type') == NetworkSubnet.TYPE_VSWITCH: self.module.fail_on_missing_params(required_params=["vswitch_id"]) params["vswitch_id"] = self.module.params.get('vswitch_id') if not self.module.check_mode: try: self.hcloud_network.add_subnet(subnet=NetworkSubnet( **params)).wait_until_finished() except Exception as e: self.module.fail_json(msg=e.message) self._mark_as_changed() self._get_network() self._get_subnetwork()
async def _create_network(self, ip_range: str) -> BoundNetwork: self._log.info('Creating network ...') _ = self._client.networks.create( name=f'{self._prefix:s}-network', ip_range=ip_range, subnets=[ NetworkSubnet( ip_range=ip_range, type='cloud', network_zone='eu-central', ) ], ) self._log.info('Getting handle on network ...') return self._client.networks.get_by_name( name=f'{self._prefix:s}-network', )
def __init__(self, client, data, complete=True): subnets = data.get("subnets", []) if subnets is not None: subnets = [NetworkSubnet.from_dict(subnet) for subnet in subnets] data['subnets'] = subnets routes = data.get("routes", []) if routes is not None: routes = [NetworkRoute.from_dict(route) for route in routes] data['routes'] = routes from hcloud.servers.client import BoundServer servers = data.get("servers", []) if servers is not None: servers = [ BoundServer(client._client.servers, {"id": server}, complete=False) for server in servers ] data['servers'] = servers super(BoundNetwork, self).__init__(client, data, complete)
def network_subnet(self): return NetworkSubnet(type="server", ip_range="10.0.1.0/24", network_zone="eu-central")
def network_vswitch_subnet(self): return NetworkSubnet(type=NetworkSubnet.TYPE_VSWITCH, ip_range="10.0.1.0/24", network_zone="eu-central", vswitch_id=123)
def network_subnet(self): return NetworkSubnet(type=NetworkSubnet.TYPE_CLOUD, ip_range="10.0.1.0/24", network_zone="eu-central")