Revision 1e0d3321 lib/cmdlib.py
b/lib/cmdlib.py | ||
---|---|---|
15471 | 15471 |
|
15472 | 15472 |
|
15473 | 15473 |
class LUNetworkSetParams(LogicalUnit): |
15474 |
def BuildHooksNodes(self): |
|
15475 |
pass |
|
15474 |
"""Modifies the parameters of a network. |
|
15475 |
|
|
15476 |
""" |
|
15477 |
HPATH = "network-modify" |
|
15478 |
HTYPE = constants.HTYPE_NETWORK |
|
15479 |
REQ_BGL = False |
|
15480 |
|
|
15481 |
def CheckArguments(self): |
|
15482 |
if (self.op.gateway and |
|
15483 |
(self.op.add_reserved_ips or self.op.remove_reserved_ips)): |
|
15484 |
raise errors.OpPrereqError("Cannot modify gateway and reserved ips" |
|
15485 |
" at once", errors.ECODE_INVAL) |
|
15486 |
|
|
15487 |
|
|
15488 |
def ExpandNames(self): |
|
15489 |
self.network_uuid = self.cfg.LookupNetwork(self.op.network_name) |
|
15490 |
self.network = self.cfg.GetNetwork(self.network_uuid) |
|
15491 |
self.needed_locks = { |
|
15492 |
locking.LEVEL_NETWORK: [self.network_uuid], |
|
15493 |
} |
|
15494 |
|
|
15495 |
|
|
15496 |
if self.network is None: |
|
15497 |
raise errors.OpPrereqError("Could not retrieve network '%s' (UUID: %s)" % |
|
15498 |
(self.op.network_name, self.network_uuid), |
|
15499 |
errors.ECODE_INVAL) |
|
15500 |
|
|
15501 |
def CheckPrereq(self): |
|
15502 |
"""Check prerequisites. |
|
15503 |
|
|
15504 |
""" |
|
15505 |
self.gateway = self.network.gateway |
|
15506 |
self.network_type = self.network.network_type |
|
15507 |
self.mac_prefix = self.network.mac_prefix |
|
15508 |
self.network6 = self.network.network6 |
|
15509 |
self.gateway6 = self.network.gateway6 |
|
15510 |
|
|
15511 |
self.pool = network.AddressPool(self.network) |
|
15512 |
|
|
15513 |
if self.op.gateway: |
|
15514 |
if self.op.gateway == constants.VALUE_NONE: |
|
15515 |
self.gateway = None |
|
15516 |
else: |
|
15517 |
self.gateway = self.op.gateway |
|
15518 |
if self.pool.IsReserved(self.gateway): |
|
15519 |
raise errors.OpPrereqError("%s is already reserved" % |
|
15520 |
self.gateway, errors.ECODE_INVAL) |
|
15521 |
|
|
15522 |
if self.op.network_type: |
|
15523 |
if self.op.network_type == constants.VALUE_NONE: |
|
15524 |
self.network_type = None |
|
15525 |
else: |
|
15526 |
self.network_type = self.op.network_type |
|
15527 |
|
|
15528 |
if self.op.mac_prefix: |
|
15529 |
if self.op.mac_prefix == constants.VALUE_NONE: |
|
15530 |
self.mac_prefix = None |
|
15531 |
else: |
|
15532 |
self.mac_prefix = self.op.mac_prefix |
|
15533 |
|
|
15534 |
if self.op.gateway6: |
|
15535 |
if self.op.gateway6 == constants.VALUE_NONE: |
|
15536 |
self.gateway6 = None |
|
15537 |
else: |
|
15538 |
self.gateway6 = self.op.gateway6 |
|
15539 |
|
|
15540 |
if self.op.network6: |
|
15541 |
if self.op.network6 == constants.VALUE_NONE: |
|
15542 |
self.network6 = None |
|
15543 |
else: |
|
15544 |
self.network6 = self.op.network6 |
|
15545 |
|
|
15546 |
|
|
15476 | 15547 |
|
15477 | 15548 |
def BuildHooksEnv(self): |
15478 |
pass |
|
15549 |
"""Build hooks env. |
|
15550 |
|
|
15551 |
""" |
|
15552 |
env = { |
|
15553 |
"NETWORK_NAME": self.op.network_name, |
|
15554 |
"NETWORK_SUBNET": self.network.network, |
|
15555 |
"NETWORK_GATEWAY": self.gateway, |
|
15556 |
"NETWORK_SUBNET6": self.network6, |
|
15557 |
"NETWORK_GATEWAY6": self.gateway6, |
|
15558 |
"NETWORK_MAC_PREFIX": self.mac_prefix, |
|
15559 |
"NETWORK_TYPE": self.network_type, |
|
15560 |
} |
|
15561 |
return env |
|
15562 |
|
|
15563 |
def BuildHooksNodes(self): |
|
15564 |
"""Build hooks nodes. |
|
15565 |
|
|
15566 |
""" |
|
15567 |
mn = self.cfg.GetMasterNode() |
|
15568 |
return ([mn], [mn]) |
|
15569 |
|
|
15570 |
def Exec(self, feedback_fn): |
|
15571 |
"""Modifies the network. |
|
15572 |
|
|
15573 |
""" |
|
15574 |
#TODO: reserve/release via temporary reservation manager |
|
15575 |
# extend cfg.ReserveIp/ReleaseIp with the external flag |
|
15576 |
if self.op.gateway: |
|
15577 |
if self.gateway == self.network.gateway: |
|
15578 |
self.LogWarning("Gateway is already %s" % self.gateway) |
|
15579 |
else: |
|
15580 |
if self.gateway: |
|
15581 |
self.pool.Reserve(self.gateway, external=True) |
|
15582 |
if self.network.gateway: |
|
15583 |
self.pool.Release(self.network.gateway, external=True) |
|
15584 |
self.network.gateway = self.gateway |
|
15585 |
|
|
15586 |
if self.op.add_reserved_ips: |
|
15587 |
for ip in self.op.add_reserved_ips: |
|
15588 |
try: |
|
15589 |
if self.pool.IsReserved(ip): |
|
15590 |
self.LogWarning("IP %s is already reserved" % ip) |
|
15591 |
else: |
|
15592 |
self.pool.Reserve(ip, external=True) |
|
15593 |
except errors.AddressPoolError, e: |
|
15594 |
self.LogWarning("Cannot reserve ip %s. %s" % (ip, e)) |
|
15595 |
|
|
15596 |
if self.op.remove_reserved_ips: |
|
15597 |
for ip in self.op.remove_reserved_ips: |
|
15598 |
if ip == self.network.gateway: |
|
15599 |
self.LogWarning("Cannot unreserve Gateway's IP") |
|
15600 |
continue |
|
15601 |
try: |
|
15602 |
if not self.pool.IsReserved(ip): |
|
15603 |
self.LogWarning("IP %s is already unreserved" % ip) |
|
15604 |
else: |
|
15605 |
self.pool.Release(ip, external=True) |
|
15606 |
except errors.AddressPoolError, e: |
|
15607 |
self.LogWarning("Cannot release ip %s. %s" % (ip, e)) |
|
15608 |
|
|
15609 |
if self.op.mac_prefix: |
|
15610 |
self.network.mac_prefix = self.mac_prefix |
|
15611 |
|
|
15612 |
if self.op.network6: |
|
15613 |
self.network.network6 = self.network6 |
|
15614 |
|
|
15615 |
if self.op.gateway6: |
|
15616 |
self.network.gateway6 = self.gateway6 |
|
15617 |
|
|
15618 |
if self.op.network_type: |
|
15619 |
self.network.network_type = self.network_type |
|
15620 |
|
|
15621 |
self.pool.Validate() |
|
15622 |
|
|
15623 |
self.cfg.Update(self.network, feedback_fn) |
|
15479 | 15624 |
|
15480 | 15625 |
|
15481 | 15626 |
class _NetworkQuery(_QueryBase): |
Also available in: Unified diff