Skip to content

Commit 5370a02

Browse files
Adding magma deployer roles
1 parent 445c9fc commit 5370a02

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+1576
-1
lines changed

README.md

+22-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,22 @@
1-
# magma-deployer
1+
# magma-deployer
2+
3+
Quick Install:
4+
```bash
5+
sudo bash -c "$(curl -sL https://github.com/magma/magma-deployer/raw/master/deploy-orc8r.sh)"
6+
```
7+
8+
Switch to `magma` user after deployment has finsished:
9+
```bash
10+
sudo su - magma
11+
```
12+
13+
Once all pods are ready, setup NMS login:
14+
```bash
15+
cd ~/magma-galaxy
16+
ansible-playbook config-orc8r.yml
17+
```
18+
19+
You can get your `rootCA.pem` file from the following location:
20+
```bash
21+
cat ~/magma-galaxy/secrets/rootCA.pem
22+
```

ansible.cfg

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[defaults]
2+
inventory = hosts.yml
3+
fact_caching_timeout = 0
4+
host_key_checking = False
5+
deprecation_warnings = False
6+
callbacks_enabled = profile_roles

config-orc8r.yml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
- name: Configure Magma Orchestrator
3+
hosts: all
4+
roles:
5+
- role: config

deploy-orc8r.sh

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#!/usr/bin/env bash
2+
3+
set -e
4+
5+
# Check if the system is Linux
6+
if [ $(uname) != "Linux" ]; then
7+
echo "This script is only for Linux"
8+
exit 1
9+
fi
10+
11+
# Run as root user
12+
if [ $(id -u) != 0 ]; then
13+
echo "Please run as root user"
14+
exit 1
15+
fi
16+
17+
DEFAULT_ORC8R_DOMAIN="magma.local"
18+
DEFAULT_NMS_ORGANIZATION_NAME="magma-test"
19+
DEFAULT_NMS_EMAIL_ID_AND_PASSWORD="admin"
20+
ORC8R_IP=$(hostname -I | awk '{print $1}')
21+
GITHUB_USERNAME="magma"
22+
MAGMA_ORC8R_REPO="magma-deployer"
23+
MAGMA_USER="magma"
24+
HOSTS_FILE="hosts.yml"
25+
26+
# Take input from user
27+
read -p "Your Magma Orchestrator domain name? [${DEFAULT_ORC8R_DOMAIN}]: " ORC8R_DOMAIN
28+
ORC8R_DOMAIN="${ORC8R_DOMAIN:-${DEFAULT_ORC8R_DOMAIN}}"
29+
30+
read -p "NMS organization(subdomain) name you want? [${DEFAULT_NMS_ORGANIZATION_NAME}]: " NMS_ORGANIZATION_NAME
31+
NMS_ORGANIZATION_NAME="${NMS_ORGANIZATION_NAME:-${DEFAULT_NMS_ORGANIZATION_NAME}}"
32+
33+
read -p "Set your email ID for NMS? [${DEFAULT_NMS_EMAIL_ID_AND_PASSWORD}]: " NMS_EMAIL_ID
34+
NMS_EMAIL_ID="${NMS_EMAIL_ID:-${DEFAULT_NMS_EMAIL_ID_AND_PASSWORD}}"
35+
36+
read -p "Set your password for NMS? [${DEFAULT_NMS_EMAIL_ID_AND_PASSWORD}]: " NMS_PASSWORD
37+
NMS_PASSWORD="${NMS_PASSWORD:-${DEFAULT_NMS_EMAIL_ID_AND_PASSWORD}}"
38+
39+
# Add repos for installing yq and ansible
40+
add-apt-repository --yes ppa:rmescandon/yq
41+
add-apt-repository --yes ppa:ansible/ansible
42+
43+
# Install yq and ansible
44+
apt install yq ansible -y
45+
46+
# Create magma user and give sudo permissions
47+
useradd -m ${MAGMA_USER} -s /bin/bash -G sudo
48+
echo "${MAGMA_USER} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
49+
50+
# switch to magma user
51+
su - ${MAGMA_USER} -c bash <<_
52+
53+
# Genereta SSH key for magma user
54+
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''
55+
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
56+
57+
# Clone Magma Deployer repo
58+
git clone https://github.com/${GITHUB_USERNAME}/${MAGMA_ORC8R_REPO} --depth 1
59+
cd ~/${MAGMA_ORC8R_REPO}
60+
61+
# export variables for yq
62+
export ORC8R_IP=${ORC8R_IP}
63+
export MAGMA_USER=${MAGMA_USER}
64+
export ORC8R_DOMAIN=${ORC8R_DOMAIN}
65+
export NMS_ORGANIZATION_NAME=${NMS_ORGANIZATION_NAME}
66+
export NMS_EMAIL_ID=${NMS_EMAIL_ID}
67+
export NMS_PASSWORD=${NMS_PASSWORD}
68+
69+
# Update values to the config file
70+
yq e '.all.hosts = env(ORC8R_IP)' -i ${HOSTS_FILE}
71+
yq e '.all.vars.ansible_user = env(MAGMA_USER)' -i ${HOSTS_FILE}
72+
yq e '.all.vars.orc8r_domain = env(ORC8R_DOMAIN)' -i ${HOSTS_FILE}
73+
yq e '.all.vars.nms_org = env(NMS_ORGANIZATION_NAME)' -i ${HOSTS_FILE}
74+
yq e '.all.vars.nms_id = env(NMS_EMAIL_ID)' -i ${HOSTS_FILE}
75+
yq e '.all.vars.nms_pass = env(NMS_PASSWORD)' -i ${HOSTS_FILE}
76+
77+
# Deploy Magma Orchestrator
78+
ansible-playbook deploy-orc8r.yml
79+
_

deploy-orc8r.yml

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
- name: Install Magma Orchestrator
3+
hosts: all
4+
roles:
5+
- role: prerequisites
6+
- role: docker
7+
- role: kubernetes
8+
- role: openebs
9+
- role: metallb
10+
- role: postgresql
11+
- role: secrets
12+
- role: orc8r
13+
- role: prometheus_cache_cleanup
14+
- role: haproxy
15+
- role: elasticsearch
16+
- role: fluentd
17+
- role: dns

fix-elasticsearch.yml

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
- name: Fix Elasticsearch
3+
hosts: all
4+
roles:
5+
- role: remove_elasticsearch
6+
- role: elasticsearch

hosts.yml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
all:
3+
hosts: 127.0.0.1
4+
vars:
5+
ansible_user: "ubuntu"

roles/config/defaults/main.yml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
magma_namespace: "orc8r"
3+
nms_org: "magma-test"
4+
nms_id: "admin"
5+
nms_pass: "admin"

roles/config/tasks/main.yml

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
---
2+
- name: Register Orchestrator pod
3+
kubernetes.core.k8s_info:
4+
kind: Pod
5+
namespace: "{{ magma_namespace }}"
6+
label_selectors:
7+
- "app.kubernetes.io/component = orchestrator"
8+
register: orchestrator_pod
9+
10+
- name: Set Orchestrator pod name
11+
set_fact:
12+
orchestrator_pod_name: "{{ orchestrator_pod.resources[0].metadata.name }}"
13+
14+
- name: Setup admin operator certificate
15+
ignore_errors: yes
16+
kubernetes.core.k8s_exec:
17+
namespace: "{{ magma_namespace }}"
18+
pod: "{{ orchestrator_pod_name }}"
19+
command: envdir /var/opt/magma/envdir /var/opt/magma/bin/accessc add-existing -admin -cert /var/opt/magma/certs/admin_operator.pem admin_operator
20+
21+
- name: Register magmalte pod
22+
kubernetes.core.k8s_info:
23+
kind: Pod
24+
namespace: "{{ magma_namespace }}"
25+
label_selectors:
26+
- "app.kubernetes.io/component = magmalte"
27+
register: magmalte_pod
28+
29+
- name: Set magmalte pod name
30+
set_fact:
31+
magmalte_pod_name: "{{ magmalte_pod.resources[0].metadata.name }}"
32+
33+
- name: Set username and password for {{ nms_org }} organization
34+
kubernetes.core.k8s_exec:
35+
namespace: "{{ magma_namespace }}"
36+
pod: "{{ magmalte_pod_name }}"
37+
command: yarn setAdminPassword {{ nms_org }} {{ nms_id }} {{ nms_pass }}

roles/dns/defaults/main.yml

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
---
2+
orc8r_domain: "magma.local"

roles/dns/tasks/main.yml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
- name: Update these DNS Values
3+
debug:
4+
msg:
5+
- "{{ ansible_host }} api.{{ orc8r_domain }}"
6+
- "{{ ansible_host }} *.nms.{{ orc8r_domain }}"
7+
- "{{ ansible_host }} fluentd.{{ orc8r_domain }}"
8+
- "{{ ansible_host }} controller.{{ orc8r_domain }}"
9+
- "{{ ansible_host }} bootstrapper-controller.{{ orc8r_domain }}"

roles/docker/defaults/main.yml

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
---
2+
docker_version: "20.10"

roles/docker/tasks/main.yml

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
- name: Install Docker
3+
become: yes
4+
shell: |
5+
curl https://releases.rancher.com/install-docker/{{ docker_version }}.sh | sh
6+
7+
- name: Add user to docker group
8+
become: yes
9+
user:
10+
name: "{{ ansible_user }}"
11+
group: docker
12+
13+
- name: Pull alpine docker image
14+
become: yes
15+
community.docker.docker_image:
16+
name: alpine
17+
source: pull

roles/elasticsearch/defaults/main.yml

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
---
2+
magma_namespace: "orc8r"
3+
elasticsearch_chart_version: "7.17.3"

roles/elasticsearch/tasks/main.yml

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
- name: Install Elasticsearch
3+
kubernetes.core.helm:
4+
name: elasticsearch
5+
chart_ref: elastic/elasticsearch
6+
release_namespace: "{{ magma_namespace }}"
7+
chart_version: "{{ elasticsearch_chart_version }}"
8+
create_namespace: true
9+
values:
10+
replicas: 1
11+
extraEnvs:
12+
- name: discovery.type
13+
value: single-node
14+
- name: cluster.initial_master_nodes
15+
value: null

roles/fluentd/defaults/main.yml

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
magma_namespace: "orc8r"
3+
fluentd_chart_version: "2.5.3"
4+
magma_service_type: "ClusterIP"

roles/fluentd/tasks/main.yml

+103
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
---
2+
- name: Install Fluentd
3+
kubernetes.core.helm:
4+
name: fluentd
5+
chart_ref: stable/fluentd
6+
release_namespace: "{{ magma_namespace }}"
7+
chart_version: "{{ fluentd_chart_version }}"
8+
create_namespace: true
9+
values:
10+
configMaps:
11+
forward-input.conf: |-
12+
<source>
13+
@type forward
14+
port 443
15+
bind 0.0.0.0
16+
<transport tls>
17+
ca_path /certs/certifier.pem
18+
cert_path /certs/fluentd.pem
19+
private_key_path /certs/fluentd.key
20+
client_cert_auth true
21+
</transport>
22+
</source>
23+
output.conf: |-
24+
<match eventd>
25+
@id eventd_elasticsearch
26+
@type elasticsearch
27+
@log_level info
28+
include_tag_key true
29+
host "#{ENV['OUTPUT_HOST']}"
30+
port "#{ENV['OUTPUT_PORT']}"
31+
scheme "#{ENV['OUTPUT_SCHEME']}"
32+
ssl_version "#{ENV['OUTPUT_SSL_VERSION']}"
33+
logstash_format true
34+
logstash_prefix "eventd"
35+
reconnect_on_error true
36+
reload_on_failure true
37+
reload_connections false
38+
log_es_400_reason true
39+
<buffer>
40+
@type file
41+
path /var/log/fluentd-buffers/eventd.kubernetes.system.buffer
42+
flush_mode interval
43+
retry_type exponential_backoff
44+
flush_thread_count 2
45+
flush_interval 5s
46+
retry_forever
47+
retry_max_interval 30
48+
chunk_limit_size "#{ENV['OUTPUT_BUFFER_CHUNK_LIMIT']}"
49+
queue_limit_length "#{ENV['OUTPUT_BUFFER_QUEUE_LIMIT']}"
50+
overflow_action block
51+
</buffer>
52+
</match>
53+
<match **>
54+
@id elasticsearch
55+
@type elasticsearch
56+
@log_level info
57+
include_tag_key true
58+
host "#{ENV['OUTPUT_HOST']}"
59+
port "#{ENV['OUTPUT_PORT']}"
60+
scheme "#{ENV['OUTPUT_SCHEME']}"
61+
ssl_version "#{ENV['OUTPUT_SSL_VERSION']}"
62+
logstash_format true
63+
logstash_prefix "magma"
64+
reconnect_on_error true
65+
reload_on_failure true
66+
reload_connections false
67+
log_es_400_reason true
68+
<buffer>
69+
@type file
70+
path /var/log/fluentd-buffers/kubernetes.system.buffer
71+
flush_mode interval
72+
retry_type exponential_backoff
73+
flush_thread_count 2
74+
flush_interval 5s
75+
retry_forever
76+
retry_max_interval 30
77+
chunk_limit_size "#{ENV['OUTPUT_BUFFER_CHUNK_LIMIT']}"
78+
queue_limit_length "#{ENV['OUTPUT_BUFFER_QUEUE_LIMIT']}"
79+
overflow_action block
80+
</buffer>
81+
</match>
82+
extraVolumeMounts:
83+
- mountPath: /certs
84+
name: certs
85+
readOnly: true
86+
extraVolumes:
87+
- name: certs
88+
secret:
89+
defaultMode: 420
90+
secretName: orc8r-secrets-certs
91+
output:
92+
host: elasticsearch-master
93+
port: 9200
94+
scheme: http
95+
rbac:
96+
create: false
97+
replicaCount: 1
98+
service:
99+
ports:
100+
- containerPort: 443
101+
name: forward
102+
protocol: TCP
103+
type: "{{ magma_service_type }}"

roles/haproxy/defaults/main.yml

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
orc8r_domain: "magma.local"
3+
haproxy_chart_version: "1.18.0"
4+
magma_namespace: "orc8r"

0 commit comments

Comments
 (0)