============================
Deploying the infrastructure
============================

Introduction
============

The deployment infrastructure is composed of:

 - one sysdb server;
 - one puppet server;
 - one repository server.

We currently have two infrastructures in place, one for testing and the
other for production, with the following hostnames:

+--------------------+----------------+-----------------+
| Role               | testing host   | production host |
+====================+================+=================+
| sysdb server       | boot00-test    | boot00          |
+--------------------+----------------+-----------------+
| puppet server      | puppet00-test  | puppet01        |
+--------------------+----------------+-----------------+
| repository server  | repo00-test    | repo00          |
+--------------------+----------------+-----------------+

The Sysdb Server
----------------

The sysdb server is a server running HTTP(S) services needed by
other components of the deployment infrastructure, specifically to:

  - setup (add/remove/modify) the hosts managed by the system;
  - get the iPXE file for the managed hosts;
  - get the Kickstart file for the managed hosts.

The code for these services is avaiable at `<https://git.psi.ch/linux-infra-software/sysdb>`_.
  
the Puppet Server
-----------------

The puppet server is a rather standard puppet master, configured to
use ``sysdb`` informations as ENC.

The Repo Server
---------------

The service that provides clones of different repositories (RHEL,
Puppetlabs, Google Chrome) plus some internally developed ones for
specific products (eg. GPFS).

You can reach the production one at: `<http://repo00.psi.ch/el7/>`_.

Deployment of an infrastructure server
======================================

The procedure is not fully automated and completely documented.

The reference repo server is `<https://git.psi.ch/linux-infra/bootstrap>`_.

The installation of an infrastructure server uses:
  - ETH repositories (since the repo server is not assumed to be available)
  - PXE only and static kickstart file (since the boot server is not supposed to be available)

After the installation, inside ``/root/bootstrap/instcode`` there is a script for each
server, called ``{puppet,boot,repo}-server``.
The script should be run manually and some user interaction is needed.

Before to install you need to have:
- a copy of the ssh root user keys and ssh server keys
- a Red Hat Satellite Key. You can get it via the RHN Satellite Account at ETH

So to install eg. ``puppet00-test`` the procedure would be:

   - ensure on the Satellite web site that the system is not present (Systems-> Overview page)
   - copy the kickstart on ``/afs/psi.ch/project/linux/www/kickstart/configs/linux-infra/``
   - copy the pxe in ``/afs/psi.ch/service/linux/tftpboot/pxelinux.cfg/``
   - install the server booting from network
   - after the installation the server will stop
   - reboot it
   - login on the server
   - copy the ssh key
   - enter the ``/root/bootstrap/instcode`` directory
   - optionally change the branch
   - run ``./puppet-server``


Please note that in some cases the ETH repo used during the
installation is not properly working.

In the case you are not redeploying the repo server, then it can be
used instead of the ETH one, changing properly the PXE and the
kickstart file.

