Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ansible and Scala Projects
Search
Shannon
May 30, 2019
Technology
0
280
Ansible and Scala Projects
Shannon
May 30, 2019
Tweet
Share
More Decks by Shannon
See All by Shannon
Signify Bootcamp
signify
0
250
Event Sourcing Blockchains at TokenAnalyst
signify
0
140
The Last Frontier and Beyond
signify
0
130
Jon Pither
signify
0
250
How to write like Cats
signify
0
250
Kubernetes as a Streaming Data Platform with Kafka, Spark, and Scala
signify
0
82
Writing human readable tests using Scala
signify
0
150
Making Contracts Smart, Secure and Functional with DAML and Scala
signify
0
110
Automatic differentiation in Scala by Xiayun Sun
signify
0
380
Other Decks in Technology
See All in Technology
ZOZOマッチのアーキテクチャと技術構成
zozotech
PRO
3
1.5k
Flutterでキャッチしないエラーはどこに行く
taiju59
0
220
5年目から始める Vue3 サイト改善 #frontendo
tacck
PRO
3
210
ChatGPTとPlantUML/Mermaidによるソフトウェア設計
gowhich501
1
130
フィンテック養成勉強会#56
finengine
0
140
LLMを搭載したプロダクトの品質保証の模索と学び
qa
0
1k
Language Update: Java
skrb
2
290
AWSを利用する上で知っておきたい名前解決のはなし(10分版)
nagisa53
10
3k
人工衛星のファームウェアをRustで書く理由
koba789
13
7.1k
現場で効くClaude Code ─ 最新動向と企業導入
takaakikakei
1
210
ガチな登山用デバイスからこんにちは
halka
1
230
落ちる 落ちるよ サーバーは落ちる
suehiromasatoshi
0
150
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
920
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
How STYLIGHT went responsive
nonsquared
100
5.8k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
The Cult of Friendly URLs
andyhume
79
6.6k
For a Future-Friendly Web
brad_frost
180
9.9k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Making Projects Easy
brettharned
117
6.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
111
20k
Transcript
Ansible for Scala projects José Miguel 0pt1mates | @jm2dev 1
/ 39
Introducción ▶ Who am I? ▶ What do I do?
0pt1mates | @jm2dev 2 / 39
What do I want Make everything as simpler as possible,
but not simpler. Albert Einstein 0pt1mates | @jm2dev 3 / 39
Motivation ▶ Don’t repeat yourself ▶ Knwoledge sharing 0pt1mates |
@jm2dev 4 / 39
A definition Automated provisioning, also called self-service provision- ing, is
the ability to deploy an information technology or telecommunications service by using predefined proce- dures that are carried out electronically without requiring human intervention. 0pt1mates | @jm2dev 5 / 39
Options ▶ ansible ▶ cfengine ▶ chef ▶ puppet ▶
salt 0pt1mates | @jm2dev 6 / 39
Ansible ▶ Simple requisites ▶ ssh ▶ python ▶ Simple
language ▶ yaml 0pt1mates | @jm2dev 7 / 39
Setup ▶ python 3 with virtualenv mkdir proyecto cd proyecto
python3 -m venv venv 0pt1mates | @jm2dev 8 / 39
cat requirements.txt ansible 0pt1mates | @jm2dev 9 / 39
Inventario: cat hosts [local] 127.0.0.1 0pt1mates | @jm2dev 10 /
39
Tasks for a dev ▶ software installation ▶ copy files
▶ etc Our requirements for a Scala project: ▶ git ▶ openjdk ▶ sbt 0pt1mates | @jm2dev 11 / 39
Role ▶ Group tasks. mkdir -p roles/programador/tasks touch roles/programador/tasks/main.yml 0pt1mates
| @jm2dev 12 / 39
cat programador/tasks/main.yml --- - name: Update pacman cache become: true
pacman: update_cache: yes - name: Install packages become: true pacman: name: "{{ item }}" state: present 0pt1mates | @jm2dev 13 / 39
cat programador.yml --- - name: Preparacion proyecto X hosts: local
connection: local roles: - programador 0pt1mates | @jm2dev 14 / 39
Does it work? cd proyecto source venv/bin/activate pip install -r
requirements.txt ansible-playbook -i hosts programador.yml 0pt1mates | @jm2dev 15 / 39
Role per project ▶ barebone project ▶ more things to
automate? 0pt1mates | @jm2dev 16 / 39
Tasks version 2 Let’s clean in it a bit mv
roles/programador/tasks/main.yml \ roles/programador/tasks/paquetes.yml 0pt1mates | @jm2dev 17 / 39
cat roles/programador/tasks/sbt.yml --- - name: SBT config plugins directory file:
path: "{{ home_dir }}/.sbt/1.0/plugins" recurse: yes state: directory mode: 0755 - name: SBT Global plugins copy: src: files/plugins.sbt 0pt1mates | @jm2dev 18 / 39
Those variables touch group_vars/all --- home_dir: "{{ lookup('env', 'HOME') }}"
0pt1mates | @jm2dev 19 / 39
Configuring SBT (II) mkdir -p roles/programador/files touch roles/programador/files/plugins.sbt touch roles/programador/files/repositories.sbt
0pt1mates | @jm2dev 20 / 39
cat roles/programador/files/plugins.sbt addSbtPlugin("org.ensime" % "sbt-ensime" % "2.1.0") addSbtPlugin("io.get-coursier" % "sbt-coursier"
% "1.1.0-M1 addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.5.1") 0pt1mates | @jm2dev 21 / 39
cat roles/programador/files/repositories.sbt [repositories] local my-ivy-proxy-releases: https://nexus.proyecto.xyz/content [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sb my-maven-proxy-releases: https://nexus.proyecto.xyz/conte 0pt1mates
| @jm2dev 22 / 39
cat roles/programador/tasks/git.yml --- - name: Git config directory file: path:
"{{ home_dir }}/.config/git" state: directory mode: 0755 - name: Git setup template: src: templates/git_config.j2 dest: "{{ home_dir }}/.config/git/config" 0pt1mates | @jm2dev 23 / 39
Configuring GIT (II) What are templates? mkdir -p roles/programador/templates touch
roles/programador/templates/git_config.j2 0pt1mates | @jm2dev 24 / 39
cat roles/programador/templates/gitconfig .j2 [user] name = {{ git_username }} email
= {{ git_email }} [color] ui = auto [push] default = simple [core] 0pt1mates | @jm2dev 25 / 39
Configuring GIT (IV) And those are … variables? mkdir -p
roles/programador/vars touch roles/programador/vars/main.yml 0pt1mates | @jm2dev 26 / 39
cat roles/programador/vars/main.yml --- git_username: Jose Miguel Martinez Carrasco git_email:
[email protected]
0pt1mates | @jm2dev 27 / 39
Developer tasks (II) And the new main.yml version: --- -
import_tasks: paquetes.yml - import_tasks: git.yml - import_tasks: sbt.yml 0pt1mates | @jm2dev 28 / 39
Porject X role ▶ simple & functional setup ▶ extensible
0pt1mates | @jm2dev 29 / 39
Tasks mkdir -p roles/proyectoX/tasks touch roles/proyectoX/tasks/main.yml touch roles/proyectoX/tasks/database.yml --- -
import_tasks: database.yml 0pt1mates | @jm2dev 30 / 39
A database --- - name: Update pacman cache become: true
pacman: update_cache: yes - name: Install postgresql become: true pacman: name: "{{ item }}" state: present 0pt1mates | @jm2dev 31 / 39
Fatjar ▶ package our service as a fatjar ▶ run
it locally as a service so we can ▶ run integration/acceptance tests 0pt1mates | @jm2dev 32 / 39
Systemd unit mkdir -p roles/fatjar/{tasks,templates,vars} touch roles/fatjar/tasks/main.yml touch roles/fatjar/templates/fatjar.service.j2 touch
roles/fatjar/vars/all 0pt1mates | @jm2dev 33 / 39
cat roles/fatjar/vars/all service_user: "hello" service_name: "Hello" service_install_dir: "/opt/{{ service_name }}"
bin_location: "{{ service_install_dir }}/bin/server" 0pt1mates | @jm2dev 34 / 39
cat roles/fatjar/templates/fatjar.service.j2 [Unit] Description={{ service_name }} After=syslog.target [Service] ExecStart={{ bin_location
}} User={{ service_user }} [Install] WantedBy=multi-user.target 0pt1mates | @jm2dev 35 / 39
cat roles/fatjar/tasks/main.yml - name: Create systemd directory file: path: "{{
service_install }}" state: directory mode: 0755 - name: Install fatjar service copy: src: "item" dest: "{{ service_install }}" with_items: 0pt1mates | @jm2dev 36 / 39
Playbook --- - name: Preparacion proyecto X hosts: local connection:
local roles: - programador - proyectoX - fatjar 0pt1mates | @jm2dev 37 / 39
Finally curl localhost:8080/hello/scalaInTheCity { "message": "Hello, Scala in the City"
} 0pt1mates | @jm2dev 38 / 39
Contact @jm2dev 0pt1mates | @jm2dev 39 / 39