diff --git a/src/pallet/crate/postgres.clj b/src/pallet/crate/postgres.clj index 8aa30d3..b182fc5 100644 --- a/src/pallet/crate/postgres.clj +++ b/src/pallet/crate/postgres.clj @@ -62,7 +62,7 @@ Links: :only [defmethod-version defmulti-version defmulti-version-plan defmethod-version-plan defmulti-version-plan os-map] :as version-dispatch] - [pallet.versions :only [as-version-vector version-string]])) + [pallet.versions :only [as-version-vector version-string version-less]])) (def ^{:private true} pallet-cfg-preamble "# This file was auto-generated by Pallet. Do not edit it manually unless you @@ -152,27 +152,39 @@ Links: ;; :packages ["libpq5" (str "postgresql-" target-version)] ;; :layout :debian-base)))))) +(def ^:dynamic *postgres-org-repo-release* + {"10.04" "lucid" + "12.04" "precise" + "13.10" "saucy" + "14.04" "trusty"}) + (defmethod-version-plan - install-strategy {:os :ubuntu} - [os os-version version settings] + install-strategy {:os :ubuntu} + [os os-version version settings] (-> (cond - (:install-strategy settings) settings - (:package-source settings) (assoc settings :install-strategy :package-source) - :else (let [default-version (os-map-lookup @postgres-package-version) - target-version (:version settings)] - (if (= (version-string default-version) target-version) - (assoc settings - :install-strategy :packages - :packages ["postgresql"] - :layout :debian-base) - (assoc settings - :install-strategy :package-source - :package-source {:name "Martin Pitt backports" - :aptitude {:url "ppa:pitti/postgresql"} - :apt {:url "ppa:pitti/postgresql"}} - :packages [(str "postgresql-" target-version)] - :layout :debian-base)))))) + (:install-strategy settings) settings + (:package-source settings) (assoc settings :install-strategy :package-source) + :else (let [default-version (os-map-lookup @postgres-package-version) + target-version (:version settings) + release (str (*postgres-org-repo-release* (pallet.crate/os-version)) + "-pgdg")] + (if (= (version-string default-version) target-version) + (assoc settings + :install-strategy :packages + :packages ["postgresql"] + :layout :debian-base) + (assoc settings + :install-strategy :package-source + :package-source {:name "postgresql" + :aptitude {:url "http://apt.postgresql.org/pub/repos/apt/ " + :release release + :key-url "https://www.postgresql.org/media/keys/ACCC4CF8.asc"} + :apt {:url "http://apt.postgresql.org/pub/repos/apt/" + :release release + :key-url "https://www.postgresql.org/media/keys/ACCC4CF8.asc"}} + :packages [(str "postgresql-" target-version)] + :layout :debian-base)))))) (defmethod-version-plan install-strategy {:os :arch} @@ -287,11 +299,14 @@ Links: :has-pg-wrapper true :has-multicluster-service true :options - {:data_directory (format "/var/lib/postgresql/%s/%%s" version) - :hba_file (format "/etc/postgresql/%s/%%s/pg_hba.conf" version) - :ident_file (format "/etc/postgresql/%s/%%s/pg_ident.conf" version) - :external_pid_file (format "/var/run/postgresql/%s-%%s.pid" version) - :unix_socket_directory "/var/run/postgresql"}}))) + (merge + {:data_directory (format "/var/lib/postgresql/%s/%%s" version) + :hba_file (format "/etc/postgresql/%s/%%s/pg_hba.conf" version) + :ident_file (format "/etc/postgresql/%s/%%s/pg_ident.conf" version) + :external_pid_file (format "/var/run/postgresql/%s-%%s.pid" version)} + (if (version-less (as-version-vector version) [9 3]) + {:unix_socket_directory "/var/run/postgresql"} + {:unix_socket_directories "/var/run/postgresql"}))}))) (defmethod default-settings :rh-base [os-family layout settings] @@ -872,7 +887,7 @@ Links: (defn- create-role-pgsql [version] (cond - (re-matches #"9.[0-2]" version) + (not (version-less (as-version-vector version) [9 0])) "do $$declare user_rec record; BEGIN select into user_rec * from pg_roles where rolname='%1$s';