install_command.rb 2.4 KB
Newer Older
1 2 3
module Gitlab
  module Kubernetes
    module Helm
4 5
      class InstallCommand
        include BaseCommand
6
        include ClientCommand
7

A
Amit Rathi 已提交
8
        attr_reader :name, :files, :chart, :version, :repository, :preinstall, :postinstall
9

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

21 22 23
        def generate_script
          super + [
            init_command,
24
            wait_for_tiller_command,
25
            repository_command,
26
            repository_update_command,
27 28 29
            preinstall_command,
            install_command,
            postinstall_command
30
          ].compact.join("\n")
31 32
        end

33 34 35 36
        def rbac?
          @rbac
        end

37 38
        private

39
        def repository_update_command
40
          'helm repo update' if repository
41 42
        end

C
Chris Baumbauer 已提交
43
        def install_command
44 45
          command = ['helm', 'install', chart] + install_command_flags

46
          command.shelljoin
47 48
        end

49
        def preinstall_command
C
Chris Baumbauer 已提交
50
          preinstall.join("\n") if preinstall
51 52 53
        end

        def postinstall_command
C
Chris Baumbauer 已提交
54
          postinstall.join("\n") if postinstall
55 56 57 58 59 60
        end

        def install_command_flags
          name_flag      = ['--name', name]
          namespace_flag = ['--namespace', Gitlab::Kubernetes::Helm::NAMESPACE]
          value_flag     = ['-f', "/data/helm/#{name}/config/values.yaml"]
61

62 63 64
          name_flag +
            optional_tls_flags +
            optional_version_flag +
65
            rbac_create_flag +
66
            namespace_flag +
67
            value_flag
68 69
        end

70 71 72 73 74 75
        def rbac_create_flag
          if rbac?
            %w[--set rbac.create=true,rbac.enabled=true]
          else
            %w[--set rbac.create=false,rbac.enabled=false]
          end
76
        end
77 78

        def optional_version_flag
79 80 81
          return [] unless version

          ['--version', version]
82
        end
83 84

        def optional_tls_flags
85
          return [] unless files.key?(:'ca.pem')
86

87 88 89 90 91 92
          [
            '--tls',
            '--tls-ca-cert', "#{files_dir}/ca.pem",
            '--tls-cert', "#{files_dir}/cert.pem",
            '--tls-key', "#{files_dir}/key.pem"
          ]
93
        end
94 95 96 97
      end
    end
  end
end