blob: a01ddd684a532ebe0434186ce1d6528ef6c15a5d [file] [log] [blame]
import os
import pdb
import sys
import tempfile
sys.path.append("/opt/tosca")
from translator.toscalib.tosca_template import ToscaTemplate
from core.models import Slice,Sliver,User,Flavor,Node,Image
from nodeselect import XOSNodeSelector
from imageselect import XOSImageSelector
import resources
class XOSTosca(object):
def __init__(self, tosca_yaml, parent_dir=None):
# TOSCA will look for imports using a relative path from where the
# template file is located, so we have to put the template file
# in a specific place.
if not parent_dir:
parent_dir = os.getcwd()
try:
(tmp_handle, tmp_pathname) = tempfile.mkstemp(dir=parent_dir)
os.write(tmp_handle, tosca_yaml)
os.close(tmp_handle)
self.template = ToscaTemplate(tmp_pathname)
finally:
os.remove(tmp_pathname)
#pdb.set_trace()
def execute(self, user):
for nodetemplate in self.template.nodetemplates:
self.execute_nodetemplate(user, nodetemplate)
def execute_nodetemplate(self, user, nodetemplate):
if nodetemplate.type in resources.resources:
cls = resources.resources[nodetemplate.type]
#print "work on", cls.__name__, nodetemplate.name
obj = cls(user, nodetemplate)
obj.create_or_update()
def execute_nodetemplate(self, user, nodetemplate):
if nodetemplate.type in resources.resources:
cls = resources.resources[nodetemplate.type]
#print "work on", cls.__name__, nodetemplate.name
obj = cls(user, nodetemplate)
obj.create_or_update()
def destroy(self, user):
models = []
for nodetemplate in self.template.nodetemplates:
if nodetemplate.type in resources.resources:
cls = resources.resources[nodetemplate.type]
obj = cls(user, nodetemplate)
models = models + list(obj.get_existing_objs())
models.reverse()
for model in models:
print "destroying", model
model.delete(purge=True) # XXX change before deploying