Skip to content

sergiusens/ubuconla-2024

Repository files navigation

Consistencia en el Desarrollo

Exportando esta presentación

Instalar emacs

snap install emacs --classic

Configurar 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)

Sobre mí

  • Gerente de Ingenieria en Canonical para Starcraft
  • Trabajando en el area de Experiencia de Desarrollo
  • 12 años en Canonical/Ubuntu

attachment:2024-08-30_11-44-16_SERGIO_SCHVEZOV-20240817-085032-DSCF0651.jpg

La aplicación

El código

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()

Rockcraft

import flask

app = flask.Flask(__name__)


@app.route("/")
def index():
    return "Hola UbuconLA\n"


if __name__ == "__main__":
    app.run()

Rockcraft

import flask

app = flask.Flask(__name__)


@app.route("/")
def index():
    return "Hola UbuconLA\n"


if __name__ == "__main__":
    app.run()

Sus requerimientos

En un requirements.txt

flask

Rockcraft

flask

Rockcraft

flask

Snapcraft

Proyecto

Definición de un snapcraft.yaml para la aplicación definida, en tres partes:

  • metadata
  • dominio de la aplicación
  • construcción

Metadata

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.io

Dominio de Aplicación

grade: stable
confinement: strict

apps:
  ubuconla-flask:
    command: bin/flask --app $SNAP/app run --port 6000
    daemon: simple
    plugs:
      - network-bind

Construcción

base: core24

platforms:
  amd64:

parts:
  flask-deps:
    source: .
    plugin: python
    python-requirements:
      - requirements.txt
  app:
    source: .
    plugin: dump
    prime:
      - app.py

Probando

Empaquetar e instalar

snapcraft pack
snap install ubuconla-flask_1.0_amd64.snap --dangerous

Correr esto

curl http://localhost:6000

… produce lo siguiente

#+RESULTS[cc4002e70690a62e0cce1625e395f933eb96ccb1]: snap-curl

Hola UbuconLA

Publicando

Registramos el nombre

snapcraft register ubuconla-flask

Publicar 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 edge

Lo anterior tiene un atajo

snapcraft upload ubuconla-flask_1.0_amd64.snap --release edge

Ciclo de vida cuando se constuye

attachment:2024-08-31_09-24-49_screenshot.png

Rockcraft

Proyecto

Definición de un rockcraft.yaml para la aplicación definida, nuevamente, en tres partes:

  • metadata
  • dominio de la aplicación
  • construcción

Metadata

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

Dominio de Aplicación

services:
  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: /tmp

Construcción

base: 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.py

Probando

Empaquetar, instalar y correr

rockcraft pack
podman load --input ubuconla-flask_1.0_amd64.rock
podman run -p 7000:7000 localhost/1.0:latest

Correr esto

curl http://localhost:7000

… produce lo siguiente

#+RESULTS[c150ef73f29577f617495e86a5df25bc6f47552d]: rock-curl

Hola UbuconLA

Rockcraft con extensiones

Proyecto

Definición reducida de un rockcraft.yaml para la aplicación definida, nuevamente, en tres partes:

  • metadata
  • dominio de la aplicación
  • construcción

Metadata

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

Dominio de Aplicación

attachment:2024-08-30_15-40-47_SERGIO_SCHVEZOV-20240817-085002-DSCF0648.jpg

Construcción

build-base: ubuntu@22.04
base: bare

platforms:
  amd64:

extensions:
  - flask-framework

Probando

Empaquetar, 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.0

Correr esto

curl http://localhost:8000

… produce lo siguiente

#+RESULTS[23d82ffa8a8a75f20c8236732a3440780d3ea4de]: rock-extension-curl

Hola UbuconLA

Comandos

Para tener un punto de partida

rockcraft init --profile flask-framework

Para ver que hizo la extension

rockcraft expand-extensions

Charmcraft

Proyecto

Definición reducida de un charmcraft.yaml para la aplicación definida, nuevamente, en tres partes:

  • metadata
  • dominio de la aplicación
  • construcción

Usando templates

charmcraft init --profile flask-framework

Esto crea:

  • charmcraft.yaml
  • requirements.txt
  • src/charm.py

Metadata

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.

Dominio de Aplicación

type: charm

Construcción

bases:  # platform
  - build-on:
    - name: ubuntu
      channel: "22.04"
    run-on:
    - name: ubuntu
      channel: "22.04"

extensions:
  - flask-framework

Probando

Construir

Empaquetar, instalar y correr

charmcraft fetch-libs
charmcraft pack

microk8s y juju

… 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-flask

Juju deploy y probar

Ponemos 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.0

Hacemos deploy

juju deploy ./ubuconla-flask_ubuntu-22.04-amd64.charm ubuconla-flask \
     --resource flask-app-image=localhost:32000/ubuconla-flask:1.0

Al 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 5s

Luego corremos

curl <ip>:8000

… y vemos

Hola UbuconLA

Publicando

Registramos el nombre

charmcraft register ubuconla-flask

Publicar 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

Tu propio Craft

Meta

La presentación y estos ejemplos se pueden encontrar en

git clone https://github.com/sergiusens/ubuconla-2024

Fin

attachment:2024-08-30_18-07-13_SERGIO_SCHVEZOV-20240817-084552-DSCF0630.jpg

Configuración

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published