-
-
Save mmarseglia/6d4cfe2f0c7e6f582323 to your computer and use it in GitHub Desktop.
Shell script to create a Vagrant shell to be customized later. Uses puppet provisioner for CentOS 6.x
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# Creates basic Vagrant/Puppet setup. | |
# Assumes you have vagrant installed already | |
# | |
# requires one argument, name of the directory to store Vagrant config | |
# ./createVagrant.sh linux-server | |
# can't continue without git | |
which git || (echo "can't find git"; exit 1) | |
# make directory structure | |
mkdir -p $1/{keys,manifest,puppet/modules,puppet/hiera} | |
# Puppetfile used for r10k | |
# put your required modules here | |
touch $1/puppet/Puppetfile | |
# default.pp used by Puppet to assign roles/modules to server | |
# add your node definitions here | |
touch $1/manifests/default.pp | |
# add .gitignore to these directories so git will keep them in the repository | |
# contents of modules will be wiped out and rebuilt by r10k | |
touch .gitignore $1/puppet/modules | |
# hiera may be empty but we want to keep it around | |
touch .gitignore $1/puppet/hiera | |
# store ssh keys here. still want to keep it if we don't have any | |
touch .gitignore $1/keys | |
# create default hiera.yaml | |
cat > $1/hiera.yaml << EOF | |
:backends: | |
- yaml | |
:yaml: | |
:datadir: ./ | |
:hierarchy: | |
- "node/%{::fqdn}" | |
- common | |
EOF | |
# create ssh key for vagrant user | |
# if you replaced the Vagrant default private key | |
#cat > $1/keys/id_rsa_vagrant << EOF | |
#-----BEGIN RSA PRIVATE KEY----- | |
#-----END RSA PRIVATE KEY----- | |
#EOF | |
# create vagrant file | |
cat > $1/Vagrantfile << EOF | |
# -*- mode: ruby -*- | |
# vi: set ft=ruby : | |
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! | |
VAGRANTFILE_API_VERSION = "2" | |
# list all servers to build | |
servers = [ 'server' ] | |
# set domain name for servers | |
domain = 'domain.local' | |
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| | |
# set box to use | |
config.vm.box = "centos64-64bit" | |
config.vm.provider "virtualbox" do |v| | |
v.customize ["modifyvm", :id, "--natdnsproxy1", "off"] | |
v.customize ["modifyvm", :id, "--natdnshostresolver1", "off"] | |
v.customize ["modifyvm", :id, "--memory", 1024] | |
v.auto_nat_dns_proxy = false | |
end | |
# basebox centos64-64bit has unique private key installed | |
config.ssh.private_key_path = "keys/id_rsa_vagrant" | |
# the parent directory that contains your module directory and Puppetfile | |
config.r10k.puppet_dir = 'puppet' | |
# the path to your Puppetfile, within the repo | |
config.r10k.puppetfile_path = 'puppet/Puppetfile' | |
servers.each do |server| | |
config.vm.define server do |server_config| | |
# puppet agent install bootstrap executed by Vagrant with shell provisioner | |
server_config.vm.provision "shell", path: "./puppet-bootstrap/centos_6_x.sh" | |
# sync hiera config directory with guest | |
server_config.vm.synced_folder "puppet/hiera", '/tmp/vagrant-hiera' | |
# set host name | |
server_config.vm.host_name = server + '.' + domain | |
# provision each server with puppet | |
server_config.vm.provision "puppet" do |puppet| | |
# set hiera configuration path | |
puppet.hiera_config_path = 'hiera.yaml' | |
# set module path | |
puppet.module_path = "puppet/modules" | |
# set working directory to our sync'd folder | |
# this will allow puppet to pick up hiera data | |
puppet.working_directory = '/tmp/vagrant-hiera' | |
# lots of output for debugging, noisy! | |
puppet.options = "--verbose --debug" | |
end | |
end | |
end | |
end | |
EOF | |
# create a basic README | |
cat > $1/README << EOF | |
$1 Vagrant | |
`date` | |
created by `whoami` | |
EOF | |
# set up new vagrant directory for git | |
cd $1 | |
git init | |
git add . | |
# add puppet bootstrap as a submodule | |
git submodule add https://github.com/hashicorp/puppet-bootstrap | |
# perform an initial commit | |
git commit -m "initial commit for $1" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment