Exemplo n.º 1
0
 def install_bootloader(self):
     pinfo("Setting up bootloader")
     try:
         subprocess.call(["sync"])
         subprocess.call(
             [
                 "/opt/openwide/vmc-grub-ubuntu1604/sbin/grub2-bios-setup",
                 "-d",
                 self.new_root + "/boot/grub",
                 "-b",
                 "i386-pc/boot.img",
                 "-c",
                 "i386-pc/core.img",
                 "-f",
                 self.disk_loop_dev,
             ]
         )
         subprocess.call(["chmod", "644", self.new_root + "/boot/grub/grub.cfg"])
         subprocess.call(
             [
                 "sed",
                 "-i",
                 "s/OWO_ROOTFSUUID/" + fs_uuid(self.partition["root"]) + "/g",
                 self.new_root + "/boot/grub/grub.cfg",
             ]
         )
         subprocess.call(["chmod", "444", self.new_root + "/boot/grub/grub.cfg"])
     except:
         pass
Exemplo n.º 2
0
    def create_disk(self):
        volume_size = self.root_size + self.swap_size + self.data_size
        if volume_size < 1:
            die("Volume size is too small")

        if self.do_lvm:
            pinfo("Create virtual machine logical volume")

            lvcreate_cmd = ["lvcreate", "-y", self.lvm_vg, "-L", str(volume_size) + "G", "-n", self.lvm_lv ]
            if not self.lvm_physical_disk == None:
                lvcreate_cmd.append(self.lvm_physical_disk)

            if vmc.utils.lvm.locking_type() == 4:
                vmc.utils.lvm.unlock()

                subprocess.call(lvcreate_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

                vmc.utils.lvm.lock(4)
                vmc.utils.lvm.lv_activate(self.disk_path, self.cluster_nodes)
            # CLVM locking or single host
            else:
                subprocess.call(lvcreate_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

        else:
            pinfo("Create virtual machine disk image")
            subprocess.call(["qemu-img", "create", "-f", "raw", \
                            self.disk_path, \
                            str(volume_size) + "G"], \
                            stdout=subprocess.PIPE, \
                            stderr=subprocess.PIPE)
Exemplo n.º 3
0
 def install(self):
     if re.search("^centos4", self.template_name):
         d = centos4(self)
     elif re.search("^centos5", self.template_name):
         self.os = centos5(self)
         self.os.install()
     elif re.search("^centos6", self.template_name):
         self.os = centos6(self)
         self.os.install()
     elif re.search("^centos7", self.template_name):
         self.os = centos7(self)
         self.os.install()
     elif re.search("^rhel6", self.template_name):
         d = rhel6(self)
     elif re.search("^debian5", self.template_name):
         self.os = debian5(self)
         self.os.install()
     elif re.search("^debian6", self.template_name):
         self.os = debian6(self)
         self.os.install()
     elif re.search("^debian7", self.template_name):
         self.os = debian7(self)
         self.os.install()
     elif re.search("^debian8", self.template_name):
         self.os = debian8(self)
         self.os.install()
     elif self.template_name == "dummy":
         self.os = dummy(self)
         self.os.install()
         pinfo("Install dummy template (only create disk and VM definition file)")
     elif re.search("^ubuntu1604", self.template_name):
         self.os = ubuntu1604(self)
         self.os.install()
     else:
         die(self.template_name + " is unsupported")
Exemplo n.º 4
0
    def mkpart(self):
        pinfo("Create " + self.vm.disk_path + " partitions")

        subprocess.call(["parted", self.disk_loop_dev, "--script", "--", "mklabel msdos"])
        subprocess.call(["parted", self.disk_loop_dev, "--script", "--", "mkpart primary 1 %uG" % self.vm.root_size])
        subprocess.call(["parted", self.disk_loop_dev, "--script", "--", "set 1 boot on"])
        begin_npart = self.vm.root_size
        subprocess.call(["parted", self.disk_loop_dev, "--script", "--", "mkpart primary linux-swap %uG %uG" % (begin_npart, begin_npart+self.vm.swap_size)])
        begin_npart += self.vm.swap_size
        subprocess.call(["parted", self.disk_loop_dev, "--script", "--", "mkpart primary %uG -1" % begin_npart])
Exemplo n.º 5
0
def deploy_cluster_config(bridge_id, do_vlan=True, phydev="bond0"):
    script_path = os.path.realpath(sys.argv[0])

    for node in vmcConfig().cluster_nodes:
        print("")
        pinfo("Create on %s" % node)
        if do_vlan:
            call(["ssh", "-l", "root", node, "%s -b %d -i %s -c" % (script_path, bridge_id, phydev)])
        else:
            call(["ssh", "-l", "root", node, "%s -b %d" % (script_path, bridge_id)])
Exemplo n.º 6
0
 def install_bootloader(self):
     pinfo("Setting up bootloader")
     try:
         subprocess.call(["sync"])
         subprocess.call(["/opt/openwide/vmc-grub-debian6/sbin/grub2-setup",  "-d",  self.new_root + "/boot/grub", "-r", "(%s,msdos3)" % self.disk_loop_dev, self.disk_loop_dev])
         subprocess.call(["chmod", "644", self.new_root + "/boot/grub/grub.cfg"])
         subprocess.call(["sed", "-i", "s/OWO_ROOTFSUUID/" + fs_uuid(self.partition['root']) + "/g", self.new_root + "/boot/grub/grub.cfg"])
         subprocess.call(["chmod", "444", self.new_root + "/boot/grub/grub.cfg"])
     except:
         pass
Exemplo n.º 7
0
    def set_hostname(self):
        pinfo("Setting up the hostname \"" + self.vm.name  + "\"")

        f = open(self.new_root + "/etc/sysconfig/network", "a+")
        f.write("HOSTNAME=" + self.vm.name + "\n")
        f.close()

        f = open(self.new_root + "/etc/hosts", "a")
        f.write("\n127.0.0.1   " + self.vm.name + "." + self.vm.domain + " " + self.vm.name + "\n::1\t    " + \
                self.vm.name + "." + self.vm.domain + " " + self.vm.name + "\n")
        f.close()
Exemplo n.º 8
0
def mkfs(device, fstype, label, opts=None):
    pinfo("Format %s device %s" % (fstype, device))

    mkfs_cmd = ["mkfs", "-t", fstype, "-L", label, device]

    if not opts == None: 
        mkfs_cmd.append(opts)

    subprocess.call(mkfs_cmd, \
                    stdout=subprocess.PIPE, \
                    stderr=subprocess.PIPE)
Exemplo n.º 9
0
    def set_hostname(self):
        pinfo("Setting up the hostname \"" + self.vm.name  + "\"")

        f = open(self.new_root + "/etc/hostname", "w")
        f.write(self.vm.name + "\n")
        f.close()

        f = open(self.new_root + "/etc/hosts", "a")
        f.write("\n127.0.0.1   " + self.vm.name + "." + self.vm.domain + " " + self.vm.name + "\n::1\t    " + \
                self.vm.name + "." + self.vm.domain + " " + self.vm.name + "\n")
        f.close()
Exemplo n.º 10
0
def remove_local_config(bridge_id, delete_vlan=True, phydev="bond0"):
    vnets = attached_to_br(bridge_id)
    if len(vnets) > 0:
        dom = []
        for vnet in vnets:
            dom.append(attached_domain_from_vnet(vnet))

        perror("Bridge br%d is used\n- " % bridge_id + "\n- ".join(dom))
        sys.exit(2)

    pinfo("Stop bridge interface br%d" % bridge_id)
    call(["ifdown", "br%d" % bridge_id])

    pinfo("Remove bridge configuration file")
    bridge_cfg_file = "/etc/sysconfig/network-scripts/ifcfg-br%d" % bridge_id

    if os.path.exists(bridge_cfg_file):
        os.unlink(bridge_cfg_file)
    else:
        perror("%s does not exist" % bridge_cfg_file)

    if delete_vlan:
        pinfo("Stop VLAN interface %s.%d" % (phydev, bridge_id))
        call(["ifdown", "%s.%d" % (phydev, bridge_id)])

        pinfo("Remove VLAN configuration file")
        vlan_cfg_file = "/etc/sysconfig/network-scripts/ifcfg-%s.%d" % (phydev, bridge_id)

        if os.path.exists(vlan_cfg_file):
            os.unlink(vlan_cfg_file)
        else:
            perror("%s does not exist" % vlan_cfg_file)
Exemplo n.º 11
0
def chpasswd(root='/'):
    randomsalt = ""
    pinfo("Please enter root password (apg -a 1 -n 1 -m 16 -x 16 -M LN -E 'azqwm')")
    password   = getpass.getpass()
    choices    = string.ascii_uppercase + string.digits + string.ascii_lowercase

    for _ in range(0,8):
        randomsalt += random.choice(choices)

    pwhash      = crypt.crypt(password, '$6$%s$' % randomsalt)
    shadowentry = 'root:' + pwhash + ':' + str(int(time.time() / 86400)) + ':0:99999:7:::'

    try:
        subprocess.call(["sed", "-i", "s#^root.*#" + shadowentry + "#1", root + "/etc/shadow"])
    except:
        perror("Failed to setup root password")
        pass
Exemplo n.º 12
0
    def install_bootloader(self):
        pinfo("Setting up bootloader")
        try:
            link_vda = self.new_root + "/tmp/vda"
            link_vda1 = self.new_root + "/tmp/vda1"
            os.symlink(self.disk_loop_dev, link_vda)
            os.symlink(self.partition['root'], link_vda1)
            subprocess.call(["sync"])

            subprocess.call("""/opt/openwide/vmc-grub-debian5/sbin/grub --batch --device-map=/dev/null << EOF >/dev/null 2>&1
device (hd0) %s
root (hd0,0)
setup (hd0)
EOF""" % link_vda, shell=True)

            os.unlink(link_vda1)
            os.unlink(link_vda)
        except:
            pass
Exemplo n.º 13
0
    def set_network_config(self, interface='eth0'):
        pinfo("Setting up network configuration")
    
        while True:
            self.ip = input("[ * ] Enter IPv4 addess (x.x.x.x) or \"dhcp\" :\n")
            if self.ip == "dhcp":
                break
            if ipv4(self.ip):
                while True:
                    self.netmask = input("[ * ] Enter netmask (255.255.255.0) :\n")
                    if ipv4(self.netmask):
                        break
                while True:
                    self.gateway = input("[ * ] Enter the default gateway or \"none\" :\n")
                    if self.gateway == "none":
                        self.gateway = None
                        break
                    if ipv4(self.gateway):
                        break
                break
    
        f = open(self.new_root + '/etc/network/interfaces', "w")
        if self.ip == "dhcp":
             f.write("""auto lo
iface lo inet loopback

auto %s
iface %s inet dhcp""" % (interface, interface))
        else:
            netconf = """auto lo
iface lo inet loopback

auto %s
iface %s inet static
  address %s
  netmask %s""" % (interface, interface, self.ip, self.netmask)
            if not self.gateway == None:
                f.write(netconf + "\n  gateway %s" % self.gateway)
            else:
                f.write(netconf)

        f.close()
Exemplo n.º 14
0
    def set_network_config(self, interface='eth0'):
        pinfo("Setting up network configuration")
    
        while True:
            self.ip = input("[ * ] Enter IPv4 addess (x.x.x.x) or \"dhcp\" :\n")
            if self.ip == "dhcp":
                break
            if ipv4(self.ip):
                while True:
                    self.netmask = input("[ * ] Enter netmask (255.255.255.0) :\n")
                    if ipv4(self.netmask):
                        break
                while True:
                    self.gateway = input("[ * ] Enter the default gateway or \"none\" :\n")
                    if self.gateway == "none":
                        self.gateway = None
                        break
                    if ipv4(self.gateway):
                        break
                break
    
        f = open(self.new_root + '/etc/sysconfig/network-scripts/ifcfg-' + interface, "w")
        if self.ip == "dhcp":
             f.write("""DEVICE=%s
BOOTPROTO=dhcp
NM_CONTROLLED=\"no\"
ONBOOT=\"yes\"\n""" % interface)
        else:
            netconf = """DEVICE=%s
BOOTPROTO=static
NM_CONTROLLED=\"no\"
ONBOOT=\"yes\"
IPADDR=%s
NETMASK=%s\n""" % (interface, self.ip, self.netmask)
            if not self.gateway == None:
                f.write(netconf + "GATEWAY=%s\n" % self.gateway)
            else:
                f.write(netconf)

        f.close()
Exemplo n.º 15
0
def create_local_config(bridge_id, do_vlan=False, phydev="bond0"):
    pinfo("Create bridge config file")
    bridge_cfg_file = "/etc/sysconfig/network-scripts/ifcfg-br%d" % bridge_id
    if not os.path.exists(bridge_cfg_file):
        with open(bridge_cfg_file, "w") as f:
            f.write(netbridge_file(bridge_id))
    else:
        die("\"br%d\" bridge already exists, exiting..." % bridge_id)

    pinfo("Activating bridge")
    call(["ifup", "br%d" % bridge_id])

    if do_vlan:
        pinfo("Create VLAN config file")
        vlan_cfg_file = "/etc/sysconfig/network-scripts/ifcfg-%s.%d" % (phydev, bridge_id)
        if not os.path.exists(vlan_cfg_file):
            with open(vlan_cfg_file, "w") as f:
                f.write(netvlan_file(phydev, bridge_id, bridge_id))
        else:
            die("\"%d\" bridge already exists, exiting...")

        pinfo("Activating VLAN")
        call(["ifup", "%s.%d" % (phydev, bridge_id)])
Exemplo n.º 16
0
    def extract_template(self):
        self.new_root = tempfile.mktemp(prefix="/tmp/owo.", dir=True)

        try:
            pinfo("Create temporary mount point " + self.new_root)
            os.mkdir(self.new_root)
        except:
            die("Unable to create temporary mount point")

        subprocess.call(["sync"])
        subprocess.call(["mount", "-o", "noload", self.partition['root'], self.new_root])

        pinfo("Extract " + self.vm.template_name + " template")
        subprocess.call(["tar", "--numeric-owner", "-xf", self.vm.template_path, \
                         "-C", self.new_root + "/"])

        pinfo("Setting up the fstab")

        f = open(self.new_root + "/etc/fstab", "r")

        fstab_array = []
        for line in f.readlines():
            if not re.search (r"swap|data|label=/", line, re.IGNORECASE):
                fstab_array.append(line)

        f.close()

        fstab_array.append("LABEL=ROOT\t/\text3\trw,errors=remount-ro,noatime,nodiratime\t1 1\n")
        fstab_array.append("LABEL=DATA\t/data\text3\trw,errors=remount-ro,noatime,nodiratime\t1 2\n")
        fstab_array.append("LABEL=SWAP\tnone\tswap\tsw\t0 0\n")

        f = open(self.new_root + "/etc/fstab", "w")
        f.write("".join(fstab_array))
        f.close()

        # FIXME: Open Wide specific
        os.mkdir(self.new_root + "/data")
        subprocess.call(["mount", "-o", "noload", self.partition['data'], self.new_root + "/data"])

        for dir in ["/data/log", "/data/services"]:
            os.mkdir(self.new_root + dir)

        subprocess.call(["umount", self.new_root + "/data"])
Exemplo n.º 17
0
    for h in conf.cluster_nodes:
        conn = libvirt.open("qemu+ssh://" + h + "/system")
        try:
            dom = conn.lookupByName(todelete)
        except:
            perror("\"%s\" domain isn't defined on %s" % (todelete, h))
            dom = None
            pass
        
        if not dom == None:
            if dom.isActive():
                perror("\"%s\" domain is running on %s, shutdown the domain and retry" % (todelete, h))
                conn.close()
                sys.exit(1)
            else:
                pinfo("Undefine \"%s\" on %s" % (todelete, h))
                dom.undefine()

        conn.close()
        
else:
    conn = libvirt.open(None)
    try:
        dom = conn.LookupByName(todelete)
    except:
        perror("%s domain isn't defined here" % todelete)
        conn.close()
        sys.exit(1)

    if dom.isActive():
        perror("Can't delete %s because it running here" % todelete)
Exemplo n.º 18
0
    for h in conf.cluster_nodes:
        conn = libvirt.open("qemu+ssh://" + h + "/system")
        try:
            dom = conn.lookupByName(toundefine)
        except:
            perror("\"%s\" domain isn't defined on %s" % (toundefine, h))
            dom = None
            pass

        if not dom == None:
            if dom.isActive():
                perror("\"%s\" domain is running on %s, shutdown the domain and retry" % (toundefine, h))
                conn.close()
                sys.exit(1)
            else:
                pinfo("Undefine \"%s\" on %s" % (toundefine, h))
                dom.undefine()

        conn.close()

else:
    conn = libvirt.open(None)
    try:
        dom = conn.LookupByName(toundefine)
    except:
        perror("%s domain isn't defined here" % toundefine)
        conn.close()
        sys.exit(1)

    if dom.isActive():
        perror("Can't delete %s because it running here" % toundefine)
Exemplo n.º 19
0
    if todefine == "--help" or todefine == "-h":
        usage()
except:
    usage()
    sys.exit(1)

conf = vmcConfig()

xml_file_path = conf.libvirt_domain_dir + "/" + todefine + ".xml"
if not os.path.exists(xml_file_path):
    die(xml_file_path + " : doesn't exists")

try:
    with open(xml_file_path, "r") as f:
        xmldom = f.read()
except:
    pass
    die("Unable to read %s file" % xml_file_path,)

if conf.do_cluster:
    for h in conf.cluster_nodes:
        pinfo("Define %s on %s" % (xml_file_path, h))
        conn = libvirt.open("qemu+ssh://" + h + "/system")
        conn.defineXML(xmldom)
        conn.close()

else:
    conn = libvirt.open(None)
    conn.defineXML(xmldom)
    conn.close()
Exemplo n.º 20
0
    )


try:
    dest = sys.argv[1]
    if dest == "--help" or dest == "-h":
        usage()
except:
    usage()
    sys.exit(1)

try:
    conn = libvirt.open(None)
    dconn = libvirt.open("qemu+ssh://" + dest + "/system")
except:
    perror("Unable to connect to the libvirt daemon")
    sys.exit(1)

for domain in conn.listAllDomains():
    if domain.isActive():
        try:
            pinfo("Migrate %s on %s" % (domain.name(), dest))
            domain.migrate(dconn, libvirt.VIR_MIGRATE_LIVE)
        except:
            die("Something goes wrong during the migration")

dconn.close()
conn.close()

sys.exit(0)
Exemplo n.º 21
0
-h, --help      Display help information
"""
        % os.path.basename(sys.argv[0])
    )


try:
    domain = sys.argv[1]
    if domain == "--help" or domain == "-h":
        usage()
except:
    usage()
    sys.exit(1)

conf = vmcConfig()

if not conf.do_lvm:
    die("VM storage is not set to LVM")

xml_file_path = conf.libvirt_domain_dir + "/" + domain + ".xml"
if not os.path.exists(xml_file_path):
    die(xml_file_path + " : doesn't exists")

xml_dom = parse(xml_file_path)

for disk in xml_dom.getElementsByTagName("disk"):
    if disk.attributes["device"].value == "disk":
        d = disk.getElementsByTagName("source")[0].attributes["dev"].value
        pinfo("Activate LV %s on: %s" % (d, ", ".join(conf.cluster_nodes)))
        lv_activate(d, conf.cluster_nodes)
Exemplo n.º 22
0
def mkswap(device, label):
    pinfo("Format swap device " + device)
    subprocess.call(["mkswap", "-L", label, device], \
                    stdout=subprocess.PIPE, \
                    stderr=subprocess.PIPE)
Exemplo n.º 23
0
try:
    domain = sys.argv[1]
    if domain == "--help" or domain == "-h":
        usage()
except:
    usage()
    sys.exit(1)

conf = vmcConfig()

if not conf.do_lvm:
    die("VM storage is not set to LVM")

xml_file_path = conf.libvirt_domain_dir + "/" + domain + ".xml"
if not os.path.exists(xml_file_path):
    die(xml_file_path + " : doesn't exists")

xml_dom = parse(xml_file_path)

for disk in xml_dom.getElementsByTagName('disk'):
        if disk.attributes['device'].value == 'disk':
            d = disk.getElementsByTagName('source')[0].attributes['dev'].value
            if conf.do_cluster:
                pinfo("Deactivate LV %s on: %s" % (d, ', '.join(conf.cluster_nodes)))
                lv_deactivate(d, conf.cluster_nodes)
            else:
                pinfo("Deactivate LV %s " + d)
                lv_deactivate(d)

Exemplo n.º 24
0
 def init_disk(self):
     # It's a small hack to help grub install
     pinfo("Initalize " + self.vm.disk_path + " disk")
     with open(self.disk_loop_dev, "wb") as f:
         f.write("\x00" * 10485760)
     subprocess.call(["sync"])
Exemplo n.º 25
0
    def set_puppet_config(self):
        pinfo("Setting up Puppet configuration")

        fqdn = self.vm.name + "." + self.vm.domain 

        try:
            f = open(self.new_root + "/etc/puppet/puppet.conf", "w")
            if self.ip == "dhcp":
                f.write("""[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
#factpath=$vardir/lib/facter
templatedir=$confdir/templates
pluginsync=true

[agent]
ssldir = /etc/puppet/ssl
server=puppetmaster.accelance.net
certname=%s
fqdn=%s
listen=true
client=false
#bindaddress=
report=true
environment=production\n""" % (fqdn, fqdn))
            else:
                f.write("""[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
#factpath=$vardir/lib/facter
templatedir=$confdir/templates
pluginsync=true

[agent]
ssldir = /etc/puppet/ssl
server=puppetmaster.accelance.net
certname=%s
fqdn=%s
listen=true
client=false
bindaddress=%s
report=true
environment=production\n""" % (fqdn, fqdn, self.ip))

            f.close()

            open(self.new_root + "/etc/puppet/namespaceauth.conf", "a").close()
        except:
            perror("Failed to configure Puppet")
            pass

        f = open(self.new_root + "/etc/default/puppet", "w")
        f.write( """# Defaults for puppet - sourced by /etc/init.d/puppet

# Start puppet on boot?
START=yes

# Startup options
DAEMON_OPTS=\"-w 5\"\n""")
        f.close()

        f = open(self.new_root + "/etc/puppet/auth.conf", "w")
        f.write("""path /run
method save
allow puppetmaster.accelance.net\n""")
        f.close()
Exemplo n.º 26
0
import libvirt
from vmc.common import pinfo, perror, die
from vmc.utils.openwide import vmc_unlock, vmc_lock
import vmc.utils.lvm

def usage():
    print ("""Usage : %s

Unlock LVM metadata

-h, --help	Display help information
""" % os.path.basename(sys.argv[0]))
try:
    dest = sys.argv[1]
    if dest == "--help" or dest == "-h":
        usage()
except: 
    pass

conf = vmcConfig()

if vmc.utils.lvm.locking_type() == 0:
    die("LVM metadata are already unlocked")

vmc_lock(conf.lockfile, os.path.basename(sys.argv[0]))
vmc.utils.lvm.unlock()

pinfo("Don't forget to re-lock LVM metadata after operation")

sys.exit(0)
Exemplo n.º 27
0
import libvirt
from vmc.common import pinfo, perror, die
from vmc.utils.openwide import vmc_unlock, vmc_lock
import vmc.utils.lvm

def usage():
    print ("""Usage : %s

Lock LVM metadata

-h, --help	Display help information
""" % os.path.basename(sys.argv[0]))
try:
    dest = sys.argv[1]
    if dest == "--help" or dest == "-h":
        usage()
except: 
    pass

conf = vmcConfig()

if vmc.utils.lvm.locking_type() == 4:
    die("LVM metadata are already locked")

vmc.utils.lvm.lock()
vmc_unlock(conf.lockfile)

pinfo("LVM metadata are now locked")

sys.exit(0)
Exemplo n.º 28
0
    def set_puppet_config(self):
        pinfo("Setting up Puppet configuration")

        fqdn = self.vm.name + "." + self.vm.domain 

        try:
            f = open(self.new_root + "/etc/puppet/puppet.conf", "w")
            if self.ip == "dhcp":
                f.write("""[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
#factpath=$vardir/lib/facter
templatedir=$confdir/templates
pluginsync=true

[agent]
ssldir = /etc/puppet/ssl
server=puppetmaster.accelance.net
certname=%s
fqdn=%s
listen=true
client=false
#bindaddress=
report=true
environment=production\n""" % (fqdn, fqdn))
            else:
                f.write("""[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
#factpath=$vardir/lib/facter
templatedir=$confdir/templates
pluginsync=true

[agent]
ssldir = /etc/puppet/ssl
server=puppetmaster.accelance.net
certname=%s
fqdn=%s
listen=true
client=false
bindaddress=%s
report=true
environment=production\n""" % (fqdn, fqdn, self.ip))

            f.close()

            open(self.new_root + "/etc/puppet/namespaceauth.conf", "a").close()
        except:
            perror("Failed to configure Puppet")
            pass

        f = open(self.new_root + "/etc/sysconfig/puppet", "w")
        f.write( """# The puppetmaster server
#PUPPET_SERVER=puppet

# If you wish to specify the port to connect to do so here
#PUPPET_PORT=8140

# Where to log to. Specify syslog to send log messages to the system log.
#PUPPET_LOG=/var/log/puppet/puppet.log

# You may specify other parameters to the puppet client here
PUPPET_EXTRA_OPTS=\"-w 5\"\n""")
        f.close()

        f = open(self.new_root + "/etc/puppet/auth.conf", "w")
        f.write("""path /run
method save
allow puppetmaster.accelance.net\n""")
        f.close()