Beispiel #1
0
def connect(env_name):
    juju_home = os.path.expanduser(os.environ.get("JUJU_HOME", "~/.juju"))
    juju_conf = os.path.join(juju_home, "environments", "%s.jenv" % env_name)
    conf = _config_from_env(juju_conf)
    env = Environment(conf['uri'])
    env.login(conf['secret'])
    return env
Beispiel #2
0
def connect(env_name):
    juju_home = os.path.expanduser(os.environ.get("JUJU_HOME", "~/.juju"))
    juju_conf = os.path.join(juju_home, "environments", "%s.jenv" % env_name)
    conf = _config_from_env(juju_conf)
    env = Environment(conf['uri'])
    env.login(conf['secret'])
    return env
Beispiel #3
0
class JujuCommunication:
    """
    Manage the communication with the Juju controller
    """

    def __init__(self, creds):
        """
        Constructor, initializes the connection to the Juju Controller
        :param creds: information to get a connection to the Juju Controller
        :exception JujuError: raised if connection to Juju can't be done
        """

        self.logger = logging.getLogger(__name__)
        self._creds = creds
        self.client = None

    def connect(self):
        self.logger.info("Connection with the JUJU Controller")
        self.logger.debug("Server (%s:%s)", self._creds['address'], self._creds['port'])
        self.logger.debug("Token (%s)", self._creds['token'])

        if not self.client:
            try:
                try:
                    self.client = Environment("wss://{}:{}".format(self._creds['address'], self._creds['port']))
                    self.client.login(self._creds['token'])
                except socket.error as err:
                        if not err.errno in (errno.ETIMEDOUT, errno.ECONNREFUSED, errno.ECONNRESET):
                            raise JujuError("Cannot reach endpoint provided (%s:%s)"
                                            % (self._creds['address'], self._creds['port']), err.message)
            except EnvError, e:
                raise JujuError("Communication with Juju can't be performed", e.message)

            self.logger.info("Connection successfully established")
Beispiel #4
0
class Environment:

    def __init__(self, options):
        env_path = os.path.expanduser(
            "~/.juju/environments/%s.jenv" % self.name)

        if not os.path.exists(env_path):
            raise Exception("Not found specified environment: %s" % self.name)

        with open(env_path) as fd:
            loaded = yaml.load(fd.read())

        for k, v in loaded.items():
            setattr(self, k.replace("-", "_"), v)

        self._env = GoEnvironment("wss://{}".format(self.state_servers[0]))
        self._env.login(self.password)
        self.options = options

        try:
            provider_type = self.bootstrap_config.get('type')
            klass = "{0}Provider".format(provider_type.capitalize())
            self.provider = getattr(providers, klass)(self)
        except AttributeError:
            raise Exception("Provider type: %s , not supported yet"
                            % provider_type)
        except:
            raise

    @property
    def name(self):
        if hasattr(self, '_name'):
            return self._name
        name = os.environ.get("JUJU_ENV", None)
        if name:
            self._name = name
        else:
            self._name = yaml.load(
                subprocess.check_output(["juju", "get-environment"]))['name']
        return self._name

    @property
    def status(self):
        return self._env.status()

    @property
    def machines(self):
        return self.status.get('Machines').items()

    def suspend(self):
        return self.provider.suspend()

    def resume(self):
        return self.provider.resume()
Beispiel #5
0
 def get_env(cls, name=None, user=None, password=None):
     # A hook env will have this set
     api_addresses = os.environ.get('JUJU_API_ADDRESSES')
     if not api_addresses:
         # use the local option/connect which
         # parses local jenv info
         env = Environment.connect(name)
     else:
         env = Environment(api_addresses.split()[0])
         env.login(user=user, password=password)
     return env
Beispiel #6
0
        """
        self.logger.info("Destroying the machine (%s)", machine_numbers)
        return self.client.destroy_machines(machine_numbers, force=True)

    def status(self):
        """
        Get the status of Juju
        :return: status of Juju as a JSON file
        """
        self.logger.info("Get the status of the system")
        return self.client.status()

    def getserviceconfiguration(self, service_name):
        return self.client.get_service(service_name)

    def info(self):
        return self.client.info()


if __name__ == '__main__':
    address = "10.0.3.1"
    port = 17070
    token = "d36784462a74d471e34176613652cb15"

    print "env login"
    environment = Environment("wss://" + address + ":" + str(port))
    environment.login(token)
    print "env logged"

    # print environment.add_local_charm("/home/ubuntu/charms/trusty/torquepbs2.zip", "trusty")
    print environment.deploy("apache2", "local:trusty/torquepbs-1")