Revision ba5619c2

b/lib/cmdlib.py
7802 7802
        connect_timeout = constants.RIE_CONNECT_TIMEOUT
7803 7803
        timeouts = masterd.instance.ImportExportTimeouts(connect_timeout)
7804 7804

  
7805
        disk_results = masterd.instance.RemoteImport(self, feedback_fn, iobj,
7806
                                                     self.source_x509_ca,
7807
                                                     self._cds, timeouts)
7805
        assert iobj.primary_node == self.pnode.name
7806
        disk_results = \
7807
          masterd.instance.RemoteImport(self, feedback_fn, iobj, self.pnode,
7808
                                        self.source_x509_ca,
7809
                                        self._cds, timeouts)
7808 7810
        if not compat.all(disk_results):
7809 7811
          # TODO: Should the instance still be started, even if some disks
7810 7812
          # failed to import (valid for local imports, too)?
......
9551 9553
        self.LogWarning("Could not remove metadata for disk %d on node %s,"
9552 9554
                        " continuing anyway: %s", idx, pnode, msg)
9553 9555

  
9554

  
9555 9556
  def Exec(self, feedback_fn):
9556 9557
    """Modifies an instance.
9557 9558

  
b/lib/masterd/instance.py
1270 1270
    try:
1271 1271
      for idx, (dev, (host, port, magic)) in enumerate(zip(instance.disks,
1272 1272
                                                           disk_info)):
1273
        # Decide whether to use IPv6
1274
        ipv6 = netutils.IP6Address.IsValid(host)
1275

  
1273 1276
        opts = objects.ImportExportOptions(key_name=key_name,
1274 1277
                                           ca_pem=dest_ca_pem,
1275
                                           magic=magic)
1278
                                           magic=magic, ipv6=ipv6)
1276 1279

  
1277 1280
        self._feedback_fn("Sending disk %s to %s:%s" % (idx, host, port))
1278 1281
        finished_fn = compat.partial(self._TransferFinished, idx)
......
1404 1407
    self._dresults[idx] = bool(ie.success)
1405 1408

  
1406 1409

  
1407
def RemoteImport(lu, feedback_fn, instance, source_x509_ca, cds, timeouts):
1410
def RemoteImport(lu, feedback_fn, instance, pnode, source_x509_ca,
1411
                 cds, timeouts):
1408 1412
  """Imports an instance from another cluster.
1409 1413

  
1410 1414
  @param lu: Logical unit instance
1411 1415
  @param feedback_fn: Feedback function
1412 1416
  @type instance: L{objects.Instance}
1413 1417
  @param instance: Instance object
1418
  @type pnode: L{objects.Node}
1419
  @param pnode: Primary node of instance as an object
1414 1420
  @type source_x509_ca: OpenSSL.crypto.X509
1415 1421
  @param source_x509_ca: Import source's X509 CA
1416 1422
  @type cds: string
......
1424 1430

  
1425 1431
  magic_base = utils.GenerateSecret(6)
1426 1432

  
1433
  # Decide whether to use IPv6
1434
  ipv6 = netutils.IP6Address.IsValid(pnode.primary_ip)
1435

  
1427 1436
  # Create crypto key
1428 1437
  result = lu.rpc.call_x509_cert_create(instance.primary_node,
1429 1438
                                        constants.RIE_CERT_VALIDITY)
......
1440 1449
      utils.SignX509Certificate(x509_cert, cds, utils.GenerateSecret(8))
1441 1450

  
1442 1451
    cbs = _RemoteImportCb(feedback_fn, cds, signed_x509_cert_pem,
1443
                          len(instance.disks), instance.primary_node)
1452
                          len(instance.disks), pnode.primary_ip)
1444 1453

  
1445 1454
    ieloop = ImportExportLoop(lu)
1446 1455
    try:
......
1450 1459
        # Import daemon options
1451 1460
        opts = objects.ImportExportOptions(key_name=x509_key_name,
1452 1461
                                           ca_pem=source_ca_pem,
1453
                                           magic=magic)
1462
                                           magic=magic, ipv6=ipv6)
1454 1463

  
1455 1464
        ieloop.Add(DiskImport(lu, instance.primary_node, opts, instance,
1456 1465
                              constants.IEIO_SCRIPT, (dev, idx),
......
1554 1563
  if not utils.VerifySha1Hmac(cds, msg, hmac_digest, salt=hmac_salt):
1555 1564
    raise errors.GenericError("HMAC is wrong")
1556 1565

  
1557
  return (netutils.Hostname.GetNormalizedName(host),
1566
  if netutils.IP6Address.IsValid(host) or netutils.IP4Address.IsValid(host):
1567
    destination = host
1568
  else:
1569
    destination = netutils.Hostname.GetNormalizedName(host)
1570

  
1571
  return (destination,
1558 1572
          utils.ValidateServiceName(port),
1559 1573
          magic)
1560 1574

  

Also available in: Unified diff