Search code examples
ruby-on-railspostgresqlchef-solotest-kitchen

Chef solo how to install postgresql 9.3 and minitest


I am trying to install postgresql 9.3 with chef solo from opcode recipes but I get the following error:

Chef::Exceptions::Package: No version specified, and no candidate version available for postgresql93-devel 

here is my code in attributes/default.rb but it just installs 9.1 and can't locate package for 9.3-devel.

default['postgresql']['version'] = '9.3'
default['postgresql']['client']['packages'] = ["postgresql#{node['postgresql']['version'].split('.').join}-devel"]
default['postgresql']['server']['packages'] = ["postgresql#{node['postgresql']['version'].split('.').join}-server"]
default['postgresql']['contrib']['packages'] = ["postgresql#{node['postgresql']['version'].split('.').join}-contrib"]
default['postgresql']['dir'] = "/var/lib/pgsql/#{node['postgresql']['version']}/data"
default['postgresql']['server']['service_name'] = "postgresql-#{node['postgresql']['version']}"

If I use this code instead to install 9.2 it is successful but minitest complains that version 9.3 is not installed.

default['postgresql']['version'] = '9.2'
default['postgresql']['enable_pgdg_apt'] = true
default['postgresql']['dir'] = "/etc/postgresql/9.2/main"
default['postgresql']['config']['data_directory'] = "/var/lib/postgresql/9.2/main"
default['postgresql']['config']['hba_file'] = "/etc/postgresql/9.2/main/pg_hba.conf"
default['postgresql']['config']['ident_file'] = "/etc/postgresql/9.2/main/pg_ident.conf"
default['postgresql']['config']['external_pid_file'] = "/var/run/postgresql/9.2-main.pid"
default['postgresql']['config']['ssl_key_file']  = "/etc/ssl/private/ssl-cert-snakeoil.key"
default['postgresql']['config']['ssl_cert_file'] = "/etc/ssl/certs/ssl-cert-snakeoil.pem"
default['postgresql']['client']['packages']  = ["postgresql-client-9.2"]
default['postgresql']['server']['packages']  = ["postgresql-9.2"]
default['postgresql']['contrib']['packages'] = ["postgresql-contrib-9.2"]

I am now using this in attributes/default.rb

default['postgresql']['password']['postgres'] = 'xxx'
default['sportdata-server']['database']['dbname'] = 'myapp_production'
default['postgresql']['pgdg']['release_apt_codename'] = 'precise'
default['postgresql']['version'] = '9.3'
default['postgresql']['config']['ssl']  = false
default['postgresql']['config']['listen_addresses']  = '*'

Solution

  • I finally abandoned the opscode postgresql cook book and went with this:

    attributes/default.rb

    default ['lsb']['codename'] = 'trusty'
    default['postgresql']['version'] = '9.3'
    

    In my postgresql-server recipe:

    file "remove deprecated Pitti PPA apt repository" do
      action :delete
      path "/etc/apt/sources.list.d/pitti-postgresql-ppa"
    end
    
    bash "adding postgresql repo" do
      user "root"
      code <<-EOC
      echo "deb http://apt.postgresql.org/pub/repos/apt/ #{node['lsb']['codename']}-pgdg main" > /etc/apt/sources.list.d/pgdg.list
      wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
      EOC
      action :run
    end
    
    execute "run apt-get update" do
      command 'apt-get update'
      action :run
    end
    
    packages = %w(
      libpq-dev
      git-core 
      curl 
      zlib1g-dev
      libssl-dev 
      libreadline-dev 
      libyaml-dev 
      libsqlite3-dev 
      sqlite3 
      libxml2-dev 
      libxslt1-dev
      postgresql-contrib
    )
    
    packages.each { |name| package name }
    
    package "postgresql-#{node['postgresql']['version']}"