Administración en Windows
Objetivos del capítulo y requisitos
1. Contexto y requisitos
En este capítulo se tratará la administración y la gestión de máquinas Windows usando Ansible.
Verá cómo poner en práctica la comunicación en una máquina. También estudiará la instalación de paquetes usando Chocolatey, la implementación de servicios y la gestión de reglas del firewall.
Los ejemplos que se tratarán en este capítulo partirán de la base de que usted tiene permisos de administrador en las máquinas Windows.
2. Archivos para descargar
Puede encontrar los ejemplos en el archivo comprimido capitulo-05.tar.gz que se encuentra en la página del libro en el sitio de Ediciones ENI.
Ansible y las máquinas Windows
1. Contexto
Cuando empezó a concebirse Ansible, la vocación principal del software era administrar servidores Unix/Linux. Para ello, el protocolo utilizado esencialmente para la comunicación era SSH.
Sin embargo, en la versión 1.7 de Ansible se incorporó un principio de soporte de máquinas Windows. Desde aquel momento, el soporte ha ido mejorando versión tras versión.
Los ejemplos que se mostrarán se desarrollarán en un servidor Windows Server 2016 cuyo nombre de host será windows1.
2. Requisitos
Para asegurar la gestión de las máquinas Windows con Ansible se necesita la dependencia Python pywinrm. Esta se instala con el comando siguiente:
pip3 install pywinrm
No tendrá que instalar ninguna dependencia en el servidor Windows (el intérprete de Python no será necesario). De hecho, Ansible utiliza el lenguaje PowerShell para gestionar las máquinas Windows. Para ello, es necesario disponer de, al menos, la versión 3 de PowerShell.
Necesitará una cuenta de usuario técnico para poder conectarse a las máquinas Windows.
3. Configuración de la máquina
Tendrá que realizar algunas operaciones para configurar la máquina antes de administrarla con Ansible.
Debe descargar el script (ConfigureRemotingForAnsible.ps1) que está disponible en la ubicación siguiente: https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1
Puede obtener este archivo creando un script PowerShell.
He aquí un ejemplo de script que realizará estas operaciones:
$url = "https://raw.githubusercontent.com/ansible/ansible/devel/
examples/scripts/ConfigureRemotingForAnsible.ps1"
$file = "$env:temp\ConfigureRemotingForAnsible.ps1" ...
Gestión de servicio Windows
1. Contexto
Ya se ha estudiado la gestión de las máquinas anteriormente así como la instalación de paquetes. Ahora, el lector va a enfrentarse a la gestión completa de un servicio (instalación y gestión del inicio).
El ejemplo se basa en la instalación de dos componentes: Prometheus y Grafana. Esos programas sirven para monitorear el sistema y las aplicaciones, y están disponibles bajo la forma de un paquete Chocolatey.
2. Instalación de Prometheus
Prometheus es un programa de software libre que permite monitorear un conjunto de elementos y avisar en el caso de un fallo en función de la normas establecidas. Su funcionamiento se basa en la consulta a intervalos regulares de puntos de entrada dedicados. Estos puntos de entrada ponen a disposición indicadores del estado de salud de una aplicación o de un componente material, y se pueden consultar desde el motor de base de datos de Prometheus.
Este motor de base de datos se basa en la noción de series temporales y se le puede interrogar usando un lenguaje específico: PromQL.
El proyecto está escrito en Go y su código está disponible en GitHub bajo licencia Apache 2. Se trata también de un proyecto mantenido por la organización CNCF (Cloud Native Computing Foundation) responsable, entre otros proyectos, del desarrollo de Kubernetes.
3. Creación del playbook
Con el objetivo de proceder a la instalación de Prometheus, el playbook Ansible va a tener que gestionar las operaciones siguientes:
-
Instalación del paquete Chocolatey prometheus.
-
Apertura del puerto TCP/9090 en el firewall de la máquina.
-
Inicio y activación del servicio en la máquina.
Otro detalle: la recogida de información de las características de la máquina no es necesaria. La opción gather_facts tendrá el valor no.
Desde el punto de vista de la instalación, no habrá ningún cambio con respecto a la instalación anterior, aparte del nombre del paquete (la opción name llevará el valor prometheus).
La modificación del firewall se hará gracias al módulo win_firewall_rule y a las opciones siguientes:
-
Campo name seguido del nombre de la regla (Prometheus server)
-
Campo localport seguido del número de puerto que corresponde a Prometheus ("9090")
-
Campo action con el valor allow
-
Campo direction con el valor in
-
Campo protocol con el valor tcp
-
Campo state con el valor present
-
Campo enabled con el valor yes
He aquí la declaración correspondiente:
name: "Configure firewall for prometheus"
win_firewall_rule:
name: "Prometheus server"
localport: "9090"
action: allow
direction: in
protocol: tcp
state: present
enabled: yes
La activación del servicio se hará gracias al módulo win_service y las opciones siguientes:
-
Campo name seguido del nombre de servicio (prometheus-service)
-
Campo state con el valor started
-
Campo start_mode con el valor auto
He aquí la declaración correspondiente:
- name: "Activate Prometheus"
win_service:
name: "prometheus-service"
state: started
start_mode: auto
Si tenemos en cuenta todos estos elementos vistos anteriormente, el playbook completo podría escribirse de la siguiente manera:
- name: "Install Prometheus"
hosts: all
gather_facts: no
tasks:
- name: "Install Prometheus"
win_chocolatey:
name: "prometheus"
state: present
- name: "Configure firewall for prometheus"
win_firewall_rule:
name: "Prometheus server"
localport: "9090"
action: allow
direction: in
protocol: tcp
state: present
enabled: yes
- name: "Activate Prometheus"
win_service:
name: "prometheus-service"
state: started
start_mode: auto
Guarde el archivo y llámelo prometheus....
Creación de servicio
1. Instalación de Grafana
a. Presentación de Grafana
Grafana es un programa de visualización de datos. Permite la realización de paneles de control que contienen indicadores o gráficos. Prometheus puede servir como fuente de datos.
b. Creación del playbook
Con el objetivo de proceder a la instalación del paquete Grafana, el playbook de Prometheus va a ser adaptado de la manera siguiente:
-
Cambio de las referencias de Prometheus por Grafana.
-
Cambio del puerto de escucha para pasar del TCP 9090 al TCP 3000 (puerto por defecto de Grafana).
He aquí el playbook que resultará después de estas indicaciones:
- name: "Install Grafana"
hosts: all
gather_facts: no
tasks:
- name: "Install Grafana"
win_chocolatey:
name: "grafana"
state: present
- name: "Configure firewall for grafana"
win_firewall_rule:
name: "Grafana server"
localport: "3000"
action: allow
direction: in
protocol: tcp
state: present
enabled: yes
- name: "Activate Grafana"
win_service:
name: "grafana-service"
state: started
start_mode: auto
Guarde el playbook bajo el nombre grafana.yml.
c. Inicio de la instalación
Retome el comando utilizado para la instalación de Prometheus y remplace el nombre del playbook por el de Grafana.
He aquí el comando que habría que ejecutar:
$ ansible-playbook -i win.yml grafana.yml
El comando mostrará el resultado siguiente :
PLAY [Install Grafana]
*******************************************
TASK [Install Grafana]
*******************************************
changed: [windows1]
TASK [Configure firewall for grafana]
****************************
changed: [windows1] ...