summaryrefslogtreecommitdiffstats
path: root/com.gluster.storage.management.server.scripts/src/nodes/GetServerNetworkConfig.py
blob: 3311eb56ad60e28b2842f92db59457f261295d42 (plain)
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#  Copyright (C) 2009 Gluster, Inc. <http://www.gluster.com>
#  This file is part of Gluster Storage Platform.
#
#  Gluster Storage Platform is free software; you can redistribute it
#  and/or modify it under the terms of the GNU General Public License
#  as published by the Free Software Foundation; either version 3 of
#  the License, or (at your option) any later version.
#
#  Gluster Storage Platform is distributed in the hope that it will be
#  useful, but WITHOUT ANY WARRANTY; without even the implied warranty
#  of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program.  If not, see
#  <http://www.gnu.org/licenses/>.

import sys
import syslog
import Globals
import Commands
import re
from ServerUtils import *
from Protocol import *
from NetworkUtils import *

def getServerNetworkConfig(requestXml):
    serverName = requestXml.getTextByTagRoute("command.server-name")
    version = requestXml.getVersion()
    messageId = requestXml.getAttribute("id")

    if not serverName:
        responseDom = ResponseXml(Commands.COMMAND_GET_SERVER_NETWORK_CONFIG, "No server name given", messageId, version)
        responseDom.appendTagRoute("server.name", serverName)
        return responseDom
    responseDom = ResponseXml(Commands.COMMAND_GET_SERVER_NETWORK_CONFIG, "OK", messageId, version)
    serverTag = responseDom.createTag("server", None)
    serverTag.appendChild(responseDom.createTag("name", serverName))
    nameServerList, domain, searchDomain = readResolvConfFile()
    if domain:
        domainName = domain[0]
    else:
        domainName = None
    serverTag.appendChild(responseDom.createTag("domainname", domainName))
    i = 1
    for dns in nameServerList:
        serverTag.appendChild(responseDom.createTag("dns%s" % i, dns))
        i += 1
    #TODO: probe and retrieve timezone, ntp-server, preferred-network details and update the tags
    configDom = XDOM()
    if configDom.parseFile("%s/%s/network.xml" % (Globals.SERVER_CONF_DIR, serverName)):
        serverTag.appendChild(responseDom.createTag("timezone", configDom.getTextByTagRoute("network.timezone")))
        serverTag.appendChild(responseDom.createTag("ntp-server", configDom.getTextByTagRoute("network.ntp-server")))
        preferredNetwork = configDom.getTextByTagRoute("network.preferred-network")
        if not preferredNetwork:
            preferredNetwork = "any"
        serverTag.appendChild(responseDom.createTag("preferred-network", preferredNetwork))

    deviceList = {}
    for device in getNetDeviceList():
        deviceList[device["device"]] = device
        try:
            macAddress = open("/sys/class/net/%s/address" % device["device"]).read().strip()
        except IOError:
            continue
        interfaceTag = responseDom.createTag("interface", None)
        interfaceTag.appendChild(responseDom.createTag("device",      device["device"]))
        interfaceTag.appendChild(responseDom.createTag("description", device["description"]))
        interfaceTag.appendChild(responseDom.createTag("hwaddr",      macAddress))
        if deviceList[device["device"]]:
            if deviceList[device["device"]]["onboot"]:
                interfaceTag.appendChild(responseDom.createTag("onboot", "yes"))
            else:
                interfaceTag.appendChild(responseDom.createTag("onboot", "no"))
            interfaceTag.appendChild(responseDom.createTag("bootproto", deviceList[device["device"]]["bootproto"]))
            interfaceTag.appendChild(responseDom.createTag("ipaddr",    deviceList[device["device"]]["ipaddr"]))
            interfaceTag.appendChild(responseDom.createTag("netmask",   deviceList[device["device"]]["netmask"]))
            interfaceTag.appendChild(responseDom.createTag("gateway",   deviceList[device["device"]]["gateway"]))
            if deviceList[device["device"]]["mode"]:
                interfaceTag.appendChild(responseDom.createTag("mode",   deviceList[device["device"]]["mode"]))
            if deviceList[device["device"]]["master"]:
                interfaceTag.appendChild(responseDom.createTag("bonding", "yes"))
                spliter = re.compile(r'[\D]')
                interfaceTag.appendChild(responseDom.createTag("bondid", spliter.split(device["master"])[-1]))            
        else:
            interfaceTag.appendChild(responseDom.createTag("onboot",    "no"))
            interfaceTag.appendChild(responseDom.createTag("bootproto", "none"))
        serverTag.appendChild(interfaceTag)
    responseDom.appendTag(serverTag)
    return responseDom

def test():
    requestString = """<command request="get-server-network-config" id="123" version="3.1.2.2">
<server-name>s1</server-name></command>"""
    requestDom = RequestXml(requestString)
    print getServerNetworkConfig(requestDom).toxml()