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