install_command.rb 2.2 KB
Newer Older
1 2
# frozen_string_literal: true

3 4 5
module Gitlab
  module Kubernetes
    module Helm
6 7
      class InstallCommand
        include BaseCommand
8
        include ClientCommand
9

10 11
        attr_reader :name, :files, :chart, :repository, :preinstall, :postinstall
        attr_accessor :version
12

A
Amit Rathi 已提交
13
        def initialize(name:, chart:, files:, rbac:, version: nil, repository: nil, preinstall: nil, postinstall: nil)
14 15
          @name = name
          @chart = chart
16
          @version = version
17
          @rbac = rbac
18
          @files = files
19
          @repository = repository
20 21
          @preinstall = preinstall
          @postinstall = postinstall
22 23
        end

24 25 26
        def generate_script
          super + [
            init_command,
27
            wait_for_tiller_command,
28
            repository_command,
29
            repository_update_command,
J
João Cunha 已提交
30
            preinstall,
31
            install_command,
J
João Cunha 已提交
32
            postinstall
33
          ].compact.join("\n")
34 35
        end

36 37 38 39
        def rbac?
          @rbac
        end

40 41
        # Uses `helm upgrade --install` which means we can use this for both
        # installation and uprade of applications
C
Chris Baumbauer 已提交
42
        def install_command
43 44
          command = ['helm', 'upgrade', name, chart] +
            install_flag +
45
            rollback_support_flag +
46
            reset_values_flag +
47
            tls_flags_if_remote_tiller +
48 49 50 51
            optional_version_flag +
            rbac_create_flag +
            namespace_flag +
            value_flag
52

53
          command.shelljoin
54 55
        end

56 57
        private

58 59 60
        def install_flag
          ['--install']
        end
61

62 63 64 65 66 67 68 69 70 71
        def reset_values_flag
          ['--reset-values']
        end

        def value_flag
          ['-f', "/data/helm/#{name}/config/values.yaml"]
        end

        def namespace_flag
          ['--namespace', Gitlab::Kubernetes::Helm::NAMESPACE]
72 73
        end

74 75 76 77 78 79
        def rbac_create_flag
          if rbac?
            %w[--set rbac.create=true,rbac.enabled=true]
          else
            %w[--set rbac.create=false,rbac.enabled=false]
          end
80
        end
81 82

        def optional_version_flag
83 84 85
          return [] unless version

          ['--version', version]
86
        end
87 88 89 90

        def rollback_support_flag
          ['--atomic', '--cleanup-on-fail']
        end
91 92 93 94
      end
    end
  end
end