Revision c01a7953 lib/cmdlib/network.py
b/lib/cmdlib/network.py | ||
---|---|---|
128 | 128 |
for tag in self.op.tags: |
129 | 129 |
objects.TaggableObject.ValidateTag(tag) |
130 | 130 |
|
131 |
self.nobj = objects.Network(name=self.op.network_name, |
|
132 |
network=self.op.network, |
|
133 |
gateway=self.op.gateway, |
|
134 |
network6=self.op.network6, |
|
135 |
gateway6=self.op.gateway6, |
|
136 |
mac_prefix=self.op.mac_prefix, |
|
137 |
uuid=self.network_uuid) |
|
138 |
|
|
139 |
# Initialize the associated address pool |
|
140 |
try: |
|
141 |
self.pool = network.AddressPool.InitializeNetwork(self.nobj) |
|
142 |
except errors.AddressPoolError, err: |
|
143 |
raise errors.OpPrereqError("Cannot create IP address pool for network" |
|
144 |
" '%s': %s" % (self.op.network_name, err)) |
|
145 |
|
|
131 | 146 |
def BuildHooksEnv(self): |
132 | 147 |
"""Build hooks env. |
133 | 148 |
|
... | ... | |
147 | 162 |
"""Add the ip pool to the cluster. |
148 | 163 |
|
149 | 164 |
""" |
150 |
nobj = objects.Network(name=self.op.network_name, |
|
151 |
network=self.op.network, |
|
152 |
gateway=self.op.gateway, |
|
153 |
network6=self.op.network6, |
|
154 |
gateway6=self.op.gateway6, |
|
155 |
mac_prefix=self.op.mac_prefix, |
|
156 |
uuid=self.network_uuid) |
|
157 |
# Initialize the associated address pool |
|
158 |
try: |
|
159 |
pool = network.AddressPool.InitializeNetwork(nobj) |
|
160 |
except errors.AddressPoolError, err: |
|
161 |
raise errors.OpExecError("Cannot create IP address pool for network" |
|
162 |
" '%s': %s" % (self.op.network_name, err)) |
|
163 |
|
|
164 | 165 |
# Check if we need to reserve the nodes and the cluster master IP |
165 | 166 |
# These may not be allocated to any instances in routed mode, as |
166 | 167 |
# they wouldn't function anyway. |
... | ... | |
168 | 169 |
for node in self.cfg.GetAllNodesInfo().values(): |
169 | 170 |
for ip in [node.primary_ip, node.secondary_ip]: |
170 | 171 |
try: |
171 |
if pool.Contains(ip): |
|
172 |
pool.Reserve(ip)
|
|
172 |
if self.pool.Contains(ip):
|
|
173 |
self.pool.Reserve(ip, True)
|
|
173 | 174 |
self.LogInfo("Reserved IP address of node '%s' (%s)", |
174 | 175 |
node.name, ip) |
175 | 176 |
except errors.AddressPoolError, err: |
... | ... | |
178 | 179 |
|
179 | 180 |
master_ip = self.cfg.GetClusterInfo().master_ip |
180 | 181 |
try: |
181 |
if pool.Contains(master_ip): |
|
182 |
pool.Reserve(master_ip)
|
|
182 |
if self.pool.Contains(master_ip):
|
|
183 |
self.pool.Reserve(master_ip, True)
|
|
183 | 184 |
self.LogInfo("Reserved cluster master IP address (%s)", master_ip) |
184 | 185 |
except errors.AddressPoolError, err: |
185 | 186 |
self.LogWarning("Cannot reserve cluster master IP address (%s): %s", |
... | ... | |
188 | 189 |
if self.op.add_reserved_ips: |
189 | 190 |
for ip in self.op.add_reserved_ips: |
190 | 191 |
try: |
191 |
pool.Reserve(ip, external=True) |
|
192 |
self.pool.Reserve(ip, external=True)
|
|
192 | 193 |
except errors.AddressPoolError, err: |
193 | 194 |
raise errors.OpExecError("Cannot reserve IP address '%s': %s" % |
194 | 195 |
(ip, err)) |
195 | 196 |
|
196 | 197 |
if self.op.tags: |
197 | 198 |
for tag in self.op.tags: |
198 |
nobj.AddTag(tag) |
|
199 |
self.nobj.AddTag(tag)
|
|
199 | 200 |
|
200 |
self.cfg.AddNetwork(nobj, self.proc.GetECId(), check_uuid=False) |
|
201 |
self.cfg.AddNetwork(self.nobj, self.proc.GetECId(), check_uuid=False)
|
|
201 | 202 |
del self.remove_locks[locking.LEVEL_NETWORK] |
202 | 203 |
|
203 | 204 |
|
... | ... | |
300 | 301 |
self.gateway = None |
301 | 302 |
else: |
302 | 303 |
self.gateway = self.op.gateway |
303 |
if self.pool.IsReserved(self.gateway): |
|
304 |
raise errors.OpPrereqError("Gateway IP address '%s' is already" |
|
305 |
" reserved" % self.gateway, |
|
306 |
errors.ECODE_STATE) |
|
307 | 304 |
|
308 | 305 |
if self.op.mac_prefix: |
309 | 306 |
if self.op.mac_prefix == constants.VALUE_NONE: |
... | ... | |
352 | 349 |
""" |
353 | 350 |
#TODO: reserve/release via temporary reservation manager |
354 | 351 |
# extend cfg.ReserveIp/ReleaseIp with the external flag |
352 |
ec_id = self.proc.GetECId() |
|
355 | 353 |
if self.op.gateway: |
356 | 354 |
if self.gateway == self.network.gateway: |
357 | 355 |
self.LogWarning("Gateway is already %s", self.gateway) |
358 | 356 |
else: |
359 | 357 |
if self.gateway: |
360 |
self.pool.Reserve(self.gateway, external=True)
|
|
358 |
self.cfg.ReserveIp(self.network_uuid, self.gateway, True, ec_id)
|
|
361 | 359 |
if self.network.gateway: |
362 |
self.pool.Release(self.network.gateway, external=True)
|
|
360 |
self.cfg.ReleaseIp(self.network_uuid, self.network.gateway, True, ec_id)
|
|
363 | 361 |
self.network.gateway = self.gateway |
364 | 362 |
|
365 | 363 |
if self.op.add_reserved_ips: |
366 | 364 |
for ip in self.op.add_reserved_ips: |
367 |
try: |
|
368 |
if self.pool.IsReserved(ip): |
|
369 |
self.LogWarning("IP address %s is already reserved", ip) |
|
370 |
else: |
|
371 |
self.pool.Reserve(ip, external=True) |
|
372 |
except errors.AddressPoolError, err: |
|
373 |
self.LogWarning("Cannot reserve IP address %s: %s", ip, err) |
|
365 |
self.cfg.ReserveIp(self.network_uuid, ip, True, ec_id) |
|
374 | 366 |
|
375 | 367 |
if self.op.remove_reserved_ips: |
376 | 368 |
for ip in self.op.remove_reserved_ips: |
377 | 369 |
if ip == self.network.gateway: |
378 | 370 |
self.LogWarning("Cannot unreserve Gateway's IP") |
379 | 371 |
continue |
380 |
try: |
|
381 |
if not self.pool.IsReserved(ip): |
|
382 |
self.LogWarning("IP address %s is already unreserved", ip) |
|
383 |
else: |
|
384 |
self.pool.Release(ip, external=True) |
|
385 |
except errors.AddressPoolError, err: |
|
386 |
self.LogWarning("Cannot release IP address %s: %s", ip, err) |
|
372 |
self.cfg.ReleaseIp(self.network_uuid, ip, True, ec_id) |
|
387 | 373 |
|
388 | 374 |
if self.op.mac_prefix: |
389 | 375 |
self.network.mac_prefix = self.mac_prefix |
Also available in: Unified diff