Instalar emacs
snap install emacs --classicConfigurar org-mode
(use-package org)Configurar org-re-reveal
(use-package org-re-reveal
:ensure t)Exportar la presentación, seleccionando reveal.js (las fotos de adorno
no están)
(org-export-dispatch)Exportar los ejemplos
(org-babel-tangle)- Gerente de Ingenieria en Canonical para Starcraft
- Trabajando en el area de Experiencia de Desarrollo
- 12 años en Canonical/Ubuntu
Una applicación basada en Flask tan compleja como necesaria y simple
que se pueda, app.py en la raíz de todos los proyectos.
import flask
app = flask.Flask(__name__)
@app.route("/")
def index():
return "Hola UbuconLA\n"
if __name__ == "__main__":
app.run()import flask
app = flask.Flask(__name__)
@app.route("/")
def index():
return "Hola UbuconLA\n"
if __name__ == "__main__":
app.run()import flask
app = flask.Flask(__name__)
@app.route("/")
def index():
return "Hola UbuconLA\n"
if __name__ == "__main__":
app.run()En un requirements.txt
flask
flask
flask
Definición de un snapcraft.yaml para la aplicación definida, en tres partes:
- metadata
- dominio de la aplicación
- construcción
name: ubuconla-flask
version: 1.0
summary: Devolver un hola a la audiencia
description: |
Aplicación de ejemplo con ningun fin productivo o de lazer, un mero
aplicativo con fines educativos.
contact: sergio.schvezov@canonical.com
issues: https://forum.snapcraft.io
website: https://forum.snapcraft.iograde: stable
confinement: strict
apps:
ubuconla-flask:
command: bin/flask --app $SNAP/app run --port 6000
daemon: simple
plugs:
- network-bindbase: core24
platforms:
amd64:
parts:
flask-deps:
source: .
plugin: python
python-requirements:
- requirements.txt
app:
source: .
plugin: dump
prime:
- app.pyEmpaquetar e instalar
snapcraft pack
snap install ubuconla-flask_1.0_amd64.snap --dangerousCorrer esto
curl http://localhost:6000… produce lo siguiente
#+RESULTS[cc4002e70690a62e0cce1625e395f933eb96ccb1]: snap-curl
Hola UbuconLA
Registramos el nombre
snapcraft register ubuconla-flaskPublicar implicar crear una revisión y despues asignar un canal a esa revision
snapcraft upload ubuconla-flask_1.0_amd64.snap
snapcraft release ubuconla-flask 1 edgeLo anterior tiene un atajo
snapcraft upload ubuconla-flask_1.0_amd64.snap --release edgeDefinición de un rockcraft.yaml para la aplicación definida,
nuevamente, en tres partes:
- metadata
- dominio de la aplicación
- construcción
name: ubuconla-flask
version: 1.0
summary: Devolver un hola a la audiencia
description: |
Aplicación de ejemplo con ningun fin productivo o de lazer, un mero
aplicativo con fines educativos.
contact: sergio.schvezov@canonical.com
issues: https://forum.snapcraft.ioservices:
flask-app:
override: replace
command: flask --app /app run --host 0.0.0.0 --port 7000
startup: enabled
on-success: shutdown
on-failure: shutdown
working-dir: /tmpbase: ubuntu@22.04
platforms:
amd64:
parts:
flask-deps:
source: .
plugin: python
python-requirements:
- requirements.txt
stage-packages:
- base-files
- python3.10
- python3-venv
app:
source: .
plugin: dump
prime:
- app.pyEmpaquetar, instalar y correr
rockcraft pack
podman load --input ubuconla-flask_1.0_amd64.rock
podman run -p 7000:7000 localhost/1.0:latestCorrer esto
curl http://localhost:7000… produce lo siguiente
#+RESULTS[c150ef73f29577f617495e86a5df25bc6f47552d]: rock-curl
Hola UbuconLA
Definición reducida de un rockcraft.yaml para la aplicación definida,
nuevamente, en tres partes:
- metadata
- dominio de la aplicación
- construcción
name: ubuconla-flask
version: 1.0
summary: Devolver un hola a la audiencia
description: |
Aplicación de ejemplo con ningun fin productivo o de lazer, un mero
aplicativo con fines educativos.
contact: sergio.schvezov@canonical.com
issues: https://forum.snapcraft.iobuild-base: ubuntu@22.04
base: bare
platforms:
amd64:
extensions:
- flask-frameworkEmpaquetar, instalar y correr
rockcraft pack
rockcraft.skopeo --insecure-policy copy \
oci-archive:ubuconla-flask_1.0_amd64.rock \
docker-daemon:ubuconla-flask:1.0
docker run -d -p 8000:8000 ubuconla-flask:1.0Correr esto
curl http://localhost:8000… produce lo siguiente
#+RESULTS[23d82ffa8a8a75f20c8236732a3440780d3ea4de]: rock-extension-curl
Hola UbuconLA
Para tener un punto de partida
rockcraft init --profile flask-framework
Para ver que hizo la extension
rockcraft expand-extensionsDefinición reducida de un charmcraft.yaml para la aplicación definida,
nuevamente, en tres partes:
- metadata
- dominio de la aplicación
- construcción
charmcraft init --profile flask-frameworkEsto crea:
charmcraft.yamlrequirements.txtsrc/charm.py
name: ubuconla-flask
summary: Devolver un hola a la audiencia
description: |
Aplicación de ejemplo con ningun fin productivo o de lazer, un mero
aplicativo con fines educativos.type: charmbases: # platform
- build-on:
- name: ubuntu
channel: "22.04"
run-on:
- name: ubuntu
channel: "22.04"
extensions:
- flask-frameworkEmpaquetar, instalar y correr
charmcraft fetch-libs
charmcraft pack… instalamos snaps
snap install microk8s --channel 1.30-strict/stable
snap install juju --channel 3.5/stable… configuramos microk8s
sudo usermod -a -G snap_microk8s sergiusens
newgrp snap_microk8s
sudo microk8s enable hostpath-storage
sudo microk8s enable dns
sudo microk8s enable registry
sudo microk8s enable ingress… y inicializamos juju
juju bootstrap microk8s ubuconla
juju add-model ubuconla-flaskPonemos el rock anterior en docker
rockcraft.skopeo --insecure-policy copy --dest-tls-verify=false \
oci-archive:ubuconla-flask_1.0_amd64.rock \
docker://localhost:32000/ubuconla-flask:1.0Hacemos deploy
juju deploy ./ubuconla-flask_ubuntu-22.04-amd64.charm ubuconla-flask \
--resource flask-app-image=localhost:32000/ubuconla-flask:1.0Al final de ese paso vemos
Deploying "ubuconla-flask" from local charm "ubuconla-flask", revision 0 on ubuntu@22.04/stable
Vemos el estado
juju status --watch 5sLuego corremos
curl <ip>:8000… y vemos
Hola UbuconLA
Registramos el nombre
charmcraft register ubuconla-flaskPublicar implicar crear una revisión, subir la imagen OCI como un recurso del charm y despues asignar un canal a esa tupla de revisiones
charmcraft upload ubuconla-flask_ubuntu-22.04-amd64.charm
charmcraft upload-resource \
ubuconla-flask \
flask-app-image \
--image=oci-archive:ubuconla-flask_1.0_amd64.rock \
charmcraft release ubuconla-flask --revision 1 --channel edge \
--resource flask-app-image:1- Código https://github.com/canonical/craft-application
- Crear
AppMetadata, minimamente, para dar identidad especial:- BuildPlanner
- Project
- Implementar
PackageService
La presentación y estos ejemplos se pueden encontrar en
git clone https://github.com/sergiusens/ubuconla-2024