Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

# Copyright 2014 - Rackspace Hosting. 

# 

# Licensed under the Apache License, Version 2.0 (the "License"); you may 

# not use this file except in compliance with the License. You may obtain 

# a copy of the License at 

# 

#      http://www.apache.org/licenses/LICENSE-2.0 

# 

# Unless required by applicable law or agreed to in writing, software 

# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 

# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 

# License for the specific language governing permissions and limitations 

# under the License. 

 

from glanceclient.v2 import client as glanceclient 

from heatclient.v1 import client as heatclient 

from oslo_config import cfg 

 

from magnum.common import exception 

from magnum.common import magnum_keystoneclient 

from magnum.openstack.common._i18n import _ 

from magnum.openstack.common import log as logging 

 

 

LOG = logging.getLogger(__name__) 

 

 

heat_client_opts = [ 

    cfg.StrOpt('region_name', 

               default=None, 

               help=_('Region in Identity service catalog to use for ' 

                      'communication with the OpenStack service.')), 

    cfg.StrOpt('endpoint_type', 

               default='publicURL', 

               help=_( 

                   'Type of endpoint in Identity service catalog to use ' 

                   'for communication with the OpenStack service.')), 

    cfg.StrOpt('ca_file', 

               help=_('Optional CA cert file to use in SSL connections.')), 

    cfg.StrOpt('cert_file', 

               help=_('Optional PEM-formatted certificate chain file.')), 

    cfg.StrOpt('key_file', 

               help=_('Optional PEM-formatted file that contains the ' 

                      'private key.')), 

    cfg.BoolOpt('insecure', 

                default=False, 

                help=_("If set, then the server's certificate will not " 

                       "be verified."))] 

 

glance_client_opts = [ 

    cfg.StrOpt('region_name', 

               default=None, 

               help=_('Region in Identity service catalog to use for ' 

                      'communication with the OpenStack service.')), 

    cfg.StrOpt('endpoint_type', 

               default='publicURL', 

               help=_( 

                   'Type of endpoint in Identity service catalog to use ' 

                   'for communication with the OpenStack service.')), 

    ] 

 

cfg.CONF.register_opts(heat_client_opts, group='heat_client') 

cfg.CONF.register_opts(glance_client_opts, group='glance_client') 

 

 

class OpenStackClients(object): 

    """Convenience class to create and cache client instances.""" 

 

    def __init__(self, context): 

        self.context = context 

        self._keystone = None 

        self._heat = None 

        self._glance = None 

 

    def url_for(self, **kwargs): 

        return self.keystone().client.service_catalog.url_for(**kwargs) 

 

    @property 

    def auth_url(self): 

        return self.keystone().v3_endpoint 

 

    @property 

    def auth_token(self): 

        return self.context.auth_token or self.keystone().auth_token 

 

    def keystone(self): 

88        if self._keystone: 

            return self._keystone 

 

        self._keystone = magnum_keystoneclient.KeystoneClientV3(self.context) 

        return self._keystone 

 

    def _get_client_option(self, client, option): 

        return getattr(getattr(cfg.CONF, '%s_client' % client), option) 

 

    @exception.wrap_keystone_exception 

    def heat(self): 

        if self._heat: 

            return self._heat 

 

        endpoint_type = self._get_client_option('heat', 'endpoint_type') 

        region_name = self._get_client_option('heat', 'region_name') 

        endpoint = self.url_for(service_type='orchestration', 

                                endpoint_type=endpoint_type, 

                                region_name=region_name) 

 

        args = { 

            'endpoint': endpoint, 

            'auth_url': self.auth_url, 

            'token': self.auth_token, 

            'username': None, 

            'password': None, 

            'ca_file': self._get_client_option('heat', 'ca_file'), 

            'cert_file': self._get_client_option('heat', 'cert_file'), 

            'key_file': self._get_client_option('heat', 'key_file'), 

            'insecure': self._get_client_option('heat', 'insecure') 

        } 

        self._heat = heatclient.Client(**args) 

 

        return self._heat 

 

    @exception.wrap_keystone_exception 

    def glance(self): 

        if self._glance: 

            return self._glance 

 

        endpoint_type = self._get_client_option('glance', 'endpoint_type') 

        region_name = self._get_client_option('glance', 'region_name') 

        endpoint = self.url_for(service_type='image', 

                                endpoint_type=endpoint_type, 

                                region_name=region_name) 

        args = { 

            'endpoint': endpoint, 

            'auth_url': self.auth_url, 

            'token': self.auth_token, 

            'username': None, 

            'password': None, 

        } 

        self._glance = glanceclient.Client(**args) 

 

        return self._glance