{
  "kind": "Template",
  "apiVersion": "v1",
  "metadata": {
    "name": "etcd",
    "creationTimestamp": null,
    "annotations": {
      "openshift.io/display-name": "etcd",
      "description": "An example of a clustered etcd key value store. For more information about using this template, including OpenShift considerations, see https://github.com/openshift/origin/blob/master/examples/etcd/README.md.",
      "iconClass": "icon-database",
      "tags": "database,etcd"
    }
  },
  "message": "The following service(s) have been created in your project: etcd, etcd-discovery.\n\nFor more information about using this template, including OpenShift considerations, see https://github.com/openshift/origin/blob/master/examples/etcd/README.md.",
  "labels": {
    "template": "etcd"
  },
  "objects": [
    {
      "kind": "ImageStream",
      "apiVersion": "v1",
      "metadata": {
        "name": "etcd",
        "creationTimestamp": null
      },
      "spec": {
        "dockerImageRepository": "${ETCD_IMAGE}",
        "tags": [
          {
            "name": "latest",
            "annotations": {
              "description": "Provides etcd v2.0.10",
              "iconClass": "icon-database",
              "tags": "database,etcd",
              "version": "2.0.10"
            }
          }
        ]
      },
      "status": {
        "dockerImageRepository": ""
      }
    },
    {
      "kind": "Service",
      "apiVersion": "v1",
      "metadata": {
        "name": "etcd-discovery",
        "creationTimestamp": null,
        "labels": {
          "name": "etcd-discovery"
        }
      },
      "spec": {
        "ports": [
          {
            "protocol": "TCP",
            "port": 2379,
            "targetPort": 2379,
            "nodePort": 0
          }
        ],
        "selector": {
          "name": "etcd-discovery"
        },
        "clusterIP": "None",
        "type": "ClusterIP",
        "sessionAffinity": "None"
      },
      "status": {
        "loadBalancer": {}
      }
    },
    {
      "kind": "Service",
      "apiVersion": "v1",
      "metadata": {
        "name": "etcd",
        "creationTimestamp": null,
        "labels": {
          "name": "etcd"
        }
      },
      "spec": {
        "ports": [
          {
            "name": "client",
            "protocol": "TCP",
            "port": 2379,
            "targetPort": 2379,
            "nodePort": 0
          },
          {
            "name": "server",
            "protocol": "TCP",
            "port": 2380,
            "targetPort": 2380,
            "nodePort": 0
          }
        ],
        "selector": {
          "name": "etcd"
        },
        "clusterIP": "None",
        "type": "ClusterIP",
        "sessionAffinity": "None"
      },
      "status": {
        "loadBalancer": {}
      }
    },
    {
      "kind": "DeploymentConfig",
      "apiVersion": "v1",
      "metadata": {
        "name": "etcd-discovery",
        "creationTimestamp": null
      },
      "spec": {
        "strategy": {
          "type": "Recreate",
          "resources": {}
        },
        "triggers": [
          {
            "type": "ConfigChange"
          }
        ],
        "replicas": 1,
        "selector": {
          "name": "etcd-discovery"
        },
        "template": {
          "metadata": {
            "creationTimestamp": null,
            "labels": {
              "name": "etcd-discovery"
            }
          },
          "spec": {
            "volumes": [
              {
                "name": "data",
                "emptyDir": {
                  "medium": ""
                }
              }
            ],
            "containers": [
              {
                "name": "discovery",
                "image": "${ETCD_IMAGE}",
                "args": [
                  "etcd-discovery.sh"
                ],
                "ports": [
                  {
                    "containerPort": 2379,
                    "protocol": "TCP"
                  }
                ],
                "volumeMounts": [
                  {
                    "name": "data",
                    "mountPath": "/var/lib/etcd"
                  }
                ],
                "resources": {},
                "terminationMessagePath": "/dev/termination-log",
                "imagePullPolicy": "IfNotPresent",
                "securityContext": {
                  "capabilities": {},
                  "privileged": false
                }
              }
            ],
            "restartPolicy": "Always",
            "dnsPolicy": "ClusterFirst"
          }
        }
      },
      "status": {}
    },
    {
      "kind": "DeploymentConfig",
      "apiVersion": "v1",
      "metadata": {
        "name": "etcd",
        "creationTimestamp": null
      },
      "spec": {
        "strategy": {
          "type": "Recreate",
          "resources": {}
        },
        "triggers": [
          {
            "type": "ConfigChange"
          }
        ],
        "replicas": 3,
        "selector": {
          "name": "etcd"
        },
        "template": {
          "metadata": {
            "creationTimestamp": null,
            "labels": {
              "name": "etcd"
            }
          },
          "spec": {
            "volumes": [
              {
                "name": "data",
                "emptyDir": {
                  "medium": ""
                }
              }
            ],
            "containers": [
              {
                "name": "member",
                "image": "${ETCD_IMAGE}",
                "ports": [
                  {
                    "containerPort": 2379,
                    "protocol": "TCP"
                  },
                  {
                    "containerPort": 2380,
                    "protocol": "TCP"
                  }
                ],
                "env": [
                  {
                    "name": "ETCD_NUM_MEMBERS",
                    "value": "${ETCD_NUM_MEMBERS}"
                  },
                  {
                    "name": "ETCD_INITIAL_CLUSTER_STATE",
                    "value": "new"
                  },
                  {
                    "name": "ETCD_INITIAL_CLUSTER_TOKEN",
                    "value": "${ETCD_CLUSTER_TOKEN}"
                  },
                  {
                    "name": "ETCD_DISCOVERY_TOKEN",
                    "value": "${ETCD_DISCOVERY_TOKEN}"
                  },
                  {
                    "name": "ETCD_DISCOVERY_URL",
                    "value": "${ETCD_DISCOVERY_URL}"
                  },
                  {
                    "name": "ETCDCTL_PEERS",
                    "value": "http://etcd:2379"
                  }
                ],
                "volumeMounts": [
                  {
                    "name": "data",
                    "mountPath": "/var/lib/etcd"
                  }
                ],
                "resources": {},
                "terminationMessagePath": "/dev/termination-log",
                "imagePullPolicy": "IfNotPresent",
                "securityContext": {
                  "capabilities": {},
                  "privileged": false
                }
              }
            ],
            "restartPolicy": "Always",
            "dnsPolicy": "ClusterFirst"
          }
        }
      },
      "status": {}
    }
  ],
  "parameters": [
    {
      "name": "ETCD_IMAGE",
      "description": "The name of etcd Docker image to use",
      "value": "openshift/etcd-20-centos7"
    },
    {
      "name": "ETCD_NUM_MEMBERS",
      "description": "Maximum number of members to launch (have to match with # of replicas)",
      "value": "3"
    },
    {
      "name": "ETCD_DISCOVERY_URL",
      "description": "Discovery URL connects etcd instances together by storing a list of peer addresses, metadata and the initial size of the cluster under a unique address",
      "value": "http://etcd-discovery:2379"
    },
    {
      "name": "ETCD_DISCOVERY_TOKEN",
      "description": "A unique token used by the discovery service",
      "generate": "expression",
      "from": "[a-z0-9]{40}"
    },
    {
      "name": "ETCD_CLUSTER_TOKEN",
      "description": "A token etcd use to generate unique cluster ID and member ID",
      "generate": "expression",
      "from": "etcd-cluster-[a-z0-9]{5}"
    }
  ]
}