diff --git a/examples/uno.py b/examples/uno.py index c13f3fd..bd445ef 100644 --- a/examples/uno.py +++ b/examples/uno.py @@ -74,7 +74,7 @@ def main(): nodes.reset() logging.info('# Get nodes by their FQDNs') - nodes = distractor.get_nodes(fqdns=['node-1.domain.tld']) + nodes = distractor.get_nodes(fqdns=['node-2.domain.tld']) logging.info('Node with specific FQDN: %s', nodes) logging.info('# Disable public network on these nodes') diff --git a/os_failures/ansible/modules/fuel_network_mgmt.py b/os_failures/ansible/modules/fuel_network_mgmt.py new file mode 100644 index 0000000..b926133 --- /dev/null +++ b/os_failures/ansible/modules/fuel_network_mgmt.py @@ -0,0 +1,50 @@ +#!/usr/bin/python + +# 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. + + +NETWORK_NAME_TO_INTERFACE = { + 'management': 'br-mgmt', + 'public': 'br-ex', + 'private': 'br-prv', + 'storage': 'br-storage', +} + + +def main(): + module = AnsibleModule( + argument_spec=dict( + operation=dict(choices=['up', 'down']), + network_name=dict(default='management', + choices=list(NETWORK_NAME_TO_INTERFACE.keys())), + )) + + operation = module.params['operation'] + network_name = module.params['network_name'] + + interface = NETWORK_NAME_TO_INTERFACE.get(network_name) + cmd = 'ip link set %s %s ' % (interface, operation) + + rc, stdout, stderr = module.run_command(cmd) + + try: + result = dict(rc=rc, stderr=stderr, stdout=stdout, cmd=cmd) + module.exit_json(**result) + except Exception as e: + module.fail_json(msg=e, rc=rc, stderr=stderr, stdout=stdout, cmd=cmd) + + +from ansible.module_utils.basic import * # noqa + +if __name__ == '__main__': + main() diff --git a/os_failures/drivers/fuel.py b/os_failures/drivers/fuel.py index 256f2ff..ae277e2 100644 --- a/os_failures/drivers/fuel.py +++ b/os_failures/drivers/fuel.py @@ -70,9 +70,21 @@ class FuelNodeCollection(node_collection.NodeCollection): def enable_network(self, network_name): logging.info('Enable network: %s on nodes: %s', network_name, self) + task = {'fuel_network_mgmt': { + 'network_name': network_name, + 'operation': 'up', + }} + ips = [n['ip'] for n in self.hosts] + self.cloud_management.execute_on_cloud(ips, task) def disable_network(self, network_name): logging.info('Disable network: %s on nodes: %s', network_name, self) + task = {'fuel_network_mgmt': { + 'network_name': network_name, + 'operation': 'down', + }} + ips = [n['ip'] for n in self.hosts] + self.cloud_management.execute_on_cloud(ips, task) @six.add_metaclass(abc.ABCMeta)