#cloud-config
merge_how: dict(recurse_array)+list(append)
write_files:
  - path: /etc/kubernetes/examples/replication-controller.yaml
    owner: "root:root"
    permissions: "0644"
    content: |
      apiVersion: v1
      kind: ReplicationController
      metadata:
        name: nginx-controller
      spec:
        replicas: 2
        # selector identifies the set of pods that this
        # replication controller is responsible for managing
        selector:
          name: nginx
        # template defines the 'cookie cutter' used for creating
        # new pods when necessary
        template:
          metadata:
            labels:
              # Important: these labels need to match the selector above
              # The api server enforces this constraint.
              app: nginx
          spec:
            containers:
              - name: nginx
                image: nginx
                ports:
                  - containerPort: 80

  - path: /etc/kubernetes/examples/pod-nginx-with-label.yaml
    owner: "root:root"
    permissions: "0644"
    content: |
      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
        labels:
          app: nginx
      spec:
        containers:
        - name: nginx
          image: nginx
          ports:
          - containerPort: 80

  - path: /etc/kubernetes/examples/service.yaml
    owner: "root:root"
    permissions: "0644"
    content: |
      apiVersion: v1
      kind: Service
      metadata:
        name: nginx-service
      spec:
        ports:
        - port: 8000 # the port that this service should serve on
          # the container on each pod to connect to, can be a name
          # (e.g. 'www') or a number (e.g. 80)
          targetPort: 80
          protocol: TCP
        # just like the selector in the replication controller,
        # but this time it identifies the set of pods to load balance
        # traffic to.
        selector:
          app: nginx

  - path: /etc/kubernetes/examples/README.md
    owner: "root:root"
    permissions: "0644"
    content: |
      Kubernetes 101 (http://kubernetes.io/v1.0/docs/user-guide/walkthrough/README.html)
      ==================================================================================

      List all nodes:

          kubectl get nodes

      Replication Controllers:

          kubectl create -f /etc/kubernetes/examples/replication-controller.yaml
          kubectl get rc
          kubectl delete rc nginx-controller

      Pods:

          kubectl create -f /etc/kubernetes/examples/pod-nginx-with-label.yaml
          kubectl get pods
          curl http://$(kubectl get pod nginx -o=template -t={{.status.podIP}})

      Services:

          kubectl create -f /etc/kubernetes/examples/service.yaml
          kubectl get services

          export SERVICE_IP=$(kubectl get service nginx-service -o=template -t={{.spec.clusterIP}})
          export SERVICE_PORT=$(kubectl get service nginx-service -o=template '-t={{(index .spec.ports 0).port}}')
          curl http://${SERVICE_IP}:${SERVICE_PORT}

          kubectl delete service nginx-service

      Troubleshooting:

          kubectl get events

          kubectl describe rc nginx-controller

          kubectl describe pod nginx

          kubectl describe service nginx-service

          kubectl exec nginx env

          kubectl exec -ti nginx -- bash
