==============
Deploy scripts
==============

This ``deploy/scripts`` serve as shared common place to link any deployment tools.


**bootstrap-salt.sh**
**bootstrap-salt.ps1**

Salt bootstrap scripts. Local copy of upstream `https://bootstrap.saltstack.com/`_.

**bootstrap.sh**

Script with function library to 
* install and configure *salt master* and *minions*
* bootstrap *salt master* with *salt-formulas* common prerequisites in mind
* validate reclass the model / pillar for all nodes

TL;DR:

.. code-block:: bash

  cd /srv/salt/scripts
  MASTER_HOSTNAME=cfg01.infra.ci.local ./bootstrap.sh

.. note:
  Creates /srv/salt/scripts/.salt-master-setup.sh.passed if succesfully passed the "setup script" 
  with the aim to avoid subsequent setup.


**salt-master-setup.sh** (DEPRECATED, use bootstrap.sh instead)

Script to install and configure salt *minion* but mostly *salt master* with *salt-formulas* common prerequisites in mind.
Configuration driven by environment variables, see source for more details...


**salt-master-init.sh** (DEPRECATED, use bootstrap.sh instead)

Script to bootstrap *salt master* and verify the model. To install salt master uses ``salt-master-setup.sh``.
Configuration driven by environment variables.


**formula-fetch.sh**

Script to install formulas with dependencies.


**salt-state-apply-trend.sh**

Simple script to invoking highstate on whole infrastructure with ``test=true``. Json output is aggregated with `jq`
(Failed/Success/Changes/Errors) and compared with previous run.


Bootstrap the Salt Master node
==============================
(expects salt-formulas reclass model repo)

.. code-block:: bash

  git clone https://github.com/salt-formulas/salt-formulas-scripts /srv/salt/scripts

  git clone <model-repository> /srv/salt/reclass
  cd /srv/salt/reclass
  git submodule update --init --recursive
  
  # OR (if system level is not add yet)
  git submodule add https://github.com/Mirantis/reclass-system-salt-model \
    /srv/salt/reclass/classes/system/

  cd /srv/salt/scripts
  MASTER_HOSTNAME=cfg01.infra.ci.local ./bootstrap.sh
  
  
Verify
------
Get the *verify.sh* script from https://github.com/salt-formulas/salt-formulas/tree/master/deploy/model

.. code-block:: bash

  cd /srv/salt/reclass
  MASTER_HOSTNAME=$(hostname -f) ./verify.sh
  
  # or individually, if minions get generated under nodes/_generated
  ./verify.sh ctl01.k8s-cis-virtual.local
  
  
Additional bootstrap ENV variables
----------------------------------
(for full list of options see the *bootstrap.sh* source)
  
.. code-block:: bash

    # reclass
    export RECLASS_ADDRESS=<repo url>   ## if not already cloned in /srv/salt/reclass >

    # formula
    export FORMULAS_BRANCH=master
    export FORMULAS_SOURCE=git

    # system / host / salt master minion id
    export HOSTNAME=cfg01
    export DOMAIN=infra.ci.local
    #export MINION_ID

    # salt
    export BOOTSTRAP_SALTSTACK_OPTS=" -dX stable 2016.3"
    export EXTRA_FORMULAS="prometeus"
    SALT_SOURCE=${SALT_SOURCE:-pkg}
    SALT_VERSION=${SALT_VERSION:-latest}
    
    # bootstrap
    export SALT_MASTER_BOOTSTRAP_MINIMIZED=False
    export CLUSTER_NAME=<%= cluster %>
    
    # workarounds
    export RECLASS_IGNORE_CLASS_NOTFOUND=False
    export EXTRA_FORMULAS="prometheus telegraph"

  
  
  
  


