Note:
- Este tutorial está disponible en un entorno de prácticas gratuito proporcionado por Oracle.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar la práctica, sustituya estos valores por otros específicos de su entorno en la nube.
Ejecución de tareas de Oracle Linux con Oracle Linux Automation Engine
Introducción
Oracle Linux Automation Engine permite a los administradores automatizar la configuración inicial de Oracle Linux y ejecutar otros trabajos administrativos mediante una herramienta de gestión de configuración de infraestructura como código (IaC) a través de una serie de manuales y tareas.
Objetivos
En este tutorial, aprenderá a:
- Escribe cuadernos de estrategias que:
- Creación de usuario
- Agrega el usuario al grupo sudo
- Copia una clave SSH pública local en el archivo authorized_keys del usuario
- Agrega un repositorio DNF e instala un paquete
- Manipula archivos
Requisitos
-
Un mínimo de dos sistemas Oracle Linux con la siguiente configuración:
- un usuario no root con permisos sudo
- par de claves ssh para el usuario que no es root
- La capacidad de SSH de un host a otro mediante una conexión SSH sin contraseña
Despliegue de Oracle Linux Automation Engine
Nota: Si se ejecuta en su propio arrendamiento, lea el proyecto linux-virt-labs
GitHub README.md y complete los requisitos antes de desplegar el entorno de prácticas.
-
Abra un terminal en el escritorio Luna.
-
Clone el proyecto
linux-virt-labs
GitHub.git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
Cambie al directorio de trabajo.
cd linux-virt-labs/olam
-
Instale las recopilaciones necesarias.
ansible-galaxy collection install -r requirements.yml
-
Actualice la configuración de la instancia de Oracle Linux.
cat << EOF | tee instances.yml > /dev/null compute_instances: 1: instance_name: "ol-control-node" type: "control" 2: instance_name: "ol-host" type: "remote" use_olae_only: true EOF
-
Despliegue el entorno de prácticas.
ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e "@instances.yml"
El entorno de prácticas gratuito necesita la variable adicional
local_python_interpreter
, que defineansible_python_interpreter
para las reproducciones que se ejecutan en localhost. Esta variable es necesaria porque el entorno instala el paquete de RPM para el SDK para Python de Oracle Cloud Infrastructure, ubicado en los módulos python3.6.La unidad de despliegue por defecto utiliza la CPU AMD y Oracle Linux 8. Para utilizar una CPU de Intel u Oracle Linux 9, agregue
-e instance_shape="VM.Standard3.Flex"
o-e os_version="9"
al comando de despliegue.Importante: Espere a que el cuaderno de estrategias se ejecute correctamente y alcance la tarea de pausa. En esta etapa del manual, la instalación de Oracle Linux está completa y las instancias están listas. Tome nota de la reproducción anterior, que imprime las direcciones IP públicas y privadas de los nodos que despliega y cualquier otra información de despliegue necesaria durante la ejecución del laboratorio.
Escribir el manual de configuración inicial
Muchos cuadernos de estrategias aprovechan variables y archivos variables que contienen pares clave-valor, lo que permite que las tareas reales del cuaderno de estrategias sean dinámicas mientras el código permanece estático. Un manual incluye las variables durante el tiempo de ejecución, donde sus valores se convierten en parte de las jugadas al ejecutar tareas.
Oracle Linux Automation Engine permite definir estas variables en varias ubicaciones, cada una con un orden de prioridad. Las variables de nivel de cuaderno de estrategias se definen en el cuaderno de estrategias mediante la directiva vars o vars_files. La directiva vars especifica las variables como parte de la reproducción, mientras que la directiva vars_files incluye un archivo externo que contiene las variables. Los desarrolladores pueden crear estas variables de forma dinámica o estática a partir de otra jugada, como haremos en este ejemplo, que define la configuración del sistema antes de ejecutar el manual.
-
Abra un nuevo terminal y conéctese mediante SSH al sistema ol-control-node.
ssh oracle@<ip_address_of_instance>
-
Verifique que el comando de Oracle Linux Automation Engine esté disponible.
ansible --version
-
Cree un directorio de proyecto de trabajo.
mkdir -p ~/ol-playbook
-
Cree un directorio de variables y un archivo para el proyecto.
mkdir ~/ol-playbook/vars
touch ~/ol-playbook/vars/defaults.yml
-
Agregue las variables y los valores al archivo.
cat << EOF | tee ~/ol-playbook/vars/defaults.yml > /dev/null --- username: oracle user_default_password: oracle ssh_key_file: id_rsa ssh_private_key_file: "{{ lookup('file', lookup('env','HOME') + '/.ssh/' + ssh_key_file + '.pub') }}" additional_packages: ['git'] EOF
Esta información explica cada variable y cómo la utilizaremos:
username
: nombre del usuario sudo creado al ejecutar el cuaderno de estrategias. Para este ejemplo, el nombre del usuario seráoracle
.user_default_password
: contraseña por defecto para el usuariooracle
cuando se crea. La contraseña es necesaria al ejecutar los comandossudo
.ssh_key_file
: define el nombre del par de claves SSH del usuario.ssh_private_key_file
: copia la clave pública SSH del usuario en el archivo authorized_key del usuario remoto en la ruta especificada. El ejemplo utiliza el plugin lookup para buscar la clave públicaid_rsa.pub
en el directorio$HOME/.ssh/
de los usuarios locales.additional_packages
: agregue el nombre de los paquetes adicionales que desea instalar en formato de matriz. Cada paquete de la matriz debe estar entre comillas simples y separado por una coma. Si instala un módulo de appstream comocontainer-tools
, la matriz tendría el aspecto['git',' @container-tools:ol8']
.
-
Cree el archivo del libro de estrategias.
cat << EOF | tee ~/ol-playbook/setup.yml > /dev/null --- - hosts: all become: yes vars_files: - vars/defaults.yml tasks: - name: Generate new ssh keypair community.crypto.openssh_keypair: path: "~/.ssh/{{ ssh_key_file }}" size: 2048 comment: olam ssh keypair become: true become_user: "{{ username }}" delegate_to: localhost - name: Add a user account with access to sudo ansible.builtin.user: name: "{{ username }}" password: "{{ user_default_password | password_hash('sha512') }}" comment: Default Oracle user groups: wheel append: yes update_password: on_create - name: Set the authorized key for the user using a local public key file ansible.posix.authorized_key: user: "{{ username }}" state: present key: "{{ ssh_private_key_file }}" - name: install additional packages ansible.builtin.dnf: name: "{{ additional_packages }}" state: latest EOF
Las tareas específicas de un manual y los nombres de los módulos tienen como objetivo hacer que el manual se autodocumente. Estos elementos indican dónde y quién ejecuta las obras:
hosts: all
: esta línea especifica qué hosts del inventario ejecutarán las tareas.become: yes
: indica a las tareas de esta sección que se ejecuten con el privilegiosudo
por defecto.vars_files
" Esta directiva carga el archivo de variables que contiene la configuración del manual de este tutorial.
Instalar las recopilaciones necesarias
El paquete ansible-core
contiene un juego mínimo de módulos para gestionar hosts denominado recopilación ansible.builtin
. Una recopilación es un método para distribuir cuadernos de estrategias, roles, módulos o plugins que realizan una tarea dirigida. ansible-core
requiere la descarga e instalación de los módulos o recopilaciones necesarios fuera de las incorporaciones.
Como el manual anterior utiliza la colección ansible.posix
, necesitamos instalar esta colección y otras. La forma más sencilla de hacerlo es creando un archivo de requisitos que contenga todas las dependencias.
-
Cree un archivo de requisitos.
cat << 'EOF' | tee ~/ol-playbook/requirements.yml > /dev/null --- collections: - name: ansible.posix - name: community.crypto EOF
-
Instale la recopilación.
ansible-galaxy collection install -r ~/ol-playbook/requirements.yml
La salida muestra el proceso de recuperar el archivo de almacenamiento comprimido del sitio Galaxy y, a continuación, instalarlo en el directorio raíz en
.ansible/collections.
Nota: Si la salida muestra
ERROR: Ansible requires the locale encoding to be UTF-8; Detected None.
, indica un valor de configuración regional incorrecto paraansible
. Corrija el problema definiendo estas dos variables de entorno:export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
Ejecutar el manual
Antes de ejecutar el cuaderno de estrategias, debemos crear un archivo de inventario para este proyecto que apunte a la instancia remota de Oracle Linux que tenemos previsto gestionar.
-
Asigne la dirección IP del ol-host a una variable para nuestro sistema remoto.
Esta variable facilita la creación de scripts en el archivo de inventario.
export REMOTE=<ip_address_of_instance>
-
Cree un nuevo directorio de proyecto de archivo de inventario.
cat << EOF | tee ~/ol-playbook/inventory > /dev/null [production] ol-host ansible_host=$REMOTE EOF
-
Cambie al directorio de trabajo del proyecto.
cd ~/ol-playbook
-
Pruebe la conexión con el comando ad hoc
ping
.ansible ol-host -i ~/ol-playbook/inventory -m ping -u opc
-u
: transfiere el nombre de usuario para la conexión ssh. En el entorno de prácticas gratuitas, utilizamos el usuarioopc
, el usuario por defecto proporcionado en las instancias de Oracle Linux en Oracle Cloud Infrastructure (OCI). Apruebe la huella de clave de ECDSA escribiendoyes
en el indicador para continuar.
El comando se ejecuta correctamente con resultados similares a los mostrados.
Ejemplo de salida:
ol-host | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
-
Ejecute el manual.
ansible-playbook -i inventory setup.yml -u opc
El comando se debe ejecutar correctamente, mostrando el resultado changed de cada reproducción.
Conectar al Host Remoto
Si el manual se ejecuta correctamente, podemos conectar al sistema remoto con el usuario, como se define en la variable username.
-
Conéctese mediante SSH al sistema ol-host.
ssh oracle@$REMOTE
Si ha cambiado el valor de la variable
ssh_key_file
, tendría que transferir la opción `-i' a ssh, apuntando al archivo de clave privada del par especificado.Por ejemplo:
ssh -i ~/.ssh/<local_ssh_private_key> <username>@<ip_address_of_host>
-
Verifique la instalación de los paquetes solicitados.
Después de iniciar sesión, puede verificar que el cuaderno de estrategias haya instalado el paquete
git
.git --version
-
Desconéctese del host remoto.
exit
Adición de un repositorio
Oracle Linux proporciona una plataforma segura, ampliable y fiable donde puede desplegar las aplicaciones esenciales. La adición de un repositorio adicional se utiliza para instalar un nuevo producto de Oracle o una aplicación de terceros. Oracle Linux proporciona paquetes adicionales que gestionan el aprovisionamiento de estos repositorios adicionales.
El servidor YUM de Oracle Linux proporciona detalles de los muchos repositorios diferentes que proporciona Oracle.
-
Agregue estas tareas adicionales al archivo de cuaderno de estrategias existente.
cat << EOF | tee -a setup.yml > /dev/null - name: Add the EPEL repository ansible.builtin.dnf: name: oracle-epel-release-el8 state: present when: - ansible_distribution == 'OracleLinux' - ansible_facts['distribution_major_version'] == '8' - name: Install the htop utility package ansible.builtin.dnf: name: htop enablerepo: ol8_developer_EPEL state: present when: - ansible_distribution == 'OracleLinux' - ansible_facts['distribution_major_version'] == '8' EOF
Este manual agrega dos tareas dentro del juego definido. La primera agrega el repositorio de EPEL a los repositorios de software existentes en la instancia de Oracle Linux. Mientras tanto, la segunda reproducción instala el paquete htop en la misma instancia de host de destino.
Parámetros que vale la pena destacar:
state: present
: garantiza que el paquete al que se hace referencia ya está en el sistema o se instala mediantednf
.enablerepo
: activa el repositorio específico (si está desactivado) solo durante la duración de la tarea actual.
-
Vuelva a ejecutar el manual para realizar las tareas adicionales.
ansible-playbook -i inventory setup.yml -u opc
El manual termina con éxito, mostrando algunas advertencias que podemos ignorar. El manual informa las tareas completadas correctamente con el estado ok o changed. El estado changed indica que el manual modificó el host agregando el paquete htop o actualizando la caché dnf al solicitar la última versión de un paquete en lugar de solo comprobar si está presente. Un ok indica la finalización de la tarea y no requiere ninguna acción.
-
Verifique la instalación del repositorio y el paquete.
ssh oracle@$REMOTE which htop
-
Ejecute el comando
htop
.ssh oracle@$REMOTE -t htop
La opción
-t
del comando SSH fuerza una asignación TTY, ya que htop requiere un shell interactivo. -
Salga del programa htop escribiendo
q
.
Agregar, actualizar y suprimir archivos y directorios
-
Cree un directorio y un archivo agregando lo siguiente al archivo de libro de estrategias existente.
cat << EOF | tee -a setup.yml > /dev/null - name: Create an example directory (if it does not already exist) ansible.builtin.file: path: "/home/{{ username }}/example" state: directory mode: '0755' become_user: "{{ username }}" - name: Create an empty file ansible.builtin.file: path: "/home/{{ username }}/example/test.txt" state: touch # mode: u=rw,g=r,o=r become_user: "{{ username }}" EOF
Este manual agrega dos tareas dentro del juego definido. El primero crea un nuevo directorio denominado example en el directorio principal del usuario remoto y el segundo crea un archivo vacío denominado test.txt en el directorio example recién creado.
Parámetros adicionales que vale la pena destacar:
state:
: el módulo ansible.builtin.file admite los siguientes parámetros: absent, directory, file, hard, link y touch. Estas tareas utilizan directory, que crea la ruta de directorio si aún no está presente, y touch, que crea un archivo vacío si aún no está presente.mode
: define los permisos del sistema de archivos para el objeto creado. Al utilizar la línea de comandos, puede utilizar los modos octal 0644 o simbólico u=rw,g=r,o=r. El modo predeterminado del sistema se aplica si omite el parámetro mode:.become_user: ""
: utiliza la funcionalidad de escalada de privilegios de Oracle Linux Automation Engine para ejecutar una tarea. En tutoriales anteriores, presentamos la funcionalidad de escalada de privilegiosbecome:
para ejecutar una tarea como root. En este ejemplo se muestra cómo utilizar una funcionalidad similar para ejecutar una tarea como otro usuario. Definimos el usuario como la variable""
, que predefinimos como usuario oracle en el archivo vars/defaults.yml. Por lo tanto, esta tarea se ejecuta como usuario oracle y hereda los valores predeterminados de ese usuario.
-
Ejecute el cuaderno de estrategias para realizar las tareas adicionales.
ansible-playbook -i inventory setup.yml -u opc
-
Confirme que el nuevo directorio y archivo existen en el host remoto.
ssh oracle@$REMOTE ls -al example
La salida confirma la creación de un nuevo directorio y el archivo vacío. Tenga en cuenta que el archivo test.txt tiene cero bytes y que el usuario oracle lo posee.
-
Agregar varios archivos.
Durante la configuración de un sistema, es posible que necesite crear varios archivos dentro de un directorio. En lugar de utilizar tareas individuales, puede crear varios archivos en un directorio como una operación atómica.
cat << EOF | tee -a setup.yml > /dev/null - name: Add multiple files ansible.builtin.file: path: "/home/{{ username }}/example/{{ item }}" state: touch with_items: - file01.txt - file02.txt - file03.txt - file04.txt become_user: "{{ username }}" EOF
Esta tarea utiliza un bucle para crear varios archivos vacíos de una lista.
path:
: define la ubicación en el sistema remoto para escribir los archivos. Oracle Linux Automation Engine sustituye la variable `` por cadaitem
del parámetrowith_items
durante el tiempo de ejecución.with_items:
: este parámetro indica la lista deitems
en la que se realizará un bucle durante la ejecución de esta tarea. Si bien este ejemplo solo utiliza cuatro nombres de archivo, puede hacer la lista el tiempo que necesite.
-
Ejecute el cuaderno de estrategias para realizar las tareas adicionales.
ansible-playbook -i inventory setup.yml -u opc
-
Confirme que el nuevo directorio y archivo existen en el host remoto.
ssh oracle@$REMOTE ls -al example
La salida muestra el archivo test.txt original y los nuevos.
-
Agregue una sola línea de contenido a un archivo.
cat << 'EOF' | tee -a setup.yml > /dev/null - name: Insert some text into the test.txt file ansible.builtin.lineinfile: path: "/home/{{ username }}/example/test.txt" line: This is a test create: True owner: "{{ username }}" group: "{{ username }}" mode: '0644' - name: Add an extra line after the line just inserted ansible.builtin.lineinfile: path: "/home/{{ username }}/example/test.txt" regexp: '^a test' insertafter: 'This is a test' line: This is some updated text that was added later. create: True owner: "{{ username }}" group: "{{ username }}" mode: '0644' - name: Get the contents of the test.txt file ansible.builtin.command: cat ~/example/test.txt register: command_output become_user: "{{ username }}" - name: Print the results of the cat command ansible.builtin.debug: msg: "{{ command_output }}" - name: Print only the lines added to the text file ansible.builtin.debug: msg: "{{ command_output.stdout_lines }}" EOF
-
Las dos primeras tareas utilizan ansible.builtin.lineinfile para agregar y actualizar líneas únicas en el archivo.
-
Las tareas restantes muestran un método para confirmar los cambios. En primer lugar, el manual utiliza ansible.builtin.command para mostrar el contenido del archivo actualizado en stdout y guardarlo en la memoria en una variable
register
. A continuación, utiliza el módulo ansible.builtin.debug para imprimir ese contenido en la pantalla como parte de la salida del manual. La segunda tarea de depuración muestra una forma de limitar la salida a solo una parte concreta de la salida de JSON de la tarea anterior.
-
-
Ejecute el cuaderno de estrategias para realizar las tareas adicionales.
ansible-playbook -i inventory setup.yml -u opc
La última tarea del manual imprime el contenido del archivo mediante el módulo debug.
-
Agregue varias líneas de contenido a un archivo.
cat << EOF | tee -a setup.yml > /dev/null - name: Add two lines into test.txt ansible.builtin.blockinfile: path: "/home/{{ username }}/example/test.txt" insertafter: 'This is some updated text that was added later.' block: | "Welcome to {{ ansible_hostname }}" "Last updated on {{ ansible_date_time.iso8601 }}" - name: Create a new file and insert content into it ansible.builtin.copy: content: | === The text below was added by Oracle Linux Automation Engine ========== Hello from the ansible.builtin.copy module. This task is an example of inserting multiple lines into a text file. You can insert more lines if you want. === The text above was added by Oracle Linux Automation Engine =========== dest: "/home/{{ username }}/example/testing.txt" mode: '0644' become_user: "{{ username }}" EOF
-
Ejecute el cuaderno de estrategias para realizar las tareas adicionales.
ansible-playbook -i inventory setup.yml -u opc
-
Confirme que hay dos líneas nuevas en el archivo.
ssh oracle@$REMOTE cat example/test.txt
La salida muestra el contenido agregado e interpreta los valores variables de la tarea en función de la recopilación automática de hechos realizada por el cuaderno de estrategias en el host remoto durante el tiempo de ejecución.
-
Confirme la creación del nuevo archivo y la adición del contenido.
ssh oracle@$REMOTE cat example/testing.txt
-
Suprimir archivos y directorios.
Además de crear archivos y directorios y agregar texto, Oracle Linux Automation Engine también puede suprimir estos elementos. Vamos a eliminar el directorio y todos los archivos que este manual crea y dejar el sistema en el mismo estado que cuando empezamos. Estas tareas utilizan primero el parámetro state: establecido en absent para eliminar la lista de archivos y, a continuación, el directorio. La segunda tarea maneja la eliminación de los archivos en un solo paso junto con el directorio. Sin embargo, incluimos la primera tarea para obtener una demostración adicional de las funciones de Oracle Linux Automation Engine.
cat << EOF | tee -a setup.yml > /dev/null - name: Delete multiple files ansible.builtin.file: path: '{{ item }}' state: absent with_items: - "/home/{{ username }}/example/test.txt" - "/home/{{ username }}/example/file01.txt" - "/home/{{ username }}/example/file02.txt" - "/home/{{ username }}/example/file03.txt" - "/home/{{ username }}/example/file04.txt" - "/home/{{ username }}/example/testing.txt" - name: Recursively remove directory ansible.builtin.file: path: "/home/{{ username }}/example" state: absent EOF
Es posible suprimir recursivamente un directorio y cualquier contenido mediante la segunda tarea mostrada. La primera tarea, eliminar los archivos individualmente, está presente en caso de que solo desee eliminar archivos. Si desea suprimir archivos y archivos y directorios, la segunda tarea es más eficaz.
-
Ejecute el cuaderno de estrategias para realizar las tareas adicionales.
ansible-playbook -i inventory setup.yml -u opc
-
Compruebe que se haya eliminado el directorio especificado.
ssh oracle@$REMOTE ls
La falta de salida confirma el directorio especificado y los archivos creados durante este tutorial han desaparecido.
Pasos Siguientes
Felicitaciones por llegar tan lejos. En este tutorial se presentaron varias formas en que Oracle Linux Automation Engine hace posible la realización de tareas rutinarias en Oracle Linux mediante la automatización, como la instalación de paquetes, la creación, la actualización y la supresión de archivos y directorios, y la adición de cuentas de usuario a Oracle Linux. También mostramos cómo utilizar el módulo ansible.builtin.debug
de Oracle Linux Automation Engine para devolver información al terminal mientras se ejecuta un manual. Con estas habilidades, tienes una ventaja para aventurarte hacia adelante y escribir tus propios manuales.
Enlaces relacionados
- Documentación de Oracle Linux Automation Manager
- Formación sobre Oracle Linux Automation Manager
- Oracle Linux Training Station
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Run Oracle Linux Tasks with Oracle Linux Automation Engine
F49869-05
Copyright ©2021, Oracle and/or its affiliates.