init.pp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. class virtualbox {
  2. Package { ensure => "installed" }
  3. user { "vagrant":
  4. name => "vagrant",
  5. ensure => present,
  6. comment => "Vagrant User",
  7. shell => "/bin/bash",
  8. home => "/home/vagrant",
  9. }
  10. file { "/home/vagrant":
  11. mode => 644,
  12. require => User["vagrant"],
  13. }
  14. # remove some files from the base vagrant image because they're old
  15. file { "/home/vagrant/docker-master":
  16. ensure => absent,
  17. recurse => true,
  18. force => true,
  19. purge => true,
  20. require => File["/home/vagrant"],
  21. }
  22. file { "/usr/local/bin/dockerd":
  23. ensure => absent,
  24. }
  25. # Set up VirtualBox guest utils
  26. package { "virtualbox-guest-utils": }
  27. exec { "vbox-add" :
  28. command => "/etc/init.d/vboxadd setup",
  29. require => [
  30. Package["virtualbox-guest-utils"],
  31. Package["linux-headers-3.5.0-25-generic"], ],
  32. }
  33. }
  34. class ec2 {
  35. user { "vagrant":
  36. name => "ubuntu",
  37. ensure => present,
  38. comment => "Vagrant User",
  39. shell => "/bin/bash",
  40. home => "/home/ubuntu",
  41. }
  42. file { "/home/vagrant":
  43. ensure => link,
  44. target => "/home/ubuntu",
  45. require => User["vagrant"],
  46. }
  47. }
  48. class rax {
  49. user { "vagrant":
  50. name => "ubuntu",
  51. ensure => present,
  52. comment => "Vagrant User",
  53. shell => "/bin/bash",
  54. home => "/home/ubuntu",
  55. }
  56. file { "/home/vagrant":
  57. ensure => link,
  58. target => "/home/ubuntu",
  59. require => User["vagrant"],
  60. }
  61. }
  62. class docker {
  63. # update this with latest docker binary distro
  64. $docker_url = "http://get.docker.io/builds/$kernel/$hardwaremodel/docker-master.tgz"
  65. # update this with latest go binary distry
  66. $go_url = "http://go.googlecode.com/files/go1.0.3.linux-amd64.tar.gz"
  67. Package { ensure => "installed" }
  68. package { ["lxc", "debootstrap", "wget", "bsdtar", "git",
  69. "pkg-config", "libsqlite3-dev",
  70. "linux-image-3.5.0-25-generic",
  71. "linux-image-extra-3.5.0-25-generic",
  72. "linux-headers-3.5.0-25-generic"]: }
  73. notify { "docker_url = $docker_url": withpath => true }
  74. $ec2_version = file("/etc/ec2_version", "/dev/null")
  75. $rax_version = inline_template("<%= %x{/usr/bin/xenstore-read vm-data/provider_data/provider} %>")
  76. if ($ec2_version) {
  77. $vagrant_user = "ubuntu"
  78. include ec2
  79. } elsif ($rax_version) {
  80. $vagrant_user = "vagrant"
  81. include rax
  82. } else {
  83. # virtualbox is the vagrant default, so it should be safe to assume
  84. $vagrant_user = "vagrant"
  85. include virtualbox
  86. }
  87. file { "/usr/local/bin":
  88. ensure => directory,
  89. owner => root,
  90. group => root,
  91. mode => 755,
  92. }
  93. exec { "fetch-go":
  94. require => Package["wget"],
  95. command => "/usr/bin/wget -O - $go_url | /bin/tar xz -C /usr/local",
  96. creates => "/usr/local/go/bin/go",
  97. }
  98. exec { "fetch-docker" :
  99. command => "/usr/bin/wget -O - $docker_url | /bin/tar xz -C /tmp",
  100. require => Package["wget"],
  101. }
  102. file { "/etc/init/dockerd.conf":
  103. mode => 600,
  104. owner => "root",
  105. group => "root",
  106. content => template("docker/dockerd.conf"),
  107. require => Exec["copy-docker-bin"],
  108. }
  109. file { "/home/vagrant/.profile":
  110. mode => 644,
  111. owner => $vagrant_user,
  112. group => "ubuntu",
  113. content => template("docker/profile"),
  114. require => File["/home/vagrant"],
  115. }
  116. exec { "copy-docker-bin" :
  117. command => "/usr/bin/sudo /bin/cp -f /tmp/docker-master/docker /usr/local/bin/",
  118. require => [ Exec["fetch-docker"], File["/usr/local/bin"] ],
  119. }
  120. service { "dockerd" :
  121. ensure => "running",
  122. start => "/sbin/initctl start dockerd",
  123. stop => "/sbin/initctl stop dockerd",
  124. require => File["/etc/init/dockerd.conf"],
  125. name => "dockerd",
  126. provider => "base"
  127. }
  128. }