~xnox/pyjuju/myjuju

« back to all changes in this revision

Viewing changes to juju/unit/address.py

  • Committer: Dmitrijs Ledkovs
  • Date: 2012-07-03 17:39:28 UTC
  • mfrom: (467.5.56 openstack)
  • Revision ID: dmitrijs.ledkovs@canonical.com-20120703173928-fsyue2inatiucrp2
merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
    provider_type = yield settings.get_provider_type()
17
17
    if provider_type == "ec2":
18
18
        returnValue(EC2UnitAddress())
 
19
    if provider_type in ("openstack", "openstack_s3"):
 
20
        returnValue(OpenStackUnitAddress())
19
21
    elif provider_type == "local":
20
22
        returnValue(LocalUnitAddress())
21
23
    elif provider_type == "orchestra":
24
26
        returnValue(DummyUnitAddress())
25
27
    elif provider_type == "maas":
26
28
        returnValue(MAASUnitAddress())
27
 
 
28
29
    raise JujuError(
29
30
        "Unknown provider type: %r, unit addresses unknown." % provider_type)
30
31
 
32
33
class UnitAddress(object):
33
34
 
34
35
    def get_private_address(self):
35
 
        raise NotImplemented()
 
36
        raise NotImplementedError(self.get_private_address)
36
37
 
37
38
    def get_public_address(self):
38
 
        raise NotImplemented()
 
39
        raise NotImplementedError(self.get_public_address)
39
40
 
40
41
 
41
42
class DummyUnitAddress(UnitAddress):
62
63
        returnValue(content.strip())
63
64
 
64
65
 
 
66
class OpenStackUnitAddress(UnitAddress):
 
67
    """Address determination of a service unit on an OpenStack server
 
68
 
 
69
    Unlike EC2 there are no promises that an instance will have a resolvable
 
70
    hostname, or for that matter a public ip address.
 
71
    """
 
72
 
 
73
    def _get_metadata_string(self, key):
 
74
        return client.getPage("http://169.254.169.254/1.0/meta-data/" + key)
 
75
 
 
76
    def get_private_address(self):
 
77
        return self._get_metadata_string("local-ipv4")
 
78
 
 
79
    @inlineCallbacks
 
80
    def get_public_address(self):
 
81
        address = yield self._get_metadata_string("public-ipv4")
 
82
        if not address:
 
83
            address = yield self.get_private_address()
 
84
        returnValue(address)
 
85
 
 
86
 
65
87
class LocalUnitAddress(UnitAddress):
66
88
 
67
89
    def get_private_address(self):
87
109
        output = subprocess.check_output(["hostname", "-f"])
88
110
        return output.strip()
89
111
 
 
112
 
90
113
class MAASUnitAddress(UnitAddress):
91
114
 
92
115
    def get_private_address(self):