#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

{% from 'shared_jinja.yml' import alpine_tools_config with context %}

---

resource_types:
- name: gce-instances
  type: docker-image
  source:
    username: ((!docker-username))
    password: ((!docker-password))
    repository: gcr.io/((gcp-project))/((!docker-image-prefix))gce-instances-resource
    tag: latest

resources:
- name: four-times-a-day
  type: time
  source:
    interval: 6h
- name: geode-benchmarks
  type: git
  source:
    branch: develop
    depth: 1
    uri: https://github.com/apache/geode-benchmarks.git

- name: stoppable-instance
  type: gce-instances
  source:
    filter: 'labels.time-to-live:* AND labels.time-to-live<$(date +%s) AND status:RUNNING'

- name: deletable-instance
  type: gce-instances
  source:
    filter: 'labels.time-to-live:* AND labels.time-to-live<$(($(date +%s) - 86400)) AND status:TERMINATED'

jobs:
- name: stop-instance
  plan:
  - get: stoppable-instance
    version: every
    trigger: true
  - task: stop-instances
    config:
      platform: linux
      image_resource:
        type: docker-image
        source:
          repository: google/cloud-sdk
          tag: alpine
      inputs:
      - name: stoppable-instance
      run:
        path: /bin/sh
        args:
        - -ec
        - |
          gcloud compute instances stop $(cat stoppable-instance/selfLink) --quiet

- name: delete-instance
  plan:
  - get: deletable-instance
    version: every
    trigger: true
  - task: delete-instance
    config:
      platform: linux
      image_resource:
        type: docker-image
        source:
          repository: google/cloud-sdk
          tag: alpine
      inputs:
      - name: deletable-instance
      run:
        path: /bin/sh
        args:
        - -ec
        - |
          gcloud compute instances delete $(cat deletable-instance/selfLink) --quiet

- name: reap-benchmark-instances
  plan:
  - get: four-times-a-day
    trigger: true
  - get: geode-benchmarks
  - task: reap-benchmark-instances
    {{- alpine_tools_config()|indent(4) }}
      params:
        AWS_ACCESS_KEY_ID: ((benchmarks-access-key-id))
        AWS_SECRET_ACCESS_KEY: ((benchmarks-secret-access-key))
        AWS_DEFAULT_REGION: us-west-2
        AWS_REGION: us-west-2
      inputs:
      - name: geode-benchmarks
      run:
        path: geode-benchmarks/infrastructure/scripts/aws/expire_clusters.sh
    timeout: 4h
