Add ansible playbook to automate service provider setup #10

Merged
nabarun merged 31 commits from deep-stack/testnet-ops:ag-sp-setup into main 2024-10-01 12:17:11 +00:00
13 changed files with 41 additions and 16 deletions
Showing only changes of commit ee1ad839c4 - Show all commits

View File

@ -4,7 +4,7 @@
To get started, follow the [installation](../README.md#installation) guide to setup ansible on your machine To get started, follow the [installation](../README.md#installation) guide to setup ansible on your machine
## Setup User `dev` ## Setup a new User
- Create a new `hosts.ini` file: - Create a new `hosts.ini` file:
@ -95,7 +95,7 @@ To get started, follow the [installation](../README.md#installation) guide to se
uid [ultimate] user <hello@laconic.com> uid [ultimate] user <hello@laconic.com>
``` ```
Note the `0AFB10B643944C22` sequence of characters. This will be required later. Note the `0AFB10B643944C22` sequence of characters after `sec`. This will be required later.
- Copy the vars files: - Copy the vars files:
@ -123,13 +123,16 @@ To get started, follow the [installation](../README.md#installation) guide to se
org_id: "" # eg: lcn org_id: "" # eg: lcn
location_id: "" # eg: cad location_id: "" # eg: cad
base_domain: "" # eg: laconic base_domain: "" # eg: laconic
support_email: "" # eg: support@laconic.com
# vars/container-vars.yml # vars/container-vars.yml
container_registry_username: "" # username to login to the container registry container_registry_username: "" # username to login to the container registry
container_registry_password: "" # password to login to the container registry container_registry_password: "" # password to login to the container registry
# vars/webapp-vars.yml # vars/webapp-vars.yml
authority_name: "" # eg: my-org-name 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
``` ```
- Update `ansible_user` in the [`hosts.ini`](./hosts.ini) file to the user on target host - Update `ansible_user` in the [`hosts.ini`](./hosts.ini) file to the user on target host

View File

@ -99,6 +99,9 @@
src: "./templates/laconic.yml.j2" src: "./templates/laconic.yml.j2"
dest: "webapp-deployer/data/config/laconic.yml" dest: "webapp-deployer/data/config/laconic.yml"
- name: login to the container registry
command: "docker login container-registry.pwa.{{ full_domain }} --username {{ container_registry_username }} --password {{ container_registry_password}}"
- name: Push images to container registry - name: Push images to container registry
command: laconic-so deployment --dir webapp-deployer push-images command: laconic-so deployment --dir webapp-deployer push-images

View File

@ -7,6 +7,7 @@
vars_files: vars_files:
- vars/webapp-vars.yml - vars/webapp-vars.yml
- vars/dns-vars.yml - vars/dns-vars.yml
- vars/k8s-vars.yml
tasks: tasks:
- name: Clone webapp-deployment-status-ui repository - name: Clone webapp-deployment-status-ui repository

View File

@ -6,6 +6,8 @@
vars_files: vars_files:
- vars/webapp-vars.yml - vars/webapp-vars.yml
- vars/dns-vars.yml
- vars/k8s-vars.yml
tasks: tasks:
- name: Clone the stack repo - name: Clone the stack repo

View File

@ -5,11 +5,11 @@
PATH: "{{ ansible_env.PATH }}:/home/{{ansible_user}}/bin" PATH: "{{ ansible_env.PATH }}:/home/{{ansible_user}}/bin"
tasks: tasks:
- name: Clone the stack repo - name: Clone the fixturenet-laconicd-stack repo
command: laconic-so fetch-stack git.vdb.to/cerc-io/fixturenet-laconicd-stack --pull command: laconic-so fetch-stack git.vdb.to/cerc-io/fixturenet-laconicd-stack --pull
ignore_errors: yes ignore_errors: yes
- name: Clone the fixturenet-laconicd repo - name: Setup repos for fixturenet-laconicd
command: laconic-so --stack ~/cerc/fixturenet-laconicd-stack/stack-orchestrator/stacks/fixturenet-laconicd setup-repositories command: laconic-so --stack ~/cerc/fixturenet-laconicd-stack/stack-orchestrator/stacks/fixturenet-laconicd setup-repositories
- name: Build container images - name: Build container images

View File

@ -7,9 +7,10 @@
vars_files: vars_files:
- vars/k8s-vars.yml - vars/k8s-vars.yml
- vars/container-vars.yml - vars/container-vars.yml
- vars/dns-vars.yml
tasks: tasks:
- name: Generate the spec file for the container-registry stack - name: Generate spec file for the container-registry stack
template: template:
src: "./templates/specs/container-registry.spec.j2" src: "./templates/specs/container-registry.spec.j2"
dest: "{{ansible_env.HOME}}/container-registry.spec" dest: "{{ansible_env.HOME}}/container-registry.spec"
@ -58,6 +59,11 @@
environment: environment:
KUBECONFIG: "{{ ansible_env.HOME }}/.kube/config-default.yaml" KUBECONFIG: "{{ ansible_env.HOME }}/.kube/config-default.yaml"
# TODO: Investigate why container registry throws error if started immediately
- name: Wait for 90 seconds
pause:
seconds: 90
- name: Deploy the container registry - name: Deploy the container registry
command: > command: >
laconic-so deployment --dir container-registry start laconic-so deployment --dir container-registry start
@ -69,26 +75,30 @@
- name: Decode and extract cluster-id - name: Decode and extract cluster-id
set_fact: set_fact:
cluster_id: "{{ deployment_file.content | b64decode | regex_search('cluster-id: (.+)', '\\1') }}" extracted_cluster_id: "{{ deployment_file.content | b64decode | regex_search('cluster-id: (.+)', '\\1') }}"
- name: Set modified cluster-id
set_fact:
formatted_cluster_id: "{{ extracted_cluster_id | replace('[', '') | replace(']', '') | replace(\"'\", '') }}"
- name: Display the cluster ID - name: Display the cluster ID
debug: debug:
msg: "The cluster ID is: {{ cluster_id }}" msg: "The cluster ID is: {{ formatted_cluster_id }}"
- name: Annotate ingress for proxy body size - name: Annotate ingress for proxy body size
command: > command: >
kubectl annotate ingress {{ cluster_id }}-ingress nginx.ingress.kubernetes.io/proxy-body-size=0 kubectl annotate ingress {{ formatted_cluster_id }}-ingress nginx.ingress.kubernetes.io/proxy-body-size=0
environment: environment:
KUBECONFIG: "{{ ansible_env.HOME }}/.kube/config-default.yaml" KUBECONFIG: "{{ ansible_env.HOME }}/.kube/config-default.yaml"
- name: Annotate ingress for proxy read timeout - name: Annotate ingress for proxy read timeout
command: > command: >
kubectl annotate ingress {{ cluster_id }}-ingress nginx.ingress.kubernetes.io/proxy-read-timeout=600 kubectl annotate ingress {{ formatted_cluster_id }}-ingress nginx.ingress.kubernetes.io/proxy-read-timeout=600
environment: environment:
KUBECONFIG: "{{ ansible_env.HOME }}/.kube/config-default.yaml" KUBECONFIG: "{{ ansible_env.HOME }}/.kube/config-default.yaml"
- name: Annotate ingress for proxy send timeout - name: Annotate ingress for proxy send timeout
command: > command: >
kubectl annotate ingress {{ cluster_id }}-ingress nginx.ingress.kubernetes.io/proxy-send-timeout=600 kubectl annotate ingress {{ formatted_cluster_id }}-ingress nginx.ingress.kubernetes.io/proxy-send-timeout=600
environment: environment:
KUBECONFIG: "{{ ansible_env.HOME }}/.kube/config-default.yaml" KUBECONFIG: "{{ ansible_env.HOME }}/.kube/config-default.yaml"

View File

@ -116,7 +116,7 @@
src: ./templates/k8s.yml.j2 src: ./templates/k8s.yml.j2
dest: "{{ ansible_env.HOME }}/service-provider-template/group_vars/{{ org_id }}_{{ location_id }}/k8s.yml" dest: "{{ ansible_env.HOME }}/service-provider-template/group_vars/{{ org_id }}_{{ location_id }}/k8s.yml"
- name: Copy wildcard-pwa-example.yml to the remote VM - name: Copy wildcard-pwa-{{ base_domain }}.yaml to the remote VM
template: template:
src: ./templates/wildcard-pwa-example.yml.j2 src: ./templates/wildcard-pwa-example.yml.j2
dest: "{{ ansible_env.HOME }}/service-provider-template/files/manifests/wildcard-pwa-{{ base_domain }}.yaml" dest: "{{ ansible_env.HOME }}/service-provider-template/files/manifests/wildcard-pwa-{{ base_domain }}.yaml"

View File

@ -1,2 +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_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

View File

@ -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=https://laconicd.laconic.com/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 }}-{{ 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

View File

@ -25,8 +25,8 @@ security:
resources: resources:
containers: containers:
reservations: reservations:
cpus: 4 cpus: "{{ cpu_reservation }}"
memory: 8G memory: "{{ memory_reservation }}"
limits: limits:
cpus: 6 cpus: 6
memory: 16G memory: 16G

View File

@ -1,3 +1,3 @@
container_registry_username: "" container_registry_username: ""
container_registry_password: "" container_registry_password: ""
container_registry_domain: "container-registry.pwa.{{ dns_domain }}.com" container_registry_domain: "container-registry.pwa.{{ full_domain }}"

View File

@ -4,4 +4,5 @@ vault_passphrase: ""
org_id: "" org_id: ""
location_id: "" location_id: ""
base_domain: "" base_domain: ""
support_email: ""
ansible_ssh_extra_args: '-o StrictHostKeyChecking=no' ansible_ssh_extra_args: '-o StrictHostKeyChecking=no'

View File

@ -1,3 +1,5 @@
authority_name: "" authority_name: ""
ALICE_PK: "{{ ALICE_PK }}" ALICE_PK: "{{ ALICE_PK }}"
BOND_ID: "{{ BOND_ID }}" BOND_ID: "{{ BOND_ID }}"
cpu_reservation: ""
memory_reservation: ""