Compare commits

...

9 Commits

Author SHA1 Message Date
f7622d10a6 add mongo docker 2023-01-10 21:58:12 +01:00
f36366a319 add condition for update or drop-create database 2023-01-03 19:05:39 +01:00
e502e04372 Merge pull request 'deploy-image' (#4) from deploy-image into master
Reviewed-on: #4
2022-12-18 17:50:19 +00:00
67c2a0ed3e add or update dns with API OVH 2022-12-18 18:42:14 +01:00
2a63aed0e3 add API curl 2022-12-11 11:45:40 +01:00
452a650b16 deploy backend api 2022-12-10 23:05:52 +01:00
3a16d3e723 deploy api 2022-12-10 22:10:13 +01:00
369aed9ea1 copy kubeconfig 2022-12-10 20:30:25 +01:00
11d0273ac1 fix copy kubeconfig files 2022-12-10 20:14:13 +01:00
24 changed files with 285 additions and 69 deletions

View File

@@ -11,13 +11,17 @@ project_directory:
- "{{ project_src }}"
- "{{ project_src }}/{{ project_name }}"
docker_compose_file: "docker-compose-db.yml"
docker_compose_file: "docker-compose-db.yml.j2"
project_env: "env-db.j2"
redis_url: redis.valczeryba.ovh
redis_port: 63791
mongo_port: 28017
ports_tcp:
- "{{ postgres_port }}"
- "{{ redis_port }}"
- "{{ mongo_port }}"
covas_liquibase: false

View File

@@ -1,15 +1,17 @@
$ANSIBLE_VAULT;1.1;AES256
31393434663833363061653862663138393835663538346465383065323231616163343964303966
3437316337383464323933306632393766386234366133360a313466356333343939396134333430
38376636663234666534666637663638633766623034323164393234656365613437643738393833
3466616536353935340a366165346464343863613133373739366534373835396436343138326532
37376261383631366531333061353133643432623164633335373037393732366132346438326163
32386639396661626431616463383165393035396139333336316263636236323130656534636237
36636536613064393632343564343734626666323037303630623764316338346161373134656165
64666133663364633064323763303964663964393139646663306334353435633839383164313734
61373731356331336265663835346234323934656236646363663562396131336161663662393634
65383761363763326366313063333337633039383830663066663261393464646437663366366565
39366661653934626337656336306435363263373534323239353831343231303134613338623236
63306464393031666666613530326138646535613534303365323965323466366131343236663030
37323032656136383661333331363635643234333138626239383733336135333637353930316338
6537303238333962313362376434383038666133376134383132
64653663303437333433396331636461353737313832366539353264623561393761666464316363
3633613637663530383739353830366662646461653138650a663939373238663737363737353535
65313433373565343830396230656162663361366265363131323961353764333462386464376239
3662656464633566310a616331653331383631343065396537333338353738353865636539396533
63333436663739346231626139316265643438393739383761383033616465613964643830643033
66336237303833616638636336393739326332623738393032646561376564343835353533366632
64633239656639303063653538396562393366396137316530633638333539333631343238376463
62366463393234663834616639633635303537633565636634383435363663336363386238646563
32633634323332393765343933313666333134346132636637383233633064383663323531333834
61366334633532653430326266623366353761626330386439626437623266316636633235326263
33393233313463656335353639633262623335633336613030633435363232316632313031663034
34366130346135336365376332383637343761303435623138613533393561613039353561663866
66636139323138376566643239383563363738363130373735653365363133303864386462333065
63623934623032353638643034363439616333646530306430346461393264323661376335393366
62656639633339303536643535383035383964623761386166373135323465663132323262663961
39313365616266333636

View File

@@ -15,7 +15,7 @@ project_directory:
- "{{ project_src }}"
project_env: env-drone.j2
docker_compose_file: "docker-compose-drone.yml"
docker_compose_file: "docker-compose-drone.yml.j2"
ports_tcp:
- 8000

View File

@@ -1,5 +1,6 @@
project_terraform: "/home/valentin/terraform"
project_backend: "/home/valentin/k8s_backend"
project_kubeconfig: "/home/valentin/.kube/config"
region_k8s: "fr-par"
project_name_tf: "terraform-test"
quarkus_project: "covas-quarkus"

View File

@@ -1,39 +1,46 @@
$ANSIBLE_VAULT;1.1;AES256
64323034306466353139343765626366333236376138306561336430316565616134356565373865
3330336538643132373635646435646637643735633030660a643538356333356232663664316630
62326138353933333565626363376135393266666162643936643138303438393565383435333737
3239363964386630350a653736393435643239373732646637646433623332623336643338663839
38303433303634613238393233343230386636366137616231623131323861316537623035396630
32366666393633326665643063306132616631383966353737646439643162336435316538346265
66356539643530646338363862633963306634613136363337613738653162333163643130613035
31643330303437616431316165323365376364306664623936356334656362663165623239333231
66616662643539383164613234343733663236613733313633353961303038666266633739323830
64633165633832343130316338376638353631326362336663386431636631396334646430336562
34363666643035643439666362396363663936333763363263393734353438653931363735313032
35356132383131353538653338386566353032356635653233396264333139303632623939323664
64363833393230636666323531323630346361346336393239316661636537313030636532653733
61343338623861626336636636323162343666366238653730386464353736633338313034323633
31366133643561333464653830343465303836366537633866636335373536613430343339366436
64656162316437383264666264346633646238633535386165303936633139356436646162396135
62346163383834343332646437326439343238663334313730656462343530373063386236616135
35333862376466306637623063323631373530383631316561366365326162663466663338616238
36376363646466356565303963393562653534663736343730613536643936663836613732373161
30616232373134376366616263663866313233666437613235643263306332653130383730383937
64613330653735303734656235376262643432383736613939363963643438373239366137336336
61353761376332643961363330643364633230383339383234636234633766363037383565336630
66643431333634646365353233336166626665386339383864303634323335306334666536306339
65396238623236646464346531333736336538336463376632323663373634666464363737623661
35616236363634313130316639386333343264316533353131643431363766393632346531323133
32366132313737326462373635626461666365653339623630623966646663383261663664646338
63346537366463323361616530333834663238353461306133323464643563616335343762663735
34316435386362663564316536613134336337346135616434356433643066303831336533343432
39353938656461376234636561353061303339373039643831643466613861396562376162353161
31616432326136343238613734356432663539393039363530323030613436376536393734333035
33653262316639323935646165333337313466303963306132613730366530346532663833393537
33323839333431373437663039353063343133623831343465303338303437633331396132363634
61656231653133653866663135643436343639326431616432326235643131356136333266653333
62643232313231633234343937383365636431316437313463396432393265376164343836356265
38623335343961616339623961393164366439373439643566393931616237316437613735396634
64656363326465323466396466623734306639613063323437646431343833346337363937363334
33646339636132333735353464646431626564633862366139626636663161653931336634373430
6464626131353032393730623766393631366433636137393165
30356465363432393266326366393162306331353564346565663139336538613832396135306537
6262336438613736636266623766333233336631656661640a663838373936613666373133383632
32613962623330303964333161373165363164646266396461633233346136336630646631306564
3939363432643961610a313338306136303132666461393637643235623361393830653534643137
38623038613364396538353533336631633863343834333030653164303231346263316435356231
61383966663834333662393138303035613330366533663037326532356332633839363763356466
63396536323864383933346434363231396164613838316162656333626634373936643738386565
32326532346334343666383632306264636132613266333863626462366530306439613130333564
38623461613739343461386564323865316332653530623862313163396566616230653030653266
61613836303231363534393531373233363332316639316137653132336638356161333764373562
34363034353935633437353466303364653039626137383534633239316563373663623030646330
38383639326563643266346530616666646337373765643336326536303864613363663536643465
34343663373131323437666462303763366439356362306337356131383932353731393935343931
32613333373439343864653864636438646431306637613038313061663961653033643465643864
31333366663037373835326330316535326134393761333662326665333464666164623336666439
35313066303830343737343063396335383461653338303734353461643736343163346565323864
65356437376663386535646437653566326532346462313932346435393730366530646164323537
35363633333065356162653762623239343836356230303734316130383234313536623339626531
36643434336233626234333235636566313566353939616433373465666362316663353336653162
32346534333665353934653738343335356137643539376639323164393837383065323436363064
35643762656365313261373030336339616266333765613735346565623138366533626335633033
38373732626337353535656230636235373535363332376535343162666266393931303236653631
33653432633337306230396434316230663438363630313038386538663732393863633837313638
31663763303462343063613638663361626462623035336465383661646433643833636361346236
32386263326664363338633861643264383462313863666662623033323761613132666130353235
34633261303761623033633964323862666137333035306333323932346334356365333563316630
34313263306561303538353134613233313337323636623230616532383133613561333439663337
64376230363038306238656236653366353738633436623330383239373062313831393066313838
38653532356632383765613530373034396639633064383336393934353061656266633463336333
66356538616233313936376565386432303134306363343734333563333266643062666231303532
37363664396165653333656661376334333432376566666237316232643234386332323936346630
63303563363162356666643732366131393066333838363935613336353062633862353838613761
64333939663733643132366334653835633733623539393735313961613131303934363731663231
64313434613934336630306165343665376261353562656634356365613137346232633431343734
63363532313765646434346132313434373366656332353133383530306639633062633365613932
65383865643262666666383933363534623838653661376531303763623261323937626335373635
32623262343130383462316462643338363433653133353737633562353330313533303835666634
65386336616466316663356236316466353164353139326333316362303737343335353731366531
36653062323764316332353136343738616338313465333261363664663934393038343237313135
64363036636634646137616365366538613338343761646137623432396539363035663031313464
66646663373838316161643161613838343139346165663331373334383334316562353235633461
65316666616334653034393165616434306664633336613639636433663761363932396663396630
64383961623136623639306435663965303632663039653538646463663235653333306434313931
32636536643536636561663534346633663464333830646139383939626665393964353739616435
35663834393738646130316564633966653765303033356132393961653831646362

View File

@@ -5,7 +5,7 @@ project_directory:
- "{{ project_src }}"
docker_compose_file: "docker-compose-registry.yml"
docker_compose_file: "docker-compose-registry.yml.j2"
ports_tcp:

View File

@@ -1,7 +1,7 @@
vps-host ansible_connection=ssh ansible_host=51.222.107.37 ansible_port=2424 ansible_user=valentin
valentin-nas ansible_connection=ssh ansible_host=151.80.37.38 ansible_port=2424 ansible_user=valentin
drone-host ansible_connection=ssh ansible_host=151.80.37.38 ansible_port=2424 ansible_user=valentin
localhost ansible_host=127.0.0.1
localhost ansible_host=127.0.0.1 ansible_python_interpreter=/usr/bin/python3.10
[vps]
vps-host

View File

@@ -0,0 +1 @@
ovh

View File

@@ -11,7 +11,6 @@
src: main.tf.j2
dest: "{{ project_terraform }}/main.tf"
- name: Create cluster scaleway
community.general.terraform:
project_path: '{{ project_terraform }}'

View File

@@ -8,8 +8,91 @@
- name: Copy backend k8s yaml
template:
src: "{{ item }}.tf.j2"
src: "{{ item }}.yaml.j2"
dest: "{{ project_backend }}/{{ item }}.yaml"
with_items: "{{ backend_yaml }}"
- name: Create a k8s namespace
kubernetes.core.k8s:
name: testing
api_version: v1
kind: Namespace
state: present
- name: Apply deployment
kubernetes.core.k8s:
src: "{{ project_backend }}/backend-deployment.yaml"
state: present
- name: Apply services
kubernetes.core.k8s:
src: "{{ project_backend }}/backend-service.yaml"
state: present
- name: Apply configmap
kubernetes.core.k8s:
src: "{{ project_backend }}/env-configmap.yaml"
state: present
- name: Apply secret
kubernetes.core.k8s:
src: "{{ project_backend }}/secret.yaml"
state: present
- name: En attente d'une adresse IP publique du cluster
ansible.builtin.pause:
minutes: 2
- name: Get IP Cluster
block:
- name: Fetch services
set_fact:
service: "{{ query('kubernetes.core.k8s', kind='Service', namespace='testing') }}"
register: result
- name: debug services
debug:
msg: "{{ result.ansible_facts.service[0].status.loadBalancer.ingress[0].ip }}"
- name: Test API Backend
ansible.builtin.uri:
url: "http://{{ result.ansible_facts.service[0].status.loadBalancer.ingress[0].ip }}:{{ port }}/api/hello"
status_code: 200
method: GET
tags: ["services", "dns"]
- name: Add DNS for IP Cluster
block:
- name: Copy script add or update DNS
template:
src: "dns_add_update.py.j2"
dest: "{{ project_backend }}/dns_add_update.py"
- name: Copy requierements python
copy:
src: "requierements.txt"
dest: "{{ project_backend }}"
- name: Pip install requierements
shell: "pip3.10 install -r {{ project_backend }}/requierements.txt"
- name: En attente de l'installation des packages
ansible.builtin.pause:
minutes: 2
- name: Add or update DNS
shell: "python3.10 {{ project_backend }}/dns_add_update.py --ip {{ result.ansible_facts.service[0].status.loadBalancer.ingress[0].ip }}"
register: result
- name: Display result script
debug:
msg: "{{ result }}"
- name: Test API Backend with DNS
ansible.builtin.uri:
url: "http://api.valczeryba.ovh:{{ port }}/api/hello"
status_code: 200
method: GET
tags: [ "dns" ]

View File

@@ -0,0 +1,42 @@
---
# tasks file for create cluster k8s via terraform
- name: Apply deployment
kubernetes.core.k8s:
src: "{{ project_backend }}/backend-deployment.yaml"
state: absent
- name: Apply services
kubernetes.core.k8s:
src: "{{ project_backend }}/backend-service.yaml"
state: absent
- name: Apply configmap
kubernetes.core.k8s:
src: "{{ project_backend }}/env-configmap.yaml"
state: absent
- name: Apply secret
kubernetes.core.k8s:
src: "{{ project_backend }}/secret.yaml"
state: absent
- name: Create a k8s namespace
kubernetes.core.k8s:
name: testing
api_version: v1
kind: Namespace
state: absent
- name: Create directory {{ project_terraform }}
file:
path: "{{ project_backend }}"
state: absent

View File

@@ -19,3 +19,7 @@
when: item.name == "{{ project_name_tf }}"
with_items: "{{ (output.content |from_json).clusters }}"
- name: Copy kubeconfig
copy:
src: "{{ project_terraform }}/kubeconfig"
dest: "{{ project_kubeconfig }}"

View File

@@ -10,6 +10,15 @@
import_tasks: kubeconfig.yml
tags: ["create-cluster", "kubeconfig"]
- name: Deploy a API backend
import_tasks: deploy-backend.yml
tags: ["deploy"]
- name: Deploy a API backend
import_tasks: destroy-backend.yml
tags: ["destroy"]
- name: Destroy cluster k8s scaleway via terraform
import_tasks: destroy-cluster.yml
tags: ["destroy-cluster"]

View File

@@ -8,6 +8,7 @@ metadata:
labels:
io.kompose.service: backend
name: backend
namespace: testing
spec:
replicas: 1
selector:

View File

@@ -8,6 +8,7 @@ metadata:
labels:
io.kompose.service: backend
name: backend
namespace: testing
spec:
ports:
- name: "{{ port }}"

View File

@@ -0,0 +1,49 @@
# -*- encoding: utf-8 -*-
'''
First, install the latest release of Python wrapper: $ pip install ovh
'''
import json
import ovh
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--ip', help='foo help')
args = parser.parse_args()
# Instanciate an OVH Client.
# You can generate new credentials with full access to your account on
# the token creation page
client = ovh.Client(
endpoint='ovh-eu', # Endpoint of API OVH Europe (List of available endpoints)
application_key='{{ application_key }}', # Application Key
application_secret='{{ application_secret }}', # Application Secret
consumer_key='{{ consumer_key }}', # Consumer Key
)
result = client.get('/domain/zone/valczeryba.ovh/record',
fieldType='A',
subDomain='api',
)
# Pretty print
if len(result) > 0:
for idDns in result:
result = client.get('/domain/zone/valczeryba.ovh/record/{0}'.format(idDns))
if result["target"] != args.ip:
result = client.put('/domain/zone/valczeryba.ovh/record/{0}'.format(idDns),
subDomain='api',
target=args.ip,
)
print(result)
else:
result = client.post('/domain/zone/valczeryba.ovh/record',
fieldType='A',
subDomain='api',
target=args.ip,
ttl=None,
)
print(result)

View File

@@ -18,3 +18,5 @@ metadata:
labels:
io.kompose.service: backend-env
name: env
namespace: testing

View File

@@ -5,7 +5,6 @@ kind: Secret
metadata:
creationTimestamp: "2022-11-26T19:19:41Z"
name: regcred
namespace: default
resourceVersion: "17345802593"
namespace: testing
uid: {{ uid_secret }}
type: kubernetes.io/dockerconfigjson

View File

@@ -30,6 +30,6 @@
when: "project_env is defined"
- name: Copy docker compose server file
copy:
template:
src: "{{ docker_compose_file }}"
dest: "{{ project_src }}/docker-compose.yml"

View File

@@ -8,17 +8,17 @@
- name: Deploy services
import_tasks: deploy.yml
tags: ["deploy", "create"]
tags: ["configure", "create"]
- name: Start services
import_tasks: start.yml
tags: ["deploy", "start"]
tags: ["configure", "start"]
- name: stop services
import_tasks: stop.yml
tags: ["destroy", "stop"]
tags: ["deconfigure", "stop"]
- name: Remove services
import_tasks: remove.yml
tags: ["destroy"]
tags: ["deconfigure"]

View File

@@ -12,11 +12,19 @@ services:
ports:
- "54321:5432"
mongo:
image: mongo
env_file:
- .env
ports:
- "28017:27017"
redis:
image: redis/redis-stack-server:latest
ports:
- "63791:6379"
{% if covas_liquibase == true %}
liquibase:
build:
context: ./covas-liquibase
@@ -25,6 +33,7 @@ services:
- db
command:
- "update"
{% endif %}
volumes:
app-db-data:

View File

@@ -1,3 +1,6 @@
POSTGRES_PASSWORD={{ postgres_password }}
POSTGRES_USER={{ postgres_user }}
POSTGRES_DB={{ postgres_db }}
MONGO_INITDB_ROOT_USERNAME={{ mongo_user }}
MONGO_INITDB_ROOT_PASSWORD={{ mongo_password }}