add service mapping

This commit is contained in:
Pavol Noha 2017-04-15 18:45:23 +02:00
parent f36a345156
commit a41b7a4d25

View file

@ -1,9 +1,10 @@
(ns swarmpit.domain)
(ns swarmpit.domain
(:require [clojure.string :as str]))
(defn ->service-mode
[service]
(if (= (:mode service) "global")
"Global"
{:Global {}}
{:Replicated
{:Replicas (:replicas service)}}))
@ -33,6 +34,44 @@
:EndpointSpec
{:Ports (->service-ports service)}})
(defn <-service-ports
[service]
(->> (get-in service [:Spec :EndpointSpec :Ports])
(map (fn [p] {:containerPort (:TargetPort p)
:protocol (:Protocol p)
:hostPort (:PublishedPort p)}))
(into [])))
(defn <-service-variables
[service]
(->> (get-in service [:Spec :TaskTemplate :ContainerSpec :Env])
(map (fn [p]
(let [variable (str/split p #"=")]
{:name (first variable)
:value (second variable)})))
(into [])))
(defn <-service
"Map docker service domain to swarmpit service domain"
[service])
[service]
(let [image (get-in service [:Spec :TaskTemplate :ContainerSpec :Image])
image-info (str/split image #"@")
image-name (first image-info)
image-digest (second image-info)]
{:id (get service :ID)
:createdAt (get service :CreatedAt)
:updatedAt (get service :UpdatedAt)
:image image-name
:imageDigest image-digest
:serviceName (get-in service [:Spec :Name])
:mode (str/lower-case (name (first (keys (get-in service [:Spec :Mode])))))
:replicas (get-in service [:Spec :Mode :Replicated :Replicas])
:autoredeploy false
:ports (<-service-ports service)
:variables (<-service-variables service)}))
(defn <-services
[services]
(->> services
(map <-service)
(into [])))