Commit 3ed39397 authored by Shinya Maeda's avatar Shinya Maeda
Browse files

Improve the warning message when Kube 1.16+ with legacy PostgreSQL

This commit improves the warning message
parent 115197a7
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -205,7 +205,8 @@ deprecated channel 1, but the current channel is set to 2. The default
channel changed to 2 in of GitLab 13.0.

- To continue using the channel 1 PostgreSQL database, set
  AUTO_DEVOPS_POSTGRES_CHANNEL to 1 and redeploy
  AUTO_DEVOPS_POSTGRES_CHANNEL to 1 and redeploy.
  This workaround is supported in Kubernetes v1.15 or below.

- OR, to proceed with deleting the channel 1 PostgreSQL database
  and install a fresh channel 2 database, set AUTO_DEVOPS_POSTGRES_DELETE_V1
@@ -235,6 +236,9 @@ channel 1 database.'
    old_postgres_enabled="$POSTGRES_ENABLED"
  fi

  if [[ "$old_postgres_enabled" == "true" ]]; then
    result=$(validate-kubernetes-version "$(kubectl version --output=json)" "<" "1.16")
  fi
  ${BIN_DIR}/validate-chart-version "$(helm list --output json)" "chart" "$name"

  local database_url
@@ -500,6 +504,10 @@ function deploy_name() {
  echo $name
}

function get_kubernetes_version() {
  kubectl version
}

# shellcheck disable=SC2086 # double quote to prevent globbing
# shellcheck disable=SC2153 # incorrectly thinks replicas vs REPLICAS is a misspelling
function get_replicas() {
+71 −0
Original line number Diff line number Diff line
require 'yaml'
require 'json'

module Kubectl
  # This class represents auto-deploy-app chart managed by GitLab.
  class Version
    attr_reader :major, :minor, :patch

    GITLAB_MANAGED_CHART_NAME = 'auto-deploy-app'.freeze

    class << self
      # Load a chart from `helm list` output
      #
      # @param [String] data                    JSON formatted `helm list` output
      # @param [String] release_name            The release created by a chart in question
      def load_from_helm_ls(data, release_name)
        # In Helm 2, `helm ls --output json` returns an empty string when there are no releases
        return if data.empty?

        release = JSON.parse(data)['Releases'].find { |r| r['Name'] == release_name }

        return if release.nil?

        name, major, minor, patch = release['Chart'].scan(/\A(.+)-(\d+)\.(\d+)\.(\d+)/).first

        return unless gitlab_managed_chart?(name, major, minor, patch)

        self.new(major, minor, patch)
      end

      # Load a chart from Chart.yaml
      #
      # @param [String] chart_dir                The path to the chart directory
      def load_from_chart_yml(chart_dir)
        chart_hash = YAML.load_file(File.join(chart_dir, 'Chart.yaml'))

        name = chart_hash['name']
        major, minor, patch = chart_hash['version'].scan(/\A(\d+)\.(\d+)\.(\d)+/).first

        return unless gitlab_managed_chart?(name, major, minor, patch)

        self.new(major, minor, patch)
      end

      def gitlab_managed_chart?(name, major, minor, patch)
        name == GITLAB_MANAGED_CHART_NAME && major && minor && patch
      end
    end

    def initialize(major, minor, patch)
      @major = major.to_i
      @minor = minor.to_i
      @patch = patch.to_i
    end

    def to_s
      "v#{major}.#{minor}.#{patch}"
    end

    def compatible?(previous_chart)
      # v0 and v1 charts are compatible
      return true if major == 1 && previous_chart.major == 0

      major == previous_chart.major
    end

    def allowed_to_force_deploy?
      ENV["AUTO_DEVOPS_FORCE_DEPLOY_V#{major}"]
    end
  end
end
+18 −0
Original line number Diff line number Diff line
#!/usr/bin/ruby

require_relative 'helpers/kubectl/version'

kubectl_version_json = ARGV[0]
operator = ARGV[1]
target_version = ARGV[2]

puts "Validating kubernetes version is ${operator} ${target_version}..."

print "Fetching the previously deployed chart version..."
version = Kubectl::Version.load_from_json(kubectl_version_json)

if version
  print "true"
else
  print "false"
end