Advertisement
Guest User

Untitled

a guest
Mar 14th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.75 KB | None | 0 0
  1. [root@p3plsysops001 ~]# cat /usr/local/sbin/gdpatch.sh
  2. #!/bin/bash
  3.  
  4. #Enable compatability mode for bash 3.2 regex matching
  5.  
  6. shopt -s compat31
  7.  
  8. #Include conf files with presidence on local directories conf file.
  9.  
  10. . /opt/gdpatch/gdpatch.conf
  11.  
  12. #Take input variables
  13.  
  14. spacewalkgroup=$1
  15. patchtime=$2
  16. reboottime=$3
  17.  
  18. if [ $# -lt 1 ]
  19. then
  20. echo "Usage: `basename $0` spacewalkgroup [patchtime] [reboottime] [emai llist]"
  21. echo "EX: myspacewalkgroup 20130131T22:00:00 20130131T23:55:00 '\"root\" <root@localhost>'"
  22. exit 1
  23. fi
  24.  
  25. if [ -z $2 ]
  26. then
  27. echo "No patchtime provided, patching will be scheduled to happen now"
  28. patchtime="`date +%Y%m%dT%k:%M:%S`"
  29. fi
  30.  
  31. if [ -z $3 ]
  32. then
  33. echo "No reboot provided, restarts will be scheduled to happen now"
  34. reboottime="`date +%Y%m%dT%k:%M:%S`"
  35. fi
  36.  
  37. if [ ! -z "$4" ]
  38. then
  39. echo "using user provided email list:"
  40. echo "$4"
  41. EMAILLIST=$4
  42. else
  43. echo "No emaillist provided default email list in confs will be used"
  44. fi
  45.  
  46.  
  47. if [[ $patchtime =~ ^[0-9]\{8\}T[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\} ]]
  48. then
  49. echo ""
  50. else
  51. echo "patchtime format does not match YYYYMMDDTHH:MM:SS EX: `date +%Y%m% dT%k:%M:%S`"
  52. exit 1
  53. fi
  54.  
  55. if [[ $reboottime =~ ^[0-9]\{8\}T[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\} ]]
  56. then
  57. echo ""
  58. else
  59. echo "reboottime format does not match YYYYMMDDTHH:MM:SS EX: `date +%Y%m %dT%k:%M:%S`"
  60. exit 1
  61. fi
  62.  
  63.  
  64. echo "Script running for $spacewalkgroup"
  65.  
  66. encryptedpassword=`j-encrypt "$PASSWORD"`
  67.  
  68. #setup functions used for snapshots, sending email, and patching.
  69.  
  70. preppatchingemail (){
  71.  
  72. spacewalkgroup=$1
  73. EMAILLIST=$2
  74. patchtime=$3
  75.  
  76. #Make a new copy of the email template
  77.  
  78. cp /opt/gdpatch/email-body-template.txt /opt/gdpatch/$$.modified-email-body.txt
  79.  
  80. #Add date, time, and email list to the email file.
  81.  
  82. sed -i "s/\--ENVIRONMENT--/$spacewalkgroup/" /opt/gdpatch/$$.modified-email-body .txt
  83. sed -i "s/To: .*/To: $EMAILLIST/" /opt/gdpatch/$$.modified-email-body.txt
  84. sed -i "s/\$date/$patchtime/" /opt/gdpatch/$$.modified-email-body.txt
  85.  
  86. }
  87.  
  88. removesnapshotsfor (){
  89.  
  90. spacewalkgroup="$1"
  91. VSPHEREHOST="$2"
  92. username="$3"
  93. encryptedpassword="$4"
  94.  
  95. echo "starting snapshot removal."
  96.  
  97. processes=`pgrep "snapshotmanager" | wc -l`
  98. for host in `swutil systemgroup-list -g $spacewalkgroup --raw | awk -F '.' '{pri nt $1}'`
  99. do
  100. while [ $processes -gt 4 ]
  101. do
  102. echo "number of current jobs is $processes sleeping for 3 second s"
  103. sleep 3
  104. processes=`pgrep "snapshotmanager" | wc -l`
  105. done
  106. echo "Removing last patching snapshot for: $host"
  107. nice -n 15 snapshotmanager.pl --url "$VSPHEREHOST" --username "$username " --password "$encryptedpassword" --operation remove --vmname "$host" --snapshot name pre-"$spacewalkgroup"-patching-snapshot --children 1 > /dev/null 2>&1 &
  108. sleep 1
  109. processes=`pgrep "snapshotmanager" | wc -l`
  110. done
  111. }
  112. waitforsnapshotmanager (){
  113.  
  114. processes=`pgrep "snapshotmanager" | wc -l`
  115. while [ $processes -gt 0 ]
  116. do
  117. echo "waiting for all snapshotmanager jobs to complete before continuing"
  118. sleep 5
  119. processes=`pgrep "snapshotmanager" | wc -l`
  120. done
  121.  
  122. }
  123. createsnapshotsfor (){
  124.  
  125. spacewalkgroup="$1"
  126. VSPHEREHOST="$2"
  127. username="$3"
  128. encryptedpassword="$4"
  129.  
  130. processes=`pgrep "snapshotmanager" | wc -l`
  131. for host in `swutil systemgroup-list -g $spacewalkgroup --raw | awk -F '.' '{pri nt $1}'`
  132. do
  133. while [ $processes -gt 4 ]
  134. do
  135. echo "number of current jobs is $processes sleeping for 3 second s"
  136. sleep 3
  137. processes=`pgrep "snapshotmanager" | wc -l`
  138. done
  139. echo "Creating new patching snapshot for: $host"
  140. nice -n 15 snapshotmanager.pl --url "$VSPHEREHOST" --username "$username " --password "$encryptedpassword" --operation create --vmname "$host" --snapshot name pre-"$spacewalkgroup"-patching-snapshot > /dev/null 2>&1 &
  141. echo "$host <br>" >> /opt/gdpatch/$$.hosts.txt
  142. sleep 1
  143. processes=`pgrep "snapshotmanager" | wc -l`
  144. done
  145.  
  146. }
  147. sendpatchingnoticeemail (){
  148.  
  149. echo "<br></body></html>" >> /opt/gdpatch/$$.hosts.txt
  150. cat /opt/gdpatch/$$.modified-email-body.txt /opt/gdpatch/$$.hosts.txt /opt/gdpat ch/sysopsimage.txt > /opt/gdpatch/$$.email.txt
  151. /usr/sbin/sendmail -i -t < /opt/gdpatch/$$.email.txt
  152. echo "Email sent"
  153. rm -f /opt/gdpatch/$$.email.txt
  154. rm -f /opt/gdpatch/$$.modified-email-body.txt
  155. rm -f /opt/gdpatch/$$.hosts.txt
  156.  
  157. }
  158.  
  159. schedulepatching (){
  160.  
  161. spacewalkgroup=$1
  162. patchtime=$2
  163. swutil patch-server -g "$spacewalkgroup" -D "$patchtime"
  164. }
  165.  
  166. schedulereboots (){
  167.  
  168. spacewalkgroup=$1
  169. reboottime=$2
  170. swutil reboot-server -g $spacewalkgroup -D "$reboottime"
  171. echo $reboottime
  172. }
  173.  
  174. sendpatchingcompletionemail (){
  175.  
  176. EMAILLIST=$1
  177.  
  178. reboottime=$2
  179.  
  180. spacewalkgroup=$3
  181.  
  182. mydir=`pwd`
  183.  
  184. # Use this magic to schedule with spacewalk.
  185.  
  186. sed "s/To: .*/To: $EMAILLIST/" /opt/gdpatch/patching-completion-email-template.t xt | sed "s/\--ENVIRONMENT--/$spacewalkgroup/" > /opt/gdpatch/$$.patching-comple tion-email.txt
  187.  
  188. emailcontents=`cat /opt/gdpatch/$$.patching-completion-email.txt`
  189.  
  190. echo -e "#! /bin/bash \n /usr/sbin/sendmail -i -t << ENDOFMYFILE\n$emailcontents \nENDOFMYFILE" > /opt/gdpatch/$$.patching-completion-email.sh
  191.  
  192. swutil run-script -s `hostname` -f /opt/gdpatch/$$.patching-completion-email.sh -D $reboottime
  193.  
  194. rm -f /opt/gdpatch/$$.patching-completion-email.txt
  195. rm -f /opt/gdpatch/$$.patching-completion-email.sh
  196.  
  197. }
  198.  
  199. preppatchingemail "$spacewalkgroup" "$EMAILLIST" "$patchtime"
  200.  
  201. removesnapshotsfor "$spacewalkgroup" "$VSPHEREHOST" "$USERNAME" "$encryptedpassw ord"
  202.  
  203. waitforsnapshotmanager
  204.  
  205. createsnapshotsfor "$spacewalkgroup" "$VSPHEREHOST" "$USERNAME" "$encryptedpassw ord"
  206.  
  207. waitforsnapshotmanager
  208.  
  209. sendpatchingnoticeemail
  210.  
  211. echo "$spacewalkgroup"
  212. echo "$patchtime"
  213.  
  214. schedulepatching "$spacewalkgroup" "$patchtime"
  215.  
  216. schedulereboots "$spacewalkgroup" "$reboottime"
  217.  
  218. sendpatchingcompletionemail "$EMAILLIST" "$reboottime" "$spacewalkgroup"
  219.  
  220. [root@p3plsysops001 ~]#
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement