Exemple #1
0
def poweron_server(server_name):
    handle = capi.BootAPI()
    msystem = handle.find_system(name=server_name)
    # msystem = handle.systems().find(name=server_name)
    # print "system {0} status: netboot_enabled {1}".format(msystem.name, msystem.netboot_enabled)
    # print "*"*50
    # pprint(msystem.to_datastruct())
    # disable Netboot
    if msystem.netboot_enabled:
        msystem.netboot_enabled = False
        # save modified system
        handle.add_system(msystem)
    # msystem = handle.find_system(name=server_name)
    # print "system {0} status: netboot_enabled {1}".format(msystem.name,
    # msystem.netboot_enabled)
    server_ip = get_interface_ip(msystem)
    if is_server_on(server_ip, 1):
        print("INFO: server {0} is already ON.".format(server_name))
    else:
        print("Power on server {0}, please wait ...".format(server_name))
        print("  the status of server {0} is monitored on IP : {1}".format(
            server_name, server_ip))
        handle.power_on(msystem)
        if is_server_on(server_ip):
            print(
                "\nCongradulation, server {0} is now ON.".format(server_name))
            print("    Login to {0} with command ssh root@{1}".format(
                server_name, server_ip))
        else:
            print(
                "\nError. Server {0} cannot power on, please contact your administrator."
                .format(server_name))
Exemple #2
0
 def _wrap_process_list_item_names(self, q, objects):
     """Call cobbler API **distros**, **profiles**, **systems** to get the corresponding objects
     :return: a list of name of objects
     """
     cobbler_handler = capi.BootAPI()
     func = getattr(cobbler_handler, objects)
     q.put([x.name for x in func()])
 def _wrap_process_get_item_report(self, q, object_type, name):
     """get the detail report of *name* of cobbler object **object_type**.
     :param string object_type: a type in ['distro', 'profile', 'system', 'kickstart',]
     :param string name: the name that user specified, it supports UNIX wildcard
     :return: a list of report that has the formation [{"name": name, data": data,}, {}]
     """
     result_list = []
     if object_type == "kickstart":
         allfiles = self.list_kickstart_filenames(self.KICKSTART_LOCATION)
         for filename in allfiles:
             if fnmatch.fnmatch(filename, name):
                 result_list.append({
                     "type": "kickstart",
                     "name": filename,
                     "data": {"name": filename,
                              "contents": self.read_file_to_list("{0}/{1}".format(self.KICKSTART_LOCATION, filename)),
                              },
                 })
     else:
         cobbler_handler = capi.BootAPI()
         func = getattr(cobbler_handler, "find_{0}".format(object_type))
         for item in func(name=name, return_list=True):
             data = item.to_datastruct()
             if object_type == "system":
                 data["child_count"] = len(data["interfaces"])
             else:
                 data["child_count"] = self.get_object_child_count(
                     object_type, data["name"], cobbler_handler)
             result_list.append({"type": object_type,
                                 "name": data["name"],
                                 "data": data,
                                 })
     q.put(result_list)
Exemple #4
0
 def __init__(self, hostname):
     """Constructor. Requires a Cobbler API handle."""
     self.hostname = hostname
     self.handle = capi.BootAPI()
     self.system = self.handle.find_system(hostname=self.hostname)
     self.host_vars = self.get_cobbler_resource('ks_meta')
     self.logger = clogger.Logger("/var/log/cobbler/cobbler.log")
     self.mgmtclasses = self.get_cobbler_resource('mgmt_classes')
Exemple #5
0
def serialize_item(obj, item):

    if item.name is None or item.name == "":
        raise exceptions.RuntimeError("name unset for object!")

    # FIXME: Need a better way to support collections/items
    # appending an 's' does not work in all cases
    if obj.collection_type() in ['mgmtclass']:
        filename = "/var/lib/cobbler/config/%ses.d/%s" % (
            obj.collection_type(), item.name)
    else:
        filename = "/var/lib/cobbler/config/%ss.d/%s" % (obj.collection_type(),
                                                         item.name)

    datastruct = item.to_datastruct()

    jsonable = can_use_json()

    if jsonable:
        if capi.BootAPI().settings().serializer_pretty_json:
            sort_keys = True
            indent = 4
        else:
            sort_keys = False
            indent = None

        # avoid using JSON on python 2.3 where we can encounter
        # unicode problems with simplejson pre 2.0

        if os.path.exists(filename):
            print "upgrading yaml file to json: %s" % filename
            os.remove(filename)
        filename = filename + ".json"
        datastruct = item.to_datastruct()
        fd = open(filename, "w+")
        data = simplejson.dumps(datastruct,
                                encoding="utf-8",
                                sort_keys=sort_keys,
                                indent=indent)
        #data = data.encode('utf-8')
        fd.write(data)

    else:

        if os.path.exists(filename + ".json"):
            print "downgrading json file back to yaml: %s" % filename
            os.remove(filename + ".json")
        datastruct = item.to_datastruct()
        fd = open(filename, "w+")
        data = yaml.dump(datastruct)
        fd.write(data)

    fd.close()
    return True
Exemple #6
0
    def __init__(self):
        self.running = True
        self.capi = cobbler_api.BootAPI()

        self.xmliface = CobblerTestXMLRPCInterface(self.capi)

        self.server = CobblerTestXMLRPCServer(('127.0.0.1', 55555))
        self.server.logRequests = 0
        self.server.register_instance(self.xmliface)

        threading.Thread.__init__(self)
Exemple #7
0
def main():
    """main entry"""
    cobbler_api = api.BootAPI()
    for system in cobbler_api.systems():
        cobbler_api.kickgen.generate_kickstart_for_system(system.name)
        try:
            with open('/var/www/cblr_ks/%s' % system.name,
                      'w') as kickstart_file:
                logging.info("Migrating kickstart for %s", system.name)
                data = cobbler_api.kickgen.generate_kickstart_for_system(
                    system.name)
                kickstart_file.write(data)
        except Exception as error:
            logging.error("Directory /var/www/cblr_ks/ does not exist.")
            logging.exception(error)
            raise error
Exemple #8
0
 def _wrap_cobbler_power_system(self, q, name, flag_netboot, power_status):
     """wrap cobbler power action
     """
     options = {
         "on": "power_on",
         "off": "power_off",
         "reboot": "reboot",
     }
     cobbler_handler = capi.BootAPI()
     func = getattr(cobbler_handler, "find_system")
     system = func(name)
     system.netboot_enabled = flag_netboot
     cobbler_handler.add_system(system)
     # default action is power_on
     power_action = options.get(power_status.lower(), "power_on")
     func = getattr(cobbler_handler, power_action)
     try:
         func(system)
     except:
         power_action = "failed"
     q.put(power_action)
 def _get_object_child_list(self, object_type, name, handler=None):
     """get the child list of a cobbler object **distro** and **profile**
     :param string object_type: a type in ['distro', 'profile']
     :param string name: the specific name in an object_type
     :param BootAPI handler: the Cobbler API handler
     :returns: None if object_type is NOT in ['distro', 'profile'], empty list if there is no child, otherwise return ['child', 'child',]
     :rtype: list
     """
     pobjects = {"distro": "profile",
                 "profile": "system",
                 }
     result = None
     if object_type in pobjects:
         if not handler:
             handler = capi.BootAPI()
         func = getattr(handler, "find_{0}".format(pobjects[object_type]))
         kwargs = {}
         kwargs[object_type] = name
         # find_profile(distro=distro_name)
         child_list = func(return_list=True, **kwargs)
         result = [v.name for v in child_list]
     return result
Exemple #10
0
def deploy_server(server_name):
    handle = capi.BootAPI()
    msystem = handle.find_system(name=server_name)
    # msystem = handle.systems().find(name=server_name)
    # print "system {0} status: netboot_enabled {1}".format(msystem.name, msystem.netboot_enabled)
    # print "*"*50
    # pprint(msystem.to_datastruct())
    # enable Netboot
    if not msystem.netboot_enabled:
        msystem.netboot_enabled = True
        # save modified system
        handle.add_system(msystem)
    server_ip = get_interface_ip(msystem)
    print("Depoly new OS on server {0}, please wait ...".format(server_name))
    print("  the status of server {0} is monitored on IP : {1}".format(
        server_name, server_ip))
    handle.reboot(msystem)
    if is_server_deployed(server_ip):
        print("\nDeploy server {0} successfully, now you can power on it.".
              format(server_name))
    else:
        print("\nDeploy server {0} failed, please contact your administrator.".
              format(server_name))
Exemple #11
0
import cobbler.api as capi

handle = capi.BootAPI()
systems = handle.find_system(name="*", return_list=True)

Exemple #12
0
 def _wrap_cobbler_find_system(self, q, name):
     cobbler_handler = capi.BootAPI()
     func = getattr(cobbler_handler, "find_system")
     system = func(name)
     q.put(system.to_datastruct())
Exemple #13
0
#from xmlrpclib import *
import cobbler.api as capi
import re
import time

system_phy_profiles = Blueprint('system_phy_profiles', __name__)

### LOCAL CONFIG ###
# Custom filter method
#def regex_replace(s, find, replace):
#    """A non-optimal implementation of a regex filter"""
#    return re.sub(find, replace, s)
#
#jinja_environment.filters['regex_replace'] = regex_replace

cobbler_server = capi.BootAPI(is_cobblerd=True)
#cobbler_server = xmlrpclib.Server("http://192.168.1.83/cobbler_api")
#token = cobbler_server.login("cobbler", "cobbler")

### NAPALM ###
import napalm
from napalm import get_network_driver


def napalm_switch_mac_audit(customer_sw_id):
    driver = get_network_driver('ios')
    optional_args = {'secret': ''}
    ## query customer_sw1 for ip_address and nr of switch ports, and port type
    customer_sw = Customer_sw.query.filter_by(id=customer_sw_id).one()
    customer_sw_number_of_ports = customer_sw.customerswbackref.portnr
    customer_sw_port_type = customer_sw.customerswbackref.porttype
# test script to evaluate Cobbler API performance
#
# Michael DeHaan <*****@*****.**>

import os
import cobbler.api as capi
import time
import sys
import random

N = 500
print "sample size is %s" % N

api = capi.BootAPI()

# part one ... create our test systems for benchmarking purposes if
# they do not seem to exist.

#if not api.find_profile("foo"):
#    print "CREATE A PROFILE NAMED 'foo' to be able to run this test"
#    sys.exit(0)


def random_mac():
    mac = [
        0x00, 0x16, 0x3e,
        random.randint(0x00, 0x7f),
        random.randint(0x00, 0xff),
        random.randint(0x00, 0xff)
    ]
    return ':'.join(map(lambda x: "%02x" % x, mac))
import os
import cobbler.api as capi
import sys

cobbler_api = capi.BootAPI()

listimages = cobbler_api.images()
listprofiles = cobbler_api.profiles()
listsystems = cobbler_api.systems()

for p in listprofiles:
    print p.name
box = listprofiles.find(name="*",return_list=True)
for d in box:
    print d.name

#!/usr/bin/python

#import re
#import sys
#import xmlrpclib
#from xmlrpclib import *

#system_name="ht-esxi-test"
#new_name="ht-esxi-api"


#conn = ServerProxy("http://192.168.1.163/cobbler_api")
#cobbler_server = xmlrpclib.Server("http://192.168.1.163/cobbler_api")

#token = conn.login("cobbler","cobbler")
Exemple #16
0
#coding:utf8

_author__ = 'eric'

from flask.ext.login import current_user
from flask.ext.wtf import Form
from wtforms import StringField, PasswordField, SubmitField, TextAreaField, BooleanField, SelectField, IntegerField, DateTimeField, FileField, SelectMultipleField
from wtforms.validators import Email, Length, Regexp, EqualTo, InputRequired, IPAddress, HostnameValidation, MacAddress, NumberRange
from ..models import *
from .. import db
from wtforms import ValidationError

try:
    import cobbler.api as capi
    cobbler_handle = capi.BootAPI()
except ImportError:
    pass


class EditProfileForm(Form):
    username = StringField(
        'Username',
        validators=[
            InputRequired(),
            Length(0, 64),
            Regexp(
                '^[A-Za-z][A-Za-z0-9_.]*$', 0,
                'Username must have only letters, number, dots or underscores')
        ])
    name = StringField(u'真实姓名')
    position = StringField(u'工作职位')