fix a number of bugs

This commit is contained in:
a@a.ru 2019-03-20 19:20:47 +03:00
parent 5290e2c5f2
commit d1a4ea6e9f
5 changed files with 91 additions and 56 deletions

2
ansible.cfg Normal file
View File

@ -0,0 +1,2 @@
[defaults]
force_handlers = True

View File

@ -1,3 +1,12 @@
- name: Save config file
hosts: localhost
roles:
- { role: s3, when: "backend|bool == true" }
environment:
AWS_ACCESS_KEY_ID: "{{ aws_access_key }}"
AWS_SECRET_ACCESS_KEY: "{{ aws_secret_key }}"
AWS_REGION: "{{ region }}"
- name: Deploy BlockScout - name: Deploy BlockScout
hosts: localhost hosts: localhost
tasks: tasks:
@ -8,7 +17,3 @@
loop_control: loop_control:
loop_var: chain loop_var: chain
index_var: index index_var: index
environment:
AWS_ACCESS_KEY_ID: "{{ aws_access_key }}"
AWS_SECRET_ACCESS_KEY: "{{ aws_secret_key }}"
AWS_REGION: "{{ region }}"

View File

@ -1,5 +1,5 @@
resource "aws_ssm_parameter" "elixir_version" { resource "aws_ssm_parameter" "elixir_version" {
count = "${var.new_relic_license_key == "" ? 0 : length(var.chains)}" count = "${length(var.chains)}"
name = "/${var.prefix}/${element(keys(var.chains),count.index)}/elixir_version" name = "/${var.prefix}/${element(keys(var.chains),count.index)}/elixir_version"
value = "${var.elixir_version}" value = "${var.elixir_version}"
type = "String" type = "String"

View File

@ -14,6 +14,7 @@ function log() {
} }
parameters_json="{}" parameters_json="{}"
function fetch_ssm_with_token() { function fetch_ssm_with_token() {
if [ -z "$1" ]; then if [ -z "$1" ]; then
log "(fetch_ssm_with_token) Calling ssm without token" log "(fetch_ssm_with_token) Calling ssm without token"
@ -39,7 +40,7 @@ function fetch_ssm_with_token() {
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -P /tmp wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -P /tmp
yum install -y /tmp/epel-release-latest-7.noarch.rpm yum localinstall -y /tmp/epel-release-latest-7.noarch.rpm
yum update -y yum update -y
@ -132,18 +133,10 @@ EOF
log "Installing Erlang.." log "Installing Erlang.."
wget http://packages.erlang-solutions.com/site/esl/esl-erlang/FLAVOUR_1_general/esl-erlang_21.1-1~centos~7_amd64.rpm wget http://packages.erlang-solutions.com/site/esl/esl-erlang/FLAVOUR_1_general/esl-erlang_21.1-1~centos~7_amd64.rpm
yum install -y wxGTK-devel unixODBC-devel >"$LOG" yum localinstall -y wxGTK-devel unixODBC-devel >"$LOG"
yum install -y esl-erlang_21.1-1~centos~7_amd64.rpm >"$LOG" yum localinstall -y esl-erlang_21.1-1~centos~7_amd64.rpm >"$LOG"
ELIXIR_VERSION="$(get_param 'elixir_version')"
log "Installing Elixir to /opt/elixir.."
mkdir -p /opt/elixir
wget https://github.com/elixir-lang/elixir/releases/download/${ELIXIR_VERSION}/Precompiled.zip >"$LOG"
unzip Precompiled.zip -d /opt/elixir >"$LOG"
log "Elixir installed successfully!"
log "Fetching configuration from Parameter Store..." log "Fetching configuration from Parameter Store..."
#parameters_json=$(aws ssm get-parameters-by-path --region "$REGION" --path "/$PREFIX/$CHAIN")
fetch_ssm_with_token fetch_ssm_with_token
params=$(echo "$parameters_json" | jq '.Parameters[].Name' --raw-output) params=$(echo "$parameters_json" | jq '.Parameters[].Name' --raw-output)
log "$(printf 'Found the following parameters:\n\n%s\n' "$params")" log "$(printf 'Found the following parameters:\n\n%s\n' "$params")"
@ -154,6 +147,13 @@ function get_param() {
--raw-output --raw-output
} }
ELIXIR_VERSION="$(get_param 'elixir_version')"
log "Installing Elixir to /opt/elixir.."
mkdir -p /opt/elixir
wget https://github.com/elixir-lang/elixir/releases/download/${ELIXIR_VERSION}/Precompiled.zip >"$LOG"
unzip Precompiled.zip -d /opt/elixir >"$LOG"
log "Elixir installed successfully!"
DB_USER="$(get_param 'db_username')" DB_USER="$(get_param 'db_username')"
DB_PASS="$(get_param 'db_password')" DB_PASS="$(get_param 'db_password')"
DB_HOST="$(get_param 'db_host')" DB_HOST="$(get_param 'db_host')"

View File

@ -6,6 +6,12 @@
force: true force: true
when: skip_fetch | bool != true when: skip_fetch | bool != true
- name: Git clean
command: "git clean -fdx"
args:
chdir: "blockscout-{{ chain }}"
when: skip_fetch | bool != true
- name: Merge branches - name: Merge branches
command: "git merge {{ chain_merge_commit[chain] }}" command: "git merge {{ chain_merge_commit[chain] }}"
args: args:
@ -31,12 +37,25 @@
state: absent state: absent
- name: Compile BlockScout - name: Compile BlockScout
command: mix do deps.get, local.rebar --force, deps.compile, compile, ecto.drop, ecto.create, ecto.migrate command: "mix do {{ item }}"
args: args:
chdir: "blockscout-{{ chain }}" chdir: "blockscout-{{ chain }}"
with_items:
- deps.get
- local.rebar --force
- deps.compile
- compile
- ecto.drop
- ecto.create
- ecto.migrate
- name: Install Node modules at apps/block_scout_web/assets - name: Install Node modules at apps/block_scout_web/assets
command: npm install && node_modules/webpack/bin/webpack.js --mode production command: npm install
args:
chdir: "blockscout-{{ chain }}/apps/block_scout_web/assets"
- name: Execute webpack.js at apps/block_scout_web/assets/node_modules/webpack/bin
command: node_modules/webpack/bin/webpack.js --mode production
args: args:
chdir: "blockscout-{{ chain }}/apps/block_scout_web/assets" chdir: "blockscout-{{ chain }}/apps/block_scout_web/assets"
@ -51,30 +70,33 @@
chdir: "blockscout-{{ chain }}/apps/block_scout_web" chdir: "blockscout-{{ chain }}/apps/block_scout_web"
- name: Start server - name: Start server
command: mix phx.server & block:
environment: - name: Start server
- BLOCKSCOUT_VERSION: "{{ chain_blockscout_version[chain].value }}" command: "mix phx.server"
- COIN: "{{ chain_coin[chain].value }}" environment: "{{ chain_env }}"
- ETHEREUM_JSONRPC_HTTP_URL: "{{ chains[chain].value }}" ignore_errors: true
- ETHEREUM_JSONRPC_TRACE_URL: "{{ chain_trace_endpoint[chain].value }}" args:
- ETHEREUM_JSONRPC_WS_URL: "{{ chain_ws_endpoint[chain].value }}" chdir: "blockscout-{{ chain }}"
- ETHEREUM_JSONRPC_VARIANT: "{{ chain_jsonrpc_variant[chain].value }}" vars:
- HEART_BEAT_TIMEOUT: "{{ chain_heart_beat_timeout[chain].value }}" chain_env: "{{ chain_custom_environment_chain | combine({'BLOCKSCOUT_VERSION': chain_blockscout_version[chain], 'COIN': chain_coin[chain], 'ETHEREUM_JSONRPC_HTTP_URL': chains[chain], 'ETHEREUM_JSONRPC_TRACE_URL': chain_trace_endpoint[chain], 'ETHEREUM_JSONRPC_WS_URL': chain_ws_endpoint[chain], 'ETHEREUM_JSONRPC_VARIANT': chain_jsonrpc_variant[chain], 'HEART_BEAT_TIMEOUT': chain_heart_beat_timeout[chain], 'HEART_COMMAND': chain_heart_command[chain], 'LOGO': chain_logo[chain], 'NETWORK': chain_network[chain], 'SUBNETWORK': chain_subnetwork[chain], 'NETWORK_ICON': chain_network_icon[chain]}) }}"
- HEART_COMMAND: "{{ chain_heart_command[chain].value }}" chain_custom_environment_chain: "{{ chain_cec[chain] | default({}) }}"
- LOGO: "{{ chain_logo[chain].value }}" chain_cec: "{{ chain_custom_environment | default ({}) }}"
- NETWORK: "{{ chain_network[chain].value }}" async: 10000
- SUBNETWORK: "{{ chain_subnetwork[chain].value }}" poll: 0
- NETWORK_ICON: "{{ chain_network_icon[chain].value }}" - name: User prompt
- "{{ chain_custom_environment_chain }}" pause:
args: prompt: "Please, open your browser and open 4000 port at the machine were Ansible is currently run. BlockScout should appear. Ensure that there is no visual artifacts and then press Enter to continue. Press Ctrl+C and then A if you face any issues to cancel the deployment."
chdir: "blockscout-{{ chain }}" rescue:
vars: - name: 'Stop execution'
chain_custom_environment_chain: "{{ chain_cec[chain] | default('') }}" fail:
chain_cec: "{{ chain_custom_environment | default('') }}" msg: "Execution aborted."
always:
- name: User prompt - name: kill server
pause: command: "pkill -e {{ item }}"
prompt: "Please, open your browser and open 4000 port at the machine were Ansible is currently run. BlockScout should appear. Ensure that there is no visual artifacts and then press Enter to continue. Press Ctrl+C if you face any issues to cancel the deployment." with_items:
- beam.smp
- node
failed_when: false
- name: Build static assets - name: Build static assets
command: mix phx.digest command: mix phx.digest
@ -86,15 +108,19 @@
state: absent state: absent
path: "{{ item }}" path: "{{ item }}"
with_items: with_items:
- "blockscout-{{ chain }}/build/" - "blockscout-{{ chain }}/_build/"
- "blockscout-{{ chain }}/deps/" - "blockscout-{{ chain }}/deps/"
- "blockscout-{{ chain }}/apps/block_scout_web/assets/node_modules/" - "blockscout-{{ chain }}/apps/block_scout_web/assets/node_modules/"
- "blockscout-{{ chain }}/apps/explorer/node_modules/" - "blockscout-{{ chain }}/apps/explorer/node_modules/"
- "blockscout-{{ chain }}/logs/dev/" - "blockscout-{{ chain }}/logs/dev/"
- name: Upload Blockscout to S3 - name: Upload Blockscout to S3
command: "aws deploy push --application-name={{ application_name }} --s3-location {{ s3_connection_string }} --source=blockscout-{{ chain }}" command: "aws deploy push --application-name={{ prefix }}-explorer --s3-location s3://{{ prefix }}-explorer-codedeploy-releases/blockscout-{{ chain }}.zip --source=blockscout-{{ chain }}"
register: push_output register: push_output
environment:
AWS_ACCESS_KEY_ID: "{{ aws_access_key }}"
AWS_SECRET_ACCESS_KEY: "{{ aws_secret_key }}"
AWS_REGION: "{{ region }}"
- name: User prompt - name: User prompt
pause: pause:
@ -107,9 +133,7 @@
value: "{{ item.value }}" value: "{{ item.value }}"
with_items: with_items:
- { name: elixir_version, value: "{{ elixir_version }}" } - { name: elixir_version, value: "{{ elixir_version }}" }
- { name: block_transformet, value: "{{ chain_block_transformer[chain] }}" } - { name: block_transformer, value: "{{ chain_block_transformer[chain] }}" }
- { name: new_relic_app_name, value: "{{ chain_new_relic_app_name[chain] }}" }
- { name: new_relic_license_key, value: "{{ chain_new_relic_license_key[chain] }}" }
- { name: pool_size, value: "{{ pool_size }}" } - { name: pool_size, value: "{{ pool_size }}" }
- { name: ecto_use_ssl, value: "{{ use_ssl }}" } - { name: ecto_use_ssl, value: "{{ use_ssl }}" }
- { name: ethereum_jsonrpc_variant, value: "{{ chain_jsonrpc_variant[chain] }}" } - { name: ethereum_jsonrpc_variant, value: "{{ chain_jsonrpc_variant[chain] }}" }
@ -123,19 +147,23 @@
- { name: network_path, value: "{{ chain_network_path[chain] }}" } - { name: network_path, value: "{{ chain_network_path[chain] }}" }
- { name: network_icon, value: "{{ chain_network_icon[chain] }}" } - { name: network_icon, value: "{{ chain_network_icon[chain] }}" }
- { name: graphiql_transaction, value: "{{ chain_graphiql_transaction[chain] }}" } - { name: graphiql_transaction, value: "{{ chain_graphiql_transaction[chain] }}" }
- { name: exq_blocks_concurrency, value: 1 }
- { name: exq_concurrency, value: 1 }
- { name: exq_internal_transactions_concurrency, value: 1 }
- { name: exq_receipts_concurrency, value: 1 }
- { name: exq_transactions_concurrency, value: 1 }
- { name: secret_key_base, value: "{{ secret_key_base }}" } - { name: secret_key_base, value: "{{ secret_key_base }}" }
- { name: alb_ssl_policy, value: "{{ alb_ssl_policy }}" } - { name: alb_ssl_policy, value: "{{ alb_ssl_policy }}" }
- { name: alb_certificate_arn, value: "{{ alb_certificate_arn }}" } - { name: alb_certificate_arn, value: "{{ alb_certificate_arn }}" }
- { name: heart_beat_timeout, value: "{{ chain_heart_beat_timeout[chain] }}" } - { name: heart_beat_timeout, value: "{{ chain_heart_beat_timeout[chain] }}" }
- { name: heart_command, value: "{{ chain_heart_command[chain] }}" } - { name: heart_command, value: "{{ chain_heart_command[chain] }}" }
- { name: blockscout_version, value: "{{ chain_blockscout_version[chain] }}" } - { name: blockscout_version, value: "{{ chain_blockscout_version[chain] }}" }
# DB info will not be refreshed environment:
AWS_ACCESS_KEY_ID: "{{ aws_access_key }}"
AWS_SECRET_ACCESS_KEY: "{{ aws_secret_key }}"
AWS_REGION: "{{ region }}"
when: user_answer.user_input|bool == true
# DB and New Relic info will not be refreshed
- name: Deploy Blockscout - name: Deploy Blockscout
command: "{{ push_output.stdout | regex_replace('^--deployment-group-name <deployment-group-name> --deployment-config-name <deployment-config-name> --description <description>$', '') }} --deployment-group-name {{ prefix }}-explorer-dg{{ index }} --deployment-config-name CodeDeployDefault.OneAtATime --description '{{ chain_blockscout_version[chain] }}'" command: "{{ push_output.stdout_lines[1] }} --deployment-group-name {{ prefix }}-explorer-dg{{ index }} --deployment-config-name CodeDeployDefault.OneAtATime --description '{{ chain_blockscout_version[chain] }}'"
when: user_answer.user_input|bool == true when: user_answer.user_input|bool == true
environment:
AWS_ACCESS_KEY_ID: "{{ aws_access_key }}"
AWS_SECRET_ACCESS_KEY: "{{ aws_secret_key }}"
AWS_REGION: "{{ region }}"