Docker ps – objetizando las respuestas

El titulo alternativo era “Dale docker, devolveme un objeto en vez de un montón de caracteres con un formato horrible, estamos en 2019!” pero me parecía demasiado largo.

Este ultimo tiempo estuve intentando migrar a un rol un poco mas divertido, mas dinámico, a lo que creo que es el siguiente paso para un administrador. DevOps.
La palabra resuena mucho por todos lados, todas las empresas quieren dinamismo, escalabilidad, resiliencia, o minimamente poder decir que tienen un equipo “cloud”.

Pero hoy no vengo a hablar de DevOps, ni de corporaciones, ni de laburo. Hoy me desperté con ganas de compartir una cosita muy muy chiquita que me llevó unas cuantas horas para armar (y probar, y putear, y aprender), que probablemente pueda ayudar a cualquier otra persona que empiece a meterse en estas tecnologías tan divertidas y novedosas

Cuestión que estaba haciendo un cursito de Docker en udemy, levantando containers a lo pavote, redirigiendo puertos, apuntando storage, un quilombo bárbaro. Súper súper divertido, todo muy dinámico, hasta que quise ordenar el output de docker ps -a y me di cuenta de lo malacostumbrado que me tiene Powershell.

horrorosos strings 🙁

Cuando uso cualquier cmdlet (get-sarasa) recibo un objeto como respuesta. Un hermoso objeto con propiedades, que puedo usar para filtrar, para ordenar, para listar, para re-usar, todo de manera ordenada, bella y hermosa <3.
Lamentablemente con docker no es el caso 🙁
Como toda herramienta con base linuxera, la respuesta viene en strings, cadenas de caracteres sin inteligencia propia, que un administrador experimentado probablemente sepa parsear muy fácil y rápido con algún comandito sencillo y 100% desconocido para mi (porque soy un windows boy y no tengo los huevos para migrar por ahora) ASI QUE se me ocurrió armar una función sencillita y rápida para dejar de sufrir y poder matar containers sin tener que escribir mucho 😀

Asi que les presento ConvertFrom-DockerPS.

function ConvertFrom-DockerPS {
<#
.SYNOPSIS
Parses docker ps output to make it more readable
.DESCRIPTION
Pipe the results of Docker ps to this function and get the results in a nice, more powershelly format
.PARAMETER
.EXAMPLE
docker ps | ConvertFrom-DockerPS | select names, image, "container id", created # Get all running containers
docker ps -a | ConvertFrom-DockerPS | where {$_.status -like "exited*"} | docker # Get all closed containers
docker ps -a | ConvertFrom-DockerPS | where {$_.status -like "exited*"} | foreach { docker rm $_.'CONTAINER ID' } # remove all stopped containers
.NOTES
The core of the code was taken from https://www.reddit.com/r/PowerShell/comments/8p09mb/how_to_loop_through_docker_ps_a_with_powershell/ so
credits go to reddit user /u/Lee_Dailey (https://www.reddit.com/user/Lee_Dailey/), a great contributor on the powershell subreddit [grin]
I've also (forcefully) learned the how's and why's of using advanced functions, and the massive value of the ISE (which i will never use again, heh)
Thank you fellow admin for reading this ramblings, and party on!
#>
[CmdletBinding()]
param(
[Parameter(ValueFromPipeline=$true)]$adentro
)
begin{
#Declare the $final helper object
$final=@()
}
process{
$InStuff = $adentro.Split("`n").Trim("`r")
$OutStuff = $InStuff -replace '\s{23,}', ',,' -replace '\s{2,}', ','
#Added this to mitigate an issue with formatting on the ugly header
if ($OutStuff -like "*IMAGE,COMMAND,*") { $OutStuff= $OutStuff.replace(',,',',')}
$final+=$OutStuff
}
end{
#Convert it all to CSV and send it back
$final | ConvertFrom-Csv
}
}
Bello bello objeto 😀

Y ahora los dejo, que estoy súper manija con este curso, si tienen la oportunidad chusmeenlo, que esta muy bien explicado y tiene ejercicios concretos, una plataforma online para poder hacer (casi) todo sin instalar nada, y honestamente creo que el futuro de la administración de sistemas viene por este lado.

Hasta la próxima!



Actualizaciones y pequeños arreglos internos

Hoy no hay mucho que contar, estuve revisando el blog y los plugins, haciendo un poco de housekeeping, toqueteando un poquito por acá y por allá, cambiando algunas mínimas cosillas para que esto funcione mejor.

Si chusmean posts más viejos van a notar que saqué los bloques de código (que no funcionaban muy bien que digamos si querías copiar y pegar) y los cambie por ShortCodes apuntando a Gist, un mini repositorio para tirar codigo rápido en github)

Prometo volver a compartir scripts, o al menos alguna que otra novedad en el mundo de Powershell.

Pronto ™



Powershell ahora es Open Source!

Así es! A partir de ahora vas a poder hacer get-coso o set-sarasa desde cualquier sistema operativo!

Si, bueno, todavía esta en mega-beta y algunas cosas no están del todo soportadas, pero es un buen primer paso.

 

Pueden ver (y clonar/bajar/forkear) el repositorio oficial de powershell aca

 

Con un poco de suerte en un par de días tiro un update con algo mas técnico y copado, pero por ahora lo que tengo aun esta en el horno





Tenemos PowerShell 5.0!

Finalmente, después de mil vueltas, los muchachos del equipo de PowerShell largaron el Windows Management Framework 5.0, que incluye Powershell 5, PowerShell Desired State Configuration (DSC), Windows Remote Management (WinRM) y Windows Management Instrumentation (WMI).

Continua leyendo “Tenemos PowerShell 5.0!” »





Que hay de nuevo en Powershell 5.0

Hola de nuevo!

Ayer les adelanté la salida de Powershell 5.0. Hoy vengo a comentarles algunas de las novedades más interesantes que nos va a traer esta actualización.

Entre ellas:

  • Write-Information, un cmdlet nuevo que permite especificar como Powershell maneja la información estructurada en un comando en particular.
    Format-Table ahora alinea las columnas automáticamente evaluando los primeros 300ms de datos que recibe.
  • ConverFrom-String, un cmdlet nuevo usado para extraer y parsear estructuras de objetos basándose en contenidos de texto (Excelente para usar con comandos legacy, por ejemplo ipconfig).
  • Un nuevo módulo Microsoft.Powershell.Archive, el cual incluye nuevos cmdlets que permiten comprimir , extraer y modificar archivos y carpetas en ZIPs.
  • Un nuevo módulo, PackageManagement, que permite descubrir e instalar paquetes de software de internet (Como un apt-get para Windows :D).
  • Actualizaciones sobre los cmdlets New-Item, Remove-Item y Get-ChildItem para soportar la creación y administración de SymLinks. Por fin!
  • Get-ChildItem ahora soporta un nuevo parámetro, -Depth, con el cual podremos especificar qué tan profundo queremos que vaya la recursividad (con -Recurse).
  • Get-Clipboard y Set-Clipboard se agregaron al módulo Microsoft.Powershell.Utility, para mejorar el soporte de transferencia de contenido de y hacia las sesiones de Powershell. Estos cmdlets soportan imágenes, archivos de audio, listas de archivos y texto.
  • Clear-RecycleBin se agregó al módulo Microsoft.Powershell.Management, y permite vaciar la papelera de reciclaje (posta? no se me había ocurrido) de cualquier disco, sea interno o externo.
  • New-TemporaryFile, permite crear un archivo temporal (por defecto en %userprofile%\AppData\Local\Temp) perfecto para scripting.
  • La consola de Powershell ahora usa coloreo de sintaxis, como en el ISE (Integrated Scripting Environment)
  • Y, obviamente, el valor de $PSVersionTable.PSVersion se actualizo a 5.0

 

En cuanto salga el instalador oficial prometo hacer un update con el paso a paso (y los datos a tener en cuenta) para poder actualizar y empezar a disfrutar de todas estas funcionalidades nuevas.

Para chequear todas las novedades, podes revisar este link de TechNet

 

Gracias por visitar!

 





Se viene se viene…

Confirmado para finales de febrero: Poweshell 5.0!

En unos dias voy a armar la introduccion completa, con prerequisitos, instrucciones paso a paso para instalar, y las cositas nuevas que trae para hacernos la vida mas facil.
Por ahora eso es todo, nos vemos!





Ahora un 99% mas seguro!

Despues de mucho rato, me decidí por segurizar este humilde blog que, si bien esta mas orientado al scripting en Powershell, vive en una simpatica VPS de DigitalOcean, corriendo CentOS6 y hosteado en Apache.

Continua leyendo “Ahora un 99% mas seguro!” »





Como actualizar a PowerShell 4.0

Hoy vengo a mostrarles como actualizar a PowerShell 4.0

En esta ocasion voy a usar Windows Server 2008r2 como maquina de prueba.
Voy a verificar la version de PowerShell instalada mostrando la variable $PSVersionTable

$PSVersionTable
$PSVersionTable

Bien, ahora necesito saber si mi sistema operativo es de 32 o 64 bits. Para verificar esto, voy a revisar la variable $env:PROCESSOR_ARCHITECTURE

Continua leyendo “Como actualizar a PowerShell 4.0” »





Algunos de ustedes estan planeando en implementar un cambio hoy…

Les recomiendo que no lo hagan.

Feliz viernes de Solo Lectura!





Gracias por tanto, perdón por tan poco

Se que en este ultimo tiempo no estuve publicando mucho nada, pero a partir de ahora me comprometo a publicar algo al menos una vez por semana.

Lo que sea. Un super script que te solucione la vida o un pequeño y simpatico comando que te saque una sonrisa 🙂

Queridos lectores, no tengan miedo(?), no los voy a abandonar.