77 lines
3.4 KiB
Clojure
77 lines
3.4 KiB
Clojure
(ns com.sompani.onboarding
|
|
(:require [clojure.java.shell :as sh]
|
|
[clojure.string :as str]
|
|
[vault.core :as vault]
|
|
vault.client.http
|
|
[clj-http.client :as http]
|
|
[cljstache.core :as cljstache]
|
|
[taoensso.timbre :as timbre
|
|
:refer [log trace debug info warn error fatal report
|
|
logf tracef debugf infof warnf errorf fatalf reportf
|
|
spy get-env]]))
|
|
|
|
(def vault-client (vault/new-client "http://127.0.0.1:8200"))
|
|
|
|
;; # Webserver configuration
|
|
|
|
(defn make-dirs! [{:keys [company-name]}]
|
|
(doseq [dir ["staging.%s.talent.careers-cache"
|
|
"staging.%s.talent.careers-logs"
|
|
"staging.%s.talent.careers-sessions"
|
|
"staging.%s.talent.careers-uploads"
|
|
"staging.%s.talent.careers.1234"
|
|
"%s.talent.careers-cache"
|
|
"%s.talent.careers-logs"
|
|
"%s.talent.careers-sessions"
|
|
"%s.talent.careers-uploads"
|
|
"%s.talent.careers.1234"]]
|
|
(sh/sh "install" "-o" "http" "-g" "http" "-d" (format dir company-name) :dir "/srv/http"))
|
|
(debug (sh/sh "ln" "-s" "staging.%s.talent.careers.1234" "staging.%s.talent.careers" :dir "/srv/http"))
|
|
(debug (sh/sh "ln" "-s" "%s.talent.careers.1234" "%s.talent.careers" :dir "/srv/http")))
|
|
|
|
(defn create-nginx-server! [datamap]
|
|
(doseq [file ["resources/nginx/skel.talent.careers"
|
|
"resources/nginx/staging.skel.talent.careers"]
|
|
:let [out-file (format "/etc/nginx/servers-available/%s" (str/replace file #"skel" (:company-name datamap)))]]
|
|
(info "using template" file "to create" out-file)
|
|
(-> (slurp file)
|
|
(cljstache/render datamap)
|
|
(spit out-file))))
|
|
|
|
;; # DNS configuration
|
|
|
|
;; ## Basic cloudflare entries
|
|
|
|
(defn basic-dns-entries [company-name]
|
|
[{:type "A" :name company-name :content "185.163.117.139"}
|
|
{:type "A" :name (format "staging.%s" company-name) :content "185.163.117.139"}
|
|
{:type "AAAA" :name company-name :content "2a03:4000:3b:2bb:18ea:e0ff:fe8c:aa9a"}
|
|
{:type "AAAA" :name (format "staging.%s" company-name) :content "2a03:4000:3b:2bb:18ea:e0ff:fe8c:aa9a"}
|
|
{:type "MX" :name company-name :content "mx.yandex.net."}
|
|
{:type "MX" :name (format "m.%s.talent.careers" company-name) :content "feedback-smtp.eu-west-1.amazonses.com"}
|
|
{:type "TXT" :name (format "m.%s.talent.careers" company-name) :content "v=spf1 include:amazonses.com ~all"}])
|
|
|
|
(defn make-basic-dns-entries! [{:keys [company-name]}]
|
|
(let [uri "https://api.cloudflare.com/client/v4/zones/5cd643e7432d7cf69f44e268e32b5452/dns_records"
|
|
headers {"Authorization" (str "Bearer " (:token (vault/read-secret vault-client "secret/cloudflare-api")))}
|
|
entries (basic-dns-entries company-name)]
|
|
(debug "Creating DNS entries for" company-name "; Headers: " headers)
|
|
(doseq [entry entries]
|
|
(info (http/post uri
|
|
{:headers headers
|
|
:content-type :json
|
|
:form-params entry})))))
|
|
|
|
(defn -main [& args]
|
|
(let [datamap {:company-name (nth args 0)
|
|
:company-suffix (nth args 1)}]
|
|
(vault/authenticate! vault-client :token (System/getenv "VAULT_TOKEN"))
|
|
(info "Creating deploy directories.")
|
|
(make-dirs! datamap)
|
|
(info "Creating basic DNS entries.")
|
|
(make-basic-dns-entries! datamap)
|
|
(info "Creating nginx entries.")
|
|
(create-nginx-server! datamap)
|
|
(info "Done.")))
|
|
|