Changing the hostname/IP address
================================

Overview
--------

This document is intended to describe the steps that must be taken if you need
to change your Linux Management Node's hostname and/or IP address
after the cluster is installed and configured by xCAT. This documentation will
only cover the changes by xCAT and will not try to cover any other changes by
any other tools.

Backup your xCAT data
---------------------

Clean up the database by running ``tabprune`` command: ::

  tabprune -a auditlog
  tabprune -a eventlog

Now take a snapshot of the Management Node. This will also create a database
backup. You can use this data as reference if needed. ::

  xcatsnap -d

Stop xCAT
---------

You need to stop the xcat daemon and any other applications that are using the
xCAT database on the Management Node and the Service Nodes. To determine your
database, run ::

  lsxcatd -a | grep dbengine

To stop xCAT: ::

  service xcatd stop

Stop The Database
-----------------

For all databases except SQlite, you should stop the database.
For example ::

  service postgresql stop
  service mysqld stop

Change the Management Hostname
-------------------------------

* hostname command ::

    hostname <new_MN_name>

* Edit hostname configuration file

  |  Add hostname in ``/etc/hostname``
  |  Add HOSTNAME attribute in ``/etc/sysconfig/network`` (only for [RHEL])

Update Database Files
---------------------

You need to update the new MN hostname or IP address in several database
configuration files.

SQLite
^^^^^^

Nothing to do.

Postgresql
^^^^^^^^^^

- Edit ``/etc/xcat/cfgloc`` file, replace ``Pg:dbname=xcatdb;host=<old_MN_ip>|xcatadm|xcat20``
  with ``Pg:dbname=xcatdb;host=<new_MN_ip>|xcatadm|xcat20``.

- Edit config database config file ``/var/lib/pgsql/data/pg_hba.conf``,
  replace ``host    all          all        <old_MN_ip>/32      md5``
  with ``host    all          all        <new_MN_ip>/32      md5``.

Mysql
^^^^^

Edit ``/etc/xcat/cfglooc``, replace ``mysql:dbname=xcatdb;host=<old_MN_ip>|xcatadmin|xcat20``
with ``mysql:dbname=xcatdb;host=<new_MN_ip>|xcatadmin|xcat20``.

Start the database
------------------

::

   service postgresql start
   service mysqld start

Start xCAT

::

   service xcatd start

Verify your new database setup ::

  lsxcatd -a | grep dbengine
  tabdump site  # if output exists

Change The Definition In xCAT Database
--------------------------------------

Change the site table master attribute
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

::

  chdef -t site master=<new_MN_ip>

Change all IP address attribute relevant to the MN IP address
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

For example, old address was "10.6.0.1"

* Query the attributes with old address ::

    lsdef -t node -l | grep "10.6.0.1"
    # the output may looks like
      conserver=10.6.0.1
      conserver=10.6.0.1
      conserver=10.6.0.1
      conserver=10.6.0.1
      nfsserver=10.6.0.1
      servicenode=10.6.0.1
      xcatmaster=10.6.0.1
      kcmdline=quiet repo=http://10.6.0.1/install/rhels6/ppc64/ ks=http://10.6.0.1/install/autoinst
      /slessn ksdevice=d6:92:39:bf:71:05
      nfsserver=10.6.0.1
      servicenode=10.6.0.1
      tftpserver=10.6.0.1
      xcatmaster=10.6.0.1
      servicenode=10.6.0.1
      xcatmaster=10.6.0.1

* As the attribute with the old IP address is list above, take conserver as
  a example, query the nodes with ``conserver=10.6.0.1``.

  ::

    lsdef -t node -w conserver="10.6.0.1"
    # the output looks like
      cn1  (node)
      cn2  (node)
      cn3  (node)
      cn4  (node)

* Change the conserver address for cn1,cn2,cn3,cn4 ::

    chdef -t node cn1-cn4 conserver=<new_ip_address>

Repeat the same process for the other attributes.

Change networks table
^^^^^^^^^^^^^^^^^^^^^^

Check your networks table to see if the network definitions are still correct,
if not edit accordingly ::

  lsdef -t network -l
  chdef -t network <key=value>

Check Result
^^^^^^^^^^^^^

You can check whether all the old address has been changed using ::

  dumpxCATdb -P <new database backup path>
  cd <new database backup path>
  fgrep "10.6.0.1" *.csv

If the old address still exists in the ``*.csv` file, you can edit this file,
then use the following command to restore the records ::

  tabrestore <xxx.csv>

Generate SSL credentials(optional)
----------------------------------

If you do not generate new credentials, skip this section.
If you decide generate new credentials, then you will use the following
command.

* Generate new credentials ::

    xcatconfig -c

* Update the policy table with new MN name,
  replace ``"1.4","old_MN_name",,,,,,"trusted",,`` with
  ``"1.4","new_MN_name",,,,,,"trusted",,``

* Setup up conserver with new credentials ::

    makeconservercf

External DNS Server Changed
---------------------------

* Update nameserver entries in ``/etc/resolv.conf``
* Update nameserver attribute in ``site`` table ::

    chdef -t site -o clustersite nameservers="new_ip_address1,new_ip_address2"

* Update site forwarders in DB ::

    chdef -t site -o clustersite forwarders="new_ip_address1,new_ip_address2"

* Run command ``makedns -n``

Domain Name Changed
-------------------

Change the entries in ``/etc/hosts``.

Change the ``/etc/resolv.conf``, forwarders attribute in site table. ::

  lsdef -t site -o clustersite -i forwarders
  chdef -t site -o clustersite forwarders <new list>

Change the domain name in the xCAT database site table. ::

  chdef -t site -o clustersite domain=<new_domainname>

From xCAT 2.8, multiple domains is supported in the cluster. Update the
networks table definition. ::

  lsdef -t network -l
  chdef -t network -o <network_name> ddnsdomain=<new_domainname1,new_domainname2>

Update the Provision Environment
--------------------------------

Determine if the Management node is defined in the database, assuming it was
done correctly using xcatconfig -m, by running: ::

  lsdef __mgmtnode

If it exists, then use the return name and do the following:

  - Remove the MN from DNS configuration ::

      makedns -d <old_MN_name>

  - Remove the MN from the DHCP configuration ::

      makedns -d <old_MN_name>

  - Remove the MN from the conserver configuration ::

      makedns -d <old_MN_name>

  - Change the MN name in the xCAT database ::

      chdef -t node -o <old_MN_name> -n <new_MN_name>

  - Add the new MN to DNS ::

      makedns -n

  - Add the MN to dhcp ::

      makedhcp -a

  - Add the MN to conserver ::

      makeconservercf

Update the genesis packages
---------------------------

Run ``mknb <arch>`` after changing the ip of MN.

