class Puppetfactory::Plugins::UserEnvironment

Public Class Methods

new(options) click to toggle source
Calls superclass method Puppetfactory::Plugins::new
# File lib/puppetfactory/plugins/user_environment.rb, line 7
def initialize(options)
  super(options)

  @master       = options[:master]
  @confdir      = options[:confdir]
  @codedir      = options[:codedir]
  @stagedir     = options[:stagedir]
  @puppetcode   = options[:puppetcode]
  @templatedir  = options[:templatedir]
  @environments = options[:environments]
  @repomodel    = options[:repomodel]
  @codestage   = "#{@stagedir}/environments"
end

Public Instance Methods

create(username, password) click to toggle source
# File lib/puppetfactory/plugins/user_environment.rb, line 21
def create(username, password)
  environment = "#{@codestage}/#{Puppetfactory::Helpers.environment_name(username)}"

  begin
    # configure environment
    FileUtils.mkdir_p "#{environment}/manifests"
    FileUtils.mkdir_p "#{environment}/modules"

    File.open("#{environment}/manifests/site.pp", 'w') do |f|
      f.write ERB.new(File.read("#{@templatedir}/site.pp.erb")).result(binding)
    end

    # Copy userprefs module into user environment
    if Dir.exist?("#{@codedir}/modules/userprefs") then
      FileUtils.cp_r("#{@codedir}/modules/userprefs", "#{environment}/modules/")
    elsif Dir.exist?("#{@environments}/production/modules/userprefs") then
      FileUtils.cp_r("#{@environments}/production/modules/userprefs", "#{environment}/modules/")
    else
      $logger.warn "Module userprefs not found in global or production modulepath"
    end

    # make sure the user and pe-puppet can access all the needful
    FileUtils.chown_R(username, 'pe-puppet', environment)
    FileUtils.chmod_R(0750, environment)

    deploy(username)

  rescue => e
    $logger.error "Error creating user environment for #{username}"
    $logger.error e.message
    return false
  end

  true
end
delete(username) click to toggle source
# File lib/puppetfactory/plugins/user_environment.rb, line 57
def delete(username)
  FileUtils.rm_rf "#{@codestage}/#{Puppetfactory::Helpers.environment_name(username)}"
  FileUtils.rm_rf "#{@environments}/#{Puppetfactory::Helpers.environment_name(username)}"
end
deploy(username) click to toggle source
# File lib/puppetfactory/plugins/user_environment.rb, line 62
def deploy(username)
  # TODO: temporary hack to keep this from disrupting current deliveries.
  return if @codestage == @environments
  environment = Puppetfactory::Helpers.environment_name(username)

  begin
    FileUtils.cp_r("#{@codestage}/#{environment}/*", "#{@environments}/#{environment}/")
    FileUtils.chown_R('pe-puppet', 'pe-puppet', "#{@environments}/#{environment}")

    RestClient::Resource.new(
      "https://#{@master}:8140/puppet-admin-api/v1/environment-cache?environment=#{environment}",
      :ssl_client_cert  =>  OpenSSL::X509::Certificate.new(File.read("#{@confdir}/ssl/certs/#{@master}.pem")),
      :ssl_client_key   =>  OpenSSL::PKey::RSA.new(File.read("#{@confdir}/ssl/private_keys/#{@master}.pem")),
      :ssl_ca_file      =>  "#{@confdir}/ssl/ca/ca_crt.pem",
      :verify_ssl       =>  OpenSSL::SSL::VERIFY_PEER
    ).delete
  rescue => e
    $logger.error "Deploying environment #{environment} failed: #{e.message}"
    $logger.debug e.backtrace
    raise "Error deploying environment #{environment}."
  end
end
redeploy(username) click to toggle source
# File lib/puppetfactory/plugins/user_environment.rb, line 85
def redeploy(username)
  begin
    if username == 'production'
      raise "Can't redeploy production environment"
    end
    delete(username)
    deploy(username)

  rescue => e
    raise "Error redeploying environment #{username}: #{e.message}"
  end
end