Si defines tu infraestructura como código, ¿no debería la automatización de su flujo de trabajo utilizar el mismo enfoque de código? Así es como tubo de flujo obras. Definir flujos de trabajo con clorhidrato (lenguaje de configuración de HashiCorp), luego ejecútelos usando un único binario que implemente localmente, en la nube o en cualquier Canalización de CI/CD. Flowpipe incorpora los mismos ingredientes arquitectónicos que encontrará en cualquier herramienta de flujo de trabajo: canalizaciones, pasos, desencadenadores, flujo de control. Y se integra con todo lo que esperarías de una herramienta de esta categoría.
Pero esto no es ClickOps. No utiliza una herramienta de diagramación para crear integraciones. Las definiciones de canalización son artefactos de código que viven en repositorios como ciudadanos de primera clase del ecosistema de software moderno: controlados por versiones y colaborativos.
Estos canales pueden orquestar flujos de trabajo utilizando una variedad de métodos. ¿Necesita realizar un seguimiento de los problemas abiertos en GitHub y luego notificar a Slack? Hay más de una forma de recopilar los datos de GitHub que enviarás a Slack:
- en un tubería paso. Utilice la biblioteca de GitHub
list_issues
canalización, que encapsula un paso http que llama a la API de GitHub. - en un consulta paso. Utilice el complemento GitHub de Steampipe para consultar problemas abiertos en un repositorio.
- en un función paso. Escriba una función compatible con AWS-Lambda, en Pitón o javascriptpara llamar a la API de GitHub.
- en un envase paso, empaquete la CLI de GitHub en un contenedor y ejecute
gh issue list
de esa manera.
¿Por qué todas estas opciones? El viejo mantra de Perl «Hay más de una forma de hacerlo» también se aplica aquí. Flowpipe es una encarnación moderna de la «cinta adhesiva para Internet»: un kit flexible lleno de herramientas útiles que funcionan bien juntas. Para cualquier integración determinada, elija las más apropiadas en ese contexto, las que aprovechen los activos existentes o las que sean más convenientes. Nunca estás bloqueado. Siempre hay una manera de hacer el trabajo mientras navega por un panorama complejo de nubes y servicios diversos e interconectados.
¡Muéstrame el código!
Aquí hay cuatro formas de recopilar información sobre problemas de GitHub.
Enumere los problemas de GitHub al utilizar las bibliotecas GitHub y Slack de Flowpipe
tubo de flujo modificaciones Proporcionar tuberías reutilizables. En este caso, hay modificaciones de biblioteca que admiten ambas operaciones necesarias: enumerar problemas de GitHub y notificar a Slack. Entonces podemos usar esas bibliotecas en un par de pasos de canalización.
pipeline "list_open_issues_and_notify_slack" { step "pipeline" "list_issues" { pipeline = github.pipeline.list_issues # use the github library mod args = { issue_state: "OPEN" repository_owner: "turbot" repository_name: "steampipe" } } step "pipeline" "notify_slack" { pipeline = slack.pipeline.post_message # use the github slack mod args = { token = var.slack_token channel = var.slack_channel message = step.pipeline.list_issues.value } }
La documentación para el GitHub y Flojo mods enumera las canalizaciones disponibles y, para cada canalización, los requisitos y opcionales parámetros. Es sencillo utilizar los mods Flowpipe publicados e igualmente sencillo crear y usar tu propio.
Enumere los problemas de GitHub utilizando el complemento GitHub de Steampipe
Flowpipe no requiere Steampipe, pero lo aceptará felizmente. Si eres capaz de usar ambos juntos, obtendrás un poder inmenso. El complemento GitHub es solo uno de muchos contenedores para un creciente ecosistema de fuentes de datos, cada uno modelado como tablas con las que puede consultar SQL en un paso de consulta.
pipeline "list_open_issues_and_notify_slack" { step "query" "query_list_issues" { connection_string = "postgres://steampipe@localhost:9193/steampipe" sql = <<EOQ select * from github_issue where repository_full_name="turbot/steampipe" and state="OPEN" EOQ } step "pipeline" "notify_slack" { # use the library mod as above, or another method } }
Por cierto, todo lo que necesitas aquí es una cadena de conexión. Si te conectas a Steampipe, puedes acceder a su ecosistema de complementos, pero si los datos que buscas se encuentran en otra base de datos, puedes usar SQL para consultarlos desde allí.
Enumere los problemas de GitHub utilizando una función compatible con Lambda
¿Qué pasa si no hay un mod de biblioteca ni un complemento Steampipe para tu caso de uso? Otra opción: llamar a una función en un paso de función.
pipeline "list_open_issues_and_notify_slack" { step "function" "list_issues" { src = "https://www.infoworld.com/article/3712125/./functions" runtime = "python:3.10" handler = "list_issues.handler" event = { owner = "turbot" repo = "steampipe" } }
Aquí está la función.
def handler(event, context): owner = event['owner'] repo = event['repo'] url = f"https://api.github.com/repos/{owner}/{repo}/issues?state=closed" response = requests.get(url) return { 'issues': response.json() }
Estas funciones, que puede escribir en Python o JavaScript, son compatibles con las funciones de AWS Lambda: controladas por eventos, sin estado y de corta duración. Y en comparación con las funciones de AWS Lambda, son mucho más fáciles de escribir y probar. Incluso puedes editar tus funciones en vivo porque cuando realizas cambios, Flowpipe los detecta y aplica automáticamente.
Enumerar problemas de GitHub usando la CLI de GitHub
Las interfaces de línea de comandos son herramientas fundamentales para la integración de DevOps. Puede empaquetar una CLI en un contenedor y usarla en un paso de contenedor.
pipeline "list_open_issues_and_notify_slack" { step "container" "list_issues" { image = "my-gh-image" cmd = ["/container-list-issues.sh"] env = { GITHUB_TOKEN = var.access_token GH_COMMAND = var.gh_command } }
Probablemente sea excesivo en este caso, pero la capacidad de utilizar comandos en contenedores de esta manera garantiza la máxima flexibilidad y portabilidad.
¿Por qué el lenguaje de configuración de HashiCorp?
El lenguaje de configuración de HashCorp (HCL) es, en primer lugar, familiar para los profesionales de Devops que lo utilizan para expresar configuraciones de Terraform. Pero el lenguaje también resulta ideal para el flujo de trabajo. El gráfico acíclico dirigido (DAG) en el núcleo de su modelo de ejecución determina el orden de las operaciones en función de las dependencias de recursos, a diferencia de muchos lenguajes de programación donde dichas dependencias deben administrarse explícitamente.
Si el segundo paso de un flujo de trabajo se refiere al resultado del primer paso, Flowpipe secuencia implícitamente los pasos. La concurrencia también está implícita. Los pasos del flujo de trabajo que no dependen de otros pasos se ejecutan automáticamente en paralelo, sin necesidad de sintaxis especial. De esta forma, puede crear flujos de trabajo complejos y altamente paralelos en un estilo declarativo que sea fácil de leer y escribir. Por ejemplo, aquí hay un paso que itera sobre una lista de usuarios y utiliza un http paso para llamar a una API para cada usuario.
step "http" "add_a_user" { for_each = ["Jerry", "Elaine", "Newman"] url = "https://myapi.local/api/v1/user" method = "post" request_body = jsonencode({ user_name = "${each.value}" }) }
Debido a que las cosas no siempre salen según lo planeado, el estilo declarativo de Flowpipe se extiende a manejo de errores y reintentos.
step "http" "my_request" { url = "https://myapi.local/subscribe" method = "post" body = jsonencode({ name = param.subscriber }) retry { max_attempts = 5 strategy = "exponential" min_interval = 100 max_interval = 10000 } }
Por lo general, necesitará descomprimir los resultados de un paso en una canalización y luego transformar los datos para alimentarlos al siguiente paso. Entre el Funciones HCL compatibles con Terraform soportados por Flowpipe son funciones de colección que funcionan con listas y mapas.
pipeline "get_astronauts" { step "http" "whos_in_space" { url = "http://api.open-notify.org/astros" method = "get" } output "method_1" { value = [for o in step.http.whos_in_space.response_body.people: po.name] } output "method_2" { value = step.http.whos_in_space.response_body.people[*].name } }
Aquí está el resultado del comando. flowpipe pipeline run get_astronauts
.
Los dos métodos son formas equivalentes de iterar sobre la lista de mapas devueltos por la API y extraer el name
campo de cada uno. El primer método utiliza el versátil para Expresión que puede funcionar con listas, conjuntos, tuplas, mapas y objetos. El segundo método da un resultado idéntico utilizando el salpicar expresión, que puede simplificar el acceso a campos dentro de elementos de listas, conjuntos y tuplas.
Horarios, eventos y desencadenantes
Al igual que con otros motores de flujo de trabajo, puede activar una canalización de Flowpipe según un cronograma definido por cron.
trigger "schedule" "daily_3pm" { schedule = "* 15 * * *" pipeline = pipeline.daily_task }
Pero también querrás reaccionar inmediatamente a eventos como envíos de código, cambios de infraestructura o mensajes de Slack. Por lo tanto, Flowpipe proporciona un activador basado en HTTP para reaccionar a un webhook entrante ejecutando una canalización.
trigger "http" "my_webhook" { pipeline = pipeline.my_pipeline args = { event = self.request_body } }
Para usar disparadores, ejecute Flowpipe en modo servidor.
La zona de Ricitos de Oro
Flowpipe ocupa un punto medio entre herramientas como Zapier o IFTTT, que requieren poco o ningún código para cosas simples, y herramientas como N8N o Windmill, que pueden hacer cosas complejas pero requieren mucho código. Usted expresa canalizaciones, pasos y desencadenantes en el lenguaje de configuración estándar de Devops: HCL. Según sea necesario, aumenta ese código con SQL, Python, JavaScript, bash o cualquier cosa que pueda empaquetar en un contenedor.
Usted coordina todos esos recursos utilizando un modelo de ejecución común integrado en un único binario que se ejecuta como una CLI y/o como un servidor que programa tareas y escucha webhooks. De cualquier manera, puede ejecutar ese único binario localmente o implementarlo en cualquier nube o canal de CI/CD.
Para empezar, descargar la herramientarevisar la modificaciones de biblioteca y muestrasy corre por el tutorial.
¿El estilo declarativo de reenvío de código de Flowpipe resonará en los scripters devops? Pruébalo y Haznos saber cómo va. Y si está dispuesto a contribuir con Flowpipe Motor con licencia AGPL o Mods con licencia de Apache¡siempre estaremos felices de recibir solicitudes de extracción!
Copyright © 2024 IDG Communications, Inc.