diff --git a/meta/io.murano/Classes/SharedIp.yaml b/meta/io.murano/Classes/SharedIp.yaml new file mode 100644 index 00000000..a1d8f998 --- /dev/null +++ b/meta/io.murano/Classes/SharedIp.yaml @@ -0,0 +1,94 @@ +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() + - $aapPortName: format('AllowedAddressPairsPort-{0}', $.id()) + - $template: + heat_template_version: '2013-05-23' + resources: + $aapPortName: + type: 'OS::Neutron::Port' + properties: + network_id: + get_resource: $.network.name + '-net-' + $.network.id() + fixed_ips: + - subnet_id: + get_resource: $.network.name + '-subnet-' + $.network.id() + 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: $.network.getExternalNetId() + - $fip_name: format('Shared-Floating-ip-{0}', $.id()) + - $fip_assoc_name: format('Shared-Floating-ip-assoc-{0}', $.id()) + - $template: + resources: + $fip_name: + type: 'OS::Neutron::FloatingIP' + properties: + floating_network_id: $extNetId + $fip_assoc_name: + type: 'OS::Neutron::FloatingIPAssociation' + properties: + floatingip_id: + get_resource: $fip_name + 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] + + + + + diff --git a/meta/io.murano/Classes/resources/Instance.yaml b/meta/io.murano/Classes/resources/Instance.yaml index 346c231d..0c81905d 100644 --- a/meta/io.murano/Classes/resources/Instance.yaml +++ b/meta/io.murano/Classes/resources/Instance.yaml @@ -44,6 +44,10 @@ Properties: securityGroupName: Contract: $.string() Default: null + sharedIps: + Contract: + - $.class(std:SharedIp) + Usage: InOut # as it is set in setSharedIps Methods: initialize: @@ -52,6 +56,14 @@ Methods: - $.agent: new(sys:Agent, host => $) - $.resources: new(sys:Resources) + setSharedIps: + Arguments: + ips: + Contract: + - $.class(std:SharedIp) + Body: + $.sharedIps: $ips + deploy: Body: - $securityGroupName: coalesce( @@ -60,6 +72,7 @@ Methods: ) - $.createDefaultInstanceSecurityGroupRules($securityGroupName) - $.detectPrimaryNetwork() + - $.ensureSharedIpsDeployed() - $.ensureNetworksDeployed() - If: $.networks.useEnvironmentNetwork and $.environment.defaultNetworks.environment!=null Then: @@ -118,6 +131,10 @@ Methods: - $.environment.defaultNetworks.flat.deploy() - $.networks.customNetworks.pselect($.deploy()) + ensureSharedIpsDeployed: + Body: + - $.sharedIps.pselect($.deploy()) + joinNet: Arguments: - net: @@ -159,6 +176,19 @@ Methods: get_resource: $portname - $.environment.stack.updateTemplate($template) + - If: $primary + Then: + - For: sip + In: $.sharedIps + Do: + - $template: + resources: + $portname: + properties: + allowed_address_pairs: + - ip_address: $sip.getSharedIpRef() + - $.environment.stack.updateTemplate($template) + - If: $assignFip Then: - $extNetId: $net.getExternalNetId() diff --git a/meta/io.murano/Classes/resources/NeutronNetwork.yaml b/meta/io.murano/Classes/resources/NeutronNetwork.yaml index 63df7867..da6aca3e 100644 --- a/meta/io.murano/Classes/resources/NeutronNetwork.yaml +++ b/meta/io.murano/Classes/resources/NeutronNetwork.yaml @@ -62,7 +62,7 @@ Methods: - $.createRouterInterface() - $.environment.stack.push() - - $.setAttr(networkConfigured, true) + - $.setAttr(deployed, true) createNetwork: Body: diff --git a/meta/io.murano/Classes/resources/WindowsInstance.yaml b/meta/io.murano/Classes/resources/WindowsInstance.yaml index 4e31c59b..212d79c0 100644 --- a/meta/io.murano/Classes/resources/WindowsInstance.yaml +++ b/meta/io.murano/Classes/resources/WindowsInstance.yaml @@ -1,6 +1,7 @@ Namespaces: =: io.murano.resources std: io.murano + sys: io.murano.system Name: WindowsInstance diff --git a/meta/io.murano/manifest.yaml b/meta/io.murano/manifest.yaml index 04464f42..efa6ccd8 100644 --- a/meta/io.murano/manifest.yaml +++ b/meta/io.murano/manifest.yaml @@ -17,6 +17,7 @@ Classes: io.murano.Object: Object.yaml io.murano.Environment: Environment.yaml io.murano.Application: Application.yaml + io.murano.SharedIp: SharedIp.yaml io.murano.system.SecurityGroupManager: SecurityGroupManager.yaml