gi.require_version("RwStagingMgmtYang", "1.0")
from gi.repository import RwStagingMgmtYang
import rift.mano.dts as mano_dts
+from rift.mano.utils.project import DEFAULT_PROJECT
from .. import model
from ..protocol import StagingStorePublisherProtocol
META_YAML = "meta.yaml"
DEFAULT_EXPIRY = 60 * 60
- def __init__(self, log=None, root_dir=None):
+ def __init__(self, tasklet, root_dir=None):
default_path = os.path.join(
- os.getenv('RIFT_ARTIFACTS'),
+ os.getenv('RIFT_VAR_ROOT'),
"launchpad/staging")
self.root_dir = root_dir or default_path
if not os.path.isdir(self.root_dir):
os.makedirs(self.root_dir)
- self.log = log or logging.getLogger()
+ self.log = tasklet.log
self.tmp_dir = tempfile.mkdtemp(dir=self.root_dir)
self._cache = {}
- self.delegate = None
+ self.tasklet = tasklet
def on_recovery(self, staging_areas):
for area in staging_areas:
return self._cache[area_id]
+ def get_delegate(self, project_name):
+ if not project_name:
+ project_name = DEFAULT_PROJECT
+
+ try:
+ proj = self.tasklet.projects[project_name]
+ except Exception as e:
+ err = "Project or project name not found {}: {}". \
+ format(msg.as_dict(), e)
+ self.log.error (err)
+ raise Exception (err)
+
+ return proj.publisher
+
def create_staging_area(self, staging_area_config):
"""Create the staging area
Args:
Raises:
StagingAreaExists: if the staging area already exists
"""
+ delegate = self.get_delegate(staging_area_config.project_name)
+
area_id = str(uuid.uuid4())
container_path = os.path.join(self.root_dir, str(area_id))
"path": container_path
})
- staging_area = RwStagingMgmtYang.StagingArea.from_dict(config_dict)
+ staging_area = RwStagingMgmtYang.YangData_RwProject_Project_StagingAreas_StagingArea.from_dict(config_dict)
staging_area = model.StagingArea(staging_area)
self._cache[area_id] = staging_area
try:
- if self.delegate:
- self.delegate.on_staging_area_create(staging_area.model)
+ if delegate:
+ delegate.on_staging_area_create(staging_area.model)
except Exception as e:
- self.log.exception(str(e))
+ self.log.exception(e)
return staging_area
if type(staging_area) is str:
staging_area = self.get_staging_area(staging_area)
+ delegate = self.get_delegate(staging_area.project_name)
+
if os.path.isdir(staging_area.model.path):
shutil.rmtree(staging_area.model.path)
staging_area.model.status = "EXPIRED"
try:
- if self.delegate:
- self.delegate.on_staging_area_delete(staging_area.model)
+ if delegate:
+ delegate.on_staging_area_delete(staging_area.model)
except Exception as e:
- self.log.exception(str(e))
+ self.log.exception(e)