#Repositories needed to install puppetmaster
#yumrepo { 'epel':
#  descr          => 'Extra Packages for Enterprise Linux 6 - $basearch',
#  enabled        => '1',
#  failovermethod => 'priority',
#  gpgcheck       => '0',
#  mirrorlist     => 'https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch',
#}
#yumrepo { 'puppetlabs-deps':
#  baseurl  => 'http://yum.puppetlabs.com/el/6/dependencies/$basearch',
#  descr    => 'Puppet Labs Dependencies El 6 - $basearch',
#  enabled  => '1',
#  gpgcheck => '0',
#}
#yumrepo { 'puppetlabs-products':
#  baseurl  => 'http://yum.puppetlabs.com/el/6/products/$basearch',
#  descr    => 'Puppet Labs Products El 6 - $basearch',
#  enabled  => '1',
#  gpgcheck => '0',
#}
package {'epel-release':
  ensure => 'installed',
  source => 'http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm',
  provider => 'rpm',
}
package {'puppetlabs-release':
  ensure => 'installed',
  source => 'http://yum.puppetlabs.com/el/6/products/i386/puppetlabs-release-6-7.noarch.rpm',
  provider => 'rpm',
}

package{
  ['vim-enhanced',
   'screen',
   'puppet-server',
   'puppetdb',
   'puppetdb-terminus',
  ]:
    ensure => installed,
#    require => [ Yumrepo['puppetlabs-products'], Yumrepo['epel'] ],
    require => [ Package['puppetlabs-release'], Package['epel-release'] ],
}


service {'puppetmaster':
  ensure => running,
  enable => true,
  require => Exec['set-hostname'],
}

#PuppetDB service configuration
service {'puppetdb':
  ensure => running,
  enable => true,
  require => Service['puppetmaster']
}
$puppetdb_conf = '[main]
server = puppet
'
file{"/etc/puppet/puppetdb.conf":
  content => $puppetdb_conf,
  require => Package['puppetdb-terminus'],
  notify  => Service['puppetmaster'],
}
$puppetdb_route = '---
master:
  facts:
    terminus: puppetdb
    cache: yaml
'
file{"/etc/puppet/routes.yaml":
  content => $puppetdb_route,
  require => Package['puppetdb-terminus'],
  notify  => Service['puppetmaster'],
}
#Workarround since there is no len in augeas for puppet.conf
exec{"config-puppetdb":
  command => 'echo "[master]" >> /etc/puppet/puppet.conf; echo "  storeconfigs = true" >> /etc/puppet/puppet.conf; echo "  storeconfigs_backend = puppetdb" >> /etc/puppet/puppet.conf;',
  unless => 'grep "\[master\]" /etc/puppet/puppet.conf',
  path => ['/bin'],
  require => Package['puppetdb-terminus'],
  notify  => Service['puppetmaster'],
}
#Workarround for first install problem
exec{"puppetdb-ssl-setup":
  command => 'puppetdb-ssl-setup',
  path => ['/bin', '/sbin', '/usr/sbin', '/usr/bin'],
  require => Package['puppetdb'],
  notify => Service['puppetdb'],
}

# Enables autosign node certificates
file {'/etc/puppet/autosign.conf':
  ensure  => present,
  content => "*\n",
  require => Package['puppet-server'],
  notify  => Service['puppetmaster'],
}

#Set master hostname into puppet.localdomain
file { "/etc/hostname":
    ensure => present,
    owner => root,
    group => root,
    mode => 644,
    content => "puppet.localdomain\n",
    notify => Exec["set-hostname"],
  }
  exec { "set-hostname":
    command => "/bin/hostname -F /etc/hostname",
    unless => "/usr/bin/test `hostname` = `/bin/cat /etc/hostname`",
  }

host { 'localhost':
  ensure       => 'absent',
}
host { 'localhost4':
  ensure       => 'present',
  host_aliases => ['puppet', 'puppet.localdomain', 'puppetdb', 'localhost', 'localhost.localdomain',  'localhost4.localdomain4'],
  ip           => '127.0.0.1',
  target       => '/etc/hosts',
  require      => Exec['set-hostname'],
}
host { 'localhost6':
  ensure       => 'present',
  host_aliases => ['puppet', 'puppet.localdomain', 'puppetdb', 'localhost', 'localhost.localdomain',  'localhost6.localdomain6'],
  ip           => '::1',
  target       => '/etc/hosts',
  require      => Exec['set-hostname'],
}