// Simple self-contained example to demonstrate kubecfg.
// This should not necessarily be considered a model jsonnet example
// to build upon.

// This is a simple port to jsonnet of the standard guestbook example
// https://github.com/kubernetes/kubernetes/tree/master/examples/guestbook
//
// Expects to be run with ../lib in the jsonnet search path:
// ```
// export KUBECFG_JPATH=$PWD/../lib
// kubecfg update guestbook.jsonnet
// # poke at $(minikube service --url frontend), etc
// kubecfg delete guestbook.jsonnet
// ```

local example = import "example.libsonnet";

{
  frontend_deployment: example.deployment("frontend") {
    spec+: {
      replicas: 3,
      template+: {
        spec+: {
          containers: [
            example.container(
              "php-redis", "gcr.io/google-samples/gb-frontend:v4"
            ) {
              resources: {
                requests: { cpu: "100m", memory: "100Mi" },
              },
              env_: {
                GET_HOSTS_FROM: "dns",
              },
              ports: [{containerPort: 80}],
            }]}}}},

  frontend_service: example.service("frontend") {
    targetPod_: $.frontend_deployment.spec.template,
    spec+: { type: "LoadBalancer" },
  },

  redis_master_deployment: example.deployment("redis-master") {
    spec+: {
      template+: {
        spec+: {
          containers: [
            example.container(
              "master", "gcr.io/google_containers/redis:e2e"
            ) {
              resources: {
                requests: { cpu: "100m", memory: "100Mi" },
              },
              ports: [{containerPort: 6379}],
            }]}}}},

  redis_master_service: example.service("redis-master") {
    targetPod_: $.redis_master_deployment.spec.template,
  },

  redis_slave_deployment: example.deployment("redis-slave") {
    spec+: {
      replicas: 2,
      template+: {
        spec+: {
          containers: [
            example.container(
              "slave", "gcr.io/google_samples/gb-redisslave:v1"
            ) {
              resources: {
                requests: { cpu: "100m", memory: "100Mi" },
              },
              env_: {
                GET_HOSTS_FROM: "dns",
              },
              ports: [{containerPort: 6379}],
            }]}}}},

  redis_slave_service: example.service("redis-slave") {
    targetPod_: $.redis_slave_deployment.spec.template,
  },
}