#!/usr/bin/env ruby require 'optparse' require 'fileutils' require 'net/http' require 'etc' require 'facter' options = {} OptionParser.new do |opts| opts.banner = "Usage: generate_container.rb [options]" opts.on("--fqdn [FQDN]", "FQDN") do |f| options[:fqdn] = f end opts.on("--ip [IP]", "IP address") do |i| options[:ip] = i end opts.on("--cidr [CIDR]", "CIDR") do |c| options[:cidr] = c end opts.on("--gateway [GATEWAY]", "Gateway") do |g| options[:gateway] = g end opts.on("--ip6 [IPv6]", "IPv6") do |i6| options[:ip6] = i6 end opts.on("--cidr6 [CIDR]", "CIDR v6") do |c6| options[:cidr6] = c6 end opts.on("--gateway6 [GATEWAY]", "Gateway v6") do |g6| options[:gateway6] = g6 end opts.on("--os [VERSION]", "OS version") do |os| options[:os] = os end opts.on("--version [VERSION]", "OS version") do |v| options[:version] = v end opts.on("--puppet [PUPPET SERVER]", "Puppet server") do |p| options[:puppet] = p end opts.on("--ippuppet [IP PUPPET SERVER]", "IP Puppet server") do |ph| options[:ippuppet] = ph end opts.on("--ip6puppet [IPv6 PUPPET SERVER]", "IPv6 Puppet server") do |p6h| options[:ip6puppet] = p6h end opts.on("--dns [DNS SERVER]", "DNS Server") do |dn| options[:dns] = dn end opts.on("--idhypervisor [ID Hypervisor]", "ID Hypervisor") do |ih| options[:idhypervisor] = ih end opts.on("--provider [Provider]", "Provider") do |pr| options[:provider] = pr end end.parse! ip_split = options[:ip].split(".") mac = "52:54:00:#{options[:idhypervisor]}0:"+ip_split[2].to_i.to_s(16).rjust(2,'0')+":"+ip_split[3].to_i.to_s(16).rjust(2,'0') mac6 = "52:54:00:#{options[:idhypervisor]}1:"+ip_split[2].to_i.to_s(16).rjust(2,'0')+":"+ip_split[3].to_i.to_s(16).rjust(2,'0') Dir.chdir('/srv') if options[:version].nil? then options[:version] = "7" end if options[:os].nil? then options[:os] = "centos" end if options[:os] == "fedora" then options[:repo] = "--disablerepo='*' --enablerepo='fedora'" else options[:repo] = "" end if not File.exist?("/srv/#{options[:os]}#{options[:version]}.tar") then system("yum -y --installroot=/srv/tmprootfs --releasever=#{options[:version]} #{options[:repo]} --nogpg install systemd passwd yum #{options[:os]}-release vim-minimal openssh-server procps-ng iputils emacs-nox wget curl git") system("yum -y --installroot=/srv/tmprootfs --releasever=#{options[:version]} #{options[:repo]} --nogpg groupinstall 'Minimal Install'") system("yum -y --installroot=/srv/tmprootfs --releasever=#{options[:version]} #{options[:repo]} --nogpg groupinstall 'Development Tools'") Dir.chdir("tmprootfs") system("tar cvf #{options[:os]}#{options[:version]}.tar --exclude '#{options[:os]}#{options[:version]}.tar' .") Dir.chdir("..") File.rename("tmprootfs/#{options[:os]}#{options[:version]}.tar","#{options[:os]}#{options[:version]}.tar") FileUtils.rm_rf("tmprootfs") end options[:hostname] = options[:fqdn].split(".").first Dir.chdir('/var/lib/lxc') if not File.exists?(options[:hostname]) FileUtils.mkdir_p("/var/lib/lxc/"+options[:hostname]+"/rootfs") Dir.chdir("/var/lib/lxc/"+options[:hostname]+"/rootfs") system("tar xvf /srv/#{options[:os]}#{options[:version]}.tar") end pubkey = File.read("/root/.ssh/id_ecdsa.pub") chroot = Process.fork do Dir.chdir("/") Dir.chroot("/var/lib/lxc/"+options[:hostname]+"/rootfs") filename = "/etc/sysconfig/network" outdata = "NETWORKING=yes\n" File.open(filename, 'w+') do |out| out << outdata end outdata = "#{options[:fqdn]}\n" File.open("/etc/hostname", 'w+') do |out| out << outdata end outdata = <