Class: Kuby::Plugins::RailsApp::MySQL

Inherits:
Kuby::Plugin show all
Defined in:
lib/kuby/plugins/rails_app/mysql.rb

Constant Summary collapse

ROLE =
'web'.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Kuby::Plugin

#after_deploy, #after_setup, #before_deploy, #before_setup, #configure, #dockerfiles, #setup

Constructor Details

#initialize(environment, configs) ⇒ MySQL

Returns a new instance of MySQL.



14
15
16
17
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 14

def initialize(environment, configs)
  @environment = environment
  @configs = configs
end

Instance Attribute Details

#configsObject (readonly)

Returns the value of attribute configs.



12
13
14
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 12

def configs
  @configs
end

#environmentObject (readonly)

Returns the value of attribute environment.



12
13
14
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 12

def environment
  @environment
end

Instance Method Details

#after_configurationObject



31
32
33
34
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 31

def after_configuration
  environment.docker.package_phase.add(:mysql_dev)
  environment.docker.package_phase.add(:mysql_client)
end

#base_nameObject



132
133
134
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 132

def base_name
  @base_name ||= "#{kubernetes.selector_app}-#{ROLE}"
end

#database(&block) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 94

def database(&block)
  context = self

  @database ||= Kuby::KubeDB.my_sql do
    api_version 'kubedb.com/v1alpha1'

     do
      name "#{context.base_name}-mysql"
      namespace context.kubernetes.namespace..name
    end

    spec do
      database_secret do
        secret_name context.secret..name
      end

      version '5.7-v2'
      storage_type 'Durable'

      storage do
        storage_class_name context.kubernetes.provider.storage_class_name
        access_modes ['ReadWriteOnce']

        resources do
          requests do
            add :storage, '10Gi'
          end
        end
      end

      termination_policy 'DoNotTerminate'
    end
  end

  @database.instance_eval(&block) if block
  @database
end

#hostObject



36
37
38
39
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 36

def host
  # host is the same as the name thanks to k8s DNS
  @host ||= database..name
end

#kubernetesObject



136
137
138
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 136

def kubernetes
  environment.kubernetes
end

#nameObject



23
24
25
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 23

def name
  :mysql
end

#password(password) ⇒ Object



56
57
58
59
60
61
62
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 56

def password(password)
  secret do
    data do
      set :password, password
    end
  end
end

#requires_credentials?Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 19

def requires_credentials?
  true
end

#resourcesObject



27
28
29
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 27

def resources
  @resources ||= [secret, database]
end

#rewritten_configsObject



41
42
43
44
45
46
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 41

def rewritten_configs
  # deep dup
  @rewritten_configs ||= Marshal.load(Marshal.dump(configs)).tap do |new_configs|
    new_configs[environment.name]['host'] = host
  end
end

#secret(&block) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 78

def secret(&block)
  context = self

  @secret ||= KubeDSL.secret do
     do
      name "#{context.base_name}-mysql-secret"
      namespace context.kubernetes.namespace..name
    end

    type 'Opaque'
  end

  @secret.instance_eval(&block) if block
  @secret
end

#storage(amount) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 64

def storage(amount)
  database do
    spec do
      storage do
        resources do
          requests do
            set :storage, amount
          end
        end
      end
    end
  end
end

#user(user) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/kuby/plugins/rails_app/mysql.rb', line 48

def user(user)
  secret do
    data do
      set :user, user
    end
  end
end