add calico systemd start

Change-Id: I9b611c2e6d1da7ea52c7c113aef5aba96c5026a1
diff --git a/kubernetes/files/calico/calico-node.service b/kubernetes/files/calico/calico-node.service
deleted file mode 100644
index 5a206db..0000000
--- a/kubernetes/files/calico/calico-node.service
+++ /dev/null
@@ -1,16 +0,0 @@
-[Unit]
-Description=Calico per-node agent
-Documentation=https://github.com/projectcalico/calico-docker
-Requires=docker.service
-After=docker.service
-
-[Service]
-User=root
-EnvironmentFile=/etc/calico/network-environment
-PermissionsStartOnly=true
-ExecStart=/usr/bin/calicoctl node --ip=${DEFAULT_IPV4} --detach=false
-Restart=always
-RestartSec=10
-
-[Install]
-WantedBy=multi-user.target
\ No newline at end of file
diff --git a/kubernetes/files/calico/calico-node.service.master b/kubernetes/files/calico/calico-node.service.master
new file mode 100644
index 0000000..66acefd
--- /dev/null
+++ b/kubernetes/files/calico/calico-node.service.master
@@ -0,0 +1,46 @@
+{%- from "kubernetes/map.jinja" import master with context %}
+[Unit]
+Description=calico-node
+After=docker.service
+Requires=docker.service
+
+[Service]
+ExecStartPre=-/usr/bin/docker rm -f calico-node
+ExecStart=/usr/bin/docker run --net=host --privileged \
+ --name=calico-node \
+ -e HOSTNAME={{ master.host.name }} \
+ -e IP={{ master.apiserver.address }} \
+ -e IP6={{ master.get('ipv6_address', '') }} \
+ {%- if master.network.calico_network_backend is defined %}
+ -e CALICO_NETWORKING_BACKEND="{{ master.network.calico_network_backend }}"
+ {%- endif %}
+ -e AS={{ master.network.get('as', '64512') }} \
+ -e NO_DEFAULT_masterS={{ master.network.get('no_default_masters', false ) }} \
+ -e CALICO_LIBNETWORK_ENABLED={{ master.network.get('libnetwork_enabled', true ) }} \
+ -e ETCD_ENDPOINTS={% for member in master.network.etcd.members %}http://{{ member.host }}:{{ member.port }}{% if not loop.last %},{% endif %}{% endfor %} \
+ {%- if master.network.etcd.ssl is defined %}
+ ##TO BE DONE
+ -e ETCD_CA_CERT_FILE= \
+ -e ETCD_CERT_FILE= \
+ -e ETCD_KEY_FILE= \
+ -v {{ calico_cert_dir }}:{{ calico_cert_dir }}:ro \
+ {{ calico_node_image_repo }}:{{ calico_node_image_tag }}
+ {%- endif %}
+ -v /var/log/calico:/var/log/calico \
+ -v /run/docker/plugins:/run/docker/plugins \
+ -v /lib/modules:/lib/modules \
+ -v /var/run/calico:/var/run/calico \
+ {%- if master.network.volumes is defined %}
+ {%- for volume in master.network.volumes %}
+ -v {{ volume }} \
+ {%- endfor %}
+ {%- endif %}
+ {{ master.network.get('image', 'calico/node') }}:{{ master.network.get('image', 'latest') }}
+
+Restart=always
+RestartSec=10s
+
+ExecStop=-/usr/bin/docker stop calico-node
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/kubernetes/files/calico/calico-node.service.pool b/kubernetes/files/calico/calico-node.service.pool
new file mode 100644
index 0000000..07801ec
--- /dev/null
+++ b/kubernetes/files/calico/calico-node.service.pool
@@ -0,0 +1,46 @@
+{%- from "kubernetes/map.jinja" import pool with context %}
+[Unit]
+Description=calico-node
+After=docker.service
+Requires=docker.service
+
+[Service]
+ExecStartPre=-/usr/bin/docker rm -f calico-node
+ExecStart=/usr/bin/docker run --net=host --privileged \
+ --name=calico-node \
+ -e HOSTNAME={{ pool.host.name }} \
+ -e IP={{ pool.address }} \
+ -e IP6={{ pool.get('ipv6_address', '') }} \
+ {%- if pool.network.calico_network_backend is defined %}
+ -e CALICO_NETWORKING_BACKEND="{{ pool.network.calico_network_backend }}"
+ {%- endif %}
+ -e AS={{ pool.network.get('as', '64512') }} \
+ -e NO_DEFAULT_POOLS={{ pool.network.get('no_default_pools', false ) }} \
+ -e CALICO_LIBNETWORK_ENABLED={{ pool.network.get('libnetwork_enabled', true ) }} \
+ -e ETCD_ENDPOINTS={% for member in pool.network.etcd.members %}http://{{ member.host }}:{{ member.port }}{% if not loop.last %},{% endif %}{% endfor %} \
+ {%- if pool.network.etcd.ssl is defined %}
+ ##TO BE DONE
+ -e ETCD_CA_CERT_FILE= \
+ -e ETCD_CERT_FILE= \
+ -e ETCD_KEY_FILE= \
+ -v {{ calico_cert_dir }}:{{ calico_cert_dir }}:ro \
+ {{ calico_node_image_repo }}:{{ calico_node_image_tag }}
+ {%- endif %}
+ -v /var/log/calico:/var/log/calico \
+ -v /run/docker/plugins:/run/docker/plugins \
+ -v /lib/modules:/lib/modules \
+ -v /var/run/calico:/var/run/calico \
+ {%- if pool.network.volumes is defined %}
+ {%- for volume in pool.network.volumes %}
+ -v {{ volume }} \
+ {%- endfor %}
+ {%- endif %}
+ {{ pool.network.get('image', 'calico/node') }}:{{ pool.network.get('image', 'latest') }}
+
+Restart=always
+RestartSec=10s
+
+ExecStop=-/usr/bin/docker stop calico-node
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/kubernetes/master/calico.sls b/kubernetes/master/calico.sls
index ec20328..f175a70 100644
--- a/kubernetes/master/calico.sls
+++ b/kubernetes/master/calico.sls
@@ -11,12 +11,6 @@
     - dir_mode: 755
     - template: jinja
 
-# /etc/systemd/system/calico-node.service:
-#   file.managed:
-#     - source: salt://kubernetes/files/calico/calico-node.service
-#     - user: root
-#     - group: root
-
 /usr/bin/calicoctl:
   file.managed:
      - source: {{ master.network.get('source', 'https://github.com/projectcalico/calico-containers/releases/download/') }}{{ master.network.version }}/calicoctl
@@ -25,11 +19,22 @@
      - user: root
      - group: root
 
-# calico_node:
-#   service.running:
-#   - name: calico-node
-#   - enable: True
-#   - watch:
-#     - file: /etc/systemd/system/calico-node.service
+{%- if master.network.get('systemd', true) %}
+
+/etc/systemd/system/calico-node.service:
+  file.managed:
+    - source: salt://kubernetes/files/calico/calico-node.service.pool.master
+    - user: root
+    - group: root
+    - template: jinja
+
+calico_node:
+  service.running:
+    - name: calico-node
+    - enable: True
+    - watch:
+      - file: /etc/systemd/system/calico-node.service
+
+{%- endif %}
 
 {%- endif %}
\ No newline at end of file
diff --git a/kubernetes/pool/calico.sls b/kubernetes/pool/calico.sls
index 864b48e..c0193ac 100644
--- a/kubernetes/pool/calico.sls
+++ b/kubernetes/pool/calico.sls
@@ -47,17 +47,21 @@
     - dir_mode: 755
     - template: jinja
 
-# /etc/systemd/system/calico-node.service:
-#   file.managed:
-#     - source: salt://kubernetes/files/calico/calico-node.service
-#     - user: root
-#     - group: root
+{%- if pool.network.get('systemd', true) %}
 
-# calico_node:
-#   service.running:
-#   - name: calico-node
-#   - enable: True
-#   - watch:
-#     - file: /etc/systemd/system/calico-node.service
+/etc/systemd/system/calico-node.service:
+  file.managed:
+    - source: salt://kubernetes/files/calico/calico-node.service.pool
+    - user: root
+    - group: root
+    - template: jinja
+
+calico_node:
+  service.running:
+    - name: calico-node
+    - enable: True
+    - watch:
+      - file: /etc/systemd/system/calico-node.service
+{%- endif %}
 
 {%- endif %}
\ No newline at end of file