OSDN Git Service

refactoring.
[metasearch/grid-chef-repo.git] / cookbooks / screwdriver / recipes / docker-compose.rb
index 29c85aa..1591b94 100644 (file)
@@ -2,7 +2,7 @@
 # Cookbook Name:: screwdriver
 # Recipe:: docker-compose
 #
-# Copyright 2017, whitestar
+# Copyright 2017-2018, whitestar
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -26,18 +26,6 @@ doc_url = 'https://hub.docker.com/r/screwdrivercd/screwdriver/'
 #include_recipe 'platform_utils::kernel_user_namespace'
 include_recipe 'docker-grid::compose'
 
-default_executor = {
-  'plugin' => 'docker',
-  'docker' => {
-    'options' => {
-      'docker' => {
-        'socketPath' => '/var/run/docker.sock',
-      },
-      'launchVersion' => 'stable',
-    },
-  },
-}
-
 app_dir = node['screwdriver']['docker-compose']['app_dir']
 bin_dir = node['screwdriver']['docker-compose']['bin_dir']
 config_dir = node['screwdriver']['docker-compose']['config_dir']
@@ -69,9 +57,8 @@ if File.exist?(api_config_file)
   api_config_local = YAML.load_file(api_config_file)
 end
 
-env_local = nil
+env_local = {}
 if File.exist?(env_file)
-  env_local = {}
   File.open(env_file) do |file|
     file.each_line do |line|
       env_local[$1] = $2 if line =~ /^([^=]*)=(.*)$/
@@ -101,6 +88,7 @@ force_override_config_srvs = node.force_override['screwdriver']['docker-compose'
 api_envs_org = config_srvs['api']['environment']
 api_envs = {}
 api_vols = config_srvs['api']['volumes'].to_a
+api_links = []
 
 api_port = '9001'  # default
 api_in_port = api_envs_org['PORT']
@@ -114,8 +102,6 @@ else
   }
 end
 
-override_api_config['executor'] = default_executor if override_api_config['executor'].empty?
-
 [
   'jwt_private_key_vault_item',
   'jwt_public_key_vault_item',
@@ -149,7 +135,7 @@ else
       jwt_private_key = api_config_local['auth']['jwtPrivateKey']
       jwt_public_key  = api_config_local['auth']['jwtPublicKey']
       log 'JWT key pair is preserved from the local config/api-local.yaml file.'
-    # if !env_local.nil? && !env_local['SECRET_JWT_PRIVATE_KEY'].nil? && !jwt_private_key_reset
+    # if !env_local['SECRET_JWT_PRIVATE_KEY'].nil? && !jwt_private_key_reset
     #   # 3. preserve it from the local .env file.
     #   # Note: Docker env file format does not support backslash escaped string yet.
     #   eval "jwt_private_key = %Q(#{env_local['SECRET_JWT_PRIVATE_KEY']})"
@@ -189,6 +175,13 @@ unless password_vault_item.empty?
   api_envs['SECRET_PASSWORD'] = '${SECRET_PASSWORD}'
 end
 
+hashing_password = nil
+# for backward compatibility
+hashing_password = env_local['SECRET_PASSWORD'] if env_local['SECRET_HASHING_PASSWORD'].nil? && !env_local['SECRET_PASSWORD'].nil?
+hashing_password_vault_item = node['screwdriver']['hashing_password_vault_item']
+hashing_password = get_vault_item_value(hashing_password_vault_item) unless hashing_password_vault_item.empty?
+api_envs['SECRET_HASHING_PASSWORD'] = '${SECRET_HASHING_PASSWORD}' unless hashing_password.nil?
+
 node['screwdriver']['api']['scms_vault_items'].each {|scm, props|
   props.each {|prop, vault_item|
     unless vault_item.empty?
@@ -222,21 +215,21 @@ end
 =end
 
 db_username = nil
-db_username = env_local['DB_USERNAME'] if !env_local.nil? && !env_local['DB_USERNAME'].nil?
+db_username = env_local['DB_USERNAME'] unless env_local['DB_USERNAME'].nil?
 db_username_vault_item = node['screwdriver']['db_username_vault_item']
 db_username = get_vault_item_value(db_username_vault_item) unless db_username_vault_item.empty?
 db_username = 'sd-admin' if db_username.nil?
 api_envs['DATASTORE_SEQUELIZE_USERNAME'] = '${DB_USERNAME}'
 
 db_password = nil
-db_password = env_local['DB_PASSWORD'] if !env_local.nil? && !env_local['DB_PASSWORD'].nil?
+db_password = env_local['DB_PASSWORD'] unless env_local['DB_PASSWORD'].nil?
 db_password_vault_item = node['screwdriver']['db_password_vault_item']
 db_password = get_vault_item_value(db_password_vault_item) unless db_password_vault_item.empty?
 db_password = SecureRandom.urlsafe_base64(32) if db_password.nil?
 api_envs['DATASTORE_SEQUELIZE_PASSWORD'] = '${DB_PASSWORD}'
 
 db_root_password = nil
-db_root_password = env_local['DB_ROOT_PASSWORD'] if !env_local.nil? && !env_local['DB_ROOT_PASSWORD'].nil?
+db_root_password = env_local['DB_ROOT_PASSWORD'] unless env_local['DB_ROOT_PASSWORD'].nil?
 db_root_password_vault_item = node['screwdriver']['db_root_password_vault_item']
 db_root_password = get_vault_item_value(db_root_password_vault_item) unless db_root_password_vault_item.empty?
 db_root_password = SecureRandom.urlsafe_base64(32) if db_root_password.nil?
@@ -247,7 +240,7 @@ when 'sqlite'
   api_vols.push("#{data_dir}:/sd-data:rw")
   api_envs['DATASTORE_SEQUELIZE_STORAGE'] = '/sd-data/storage.db'
 when 'mysql', 'postgres'
-  override_config_srvs['api']['links'] = ['db']
+  api_links.push('db')
   api_envs['DATASTORE_SEQUELIZE_HOST'] = 'db'
 end
 
@@ -289,6 +282,23 @@ if db_dialect != 'sqlite'
   end
 end
 
+# queue
+executor_queue_enabled = api_envs_org['EXECUTOR_QUEUE_ENABLED'] == 'true' ? true : false
+if executor_queue_enabled
+  queue_envs = {}
+  queue_vols = config_srvs['queue']['volumes'].to_a
+
+  api_links.push('queue')
+  api_envs['QUEUE_REDIS_HOST'] = 'queue'
+  # TODO: set up env. vars.
+  # QUEUE_REDIS_PORT
+  # QUEUE_REDIS_PASSWORD
+  # QUEUE_REDIS_TLS_ENABLED
+  # QUEUE_REDIS_DATABASE
+end
+
+override_config_srvs['api']['links'] = api_links unless api_links.empty?
+
 # ui
 #ui_envs_org = config_srvs['ui']['environment']
 ui_envs = {}
@@ -311,6 +321,7 @@ store_backend = node['screwdriver']['store']['backend']
 store_envs_org = config_srvs['store']['environment']
 store_envs = {}
 store_vols = config_srvs['store']['volumes'].to_a
+store_links = []
 
 store_port = '9002'  # default
 store_in_port = store_envs_org['PORT']
@@ -325,14 +336,14 @@ else
 end
 
 s3_access_key_id = nil
-s3_access_key_id = env_local['S3_ACCESS_KEY_ID'] if !env_local.nil? && !env_local['S3_ACCESS_KEY_ID'].nil?
+s3_access_key_id = env_local['S3_ACCESS_KEY_ID'] unless env_local['S3_ACCESS_KEY_ID'].nil?
 s3_access_key_id_vault_item = node['screwdriver']['s3_access_key_id_vault_item']
 s3_access_key_id = get_vault_item_value(s3_access_key_id_vault_item) unless s3_access_key_id_vault_item.empty?
 s3_access_key_id = SecureRandom.urlsafe_base64(16) if s3_access_key_id.nil?
 store_envs['S3_ACCESS_KEY_ID'] = '${S3_ACCESS_KEY_ID}'
 
 s3_access_key_secret = nil
-s3_access_key_secret = env_local['S3_ACCESS_KEY_SECRET'] if !env_local.nil? && !env_local['S3_ACCESS_KEY_SECRET'].nil?
+s3_access_key_secret = env_local['S3_ACCESS_KEY_SECRET'] unless env_local['S3_ACCESS_KEY_SECRET'].nil?
 s3_access_key_secret_vault_item = node['screwdriver']['s3_access_key_secret_vault_item']
 s3_access_key_secret = get_vault_item_value(s3_access_key_secret_vault_item) unless s3_access_key_secret_vault_item.empty?
 s3_access_key_secret = SecureRandom.urlsafe_base64(32) if s3_access_key_secret.nil?
@@ -340,7 +351,7 @@ store_envs['S3_ACCESS_KEY_SECRET'] = '${S3_ACCESS_KEY_SECRET}'
 
 # S3 compatible server
 if !store_backend.nil? && !store_backend.empty?
-  override_config_srvs['store']['links'] = ['screwdriver.s3']
+  store_links.push('screwdriver.s3')
   store_envs['STRATEGY'] = 's3'
   store_envs['S3_BUCKET'] = 'screwdriver'
 
@@ -381,6 +392,8 @@ if !store_backend.nil? && !store_backend.empty?
   end
 end
 
+override_config_srvs['store']['links'] = store_links unless store_links.empty?
+
 override_store_config['auth']['jwtPublicKey'] = jwt_public_key
 # Note: prevent Chef from logging JWT key attribute value. (=> template variables)
 # However Docker env file format does not support multi-line value and backslash escaped string yet.
@@ -520,24 +533,23 @@ end
   srv_vols.push("#{local_yaml_file}:/config/local.yaml:ro")
 }
 
-# merge environment hash
+# merge environment hash and reset volumes array.
 force_override_config_srvs['api']['environment'] = api_envs unless api_envs.empty?
-force_override_config_srvs['ui']['environment'] = ui_envs unless ui_envs.empty?
-force_override_config_srvs['store']['environment'] = store_envs unless store_envs.empty?
-if db_dialect != 'sqlite'
-  force_override_config_srvs['db']['environment'] = db_envs unless db_envs.empty?
-end
-if !store_backend.nil? && !store_backend.empty?
-  force_override_config_srvs['screwdriver.s3']['environment'] = s3_envs unless s3_envs.empty?
-end
-# reset vlumes array.
 override_config_srvs['api']['volumes'] = api_vols unless api_vols.empty?
+force_override_config_srvs['ui']['environment'] = ui_envs unless ui_envs.empty?
 override_config_srvs['ui']['volumes'] = ui_vols unless ui_vols.empty?
+force_override_config_srvs['store']['environment'] = store_envs unless store_envs.empty?
 override_config_srvs['store']['volumes'] = store_vols unless store_vols.empty?
 if db_dialect != 'sqlite'
+  force_override_config_srvs['db']['environment'] = db_envs unless db_envs.empty?
   override_config_srvs['db']['volumes'] = db_vols unless db_vols.empty?
 end
+if executor_queue_enabled
+  force_override_config_srvs['queue']['environment'] = queue_envs unless queue_envs.empty?
+  override_config_srvs['queue']['volumes'] = queue_vols unless queue_vols.empty?
+end
 if !store_backend.nil? && !store_backend.empty?
+  force_override_config_srvs['screwdriver.s3']['environment'] = s3_envs unless s3_envs.empty?
   override_config_srvs['screwdriver.s3']['volumes'] = s3_vols unless s3_vols.empty?
 end
 
@@ -552,6 +564,7 @@ template env_file do
     # secrets
     cookie_password: cookie_password,
     password: password,
+    hashing_password: hashing_password,
     db_username: db_username,
     db_password: db_password,
     db_root_password: db_root_password,