diff --git a/meta/io.murano/Classes/resources/ExistingNeutronNetwork.yaml b/meta/io.murano/Classes/resources/ExistingNeutronNetwork.yaml index 0a84a0e32..bd27d9e30 100644 --- a/meta/io.murano/Classes/resources/ExistingNeutronNetwork.yaml +++ b/meta/io.murano/Classes/resources/ExistingNeutronNetwork.yaml @@ -29,6 +29,7 @@ Workflow: - $._netExplorer: new(sys:NetworkExplorer) - $._networks: null - $._subnetworks: null + - $._ports: null - $._internalNetworkId: null - $._internalSubnetworkId: null - $._externalNetworkId: null @@ -57,6 +58,23 @@ Workflow: $.id = $this.internalSubnetworkName) and $.network_id = $this._internalNetworkId).first().id + - If: $.externalNetworkName = null and $._internalNetworkId != null + Then: + - $ports: $._netExplorer.listPorts() + - $routerCandidates: $ports.where( + $.network_id = $this._internalNetworkId and $.device_owner = 'network:router_interface'). + select($.device_id) + - $networkCandidates: $ports.where( + $.device_id in $routerCandidates and $.network_id != $this._internalNetworkId). + select($.network_id) + - $externalNetwork: $._getNetworks().where( + $.get('router:external') = true and $.id in $networkCandidates). + firstOrDefault() + - If: $externalNetwork != null + Then: + - $.externalNetworkName: $externalNetwork.name + - $._externalNetworkId: $externalNetwork.id + - If: $.externalNetworkName = null Then: $.externalNetworkName: $._getNetworks().where( @@ -120,5 +138,3 @@ Workflow: netRef: $._internalNetworkId subnetRef: $._internalSubnetworkId floatingIpNeRef: $._externalNetworkId - - diff --git a/murano/engine/system/net_explorer.py b/murano/engine/system/net_explorer.py index 7a13678e4..1e85c485b 100644 --- a/murano/engine/system/net_explorer.py +++ b/murano/engine/system/net_explorer.py @@ -187,3 +187,8 @@ class NetworkExplorer(murano_object.MuranoObject): def listSubnetworks(self, _context): client = self._clients.get_neutron_client(_context) return client.list_subnets()['subnets'] + + # noinspection PyPep8Naming + def listPorts(self, _context): + client = self._clients.get_neutron_client(_context) + return client.list_ports()['ports']