#!/usr/bin/env python
""
"
@Item : Install Openstack Compute
@Author : william
@Group : Network System Group
@Date : 2014-03-20
@Funtion:
Function: Depoly Openstack Compute ...
""
"
import
os,sys,
time
import
traceback,shutil
import
commands
import
re
def LOG(info):
logfile =
'/tmp/openstack_compute_install.log'
files =
open
(logfile,
'a'
)
try:
files.write(
'%s : %s'
%(
time
.ctime(),info))
except IOError:
files.close()
files.close()
class DepolyCompute(object):
def __init__(self):
print
"Please write in the script master IP public IP and local management ... \n"
self.masterIPaddr =
'192.168.220.1'
self.localIPaddr =
'192.168.220.1'
self.URL =
'http://%s/source/'
%self.masterIPaddr
self.nova_path =
'/etc/nova/'
def install_packstack(self):
yum_path =
'/etc/yum.repos.d/'
comds =
"https://repos.fedorapeople.org/repos/openstack/EOL/openstack-havana/rdo-release-havana-9.noarch.rpm"
commands.getstatusoutput(cmd)
try:
cmd =
"https://repos.fedorapeople.org/repos/openstack/EOL/openstack-havana/rdooo-release-havana-9.noarch.rpm"
x,y = commands.getstatusoutput(cmd)
if
x != 0:
fp =
open
(
'%s/rdo-release.repo'
%yum_path,
'w'
)
fp.write(
""
"[openstack-havana] \n"
""
)
fp.write(
""
"name=OpenStack Havana Repository \n"
""
)
fp.write(
""
"baseurl=https://repos.fedorapeople.org/repos/openstack/EOL/openstack-havana/epel-6/ \n"
""
)
fp.write(
""
"enabled=1 \n"
""
)
fp.write(
""
"skip_if_unavailable=0 \n"
""
)
fp.write(
""
"gpgcheck=1 \n"
""
)
fp.write(
""
"gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Havana \n"
""
)
fp.write(
""
"priority=98 \n"
""
)
fp.close()
cmd =
"rpm -Uvh http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm"
x,y = commands.getstatusoutput(cmd)
if
x != 0:
fp =
open
(
'%s/epel.repo'
%yum_path,
'w'
)
fp.write(
""
"[epel] \n"
""
)
fp.write(
""
"name=Extra Packages for Enterprise Linux 6 - $basearch \n"
""
)
fp.write(
""
"#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch \n"
""
)
fp.write(
""
"mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch \n"
""
)
fp.write(
""
"failovermethod=priority \n"
""
)
fp.write(
""
"enabled=1 \n"
""
)
fp.write(
""
"gpgcheck=1 \n"
""
)
fp.write(
""
"gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 \n"
""
)
fp.write(
""
" \n"
""
)
fp.write(
""
"[epel-debuginfo] \n"
""
)
fp.write(
""
"name=Extra Packages for Enterprise Linux 6 - $basearch - Debug \n"
""
)
fp.write(
""
"#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug \n"
""
)
fp.write(
""
"mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch \n"
""
)
fp.write(
""
"failovermethod=priority \n"
""
)
fp.write(
""
"enabled=0 \n"
""
)
fp.write(
""
"gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 \n"
""
)
fp.write(
""
"gpgcheck=1 \n"
""
)
fp.write(
""
" \n"
""
)
fp.write(
""
"[epel-source] \n"
""
)
fp.write(
""
"name=Extra Packages for Enterprise Linux 6 - $basearch - Source \n"
""
)
fp.write(
""
"#baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS \n"
""
)
fp.write(
""
"mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch \n"
""
)
fp.write(
""
"failovermethod=priority \n"
""
)
fp.write(
""
"enabled=0 \n"
""
)
fp.write(
""
"gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 \n"
""
)
fp.write(
""
"gpgcheck=1 \n"
""
)
fp.close()
except:
LOG(traceback.format_exc())
def install_kvm_compute(self):
try:
os.system(
""
" yum -y install kvm libvirt qemu virt-*"
""
)
os.system(
""
" yum -y install lrzsz gcc sysstat net-snmp-* "
""
)
os.system(
""
" yum -y install openstack-nova-compute openstack-nova-network libguestfs-winsupport"
""
)
os.system(
"easy_install psutil"
)
os.system(
"easy_install ipdb"
)
except:
LOG(traceback.format_exc())
def install_compute_source(self):
try:
cmd =
" wget %s/athCloudOpenStack.tgz -O /opt/athCloudOpenStack.tgz"
%self.URL
x,y = commands.getstatusoutput(cmd)
if
x == 0:
os.chdir(
'/opt/'
)
os.system(
""
" tar -xzvf athCloudOpenStack.tgz -C /"
""
)
os.chdir(self.nova_path)
if
os.path.exists(
'nova.conf'
):
shutil.move(
'nova.conf'
,
'nova.conf.default'
)
if
os.path.exists(
'nova.conf.example'
):
shutil.move(
'nova.conf.example'
,
'nova.conf'
)
self._nova_conf()
self._start_nova_compute()
else
:
LOG(
"wget athCloudOpenStack.tgz false"
)
sys.
exit
()
except:
LOG(traceback.format_exc())
def _start_nova_compute(self):
try:
servers = [
'openstack-nova-compute'
,
'openstack-nova-network'
,
'openstack-nova-extend'
,
'libvirtd'
]
for
i
in
servers:
os.system(
""
" /sbin/service %s restart "
""
%i)
os.system(
""
" /sbin/chkconfig %s on "
""
%i)
except:
LOG(traceback.format_exc())
def _nova_config(self):
try:
fp =
open
(
'%s/nova.conf'
%self.nova_path)
f = fp.readlines()
fp.close()
for
n, s
in
enumerate(f):
if
re.match(
'#?glance_api_servers.*'
,s):
f[n] =
'glance_api_servers=%s:9292\n'
%self.masterIPaddr
if
re.match(
'#?metadata_host.*'
,s):
f[n] =
'metadata_host=%s \n'
%self.masterIPaddr
if
re.match(
'#?qpid_hostname.*'
,s):
f[n] =
'qpid_hostname=%s\n'
%self.masterIPaddr
if
re.match(
'#?novncproxy_base_url.*'
,s):
f[n] =
'novncproxy_base_url=http://%s:6080/vnc_auto.html \n'
%self.masterIPaddr
if
re.match(
'#?sql_connection.*'
,s):
str = s.
split
(
'@'
)[0] +
'@%s/nova'
%self.masterIPaddr
f[n] =
'%s \n'
%str
if
re.match(
'#?my_ip.*'
,s):
f[n] =
'my_ip=%s\n'
%self.localIPaddr
if
re.match(
'#?vncserver_listen.*'
,s):
f[n] =
'vncserver_listen=%s\n'
%self.localIPaddr
if
re.match(
'#?vncserver_proxyclient_address.*'
,s):
f[n] =
'vncserver_proxyclient_address=%s\n'
%self.localIPaddr
fp =
open
(
'%s/nova.conf'
%self.nova_path,
'w'
)
fp.writelines(f)
fp.close()
except Exception,e:
LOG(traceback.format_exc())
if
__name__ ==
"__main__"
:
sc = DepolyCompute()
sc.install_packstack()
sc.install_kvm_compute()
sc.install_compute_source()