Skip to content

Commit

Permalink
Consolidated commits #2 for vCenter
Browse files Browse the repository at this point in the history
FAB changes for vcenter provision automation
Commit: 2fd8e66
Commit: 6550bd0
Commit: 39583b9

Change-Id: I7eaa0215ec491736fe699c7e65f4990f4a3dfd28
Partial-Bug: #1441504
  • Loading branch information
sunilbasker-jnpr committed Jul 13, 2015
1 parent c04f0c3 commit 1112310
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 2 deletions.
6 changes: 6 additions & 0 deletions fabfile/tasks/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@ def install_pkg_all(pkg):
@roles('cfgm')
def install_contrail_vcenter_plugin(pkg):
"""Installs any rpm/deb package in all nodes."""
if not hasattr(env, 'vcenter'):
print "No vcenter block in testbed file, nothing to do"
return
if not pkg:
print "Error:No vcenter plugin pkg, aborting"
exit(1)
execute('install_pkg_node', pkg, env.host_string)
execute('install_contrail_vcenter_plugin_node', env.host_string)

Expand Down
39 changes: 37 additions & 2 deletions fabfile/tasks/provision.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from fabfile.tasks.tester import setup_test_env
from fabfile.tasks.rabbitmq import setup_rabbitmq_cluster
from fabfile.tasks.vmware import provision_vcenter, provision_dvs_fab,\
configure_esxi_network, create_esxi_compute_vm
configure_esxi_network, create_esxi_compute_vm, deprovision_vcenter
from fabfile.utils.cluster import get_vgw_details, get_orchestrator,\
get_vmware_details, get_tsn_nodes, get_toragent_nodes,\
get_esxi_vms_and_hosts
Expand Down Expand Up @@ -2443,7 +2443,42 @@ def update_esxi_vrouter_map():
local("rm %s" %(tmp_fname))
sudo("service contrail-vcenter-plugin restart")

@roles('build')
@task
def prov_vcenter_datastores():
vcenter_info = getattr(env, 'vcenter', None)
if not vcenter_info:
return
esxi_info = getattr(testbed, 'esxi_hosts', None)
if not esxi_info:
print 'Error: esxi_hosts block is not defined in testbed file.Exiting'
return
for esx in esxi_info:
host = esxi_info[esx]
host_string = host['username'] + '@' + host['ip']
ds = os.path.split(host['datastore'])
if not ds[1]:
ds = os.path.split(ds[0])
old_ds = 'datastore1'
if old_ds == ds[1]:
print 'Old and New names for datastore are same, skipping'
continue
new_ds = os.path.join(ds[0], ds[1])
ds = ds[0]
print 'renaming %s to %s' % (old_ds, new_ds)
with settings(host_string=host_string, password=host['password'],
shell = '/bin/sh -l -c'):
run("ln -s `ls -l %s | grep %s | awk '{print $11}` %s" % (ds, old_ds, new_ds))

@hosts(env.roledefs['cfgm'][0])
@task
def cleanup_vcenter():
vcenter_info = getattr(env, 'vcenter', None)
if not vcenter_info:
print 'Error: vcenter block is not defined in testbed file.Exiting'
return
deprovision_vcenter(vcenter_info)

@hosts(env.roledefs['cfgm'][0])
@task
def add_esxi_to_vcenter(*args):
vcenter_info = getattr(env, 'vcenter', None)
Expand Down
77 changes: 77 additions & 0 deletions fabfile/tasks/vcenter_prov.py
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,83 @@ def connect_to_vcenter(self):
self.content = self.service_instance.RetrieveContent()
atexit.register(connect.Disconnect, self.service_instance)


def _wait_for_task (task):
from pyVmomi import vim
while (task.info.state == vim.TaskInfo.State.running or
task.info.state == vim.TaskInfo.State.queued):
time.sleep(2)
return task.info.state == vim.TaskInfo.State.success

def cleanup_vcenter(vcenter_info):
from pyVim import connect
from pyVmomi import vim
port = vcenter_info.get('port', 443)
service_instance = connect.SmartConnect(host=vcenter_info['server'],
user=vcenter_info['username'],
pwd=vcenter_info['password'],
port=port)
content = service_instance.RetrieveContent()
atexit.register(connect.Disconnect, service_instance)

items = content.viewManager.CreateContainerView(content.rootFolder, [vim.Datacenter], True).view
for obj in items:
if obj.name == vcenter_info['datacenter']:
dc = obj
break
else:
print 'Datacenter %s does not exist' % vcenter_info['datacenter']
return

clusters = content.viewManager.CreateContainerView(dc,
[vim.ClusterComputeResource],
True).view
hosts = []
for cluster in clusters:
items = content.viewManager.CreateContainerView(cluster,
[vim.HostSystem], True).view
hosts += items
vms = []
for host in hosts:
vms += host.vm

# clear the VMs
for vm in vms:
if vm.runtime.powerState != 'poweredOff':
if not _wait_for_task(vm.PowerOff()):
print 'Error while powering off vm %s' % vm.name
if not _wait_for_task(vm.Destroy()):
print 'Error while deleting vm %s' % vm.name

# DV Switch & PortGroup
items = content.viewManager.CreateContainerView(dc,
[vim.dvs.DistributedVirtualPortgroup],
True).view
for obj in items:
if not _wait_for_task(obj.Destroy()):
print 'Error while deleting portgroup %s' % obj.name
items = content.viewManager.CreateContainerView(dc,
[vim.dvs.VmwareDistributedVirtualSwitch],
True).view
for obj in items:
if not _wait_for_task(obj.Destroy()):
print 'Error while deleting switch %s' % obj.name

# clear the hosts & cluster
for host in hosts:
if not _wait_for_task(host.EnterMaintenanceMode(30)):
print 'Error in host.EnterMaintenanceMode for %s' % host.name
if not _wait_for_task(host.Destroy()):
print 'Error while deleting host %s' % host.name
for cluster in clusters:
if not _wait_for_task(cluster.Destroy()):
print 'Error while deleting cluster %s' % cluster.name

# delete datacenter
if not _wait_for_task(dc.Destroy()):
print 'Error while deleting datacenter %s' % dc.name


def main():

vcenter_params={}
Expand Down
6 changes: 6 additions & 0 deletions fabfile/tasks/vmware.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from fabfile.templates import compute_vmx_template
from fabfile.tasks.install import yum_install, apt_install
from vcenter_prov import Vcenter as Vcenter
from vcenter_prov import cleanup_vcenter
from fabfile.utils.cluster import get_orchestrator

def configure_esxi_network(esxi_info):
Expand Down Expand Up @@ -183,6 +184,11 @@ def provision_dvs_fab(vcenter_info, esxi_info, host_list):
dvs_fab(dvs_params)
#end provision_dvs_fab

@task
def deprovision_vcenter(vcenter_info):
apt_install(['contrail-vmware-utils'])
cleanup_vcenter(vcenter_info)

@task
def provision_vcenter(vcenter_info, hosts, clusters, vms, update_dvs):
apt_install(['contrail-vmware-utils'])
Expand Down

0 comments on commit 1112310

Please sign in to comment.