blob: 15bc5383fac3b2bd349fc2408474eb04493f35c4 [file] [log] [blame]
gstepanove3481cd2015-04-03 21:45:52 +03001import argparse
2import sys
3import os
4import paramiko
5
6from urlparse import urlparse
7
8
koder aka kdanilovda45e882015-04-06 02:24:42 +03009from disk_perf_test_tool.keystone import KeystoneAuth
gstepanove3481cd2015-04-03 21:45:52 +030010
11
12def discover_fuel_nodes(fuel_url, creds, cluster_id):
13 admin_ip = urlparse(fuel_url).hostname
14 fuel = KeystoneAuth(fuel_url, creds, headers=None, echo=None,
15 admin_node_ip=admin_ip)
16 nodes = fuel.do("get", path="/api/nodes?cluster_id=" + str(cluster_id))
17 ips = [node["ip"] for node in nodes]
18 roles = [node["roles"] for node in nodes]
19
20 host = urlparse(fuel_url).hostname
21
22 return run_agent(ips, roles, host)
23
24
25def discover_fuel_nodes_clean(fuel_url, ssh_creds, nodes, base_port=12345):
26 admin_ip = urlparse(fuel_url).hostname
27 ssh = paramiko.SSHClient()
28 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
29 ssh.connect(hostname=admin_ip, port=ssh_creds["port"],
30 password=ssh_creds["password"], username=ssh_creds["username"])
31
32 command = "python /tmp/agent.py --clean=True --base_port=" \
33 + str(base_port) + " --ports"
34
35 for node in nodes:
36 ip = urlparse(node[0]).hostname
37 command += " " + ip
38
39 (stdin, stdout, stderr) = ssh.exec_command(command)
40 for line in stdout.readlines():
41 print line
42
43 os.remove('/tmp/fuel_id_rsa')
44
45
46def run_agent(ip_addresses, roles, host, password="test37", port=22,
47 base_port=12345):
48 ssh = paramiko.SSHClient()
49 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
50 ssh.connect(hostname=host, port=port, password=password, username="root")
51 sftp = ssh.open_sftp()
52 sftp.put(os.path.join(os.path.dirname(__file__), 'agent.py'),
53 "/tmp/agent.py")
54 fuel_id_rsa_path = '/tmp/fuel_id_rsa'
55 sftp.get('/root/.ssh/id_rsa', fuel_id_rsa_path)
56 os.chmod(fuel_id_rsa_path, 700)
57 command = "python /tmp/agent.py --base_port=" + str(base_port) + " --ports"
58
59 for address in ip_addresses:
60 command += " " + address
61
62 (stdin, stdout, stderr) = ssh.exec_command(command)
63 node_port_mapping = {}
64
65 for line in stdout.readlines():
66 results = line.split(' ')
67
68 if len(results) != 2:
69 continue
70
71 node, port = results
72 node_port_mapping[node] = port
73
74 nodes = []
75
76 for i in range(len(ip_addresses)):
77 ip = ip_addresses[i]
78 role = roles[i]
79 port = node_port_mapping[ip]
80
81 nodes.append(("ssh://root@" + ip + ":" + port +
82 ":/tmp/fuel_id_rsa", role))
83
84 ssh.close()
85 print 'Files has been transfered successefully to Fuel node, ' \
86 'agent has been launched'
87 print nodes
88
89 return nodes
90
91
92def parse_command_line(argv):
93 parser = argparse.ArgumentParser(
94 description="Connect to fuel master and setup ssh agent")
koder aka kdanilovda45e882015-04-06 02:24:42 +030095 parser.add_argument("--fuel-url", required=True)
96 parser.add_argument("--cluster-id", required=True)
97 parser.add_argument("--username", default="admin")
98 parser.add_argument("--tenantname", default="admin")
99 parser.add_argument("--password", default="admin")
gstepanove3481cd2015-04-03 21:45:52 +0300100 return parser.parse_args(argv)
101
102
103def main(argv):
104 args = parse_command_line(argv)
105 creds = {"username": args.username,
106 "tenant_name": args.tenantname,
107 "password": args.password}
108
109 nodes = discover_fuel_nodes(args.fuel_url, creds, args.cluster_id)
koder aka kdanilovda45e882015-04-06 02:24:42 +0300110 print "Ready", nodes
111 sys.stdin.readline()
gstepanove3481cd2015-04-03 21:45:52 +0300112 discover_fuel_nodes_clean(args.fuel_url, {"username": "root",
113 "password": "test37",
114 "port": 22}, nodes)
115
116
117if __name__ == "__main__":
118 main(sys.argv[1:])