Ejemplo n.º 1
0
    def fromEnvPath(path):
        if not os.path.isdir(path):
            return Fail(
                InvalidOptionError("Specified path '%s' does not exist." %
                                   path))

        envPath = path
        name = os.path.basename(envPath)

        envVars = Try.attempt(readDotEnv, os.path.join(envPath, ENVFILE))
        if envVars.isFail():
            return envVars
        envVars = envVars.getOK()

        reserved = [
            'SUBENV_NAME', 'SUBENV_LASTAPPLIED', 'SUBENV_ENVPATH',
            'SUBENV_SPECPATH', 'SUBENV_BASEPATH'
        ]
        vars = envVars.copy()
        for k in vars.keys():
            if k in reserved:
                del vars[k]

        lastApplied = None
        if 'SUBENV_LASTAPPLIED' in envVars:
            lastApplied = envVars['SUBENV_LASTAPPLIED']

        env = SubenvSpec(envVars['SUBENV_SPECPATH'],
                         envVars['SUBENV_BASEPATH'], envVars['SUBENV_NAME'],
                         vars, lastApplied)
        env.setEnvPath(envPath)
        return env
Ejemplo n.º 2
0
 def readInputPath(self):
     if len(self.args) <= 0:
         return Fail(
             InvalidOptionError("Please specify a path to a '%s' folder." %
                                SPECDIR))
     path = os.path.abspath(os.path.normpath(self.args[0]))
     return OK(path)
Ejemplo n.º 3
0
 def readInputEnv(self):
     env = {}
     envopts = self.options.define
     for opt in envopts:
         if opt.index('=') == 01:
             return Fail(InvalidOptionError("%s is not a valid define. Use VAR=val form." % opt))
         (var, val) = ''.join(shlex.split(opt)).split('=')
         env[var] = val
     return OK(env)
Ejemplo n.º 4
0
    def use(self, name):
        envPath = os.path.normpath(os.path.join(self.envsPath, name))
        if not os.path.isdir(envPath):
            return Fail(InvalidOptionError("Environment '%s' does not exist."))

        envSpec = SubenvSpec.fromEnvPath(envPath)
        current = os.path.join(self.basePath, "current")

        return Try.attempt(makeSymlink, envSpec.envPath, current, True) \
            .then(dinfo("Current substance environment now: '%s'" % envSpec.name))
Ejemplo n.º 5
0
    def buildConfigFromArgs(self, config={}):
        opts = {}

        boxName = self.core.getDefaultBoxString(
        ) if not self.options.box else self.options.box
        box = self.core.readBox(boxName)
        if box.isFail():
            return box
        opts['box'] = box.getOK().boxstring

        if self.options.driver:
            if not self.validateDriver(self.options.driver):
                return Fail(
                    InvalidOptionError("Driver %s is not valid." %
                                       self.options.driver))
            opts['driver'] = self.options.driver

        if self.options.devroot:
            if not os.path.isdir(self.options.devroot):
                return Fail(
                    InvalidOptionError("Devroot path %s does not exist." %
                                       self.options.devroot))
            opts['devroot'] = {} if 'devroot' not in opts else opts['devroot']
            opts['devroot']['path'] = self.options.devroot

        if self.options.devroot_mode:
            # XXX Fix hardcoded values.
            if self.options.devroot_mode not in [
                    'rsync', 'sharedfolder', 'unison'
            ]:
                return Fail(
                    InvalidOptionError("Devroot mode '%s' is not valid."))
            opts['devroot'] = {} if 'devroot' not in opts else opts['devroot']
            opts['devroot']['mode'] = self.options.devroot_mode

        config['config'] = opts
        return OK(config)
Ejemplo n.º 6
0
    def fromSpecPath(path, vars={}):
        if not os.path.isdir(path):
            return Fail(
                InvalidEnvError("Specified path '%s' does not exist." % path))

        if os.path.basename(path) == SPECDIR or not os.path.isdir(
                os.path.join(path, SPECDIR)):
            return Fail(
                InvalidOptionError(
                    "Invalid path specified. Please pass a path to a folder with a %s directory."
                    % SPECDIR))
        specPath = os.path.join(path, SPECDIR)

        name = os.path.basename(path)

        return SubenvSpec(specPath, path, name, vars).scan()
Ejemplo n.º 7
0
 def readInputName(self):
     if len(self.args) <= 0:
         return Fail(
             InvalidOptionError("Please specify the name of a subenv."))
     name = os.path.normpath(self.args[0])
     return OK(name)
Ejemplo n.º 8
0
 def delete(self, name):
     envPath = os.path.normpath(os.path.join(self.envsPath, name))
     if not os.path.isdir(envPath):
         return Fail(InvalidOptionError("Environment '%s' does not exist."))
     return Shell.nukeDirectory(envPath)
Ejemplo n.º 9
0
 def _loadEnvSpec(self, name):
     envPath = os.path.normpath(os.path.join(self.envsPath, name))
     if not os.path.isdir(envPath):
         return Fail(
             InvalidOptionError("Environment '%s' does not exist." % name))
     return OK(SubenvSpec.fromEnvPath(envPath))