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
290
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ansible and Scala Projects
Shannon
May 30, 2019
More Decks by Shannon
See All by Shannon
Signify Bootcamp
signify
0
290
Event Sourcing Blockchains at TokenAnalyst
signify
0
150
The Last Frontier and Beyond
signify
0
150
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
100
Writing human readable tests using Scala
signify
0
160
Making Contracts Smart, Secure and Functional with DAML and Scala
signify
0
140
Automatic differentiation in Scala by Xiayun Sun
signify
0
420
Other Decks in Technology
See All in Technology
ローカルLLMとLINE Botの組み合わせ その3 / LINE DC Generative AI Meetup #8
you
PRO
0
130
SRE依存からの脱却 運用を開 発チームへ移す、 フルサイ クル開 発体制の実践
joooee0000
0
2.4k
AI時代のエンジニアキャリアについて今一度考える
sakamoto_582
2
1.5k
AI Driven AI Governance
pict3
0
310
地域 SRE コミュニティ最前線 / SRE NEXT 2026 Discussion Night Track C
muziyoshiz
0
190
プロンプト_きのこカンファレンス2026_LT
yurufuwahealer
0
150
最近評価が難しくなった
maroon8021
0
260
次世代ランサムウェア対策の考察 / 20260704 Mitsutoshi Matsuo
shift_evolve
PRO
5
1.7k
なぜ私たちのSREプラクティスはなかなか機能しないのか 〜システムより先に組織を見る〜 / Why our SRE practices aren't really working
vtryo
3
3.3k
そのタスクオンスケですか?
poropinai1966
0
150
貴方はどのエンジニアリングを磨くのか
hatyibei
0
110
AIDLC_ヤフーショッピングの取り組み
lycorptech_jp
PRO
0
580
Featured
See All Featured
Embracing the Ebb and Flow
colly
88
5.1k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
260
Building an army of robots
kneath
306
46k
Amusing Abliteration
ianozsvald
1
220
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
KATA
mclloyd
PRO
35
15k
Everyday Curiosity
cassininazir
0
250
Chasing Engaging Ingredients in Design
codingconduct
0
230
Building the Perfect Custom Keyboard
takai
2
810
Are puppies a ranking factor?
jonoalderson
1
3.7k
4 Signs Your Business is Dying
shpigford
187
22k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
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