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

# 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. 

 

"""Magnum Docker Client.""" 

 

from docker import client 

from docker import tls 

from oslo_config import cfg 

 

from magnum.openstack.common import log as logging 

 

DEFAULT_DOCKER_REMOTE_API_VERSION = '1.17' 

DEFAULT_DOCKER_TIMEOUT = 10 

 

LOG = logging.getLogger(__name__) 

CONF = cfg.CONF 

 

 

class DockerHTTPClient(client.Client): 

    def __init__(self, url='unix://var/run/docker.sock', 

                 ver=DEFAULT_DOCKER_REMOTE_API_VERSION, 

                 timeout=DEFAULT_DOCKER_TIMEOUT): 

34   34        if (CONF.docker.cert_file or 

                CONF.docker.key_file): 

            client_cert = (CONF.docker.cert_file, CONF.docker.key_file) 

        else: 

            client_cert = None 

40   40   40        if (CONF.docker.ca_file or 

                CONF.docker.api_insecure or 

                client_cert): 

            ssl_config = tls.TLSConfig( 

                client_cert=client_cert, 

                ca_cert=CONF.docker.ca_file, 

                verify=CONF.docker.api_insecure) 

        else: 

            ssl_config = False 

        super(DockerHTTPClient, self).__init__( 

            base_url=url, 

            version=ver, 

            timeout=timeout, 

            tls=ssl_config 

        ) 

 

    def list_instances(self, inspect=False): 

        res = [] 

        for container in self.containers(all=True): 

            info = self.inspect_container(container['Id']) 

58            if not info: 

                continue 

            if inspect: 

                res.append(info) 

            else: 

                res.append(info['Config'].get('Hostname')) 

        return res 

 

    def pause(self, container): 

        if isinstance(container, dict): 

            container = container.get('Id') 

        url = self._url('/containers/{0}/pause'.format(container)) 

        res = self._post(url) 

        self._raise_for_status(res) 

 

    def unpause(self, container): 

        if isinstance(container, dict): 

            container = container.get('Id') 

        url = self._url('/containers/{0}/unpause'.format(container)) 

        res = self._post(url) 

        self._raise_for_status(res) 

 

    def get_container_logs(self, docker_id): 

        return self.attach(docker_id, 1, 1, 0, 1)