Revision 66c844a3

b/lib/cmdlib.py
1313 1313
  """Wrapper over L{_ExpandItemName} for instance."""
1314 1314
  return _ExpandItemName(cfg.ExpandInstanceName, name, "Instance")
1315 1315

  
1316
def _BuildNetworkHookEnv(name, network, gateway, network6, gateway6,
1317
                         network_type, mac_prefix):
1318
  env = dict()
1319
  if name:
1320
    env["NETWORK_NAME"] = name
1321
  if network:
1322
    env["NETWORK_SUBNET"] = network
1323
  if gateway:
1324
    env["NETWORK_GATEWAY"] = gateway
1325
  if network6:
1326
    env["NETWORK_SUBNET6"] = network6
1327
  if gateway6:
1328
    env["NETWORK_GATEWAY6"] = gateway6
1329
  if mac_prefix:
1330
    env["NETWORK_MAC_PREFIX"] = mac_prefix
1331
  if network_type:
1332
    env["NETWORK_TYPE"] = network_type
1333

  
1334
  return env
1335

  
1336

  
1337
def _BuildNetworkHookEnvByObject(lu, network):
1338
  args = {
1339
    "name": network.name,
1340
    "network": network.network,
1341
    "gateway": network.gateway,
1342
    "network6": network.network6,
1343
    "gateway6": network.gateway6,
1344
    "network_type": network.network_type,
1345
    "mac_prefix": network.mac_prefix,
1346
  }
1347
  return _BuildNetworkHookEnv(**args)
1348

  
1316 1349

  
1317 1350
def _BuildInstanceHookEnv(name, primary_node, secondary_nodes, os_type, status,
1318 1351
                          minmem, maxmem, vcpus, nics, disk_template, disks,
......
1373 1406
  }
1374 1407
  if nics:
1375 1408
    nic_count = len(nics)
1376
    for idx, (ip, mac, mode, link, network) in enumerate(nics):
1409
    for idx, (ip, mac, mode, link, network, netinfo) in enumerate(nics):
1377 1410
      if ip is None:
1378 1411
        ip = ""
1379 1412
      env["INSTANCE_NIC%d_IP" % idx] = ip
1380 1413
      env["INSTANCE_NIC%d_MAC" % idx] = mac
1381 1414
      env["INSTANCE_NIC%d_MODE" % idx] = mode
1382 1415
      env["INSTANCE_NIC%d_LINK" % idx] = link
1383
      env["INSTANCE_NIC%d_NETWORK" % idx] = network
1416
      if network:
1417
        env["INSTANCE_NIC%d_NETWORK" % idx] = network
1418
        if netinfo:
1419
          nobj = objects.Network.FromDict(netinfo)
1420
          if nobj.network:
1421
            env["INSTANCE_NIC%d_NETWORK_SUBNET" % idx] = nobj.network
1422
          if nobj.gateway:
1423
            env["INSTANCE_NIC%d_NETWORK_GATEWAY" % idx] = nobj.gateway
1424
          if nobj.network6:
1425
            env["INSTANCE_NIC%d_NETWORK_SUBNET6" % idx] = nobj.network6
1426
          if nobj.gateway6:
1427
            env["INSTANCE_NIC%d_NETWORK_GATEWAY6" % idx] = nobj.gateway6
1428
          if nobj.mac_prefix:
1429
            env["INSTANCE_NIC%d_NETWORK_MAC_PREFIX" % idx] = nobj.mac_prefix
1430
          if nobj.network_type:
1431
            env["INSTANCE_NIC%d_NETWORK_TYPE" % idx] = nobj.network_type
1384 1432
      if mode == constants.NIC_MODE_BRIDGED:
1385 1433
        env["INSTANCE_NIC%d_BRIDGE" % idx] = link
1386 1434
  else:
......
1409 1457

  
1410 1458
  return env
1411 1459

  
1460
def _NICToTuple(lu, nic):
1461
  """Build a tupple of nic information.
1462

  
1463
  @type lu:  L{LogicalUnit}
1464
  @param lu: the logical unit on whose behalf we execute
1465
  @type nic: L{objects.NIC}
1466
  @param nic: nic to convert to hooks tuple
1467

  
1468
  """
1469
  cluster = lu.cfg.GetClusterInfo()
1470
  ip = nic.ip
1471
  mac = nic.mac
1472
  filled_params = cluster.SimpleFillNIC(nic.nicparams)
1473
  mode = filled_params[constants.NIC_MODE]
1474
  link = filled_params[constants.NIC_LINK]
1475
  network = nic.network
1476
  netinfo = None
1477
  if network:
1478
    net_uuid = lu.cfg.LookupNetwork(network)
1479
    if net_uuid:
1480
      nobj = lu.cfg.GetNetwork(net_uuid)
1481
      netinfo = objects.Network.ToDict(nobj)
1482
  return (ip, mac, mode, link, network, netinfo)
1412 1483

  
1413 1484
def _NICListToTuple(lu, nics):
1414 1485
  """Build a list of nic information tuples.
......
1425 1496
  hooks_nics = []
1426 1497
  cluster = lu.cfg.GetClusterInfo()
1427 1498
  for nic in nics:
1428
    ip = nic.ip
1429
    mac = nic.mac
1430
    filled_params = cluster.SimpleFillNIC(nic.nicparams)
1431
    mode = filled_params[constants.NIC_MODE]
1432
    link = filled_params[constants.NIC_LINK]
1433
    network = nic.network
1434
    hooks_nics.append((ip, mac, mode, link, network))
1499
    hooks_nics.append(_NICToTuple(lu, nic))
1435 1500
  return hooks_nics
1436 1501

  
1437

  
1438 1502
def _BuildInstanceHookEnvByObject(lu, instance, override=None):
1439 1503
  """Builds instance related env variables for hooks from an object.
1440 1504

  
......
12339 12403
      nics = []
12340 12404

  
12341 12405
      for nic in self._new_nics:
12342
        nicparams = self.cluster.SimpleFillNIC(nic.nicparams)
12343
        mode = nicparams[constants.NIC_MODE]
12344
        link = nicparams[constants.NIC_LINK]
12345
        nics.append((nic.ip, nic.mac, mode, link, nic.network))
12406
        n = copy.deepcopy(nic)
12407
        nicparams = self.cluster.SimpleFillNIC(n.nicparams)
12408
        n.nicparams = nicparams
12409
        nics.append(_NICToTuple(self, n))
12346 12410

  
12347 12411
      args["nics"] = nics
12348 12412

  
......
15514 15578
    """Build hooks env.
15515 15579

  
15516 15580
    """
15517
    env = {
15518
      "NETWORK_NAME": self.op.network_name,
15519
      "NETWORK_SUBNET": self.op.network,
15520
      "NETWORK_GATEWAY": self.op.gateway,
15521
      "NETWORK_SUBNET6": self.op.network6,
15522
      "NETWORK_GATEWAY6": self.op.gateway6,
15523
      "NETWORK_MAC_PREFIX": self.op.mac_prefix,
15524
      "NETWORK_TYPE": self.op.network_type,
15581
    args = {
15582
      "name": self.op.network_name,
15583
      "network": self.op.network,
15584
      "gateway": self.op.gateway,
15585
      "network6": self.op.network6,
15586
      "gateway6": self.op.gateway6,
15587
      "mac_prefix": self.op.mac_prefix,
15588
      "network_type": self.op.network_type,
15525 15589
      }
15526
    return env
15590
    return _BuildNetworkHookEnv(**args)
15527 15591

  
15528 15592
  def Exec(self, feedback_fn):
15529 15593
    """Add the ip pool to the cluster.
......
15718 15782
    """Build hooks env.
15719 15783

  
15720 15784
    """
15721
    env = {
15722
      "NETWORK_NAME": self.op.network_name,
15723
      "NETWORK_SUBNET": self.network.network,
15724
      "NETWORK_GATEWAY": self.gateway,
15725
      "NETWORK_SUBNET6": self.network6,
15726
      "NETWORK_GATEWAY6": self.gateway6,
15727
      "NETWORK_MAC_PREFIX": self.mac_prefix,
15728
      "NETWORK_TYPE": self.network_type,
15785
    args = {
15786
      "name": self.op.network_name,
15787
      "network": self.network.network,
15788
      "gateway": self.gateway,
15789
      "network6": self.network6,
15790
      "gateway6": self.gateway6,
15791
      "mac_prefix": self.mac_prefix,
15792
      "network_type": self.network_type,
15729 15793
      }
15730
    return env
15794
    return _BuildNetworkHookEnv(**args)
15731 15795

  
15732 15796
  def BuildHooksNodes(self):
15733 15797
    """Build hooks nodes.
......
15946 16010
  def BuildHooksEnv(self):
15947 16011
    ret = dict()
15948 16012
    ret["GROUP_NAME"] = self.group_name
15949
    ret["GROUP_NETWORK_NAME"] = self.network_name
15950 16013
    ret["GROUP_NETWORK_MODE"] = self.network_mode
15951 16014
    ret["GROUP_NETWORK_LINK"] = self.network_link
16015
    ret.update(_BuildNetworkHookEnvByObject(self, self.network))
15952 16016
    return ret
15953 16017

  
15954 16018
  def BuildHooksNodes(self):
......
16040 16104
  def BuildHooksEnv(self):
16041 16105
    ret = dict()
16042 16106
    ret["GROUP_NAME"] = self.group_name
16043
    ret["GROUP_NETWORK_NAME"] = self.network_name
16107
    ret.update(_BuildNetworkHookEnvByObject(self, self.network))
16044 16108
    return ret
16045 16109

  
16046 16110
  def BuildHooksNodes(self):

Also available in: Unified diff