puphpet/puphpet

View on GitHub
archive/puphpet/vagrant/Vagrantfile-softlayer

Summary

Maintainability
Test Coverage
# -*- mode: ruby -*-

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'softlayer'

provider = data['vm']['provider']['softlayer']
machines = !provider['machines'].empty? ? provider['machines'] : { }

machines.each do |i, machine|
  config.vm.define "#{machine['id']}" do |machine_id|
    machine_id.vm.box         = 'dummy'
    machine_id.vm.hostname    = "#{machine['hostname']}"
    machine_id.nfs.functional = false

    ssh_username = !data['ssh']['username'].nil? ?
      data['ssh']['username'] :
      'root'

    machine_id.ssh.private_key_path = "#{data['ssh']['private_key_path']}"
    machine_id.ssh.username         = "#{ssh_username}"

    machine_id.vm.provider :softlayer do |sl, override|
      sl.username          = "#{provider['username']}"
      sl.api_key           = "#{provider['api_key']}"
      sl.ssh_key           = "#{provider['ssh_key']}"
      sl.operating_system  = "#{provider['operating_system']}"
      sl.hostname          = "#{machine['hostname']}"
      sl.domain            = "#{machine['domain']}"
      sl.datacenter        = "#{machine['datacenter']}"
      sl.max_memory        = machine['max_memory'].to_i
      sl.start_cpus        = machine['start_cpus'].to_i
    end

    data['vm']['synced_folder'].each do |i, folder|
      if folder['source'] != '' && folder['target'] != ''
        machine_id.vm.synced_folder "#{folder['source']}", "#{folder['target']}",
          id: "#{i}"
      end
    end

    machine_id.vm.provision 'shell' do |s|
      s.path = 'puphpet/shell/initial-setup.sh'
    end
    machine_id.vm.provision :shell,
      :inline => 'chmod +x /opt/puphpet/standalone-puppet.sh'
    machine_id.vm.provision 'shell' do |s|
      s.path = 'puphpet/shell/install-puppet.sh'
    end
    machine_id.vm.provision :shell do |s|
      s.path = 'puphpet/shell/execute-files.sh'
      s.args = ['exec-preprovision']
    end

    machine_id.vm.provision :puppet do |puppet|
      puppet.facter = {
        'fqdn'             => "#{machine_id.vm.hostname}",
        'ssh_username'     => "#{ssh_username}",
        'provisioner_type' => ENV['VAGRANT_DEFAULT_PROVIDER'],
      }
      puppet.manifests_path = "#{data['vm']['provision']['puppet']['manifests_path']}"
      puppet.manifest_file  = ""
      puppet.module_path    = data['vm']['provision']['puppet']['module_path']

      if !data['vm']['provision']['puppet']['options'].empty?
        puppet.options = data['vm']['provision']['puppet']['options']
      end
    end

    machine_id.vm.provision :shell do |s|
      s.path = 'puphpet/shell/execute-files.sh'
      s.args = ['exec-once', 'exec-always']
    end
    machine_id.vm.provision :shell, run: 'always' do |s|
      s.path = 'puphpet/shell/execute-files.sh'
      s.args = ['startup-once', 'startup-always']
    end

    machine_id.vm.provision :shell, privileged: false do |s|
      s.path = 'puphpet/shell/execute-files.sh'
      s.args = ['exec-once-unprivileged', 'exec-always-unprivileged']
    end
    machine_id.vm.provision :shell, run: 'always', privileged: false do |s|
      s.path = 'puphpet/shell/execute-files.sh'
      s.args = ['startup-once-unprivileged', 'startup-always-unprivileged']
    end

    machine_id.vm.provision :shell, privileged: false do |s|
      s.path = 'puphpet/shell/important-notices.sh'
    end

    if !data['ssh']['port'].nil? && data['ssh']['port'].to_bool
      machine_id.ssh.port = "#{data['ssh']['port']}"
    end
    if !data['ssh']['shell'].nil?
      machine_id.ssh.shell = "#{data['ssh']['shell']}"
    end
  end
end