# 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 Name: SharedIp Properties: assignFloatingIp: Contract: $.bool().notNull() Default: false virtualIp: Contract: $.string() Usage: Out floatingIpAddress: Contract: $.string() Usage: Out Workflow: initialize: Body: - $.environment: $.find(Environment).require() - $.network: $.environment.defaultNetworks.environment - $.instances: [] deploy: Body: - If: not $.getAttr(deployed, false) Then: - $reporter: $.environment.reporter - $.network.deploy() - $networkData: $.network.describe() - $aapPortName: format('AllowedAddressPairsPort-{0}', $.id()) - $template: resources: $aapPortName: type: 'OS::Neutron::Port' properties: network_id: $networkData.netId replacement_policy: AUTO fixed_ips: - subnet_id: $networkData.subnetId outputs: $aapPortName+'-virtualIp': value: get_attr: [$aapPortName, fixed_ips, 0, ip_address] description: format('SharedIP Address of SharedIp group {0}', $.id()) - $.environment.stack.updateTemplate($template) - If: $.assignFloatingIp Then: - $extNetId: $networkData.floatingIpNetId - $fip_name: format('Shared-Floating-ip-{0}', $.id()) - $template: resources: $fip_name: type: 'OS::Neutron::FloatingIP' properties: floating_network_id: $extNetId port_id: get_resource: $aapPortName outputs: $fip_name + '-val': value: get_attr: [$fip_name, floating_ip_address] description: Shared Floating IP assigned - $.environment.stack.updateTemplate($template) - $reporter.report($this, 'Allocating shared ip address') - $.environment.stack.push() - $outputs: $.environment.stack.output() - $.virtualIp: $outputs.get(format('AllowedAddressPairsPort-{0}-virtualIp', $.id())) - $.floatingIpAddress: $outputs.get(format('Shared-Floating-ip-{0}-val', $.id())) - $reporter.report($this, format('Shared IP allocated at {0}', $.virtualIp)) - If: $.assignFloatingIp Then: - $reporter.report($this, format('Floating shared IP is {0}', $.floatingIpAddress)) - $.setAttr(deployed, true) getSharedIpRef: Body: - $aapPortName: format('AllowedAddressPairsPort-{0}', $.id()) - Return: get_attr: [$aapPortName, fixed_ips, 0, ip_address]