#!/bin/sh -e
#
# 2016 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#


os=$(cat "$__global/explorer/os")
state=$(cat "$__object/parameter/state")
version=$(cat "$__object/parameter/version")

case "$os" in
    centos)
        # shellcheck source=/dev/null
        if (. "$__global/explorer/os_release" && [ "${VERSION_ID}" = "7" ]); then
          __yum_repo docker-ce-stable \
            --name 'Docker CE Stable' \
            --baseurl "https://download.docker.com/linux/centos/7/\$basearch/stable" \
            --enabled \
            --gpgcheck 1 \
            --gpgkey 'https://download.docker.com/linux/centos/gpg' \
            --state "${state}"
          if [ "$version" != "latest" ]; then
            require="__yum_repo/docker-ce-stable" __package docker-ce --version "${version}" --state "${state}"
          else
            require="__yum_repo/docker-ce-stable" __package docker-ce --state "${state}"
          fi
        else
          echo "CentOS version 7 is required!" >&2
          exit 1
        fi
    ;;
    ubuntu|debian)
      if [ "${state}" = "present" ]; then
        __package apt-transport-https
        __package ca-certificates
        __package gnupg2
      fi
      __apt_key_uri docker --name "Docker Release (CE deb) <docker@docker.com>" \
        --uri "https://download.docker.com/linux/${os}/gpg" --state "${state}"

      require="__apt_key_uri/docker" __apt_source docker \
         --uri "https://download.docker.com/linux/${os}" \
         --distribution "$(cat "$__global/explorer/lsb_codename")" \
         --state "${state}" \
         --component "stable"
      if [ "$version" != "latest" ]; then
        require="__apt_source/docker" __package docker-ce --version "${version}" --state "${state}"
      else
        require="__apt_source/docker" __package docker-ce --state "${state}"
      fi
   ;;
   devuan)
      os_version="$(cat "$__global/explorer/os_version")"

      case "$os_version" in
        ascii)
          distribution="stretch"
        ;;
        jessie)
          distribution="jessie"
        ;;
        *)
          echo "Your devuan release ($os_version) is currently not supported by this type (${__type##*/}).">&2
          echo "Please contribute an implementation for it if you can." >&2
          exit 1
        ;;
      esac

      if [ "${state}" = "present" ]; then
        __package apt-transport-https
        __package ca-certificates
        __package gnupg2
      fi
      __apt_key_uri docker --name "Docker Release (CE deb) <docker@docker.com>" \
        --uri "https://download.docker.com/linux/${os}/gpg" --state "${state}"

      require="__apt_key_uri/docker" __apt_source docker \
         --uri "https://download.docker.com/linux/${os}" \
         --distribution "${distribution}" \
         --state "${state}" \
         --component "stable"
      if [ "$version" != "latest" ]; then
        require="__apt_source/docker" __package docker-ce --version "${version}" --state "${state}"
      else
        require="__apt_source/docker" __package docker-ce --state "${state}"
      fi

   ;;
   *)
      echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
      echo "Please contribute an implementation for it if you can." >&2
      exit 1
   ;;
esac
