Coverage for ocp_resources/user_defined_network.py: 0%

74 statements  

« prev     ^ index     » next       coverage.py v7.6.10, created at 2025-01-30 10:48 +0200

1# Generated using https://github.com/RedHatQE/openshift-python-wrapper/blob/main/scripts/resource/README.md 

2 

3from typing import Any, Dict, Optional 

4from ocp_resources.resource import NamespacedResource, MissingRequiredArgumentError 

5from typing import List 

6 

7 

8class UserDefinedNetwork(NamespacedResource): 

9 """ 

10 UserDefinedNetwork describes network request for a Namespace. 

11 """ 

12 

13 api_group: str = NamespacedResource.ApiGroup.K8S_OVN_ORG 

14 

15 def __init__( 

16 self, 

17 layer2: Optional[Dict[str, Any]] = None, 

18 layer3: Optional[Dict[str, Any]] = None, 

19 local_net: Optional[Dict[str, Any]] = None, 

20 topology: Optional[str] = "", 

21 **kwargs: Any, 

22 ) -> None: 

23 """ 

24 Args: 

25 layer2 (Dict[str, Any]): Layer2 is the Layer2 topology configuration. 

26 

27 layer3 (Dict[str, Any]): Layer3 is the Layer3 topology configuration. 

28 

29 local_net (Dict[str, Any]): LocalNet is the LocalNet topology configuration. 

30 

31 topology (str): Topology describes network configuration. Allowed values are 

32 "Layer3", "Layer2", "LocalNet". Layer3 topology creates a layer 2 

33 segment per node, each with a different subnet. Layer 3 routing is 

34 used to interconnect node subnets. Layer2 topology creates one 

35 logical switch shared by all nodes. LocalNet topology creates a 

36 cluster-wide logical switch connected to a physical network. 

37 

38 """ 

39 super().__init__(**kwargs) 

40 

41 self.layer2 = layer2 

42 self.layer3 = layer3 

43 self.local_net = local_net 

44 self.topology = topology 

45 

46 def to_dict(self) -> None: 

47 super().to_dict() 

48 

49 if not self.kind_dict and not self.yaml_file: 

50 if not all([ 

51 self.topology, 

52 ]): 

53 raise MissingRequiredArgumentError(argument="topology") 

54 

55 self.res["spec"] = {} 

56 _spec = self.res["spec"] 

57 

58 _spec["topology"] = self.topology 

59 

60 if self.layer2: 

61 _spec["layer2"] = self.layer2 

62 

63 if self.layer3: 

64 _spec["layer3"] = self.layer3 

65 

66 if self.local_net: 

67 _spec["localNet"] = self.local_net 

68 

69 # End of generated code 

70 

71 def wait_for_network_ready(self, timeout: int = 30) -> None: 

72 """ 

73 Wait for the network to be ready. 

74 

75 Args: 

76 timeout (int, optional): Maximum time to wait in seconds. Defaults to 30. 

77 

78 Raises: 

79 TimeoutExpiredError: If the network is not ready within the specified timeout. 

80 """ 

81 self.wait_for_condition( 

82 condition=self.Condition.NETWORK_READY, 

83 status=self.Condition.Status.TRUE, 

84 timeout=timeout, 

85 ) 

86 

87 

88class Layer2UserDefinedNetwork(UserDefinedNetwork): 

89 """ 

90 UserDefinedNetwork layer2 object. 

91 

92 API reference: 

93 https://ovn-kubernetes.io/api-reference/userdefinednetwork-api-spec/#layer2config 

94 """ 

95 

96 LAYER2: str = "Layer2" 

97 

98 def __init__( 

99 self, 

100 role: Optional[str] = None, 

101 mtu: Optional[int] = None, 

102 subnets: Optional[List[str]] = None, 

103 join_subnets: Optional[List[str]] = None, 

104 ipam_lifecycle: Optional[str] = None, 

105 **kwargs, 

106 ): 

107 """ 

108 Create and manage UserDefinedNetwork with layer2 configuration 

109 

110 Args: 

111 role (Optional[str]): role describes the network role in the pod. 

112 mtu (Optional[int]): mtu is the maximum transmission unit for a network. 

113 subnets (Optional[List[str]]): subnets are used for the pod network across the cluster. 

114 join_subnets (Optional[List[str]]): join_subnets are used inside the OVN network topology. 

115 ipam_lifecycle (Optional[str]): ipam_lifecycle controls IP addresses management lifecycle. 

116 """ 

117 super().__init__( 

118 topology=self.LAYER2, 

119 **kwargs, 

120 ) 

121 self.role = role 

122 self.mtu = mtu 

123 self.subnets = subnets 

124 self.join_subnets = join_subnets 

125 self.ipam_lifecycle = ipam_lifecycle 

126 

127 def to_dict(self) -> None: 

128 super().to_dict() 

129 if not self.kind_dict and not self.yaml_file: 

130 if not self.role: 

131 raise MissingRequiredArgumentError(argument="role") 

132 

133 self.res["spec"][self.LAYER2.lower()] = {"role": self.role} 

134 _layer2 = self.res["spec"][self.LAYER2.lower()] 

135 

136 if self.mtu: 

137 _layer2["mtu"] = self.mtu 

138 

139 if self.subnets: 

140 _layer2["subnets"] = self.subnets 

141 

142 if self.join_subnets: 

143 _layer2["joinSubnets"] = self.join_subnets 

144 

145 if self.ipam_lifecycle: 

146 _layer2["ipamLifecycle"] = self.ipam_lifecycle 

147 

148 

149class Layer3UserDefinedNetwork(UserDefinedNetwork): 

150 """ 

151 UserDefinedNetwork layer3 object. 

152 

153 API reference: 

154 https://ovn-kubernetes.io/api-reference/userdefinednetwork-api-spec/#layer3config 

155 """ 

156 

157 LAYER3: str = "Layer3" 

158 

159 def __init__( 

160 self, 

161 role: Optional[str] = None, 

162 mtu: Optional[int] = None, 

163 subnets: Optional[List[Dict[str, Any]]] = None, 

164 join_subnets: Optional[List[str]] = None, 

165 **kwargs, 

166 ): 

167 """ 

168 Create and manage UserDefinedNetwork with layer3 configuration 

169 

170 Args: 

171 role (Optional[str]): role describes the network role in the pod. 

172 mtu (Optional[int]): mtu is the maximum transmission unit for a network. 

173 subnets (Optional[List[Dict]]): subnets are used for the pod network across the cluster, each expecting: 

174 - `cidr` (str): IP range in CIDR notation. 

175 - `hostSubnet` (Optional[int]): Host-specific subnet. 

176 API reference: 

177 https://ovn-kubernetes.io/api-reference/userdefinednetwork-api-spec/#layer3subnet 

178 join_subnets (Optional[List[str]]): join_subnets are used inside the OVN network topology. 

179 """ 

180 super().__init__( 

181 topology=self.LAYER3, 

182 **kwargs, 

183 ) 

184 self.role = role 

185 self.mtu = mtu 

186 self.subnets = subnets 

187 self.join_subnets = join_subnets 

188 

189 def to_dict(self) -> None: 

190 super().to_dict() 

191 if not self.kind_dict and not self.yaml_file: 

192 if not self.role: 

193 raise MissingRequiredArgumentError(argument="role") 

194 if not self.subnets: 

195 raise MissingRequiredArgumentError(argument="subnets") 

196 

197 self.res["spec"][self.LAYER3.lower()] = {"role": self.role} 

198 _layer3 = self.res["spec"][self.LAYER3.lower()] 

199 

200 if self.mtu: 

201 _layer3["mtu"] = self.mtu 

202 

203 if self.join_subnets: 

204 _layer3["joinSubnets"] = self.join_subnets 

205 

206 if self.subnets: 

207 _layer3["subnets"] = self.subnets