Ok when it comes to programming ANYTHING I am pretty slow. I needed to change the firewall ruleset on quite a few ESX servers and it seemed like a script was in order to make this change for me. However, since I could not get the Opsware client to run a script remotely (that was part of the problem) i needed to figure out an alternative method.
Enter EXPECT.. I had heard it mentioned before but not really understood what it did. Basically you can open a connection to another system and if you can tell the script what to "expect" then it will know what to send it in return.. pretty cool huh.. This is the part where my wife's eyes glaze over.
Basically what I was doing is this...
spawn ssh some_user@somemachine.com
expect "someuse@somemachine's password:"
send password\r
expect "someuser@somesmachine"
And so on.. you get the idea. BUT.. is there not always a but... the issue I was having was that the prompt was on a VMware ESX server and looked like [usename@hostname username]$. I entered the text verbatim so that the expect showed the brackets etc. It puked. But by removing the brackets and only going to the end of the first word it works. Example..
expect "someuser@hostname" works but expect "[usename@hostname username]$" does not. Go figure. So I am going to stop while I am ahead today and revel in my glory....
Just rember... You Stay Classy San Diego.
Tuesday, February 10, 2009
Wednesday, January 21, 2009
Backup a minute..
Ok.. another yawner of a post but hey that is me. I am working on process of backing up the VM's in an environment and making it as quick to recover as possible. In my search I ran across a product called esXpress v3.1. It is pretty cool (ok as cool as VM software can be). It does a couple things:
1. It will put a VM into "Snapshot Mode" and then perform a backup of the VMDK.
2. It can put the VMDK backup to SMB/FTP or SSH.
3. After it is done it will remove the snapshot.
THIS IS DONE WHILE THE VM IS RUNNING! HOW COOL IS THAT!
Oh and I did not mention the best part. The software is FREE! Now there are additonal features such as being able to make backups local and remote at the same time, having additional helper machines, encryption and other things.
Check it out at www.esxpress.com
1. It will put a VM into "Snapshot Mode" and then perform a backup of the VMDK.
2. It can put the VMDK backup to SMB/FTP or SSH.
3. After it is done it will remove the snapshot.
THIS IS DONE WHILE THE VM IS RUNNING! HOW COOL IS THAT!
Oh and I did not mention the best part. The software is FREE! Now there are additonal features such as being able to make backups local and remote at the same time, having additional helper machines, encryption and other things.
Check it out at www.esxpress.com
Thursday, January 8, 2009
My Friend CRON...
OK another dry post but hey.. this is not the Life and Times of Someone Exciting.. sorry. I was at work minding my own business when I realized that my little automated email was not there waiting in my inbox from several servers on Mondays when I came in. (Maybe it had a "Case of the Mundays" as described in the movie Office Space) Computers are like Marines. They are not supposed to choose what orders they follow and what ones they do not. I began to investigate.
Looking into the cron log (/var/log/cron) I noticed that NONE of the CRON jobs were running. I am on to something. I looked into the messages log and sure enough there was an entry "Authentication token is not longer valid; new one required". Clear as mud, of course. So I went to the worlds User Manual.. Google. It showed that there was an issue with the root user id. Huh? I just used it. Logging into the console with the root user id, I was greeted with a message that the id was aged out and would have to be changed! I DID NOT GET THIS WHEN I SU to the ROOT ACCOUNT! I changed the password and restarted the crond service. All good now..
As usual, I hope someone benefits from my stupidity.
Looking into the cron log (/var/log/cron) I noticed that NONE of the CRON jobs were running. I am on to something. I looked into the messages log and sure enough there was an entry "Authentication token is not longer valid; new one required". Clear as mud, of course. So I went to the worlds User Manual.. Google. It showed that there was an issue with the root user id. Huh? I just used it. Logging into the console with the root user id, I was greeted with a message that the id was aged out and would have to be changed! I DID NOT GET THIS WHEN I SU to the ROOT ACCOUNT! I changed the password and restarted the crond service. All good now..
As usual, I hope someone benefits from my stupidity.
Monday, December 22, 2008
Don't Go Away Mad...
Ok, it has been a little while since the last post, but hey, I don't create magic that often (never if you ask my wife).
One of the things we were dealing with is an automated flow that deleted our Virtual Machines. This is a good thing if you want the VM's gone but in our case we kind of wanted them there but they kept getting deleted. Needless to say this was NOT a good thing. I was able to come up with a solution. We modified the delete script to a rename script.
Here is how it works....
The script was using "rm vm_name" and with a little trial and error I came up with...
mv vm_name vm_name.`date +"%Y%m%d"`_`date +"%H%m"`
Now that seems complex but it moves (hence the mv command" from the vm_name directory to vm_name.yearmonthday_hourminute .. for example a VM named vm01 decomissioned on December 19th at 11:15 am would be...
vm01.20081219_1115
Now it it would still be resident on the disk but it would show when it was decomissioned. This will help if you want to keep VM's around for 30 days or so before deleting them.
Also some other steps were not covered.. the vmware-cmd was used for all the shutdown and unregistering of the VM's..
Hope this helps somone..
One of the things we were dealing with is an automated flow that deleted our Virtual Machines. This is a good thing if you want the VM's gone but in our case we kind of wanted them there but they kept getting deleted. Needless to say this was NOT a good thing. I was able to come up with a solution. We modified the delete script to a rename script.
Here is how it works....
The script was using "rm vm_name" and with a little trial and error I came up with...
mv vm_name vm_name.`date +"%Y%m%d"`_`date +"%H%m"`
Now that seems complex but it moves (hence the mv command" from the vm_name directory to vm_name.yearmonthday_hourminute .. for example a VM named vm01 decomissioned on December 19th at 11:15 am would be...
vm01.20081219_1115
Now it it would still be resident on the disk but it would show when it was decomissioned. This will help if you want to keep VM's around for 30 days or so before deleting them.
Also some other steps were not covered.. the vmware-cmd was used for all the shutdown and unregistering of the VM's..
Hope this helps somone..
Tuesday, December 2, 2008
Perl and the Array..
Ok this is not going to be much fun for the average person but I found it helpful. Figured I would put it out here for everyone to ponder.. much like the meaning of life, why are we here, how my belly button fills with lint. The REALLY important stuff.
I was working on a small script ( I really do not call it a program). In this script, I needed to find the most recent log file on a Linux box and do something with it. How I accomplished this was a rather cumbersome Perl script but here goes:
1. I was able to sort the data by using "ls -c". This put the newest log file on top.
2. The I was able to pipe that data into an array. If you are not familiar with an array, it stores information in separate entries kind of like of a database.
3. Since I wanted the first entry in the array I was able to pull it using the following code:
@item_wanted = $array_i_am_using[0];
Then I can print the array item out if needed etc.
Hope this helps someone.
I might be reading this later in the future :)
I was working on a small script ( I really do not call it a program). In this script, I needed to find the most recent log file on a Linux box and do something with it. How I accomplished this was a rather cumbersome Perl script but here goes:
1. I was able to sort the data by using "ls -c". This put the newest log file on top.
2. The I was able to pipe that data into an array. If you are not familiar with an array, it stores information in separate entries kind of like of a database.
3. Since I wanted the first entry in the array I was able to pull it using the following code:
@item_wanted = $array_i_am_using[0];
Then I can print the array item out if needed etc.
Hope this helps someone.
I might be reading this later in the future :)
Wednesday, November 26, 2008
So this would make it easier..
I am in the process of creating a script that will look @ a text file (from and AV scan in this case )and then email a portion of it to someone. We have five Red Hat servers and in the time it has taken for me to beat this into submission I could MANUALLY check AV scan file.
However, I digress. In the process I am learning some PERL, a little HTML and a program called sendEmail-v1.55.tar.gz. This program looks like a god-send and will come in handy in the future I can see.
The broad strokes of the process is this:
1. AV scans system (I know scanning for Viruses on a Linux box .. don't get me started)
2. Perl script runs and parses the AV scan log and then creates an HTML file.
3. sendEmail uses the HTML file as the body of the email to the admin folks to allow them to quickly see if there is a problem or not.
The sendEmail program will communicate directly to an SMTP server (if you do not know what this is... might want to read up a little bit) and it is all done @ a command line and easy to script.
Well all for now. Hope everyones Thanksgiving goes well.
However, I digress. In the process I am learning some PERL, a little HTML and a program called sendEmail-v1.55.tar.gz. This program looks like a god-send and will come in handy in the future I can see.
The broad strokes of the process is this:
1. AV scans system (I know scanning for Viruses on a Linux box .. don't get me started)
2. Perl script runs and parses the AV scan log and then creates an HTML file.
3. sendEmail uses the HTML file as the body of the email to the admin folks to allow them to quickly see if there is a problem or not.
The sendEmail program will communicate directly to an SMTP server (if you do not know what this is... might want to read up a little bit) and it is all done @ a command line and easy to script.
Well all for now. Hope everyones Thanksgiving goes well.
Thursday, November 13, 2008
Another Day Another Patch..
Life in Missouri is always great on the health. (no not really) The weather likes to change quickly and the mold count is always high. So right now I have a head cold. It makes this work more challenging that it should.
Yesterday I set up a Web Server to hold the ESX patches. Once the ESX-1003525 (for version 3.0.2) is loaded the rollup packages work pretty great. Here is a crib notes version on how to set this up.
1. Take your everyday Linux build and load Apache.
2. Once Apache is loaded, find the directory that the web content goes into. (/var/www/html for RedHat EL 5)
3. Create a sub directory for the ESX patches. I used the crazy name of "esx"
4. Edit to the /etc/httpd/conf/httpd.conf file.. Find the section "Listen" and change the port after Listen to something you like.. I used 8080 so that it is not as vunerable.
5. After saving the httpd.conf file, type "service httpd restart" to restart Apache
6. You should now be able to open a web browser to the http://my_web_server:8080/esx directory.
7. Use WinSCP or something else to move the packages to the esx directory on the web server.
8. Un-TAR the patch files
9. Check the connection from the web browser again, you should be able to see the patch files.
Now on the ESX server to be patched:
1. Open the ESX firewall type "esxcfg-firewall -o port_number,tcp,out,httpConnection" this will open the firewall to allow the esxupdate to connect to the web server.
2. Now type "esxupdate -d http://my_web_server:8080/esx/ESX302-Rollup-01 update"
3. The esxupdate will check for the contents.xml file in the directory and will install all the files listed in it.
Note: More details on the esxupdate command can be found by typing esxupdate without anything else.
Hope this helps someone!
Yesterday I set up a Web Server to hold the ESX patches. Once the ESX-1003525 (for version 3.0.2) is loaded the rollup packages work pretty great. Here is a crib notes version on how to set this up.
1. Take your everyday Linux build and load Apache.
2. Once Apache is loaded, find the directory that the web content goes into. (/var/www/html for RedHat EL 5)
3. Create a sub directory for the ESX patches. I used the crazy name of "esx"
4. Edit to the /etc/httpd/conf/httpd.conf file.. Find the section "Listen" and change the port after Listen to something you like.. I used 8080 so that it is not as vunerable.
5. After saving the httpd.conf file, type "service httpd restart" to restart Apache
6. You should now be able to open a web browser to the http://my_web_server:8080/esx directory.
7. Use WinSCP or something else to move the packages to the esx directory on the web server.
8. Un-TAR the patch files
9. Check the connection from the web browser again, you should be able to see the patch files.
Now on the ESX server to be patched:
1. Open the ESX firewall type "esxcfg-firewall -o port_number,tcp,out,httpConnection" this will open the firewall to allow the esxupdate to connect to the web server.
2. Now type "esxupdate -d http://my_web_server:8080/esx/ESX302-Rollup-01 update"
3. The esxupdate will check for the contents.xml file in the directory and will install all the files listed in it.
Note: More details on the esxupdate command can be found by typing esxupdate without anything else.
Hope this helps someone!
Subscribe to:
Posts (Atom)
