diff --git a/bootstrap/README.md b/bootstrap/README.md index 2ab6a83a..a20a76e6 100644 --- a/bootstrap/README.md +++ b/bootstrap/README.md @@ -1,16 +1,26 @@ # Solar image building -In `bootstrap/trusty64` directory there are `box.ovf` and `box-disk1.vmdk` -files from the `trusty64` Vagrant box (normally found in - `~/.vagrant.d/boxes/trusty64/0/virtualbox`). - -To build, install Packer (https://www.packer.io/): +To build for a Virtualbox, install Packer (https://www.packer.io/): ``` +cp vagrant-settings.yaml_defaults vagrant-settings.yaml +sed -i 's/master_image:.*$/master_image: solar-master/g' ./vagrant-settings.yaml +sed -i 's/slaves_image:.*$/slaves_image: solar-master/g' ./vagrant-settings.yaml cd bootstrap -packer build solar-master.json -cp solar-master.box ../ +packer build -only=virtualbox-iso solar-master.json +mv solar-master-virtualbox.box ../solar-master.box cd .. -vagrant up +vagrant box add solar-master solar-master.box --provider virtualbox +vagrant up --provider virtualbox +``` + +To build for a libvirt, replace the following commands: +``` +packer build -only=qemu solar-master.json +mv solar-master-libvirt.box ../solar-master.box +cd .. +vagrant box add solar-master solar-master.box --provider libvirt +vagrant up --provider libvirt + ``` If Vagrant throws error about `vboxsf` try this: @@ -22,4 +32,7 @@ vagrant plugin install vagrant-vbguest If you're rebuilding the same box, make sure Vagrant reimports it: ``` vagrant box remove solar-master -``` \ No newline at end of file +``` + +Note that you can also set `PACKER_LOG=debug` and/or `VAGRANT_LOG=debug` +the shell environment variables to get more information. diff --git a/bootstrap/build-image.yaml b/bootstrap/build-image.yaml index 9dd5e139..ed70438c 100644 --- a/bootstrap/build-image.yaml +++ b/bootstrap/build-image.yaml @@ -4,5 +4,5 @@ sudo: yes tasks: #- shell: vagrant init ubuntu/trusty64 - - - shell: /usr/local/bin/packer build solar.json -var 'is_master=true' + - shell: /usr/local/bin/packer build -only=qemu solar-master.json -var 'is_master=true' + - shell: /usr/local/bin/packer build -only=virtualbox-iso solar-master.json -var 'is_master=true' diff --git a/bootstrap/http/preseed.cfg b/bootstrap/http/preseed.cfg new file mode 100644 index 00000000..b55afc96 --- /dev/null +++ b/bootstrap/http/preseed.cfg @@ -0,0 +1,67 @@ +# Ubuntu preseed file - preseed.cfg +# Works for Ubuntu 10.x, 11.x & 12.x +# +# For more information on preseed syntax and commands, refer to: +# https://help.ubuntu.com/12.04/installation-guide/i386/appendix-preseed.html +# +# For testing, you can fire up a local http server temporary. +# Download the preseed.cfg file locally, cd to the directory where the +# preseed.cfg resides and run hte following command: +# $ python -m SimpleHTTPServer +# You don't have to restart the server every time you make changes. Python +# will reload the file from disk every time there is a request. As long as you +# save your changes they will be reflected in the next HTTP download. Then to +# test with a PXE boot server, use the following kernel boot parameters: +# > linux auto url=http://:8000/preseed.cfg hostname= locale=en_US keyboard-configuration/modelcode=SKIP +# +# NOTE: If you netboot/PXE boot Ubuntu, it will ignore the value in hostname, +# but you must provide a hostname as a boot parameter to prevent the Ubuntu +# install from prompting for a hostname + +choose-mirror-bin mirror/http/proxy string +d-i base-installer/kernel/override-image string linux-server +d-i finish-install/reboot_in_progress note +d-i grub-installer/only_debian boolean true +d-i grub-installer/with_other_os boolean true +d-i partman-auto-lvm/guided_size string max +d-i partman-auto/choose_recipe select atomic +d-i partman-auto/method string lvm +d-i partman-lvm/confirm boolean true +d-i partman-lvm/confirm boolean true +d-i partman-lvm/confirm_nooverwrite boolean true +d-i partman-lvm/device_remove_lvm boolean true +d-i partman/choose_partition select finish +d-i partman/confirm boolean true +d-i partman/confirm_nooverwrite boolean true +d-i partman/confirm_write_new_label boolean true +# Default user +d-i passwd/user-fullname string vagrant +d-i passwd/user-password password vagrant +d-i passwd/user-password-again password vagrant +d-i passwd/username string vagrant +d-i user-setup/allow-password-weak boolean true +d-i user-setup/encrypt-home boolean false + +# german mirror +d-i mirror/country string manual +d-i mirror/http/hostname string archive.ubuntu.com +d-i mirror/http/directory string /ubuntu +d-i mirror/http/proxy string +d-i mirror/http/mirror select DE.archive.ubuntu.com + +# german timezone and ntp server +d-i clock-setup/utc boolean true +d-i clock-setup/utc-auto boolean true +d-i time/zone string Europe/Berlin +d-i clock-setup/ntp boolean true +d-i clock-setup/ntp-server de.pool.ntp.org + +#d-i pkgsel/include string openssh-server cryptsetup build-essential libssl-dev libreadline-dev zlib1g-dev linux-source dkms +d-i pkgsel/include string openssh-server ntp curl nfs-common linux-headers-$(uname -r) build-essential perl dkms +d-i pkgsel/install-language-support boolean false +# Policy for applying updates. May be "none" (no automatic updates), +# "unattended-upgrades" (install security updates automatically), or +# "landscape" (manage system with Landscape). +d-i pkgsel/update-policy select none +d-i pkgsel/upgrade select full-upgrade +tasksel tasksel/first multiselect standard, ubuntu-server diff --git a/bootstrap/playbooks/files/cleanup.sh b/bootstrap/playbooks/files/cleanup.sh new file mode 100644 index 00000000..df718159 --- /dev/null +++ b/bootstrap/playbooks/files/cleanup.sh @@ -0,0 +1,69 @@ +#!/bin/bash -eux + +CLEANUP_PAUSE=${CLEANUP_PAUSE:-0} +echo "==> Pausing for ${CLEANUP_PAUSE} seconds..." +sleep ${CLEANUP_PAUSE} + +# Make sure udev does not block our network - http://6.ptmc.org/?p=164 +echo "==> Cleaning up udev rules" +rm -rf /dev/.udev/ +rm /lib/udev/rules.d/75-persistent-net-generator.rules +rm /etc/udev/rules.d/70-persistent-net.rules +mkdir /etc/udev/rules.d/70-persistent-net.rules + +echo "==> Cleaning up leftover dhcp leases" +# Ubuntu 10.04 +if [ -d "/var/lib/dhcp3" ]; then + rm /var/lib/dhcp3/* +fi +# Ubuntu 12.04 & 14.04 +if [ -d "/var/lib/dhcp" ]; then + rm /var/lib/dhcp/* +fi + +# Add delay to prevent "vagrant reload" from failing +echo "pre-up sleep 2" >> /etc/network/interfaces + +echo "==> Cleaning up tmp" +rm -rf /tmp/* + +# Cleanup apt cache +apt-get -y autoremove --purge +apt-get -y clean +apt-get -y autoclean + +echo "==> Installed packages" +dpkg --get-selections | grep -v deinstall + +# Remove Bash history +unset HISTFILE +rm -f /root/.bash_history +rm -f /home/vagrant/.bash_history + +# Clean up log files +find /var/log -type f | while read f; do echo -ne '' > $f; done; + +echo "==> Clearing last login information" +>/var/log/lastlog +>/var/log/wtmp +>/var/log/btmp + +# Whiteout root +count=$(df --sync -kP / | tail -n1 | awk -F ' ' '{print $4}') +let count-- +dd if=/dev/zero of=/tmp/whitespace bs=1024 count=$count +rm /tmp/whitespace + +# Whiteout /boot +count=$(df --sync -kP /boot | tail -n1 | awk -F ' ' '{print $4}') +let count-- +dd if=/dev/zero of=/boot/whitespace bs=1024 count=$count +rm /boot/whitespace + +# Zero out the free space to save space in the final image +dd if=/dev/zero of=/EMPTY bs=1M +rm -f /EMPTY + +# Make sure we wait until all the data is written to disk, otherwise +# Packer might quite too early before the large files are deleted +sync diff --git a/bootstrap/playbooks/files/minimize.sh b/bootstrap/playbooks/files/minimize.sh new file mode 100644 index 00000000..92460e79 --- /dev/null +++ b/bootstrap/playbooks/files/minimize.sh @@ -0,0 +1,28 @@ +#!/bin/bash -eux + +echo "==> Installed packages before cleanup" +dpkg --get-selections | grep -v deinstall + +# Remove some packages to get a minimal install +echo "==> Removing all linux kernels except the currrent one" +dpkg --list | awk '{ print $2 }' | grep 'linux-image-3.*-generic' | grep -v $(uname -r) | xargs apt-get -y purge +echo "==> Removing linux source" +dpkg --list | awk '{ print $2 }' | grep linux-source | xargs apt-get -y purge +echo "==> Removing documentation" +dpkg --list | awk '{ print $2 }' | grep -- '-doc$' | xargs apt-get -y purge +echo "==> Removing obsolete networking components" +apt-get -y purge ppp pppconfig pppoeconf +echo "==> Removing other oddities" +apt-get -y purge popularity-contest installation-report landscape-common wireless-tools wpasupplicant ubuntu-serverguide + +# Clean up the apt cache +apt-get -y autoremove --purge +apt-get -y autoclean +apt-get -y clean + +echo "==> Removing man pages" +rm -rf /usr/share/man/* +echo "==> Removing anything in /usr/src" +rm -rf /usr/src/* +echo "==> Removing any docs" +rm -rf /usr/share/doc/* diff --git a/bootstrap/playbooks/files/sshd.sh b/bootstrap/playbooks/files/sshd.sh new file mode 100644 index 00000000..c6e4f20a --- /dev/null +++ b/bootstrap/playbooks/files/sshd.sh @@ -0,0 +1,3 @@ +#!/bin/bash -eux + +echo "UseDNS no" >> /etc/ssh/sshd_config diff --git a/bootstrap/playbooks/files/ubuntu-ansible.sh b/bootstrap/playbooks/files/ubuntu-ansible.sh index 11c4a206..35a8c950 100644 --- a/bootstrap/playbooks/files/ubuntu-ansible.sh +++ b/bootstrap/playbooks/files/ubuntu-ansible.sh @@ -3,8 +3,9 @@ # TODO: maybe this is better: # http://docs.ansible.com/ansible/intro_installation.html#latest-releases-via-apt-ubuntu -apt-get remove -f python-pip -sudo apt-get install -y python-setuptools +sudo apt-get remove -f python-pip +sudo apt-get update +sudo apt-get install -y python-setuptools python-dev autoconf g++ sudo easy_install pip sudo pip install -U pip sudo pip install ansible diff --git a/bootstrap/playbooks/files/update.sh b/bootstrap/playbooks/files/update.sh new file mode 100644 index 00000000..c3f2c19e --- /dev/null +++ b/bootstrap/playbooks/files/update.sh @@ -0,0 +1,12 @@ +#!/bin/bash -eux + +if [[ $UPDATE =~ true || $UPDATE =~ 1 || $UPDATE =~ yes ]]; then + echo "==> Updating list of repositories" + # apt-get update does not actually perform updates, it just downloads and indexes the list of packages + apt-get -y update + apt-get -y upgrade + echo "==> Performing dist-upgrade (all packages and kernel)" + apt-get -y dist-upgrade --force-yes + reboot + sleep 160 +fi diff --git a/bootstrap/playbooks/files/vagrant.sh b/bootstrap/playbooks/files/vagrant.sh new file mode 100644 index 00000000..bc198f34 --- /dev/null +++ b/bootstrap/playbooks/files/vagrant.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +date > /etc/vagrant_box_build_time + +SSH_USER=${SSH_USER:-vagrant} +SSH_USER_HOME=${SSH_USER_HOME:-/home/${SSH_USER}} +VAGRANT_INSECURE_KEY="ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key" + +# Packer passes boolean user variables through as '1', but this might change in +# the future, so also check for 'true'. +if [ "$INSTALL_VAGRANT_KEY" = "true" ] || [ "$INSTALL_VAGRANT_KEY" = "1" ]; then + # Create Vagrant user (if not already present) + if ! id -u $SSH_USER >/dev/null 2>&1; then + echo "==> Creating $SSH_USER user" + /usr/sbin/groupadd $SSH_USER + /usr/sbin/useradd $SSH_USER -g $SSH_USER -G sudo -d $SSH_USER_HOME --create-home + echo "${SSH_USER}:${SSH_USER}" | chpasswd + fi + + # Set up sudo + echo "==> Giving ${SSH_USER} sudo powers" + echo "${SSH_USER} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers + + echo "==> Installing vagrant key" + mkdir $SSH_USER_HOME/.ssh + chmod 700 $SSH_USER_HOME/.ssh + cd $SSH_USER_HOME/.ssh + + # https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub + echo "${VAGRANT_INSECURE_KEY}" > $SSH_USER_HOME/.ssh/authorized_keys + chmod 600 $SSH_USER_HOME/.ssh/authorized_keys + chown -R $SSH_USER:$SSH_USER $SSH_USER_HOME/.ssh +fi diff --git a/bootstrap/playbooks/files/vmtool.sh b/bootstrap/playbooks/files/vmtool.sh new file mode 100644 index 00000000..5774557d --- /dev/null +++ b/bootstrap/playbooks/files/vmtool.sh @@ -0,0 +1,52 @@ +#!/bin/bash -eux + +if [[ $PACKER_BUILDER_TYPE =~ vmware ]]; then + echo "==> Installing VMware Tools" + # Assuming the following packages are installed + # apt-get install -y linux-headers-$(uname -r) build-essential perl + + cd /tmp + mkdir -p /mnt/cdrom + mount -o loop /home/vagrant/linux.iso /mnt/cdrom + tar zxf /mnt/cdrom/VMwareTools-*.tar.gz -C /tmp/ + + /tmp/vmware-tools-distrib/vmware-install.pl -d + + rm /home/vagrant/linux.iso + umount /mnt/cdrom + rmdir /mnt/cdrom + rm -rf /tmp/VMwareTools-* +fi + +if [[ $PACKER_BUILDER_TYPE =~ virtualbox ]]; then + echo "==> Installing VirtualBox guest additions" + # Assuming the following packages are installed + # apt-get install -y linux-headers-$(uname -r) build-essential perl + # apt-get install -y dkms + + VBOX_VERSION=$(cat /home/vagrant/.vbox_version) + mount -o loop /home/vagrant/VBoxGuestAdditions_$VBOX_VERSION.iso /mnt + sh /mnt/VBoxLinuxAdditions.run + umount /mnt + rm /home/vagrant/VBoxGuestAdditions_$VBOX_VERSION.iso + rm /home/vagrant/.vbox_version + + if [[ $VBOX_VERSION = "4.3.10" ]]; then + ln -s /opt/VBoxGuestAdditions-4.3.10/lib/VBoxGuestAdditions /usr/lib/VBoxGuestAdditions + fi + /etc/init.d/vboxadd setup +fi + +if [[ $PACKER_BUILDER_TYPE =~ parallels ]]; then + echo "==> Installing Parallels tools" + + mount -o loop /home/vagrant/prl-tools-lin.iso /mnt + /mnt/install --install-unattended-with-deps + umount /mnt + rm -rf /home/vagrant/prl-tools-lin.iso + rm -f /home/vagrant/.prlctl_version +fi + +if [[ $PACKER_BUILDER_TYPE =~ libvirt ]]; then + echo "==> Doing nothing special" +fi diff --git a/bootstrap/playbooks/tasks/base.yaml b/bootstrap/playbooks/tasks/base.yaml index aa0f8d15..9b7a33a4 100644 --- a/bootstrap/playbooks/tasks/base.yaml +++ b/bootstrap/playbooks/tasks/base.yaml @@ -1,6 +1,6 @@ --- -- shell: apt-get update +- shell: sudo apt-get update - name: Base packages apt: name={{ item }} state=present @@ -38,14 +38,14 @@ #- shell: easy_install pip #- shell: pip install -U pip #- shell: pip install -U setuptools -- shell: pip install httpie -- shell: pip install docker-py==1.1.0 +- shell: sudo pip install httpie +- shell: sudo pip install docker-py==1.1.0 # faster json - shell: pip install ujson # Redis -- shell: pip install redis +- shell: sudo pip install redis - lineinfile: dest=/etc/redis/redis.conf regexp='^bind ' line='bind 0.0.0.0' - service: name=redis-server state=restarted diff --git a/bootstrap/playbooks/tasks/cloud_archive.yaml b/bootstrap/playbooks/tasks/cloud_archive.yaml index 42dbd0b4..c7af0e94 100644 --- a/bootstrap/playbooks/tasks/cloud_archive.yaml +++ b/bootstrap/playbooks/tasks/cloud_archive.yaml @@ -1,7 +1,8 @@ --- -- shell: apt-get update -- shell: apt-get -y upgrade -- shell: add-apt-repository -y cloud-archive:juno -- shell: apt-get update -- shell: apt-get update --fix-missing +- shell: sudo apt-get update +- shell: sudo apt-get -y upgrade +- shell: sudo apt-get -y install python-software-properties software-properties-common +- shell: sudo add-apt-repository -y cloud-archive:juno +- shell: sudo apt-get update +- shell: sudo apt-get update --fix-missing diff --git a/bootstrap/playbooks/tasks/puppet.yaml b/bootstrap/playbooks/tasks/puppet.yaml index 2e4a2f71..b6da30e9 100644 --- a/bootstrap/playbooks/tasks/puppet.yaml +++ b/bootstrap/playbooks/tasks/puppet.yaml @@ -1,9 +1,9 @@ --- # Puppet -- shell: wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb -O /root/puppetlabs-release-trusty.deb -- shell: dpkg -i /root/puppetlabs-release-trusty.deb -- shell: apt-get update +- shell: sudo wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb -O /root/puppetlabs-release-trusty.deb +- shell: sudo dpkg -i /root/puppetlabs-release-trusty.deb +- shell: sudo apt-get update - apt: name=puppet state=present - template: src=files/hiera.yaml dest=/etc/puppet/hiera.yaml diff --git a/bootstrap/solar-master.json b/bootstrap/solar-master.json index f3f531fa..2147a342 100644 --- a/bootstrap/solar-master.json +++ b/bootstrap/solar-master.json @@ -1,49 +1,182 @@ { "variables": { + "cleanup_pause": "", + "headless": "", + "update": "true", + "ssh_username": "vagrant", + "ssh_password": "vagrant", + "install_vagrant_key": "true", + "http_proxy": "{{env `http_proxy`}}", + "https_proxy": "{{env `https_proxy`}}", + "ftp_proxy": "{{env `ftp_proxy`}}", + "rsync_proxy": "{{env `rsync_proxy`}}", + "no_proxy": "{{env `no_proxy`}}", + "iso_url": "http://releases.ubuntu.com/14.04/ubuntu-14.04.3-server-amd64.iso", + "iso_checksum": "9e5fecc94b3925bededed0fdca1bd417", + "custom_script": ".", + "disk_size": "5000", + "mem_size": "512", + "vcpu_num": "1", "ansible_config_path": "/etc/ansible", "ansible_config_file": "ansible.cfg", "ansible_log_file": "/var/tmp/ansible.log" }, "builders": [{ - "type": "virtualbox-ovf", - "source_path": "trusty64/box.ovf", - "ssh_username": "vagrant", - "ssh_password": "vagrant", - "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now" + "vm_name": "ubuntu1404", + "type": "qemu", + "format": "qcow2", + "accelerator": "kvm", + "http_directory": "http", + "iso_url": "{{ user `iso_url` }}", + "iso_checksum": "{{ user `iso_checksum` }}", + "iso_checksum_type": "md5", + "ssh_username": "{{ user `ssh_username` }}", + "ssh_password": "{{ user `ssh_password` }}", + "ssh_wait_timeout": "10000s", + "headless": "{{ user `headless` }}", + "boot_wait": "30s", + "boot_command": [ + "", + "/install/vmlinuz auto", + " console-setup/ask_detect=false", + " console-setup/layoutcode=us", + " console-setup/modelcode=SKIP", + " debconf/frontend=noninteractive", + " debian-installer=en_US", + " fb=false", + " initrd=/install/initrd.gz", + " keymap=us debian-installer/keymap=us", + " kbd-chooser/method=us", + " keyboard-configuration/layout=USA", + " keyboard-configuration/variant=USA", + " locale=en_US", + " netcfg/get_domain=vm", + " netcfg/get_hostname=vagrant", + " noapic" , + " preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg", + " -- ", + "" + ], + "shutdown_command": "echo 'vagrant'|sudo -S shutdown -P now", + "disk_size": "{{ user `disk_size`}}", + "qemuargs": [ + [ + "-m", + "{{user `mem_size`}}M" + ], + [ + "-smp", + "{{ user `vcpu_num`}}" + ] + ] + }, + { + "vm_name": "ubuntu1404", + "type": "virtualbox-iso", + "http_directory": "http", + "iso_url": "{{ user `iso_url` }}", + "iso_checksum": "{{ user `iso_checksum` }}", + "iso_checksum_type": "md5", + "guest_os_type": "Ubuntu_64", + "guest_additions_path": "VBoxGuestAdditions_{{.Version}}.iso", + "virtualbox_version_file": ".vbox_version", + "headless": "{{ user `headless` }}", + "ssh_username": "{{ user `ssh_username` }}", + "ssh_password": "{{ user `ssh_password` }}", + "ssh_wait_timeout": "10000s", + "boot_wait": "30s", + "boot_command": [ + "", + "/install/vmlinuz noapic ", + "preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg ", + "debian-installer=en_US auto locale=en_US kbd-chooser/method=us ", + "hostname={{ .Name }} ", + "fb=false debconf/frontend=noninteractive ", + "keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=USA ", + "keyboard-configuration/variant=USA console-setup/ask_detect=false ", + "keymap=us debian-installer/keymap=us ", + "initrd=/install/initrd.gz -- " + ], + "shutdown_command": "echo 'vagrant'|sudo -S shutdown -P now", + "disk_size": "{{ user `disk_size`}}", + "vboxmanage": [ + ["modifyvm", "{{.Name}}", "--memory", "{{ user `mem_size`}}"], + ["modifyvm", "{{.Name}}", "--cpus", "{{ user `vcpu_num`}}"] + ] }], - "provisioners": [ - { + "provisioners": [{ + "type": "shell", + "execute_command": "echo '{{user `ssh_password`}}' | {{ .Vars }} sudo -E -S sh '{{ .Path }}'", + "inline": [ + "echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers" + ]}, { "type": "shell", "inline": ["sudo mkdir -p {{ user `ansible_config_path` }}"] - }, - { + }, { "type": "file", "source": "ansible.cfg", "destination": "/tmp/ansible.cfg" - }, - { + }, { "type": "shell", "inline": ["sudo mv /tmp/ansible.cfg {{ user `ansible_config_path` }}/{{ user `ansible_config_file` }}"] - }, - { + }, { "type": "shell", "inline": [ "sudo echo 'log_path = {{ user `ansible_log_file` }}' >> {{ user `ansible_config_path` }}/{{ user `ansible_config_file` }}", - "touch {{ user `ansible_log_file` }}", - "chmod 666 {{ user `ansible_log_file` }}" - ] - }, - { + "sudo touch {{ user `ansible_log_file` }}", + "sudo chmod 666 {{ user `ansible_log_file` }}" + ]}, { "type": "shell", - "script": "playbooks/files/ubuntu-ansible.sh" + "environment_vars": [ + "CLEANUP_PAUSE={{user `cleanup_pause`}}", + "UPDATE={{user `update`}}", + "INSTALL_VAGRANT_KEY={{user `install_vagrant_key`}}", + "SSH_USERNAME={{user `ssh_username`}}", + "SSH_PASSWORD={{user `ssh_password`}}", + "http_proxy={{user `http_proxy`}}", + "https_proxy={{user `https_proxy`}}", + "ftp_proxy={{user `ftp_proxy`}}", + "rsync_proxy={{user `rsync_proxy`}}", + "no_proxy={{user `no_proxy`}}" + ], + "execute_command": "echo 'vagrant' | {{.Vars}} sudo -E -S bash '{{.Path}}'", + "scripts": [ + "playbooks/files/update.sh", + "playbooks/files/vagrant.sh", + "playbooks/files/sshd.sh" + ] + }, { + "type": "shell", + "script": "playbooks/files/ubuntu-ansible.sh", + "execute_command": "echo 'vagrant' | {{.Vars}} sudo -E -S bash '{{.Path}}'" }, { "type": "ansible-local", "playbook_dir": "playbooks", "playbook_file": "playbooks/build-main.yaml", "extra_arguments": ["--verbose"] + }, { + "type": "shell", + "execute_command": "echo 'vagrant' | {{.Vars}} sudo -E -S bash '{{.Path}}'", + "scripts": [ + "playbooks/files/vmtool.sh", + "playbooks/files/minimize.sh", + "playbooks/files/cleanup.sh" + ] }], - "post-processors": [{ - "type": "vagrant", - "output": "solar-master.box" - }] + "post-processors": [ + [ + { + "type": "vagrant", + "keep_input_artifact": false, + "only": ["qemu"], + "output": "solar-master-libvirt.box" + }, + { + "type": "vagrant", + "keep_input_artifact": false, + "only": ["virtualbox-iso"], + "output": "solar-master-virtualbox.box" + } + ] + ] }