Slave.jar renamed to Agent.jar
[releng.git] / utils / jenkins-jnlp-connect.sh
index 9ef4298..17c03b0 100755 (executable)
@@ -8,13 +8,16 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
-#Monit setup script for opnfv jnlp slave connections
+#Monit setup script for opnfv jnlp agent connections
 
 test_firewall() {
 
 test_firewall() {
-    echo "testing that the firewall is open for us at build.opnfv.org"
-    test=$(echo "blah"| nc -w 4 build.opnfv.org 57387 > /dev/null 2>&1; echo $?)
+jenkins_hostname="${jenkins_hostname:-build.opnfv.org}"
+
+
+    echo "testing that the firewall is open for us at $jenkins_hostname"
+    test=$(echo "blah"| nc -w 4 $jenkins_hostname 57387 > /dev/null 2>&1; echo $?)
     if [[ $test == 0 ]]; then
     if [[ $test == 0 ]]; then
-        echo "Firewall is open for us at build.opnfv.org"
+        echo "Firewall is open for us at $jenkins_hostname"
         exit 0
     else
         cat << EOF
         exit 0
     else
         cat << EOF
@@ -22,7 +25,7 @@ LF firewall not open, please send a report to helpdesk with your gpg key attache
 opnfv-helpdesk@rt.linuxfoundation.org
 Jenkins Home: $jenkinshome
 Jenkins User: $jenkinsuser
 opnfv-helpdesk@rt.linuxfoundation.org
 Jenkins Home: $jenkinshome
 Jenkins User: $jenkinsuser
-Slave Name: $slave_name
+Slave Name: $agent_name
 IP Address: $(curl -s http://icanhazip.com)
 EOF
         exit 1
 IP Address: $(curl -s http://icanhazip.com)
 EOF
         exit 1
@@ -30,8 +33,6 @@ EOF
 }
 
 main () {
 }
 
 main () {
-    dir=$(cd $(dirname $0); pwd)
-
     #tests
     if [[ -z $jenkinsuser || -z $jenkinshome ]]; then
         echo "jenkinsuser or home not defined, please edit this file to define it"
     #tests
     if [[ -z $jenkinsuser || -z $jenkinshome ]]; then
         echo "jenkinsuser or home not defined, please edit this file to define it"
@@ -43,8 +44,8 @@ main () {
         exit 1
     fi
 
         exit 1
     fi
 
-    if [[ -z $slave_name || -z $slave_secret ]]; then
-        echo "slave name or secret not defined, please edit this file to define it"
+    if [[ -z $agent_name || -z $agent_secret ]]; then
+        echo "agent name or secret not defined, please edit this file to define it"
         exit 1
     fi
 
         exit 1
     fi
 
@@ -54,28 +55,17 @@ main () {
     fi
 
     if [[ $(whoami) != "root" ]]; then
     fi
 
     if [[ $(whoami) != "root" ]]; then
-      if sudo -l | grep "requiretty"; then
+      if sudo -l | grep "requiretty"  | grep -v "\!requiretty"; then
         echo "please comment out Defaults requiretty from /etc/sudoers"
         exit 1
       fi
     fi
 
         echo "please comment out Defaults requiretty from /etc/sudoers"
         exit 1
       fi
     fi
 
-
-    if [ -d /etc/monit/conf.d ]; then
-        monitconfdir="/etc/monit/conf.d/"
-    elif [ -d /etc/monit.d ]; then
-        monitconfdir="/etc/monit.d"
-    else
-        echo "Could not determine the location of the monit configuration file."
-        echo "Make sure monit is installed."
-        exit 1
-    fi
-
     #make pid dir
     pidfile="/var/run/$jenkinsuser/jenkins_jnlp_pid"
     if ! [ -d /var/run/$jenkinsuser/ ]; then
     #make pid dir
     pidfile="/var/run/$jenkinsuser/jenkins_jnlp_pid"
     if ! [ -d /var/run/$jenkinsuser/ ]; then
-        mkdir /var/run/$jenkinsuser/
-        chown $jenkinsuser:$jenkinsuser /var/run/$jenkinsuser/
+        sudo mkdir /var/run/$jenkinsuser/
+        sudo chown $jenkinsuser:$jenkinsuser /var/run/$jenkinsuser/
     fi
 
     if [[ $skip_monit != true ]]; then
     fi
 
     if [[ $skip_monit != true ]]; then
@@ -94,66 +84,97 @@ main () {
                 exit 1
             fi
         fi
                 exit 1
             fi
         fi
-    fi
 
 
-    makemonit () {
-        echo "Writing the following as monit config:"
+        if [ -d /etc/monit/conf.d ]; then
+            monitconfdir="/etc/monit/conf.d/"
+            monitconfig="/etc/monit/monitrc"
+            #add start delay
+            sed -i '/^#.* delay /s/^#//' "$monitconfig"
+        elif [ -d /etc/monit.d ]; then
+            monitconfdir="/etc/monit.d"
+            monitconfig="/etc/monitrc"
+            #add start delay
+            sed -i '/^#.* delay /s/^#//' "$monitconfig"
+        else
+            echo "Could not determine the location of the monit configuration file."
+            echo "Make sure monit is installed."
+            exit 1
+        fi
+
+        chown=$(type -p chown)
+        mkdir=$(type -p mkdir)
+
+        makemonit () {
+            echo "Writing the following as monit config:"
         cat << EOF | tee $monitconfdir/jenkins
         cat << EOF | tee $monitconfdir/jenkins
+check directory jenkins_piddir path /var/run/$jenkinsuser
+if does not exist then exec "$mkdir -p /var/run/$jenkinsuser"
+if failed uid $jenkinsuser then exec "$chown $jenkinsuser /var/run/$jenkinsuser"
+if failed gid $jenkinsuser then exec "$chown :$jenkinsuser /var/run/$jenkinsuser"
+
 check process jenkins with pidfile /var/run/$jenkinsuser/jenkins_jnlp_pid
 check process jenkins with pidfile /var/run/$jenkinsuser/jenkins_jnlp_pid
-start program = "/usr/bin/sudo -u $jenkinsuser /bin/bash -c 'cd $dir; export started_monit=true; $0 $@' with timeout 60 seconds"
+start program = "/usr/bin/sudo -u $jenkinsuser /bin/bash -c 'cd $jenkinshome; export started_monit=true; $0 $@' with timeout 60 seconds"
 stop program = "/bin/bash -c '/bin/kill \$(/bin/cat /var/run/$jenkinsuser/jenkins_jnlp_pid)'"
 stop program = "/bin/bash -c '/bin/kill \$(/bin/cat /var/run/$jenkinsuser/jenkins_jnlp_pid)'"
+depends on jenkins_piddir
 EOF
 EOF
-    }
+        }
+
+        if [[ -f $monitconfdir/jenkins ]]; then
+            #test for diff
+            if [[ "$(diff $monitconfdir/jenkins <(echo "\
+check directory jenkins_piddir path /var/run/$jenkinsuser
+if does not exist then exec \"$mkdir -p /var/run/$jenkinsuser\"
+if failed uid $jenkinsuser then exec \"$chown $jenkinsuser /var/run/$jenkinsuser\"
+if failed gid $jenkinsuser then exec \"$chown :$jenkinsuser /var/run/$jenkinsuser\"
 
 
-    if [[ -f $monitconfdir/jenkins ]]; then
-        #test for diff
-        if [[ "$(diff $monitconfdir/jenkins <(echo "\
 check process jenkins with pidfile /var/run/$jenkinsuser/jenkins_jnlp_pid
 check process jenkins with pidfile /var/run/$jenkinsuser/jenkins_jnlp_pid
-start program = \"/usr/bin/sudo -u $jenkinsuser /bin/bash -c 'cd $dir; export started_monit=true; $0 $@' with timeout 60 seconds\"
-stop program = \"/bin/bash -c '/bin/kill \$(/bin/cat /var/run/$jenkinsuser/jenkins_jnlp_pid)'\"\
+start program = \"/usr/bin/sudo -u $jenkinsuser /bin/bash -c 'cd $jenkinshome; export started_monit=true; $0 $@' with timeout 60 seconds\"
+stop program = \"/bin/bash -c '/bin/kill \$(/bin/cat /var/run/$jenkinsuser/jenkins_jnlp_pid)'\"
+depends on jenkins_piddir\
 ") )" ]]; then
 ") )" ]]; then
-            echo "Updating monit config..."
+                echo "Updating monit config..."
+                makemonit $@
+            fi
+        else
             makemonit $@
         fi
             makemonit $@
         fi
-    else
-        makemonit $@
     fi
 
     fi
 
-if [[ $started_monit == "true" ]]; then
-    wget --timestamping https://build.opnfv.org/ci/jnlpJars/slave.jar && true
-    chown $jenkinsuser:$jenkinsuser slave.jar
+    if [[ $started_monit == "true" ]]; then
+        wget --timestamping https://"$jenkins_hostname"/jnlpJars/agent.jar && true
+        chown $jenkinsuser:$jenkinsuser agent.jar
 
 
-    if [[ -f /var/run/$jenkinsuser/jenkins_jnlp_pid ]]; then
-        echo "pid file found"
-        if ! kill -0 "$(/bin/cat /var/run/$jenkinsuser/jenkins_jnlp_pid)"; then
-            echo "no java process running cleaning up pid file"
-            rm -f /var/run/$jenkinsuser/jenkins_jnlp_pid;
-        else
-            echo "java connection process found and running already running quitting."
-            exit 1
+        if [[ -f /var/run/$jenkinsuser/jenkins_jnlp_pid ]]; then
+            echo "pid file found"
+            if ! kill -0 "$(/bin/cat /var/run/$jenkinsuser/jenkins_jnlp_pid)"; then
+                echo "no java process running cleaning up pid file"
+                rm -f /var/run/$jenkinsuser/jenkins_jnlp_pid;
+            else
+                echo "java connection process found and running already running quitting."
+                exit 1
+            fi
         fi
         fi
-    fi
 
 
-    if [[ $run_in_foreground == true ]]; then
-        $connectionstring
+        if [[ $run_in_foreground == true ]]; then
+            $connectionstring
+        else
+            exec $connectionstring &
+            echo $! > /var/run/$jenkinsuser/jenkins_jnlp_pid
+        fi
     else
     else
-        exec $connectionstring &
-        echo $! > /var/run/$jenkinsuser/jenkins_jnlp_pid
+        echo "you are ready to start monit"
+        echo "eg: service monit start"
+        echo "example debug mode if you are having problems:  /usr/bin/monit -Ivv -c /etc/monit.conf "
+        exit 0
     fi
     fi
-else
-    echo "you are ready to start monit"
-    echo "eg: service monit start"
-    echo "example debug mode if you are having problems:  /usr/bin/monit -Ivv -c /etc/monit.conf "
-    exit 0
-fi
 }
 
 usage() {
     cat << EOF
 
 **this file must be copied to the jenkins home directory to work**
 }
 
 usage() {
     cat << EOF
 
 **this file must be copied to the jenkins home directory to work**
-jenkins-jnlp-connect.sh configures monit to keep slave connection up
-Checks for new versions of slave.jar
+jenkins-jnlp-connect.sh configures monit to keep agent connection up
+Checks for new versions of agent.jar
 run as root to create pid directory and create monit config.
 can be run as root additional times if you change variables and need to update monit config.
 after running as root you should see "you are ready to start monit"
 run as root to create pid directory and create monit config.
 can be run as root additional times if you change variables and need to update monit config.
 after running as root you should see "you are ready to start monit"
@@ -162,12 +183,14 @@ usage: $0 [OPTIONS]
  -h  show this message
  -j  set jenkins home
  -u  set jenkins user
  -h  show this message
  -j  set jenkins home
  -u  set jenkins user
- -n  set slave name
+ -n  set agent name
  -s  set secret key
  -s  set secret key
+ -l  set host, default is build.opnfv.org/ci
  -t  test the connection string by connecting without monit
  -f  test firewall
 
  -t  test the connection string by connecting without monit
  -f  test firewall
 
-Example: $0 -j /home/jenkins/ -u jenkins -n lab1 -s 727fdefoofoofoofoofoofoofof800
+Example: $0 -j /home/jenkins -u jenkins -n lab1 -s 727fdefoofoofoofoofoofoofof800
+note: a trailing slash on -j /home/jenkins will break the script
 EOF
 
     exit 1
 EOF
 
     exit 1
@@ -177,13 +200,14 @@ if [[ -z "$@" ]]; then
     usage
 fi
 
     usage
 fi
 
-while getopts "j:u:n:s:htf" OPTION
+while getopts "j:u:n:s:l:htf" OPTION
 do
     case $OPTION in
         j ) jenkinshome="$OPTARG" ;;
         u ) jenkinsuser="$OPTARG" ;;
 do
     case $OPTION in
         j ) jenkinshome="$OPTARG" ;;
         u ) jenkinsuser="$OPTARG" ;;
-        n ) slave_name="$OPTARG" ;;
-        s ) slave_secret="$OPTARG";;
+        n ) agent_name="$OPTARG" ;;
+        s ) agent_secret="$OPTARG";;
+        l ) jenkins_hostname="$OPTARG" ;;
         h ) usage ;;
         t ) started_monit=true
             skip_monit=true
         h ) usage ;;
         t ) started_monit=true
             skip_monit=true
@@ -193,6 +217,6 @@ do
     esac
 done
 
     esac
 done
 
-connectionstring="java -jar slave.jar -jnlpUrl https://build.opnfv.org/ci/computer/"$slave_name"/slave-agent.jnlp -secret "$slave_secret" -noCertificateCheck "
-
+jenkins_hostname="${jenkins_hostname:-build.opnfv.org/ci}"
+connectionstring="java -jar agent.jar -jnlpUrl https://"$jenkins_hostname"/computer/"$agent_name"/agent-agent.jnlp -secret "$agent_secret" -noCertificateCheck "
 main "$@"
 main "$@"