From e07d05cc0f206cfbcbc10c05dee31e05552414dc Mon Sep 17 00:00:00 2001 From: "a@a.ru" Date: Wed, 17 Apr 2019 23:55:47 +0300 Subject: [PATCH] Make placement groups optional --- group_vars/all.yml.example | 2 +- group_vars/infrastructure.yml.example | 3 + roles/check/tasks/main.yml | 2 +- roles/main_infra/files/hosts.tf | 24 +------- roles/main_infra/files/variables.tf | 56 ++----------------- roles/main_infra/tasks/main.yml | 14 ++--- roles/main_infra/tasks/parameter_store.yml | 2 +- .../main_infra/templates/terraform.tfvars.j2 | 2 +- 8 files changed, 23 insertions(+), 82 deletions(-) diff --git a/group_vars/all.yml.example b/group_vars/all.yml.example index f5eb56d..933a4f2 100644 --- a/group_vars/all.yml.example +++ b/group_vars/all.yml.example @@ -31,7 +31,7 @@ chain_custom_environment: ETHEREUM_JSONRPC_TRACE_URL: "http://localhost:8545" # Network RPC endpoint in trace mode. Can be the same as the previous variable ETHEREUM_JSONRPC_WS_URL: "ws://localhost:8546" # Network RPC endpoint in websocket mode NETWORK_PATH: "/poa/core" # relative URL path, for example: blockscout.com/$NETWORK_PATH - SECRET_KEY_BASE: "TPGMvGK0iIwlXBQuQDA5KRqk77VETbEBlG4gAWeb93TvBsYAjvoAvdODMd6ZeguPwf2YTRY3n7uvxXzQP4WayQ==" # Secret key for production assets protection. Use mix phx.gen.secret to generate + SECRET_KEY_BASE: "TPGMvGK0iIwlXBQuQDA5KRqk77VETbEBlG4gAWeb93TvBsYAjvoAvdODMd6ZeguPwf2YTRY3n7uvxXzQP4WayQ==" # Secret key for production assets protection. Use `mix phx.gen.secret` or `openssl rand -base64 64 | tr -d '\n'` to generate CHECK_ORIGIN: false # Used to check the origin of requests when the origin header is present PORT: 4000 # Port the application runs on COIN: "POA" # Coin name at the Coinmarketcap, used to display current exchange rate diff --git a/group_vars/infrastructure.yml.example b/group_vars/infrastructure.yml.example index 7fa0d56..bcb9570 100644 --- a/group_vars/infrastructure.yml.example +++ b/group_vars/infrastructure.yml.example @@ -34,6 +34,9 @@ pool_size: 30 ## The following variable represents the elixir version that will be used to run BlockScout instance. Will be used to download the Elixir at the following link: https://github.com/elixir-lang/elixir/releases/download/{{ elixir_version }}/Precompiled.zip elixir_version: "v1.7.4" +## Whether or not to use the placement group for the BlockScout instances. +use_placement_group: false + # DB related variables ## This value represents the name of the DB that will be created/attached. Must be unique. Will be prefixed with `prefix` variable. diff --git a/roles/check/tasks/main.yml b/roles/check/tasks/main.yml index fe6107c..2792753 100644 --- a/roles/check/tasks/main.yml +++ b/roles/check/tasks/main.yml @@ -7,7 +7,7 @@ fail: msg: "The prefix '{{ item }}' is invalid. It must consist only of the lowercase characters a-z and digits 0-9, and must not more than 5 characters long." when: item.key|length > 5 or item.key is not match("^[a-z0-9]+$") - with_dict: "{{ chains }}" + with_dict: "{{ chain_custom_environment }}" - name: Check if terraform is installed command: which terraform diff --git a/roles/main_infra/files/hosts.tf b/roles/main_infra/files/hosts.tf index 09521c2..4c641a9 100644 --- a/roles/main_infra/files/hosts.tf +++ b/roles/main_infra/files/hosts.tf @@ -40,7 +40,7 @@ resource "aws_launch_configuration" "explorer" { } resource "aws_placement_group" "explorer" { - count = "${length(var.chains)}" + count = "${var.use_placement_group ? length(var.chains): 0}" name = "${var.prefix}-explorer-placement-group${count.index}" strategy = "cluster" } @@ -51,7 +51,7 @@ resource "aws_autoscaling_group" "explorer" { max_size = "${length(var.chains) * 4}" min_size = "${length(var.chains)}" desired_capacity = "${length(var.chains)}" - placement_group = "${aws_placement_group.explorer.*.id[count.index]}" + placement_group = "${var.use_placement_group ? aws_placement_group.explorer.*.id[count.index] : "zero"}" launch_configuration = "${aws_launch_configuration.explorer.name}" vpc_zone_identifier = ["${aws_subnet.default.id}"] availability_zones = ["${data.aws_availability_zones.available.names}"] @@ -69,25 +69,7 @@ resource "aws_autoscaling_group" "explorer" { ] depends_on = [ - "aws_ssm_parameter.new_relic_app_name", - "aws_ssm_parameter.new_relic_license_key", - "aws_ssm_parameter.pool_size", - "aws_ssm_parameter.ecto_use_ssl", - "aws_ssm_parameter.exq_blocks_concurrency", - "aws_ssm_parameter.exq_concurrency", - "aws_ssm_parameter.exq_internal_transactions_concurrency", - "aws_ssm_parameter.exq_receipts_concurrency", - "aws_ssm_parameter.exq_transactions_concurrency", - "aws_ssm_parameter.secret_key_base", - "aws_ssm_parameter.port", - "aws_ssm_parameter.db_username", - "aws_ssm_parameter.db_password", - "aws_ssm_parameter.db_host", - "aws_ssm_parameter.db_port", - "aws_ssm_parameter.ethereum_url", - "aws_ssm_parameter.trace_url", - "aws_ssm_parameter.ws_url", - "aws_ssm_parameter.network_path", + "aws_ssm_parameter.db_host" ] lifecycle { diff --git a/roles/main_infra/files/variables.tf b/roles/main_infra/files/variables.tf index 2ead479..f79158f 100644 --- a/roles/main_infra/files/variables.tf +++ b/roles/main_infra/files/variables.tf @@ -9,44 +9,14 @@ variable "instance_type" {} variable "root_block_size" {} variable "pool_size" {} variable "elixir_version" {} - +variable "use_placement_group" {} variable "key_content" { default = "" } -variable "chain_jsonrpc_variant" { - default = {} -} variable "chains" { default = {} } -variable "chain_trace_endpoint" { - default = {} -} -variable "chain_ws_endpoint" { - default = {} -} -variable "chain_logo" { - default = {} -} -variable "chain_coin" { - default = {} -} -variable "chain_network" { - default = {} -} -variable "chain_subnetwork" { - default = {} -} -variable "chain_network_path" { - default = {} -} -variable "chain_network_icon" { - default = {} -} -variable "chain_graphiql_transaction" { - default = {} -} variable "chain_db_id" { default = {} @@ -84,25 +54,11 @@ variable "chain_db_version" { default = {} } -variable "new_relic_app_name" {} -variable "new_relic_license_key" {} -variable "secret_key_base" {} +variable "secret_key_base" { +default = {} +} variable "alb_ssl_policy" {} variable "alb_certificate_arn" {} -variable "use_ssl" {} - -variable "chain_block_transformer" { - default = {} -} - -variable "chain_heart_beat_timeout" { - default = {} -} - -variable "chain_heart_command" { - default = {} -} - -variable "chain_blockscout_version" { - default = {} +variable "use_ssl" { +default = {} } diff --git a/roles/main_infra/tasks/main.yml b/roles/main_infra/tasks/main.yml index 8ded56c..6beab59 100644 --- a/roles/main_infra/tasks/main.yml +++ b/roles/main_infra/tasks/main.yml @@ -55,6 +55,13 @@ prompt: "Are you absolutely sure you want to execute the deployment plan shown above? [False]" register: user_answer +- name: Insert vars into parameter store + include: parameter_store.yml + loop: "{{ chain_custom_environment.keys() }}" + loop_control: + loop_var: chain + index_var: index + - name: Terraform provisioning shell: "echo yes | {{ terraform_location }} apply" args: @@ -75,13 +82,6 @@ chdir: "roles/main_infra/files" when: user_answer.user_input|bool == True -- name: Use role in loop - include: parameter_store.yml - loop: "{{ chain_custom_environment.keys() }}" - loop_control: - loop_var: chain - index_var: index - - name: Output info from Terraform debug: value: output.stdout_lines.instructions.value diff --git a/roles/main_infra/tasks/parameter_store.yml b/roles/main_infra/tasks/parameter_store.yml index 224973a..b7e2dcc 100644 --- a/roles/main_infra/tasks/parameter_store.yml +++ b/roles/main_infra/tasks/parameter_store.yml @@ -1,6 +1,6 @@ - name: Prepare variables for Parameter Store set_fact: - chain_upper_env: "{{ chain_ps_env | combine ({item.key|lower : item.value}) }}" + chain_ps_env: "{{ chain_ps_env | combine ({item.key|lower : item.value}) }}" with_dict: "{{ chain_custom_environment[chain] }}" vars: chain_ps_env: {} diff --git a/roles/main_infra/templates/terraform.tfvars.j2 b/roles/main_infra/templates/terraform.tfvars.j2 index 975043d..52e94d5 100644 --- a/roles/main_infra/templates/terraform.tfvars.j2 +++ b/roles/main_infra/templates/terraform.tfvars.j2 @@ -8,7 +8,7 @@ db_subnet_cidr = "{{ db_subnet_cidr }}" dns_zone_name = "{{ dns_zone_name }}" instance_type = "{{ instance_type }}" root_block_size = "{{ root_block_size }}" - +use_placement_group = "{{ use_placement_group }}" alb_ssl_policy = "{{ alb_ssl_policy }}" alb_certificate_arn = "{{ alb_certificate_arn }}" elixir_version = "{{ elixir_version }}"