forked from cerc-io/testnet-ops
Add result with endpoints to service-provider-setup README (#11)
Part of [Service Provider setup](https://www.notion.so/Service-provider-setup-a09e2207e1f34f3a847f7ce9713b7ac5) - Add tasks to create DNS records for daemon - Add DNS resolution check with retries for daemon URL Co-authored-by: Adw8 <adwaitgharpure@gmail.com> Reviewed-on: cerc-io/testnet-ops#11
This commit is contained in:
parent
18df60a291
commit
f597e5dfc7
@ -62,14 +62,13 @@ To get started, follow the [installation](../README.md#installation) guide to se
|
||||
# password of the user you want to setup on the target host
|
||||
password: ""
|
||||
|
||||
# path to the ssh key on your machine, eg: "/home/dev/.ssh/id_rsa.pub"
|
||||
# path to the ssh key on your machine, eg: "/home/user/.ssh/id_rsa.pub"
|
||||
path_to_ssh_key: ""
|
||||
```
|
||||
|
||||
- Execute the `setup-user.yml` Ansible playbook to create a user with passwordless sudo permissions:
|
||||
|
||||
```bash
|
||||
cd ../
|
||||
LANG=en_US.utf8 ansible-playbook setup-user.yml -i hosts.ini --extra-vars='{ "target_host": "deployment_host" }'
|
||||
```
|
||||
|
||||
@ -118,6 +117,8 @@ To get started, follow the [installation](../README.md#installation) guide to se
|
||||
authority_name: "" # eg: my-org-name
|
||||
cpu_reservation: "" # Minimum number of cpu cores to be used, eg: 2
|
||||
memory_reservation: "" # Minimum amount of memory in GB to be used, eg: 4G
|
||||
cpu_limit: "" # Maximum number of cpu cores to be used, eg: 6
|
||||
memory_limit: "" # Maximum amount of memory in GB to be used, eg: 8G
|
||||
deployer_gpg_passphrase: "" # passphrase for creating GPG key used by webapp-deployer, eg: SECRET
|
||||
```
|
||||
|
||||
@ -161,3 +162,13 @@ To get started, follow the [installation](../README.md#installation) guide to se
|
||||
```bash
|
||||
LANG=en_US.utf8 ansible-playbook service-provider-setup.yml -i hosts.ini --extra-vars='{ target_host: "deployment_host" }' --user $USER
|
||||
```
|
||||
|
||||
### Result
|
||||
|
||||
After the playbook finishes executing, the following services will be deployed (your setup should look similar to the example below):
|
||||
|
||||
- laconicd chain RPC endpoint: http://lcn-daemon.laconic.com:26657
|
||||
- laconic console: http://lcn-daemon.laconic.com:8080/registry
|
||||
- laconicd GQL endpoint: http://lcn-daemon.laconic.com:9473/api
|
||||
- webapp deployer API: https://webapp-deployer-api.pwa.laconic.com
|
||||
- webapp deployer UI: https://webapp-deployer-ui.pwa.laconic.com
|
||||
|
@ -48,6 +48,19 @@
|
||||
set_fact:
|
||||
ALICE_PK: "{{ alice_pk.stdout }}"
|
||||
|
||||
- name: Check if DNS resolves for daemon
|
||||
command: getent ahosts {{ org_id }}-daemon.{{ full_domain }}
|
||||
register: dns_check
|
||||
retries: 5
|
||||
delay: 5
|
||||
until: dns_check.rc == 0
|
||||
ignore_errors: yes
|
||||
|
||||
- name: Fail if DNS does not resolve after retries
|
||||
fail:
|
||||
msg: "DNS resolution failed for example.com after 5 retries"
|
||||
when: dns_check.rc != 0
|
||||
|
||||
- name: Start the laconic console deployment
|
||||
command: laconic-so deployment --dir laconic-console-deployment start
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
vars_files:
|
||||
- vars/dns-vars.yml
|
||||
- vars/k8s-vars.yml
|
||||
|
||||
tasks:
|
||||
- name: Create a domain
|
||||
@ -21,6 +22,15 @@
|
||||
name: "{{ subdomain_prefix }}-cluster-control"
|
||||
data: "{{ service_provider_ip }}"
|
||||
|
||||
- name: Create record for daemon machine
|
||||
community.digitalocean.digital_ocean_domain_record:
|
||||
state: present
|
||||
oauth_token: "{{ do_api_token }}"
|
||||
domain: "{{ full_domain }}"
|
||||
type: A
|
||||
name: "{{ org_id }}-daemon"
|
||||
data: "{{ service_provider_ip }}"
|
||||
|
||||
- name: Create CNAME record for www
|
||||
community.digitalocean.digital_ocean_domain_record:
|
||||
state: present
|
||||
@ -38,16 +48,57 @@
|
||||
data: "{{ subdomain_cluster_control }}.{{ full_domain }}"
|
||||
domain: "{{ full_domain }}"
|
||||
type: CNAME
|
||||
name: "{{ subdomain_prefix }}"
|
||||
name: "{{ subdomain_prefix }}.{{ full_domain }}"
|
||||
ttl: 43200
|
||||
|
||||
- name: Create wildcard CNAME record for subdomain
|
||||
- name: Create CNAME record for laconicd endpoint
|
||||
community.digitalocean.digital_ocean_domain_record:
|
||||
state: present
|
||||
oauth_token: "{{ do_api_token }}"
|
||||
data: "{{ subdomain_cluster_control }}.{{ full_domain }}"
|
||||
data: "{{ org_id }}-daemon.{{ full_domain }}"
|
||||
domain: "{{ full_domain }}"
|
||||
type: CNAME
|
||||
name: "laconicd.{{ full_domain }}"
|
||||
ttl: 43200
|
||||
|
||||
- name: Create CNAME record for backend
|
||||
community.digitalocean.digital_ocean_domain_record:
|
||||
state: present
|
||||
oauth_token: "{{ do_api_token }}"
|
||||
data: "{{ org_id }}-daemon.{{ full_domain }}"
|
||||
domain: "{{ full_domain }}"
|
||||
type: CNAME
|
||||
name: "{{ org_id }}-backend.{{ full_domain }}"
|
||||
ttl: 43200
|
||||
|
||||
- name: Create CNAME record for console
|
||||
community.digitalocean.digital_ocean_domain_record:
|
||||
state: present
|
||||
oauth_token: "{{ do_api_token }}"
|
||||
data: "{{ org_id }}-daemon.{{ full_domain }}"
|
||||
domain: "{{ full_domain }}"
|
||||
type: CNAME
|
||||
name: "{{ org_id }}-console.{{ full_domain }}"
|
||||
ttl: 43200
|
||||
|
||||
- name: Create CNAME record for org and location
|
||||
community.digitalocean.digital_ocean_domain_record:
|
||||
state: present
|
||||
oauth_token: "{{ do_api_token }}"
|
||||
data: "{{ org_id }}-daemon.{{ full_domain }}"
|
||||
domain: "{{ full_domain }}"
|
||||
type: CNAME
|
||||
name: "{{ subdomain_prefix }}"
|
||||
ttl: 43200
|
||||
|
||||
- name: Create wildcard A record for subdomain
|
||||
community.digitalocean.digital_ocean_domain_record:
|
||||
state: present
|
||||
oauth_token: "{{ do_api_token }}"
|
||||
name: "{{ subdomain_cluster_control }}.{{ full_domain }}"
|
||||
data: "{{ service_provider_ip }}"
|
||||
domain: "{{ full_domain }}"
|
||||
type: A
|
||||
name: "*.{{ subdomain_prefix }}"
|
||||
ttl: 43200
|
||||
|
||||
@ -61,12 +112,13 @@
|
||||
name: "pwa"
|
||||
ttl: 43200
|
||||
|
||||
- name: Create wildcard CNAME record for pwa
|
||||
- name: Create wildcard A record for pwa
|
||||
community.digitalocean.digital_ocean_domain_record:
|
||||
state: present
|
||||
oauth_token: "{{ do_api_token }}"
|
||||
data: "{{ subdomain_cluster_control }}.{{ full_domain }}"
|
||||
name: "{{ subdomain_cluster_control }}.{{ full_domain }}"
|
||||
data: "{{ service_provider_ip }}"
|
||||
domain: "{{ full_domain }}"
|
||||
type: CNAME
|
||||
type: A
|
||||
name: "*.pwa"
|
||||
ttl: 43200
|
||||
|
@ -28,6 +28,7 @@
|
||||
name: "{{ ansible_user }}"
|
||||
groups: docker
|
||||
append: true
|
||||
become: yes
|
||||
|
||||
- name: Install Ansible on remote host
|
||||
pip:
|
||||
|
@ -48,6 +48,7 @@
|
||||
hostname:
|
||||
name: "{{ inventory_hostname }}"
|
||||
when: ansible_hostname != inventory_hostname
|
||||
become: yes
|
||||
|
||||
- name: Verify status of firewalld and enable sshguard
|
||||
systemd:
|
||||
@ -72,11 +73,13 @@
|
||||
- snapd.seeded
|
||||
- snapd.snap-repair.timer
|
||||
ignore_errors: yes
|
||||
become: yes
|
||||
|
||||
- name: Purge snapd
|
||||
apt:
|
||||
name: snapd
|
||||
state: absent
|
||||
become: yes
|
||||
|
||||
- name: Remove snap directories
|
||||
file:
|
||||
|
@ -1,5 +1,5 @@
|
||||
CERC_LACONICD_USER_KEY={{ALICE_PK}}
|
||||
CERC_LACONICD_BOND_ID={{BOND_ID}}
|
||||
CERC_LACONICD_RPC_ENDPOINT=http://{{ org_id }}-{{ location_id }}-cluster-control.{{ full_domain }}:26657
|
||||
CERC_LACONICD_GQL_ENDPOINT=http://{{ org_id }}-{{ location_id }}-cluster-control.{{ full_domain }}:9473/api
|
||||
LACONIC_HOSTED_ENDPOINT=http://{{ org_id }}-{{ location_id }}-cluster-control.{{ full_domain }}:9473
|
||||
CERC_LACONICD_RPC_ENDPOINT=http://{{ org_id }}-daemon.{{ full_domain }}:26657
|
||||
CERC_LACONICD_GQL_ENDPOINT=http://{{ org_id }}-daemon.{{ full_domain }}:9473/api
|
||||
LACONIC_HOSTED_ENDPOINT=http://{{ org_id }}-daemon.{{ full_domain }}:9473
|
||||
|
@ -1,3 +1,3 @@
|
||||
CERC_WEBAPP_DEBUG=0.1.0
|
||||
LACONIC_HOSTED_CONFIG_app_api_url=https://webapp-deployer-api.pwa.{{ full_domain }}
|
||||
LACONIC_HOSTED_CONFIG_app_console_link=http://{{ org_id }}-{{ location_id }}-cluster-control.{{ full_domain }}:9473/console?query=%0A%20%20fragment%20ValueParts%20on%20Value%20%7B%0A%20%20%20%20...%20on%20BooleanValue%20%7B%0A%20%20%20%20%20%20bool%3A%20value%0A%20%20%20%20%7D%0A%20%20%20%20...%20on%20IntValue%20%7B%0A%20%20%20%20%20%20int%3A%20value%0A%20%20%20%20%7D%0A%20%20%20%20...%20on%20FloatValue%20%7B%0A%20%20%20%20%20%20float%3A%20value%0A%20%20%20%20%7D%0A%20%20%20%20...%20on%20StringValue%20%7B%0A%20%20%20%20%20%20string%3A%20value%0A%20%20%20%20%7D%0A%20%20%20%20...%20on%20BytesValue%20%7B%0A%20%20%20%20%20%20bytes%3A%20value%0A%20%20%20%20%7D%0A%20%20%20%20...%20on%20LinkValue%20%7B%0A%20%20%20%20%20%20link%3A%20value%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20fragment%20AttrParts%20on%20Attribute%20%7B%0A%20%20%20%20key%0A%20%20%20%20value%20%7B%0A%20%20%20%20%20%20...ValueParts%0A%20%20%20%20%20%20...%20on%20ArrayValue%20%7B%0A%20%20%20%20%20%20%20%20value%20%7B%0A%20%20%20%20%20%20%20%20%20%20...ValueParts%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20%7B%0A%20%20%20%20getRecordsByIds(ids%3A%20%5B%22#RQID#%22%5D)%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%20%20names%0A%20%20%20%20%20%20bondId%0A%20%20%20%20%20%20createTime%0A%20%20%20%20%20%20expiryTime%0A%20%20%20%20%20%20owners%0A%20%20%20%20%20%20attributes%20%7B%0A%20%20%20%20%20%20%20%20...AttrParts%0A%20%20%20%20%20%20%20%20value%20%7B%0A%20%20%20%20%20%20%20%20%20%20...%20on%20MapValue%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20map%3A%20value%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20...AttrParts%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A
|
||||
LACONIC_HOSTED_CONFIG_app_console_link=http://{{ org_id }}-daemon.{{ full_domain }}:9473/console?query=%0A%20%20fragment%20ValueParts%20on%20Value%20%7B%0A%20%20%20%20...%20on%20BooleanValue%20%7B%0A%20%20%20%20%20%20bool%3A%20value%0A%20%20%20%20%7D%0A%20%20%20%20...%20on%20IntValue%20%7B%0A%20%20%20%20%20%20int%3A%20value%0A%20%20%20%20%7D%0A%20%20%20%20...%20on%20FloatValue%20%7B%0A%20%20%20%20%20%20float%3A%20value%0A%20%20%20%20%7D%0A%20%20%20%20...%20on%20StringValue%20%7B%0A%20%20%20%20%20%20string%3A%20value%0A%20%20%20%20%7D%0A%20%20%20%20...%20on%20BytesValue%20%7B%0A%20%20%20%20%20%20bytes%3A%20value%0A%20%20%20%20%7D%0A%20%20%20%20...%20on%20LinkValue%20%7B%0A%20%20%20%20%20%20link%3A%20value%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20fragment%20AttrParts%20on%20Attribute%20%7B%0A%20%20%20%20key%0A%20%20%20%20value%20%7B%0A%20%20%20%20%20%20...ValueParts%0A%20%20%20%20%20%20...%20on%20ArrayValue%20%7B%0A%20%20%20%20%20%20%20%20value%20%7B%0A%20%20%20%20%20%20%20%20%20%20...ValueParts%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20%7B%0A%20%20%20%20getRecordsByIds(ids%3A%20%5B%22#RQID#%22%5D)%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%20%20names%0A%20%20%20%20%20%20bondId%0A%20%20%20%20%20%20createTime%0A%20%20%20%20%20%20expiryTime%0A%20%20%20%20%20%20owners%0A%20%20%20%20%20%20attributes%20%7B%0A%20%20%20%20%20%20%20%20...AttrParts%0A%20%20%20%20%20%20%20%20value%20%7B%0A%20%20%20%20%20%20%20%20%20%20...%20on%20MapValue%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20map%3A%20value%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20...AttrParts%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A
|
||||
|
@ -1,7 +1,7 @@
|
||||
services:
|
||||
registry:
|
||||
rpcEndpoint: 'http://{{ subdomain_cluster_control }}.{{ full_domain }}:26657'
|
||||
gqlEndpoint: 'http://{{ subdomain_cluster_control}}.{{ full_domain }}:9473/api'
|
||||
rpcEndpoint: 'http://{{ org_id }}-daemon.{{ full_domain }}:26657'
|
||||
gqlEndpoint: 'http://{{ org_id }}-daemon.{{ full_domain }}:9473/api'
|
||||
userKey: "{{ ALICE_PK }}"
|
||||
bondId: "{{ BOND_ID }}"
|
||||
chainId: lorotestnet-1
|
||||
|
@ -25,11 +25,11 @@ security:
|
||||
resources:
|
||||
containers:
|
||||
reservations:
|
||||
cpus: "{{ cpu_reservation }}"
|
||||
memory: "{{ memory_reservation }}"
|
||||
cpus: {{ cpu_reservation }}
|
||||
memory: {{ memory_reservation }}
|
||||
limits:
|
||||
cpus: 6
|
||||
memory: 16G
|
||||
cpus: {{ cpu_limit }}
|
||||
memory: {{ memory_limit }}
|
||||
volumes:
|
||||
reservations:
|
||||
storage: 200G
|
||||
|
@ -3,4 +3,6 @@ BOND_ID: "{{ BOND_ID }}"
|
||||
authority_name: ""
|
||||
cpu_reservation: ""
|
||||
memory_reservation: ""
|
||||
cpu_limit: "6"
|
||||
memory_limit: "8G"
|
||||
deployer_gpg_passphrase: ""
|
||||
|
Loading…
Reference in New Issue
Block a user