Ago 24 2021

Ansible 6X más Rápido con estos 3 Consejos

Published by under Ansible

Ansible es generalmente lento porque se conecta al host remoto para cada tarea que realiza. Hagamos algunas pruebas en un rol pequeño que obtiene la última versión de kubectl (cliente de Kubernetes) de una URL e instala el binario.
Veamos 3 formas sencillas de acelerar Ansible y obtener mejores tiempos de ejecución.

- name: Recuperando la última versión
   uri:
     url: "{{kubectl_url}}/stable.txt"
     return_content: yes
     status_code: 200
   register: kubectl_latest_version
 

 - name: Descarga del binario de kubectl
   get_url:
     url: "{{kubectl_url}}/v{{ kubectl_version |
       default(kubectl_latest_version.content | 
       regex_replace('^v', '')) }}/bin/{{kubectl_os}}/{{kubectl_arch}}/kubectl"
     dest: "/usr/local/bin"
     mode: '755'
     owner: "{{ kubectl_owner }}"
     group: "{{ kubectl_group }}"


Tiempo de ejecución con configuración predeterminada: 32,2s

Acelerar Ansible


Caché de Facts Ansible

Recuperar los facts es la primera tarea que Ansible realiza cuando se conecta a un host y lo menos que podemos decir es que es lento. Muy lento. El rendimiento también es un problema cuando se escribe un playbook que se prueba una y otra vez.

Afortunadamente, es posible hacer ajustes para ahorrar tiempo agregando estas pocas líneas en ansible.cfg:

# implementación de caché y configuración de facts
# para un mejor rendimiento

gathering = smart
gather_subset = !hardware,!facter,!ohai

fact_caching_connection = /tmp/ansible_fact_cache
fact_caching = jsonfile

# expira la caché después de 2 horas
fact_caching_timeout = 7200

Según el archivo de ejemplo ansible.cfg disponible en línea, smart gathering «recupera de forma predeterminada, pero solo si aún no lo ha hecho».

Los facts de hardware tardan más en recopilarse, pero es posible que los necesite, especialmente si sus funciones se basan en interfaces de red. Es posible que reciba un error «ansible_eth0 is undefined», por ejemplo.
Facter y ohai están relacionados con los clientes Puppet y Chef.

Y el más eficiente es el caché, por supuesto, que almacena la información en un archivo JSON. Pero también podría estar en la memoria, o en una base de datos compartida de Redis.

También puede desactivar los facts en un playbook si no los necesita. Esta es una recompensa potencialmente significativa, pero no se puede usar con frecuencia, la mayoría de los playbooks necesitan los facts.

- name: mon_playbook
    hosts: *
    gather_facts: no
    tasks:


Duración: 19,2s


Acelerar SSH con Pipelining

Permitiendo el pipelining reduce el número de operaciones de SSH necesarios para ejecutar un módulo en el servidor remoto. Esto mejora el rendimiento, pero primero debe deshabilitar ‘requiretty’ en /etc/sudoers en todos los hosts administrados. Razón por la que el pipelining está deshabilitada de forma predeterminada. Agregue ansible.cfg:

[ssh_connection]
pipelining = True

Si se establece requiretty, sudo solo funcionará si el usuario está conectado a un tty real. En este caso, sudo solo se iniciará en una sesión de inicio de sesión y no en un script cron o cgi-bin. Sin embargo, esta configuración está deshabilitada de forma predeterminada de acuerdo con la página de manual, en Debian y Ubuntu de todos modos. Por lo tanto, podemos considerar el uso de pipelining en este caso. Consulte la página de manual de su distribución de Linux.


Duración: 11,6s


Delegate_to localhost

La mayoría de las mejoras dependen de cómo escriba sus trabajos de Ansible. En este rol, podría conectarse a la URL desde cualquier host: ¿localhost? – y guarde una conexión SSH. Este es el propósito de delegate_to, que a menudo se apunta a localhost. La primera tarea se convierte en:

- name: get kubectl last version
   delegate_to: localhost
   become: false
   uri:
     url: "{{kubectl_url}}/stable.txt"
     return_content: yes
     status_code: 200
   register: kubectl_latest_version


Esta es una optimización considerable que puede utilizar siempre que la tarea se pueda ejecutar en cualquier lugar.

Es mejor agregar become: false o podría recibir este mensaje de error si Ansible intenta hacer sudo root en su máquina local:

fatal: [backup]: FAILED! => {"changed": false, "module_stderr": "sudo: a password is required\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}


Duración: 4,7s


El tiempo de ejecución es el tiempo promedio de 10 ejecuciones consecutivas, y las pruebas se realizaron en un enlace VPN, lejos de ser óptimo.

Por supuesto que los resultados no son lineales, no todos los playbooks se ejecutarán 6 veces más rápido pero da una idea. El caché ahorra unos segundos al iniciar el playbook, mientras que la delegación a localhost solo se aplica en algunos casos.

Hay otras mejoras que se pueden realizar para acelerar Ansible, como las tareas asíncronas para iniciar una tarea y seguir adelante de inmediato. Pero lo mejor que puede hacer es ejecutar Ansible en una máquina lo más cerca posible de los hosts de destino.

 

No responses yet

Ago 23 2021

Cambio masivo de propietario de objetos AS400

Published by under AS400

Cambiar propietario a través de IBM i Terminal

Hay muchas formas de cambiar el propietario de un objeto en IBM i. Con CHGOBJOWN para un solo objeto, o WRKOBJOWN luego 9 para cada objeto si desea procesar todos los objetos que pertenecen a alguien. ¡Cambiar el propietario de miles de objetos de esta manera puede llevar mucho tiempo!

Los sitios web especializados como itjungle ofrecen soluciones más rápidas como:

CHGOWN OBJ('/qsys.lib/ma_lib.lib/*.*') NEWOWN(nuevo_propietario) RVKOLDAUT(*YES)

que es una buena manera de cambiar el propietario de todos los objetos AS400 de una biblioteca determinada.

Pero no es más potente si no tiene nada en contra de QSHELL / PASE (QSH de lanzamiento o QP2TERM LLAMADA), o se conecte en SSH.


Órdenes de Propietario Avanzados en QSH / PASE

Puede moverse a un directorio de biblioteca con cd. Siempre agregue .LIB al nombre de la biblioteca

cd /QSYS.LIB/MILIB.LIB


Puede contar fácilmente el número de objetos:

$ ls -1 | wc -l
    6228

Muestre el propietario de todos los objetos con ls y more para mostrar una página a la vez (puede ser lento si tiene muchos objetos)

$ ls -l | more
total 190672
drwx---rwx    2 proprio    0             28672 Jan  5 10:37 $BUL100.FILE
drwx---rwx    2 proprio    0             20480 Jan  5 10:37 $BUL200.FILE
[...]


Cambie el propietario de todos los objetos con chown:

chown nuevo_propietario *.*

También puede ser más específico con * .FILE o MY_*. PRG.

Y aquí es donde se pone realmente interesante. Puedes cambiar todos los objetos que no tienen dueño

find . -nouser | xargs chown nuevo_propietario

Úselo con precaución, siga leyendo …

También puede cambiar todos los objetos que pertenecen a una persona específica

find . -user antiguo_propietario | xargs chown nuevo_propietario

¡Ideal para reasignar los objetos de personas que dejaron la empresa antes de borrar su cuenta!


Longitud del Nombre de Usuario AS400 y Otros

find también busca en subdirectorios.

Es posible que tenga un error de nombre de usuario desconocido:

$ chown lgusername AABL01WC.PGM
chown: lgusername is an unknown username.

A continuación, debe recuperar el ID de usuario del perfil AS400 y utilizar este número en su lugar, si el nombre de usuario tiene más de 8 caracteres:

$ chown 1073 AABL01WC.PGM

Consulte esta nota en el sitio de IBM. Por tanto, es mejor tener sólo nombres de usuario de 8 caracteres o menos en iSeries.

Conociendo el problema de la longitud del nombre de usuario, el comando «find. -nouser» también devuelve archivos / objetos que pertenecen a perfiles de 9 o 10 caracteres. Lástima que IBM no estableció la longitud máxima de usuario en 10 también para PASE.

Un último consejo: conéctese a través de SSH para tener un terminal en una ventana más grande.

 

No responses yet

Ago 22 2021

SSH y Variables de Entorno

Published by under Seguridad,SSH

Se establecen pocas variables de entorno cuando se conecta con una clave SSH (clave autorizada) en un host remoto. El comando env que enumerará todas las variables de entorno disponibles en el servidor remoto muestra que este es realmente el caso (localhost es el objetivo aquí).

Variables de entorno SSH


A veces desea pasar variables de entorno al host a través del comando SSH. Por ejemplo, para ejecutar un programa usando bibliotecas colocados en un directorio inusual, la variable LD_LIBRARY_PATH debe ser definido.


Si Tiene Acceso root en la Máquina Remota

Esto se puede lograr en 2 pasos:

– Agregue ‘PermitUserEnvironment yes’ a su archivo sshd_config y reinicie el demonio SSH.
De hecho, el valor predeterminado de PermitUserEnvironment es ‘No’ la mayor parte del tiempo..

$ ssh localhost 'sudo sshd -T' | grep -i environment
permituserenvironment no


– Establezca las variables de entorno en .ssh/environment en el host remoto en su directorio de inicio en el formato variable = valor.
p.ej LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib


Variable de entorno en el comando SSH

Si no es posible que cambie la configuración de sshd en el host remoto, siempre puede pasar la variable de entorno con el comando SSH. Es menos elegante, especialmente en el ejemplo anterior, ya que el path depende de la ruta en la que se han instalado las bibliotecas, en la máquina específica.. Las secuencias de escape pueden ser complicadas, pero esta solución funciona igual de bien.

$ ssh localhost LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib env
LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib
SHELL=/bin/bash
SSH_CLIENT=127.0.0.1 53816 22
USER=dave
MAIL=/var/mail/dave
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
PWD=/home/dave
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/dave
LOGNAME=dave
SSH_CONNECTION=127.0.0.1 53816 127.0.0.1 22
_=/usr/bin/env
 

No responses yet

Jun 03 2021

La política de retención predeterminada de Exchange no se aplica

Published by under Exchange

Ha configurado en el EAC (Centro de Administración de Exchange) o en Powershell una política de retención que se supone que limpia los elementos eliminados, por ejemplo. Pero eso no parece aplicarse a los buzones de correo, no se elimina nada.

Como se mencionó en Microsoft, la política predeterminada se aplica tan pronto como creamos un archivo para el buzón. No tuvo suerte, la funcionalidad de archivo en Exchange 2010 y 2013 requiere una CAL (Client Access Licence) Enterprise o Microsoft Office Professional Plus y no optó por esta opción debido a la falta de recursos.

¡No todo está perdido!
Siempre puede crear su propia política de retención y aplicarla a todos los buzones de correo con bastante facilidad.
Para hacer esto, navegue en:
– Gestión de cumplimiento
– Etiquetas de retención, luego
– Políticas de retención, para crear sus reglas.

Puede aplicar su nueva política directamente en las propiedades del buzón.
Para evitar perder tiempo u olvidar ciertos buzones de correo, puede automatizar el proceso con un script de PowerShell. Puede programarlo para que se ejecute todos los fines de semana si lo desea.

add-pssnapin Microsoft.Exchange.Management.PowerShell.SnapIn

Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize unlimited | 
Set-Mailbox -RetentionPolicy "Mi estrategia de retención"

Get-Mailbox -RecipientTypeDetails SharedMailbox -ResultSize unlimited | 
Set-Mailbox -RetentionPolicy "Mi estrategia de retención"

Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize unlimited | 
Get-Mailbox -RecipientTypeDetails SharedMailbox -ResultSize unlimited | 

Start-ManagedFolderAssistant


El último comando Start-ManagedFolderAssistant no es necesario, pero procesará los buzones de correo inmediatamente.

 

No responses yet

May 13 2021

Por qué compactar Hyper-v vhd no reduce el tamaño del disco

Published by under Virtualización

Liberó espacio en disco en su máquina virtual hyper-v y luego compactó el disco vhd, pero nada que hacer, no se está reduciendo tanto como debería.

Aquí hay diferentes cosas que probé:
– Desfragmentar
– Reducir el volumen en el administrador de discos de la máquina virtual
– Desfragmentar agregando vhd en otra VM como disco secundario para poder procesar archivos del sistema
– Generer un nuevo vhd a partir del original
¡Nada parece funcionar!

El problema es que NTFS borra archivos de la estructura de directorios, pero no libera el espacio liberado por los archivos eliminados. Y la compactación tampoco libera ese espacio. Es por esta razón que existen muchas herramientas que pueden recuperar archivos borrados accidentalmente, siempre y cuando no se haya recuperado espacio para escribir otros archivos.

Para que la compactación recupere este espacio liberado, puede utilizar sdelete de las excelentes herramientas sysinternals de Microsoft. sdelete le permite eliminar de forma segura cualquier dato de los archivos guardados en partes no asignadas del disco, reemplazando los bits por ceros. Esto incluye archivos que ya se han eliminado o cifrado.
Descargue sdelete y ejecute este comando conciso en la máquina virtual si desea limpiar el disco C:

sdelete -z C:


sdelete no es muy detallado, ni siquiera sabe cuánto espacio en disco acaba de recuperar. Todo depende del tamaño de los archivos que eliminó anteriormente.


Ahora puede compactar y reducir el tamaño del archivo VHD para que coincida con el tamaño del espacio realmente utilizado.

 

No responses yet

« Prev - Next »