All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pallet.crate.splunk.clj Maven / Gradle / Ivy

(ns pallet.crate.splunk
  "Install and configure splunk"
  (:require
   [pallet.argument :as argument]
   [pallet.compute :as compute]
   [pallet.target :as target]
   [pallet.request-map :as request-map]
   [pallet.resource :as resource]
   [pallet.stevedore :as stevedore]
   [pallet.resource.remote-file :as remote-file]
   [pallet.resource.package :as package]))

(def build
  {"4.1.4" 82143
   "4.1.3" 80534
   "4.1.2" 79191
   "4.1.1" 78281
   "4.1" 77833
   "4.0.11" 79031
   "4.0.10" 77146
   "4.0.9" 74233
   "4.0.8" 73243
   "4.0.7" 72459
   "4.0.6" 70313
   "4.0.5" 69401
   "4.0.4" 67724
   "4.0.3" 65638
   "4.0.2" 64889
   "4.0.1" 64658
   "3.4.14" 79166
   "3.4.13" 75215
   "3.4.12" 69236
   "3.4.11" 65313
   "3.4.10" 60883
   "3.4.9" 57762
   "3.4.8" 54309
   "3.4.6" 51113
   "3.4.5" 47883
   "3.4.3" 46779
   "3.4.2" 46047
   "3.4.1" 45588
   "3.4" 44873
   "3.3.4" 43000
   "3.3.3" 42717
   "3.3.2" 41320
   "3.3.1" 39933
   "3.3" 38914
   "3.2.6" 38259
   "3.2.5" 38160
   "3.2.4" 37025
   "3.2.3" 35555
   "3.2.2" 34603
   "3.2.1" 34291
   "3.2" 33572
   "3.1.5" 31521
   "3.1.4" 30364
   "3.1.3" 28524
   "3.1.2" 28096
   "3.1.1" 27147
   "3.1" 26228
   "3.0.2" 24828
   "3.0.1" 24078
   "3.0" 23043
   "2.2.6" 21120
   "2.2.3" 18173
   "2.2.1" 17100
   "2.2" 15292
   "2.1.3" 14652
   "2.1.2" 14524})

(defn debfile [request version]
  (if (compute/is-64bit? (:target-node request))
    (format "splunk-%s-%d-linux-2.6-amd64.deb" version (build version))
    (format "splunk-%s-%d-linux-2.6-intel.deb" version (build version))))

(defn rpmfile [request version]
  (if (compute/is-64bit? (:target-node request))
    (format "splunk-%s-%d-linux-2.6-x86_64.rpm" version (build version))
    (format "splunk-%s-%d-i386.rpm" version (build version))))

(defn url [version file]
  (format
   "http://www.splunk.com/index.php/download_track?file=%s/linux/%s&ac=&wget=true&name=wget&typed=releases"
   version file))

(defn md5-url
  "Unfortunately the md5 file returned is not usable with md5sum --check"
  [version file]
  (format
   "http://www.splunk.com/index.php/download_track?file=%s/linux/%s.md5&ac=&wget=true&name=wget&typed=releases"
   version file))


(resource/defresource install
  (install*
   [request & {:keys [version]}]
   (case (request-map/packager request)
     :aptitude
     (let [f (debfile request version)
           deb (str (stevedore/script (tmp-dir)) "/" f)]
       (stevedore/checked-commands
        "Install splunk"
        (remote-file/remote-file* request deb :url (url version f))
        (stevedore/script
         (if-not (file-exists? "/opt/splunk/bin/splunk")
           (do
             (dpkg -i (quoted ~deb))
             ("/opt/splunk/bin/splunk" start "--accept-license")
             ("/opt/splunk/bin/splunk" enable boot-start))))))
     :yum
     (let [f (rpmfile request version)
           rpm (str (stevedore/script (tmp-dir)) "/" f)]
       (stevedore/checked-commands
        "Install splunk"
        (remote-file/remote-file* request rpm :url (url version f))
        (stevedore/script
         (rpm -i (quoted ~rpm))
         ("/opt/splunk/bin/splunk" start "--accept-license")
         ("/opt/splunk/bin/splunk" enable boot-start)))))))

(defn splunk
  [request & {:keys [version ] :or {version "4.1.4"}}]
  (install request :version version))

(defn format-section
  [m]
  (reduce #(str %1 (format "%s = %s\n" (name (first %2)) (second %2))) "" m))

(defn format-conf
  [maps]
  (reduce
   #(str %1 (format
             "[%s]\n%s\n"
             (name (first %2)) (format-section (second %2))))
   ""
   maps))

(defn fifo-input
  [path & {:keys [host index sourcetype source queue] :as options}]
  {(format "fifo://%s" path) options})

(defn configure
  [request & {:keys [inputs host] :or {inputs {}}}]
  (remote-file/remote-file
   request
   "/opt/splunk/etc/system/local/inputs.conf"
   :content (format-conf
             (merge
              inputs
              {:default {:host (or host
                                   (compute/hostname
                                    (:target-node request)))}}))
   :owner "splunk" :group "splunk"))




© 2015 - 2025 Weber Informatics LLC | Privacy Policy