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 of the user you want to setup on the target host
|
||||||
password: ""
|
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: ""
|
path_to_ssh_key: ""
|
||||||
```
|
```
|
||||||
|
|
||||||
- Execute the `setup-user.yml` Ansible playbook to create a user with passwordless sudo permissions:
|
- Execute the `setup-user.yml` Ansible playbook to create a user with passwordless sudo permissions:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ../
|
|
||||||
LANG=en_US.utf8 ansible-playbook setup-user.yml -i hosts.ini --extra-vars='{ "target_host": "deployment_host" }'
|
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
|
authority_name: "" # eg: my-org-name
|
||||||
cpu_reservation: "" # Minimum number of cpu cores to be used, eg: 2
|
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
|
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
|
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
|
```bash
|
||||||
LANG=en_US.utf8 ansible-playbook service-provider-setup.yml -i hosts.ini --extra-vars='{ target_host: "deployment_host" }' --user $USER
|
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:
|
set_fact:
|
||||||
ALICE_PK: "{{ alice_pk.stdout }}"
|
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
|
- name: Start the laconic console deployment
|
||||||
command: laconic-so deployment --dir laconic-console-deployment start
|
command: laconic-so deployment --dir laconic-console-deployment start
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
vars_files:
|
vars_files:
|
||||||
- vars/dns-vars.yml
|
- vars/dns-vars.yml
|
||||||
|
- vars/k8s-vars.yml
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
- name: Create a domain
|
- name: Create a domain
|
||||||
@ -21,6 +22,15 @@
|
|||||||
name: "{{ subdomain_prefix }}-cluster-control"
|
name: "{{ subdomain_prefix }}-cluster-control"
|
||||||
data: "{{ service_provider_ip }}"
|
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
|
- name: Create CNAME record for www
|
||||||
community.digitalocean.digital_ocean_domain_record:
|
community.digitalocean.digital_ocean_domain_record:
|
||||||
state: present
|
state: present
|
||||||
@ -38,16 +48,57 @@
|
|||||||
data: "{{ subdomain_cluster_control }}.{{ full_domain }}"
|
data: "{{ subdomain_cluster_control }}.{{ full_domain }}"
|
||||||
domain: "{{ full_domain }}"
|
domain: "{{ full_domain }}"
|
||||||
type: CNAME
|
type: CNAME
|
||||||
name: "{{ subdomain_prefix }}"
|
name: "{{ subdomain_prefix }}.{{ full_domain }}"
|
||||||
ttl: 43200
|
ttl: 43200
|
||||||
|
|
||||||
- name: Create wildcard CNAME record for subdomain
|
- name: Create CNAME record for laconicd endpoint
|
||||||
community.digitalocean.digital_ocean_domain_record:
|
community.digitalocean.digital_ocean_domain_record:
|
||||||
state: present
|
state: present
|
||||||
oauth_token: "{{ do_api_token }}"
|
oauth_token: "{{ do_api_token }}"
|
||||||
data: "{{ subdomain_cluster_control }}.{{ full_domain }}"
|
data: "{{ org_id }}-daemon.{{ full_domain }}"
|
||||||
domain: "{{ full_domain }}"
|
domain: "{{ full_domain }}"
|
||||||
type: CNAME
|
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 }}"
|
name: "*.{{ subdomain_prefix }}"
|
||||||
ttl: 43200
|
ttl: 43200
|
||||||
|
|
||||||
@ -61,12 +112,13 @@
|
|||||||
name: "pwa"
|
name: "pwa"
|
||||||
ttl: 43200
|
ttl: 43200
|
||||||
|
|
||||||
- name: Create wildcard CNAME record for pwa
|
- name: Create wildcard A record for pwa
|
||||||
community.digitalocean.digital_ocean_domain_record:
|
community.digitalocean.digital_ocean_domain_record:
|
||||||
state: present
|
state: present
|
||||||
oauth_token: "{{ do_api_token }}"
|
oauth_token: "{{ do_api_token }}"
|
||||||
data: "{{ subdomain_cluster_control }}.{{ full_domain }}"
|
name: "{{ subdomain_cluster_control }}.{{ full_domain }}"
|
||||||
|
data: "{{ service_provider_ip }}"
|
||||||
domain: "{{ full_domain }}"
|
domain: "{{ full_domain }}"
|
||||||
type: CNAME
|
type: A
|
||||||
name: "*.pwa"
|
name: "*.pwa"
|
||||||
ttl: 43200
|
ttl: 43200
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
name: "{{ ansible_user }}"
|
name: "{{ ansible_user }}"
|
||||||
groups: docker
|
groups: docker
|
||||||
append: true
|
append: true
|
||||||
|
become: yes
|
||||||
|
|
||||||
- name: Install Ansible on remote host
|
- name: Install Ansible on remote host
|
||||||
pip:
|
pip:
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
hostname:
|
hostname:
|
||||||
name: "{{ inventory_hostname }}"
|
name: "{{ inventory_hostname }}"
|
||||||
when: ansible_hostname != inventory_hostname
|
when: ansible_hostname != inventory_hostname
|
||||||
|
become: yes
|
||||||
|
|
||||||
- name: Verify status of firewalld and enable sshguard
|
- name: Verify status of firewalld and enable sshguard
|
||||||
systemd:
|
systemd:
|
||||||
@ -72,11 +73,13 @@
|
|||||||
- snapd.seeded
|
- snapd.seeded
|
||||||
- snapd.snap-repair.timer
|
- snapd.snap-repair.timer
|
||||||
ignore_errors: yes
|
ignore_errors: yes
|
||||||
|
become: yes
|
||||||
|
|
||||||
- name: Purge snapd
|
- name: Purge snapd
|
||||||
apt:
|
apt:
|
||||||
name: snapd
|
name: snapd
|
||||||
state: absent
|
state: absent
|
||||||
|
become: yes
|
||||||
|
|
||||||
- name: Remove snap directories
|
- name: Remove snap directories
|
||||||
file:
|
file:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
CERC_LACONICD_USER_KEY={{ALICE_PK}}
|
CERC_LACONICD_USER_KEY={{ALICE_PK}}
|
||||||
CERC_LACONICD_BOND_ID={{BOND_ID}}
|
CERC_LACONICD_BOND_ID={{BOND_ID}}
|
||||||
CERC_LACONICD_RPC_ENDPOINT=http://{{ org_id }}-{{ location_id }}-cluster-control.{{ full_domain }}:26657
|
CERC_LACONICD_RPC_ENDPOINT=http://{{ org_id }}-daemon.{{ full_domain }}:26657
|
||||||
CERC_LACONICD_GQL_ENDPOINT=http://{{ org_id }}-{{ location_id }}-cluster-control.{{ full_domain }}:9473/api
|
CERC_LACONICD_GQL_ENDPOINT=http://{{ org_id }}-daemon.{{ full_domain }}:9473/api
|
||||||
LACONIC_HOSTED_ENDPOINT=http://{{ org_id }}-{{ location_id }}-cluster-control.{{ full_domain }}:9473
|
LACONIC_HOSTED_ENDPOINT=http://{{ org_id }}-daemon.{{ full_domain }}:9473
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
CERC_WEBAPP_DEBUG=0.1.0
|
CERC_WEBAPP_DEBUG=0.1.0
|
||||||
LACONIC_HOSTED_CONFIG_app_api_url=https://webapp-deployer-api.pwa.{{ full_domain }}
|
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:
|
services:
|
||||||
registry:
|
registry:
|
||||||
rpcEndpoint: 'http://{{ subdomain_cluster_control }}.{{ full_domain }}:26657'
|
rpcEndpoint: 'http://{{ org_id }}-daemon.{{ full_domain }}:26657'
|
||||||
gqlEndpoint: 'http://{{ subdomain_cluster_control}}.{{ full_domain }}:9473/api'
|
gqlEndpoint: 'http://{{ org_id }}-daemon.{{ full_domain }}:9473/api'
|
||||||
userKey: "{{ ALICE_PK }}"
|
userKey: "{{ ALICE_PK }}"
|
||||||
bondId: "{{ BOND_ID }}"
|
bondId: "{{ BOND_ID }}"
|
||||||
chainId: lorotestnet-1
|
chainId: lorotestnet-1
|
||||||
|
@ -25,11 +25,11 @@ security:
|
|||||||
resources:
|
resources:
|
||||||
containers:
|
containers:
|
||||||
reservations:
|
reservations:
|
||||||
cpus: "{{ cpu_reservation }}"
|
cpus: {{ cpu_reservation }}
|
||||||
memory: "{{ memory_reservation }}"
|
memory: {{ memory_reservation }}
|
||||||
limits:
|
limits:
|
||||||
cpus: 6
|
cpus: {{ cpu_limit }}
|
||||||
memory: 16G
|
memory: {{ memory_limit }}
|
||||||
volumes:
|
volumes:
|
||||||
reservations:
|
reservations:
|
||||||
storage: 200G
|
storage: 200G
|
||||||
|
@ -3,4 +3,6 @@ BOND_ID: "{{ BOND_ID }}"
|
|||||||
authority_name: ""
|
authority_name: ""
|
||||||
cpu_reservation: ""
|
cpu_reservation: ""
|
||||||
memory_reservation: ""
|
memory_reservation: ""
|
||||||
|
cpu_limit: "6"
|
||||||
|
memory_limit: "8G"
|
||||||
deployer_gpg_passphrase: ""
|
deployer_gpg_passphrase: ""
|
||||||
|
Loading…
Reference in New Issue
Block a user