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

96 lines
3.0 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: NovaNetwork
Extends: Network
Methods:
joinInstance:
Arguments:
- instance:
Contract: $.class(Instance).notNull()
- securityGroupName:
Contract: $.string()
- securityGroups:
Contract: [$.string()]
- assignFloatingIp:
Contract: $.bool().notNull()
- sharedIps:
Contract:
- $.class(std:SharedIp)
Body:
- $fipName: null
- $template: null
- $instanceFipOutput: null
- $instanceResources: []
- $instanceOutputs: []
- $instanceNetworkOutput: format('{0}-assigned-ips', $instance.name)
- If: $assignFloatingIp
Then:
- $instanceFipOutput: $instance.name + '-floatingIPaddress'
- $fipName: format('fip-nn-{0}', $instance.name)
- $template:
resources:
$fipName:
type: 'OS::Nova::FloatingIP'
$fipName + 'Assignment':
type: 'OS::Nova::FloatingIPAssociation'
properties:
floating_ip:
get_resource: $fipName
server_id:
get_resource: $instance.name
outputs:
$instanceFipOutput:
value:
get_attr: [$fipName, ip]
description: format('Floating IP of {0}', $instance.name)
$instanceNetworkOutput:
description: format('Network IPs assigned to {0} instance', $instance.name)
value:
get_attr: [ $instance.name, networks ]
- $instanceResources: [$fipName, $fipName + 'Assignment']
- $instanceOutputs: [$instanceFipOutput, $instanceNetworkOutput]
- Return:
template: $template
secGroupName:
get_resource: $securityGroupName
instanceFipOutput: $instanceFipOutput
instanceResources: $instanceResources
instanceOutputs: $instanceOutputs
generateSecurityGroupManager:
Body:
- Return: new(sys:AwsSecurityGroupManager, $this)
describe:
Body:
- Return:
provider: NovaNetwork
getInstanceIpList:
Arguments:
- instance:
Contract: $.class(Instance).notNull()
Body:
- Return: $instance.getRegion().stack.output().get(
format('{0}-assigned-ips', $instance.name)
).values().flatten().distinct()