summaryrefslogtreecommitdiffstats
path: root/tools/pharos-validator/src/validation_tool/src/config.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/pharos-validator/src/validation_tool/src/config.py')
-rw-r--r--tools/pharos-validator/src/validation_tool/src/config.py176
1 files changed, 0 insertions, 176 deletions
diff --git a/tools/pharos-validator/src/validation_tool/src/config.py b/tools/pharos-validator/src/validation_tool/src/config.py
deleted file mode 100644
index 443467ee..00000000
--- a/tools/pharos-validator/src/validation_tool/src/config.py
+++ /dev/null
@@ -1,176 +0,0 @@
-##############################################################################
-# Copyright (c) 2015 Todd Gaunt 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
-##############################################################################
-
-import logging
-import sys
-import os
-import yaml
-import struct
-import socket
-
-from pharosvalidator import util
-from collections import namedtuple
-
-class Topology():
- """
- Topology: Class to store any number of Network classes
- and metadata about them
- """
- def __init__(self, yaml_config):
- # Dictionary of available networks
- self.logger = logging.getLogger(__name__)
- self.networks = {}
- self.external_networks = []
-
- # Fill the above dictionaries
- self.parse_yaml(yaml_config)
-
- def parse_yaml(self, yaml_config):
- """
- parse_yaml: parses the yaml configuration file this program uses
- for all the network and node information
- """
- config = safe_yaml_read(yaml_config)
- for network in config["networks"]:
- self.logger.info("Reading network section {}".format(network))
- if network == "admin":
- self.networks[network] = Network(config["networks"][network])
- #TODO
- elif network == "external":
- for external_network in config["networks"][network]:
- self.external_networks.append(Network(external_network))
-
-class Network():
- """
- Network: Class to store all information on a given network
- """
- def __init__(self, network):
- try:
- self.logger = logging.getLogger(__name__)
-
- # Some generic settings
- self.enabled = network["enabled"]
- self.vlan = network["vlan"]
-
- # VM settings
- self.installer_nic_type = network["installer_vm"]["nic_type"]
- self.installer_members = network["installer_vm"]["members"]
- self.installer_ip = network["installer_vm"]["ip"]
-
- # Tuple containing the minimum and maximum
- self.usable_ip_range = self.parse_ip_range(network["usable_ip_range"])
- self.gateway = network["gateway"]
- self.cidr = network["cidr"]
- self.dhcp_range = network["dhcp_range"]
- self.dns_domain = network["dns-domain"]
- self.dns_search = network["dns-search"]
-
- subnet, netmask = self.split_cidr(network["cidr"])
- self.subnet = subnet
- self.netmask = netmask
-
- # List of all dns servers
- self.dns_upstream = network["dns-upstream"]
-
- self.nic_mapping = {}
- except KeyError as e:
- self.logger.error("Field {} not available in network configuration file".format(e))
-
- def split_cidr(self, cidr):
- """
- split_cidr: Split up cidr notation subnets into a subnet string and a
- netmask string
-
- input: cidr notation of a subnet
-
- output: Subnet string; Netmask string
- """
- split = cidr.split('/')
- host_bits = int(split[1])
- netmask = self.cidr_to_netmask(host_bits)
- subnet = split[0]
-
- return subnet, netmask
-
- def parse_ip_range(self, ip_range_string):
- """
- parse_ip_range: Create a named tuple object that contains the lowest
- ip address and the highest ip address from a configuration file
-
- input: String formatted like so "min, max" where min/max are ip addresses
-
- output: Named tuple object containing a minimum and maximum field
- """
- rp = ip_range_string.split(",")
- ip_range = namedtuple("ip_range", ['minimum', 'maximum'])(minimum=min(rp), maximum=max(rp))
- return ip_range
-
- def cidr_to_netmask(self, cidr):
- bits = 0xffffffff ^ (1 << 32 - cidr) - 1
- netmask = socket.inet_ntoa(struct.pack('>I', bits))
- self.logger.debug("Netmask generated from cidr '{}': '{}'".format(cidr, netmask))
- return netmask
-
-class Inventory():
- """
- Inventory: Class to hold configuration file data
- """
- def __init__(self, yaml_config):
- # Create the class logger
- self.logger = logging.getLogger(__name__)
-
- self.nodes = []
-
- # Fill the above list
- self.parse_yaml(yaml_config)
-
- def parse_yaml(self, yaml_config):
- config = safe_yaml_read(yaml_config)
- nodes = []
- for node in config["nodes"]:
- self.nodes.append(Node(node))
-
- def nodecount(self):
- return len(self.nodes)
-
-class Node():
- """
- Node: Class to hold
- """
- def __init__(self, node):
- self.logger = logging.getLogger(__name__)
- try:
- self.name = node["name"]
- self.tags = node["tags"]
- self.arch = node["arch"]
- self.mac_address = node["mac_address"] # ipmi mac address
- self.cpus = node["cpus"]
- self.memory = node["memory"]
- self.disk = node["disk"]
- except KeyError as e:
- self.logger.error("Field {} not available in inventory file".format(e))
-
- # Power sub section
- if node["power"]["type"] == "ipmi":
- try:
- self.ipmi_addr = node["power"]["address"]
- self.ipmi_user = node["power"]["user"]
- self.ipmi_pass = node["power"]["pass"]
- except KeyError as e:
- self.logger.error("Field {} not available in inventory file".format(e))
- else:
- pass
-
-def safe_yaml_read(yamlfile):
- logger = logging.getLogger(__name__)
- if os.path.isfile(yamlfile) == False:
- logger.critical("Could not open find {}".format(yamlfile))
- quit(1)
- with open(yamlfile, 'r') as fd:
- return yaml.load(fd.read())