==============
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:

Bootstrap salt-minion:

.. code-block:: bash

  export HTTPS_PROXY="http://proxy.your.corp:8080"; export HTTP_PROXY=$HTTPS_PROXY
  
  export MASTER_HOSTNAME=cfg01.infra.ci.local || export MASTER_IP=10.0.0.10
  export MINION_ID=$(hostname -f)             || export HOSTNAME=prx01 DOMAIN=infra.ci.local
  source <(curl -qL https://raw.githubusercontent.com/salt-formulas/salt-formulas-scripts/master/bootstrap.sh)
  install_salt_minion_pkg


Bootstrap salt-master:

.. code-block:: bash

  cd /srv/salt/scripts
  CLUSTER_NAME=regionOne HOSTNAME=cfg01 DOMAIN=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
  HOSTNAME=cfg01 DOMAIN=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
  HOSTNAME=cfg01 DOMAIN=infra.ci.local ./verify.sh          # or just ./verify.sh

  
  # individuall minions, 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
    # Following variables are calculated from the above if not provided
    #export MINION_ID
    #export MASTER_HOSTNAME
    #export MASTER_IP

    # 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"

  
  
  
  


