Add AWS support for externaldns.

- Add AWS support
- Add /healtz

Change-Id: I4cbb76ac5a36685414a834ad839e04c19ab0db3d
Signed-off-by: Sergii Golovatiuk <sgolovatiuk@mirantis.com>
diff --git a/README.rst b/README.rst
index e157e20..5ad0948 100644
--- a/README.rst
+++ b/README.rst
@@ -148,6 +148,23 @@
                   OS_PASSWORD: password
                   OS_REGION_NAME: RegionOne
 
+Enable external DNS addon with AWS provider
+
+.. code-block:: yaml
+
+    parameters:
+      kubernetes:
+        common:
+          addons:
+            externaldns:
+              externaldns:
+                enabled: True
+                domain: company.mydomain
+                provider: aws
+                aws_options:
+                  AWS_ACCESS_KEY_ID: XXXXXXXXXXXXXXXXXXXX
+                  AWS_SECRET_ACCESS_KEY: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+
 Enable OpenStack cloud provider
 
 .. code-block:: yaml
diff --git a/kubernetes/files/kube-addons/externaldns/externaldns-aws-secret.yaml b/kubernetes/files/kube-addons/externaldns/externaldns-aws-secret.yaml
new file mode 100644
index 0000000..2221f1d
--- /dev/null
+++ b/kubernetes/files/kube-addons/externaldns/externaldns-aws-secret.yaml
@@ -0,0 +1,14 @@
+{%- from "kubernetes/map.jinja" import common with context -%}
+---
+apiVersion: v1
+kind: Secret
+metadata:
+  name: aws-secret
+  namespace: kube-system
+  labels:
+    addonmanager.kubernetes.io/mode: EnsureExists
+type: Opaque
+data:
+{%- for option, value in common.addons.externaldns.aws_options.items() %}
+  {{ option }}: {{ salt['hashutil.base64_b64encode'](value) }}
+{%- endfor %}
diff --git a/kubernetes/files/kube-addons/externaldns/externaldns-deploy.yml b/kubernetes/files/kube-addons/externaldns/externaldns-deploy.yml
index 9dccf58..0803d6e 100644
--- a/kubernetes/files/kube-addons/externaldns/externaldns-deploy.yml
+++ b/kubernetes/files/kube-addons/externaldns/externaldns-deploy.yml
@@ -3,11 +3,13 @@
 apiVersion: extensions/v1beta1
 kind: Deployment
 metadata:
-  namespace: {{ common.addons.externaldns.namespace }}
   name: external-dns
+  namespace: {{ common.addons.externaldns.namespace }}
   labels:
+    k8s-app: externaldns
     addonmanager.kubernetes.io/mode: Reconcile
 spec:
+  replicas: 1
   strategy:
     type: Recreate
   template:
@@ -21,6 +23,7 @@
       containers:
       - name: external-dns
         image: {{ common.addons.externaldns.image }}
+        imagePullPolicy: Always
         args:
         - --source=service
         - --source=ingress
@@ -38,4 +41,12 @@
         envFrom:
         - secretRef:
             name: designate-os-secret
+        {%- elif common.addons.externaldns.provider == "aws" %}
+        envFrom:
+        - secretRef:
+            name: aws-secret
         {%- endif %}
+        livenessProbe:
+          httpGet:
+            port: 7979
+            path: /healthz
diff --git a/kubernetes/master/kube-addons.sls b/kubernetes/master/kube-addons.sls
index 31770a5..99156a2 100644
--- a/kubernetes/master/kube-addons.sls
+++ b/kubernetes/master/kube-addons.sls
@@ -181,12 +181,20 @@
     - dir_mode: 755
     - makedirs: True
 
-{%- if common.addons.externaldns.get('provider') == 'designate' %}
+{%- if common.addons.get('externaldns', {}).get('provider') == 'designate' %}
 /etc/kubernetes/addons/externaldns/externaldns-designate-secret.yaml:
   file.managed:
     - source: salt://kubernetes/files/kube-addons/externaldns/externaldns-designate-secret.yaml
     - template: jinja
     - group: root
+{% endif %}
+
+{%- if common.addons.get('externaldns', {}).get('provider') == 'aws' %}
+/etc/kubernetes/addons/externaldns/externaldns-aws-secret.yaml:
+  file.managed:
+    - source: salt://kubernetes/files/kube-addons/externaldns/externaldns-aws-secret.yaml
+    - template: jinja
+    - group: root
     - dir_mode: 755
     - makedirs: True
 {% endif %}