murano/meta/io.murano/Classes/resources/NeutronNetworkBase.yaml

111 lines
3.5 KiB
YAML

# 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.
Namespaces:
=: io.murano.resources
std: io.murano
sys: io.murano.system
Name: NeutronNetworkBase
Extends: Network
Methods:
joinInstanceToNetwork:
Arguments:
- instance:
Contract: $.class(Instance).notNull()
- securityGroupName:
Contract: $.string()
- sharedIps:
Contract:
- $.class(std:SharedIp)
- netRef:
Contract: $
- subnetRef:
Contract: $
- floatingIpResourceName:
Contract: $.string()
- floatingIpNetRef:
Contract: $
Body:
- $portName: format('port-{0}-{1}', $.id(), $instance.name)
- $patchTemplate:
resources:
$portName:
type: 'OS::Neutron::Port'
properties:
network: $netRef
fixed_ips:
- subnet: $subnetRef
replacement_policy: AUTO
- If: bool($securityGroupName)
Then:
- $template:
resources:
$portName:
properties:
security_groups:
- get_resource: $securityGroupName
- $patchTemplate: $patchTemplate.mergeWith($template)
- $instanceResources: [$portName]
- $instanceOutputs: []
- For: sip
In: $sharedIps
Do:
- $template:
resources:
$portName:
properties:
allowed_address_pairs:
- ip_address: $sip.getSharedIpRef()
- $patchTemplate: $patchTemplate.mergeWith($template)
- $instanceFipOutput: null
- If: $floatingIpResourceName != null and $floatingIpNetRef != null
Then:
- $instanceFipOutput: $instance.name + '-floatingIPaddress'
- $template:
resources:
$floatingIpResourceName:
type: 'OS::Neutron::FloatingIP'
properties:
floating_network: $floatingIpNetRef
port_id:
get_resource: $portName
outputs:
$instanceFipOutput:
value:
get_attr: [$floatingIpResourceName, floating_ip_address]
description: format('Floating IP of {0}', $instance.name)
- $instanceResources: $instanceResources.append($floatingIpResourceName)
- $instanceOutputs: $instanceOutputs.append($instanceFipOutput)
- $patchTemplate: $patchTemplate.mergeWith($template)
- Return:
template: $patchTemplate
portRef:
get_resource: $portName
instanceFipOutput: $instanceFipOutput
instanceResources: $instanceResources
instanceOutputs: $instanceOutputs
generateSecurityGroupManager:
Arguments:
- environment:
Contract: $.class(std:Environment).notNull()
Body:
- Return: new(sys:NeutronSecurityGroupManager, environment => $environment)