summaryrefslogtreecommitdiff
path: root/leap-platform-test
blob: 83b7153f0443ebf8534f49e3ceade603b7d21d8e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#!/bin/bash

usage()
{
cat << EOF

usage: $0 [options] command [arguments...]

This script runs the leap platform deploy tests

OPTIONS

  -c|--config file      specify config file   
  -a|--all              run command on all nodes
  -h|--help             show help

COMMANDS
  deploy       <node>   deploy node
  reset_deploy <node>   reset and deploy node

EOF
}

compile () {
  leap $OPTS clean
  leap $OPTS compile
}


deploy() {
  vm=$1
  LOG="$LOGDIR/deploy-$vm.log"
  ERRLOG="$LOGDIR/deploy-$vm-`date +"%F-%H%M%S"`-error.log"

  # remove colors until #1751 is fixed
  RMCOLORS='s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g'

  # we need to deploy with verbose level 2, and filter out unwanted stuff
  # until puppet errors show up in verbose level 0 +1 (#1750)
  FILTER_CLI='= read|= loading|= no change|   - executing| = executing| = applying| = ran git| = checking| = synching| = skipping file_path|   - cd .*; rsync -a|   - hiera| = created hiera/|   - cd /root/|   - rolling backexecuting|   - files/ca/client_ca.crt|\[bin,puppet\] ->'
  FILTER_PUPPET='] notice: |] No change to hostname|] Puppet apply complete|] warning: Dynamic lookup|] warning: Scope\(Class'
  FILTER_ALL="($FILTER_CLI|$FILTER_PUPPET)"


  echo "Deploying \"$vm\" on `date`"|tee -a $LOG

  leap $OPTS -v 2 deploy $vm 2>&1 |  sed -r "$RMCOLORS" | tee -a $LOG | egrep -v "$FILTER_ALL" > $ERRLOG


  if [ $? -eq 0 ]
  then
    msg="From: $MAIL_FROM\nTo: $MAIL_TO\nSubject: Deploy to \"$vm\" had errors !\n\n`cat $ERRLOG`"
    echo "Deploy to \"$vm\" on `date` had errors." | tee -a $LOG
    echo
    cat $ERRLOG 
    
    if [ "$MAIL_TO" != '' ]; then
      echo "Sending this mail to $MAIL_TO:"
      printf "$msg" | sendmail -t
    fi

  else
    echo "Deploy to $vm on `date` went fine."| tee -a $LOG
  fi
} 

reset_deploy() {

  compile

  echo "Starting deploy_nodes for nodes $@ as background tasks on `date`"

  for i in $@
  do
    leap $OPTS local reset $i
    # only sleep one time
    if $need_to_sleep ; then
      echo "Waiting $SLEEP secs for VM to come up..."
      sleep $SLEEP
      need_to_sleep=false
    fi
    echo $i
    deploy $i &
  done
}


config=""
all=false

if ! options=$(getopt -o ac:h -l all,config:,help -- "$@")
then 
  # something went wrong, getopt will put out an error message for us
  usage
  exit 1
fi  

eval set -- "$options"

while [ $# -gt 0 ]
do
  case $1 in
    -h|--help)     usage; exit 1;;
    -c|--config)   config=$2; shift ;;
    -a|--all)      all=true;;
    -v|--verbose)  VERBOSE=1 ;;
    (--) shift; break;;
    (-*) echo "$0: error - unrecognized option $1" 1>&2; exit 1;;
    (*) break;;
  esac
  shift
done


cmd=$1
shift
nodelist=$@

echo "config:   $config"
echo "cmd:      $cmd"
echo "nodelist: $nodelist"
echo "all:      $all"
#echo "remaining:    $@"

if [ -z $config ]
then
  usage
  echo "Please provide a config file"
  exit 1
fi

source $config
cd  $ROOTDIR/$PROVIDER

if ! $all ; then
  nodes=$nodelist
else
  nodes=$NODES
fi

echo
echo "Starting $0 on `date`"

case $cmd in 
  deploy)       deploy "$nodes";;
  reset_deploy) reset_deploy "$nodes";;
esac