1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
##############################################################################
# Copyright (c) 2017 ZTE Corporation and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
from identity_auth import get_session
from os_clients import nova_client
from common.utils import SSHClient
LINK_DOWN_SCRIPT = """
#!/bin/bash -x
dev=$(sudo ip a | awk '/ {compute_ip}\//{{print $NF}}')
sleep 1
sudo ip link set $dev down
echo "doctor set link down at" $(date "+%s.%N")
sleep 10
sudo ip link set $dev up
sleep 1
"""
class NetworkFault(object):
def __init__(self, conf, installer, log):
self.conf = conf
self.log = log
self.installer = installer
self.nova = nova_client(self.conf.nova_version, get_session())
self.host = None
self.GetLog = False
def start(self, host):
self.log.info('fault inject start......')
self._set_link_down(host.ip)
self.host = host
self.log.info('fault inject end......')
def cleanup(self):
self.log.info('fault inject cleanup......')
self.get_disable_network_log()
def get_disable_network_log(self):
if self.GetLog:
self.log.info('Already get the disable_netork.log from down_host......')
return
if self.host is not None:
client = SSHClient(self.host.ip,
self.installer.node_user_name,
key_filename=self.installer.get_ssh_key_from_installer(),
look_for_keys=True,
log=self.log)
client.scp('disable_network.log', './disable_network.log', method='get')
self.log.info('Get the disable_netork.log from down_host(host_name:%s, host_ip:%s)'
% (self.host.name, self.host.ip))
self.GetLog = True
def _set_link_down(self, compute_ip):
file_name = './disable_network.sh'
with open(file_name, 'w') as file:
file.write(LINK_DOWN_SCRIPT.format(compute_ip=compute_ip))
client = SSHClient(compute_ip,
self.installer.node_user_name,
key_filename=self.installer.get_ssh_key_from_installer(),
look_for_keys=True,
log=self.log)
client.scp('./disable_network.sh', 'disable_network.sh')
command = 'bash disable_network.sh > disable_network.log 2>&1 &'
client.ssh(command)
|