bitswarmbox 1.0.0.pre16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +70 -0
  3. data/.idea/.rakeTasks +7 -0
  4. data/.idea/compiler.xml +22 -0
  5. data/.idea/composerJson.xml +9 -0
  6. data/.idea/copyright/profiles_settings.xml +3 -0
  7. data/.idea/misc.xml +23 -0
  8. data/.idea/modules.xml +8 -0
  9. data/.ruby-version +1 -0
  10. data/.travis.yml +3 -0
  11. data/Gemfile +3 -0
  12. data/LICENSE +21 -0
  13. data/README.md +67 -0
  14. data/Rakefile +34 -0
  15. data/Vagrantfile +116 -0
  16. data/bin/bitswarmbox +6 -0
  17. data/bitswarmbox.gemspec +48 -0
  18. data/bitswarmbox.iml +51 -0
  19. data/builders/aws/build-all.sh +17 -0
  20. data/builders/aws/debian/build-base-jessie64.sh +11 -0
  21. data/builders/aws/debian/build-base-wheezy64.sh +11 -0
  22. data/builders/aws/debian/build-puppetmaster-jessie64.sh +11 -0
  23. data/builders/aws/ubuntu/build-base-precise64.sh +11 -0
  24. data/builders/aws/ubuntu/build-base-trusty64.sh +11 -0
  25. data/builders/aws/ubuntu/build-base-wily64.sh +11 -0
  26. data/builders/aws/ubuntu/build-base-xenial64.sh +11 -0
  27. data/builders/aws/ubuntu/build-puppetmaster-trusty64.sh +11 -0
  28. data/builders/aws/ubuntu/build-puppetmaster-xenial64.sh +11 -0
  29. data/builders/vagrant/build-all.sh +18 -0
  30. data/builders/vagrant/debian/build-base-jessie64.sh +9 -0
  31. data/builders/vagrant/debian/build-base-wheezy64.sh +9 -0
  32. data/builders/vagrant/debian/build-puppetmaster-jessie64.sh +9 -0
  33. data/builders/vagrant/ubuntu/build-base-precise64.sh +9 -0
  34. data/builders/vagrant/ubuntu/build-base-trusty64.sh +9 -0
  35. data/builders/vagrant/ubuntu/build-base-wily64.sh +9 -0
  36. data/builders/vagrant/ubuntu/build-base-xenial64.sh +9 -0
  37. data/builders/vagrant/ubuntu/build-puppetmaster-trusty64.sh +17 -0
  38. data/builders/vagrant/ubuntu/build-puppetmaster-xenial64.sh +17 -0
  39. data/features/boxes.feature +8 -0
  40. data/features/build.feature +16 -0
  41. data/features/env.feature +18 -0
  42. data/features/support/env.rb +1 -0
  43. data/lib/bitswarmbox/builder.rb +181 -0
  44. data/lib/bitswarmbox/command/build/aws.rb +90 -0
  45. data/lib/bitswarmbox/command/build/vagrant.rb +78 -0
  46. data/lib/bitswarmbox/command/build.rb +42 -0
  47. data/lib/bitswarmbox/command/env.rb +50 -0
  48. data/lib/bitswarmbox/command.rb +15 -0
  49. data/lib/bitswarmbox/config.rb +87 -0
  50. data/lib/bitswarmbox/environment.rb +128 -0
  51. data/lib/bitswarmbox/errors.rb +19 -0
  52. data/lib/bitswarmbox/subprocess.rb +39 -0
  53. data/lib/bitswarmbox/template.rb +50 -0
  54. data/lib/bitswarmbox/version.rb +4 -0
  55. data/lib/bitswarmbox.rb +29 -0
  56. data/lib/boxes.rb +29 -0
  57. data/puppet/Puppetfile +58 -0
  58. data/puppet/environments/aws/manifests/base.pp +3 -0
  59. data/puppet/environments/vagrant/environment.conf +1 -0
  60. data/puppet/environments/vagrant/manifests/base.pp +3 -0
  61. data/puppet/hiera.yaml +15 -0
  62. data/puppet/hieradata/aws.yaml +11 -0
  63. data/puppet/hieradata/common.yaml +9 -0
  64. data/puppet/hieradata/debian.yaml +6 -0
  65. data/puppet/hieradata/puppetmaster.yaml +7 -0
  66. data/puppet/hieradata/ubuntu.yaml +3 -0
  67. data/puppet/hieradata/vagrant.yaml +3 -0
  68. data/puppet/hieradata/vsphere.yaml +3 -0
  69. data/puppet/manifests/r10k_bootstrap.pp +37 -0
  70. data/puppet/modules/packer/manifests/aws/cloudinit.pp +20 -0
  71. data/puppet/modules/packer/manifests/aws/networking/params.pp +46 -0
  72. data/puppet/modules/packer/manifests/aws/networking.pp +23 -0
  73. data/puppet/modules/packer/manifests/aws/sshd.pp +10 -0
  74. data/puppet/modules/packer/manifests/aws/users.pp +26 -0
  75. data/puppet/modules/packer/manifests/aws.pp +7 -0
  76. data/puppet/modules/packer/manifests/clock.pp +10 -0
  77. data/puppet/modules/packer/manifests/updates.pp +27 -0
  78. data/puppet/modules/packer/manifests/vagrant/params.pp +14 -0
  79. data/puppet/modules/packer/manifests/vagrant.pp +63 -0
  80. data/puppet/modules/packer/manifests/vmtools/params.pp +35 -0
  81. data/puppet/modules/packer/manifests/vmtools.pp +52 -0
  82. data/puppet/modules/packer/manifests/vsphere/fw.pp +9 -0
  83. data/puppet/modules/packer/manifests/vsphere/networking.pp +29 -0
  84. data/puppet/modules/packer/manifests/vsphere/params.pp +56 -0
  85. data/puppet/modules/packer/manifests/vsphere/repos.pp +87 -0
  86. data/puppet/modules/packer/manifests/vsphere.pp +45 -0
  87. data/puppet/modules/packer/templates/ec2/ubuntu-cloud-cfg.erb +111 -0
  88. data/puppet/modules/packer/templates/vsphere/debian.rb.erb +45 -0
  89. data/puppet/modules/packer/templates/vsphere/rc.local +5 -0
  90. data/puppet/modules/packer/templates/vsphere/redhat.rb.erb +66 -0
  91. data/puppet/modules/packer/templates/vsphere/ubuntu.rb.erb +50 -0
  92. data/scripts/ansible.sh +17 -0
  93. data/scripts/chef.sh +30 -0
  94. data/scripts/cleanup-aws.sh +6 -0
  95. data/scripts/cleanup-vagrant.sh +26 -0
  96. data/scripts/cleanup.sh +48 -0
  97. data/scripts/docker.sh +23 -0
  98. data/scripts/local-ssh-keygen.sh +16 -0
  99. data/scripts/prepare-done.sh +3 -0
  100. data/scripts/prepare.sh +32 -0
  101. data/scripts/puppet.sh +31 -0
  102. data/scripts/puppetserver-post.sh +8 -0
  103. data/scripts/puppetserver.sh +44 -0
  104. data/scripts/ruby.sh +42 -0
  105. data/scripts/vagrant.sh +42 -0
  106. data/scripts/vmtools.sh +37 -0
  107. data/spec/boxes/builder_spec.rb +52 -0
  108. data/spec/boxes/config_spec.rb +142 -0
  109. data/spec/boxes/environment_spec.rb +73 -0
  110. data/spec/boxes/subprocess_spec.rb +35 -0
  111. data/spec/boxes/template_spec.rb +53 -0
  112. data/spec/spec_helper.rb +5 -0
  113. data/spec/support/subprocess_command.rb +7 -0
  114. data/templates/debian/jessie64.erb +206 -0
  115. data/templates/debian/preseed.cfg +70 -0
  116. data/templates/debian/wheezy64.erb +206 -0
  117. data/templates/ubuntu/precise64.erb +205 -0
  118. data/templates/ubuntu/preseed.cfg +61 -0
  119. data/templates/ubuntu/trusty64.erb +205 -0
  120. data/templates/ubuntu/wily64.erb +209 -0
  121. data/templates/ubuntu/xenial64.erb +209 -0
  122. metadata +349 -0
@@ -0,0 +1,26 @@
1
+ class packer::aws::users {
2
+ include '::packer::aws'
3
+ $service_acct = $::packer::aws::local_service_acct_user
4
+
5
+ if $service_acct != 'ubuntu' {
6
+ user { $service_acct:
7
+ ensure => present,
8
+ home => "/home/${service_acct}",
9
+ managehome => true,
10
+ }
11
+ # ->
12
+ # sudo::sudoers { $service_acct:
13
+ # ensure => 'present',
14
+ # users => [$service_acct],
15
+ # tags => ['NOPASSWD'],
16
+ # }
17
+ }
18
+
19
+ class { 'ohmyzsh::config': theme_hostname_slug => '%M' }
20
+
21
+ # for multiple users in one shot and set their shell to zsh
22
+ ohmyzsh::install { 'root': set_sh => true, disable_auto_update => true }
23
+ ohmyzsh::install { $service_acct: set_sh => true, disable_update_prompt => true }
24
+ ohmyzsh::plugins { ['root', $service_acct]: }
25
+ ohmyzsh::theme { ['root', $service_acct]: }
26
+ }
@@ -0,0 +1,7 @@
1
+ class packer::aws(
2
+ $local_service_acct_user = 'ubuntu',
3
+ $local_service_acct_gecos = 'Ubuntu',
4
+ $sudoers_file = '/etc/sudoers',
5
+ ) {
6
+
7
+ }
@@ -0,0 +1,10 @@
1
+ class packer::clock(
2
+ $timezone = 'America/New_York'
3
+ ) {
4
+ include '::ntp'
5
+
6
+ class { '::timezone':
7
+ timezone => $timezone,
8
+ }
9
+
10
+ }
@@ -0,0 +1,27 @@
1
+ class packer::updates {
2
+
3
+ $linux_pkgs = [
4
+ 'bash',
5
+ 'openssl',
6
+ ]
7
+
8
+ $debian_pkgs = [
9
+ 'libc6',
10
+ 'openssh-client',
11
+ 'openssh-server',
12
+ ]
13
+
14
+ $redhat_pkgs = [
15
+ 'glibc',
16
+ 'openssh',
17
+ ]
18
+
19
+ if $::osfamily == 'Debian' {
20
+ $pkgs_to_update = $linux_pkgs + $debian_pkgs
21
+ } elsif $::osfamily == 'Redhat' {
22
+ $pkgs_to_update = $linux_pkgs + $redhat_pkgs
23
+ }
24
+
25
+ package { $pkgs_to_update: ensure => latest; }
26
+
27
+ }
@@ -0,0 +1,14 @@
1
+ class packer::vagrant::params {
2
+
3
+ case $::osfamily {
4
+ debian, redhat: {
5
+ $home_base = '/home'
6
+ $sudoers_file = '/etc/sudoers'
7
+ }
8
+
9
+ default: {
10
+ fail( "Unsupported platform: ${::osfamily}/${::operatingsystem}" )
11
+ }
12
+ }
13
+
14
+ }
@@ -0,0 +1,63 @@
1
+ class packer::vagrant(
2
+ $manage_user = 'true',
3
+ $ohymzsh = 'true',
4
+ $manage_ssh = 'false',
5
+ $public_rsa_key = 'AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ==',
6
+ $manage_sudo = 'false',
7
+ ) inherits packer::vagrant::params {
8
+
9
+ if str2bool($manage_user) {
10
+ group { 'vagrant':
11
+ ensure => present,
12
+ }
13
+
14
+ user { 'vagrant':
15
+ ensure => present,
16
+ home => "${home_base}/vagrant",
17
+ managehome => true,
18
+ gid => 'vagrant',
19
+ groups => [ 'vagrant', ],
20
+ shell => '/bin/bash',
21
+ require => Group[ 'vagrant' ],
22
+ }
23
+
24
+ if str2bool($ohymzsh) {
25
+ # for multiple users in one shot and set their shell to zsh
26
+ ohmyzsh::install { 'root': set_sh => true, disable_auto_update => true }
27
+ ohmyzsh::install { 'vagrant': set_sh => true, disable_update_prompt => true }
28
+ ohmyzsh::plugins { ['root', 'vagrant']: }
29
+ ohmyzsh::theme { ['root', 'vagrant']: }
30
+ }
31
+ }
32
+
33
+ if str2bool($manage_ssh) {
34
+ file { "${home_base}/vagrant/.ssh":
35
+ ensure => directory,
36
+ owner => 'vagrant',
37
+ group => 'vagrant',
38
+ mode => '0600',
39
+ require => User[ 'vagrant' ],
40
+ }
41
+
42
+ ssh_authorized_key { 'vagrant':
43
+ ensure => present,
44
+ user => 'vagrant',
45
+ key => $public_rsa_key,
46
+ type => 'ssh-rsa',
47
+ }
48
+ }
49
+
50
+ if str2bool($manage_sudo) {
51
+ sudo::sudoers { 'vagrant':
52
+ ensure => 'present',
53
+ users => ['vagrant'],
54
+ tags => ['NOPASSWD'],
55
+ }
56
+
57
+ file_line { "allow ${sudoers_file} notty":
58
+ path => $sudoers_file,
59
+ line => '#Defaults requiretty',
60
+ match => 'Defaults\s+requiretty',
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,35 @@
1
+ class packer::vmtools::params {
2
+
3
+ case $::osfamily {
4
+ 'Redhat' : {
5
+ $root_home = '/root'
6
+ $required_packages = [ 'kernel-devel', 'gcc' ]
7
+ }
8
+
9
+ 'Debian' : {
10
+ $root_home = '/root'
11
+ $required_packages = [ "linux-headers-${::kernelrelease}" ]
12
+ }
13
+
14
+ default : {
15
+ fail( "Unsupported platform: ${::osfamily}/${::operatingsystem}" )
16
+ }
17
+ }
18
+
19
+ case $::provisioner {
20
+ virtualbox: {
21
+ $tools_iso = 'VBoxGuestAdditions.iso'
22
+ $install_cmd = 'sh /tmp/vmtools/VBoxLinuxAdditions.run --nox11 ; true'
23
+ }
24
+
25
+ vmware: {
26
+ $tools_iso = 'linux.iso'
27
+ $install_cmd = 'tar zxf /tmp/vmtools/VMwareTools-*.tar.gz -C /tmp/ ; /tmp/vmware-tools-distrib/vmware-install.pl --force-install ; rm -rf /tmp/vmware-tools-distrib'
28
+ }
29
+
30
+ default: {
31
+ fail( "Unsupported provisioner: ${::provisioner}" )
32
+ }
33
+ }
34
+
35
+ }
@@ -0,0 +1,52 @@
1
+ class packer::vmtools inherits packer::vmtools::params {
2
+
3
+ if ( $required_packages != undef ) {
4
+ package { $required_packages:
5
+ ensure => installed,
6
+ before => File[ '/tmp/vmtools' ],
7
+ }
8
+ }
9
+
10
+ file { '/tmp/vmtools':
11
+ ensure => directory,
12
+ }
13
+
14
+ mount { '/tmp/vmtools':
15
+ ensure => mounted,
16
+ device => "${root_home}/${tools_iso}",
17
+ fstype => 'iso9660',
18
+ options => 'ro,loop',
19
+ require => File[ '/tmp/vmtools' ],
20
+ }
21
+
22
+ exec { 'install vmtools':
23
+ command => $install_cmd,
24
+ path => [ '/bin', '/usr/bin', ],
25
+ require => Mount[ '/tmp/vmtools' ],
26
+ }
27
+
28
+ exec { 'remove /tmp/vmtools':
29
+ command => 'umount /tmp/vmtools ; rmdir /tmp/vmtools',
30
+ path => [ '/bin', '/usr/bin', ],
31
+ onlyif => 'test -d /tmp/vmtools',
32
+ require => Exec[ 'install vmtools' ],
33
+ }
34
+
35
+ case $::operatingsystemrelease {
36
+
37
+ default: {
38
+ file { "${root_home}/${tools_iso}":
39
+ ensure => absent,
40
+ require => Exec[ 'remove /tmp/vmtools' ],
41
+ }
42
+ }
43
+ }
44
+
45
+ file_line { "remove /etc/fstab /tmp/vmtools":
46
+ path => '/etc/fstab',
47
+ line => '#/tmp/vmtools removed',
48
+ match => '/tmp/vmtools',
49
+ require => Exec[ 'remove /tmp/vmtools' ],
50
+ }
51
+
52
+ }
@@ -0,0 +1,9 @@
1
+ class packer::vsphere::fw {
2
+
3
+ if ($::osfamily == 'RedHat')
4
+ and ($::operatingsystemmajrelease == '7') {
5
+ class { 'firewall':
6
+ ensure => stopped,
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,29 @@
1
+ class packer::vsphere::networking inherits packer::networking::params {
2
+
3
+ class { 'network':
4
+ config_file_notify => '',
5
+ }
6
+
7
+ case $::osfamily {
8
+ debian: {
9
+ if $::operatingsystemrelease in ['15.10', '16.04'] {
10
+ network::interface { 'ens32':
11
+ enable_dhcp => true,
12
+ }
13
+ }
14
+ }
15
+
16
+ redhat: {
17
+ if ($::operatingsystemmajrelease == '7') {
18
+ if ( $interface_script != undef ) {
19
+ file { $interface_script:
20
+ ensure => absent,
21
+ }
22
+ }
23
+ network::interface { 'ens32':
24
+ enable_dhcp => true,
25
+ }
26
+ }
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,56 @@
1
+ class packer::vsphere::params {
2
+
3
+ $repo_mirror = 'http://osmirror.delivery.puppetlabs.net'
4
+ $loweros = downcase($::operatingsystem)
5
+
6
+ case $::operatingsystem {
7
+ 'Ubuntu': {
8
+ $startup_file = '/etc/rc.local'
9
+ $startup_file_source = 'rc.local'
10
+ $bootstrap_file = '/etc/vsphere-bootstrap.rb'
11
+ $bootstrap_file_source = 'ubuntu.rb.erb'
12
+ $ruby_package = [ 'ruby' ]
13
+ $repo_name = 'ubuntu'
14
+ $repo_list = 'main restricted universe multiverse'
15
+ $security_repo_name = 'ubuntu'
16
+ $security_release = "${lsbdistcodename}-security"
17
+ $updates_release = "${lsbdistcodename}-updates"
18
+ }
19
+
20
+ 'Debian': {
21
+ $startup_file = '/etc/rc.local'
22
+ $startup_file_source = 'rc.local'
23
+ $bootstrap_file = '/etc/vsphere-bootstrap.rb'
24
+ $bootstrap_file_source = 'debian.rb.erb'
25
+ $ruby_package = [ 'ruby' ]
26
+ $repo_name = 'debian'
27
+ $repo_list = 'main contrib non-free'
28
+ $security_repo_name = 'debian-security'
29
+ $security_release = "${lsbdistcodename}/updates"
30
+ $updates_release = "${lsbdistcodename}-updates"
31
+ }
32
+
33
+ 'CentOS', 'Redhat', 'Scientific': {
34
+ $startup_file = '/etc/rc.d/rc.local'
35
+ $startup_file_source = 'rc.local'
36
+ $bootstrap_file = '/etc/vsphere-bootstrap.rb'
37
+ $bootstrap_file_source = 'redhat.rb.erb'
38
+ $ruby_package = [ 'ruby' ]
39
+ $gpgkey = "RPM-GPG-KEY-${::operatingsystem}-${::operatingsystemmajrelease}"
40
+ }
41
+
42
+ 'Fedora': {
43
+ $startup_file = '/etc/rc.d/rc.local'
44
+ $startup_file_source = 'rc.local'
45
+ $bootstrap_file = '/etc/vsphere-bootstrap.rb'
46
+ $bootstrap_file_source = 'redhat.rb.erb'
47
+ $ruby_package = [ 'ruby' ]
48
+ $gpgkey = "RPM-GPG-KEY-${::operatingsystemmajrelease}-${loweros}"
49
+ }
50
+
51
+ default: {
52
+ fail( "Unsupported platform: ${::osfamily}/${::operatingsystem}" )
53
+ }
54
+ }
55
+
56
+ }
@@ -0,0 +1,87 @@
1
+ class packer::vsphere::repos inherits packer::vsphere::params {
2
+
3
+ case $::osfamily {
4
+
5
+ debian: {
6
+
7
+ exec { "apt-update":
8
+ command => "/usr/bin/apt-get update"
9
+ }
10
+
11
+ Apt::Key <| |> -> Exec["apt-update"]
12
+ Apt::Source <| |> -> Exec["apt-update"]
13
+
14
+ Exec["apt-update"] -> Package <| |>
15
+
16
+ class { 'apt':
17
+ purge => {
18
+ 'sources.list' => true,
19
+ 'sources.list.d' => true,
20
+ },
21
+ }
22
+
23
+ apt::source { "$lsbdistcodename":
24
+ release => $lsbdistcodename,
25
+ location => "$repo_mirror/$repo_name",
26
+ repos => "$repo_list",
27
+ include => {
28
+ 'src' => true,
29
+ 'deb' => true,
30
+ },
31
+ }
32
+
33
+ apt::source { "${lsbdistcodename}-updates":
34
+ release => "$updates_release",
35
+ location => "${repo_mirror}/${repo_name}",
36
+ repos => "$repo_list",
37
+ include => {
38
+ 'src' => true,
39
+ 'deb' => true,
40
+ },
41
+ }
42
+
43
+ apt::source { "${lsbdistcodename}-security":
44
+ release => "$security_release",
45
+ location => "${repo_mirror}/${security_repo_name}",
46
+ repos => "$repo_list",
47
+ include => {
48
+ 'src' => true,
49
+ 'deb' => true,
50
+ },
51
+ }
52
+ }
53
+
54
+ redhat: {
55
+
56
+ resources { 'yumrepo':
57
+ purge => true,
58
+ }
59
+
60
+ yumrepo { "localmirror-os":
61
+ descr => "localmirror-os",
62
+ baseurl => "${repo_mirror}/${loweros}-${::operatingsystemmajrelease}-${::architecture}/RPMS.os",
63
+ gpgcheck => "1",
64
+ gpgkey => "file:///etc/pki/rpm-gpg/${gpgkey}"
65
+ }
66
+ yumrepo { "localmirror-updates":
67
+ descr => "localmirror-updates",
68
+ baseurl => "${repo_mirror}/${loweros}-${::operatingsystemmajrelease}-${::architecture}/RPMS.updates",
69
+ gpgcheck => "1",
70
+ gpgkey => "file:///etc/pki/rpm-gpg/${gpgkey}"
71
+ }
72
+
73
+ if $::operatingsystem == 'Fedora' {
74
+ yumrepo { "localmirror-everything":
75
+ descr => "localmirror-everything",
76
+ baseurl => "${repo_mirror}/${loweros}-${::operatingsystemmajrelease}-${::architecture}/RPMS.everything",
77
+ gpgcheck => "1",
78
+ gpgkey => "file:///etc/pki/rpm-gpg/${gpgkey}"
79
+ }
80
+ }
81
+ }
82
+
83
+ default: {
84
+ fail( "Unsupported platform: ${::osfamily}/${::operatingsystem}" )
85
+ }
86
+ }
87
+ }
@@ -0,0 +1,45 @@
1
+ class packer::vsphere inherits packer::vsphere::params {
2
+
3
+ include packer::vsphere::repos
4
+ include packer::vsphere::networking
5
+ include packer::vsphere::fw
6
+
7
+ user { root:
8
+ ensure => present,
9
+ password => "$qa_root_passwd"
10
+ }
11
+
12
+ package { $ruby_package:
13
+ ensure => present,
14
+ }
15
+
16
+ file { $bootstrap_file:
17
+ owner => 'root',
18
+ group => 'root',
19
+ mode => '0755',
20
+ content => template("packer/vsphere/${bootstrap_file_source}"),
21
+ }
22
+
23
+ file { $startup_file:
24
+ owner => 'root',
25
+ group => 'root',
26
+ mode => '0755',
27
+ content => template("packer/vsphere/${startup_file_source}"),
28
+ }
29
+
30
+ file { '/root/.ssh':
31
+ owner => 'root',
32
+ group => 'root',
33
+ mode => '0755',
34
+ ensure => directory,
35
+ }
36
+
37
+ file { '/root/.ssh/authorized_keys':
38
+ owner => 'root',
39
+ group => 'root',
40
+ mode => '0755',
41
+ source => 'puppet:///modules/packer/vsphere/authorized_keys',
42
+ require => File[ '/root/.ssh' ]
43
+ }
44
+
45
+ }
@@ -0,0 +1,111 @@
1
+ # The top level settings are used as module
2
+ # and system configuration.
3
+
4
+ # A set of users which may be applied and/or used by various modules
5
+ # when a 'default' entry is found it will reference the 'default_user'
6
+ # from the distro configuration specified below
7
+ users:
8
+ - default
9
+
10
+ # If this is set, 'root' will not be able to ssh in and they
11
+ # will get a message to login instead as the above $user (ubuntu)
12
+ disable_root: true
13
+
14
+ # This will cause the set+update hostname module to not operate (if true)
15
+ preserve_hostname: false
16
+
17
+ # Example datasource config
18
+ # datasource:
19
+ # Ec2:
20
+ # metadata_urls: [ 'blah.com' ]
21
+ # timeout: 5 # (defaults to 50 seconds)
22
+ # max_wait: 10 # (defaults to 120 seconds)
23
+
24
+ # The modules that run in the 'init' stage
25
+ cloud_init_modules:
26
+ - migrator
27
+ - seed_random
28
+ - bootcmd
29
+ - write-files
30
+ - growpart
31
+ - resizefs
32
+ - set_hostname
33
+ - update_hostname
34
+ - update_etc_hosts
35
+ - ca-certs
36
+ - rsyslog
37
+ - users-groups
38
+ - ssh
39
+
40
+ # The modules that run in the 'config' stage
41
+ cloud_config_modules:
42
+ # Emit the cloud config ready event
43
+ # this can be used by upstart jobs for 'start on cloud-config'.
44
+ - emit_upstart
45
+ - disk_setup
46
+ - mounts
47
+ - ssh-import-id
48
+ - locale
49
+ - set-passwords
50
+ - grub-dpkg
51
+ - apt-pipelining
52
+ - apt-configure
53
+ - package-update-upgrade-install
54
+ - landscape
55
+ - timezone
56
+ - puppet
57
+ - chef
58
+ - salt-minion
59
+ - mcollective
60
+ - disable-ec2-metadata
61
+ - runcmd
62
+ - byobu
63
+
64
+ # The modules that run in the 'final' stage
65
+ cloud_final_modules:
66
+ - rightscale_userdata
67
+ - scripts-vendor
68
+ - scripts-per-once
69
+ - scripts-per-boot
70
+ - scripts-per-instance
71
+ - scripts-user
72
+ - ssh-authkey-fingerprints
73
+ - keys-to-console
74
+ - phone-home
75
+ - final-message
76
+ - power-state-change
77
+
78
+ # System and/or distro specific settings
79
+ # (not accessible to handlers/transforms)
80
+ system_info:
81
+ # This will affect which distro class gets used
82
+ distro: ubuntu
83
+ # Default user name + that default users groups (if added/used)
84
+ default_user:
85
+ name: <%= scope.lookupvar('::packer::ec2::local_service_acct_user') %>
86
+ lock_passwd: True
87
+ gecos: <%= scope.lookupvar('::packer::ec2::local_service_acct_gecos') %>
88
+ groups: [adm, audio, cdrom, dialout, dip, floppy, netdev, plugdev, sudo, video]
89
+ sudo: ["ALL=(ALL) NOPASSWD:ALL"]
90
+ shell: /bin/bash
91
+ # Other config here will be given to the distro class and/or path classes
92
+ paths:
93
+ cloud_dir: /var/lib/cloud/
94
+ templates_dir: /etc/cloud/templates/
95
+ upstart_dir: /etc/init/
96
+ package_mirrors:
97
+ - arches: [i386, amd64]
98
+ failsafe:
99
+ primary: http://archive.ubuntu.com/ubuntu
100
+ security: http://security.ubuntu.com/ubuntu
101
+ search:
102
+ primary:
103
+ - http://%(ec2_region)s.ec2.archive.ubuntu.com/ubuntu/
104
+ - http://%(availability_zone)s.clouds.archive.ubuntu.com/ubuntu/
105
+ - http://%(region)s.clouds.archive.ubuntu.com/ubuntu/
106
+ security: []
107
+ - arches: [armhf, armel, default]
108
+ failsafe:
109
+ primary: http://ports.ubuntu.com/ubuntu-ports
110
+ security: http://ports.ubuntu.com/ubuntu-ports
111
+ ssh_svcname: ssh
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/ruby
2
+
3
+ hostname = `vmtoolsd --cmd "info-get guestinfo.hostname"`
4
+
5
+ hostname = hostname.chomp
6
+
7
+ puts "Nice to meet you, my VM name is '#{hostname}'."
8
+
9
+ puts "\n"
10
+
11
+ puts '- Setting local hostname...'
12
+
13
+ File.open('/etc/hostname', 'w') do |f|
14
+ f.write(hostname)
15
+ end
16
+
17
+ Kernel.system('hostname -F /etc/hostname')
18
+
19
+ dhc = File.read('/etc/dhcp/dhclient.conf')
20
+
21
+ File.open('/etc/dhcp/dhclient.conf', 'w') do |f|
22
+ dhc.gsub!(/^(#send host-name.*)/, "send host-name \"#{hostname}\";")
23
+ f.write(dhc)
24
+ end
25
+
26
+ puts '- Re-obtaining DHCP lease...'
27
+
28
+ <% if @operatingsystemmajrelease == '6' -%>
29
+ Kernel.system('pkill dhclient')
30
+ Kernel.system('dhclient -r')
31
+ Kernel.system('rm /var/lib/dhcp/dhclient*')
32
+ Kernel.system('dhclient eth0')
33
+ <% else -%>
34
+ Kernel.system('/etc/init.d/networking restart')
35
+ Kernel.system('dhclient eth0')
36
+ <% end -%>
37
+
38
+ puts '- Cleaning up...'
39
+
40
+ Kernel.system('rm /etc/vsphere-bootstrap.rb')
41
+ Kernel.system('echo "exit 0" > /etc/rc.local')
42
+
43
+ puts "\n"
44
+
45
+ puts 'Done!'
@@ -0,0 +1,5 @@
1
+ #!/bin/sh -e
2
+
3
+ ( /etc/vsphere-bootstrap.rb ) 2>&1 | /usr/bin/tee /tmp/vsphere-bootstrap.log
4
+
5
+ exit 0