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

# All Rights Reserved. 

# 

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

 

import pecan 

import wsme 

from wsme import types as wtypes 

 

from magnum.api.controllers import base 

from magnum.api.controllers.v1 import types 

from magnum.common import exception 

from magnum.common import urlfetch 

from magnum import objects 

 

 

class K8sPatchType(types.JsonPatchType): 

 

    @staticmethod 

    def internal_attrs(): 

        defaults = types.JsonPatchType.internal_attrs() 

        return defaults + ['/name', '/labels'] 

 

    @staticmethod 

    def mandatory_attrs(): 

        return ['/bay_uuid'] 

 

 

class K8sResourceBase(base.APIBase): 

 

    _bay_uuid = None 

 

    def _get_bay_uuid(self): 

        return self._bay_uuid 

 

    def _set_bay_uuid(self, value): 

        if value and self._bay_uuid != value: 

            try: 

                bay = objects.Bay.get(pecan.request.context, value) 

                self._bay_uuid = bay.uuid 

            except exception.BayNotFound as e: 

                # Change error code because 404 (NotFound) is inappropriate 

                # response for a POST request to create a Service 

                e.code = 400  # BadRequest 

                raise e 

        elif value == wtypes.Unset: 

            self._bay_uuid = wtypes.Unset 

 

    bay_uuid = wsme.wsproperty(types.uuid, _get_bay_uuid, _set_bay_uuid, 

                               mandatory=True) 

    """Unique UUID of the bay this runs on""" 

 

    manifest_url = wtypes.text 

    """URL for manifest file to create the k8s resource""" 

 

    manifest = wtypes.text 

    """Data for manifest to create the k8s resource""" 

 

    name = wsme.wsattr(wtypes.text, readonly=True) 

    """Name of this k8s resource""" 

 

    labels = wsme.wsattr({wtypes.text: wtypes.text}, readonly=True) 

    """Labels of this k8s resource""" 

 

    def _get_manifest(self): 

        if not self.manifest and not self.manifest_url: 

            return None 

        if self.manifest is not wsme.Unset and self.manifest is not None: 

            return self.manifest 

exit   exit        if (self.manifest_url is not wsme.Unset 

                and self.manifest_url is not None): 

            self.manifest = urlfetch.get(self.manifest_url) 

            return self.manifest