Skip to content

Instantly share code, notes, and snippets.

@hbokh
Last active February 21, 2020 09:25
Show Gist options
  • Save hbokh/f1f7414c27432c345b31e4b1bd0a0855 to your computer and use it in GitHub Desktop.
Save hbokh/f1f7414c27432c345b31e4b1bd0a0855 to your computer and use it in GitHub Desktop.
Terraform Docker provider to run Cobbler 3.x
#!/bin/bash
set -e
# This script assumes Fedora 31 is being used.
# It will create a standard Cobbler environment that can be used for acceptance testing.
# With this enviornment spun up, the config should be:
# COBBLER_URL=http://127.0.0.1:25151
# COBBLER_USERNAME=cobbler
# COBBLER_PASSWORD=cobbler
sudo dnf update -y
sudo dnf install -y make automake gcc gcc-c++ git wget
cd
echo "export PATH=$PATH:$HOME/terraform:$HOME/go/bin" >> ~/.bashrc
export PATH=$PATH:$HOME/terraform:$HOME/go/bin
# Give me Golang 1.13
sudo wget -O /usr/local/bin/gimme https://raw.githubusercontent.com/travis-ci/gimme/master/gimme
sudo chmod +x /usr/local/bin/gimme
/usr/local/bin/gimme 1.13 >> ~/.bashrc
eval "$(/usr/local/bin/gimme 1.13)"
mkdir ~/go
echo "export GOPATH=$HOME/go" >> ~/.bashrc
echo "export GO113MODULE=on" >> ~/.bashrc
export GOPATH=$HOME/go
source ~/.bashrc
git clone https://github.com/wearespindle/terraform-provider-cobbler
# Cobbler
sudo dnf install -y cobbler cobbler-web debmirror dnsmasq
sudo tee /etc/cobbler/modules.conf <<EOF
[authentication]
module = authentication.configfile
[authorization]
module = authorization.allowall
[dns]
module = managers.dnsmasq
[dhcp]
module = managers.dnsmasq
[tftpd]
module = managers.in_tftpd
EOF
sudo tee /etc/cobbler/dnsmasq.template <<EOF
dhcp-range = 192.168.255.200,192.168.255.250
server = 8.8.8.8
read-ethers
addn-hosts = /var/lib/cobbler/cobbler_hosts
dhcp-option=3,\$next_server
dhcp-lease-max=1000
dhcp-authoritative
dhcp-boot=pxelinux.0
dhcp-boot=net:normalarch,pxelinux.0
dhcp-boot=net:ia64,\$elilo
\$insert_cobbler_system_definitions
EOF
sudo sed -i -e 's/^manage_dhcp: 0/manage_dhcp: 1/' /etc/cobbler/settings
sudo sed -i -e 's/^manage_dns: 0/manage_dns: 1/' /etc/cobbler/settings
sudo sed -i -e 's/^next_server:.*/next_server: 127.0.0.1/' /etc/cobbler/settings
sudo sed -i -e 's/^server:.*/server: 127.0.0.1/' /etc/cobbler/settings
# Makt HTTPd listen on port 80
sudo sed -i s/443/80/g /etc/httpd/conf.d/cobbler_web.conf
# User: cobbler / Pass: cobbler
sudo tee /etc/cobbler/users.digest <<EOF
cobbler:Cobbler:a2d6bae81669d707b72c0bd9806e01f3
EOF
# !! NOTE !!
# The systemctl commands below will fail unless we run a systemd enabled container like this:
# docker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name cobbler fedora:31 /usr/lib/systemd/systemd --system
sudo systemctl daemon-reload
sudo systemctl restart httpd
sudo systemctl stop cobblerd
sleep 2
sudo systemctl start cobblerd
sleep 5
sudo cobbler get-loaders
sudo cobbler sync
# Import an Ubuntu Bionic (18.04) netboot distro (size: 76M)
cd /tmp
wget http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/netboot/mini.iso
sudo mount -o loop mini.iso /mnt
sudo cobbler import --name Ubuntu-18.04 --breed ubuntu --path /mnt
# Create a file with the cobbler credential environment variables
cat > ~/cobblerc <<EOF
export COBBLER_USERNAME="cobbler"
export COBBLER_PASSWORD="cobbler"
export COBBLER_URL="http://localhost:25151"
EOF
# Configure Docker provider and connect to the local Docker socket
provider "docker" {
host = "unix:///var/run/docker.sock"
}
# Use cobbler:f31 (based on Fedora 31)
resource "docker_image" "cobbler" {
name = "cobbler:f31"
}
# Custom Fedora 31 container to run Cobbler 3.x in
resource "docker_container" "cobbler" {
image = "cobbler:f31"
name = "cobbler-f31"
privileged = true
must_run = true
volumes {
container_path = "/sys/fs/cgroup"
host_path = "/sys/fs/cgroup"
read_only = true
}
ports {
internal = 80
external = 80
}
upload {
source = "${path.module}/deploy.sh"
file = "/deploy.sh"
executable = true
}
entrypoint = ["/usr/lib/systemd/systemd", "--system"]
#command = ["/bin/bash", "-x", "/deploy.sh"]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment