diff --git a/ansible/mainnet-support.yml b/ansible/mainnet-support.yml new file mode 100644 index 00000000..e924ff50 --- /dev/null +++ b/ansible/mainnet-support.yml @@ -0,0 +1,136 @@ +--- + +# Bootstrap + +- name: Set up swap and aws environment vars + hosts: all + gather_facts: true + become: true + pre_tasks: + - name: Check if inside AWS + ansible.builtin.uri: + url: http://169.254.169.254/latest/meta-data + timeout: 2 + register: aws_uri_check + failed_when: false + - name: Set AWS environment variable + ansible.builtin.set_fact: + is_aws_environment: '{{ aws_uri_check.status == 200 }}' + roles: + - role: aws + when: is_aws_environment + - swap + +- name: Setup VPN + hosts: vpn + become: true + roles: + - role: openvpn + when: openvpn_enabled + tags: vpn + +- name: Setup jq, Python, CWAgent and Docker + hosts: all + become: true + pre_tasks: + - name: Update apt cache and install jq + ansible.builtin.apt: + pkg: + - jq + - unzip + update_cache: true + vars: + pip_package: python3-pip + pip_install_packages: + - name: docker + version: "6.0.1" + - name: docker-compose + version: "1.29.2" + - name: requests + version: "2.31" + roles: + - geerlingguy.pip + - role: geerlingguy.docker + vars: + docker_apt_arch: "{{ 'amd64' if ansible_architecture == 'x86_64' else 'arm64' }}" + docker_install_compose: false + docker_users: + - ubuntu + - docker_options + - eternal_terminal + - cwagent + +- name: Setup logs + hosts: logs_nodes + become: true + roles: + - elastic_stack + +- name: Setup metrics + hosts: metrics + become: true + roles: + - role: metrics + +- name: Set up tenderdash on seed nodes + hosts: seed_nodes + become: true + pre_tasks: + - name: Set node variables for seed nodes + ansible.builtin.set_fact: + node: "{{ seed_nodes[inventory_hostname] }}" + mode: "seed" + tags: always + when: inventory_hostname in seed_nodes + roles: + - role: tenderdash + - role: elastic_beats + core_container_name: dashd + + +# Leaving this commented in here + +# - name: Register HP masternodes +# hosts: wallet_nodes +# become: true +# roles: +# - role: mn_init +# mnlist: "{{ hp_masternodes }}" +# funding_amount: "{{ masternode_collaterals.hpmn | int }}" + +# - name: Update inventory with HPMN protx values +# hosts: wallet_nodes +# roles: +# - role: mn_protx_config +# mnlist: "{{ hp_masternodes }}" + +- name: Set up core and platform on HP masternodes + hosts: hp_masternodes + become: true + pre_tasks: + - name: Check inventory for HP masternodes + ansible.builtin.set_fact: + node: "{{ hp_masternodes[inventory_hostname] }}" + tags: always + when: inventory_hostname in hp_masternodes + roles: + - role: dash_cli + - role: dashmate + - role: mn_status_report + - role: elastic_beats + core_container_name: core + abci_logs_path: "{{ dashmate_logs_dir }}" + +# - name: Clean up +# hosts: all +# become: true +# tasks: +# - name: Prune unused Docker images +# community.docker.docker_prune: +# containers: true +# images: true +# images_filters: +# dangling: false +# networks: true +# volumes: false +# builder_cache: true diff --git a/lib/cli/init.sh b/lib/cli/init.sh index d88db863..04fe2555 100644 --- a/lib/cli/init.sh +++ b/lib/cli/init.sh @@ -1,6 +1,12 @@ # Validate network name -networks=("regtest testnet devnet mainnet") +NETWORK_NAME=$1 +networks=("regtest" "testnet" "devnet" "mainnet" "mainnet-support") + +print_error() { + echo "$1" >&2 + exit 1 +} if grep -q "devnet-" <<< "$NETWORK_NAME"; then NETWORK="devnet" @@ -11,9 +17,11 @@ if grep -q "devnet-" <<< "$NETWORK_NAME"; then elif [[ " ${networks[@]} " =~ " ${NETWORK_NAME} " ]]; then NETWORK="$NETWORK_NAME" else - print_error "Invalid network name '$NETWORK_NAME'. Supported networks: regtest, devnet-, testnet, mainnet" + print_error "Invalid network name '$NETWORK_NAME'. Supported networks: regtest, devnet-, testnet, mainnet, mainnet-support" fi +echo "Selected network: $NETWORK" + INVENTORY_FILE="networks/$NETWORK_NAME.inventory" ANSIBLE_CONFIG_PATH="networks/$NETWORK_NAME.yml" TERRAFORM_CONFIG_PATH="networks/$NETWORK_NAME.tfvars" diff --git a/lib/configGenerator/generateAnsibleConfig.js b/lib/configGenerator/generateAnsibleConfig.js index 7c88204e..3205bd43 100644 --- a/lib/configGenerator/generateAnsibleConfig.js +++ b/lib/configGenerator/generateAnsibleConfig.js @@ -58,6 +58,11 @@ async function generateAnsibleConfig( config.main_domain = ''; config.tenderdash_chain_id = networkName; + if (network === 'mainnet-support') { + network = 'mainnet'; + support = true; + } + const { hdPrivateKey: dpnsHDPrivateKey, derivedMasterPrivateKey: dpnsDerivedMasterPK, @@ -99,6 +104,7 @@ async function generateAnsibleConfig( network = 'testnet'; } + if (!support) { // Faucet const faucetPrivateKey = new PrivateKey(undefined, network); @@ -111,11 +117,6 @@ async function generateAnsibleConfig( config.dashd_sporkaddr = sporkPrivateKey.toAddress(network).toString(); config.dashd_sporkkey = sporkPrivateKey.toWIF(); - // Elastic keys - config.elastic_password = crypto.randomBytes(32).toString('base64').slice(0, 32); - config.kibana_password = crypto.randomBytes(32).toString('base64').slice(0, 32); - config.kibana_encryptionkey = crypto.randomBytes(32).toString('base64').slice(0, 32); - // Governance proposals config.governance_proposal_count = 2; @@ -153,6 +154,12 @@ async function generateAnsibleConfig( .privateKey.toPublicKey().toString(); config.withdrawals_hd_second_public_key = withdrawalsDerivedSecondPK .privateKey.toPublicKey().toString(); +} + + // Elastic keys + config.elastic_password = crypto.randomBytes(32).toString('base64').slice(0, 32); + config.kibana_password = crypto.randomBytes(32).toString('base64').slice(0, 32); + config.kibana_encryptionkey = crypto.randomBytes(32).toString('base64').slice(0, 32); // Dashd config.dashd_debug = 0;