#cloud-config

coreos:
    units:
      - name: cloudstack-ssh-key.service
        command: restart
        runtime: yes
        content: |
          [Unit]
          Description=Sets SSH key from metadata

          [Service]
          Type=oneshot
          StandardOutput=journal+console
          ExecStart=/usr/share/oem/bin/cloudstack-ssh-key
      - name: cloudstack-hostname.service
        command: restart
        runtime: yes
        content: |
          [Unit]
          Description=Sets hostname from metadata

          [Service]
          Type=oneshot
          StandardOutput=journal+console
          ExecStart=/usr/share/oem/bin/cloudstack-hostname
      - name: cloudstack-cloudinit.service
        command: restart
        runtime: yes
        content: |
          [Unit]
          Description=Cloudinit from CloudStack-style metadata
          Requires=coreos-setup-environment.service
          After=coreos-setup-environment.service

          [Service]
          Type=oneshot
          EnvironmentFile=/etc/environment
          ExecStart=/usr/share/oem/bin/cloudstack-coreos-cloudinit
    oem:
      id: cloudstack
      name: CloudStack
      version-id: 0.0.1-r3
      home-url: http://cloudstack.apache.org/
      bug-report-url: https://github.com/coreos/coreos-overlay

    etcd2:
      name: master
      listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001
      advertise-client-urls: http://PRIVATE_IP:2379,http://PRIVATE_IP:4001
      initial-cluster-token: k8s_etcd
      listen-peer-urls: http://PRIVATE_IP:2380,http://PRIVATE_IP:7001
      initial-advertise-peer-urls: http://PRIVATE_IP:2380
      initial-cluster: master=http://PRIVATE_IP:2380
      initial-cluster-state: new
    fleet:
      metadata: "role=master"
    units:
      - name: setup-network-environment.service
        command: start
        content: |
          [Unit]
          Description=Setup Network Environment
          Documentation=https://github.com/kelseyhightower/setup-network-environment
          Requires=network-online.target
          After=network-online.target

          [Service]
          ExecStartPre=-/usr/bin/mkdir -p /opt/bin
          ExecStartPre=/usr/bin/curl -L -o /opt/bin/setup-network-environment -z /opt/bin/setup-network-environment https://github.com/kelseyhightower/setup-network-environment/releases/download/v1.0.0/setup-network-environment
          ExecStartPre=/usr/bin/chmod +x /opt/bin/setup-network-environment
          ExecStart=/opt/bin/setup-network-environment
          RemainAfterExit=yes
          Type=oneshot
      - name: fleet.service
        command: start
      - name: flanneld.service
        command: start
        drop-ins:
          - name: 50-network-config.conf
            content: |
              [Unit]
              Requires=etcd2.service
              [Service]
              ExecStartPre=/usr/bin/etcdctl set /coreos.com/network/config '{"Network":"10.244.0.0/16", "Backend": {"Type": "vxlan"}}'
      - name: docker-cache.service
        command: start
        content: |
          [Unit]
          Description=Docker cache proxy
          Requires=early-docker.service
          After=early-docker.service
          Before=early-docker.target

          [Service]
          Restart=always
          TimeoutStartSec=0
          RestartSec=5
          Environment="TMPDIR=/var/tmp/"
          Environment="DOCKER_HOST=unix:///var/run/early-docker.sock"
          ExecStartPre=-/usr/bin/docker kill docker-registry
          ExecStartPre=-/usr/bin/docker rm docker-registry
          ExecStartPre=/usr/bin/docker pull quay.io/devops/docker-registry:latest
          # GUNICORN_OPTS is an workaround for
          # https://github.com/docker/docker-registry/issues/892
          ExecStart=/usr/bin/docker run --rm --net host --name docker-registry \
              -e STANDALONE=false \
              -e GUNICORN_OPTS=[--preload] \
              -e MIRROR_SOURCE=https://registry-1.docker.io \
              -e MIRROR_SOURCE_INDEX=https://index.docker.io \
              -e MIRROR_TAGS_CACHE_TTL=1800 \
              quay.io/devops/docker-registry:latest
      - name: docker.service
        content: |
          [Unit]
          Description=Docker Application Container Engine
          Documentation=http://docs.docker.com
          After=docker.socket early-docker.target network.target
          Requires=docker.socket early-docker.target

          [Service]
          Environment=TMPDIR=/var/tmp
          EnvironmentFile=-/run/flannel_docker_opts.env
          EnvironmentFile=/etc/network-environment
          MountFlags=slave
          LimitNOFILE=1048576
          LimitNPROC=1048576
          ExecStart=/usr/lib/coreos/dockerd --daemon --host=fd:// --registry-mirror=http://${DEFAULT_IPV4}:5000 $DOCKER_OPT_BIP $DOCKER_OPT_MTU $DOCKER_OPT_IPMASQ

          [Install]
          WantedBy=multi-user.target
        drop-ins:
          - name: 51-docker-mirror.conf
            content: |
              [Unit]
              # making sure that docker-cache is up and that flanneld finished
              # startup, otherwise containers won't land in flannel's network...
              Requires=docker-cache.service flanneld.service
              After=docker-cache.service flanneld.service
      - name: kube-apiserver.service
        command: start
        content: |
          [Unit]
          Description=Kubernetes API Server
          Documentation=https://github.com/GoogleCloudPlatform/kubernetes
          Requires=etcd2.service setup-network-environment.service
          After=etcd2.service setup-network-environment.service

          [Service]
          EnvironmentFile=/etc/network-environment
          ExecStartPre=-/usr/bin/mkdir -p /opt/bin
          ExecStartPre=/usr/bin/curl -L -o /opt/bin/kube-apiserver -z /opt/bin/kube-apiserver https://storage.googleapis.com/kubernetes-release/release/v0.18.2/bin/linux/amd64/kube-apiserver
          ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-apiserver
          ExecStart=/opt/bin/kube-apiserver \
          --allow_privileged=true \
          --insecure_bind_address=0.0.0.0 \
          --insecure_port=8080 \
          --kubelet_https=true \
          --secure_port=6443 \
          --service-cluster-ip-range=10.100.0.0/16 \
          --etcd_servers=http://127.0.0.1:4001 \
          --public_address_override=${DEFAULT_IPV4} \
          --logtostderr=true
          Restart=always
          RestartSec=10
      - name: kube-controller-manager.service
        command: start
        content: |
          [Unit]
          Description=Kubernetes Controller Manager
          Documentation=https://github.com/GoogleCloudPlatform/kubernetes
          Requires=kube-apiserver.service
          After=kube-apiserver.service

          [Service]
          ExecStartPre=/usr/bin/curl -L -o /opt/bin/kube-controller-manager -z /opt/bin/kube-controller-manager https://storage.googleapis.com/kubernetes-release/release/v0.18.2/bin/linux/amd64/kube-controller-manager
          ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-controller-manager
          ExecStart=/opt/bin/kube-controller-manager \
          --master=127.0.0.1:8080 \
          --logtostderr=true
          Restart=always
          RestartSec=10
      - name: kube-scheduler.service
        command: start
        content: |
          [Unit]
          Description=Kubernetes Scheduler
          Documentation=https://github.com/GoogleCloudPlatform/kubernetes
          Requires=kube-apiserver.service
          After=kube-apiserver.service

          [Service]
          ExecStartPre=/usr/bin/curl -L -o /opt/bin/kube-scheduler -z /opt/bin/kube-scheduler https://storage.googleapis.com/kubernetes-release/release/v0.18.2/bin/linux/amd64/kube-scheduler
          ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-scheduler
          ExecStart=/opt/bin/kube-scheduler --master=127.0.0.1:8080
          Restart=always
          RestartSec=10
      - name: kube-register.service
        command: start
        content: |
          [Unit]
          Description=Kubernetes Registration Service
          Documentation=https://github.com/kelseyhightower/kube-register
          Requires=kube-apiserver.service
          After=kube-apiserver.service
          Requires=fleet.service
          After=fleet.service

          [Service]
          ExecStartPre=/usr/bin/curl -L -o /opt/bin/kube-register -z /opt/bin/kube-register https://github.com/kelseyhightower/kube-register/releases/download/v0.0.3/kube-register-0.0.3-linux-amd64
          ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-register
          ExecStart=/opt/bin/kube-register \
          --metadata=role=node \
          --fleet-endpoint=unix:///var/run/fleet.sock \
          --api-endpoint=http://127.0.0.1:8080 \
          --healthz-port=10248
          Restart=always
          RestartSec=10
    update:
      group: alpha
      reboot-strategy: off
