1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 """
17 Resource class and its manager for security group rules in Compute API v2
18 """
19
20 from yakumo import base
21 from yakumo.constant import UNDEF
22 from yakumo import mapper
23 from yakumo import utils
24
25
26 ATTRIBUTE_MAPPING = [
27 ('id', 'id', mapper.Noop),
28 ('remote_ip_prefix', 'ip_range', mapper.Noop),
29 ('port_range_min', 'from_port', mapper.Noop),
30 ('port_range_max', 'to_port', mapper.Noop),
31 ('protocol', 'ip_protocol', mapper.Noop),
32 ('group', 'group', mapper.Noop),
33 ('project', 'tenant_id', mapper.Resource('project')),
34 ]
35
36
38 """Resource class for security group rules in Compute API v2"""
39
48
49
51 """Manager class for security group rules in Compute API v2"""
52
53 resource_class = Resource
54 service_type = 'compute'
55 _attr_mapping = ATTRIBUTE_MAPPING
56 _hidden_methods = ["update"]
57 _json_resource_key = 'security_group_rule'
58 _json_resources_key = 'security_group_rules'
59 _url_resource_path = '/os-security-group-rules'
60
61 - def __init__(self, parent_resource, *args, **kwargs):
62 super(Manager, self).__init__(parent_resource, *args, **kwargs)
63 if self.parent_resource._rules:
64 self._rules = [self.resource_class(self, **self._json2attr(x))
65 for x in self.parent_resource._rules]
66 else:
67 self._rules = []
68
70 self.parent_resource.get()
71 if self.parent_resource._rules:
72 self._rules = [self.resource_class(self, **self._json2attr(x))
73 for x in self.parent_resource._rules]
74 else:
75 self._rules = []
76
80 """
81 Create a security group rule
82
83 @keyword remote_ip_prefix: IP range (e.q. '0.0.0.0/0', required)
84 @type remote_ip_prefix: str
85 @keyword port_range_min: lower number of destination port
86 @type port_range_min: int
87 @keyword port_range_max: upper number of destination port
88 @type port_range_max: int
89 @keyword protocol: protocol name ('tcp', 'udp', or 'icmp')
90 @type protocol: str
91 @keyword group: List of a project and a security group name
92 @type group: [(yakumo.project.Resource, str)]
93 @keyword project: Project
94 @type project: yakumo.project.Resource
95 @return: Created security group rule
96 @rtype: yakumo.nova.v2.security_group_rule.Resource
97 """
98 ret = super(Manager, self).create(remote_ip_prefix=remote_ip_prefix,
99 port_range_min=port_range_min,
100 port_range_max=port_range_max,
101 protocol=protocol,
102 group=group,
103 project=project)
104 self._reload_rules()
105 return ret
106
108 """
109 Get a security group rule
110
111 @keyword id: Security group rule ID
112 @type id: str
113 @return: Created security group rule
114 @rtype: yakumo.nova.v2.security_group_rule.Resource
115 """
116 for rule in self._rules:
117 if rule.id == id:
118 return rule
119
121 """
122 Find a security group rule
123
124 :param key=value: search condition
125 """
126 for sg_rule in self._rules:
127 for k, v in kwargs.items():
128 if getattr(sg_rule, k, None) != v:
129 break
130 else:
131 yield sg_rule
132