Advertisement
Guest User

Untitled

a guest
Jul 31st, 2016
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.36 KB | None | 0 0
  1. (ns docker
  2. (:require [clojure.string :as string]
  3. [me.raynes.conch :as sh]))
  4.  
  5. (sh/programs docker)
  6.  
  7. (defn endpoint-port!
  8. "Retrieve the docker port for the \"name\" docker service, nil if it
  9. cannot be fetched. It always returns the first port in
  10. NetworkSettings.Ports."
  11. [name]
  12. (let [{:keys [stdout exit-code]} (docker "inspect" "--format" "{{ .NetworkSettings.Ports }}"
  13. name
  14. {:verbose true
  15. :throw false})]
  16. (when (= 0 @exit-code)
  17. (first (re-seq #"[0-9]+" stdout)))))
  18.  
  19. (defn endpoint-with-port!
  20. "Retrieve the endpoint for the \"name\" service, nil if it cannot be
  21. fetched. It adds the port after the classical \":\""
  22. [name]
  23. (let [{:keys [stdout exit-code]} (docker "inspect" "--format" "{{ .NetworkSettings.IPAddress }}"
  24. name
  25. {:verbose true
  26. :throw false
  27. :seq true})
  28. port (endpoint-port! name)]
  29. (when (and port (= 0 @exit-code))
  30. (str (first stdout) ":" port))))
  31.  
  32. (defn postgres!
  33. [db-name]
  34. (let [{exit-code :exit-code} (docker "run" "-d"
  35. "--name" "postgres"
  36. "-e" (str "POSTGRES_DB=" db-name)
  37. "postgres:9.5.3"
  38. {:verbose true :throw true})]
  39. (when (= 0 @exit-code)
  40. (println "Postgres container created and running at %s \n" (endpoint-with-port! "postgres")))))
  41.  
  42. ;; (defn postgres!
  43. ;; [{:keys [user psw db]}]
  44. ;; (let [{exit-code :exit-code} (docker "run" "-d"
  45. ;; "--name" "postgres"
  46. ;; "-e" (str "POSTGRES_PASSWORD=" psw)
  47. ;; "-e" (str "POSTGRES_USER=" user)
  48. ;; "-e" (str "POSTGRES_DB=" db)
  49. ;; "postgres:9.5.3"
  50. ;; {:verbose true :throw true})]
  51. ;; (when (= 0 @exit-code)
  52. ;; (util/info "Postgres container created and running at %s \n" (endpoint-with-port! "postgres")))))
  53.  
  54. (defn elasticsearch!
  55. [docker opts]
  56. (let [{exit-code :exit-code} (docker "run" "-d"
  57. "--name" "elasticsearch"
  58. "elasticsearch:2.3.3"
  59. {:verbose true :throw true})]
  60. (when (= 0 @exit-code)
  61. (println "Elasticsearch container created and running at %s\n" (endpoint-with-port! "elasticsearch")))))
  62.  
  63. (defn start!
  64. [name]
  65. (let [{exit-code :exit-code} (docker "start" name {:verbose true :throw true})]
  66. (when (= 0 @exit-code)
  67. (println (str (string/capitalize name) " is now running at %s\n") (endpoint-with-port! name)))))
  68.  
  69. (defn running?
  70. [name]
  71. (every? #{"true"} (docker "inspect" "--format" "{{ .State.Running }}" name {:throw false :seq true})))
  72.  
  73. (defn container?
  74. [name]
  75. (every? #{""} (docker "inspect" "--format" "{{ .State }}" name {:throw false :seq true})))
  76.  
  77. (defn start-if-not-running!
  78. [name]
  79. (if-not (docker/running? name)
  80. (docker/start! name)
  81. (println (str (string/capitalize name) " is now running at %s\n") (endpoint-with-port! name))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement