| ######### |
| # Copyright (c) 2014 GigaSpaces Technologies Ltd. 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. |
| |
| from cloudify import ctx |
| from cloudify.decorators import operation |
| from openstack_plugin_common import ( |
| transform_resource_name, |
| with_nova_client, |
| delete_resource_and_runtime_properties |
| ) |
| from openstack_plugin_common.security_group import ( |
| build_sg_data, |
| process_rules, |
| use_external_sg, |
| set_sg_runtime_properties, |
| delete_sg, |
| sg_creation_validation, |
| RUNTIME_PROPERTIES_KEYS |
| ) |
| |
| |
| @operation |
| @with_nova_client |
| def create(nova_client, args, **kwargs): |
| |
| security_group = build_sg_data(args) |
| security_group['description'] = ctx.node.properties['description'] |
| |
| sgr_default_values = { |
| 'ip_protocol': 'tcp', |
| 'from_port': 1, |
| 'to_port': 65535, |
| 'cidr': '0.0.0.0/0', |
| # 'group_id': None, |
| # 'parent_group_id': None, |
| } |
| sg_rules = process_rules(nova_client, sgr_default_values, |
| 'cidr', 'group_id', 'from_port', 'to_port') |
| |
| if use_external_sg(nova_client): |
| return |
| |
| transform_resource_name(ctx, security_group) |
| |
| sg = nova_client.security_groups.create( |
| security_group['name'], security_group['description']) |
| |
| set_sg_runtime_properties(sg, nova_client) |
| |
| try: |
| for sgr in sg_rules: |
| sgr['parent_group_id'] = sg.id |
| nova_client.security_group_rules.create(**sgr) |
| except Exception: |
| delete_resource_and_runtime_properties(ctx, nova_client, |
| RUNTIME_PROPERTIES_KEYS) |
| raise |
| |
| |
| @operation |
| @with_nova_client |
| def delete(nova_client, **kwargs): |
| delete_sg(nova_client) |
| |
| |
| @operation |
| @with_nova_client |
| def creation_validation(nova_client, **kwargs): |
| sg_creation_validation(nova_client, 'cidr') |