{"id":74905,"date":"2020-03-21T20:42:25","date_gmt":"2020-03-21T17:42:25","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya"},"modified":"2020-03-21T20:42:25","modified_gmt":"2020-03-21T17:42:25","slug":"bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya","title":{"rendered":"Provisionamiento de Bare-Metal por su cuenta, o preparaci\u00f3n autom\u00e1tica de servidores desde cero.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hola, soy Denis y una de mis \u00e1reas de trabajo es el desarrollo de soluciones de infraestructura en X5. Hoy quisiera compartir con ustedes c\u00f3mo se puede implementar un sistema autom\u00e1tico de preparaci\u00f3n de servidores utilizando herramientas de acceso p\u00fablico. En mi opini\u00f3n, es una soluci\u00f3n interesante, simple y flexible.<\/p>\n<p><img decoding=\"async\" alt=\"Provisionamiento de Bare-Metal por su cuenta, o preparaci\u00f3n autom\u00e1tica de servidores desde cero.\" src=\"\/wp-content\/uploads\/2020\/03\/b49cca7e782c0875a95feee497f141b0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nCon la preparaci\u00f3n se entiende: convertir un nuevo servidor de f\u00e1brica en un servidor completamente configurado con un sistema operativo Linux o con el hipervisor ESXi (instalaci\u00f3n de Windows no se discute en este art\u00edculo). <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/es\/server\/\"   title=\"servidores\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1469\">servidores<\/a> Windows no se discute en este art\u00edculo).<\/p>\n<p><b>T\u00e9rminos<\/b>:<\/p>\n<ul>\n<li>servidores \u2013 servidores que necesitan ser configurados.<\/li>\n<li>servidor de instalaci\u00f3n \u2013 el servidor principal que garantiza todo el proceso de preparaci\u00f3n a trav\u00e9s de la red.<\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00bfPor qu\u00e9 es necesaria la automatizaci\u00f3n?<\/h3>\n<p>\nSupongamos que hay una tarea: preparar servidores masivamente desde cero, hasta 30 por d\u00eda en el pico. Servidores de diferentes fabricantes y modelos, sobre los que se pueden instalar diferentes sistemas operativos, puede haber o no un hipervisor.<\/p>\n<p>\u00bfQu\u00e9 operaciones entran en el proceso de configuraci\u00f3n (sin automatizaci\u00f3n):<\/p>\n<ul>\n<li>conectar teclado, rat\u00f3n, monitor al servidor;<\/li>\n<li>configurar BIOS, RAID, IPMI;<\/li>\n<li>actualizar el firmware de los componentes;<\/li>\n<li>desplegar una imagen del sistema de archivos (o instalar el hipervisor y copiar m\u00e1quinas virtuales);<\/li>\n<\/ul>\n<p>\nNota. Como opci\u00f3n, el despliegue del sistema operativo puede ser a trav\u00e9s de la instalaci\u00f3n con un archivo de respuestas autom\u00e1ticas. Pero esto no se discutir\u00e1 en el art\u00edculo. Aunque m\u00e1s adelante ver\u00e1n que agregar esta funcionalidad no es dif\u00edcil.<\/p>\n<ul>\n<li>configurar los par\u00e1metros del sistema operativo (hostname, IP, otros).<\/li>\n<\/ul>\n<p>\nCon este enfoque, se realizan configuraciones id\u00e9nticas de forma secuencial en cada servidor. La eficiencia de este trabajo es muy baja.<\/p>\n<p>La esencia de la automatizaci\u00f3n es excluir la participaci\u00f3n humana en el proceso de preparaci\u00f3n del servidor. Tanto como sea posible. <\/p>\n<p>Gracias a la automatizaci\u00f3n, se reduce el tiempo de inactividad entre operaciones y se permite preparar varios servidores simult\u00e1neamente. Tambi\u00e9n se disminuye significativamente la probabilidad de errores debido al factor humano.<\/p>\n<p><img decoding=\"async\" alt=\"Provisionamiento de Bare-Metal por su cuenta, o preparaci\u00f3n autom\u00e1tica de servidores desde cero.\" src=\"\/wp-content\/uploads\/2020\/03\/8c196058891a7f41c5b93e7f6721480b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>\u00bfC\u00f3mo se lleva a cabo la configuraci\u00f3n autom\u00e1tica de servidores?<\/h3>\n<p>\nAnalicemos todos los pasos en detalle.<\/p>\n<p>Usted tiene un servidor Linux que utiliza como servidor de instalaci\u00f3n PXE. Tiene instalados y configurados los servicios: DHCP, TFTP.<\/p>\n<p>As\u00ed que, arrancamos el servidor (que necesita ser configurado) a trav\u00e9s de PXE. Recordemos c\u00f3mo funciona esto:<\/p>\n<ul>\n<li>En el servidor se ha seleccionado el arranque a trav\u00e9s de la red.<\/li>\n<li>El servidor carga el PXE-ROM de la tarjeta de red y contacta al servidor de instalaci\u00f3n a trav\u00e9s de DHCP para obtener la direcci\u00f3n de red.<\/li>\n<li>El servidor de instalaci\u00f3n DHCP asigna la direcci\u00f3n y tambi\u00e9n proporciona instrucciones para la carga a trav\u00e9s de PXE.<\/li>\n<li>El servidor descarga el cargador de red desde el servidor de instalaci\u00f3n por PXE, y la carga continua seg\u00fan el archivo de configuraci\u00f3n de PXE.<\/li>\n<li>Se produce la carga seg\u00fan los par\u00e1metros obtenidos (n\u00facleo, initramfs, puntos de montaje, imagen squashfs, etc.).<\/li>\n<\/ul>\n<p>\nNota. En este art\u00edculo se describe la carga por PXE a trav\u00e9s del modo BIOS. Actualmente, los fabricantes est\u00e1n implementando activamente el modo de arranque UEFI. Para PXE, la diferencia ser\u00e1 en la configuraci\u00f3n del servidor DHCP y la presencia de un cargador adicional.<\/p>\n<p>Veamos un ejemplo de configuraci\u00f3n de un servidor PXE (men\u00fa pxelinux).<\/p>\n<p>Archivo pxelinux.cfg\/default:<\/p>\n<pre><code class=\"plaintext\">default menu.c32\nprompt 0\ntimeout 100\nmenu title Men\u00fa de Arranque PXE X5\nLABEL Men\u00fa del Servidor de Instalaci\u00f3n\n\tMENU LABEL Servidor de Instalaci\u00f3n\n\tKERNEL menu.c32\n\tAPPEND pxelinux.cfg\/installserver\nLABEL Men\u00fa VMware\n\tMENU LABEL Instalaci\u00f3n de VMware ESXi\n\tKERNEL menu.c32\n\tAPPEND pxelinux.cfg\/vmware\nLABEL toolkit \\\\ men\u00fa por defecto\n\tMENU LABEL Herramientas de Scripting de Linux\n\tMENU default\n\tKERNEL menu.c32\n\tAPPEND pxelinux.cfg\/toolkit \\\\ ir al siguiente men\u00fa<\/code><\/pre>\n<p>\nArchivo pxelinux.cfg\/toolkit:<\/p>\n<pre><code class=\"plaintext\">prompt 0\ntimeout 100\nmenu title Men\u00fa de Arranque PXE X5\nlabel mainmenu\n    menu label ^Volver al Men\u00fa Principal\n    kernel menu.c32\n    append pxelinux.cfg\/default\nlabel x5toolkit-auto \\\\ por defecto \u2014 modo autom\u00e1tico\n        menu label autoinstalaci\u00f3n del toolkit x5\n        menu default\n        kernel toolkit\/tkcustom-kernel\n        append initrd=toolkit\/tk-initramfs.gz quiet net.ifnames=0 biosdevname=0 nfs_toolkit_ip=192.168.200.1 nfs_toolkit_path=tftpboot\/toolkit nfs_toolkit_script=scripts\/mount.sh script_cmd=master-install.sh CMDIS2=\u201d\u2026\u201d\nlabel x5toolkit-shell \\\\ para depuraci\u00f3n - consola\n        menu label shell del toolkit x5\n        kernel toolkit\/tkcustom-kernel\n        append initrd=toolkit\/tkcustom-initramfs.gz quiet net.ifnames=0 biosdevname=0 nfs_toolkit_ip=192.168.200.1 nfs_toolkit_path=tftpboot\/toolkit nfs_toolkit_script=scripts\/mount.sh script_cmd=\/bin\/bash CMDIS2=\u201d\u2026\u201d<\/code><\/pre>\n<p>\nEl n\u00facleo y el initramfs en esta etapa son una imagen linux intermedia, con la cual se llevar\u00e1 a cabo la preparaci\u00f3n y configuraci\u00f3n principal del servidor.<\/p>\n<p>Como puedes ver, el cargador pasa muchos par\u00e1metros al n\u00facleo. Algunos de estos par\u00e1metros son utilizados por el propio n\u00facleo. Y algunos podemos usarlos para nuestros propios fines. Esto se explicar\u00e1 m\u00e1s adelante, pero por ahora solo recuerda que todos los par\u00e1metros pasados estar\u00e1n disponibles en la imagen linux intermedia a trav\u00e9s de \/proc\/cmdline.<\/p>\n<p>\u00bfD\u00f3nde conseguir el n\u00facleo y el initramfs?<br \/>\nSe puede elegir cualquier distribuci\u00f3n de linux como base. \u00bfQu\u00e9 debemos tener en cuenta al elegir?<\/p>\n<ul>\n<li>La imagen de arranque debe ser universal (presencia de controladores, posibilidad de instalar utilidades adicionales);<\/li>\n<li>es probable que se necesite personalizar el initramfs.<\/li>\n<\/ul>\n<p>\n\u00bfC\u00f3mo se hace esto en nuestra soluci\u00f3n para X5? Como base se eligi\u00f3 CentOS 7. Realizaremos el siguiente truco: prepararemos la futura estructura de la imagen, la empacaremos en un archivo y crearemos el initramfs, dentro del cual estar\u00e1 nuestro archivo de sistema de archivos. Al cargar la imagen, el archivo se desplegar\u00e1 en la partici\u00f3n tmpfs creada. As\u00ed, obtendremos una imagen live de Linux minimalista, pero completa, con todas las utilidades necesarias, compuesta por solo dos archivos: vmkernel e initramfs. <\/p>\n<pre><code class=\"plaintext\">#\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438: \n\nmkdir -p \/tftpboot\/toolkit\/CustomTK\/rootfs \/tftpboot\/toolkit\/CustomTK\/initramfs\/bin\n\n#\u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443:\n\nyum groups -y install &quot;Minimal Install&quot; --installroot=\/tftpboot\/toolkit\/CustomTK\/rootfs\/\nyum -y install nfs-utils mariadb ntpdate mtools syslinux mdadm tbb libgomp efibootmgr dosfstools net-tools pciutils openssl make ipmitool OpenIPMI-modalias rng-tools --installroot=\/tftpboot\/toolkit\/CustomTK\/rootfs\/\nyum -y remove biosdevname --installroot=\/tftpboot\/toolkit\/CustomTK\/rootfs\/\n\n# \u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c initramfs:\n\nwget https:\/\/busybox.net\/downloads\/binaries\/1.31.0-defconfig-multiarch-musl\/busybox-x86_64 -O \/tftpboot\/toolkit\/CustomTK\/initramfs\/bin\/busybox\nchmod a+x \/tftpboot\/toolkit\/CustomTK\/initramfs\/bin\/busybox\ncp \/tftpboot\/toolkit\/CustomTK\/rootfs\/boot\/vmlinuz-3.10.0-957.el7.x86_64 \/tftpboot\/toolkit\/tkcustom-kernel\n\n# \u0441\u043e\u0437\u0434\u0430\u0435\u043c \/tftpboot\/toolkit\/CustomTK\/initramfs\/init (\u043d\u0438\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430):\n\n#!\/bin\/busybox sh\n\/bin\/busybox --install \/bin\nmkdir -p \/dev \/proc \/sys \/var\/run \/newroot\nmount -t proc proc \/proc\nmount -o mode=0755 -t devtmpfs devtmpfs \/dev\nmkdir -p \/dev\/pts \/dev\/shm \/dev\/mapper \/dev\/vc\nmount -t devpts -o gid=5,mode=620 devpts \/dev\/pts\nmount -t sysfs sysfs \/sys\nmount -t tmpfs -o size=4000m tmpfs \/newroot\necho -n &quot;Extracting rootfs... &quot;\nxz -d -c -f rootfs.tar.xz | tar -x -f - -C \/newroot\necho &quot;done&quot;\nmkdir -p \/newroot\/dev \/newroot\/proc \/newroot\/sys\nmount --move \/sys  \/newroot\/sys\nmount --move \/proc \/newroot\/proc\nmount --move \/dev  \/newroot\/dev\nexec switch_root \/newroot \/sbin\/init\n\n# \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c rootfs \u0438 initramfs:\n\ncd \/tftpboot\/toolkit\/CustomTK\/rootfs\ntar cJf \/tftpboot\/toolkit\/CustomTK\/initramfs\/rootfs.tar.xz --exclude .\/proc --exclude .\/sys --exclude .\/dev .\ncd \/tftpboot\/toolkit\/CustomTK\/initramfs\nfind . -print0 | cpio --null -ov --format=newc | gzip -9 &gt; \/tftpboot\/toolkit\/tkcustom-initramfs-new.gz<\/code><\/pre>\n<p>\nEntonces, hemos especificado el n\u00facleo e initramfs que deben cargarse. Como resultado, en esta etapa, al cargar la imagen intermedia de Linux por PXE, obtendremos la consola del SO.<\/p>\n<p>Genial, pero ahora necesitamos transferir el control a nuestra \"automatizaci\u00f3n\".<\/p>\n<p>Esto se puede hacer de la siguiente manera.<\/p>\n<p>Supongamos que, despu\u00e9s de cargar la imagen, planeamos transferir el control al script mount.sh.<br \/>\nIncluir\u00e9 el script mount.sh en el inicio autom\u00e1tico. Para esto ser\u00e1 necesario modificar el initramfs:<\/p>\n<ul>\n<li>desplegar initramfs (si usamos la variante de initramfs mencionada anteriormente, esto no es necesario)<\/li>\n<li>incluir en el autoarranque el c\u00f3digo que analizar\u00e1 los par\u00e1metros pasados a trav\u00e9s de \/proc\/cmdline y transferir\u00e1 el control posteriormente;<\/li>\n<li>empaquetar el initramfs.<\/li>\n<\/ul>\n<p>\nNota. En el caso del toolkit X5, el control de arranque se transfiere al script <code>\/opt\/x5\/toolkit\/bin\/hook.sh \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e override.conf \u0432 getty tty1 (ExecStart=\u2026) <\/code><\/p>\n<p>As\u00ed que se carga la imagen, en la que se inicia el script mount.sh en el arranque autom\u00e1tico. Luego, el script mount.sh, en su ejecuci\u00f3n, analiza los par\u00e1metros pasados (script_cmd=) y ejecuta el programa\/script necesario.<\/p>\n<p>label toolkit-<b>auto<\/b><br \/>\nkernel \u2026<br \/>\nappend \u2026 nfs_toolkit_script=scripts\/mount.sh <b>script_cmd=master-install.sh<br \/>\n<\/b><br \/>\nlabel toolkit-<b>shell<\/b><br \/>\nkernel \u2026<br \/>\nappend \u2026 nfs_toolkit_script=scripts\/mount.sh <b>script_cmd=\/bin\/bash<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Provisionamiento de Bare-Metal por su cuenta, o preparaci\u00f3n autom\u00e1tica de servidores desde cero.\" src=\"\/wp-content\/uploads\/2020\/03\/943eeb64fbf746feab5119ead5b1ca66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAqu\u00ed, en la parte izquierda, est\u00e1 el men\u00fa PXE, y a la derecha \u2013 el esquema de transferencia de control.<\/p>\n<p>Hemos comprendido la transferencia de control. Dependiendo de la elecci\u00f3n en el men\u00fa PXE, se inicia el script de auto-configuraci\u00f3n o la consola de depuraci\u00f3n.<\/p>\n<p>En el caso de la configuraci\u00f3n autom\u00e1tica, se montan los directorios necesarios desde el servidor de instalaci\u00f3n, que contienen:<\/p>\n<ul>\n<li>scripts;<\/li>\n<li>plantillas guardadas de BIOS\/UEFI de varios servidores;<\/li>\n<li>firmwares;<\/li>\n<li>utilidades para servidores;<\/li>\n<li>logs.<\/li>\n<\/ul>\n<p>\nLuego, el script mount.sh transfiere el control al script master-install.sh en el directorio con los scripts.<\/p>\n<p>El \u00e1rbol de scripts (el orden de su ejecuci\u00f3n) se ve aproximadamente as\u00ed:<\/p>\n<ul>\n<li>master-install<\/li>\n<li>sharefunctions (funciones compartidas)<\/li>\n<li>info (salida de informaci\u00f3n)<\/li>\n<li>models (instalaci\u00f3n de par\u00e1metros de instalaci\u00f3n basados en el modelo del servidor)<\/li>\n<li>prepare_utils (instalaci\u00f3n de utilidades necesarias)<\/li>\n<li>fwupdate (actualizaci\u00f3n de firmware)<\/li>\n<li>diag (diagn\u00f3stico elemental)<\/li>\n<li>biosconf (configuraci\u00f3n de BIOS\/UEFI)<\/li>\n<li>clockfix (ajuste de tiempo en la placa madre)<\/li>\n<li>srmconf (configuraci\u00f3n de la interfaz remota)<\/li>\n<li>raidconf (configuraci\u00f3n de vol\u00famenes l\u00f3gicos)<\/li>\n<\/ul>\n<p>\nuno de:<\/p>\n<ul>\n<li>preinstall (transferencia de control al instalador del sistema operativo o hipervisor, por ejemplo ESXi)<\/li>\n<li>merged-install (inicio directo de la descompresi\u00f3n de la imagen)<\/li>\n<\/ul>\n<p>\n<b>Ahora sabemos:<\/p>\n<ul>\n<li>c\u00f3mo arrancar el servidor por PXE;<\/li>\n<li>c\u00f3mo transferir el control a un script propio.<\/li>\n<\/ul>\n<p><\/b><br \/>\nContinuemos. Ahora surgen las siguientes preguntas:<\/p>\n<ul>\n<li>\u00bfC\u00f3mo identificar el servidor que estamos preparando?<\/li>\n<li>\u00bfQu\u00e9 utilidades y c\u00f3mo configurar el servidor?<\/li>\n<li>\u00bfC\u00f3mo obtener configuraciones para un servidor espec\u00edfico?<\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00bfC\u00f3mo identificar el servidor que estamos preparando?<\/h3>\n<p>\nEs sencillo \u2013 DMI:<\/p>\n<pre><code class=\"plaintext\">dmidecode \u2013s system-product-name\ndmidecode \u2013s system-manufacturer\ndmidecode \u2013s system-serial-number<\/code><\/pre>\n<p>\nAqu\u00ed est\u00e1 toda la informaci\u00f3n necesaria: proveedor, modelo, n\u00famero de serie. Si no est\u00e1 seguro de que esta informaci\u00f3n est\u00e9 presente en todos los servidores, puede identificarlos por la direcci\u00f3n MAC. O por ambos m\u00e9todos a la vez, si los proveedores de los servidores son diferentes y en algunos modelos la informaci\u00f3n sobre el n\u00famero de serie simplemente no est\u00e1 disponible.<\/p>\n<p>Con la informaci\u00f3n obtenida, se montan las carpetas de red desde el servidor de instalaci\u00f3n y se carga todo lo necesario (utilidades, firmware y m\u00e1s).<\/p>\n<h3>\u00bfQu\u00e9 utilidades y c\u00f3mo configurar el servidor?<\/h3>\n<p>\nAqu\u00ed est\u00e1n las utilidades para Linux de algunos fabricantes. Todas las utilidades est\u00e1n disponibles en los sitios web oficiales de los proveedores.<\/p>\n<p><img decoding=\"async\" alt=\"Provisionamiento de Bare-Metal por su cuenta, o preparaci\u00f3n autom\u00e1tica de servidores desde cero.\" src=\"\/wp-content\/uploads\/2020\/03\/fab53d1fa6e9a222ec69248439551ad7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCon los firmware, creo que todo est\u00e1 claro. Por lo general, se entregan en forma de archivos ejecutables empaquetados. El archivo ejecutable controla el proceso de actualizaci\u00f3n del firmware y reporta el c\u00f3digo de retorno.<\/p>\n<p>BIOS e IPMI generalmente se configuran mediante plantillas. Si es necesario, la plantilla se puede editar antes del arranque.<\/p>\n<p>Las utilidades RAID de algunos proveedores tambi\u00e9n pueden configurarse mediante plantillas. Si no es as\u00ed, ser\u00e1 necesario escribir un script de configuraci\u00f3n.<\/p>\n<p>El orden de configuraci\u00f3n del RAID suele ser el siguiente:<\/p>\n<ul>\n<li>Solicitamos la configuraci\u00f3n actual.<\/li>\n<li>Si ya hay matrices l\u00f3gicas, las borramos.<\/li>\n<li>Vemos qu\u00e9 discos f\u00edsicos est\u00e1n presentes y cu\u00e1ntos hay.<\/li>\n<li>Creamos una nueva matriz l\u00f3gica. Interrumpimos el proceso en caso de error.<\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00bfC\u00f3mo obtener configuraciones para un servidor espec\u00edfico?<\/h3>\n<p>\nSupongamos que la configuraci\u00f3n de todos los servidores se almacenar\u00e1 en el servidor de instalaci\u00f3n. En tal caso, para responder a nuestra pregunta, primero debemos decidir: de qu\u00e9 manera transferir la configuraci\u00f3n al servidor de instalaci\u00f3n.<\/p>\n<p>Al principio se puede gestionar perfectamente con archivos de texto. (En el futuro, se puede usar el archivo de texto como un m\u00e9todo de respaldo para la transmisi\u00f3n de configuraciones). <\/p>\n<p>Se puede \"compartir\" un archivo de texto en el servidor de instalaci\u00f3n. Y agregar su montaje en el script mount.sh.<\/p>\n<p>Las l\u00edneas ser\u00e1n, por ejemplo, de este tipo:<\/p>\n<p><\/p>\n<p>Estas l\u00edneas ser\u00e1n transferidas a un archivo por el ingeniero desde su m\u00e1quina de trabajo. Y luego, al configurar el servidor, los par\u00e1metros para el servidor espec\u00edfico se leer\u00e1n del archivo.<\/p>\n<p>Pero, en perspectiva, es mejor utilizar una base de datos para almacenar configuraciones, estados y registros de instalaciones de servidores.<\/p>\n<p>Por supuesto, no se puede depender solo de una base de datos, y ser\u00e1 necesario crear una parte cliente, mediante la cual se transmitir\u00e1n las configuraciones a la base. Implementar esto es m\u00e1s complicado que con un archivo de texto, pero, en realidad, no es tan dif\u00edcil como parece. La versi\u00f3n m\u00ednima del cliente, que simplemente transmitir\u00e1 datos a la base de datos, se puede escribir f\u00e1cilmente por uno mismo. Y posteriormente se puede mejorar el programa cliente de manera libre (informes, impresi\u00f3n de etiquetas, env\u00edo de notificaciones y todo lo que se te ocurra).<\/p>\n<p>Haciendo una consulta en la base y especificando el n\u00famero de serie del servidor, obtendremos los par\u00e1metros necesarios para la configuraci\u00f3n del servidor.<\/p>\n<p>Adem\u00e1s, no necesitaremos inventar bloqueos para el acceso simult\u00e1neo, como en el caso de un archivo de texto.<\/p>\n<p>El registro de configuraci\u00f3n lo podemos escribir en la base de datos en todas las etapas y controlar el proceso de instalaci\u00f3n a trav\u00e9s de eventos y banderas de etapas de preparaci\u00f3n.<\/p>\n<p><b>Ahora sabemos c\u00f3mo:<\/p>\n<ul>\n<li>cargar el servidor por PXE;<\/li>\n<li>transferir el control a nuestro script;<\/li>\n<li>identificar el servidor que debe ser preparado por su n\u00famero de serie;<\/li>\n<li>configurar el servidor con las utilidades correspondientes;<\/li>\n<li>transferir configuraciones a la base de datos del servidor de instalaci\u00f3n mediante la parte cliente.<\/li>\n<\/ul>\n<p>\nHemos averiguado c\u00f3mo:<\/p>\n<ul>\n<li>el servidor a instalar obtiene las configuraciones necesarias de la base de datos;<\/li>\n<li>todo el progreso de la preparaci\u00f3n se registra en la base de datos (registros, eventos, banderas de etapas).<\/li>\n<\/ul>\n<p><\/b><\/p>\n<h3>\u00bfQu\u00e9 pasa con los diferentes tipos de software a instalar? \u00bfC\u00f3mo instalar un hipervisor, copiar una VM y configurar todo esto?<\/h3>\n<p>\nEn el caso de desplegar una imagen del sistema de archivos (linux) en hardware, todo es bastante simple:<\/p>\n<ul>\n<li>Despu\u00e9s de configurar todos los componentes del servidor, desplegamos la imagen.<\/li>\n<li>Instalamos el cargador grub.<\/li>\n<li>Realizamos chroot y configuramos todo lo necesario.<\/li>\n<\/ul>\n<p>\n<b>C\u00f3mo transferir el control al instalador del sistema operativo (con un ejemplo de ESXi).<\/b><\/p>\n<ul>\n<li>Organizamos la transferencia de control desde nuestro script al instalador del hipervisor mediante un archivo de respuesta autom\u00e1tica (kickstart):<\/li>\n<li>Eliminamos las particiones actuales en el disco.<\/li>\n<li>Creemos una partici\u00f3n de 500MB.<\/li>\n<li>La marcamos como de arranque.<\/li>\n<li>La formateamos en FAT32.<\/li>\n<li>Copiamos los archivos de instalaci\u00f3n de ESXi en la ra\u00edz de esta partici\u00f3n.<\/li>\n<li>Instalamos syslinux.<\/li>\n<li>Copiamos syslinux.cfg en \/syslinux\/<\/li>\n<\/ul>\n<p><\/p>\n<pre><code class=\"plaintext\">default esxi\nprompt 1\ntimeout 50\nlabel esxi\nkernel mboot.c32\nappend -c boot.cfg<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>Copiamos mboot.c32 en \/syslinux.<\/li>\n<li>En boot.cfg debe haber kernelopt=ks=ftp:\/\/\/ks_esxi.cfg<\/li>\n<li>Reiniciamos el servidor.<\/li>\n<\/ul>\n<p>\nDespu\u00e9s de reiniciar el servidor, se iniciar\u00e1 el instalador de ESXi desde su disco duro. Todos los archivos necesarios del instalador se cargar\u00e1n en la memoria y luego comenzar\u00e1 la instalaci\u00f3n de ESXi, de acuerdo con el archivo de respuesta autom\u00e1tica especificado.<\/p>\n<p>Aqu\u00ed incluir\u00e9 algunas l\u00edneas del archivo de respuesta autom\u00e1tica ks_esxi.cfg:<\/p>\n<pre><code class=\"plaintext\">%firstboot --interpreter=busybox\n\u2026\n# obtenemos el n\u00famero de serie\n\nSYSSN=$(esxcli hardware platform get | grep Serial | awk -F \" \" '{print $3}')\n\n# obtenemos IP\n\nIPADDRT=$(esxcli network ip interface ipv4 get | grep vmk0 | awk -F \" \" '{print $2}')\nLAST_OCTET=$(echo $IPADDRT | awk -F'.' '{print $4}')\n\n# conectamos al servidor de instalaci\u00f3n NFS\n\nesxcli storage nfs add -H is -s \/srv\/nfs_share -v nfsshare1\n\n# copiamos la configuraci\u00f3n temporal de ssh, para usar el cliente ssh\n\nmv \/etc\/ssh \/etc\/ssh.tmp\ncp -R \/vmfs\/volumes\/nfsshare1\/ssh \/etc\/\nchmod go-r \/etc\/ssh\/ssh_host_rsa_key\n\n# copiamos ovftool, para desplegar VM ahora, posiblemente \u00fatil m\u00e1s tarde\n\ncp -R \/vmfs\/volumes\/nfsshare1\/ovftool \/vmfs\/volumes\/datastore1\/\n\n# desplegamos la VM\n\n\/vmfs\/volumes\/datastore1\/ovftool\/tools\/ovftool --acceptAllEulas --noSSLVerify --datastore=datastore1 --name=VM1 \/vmfs\/volumes\/nfsshare1\/VM_T\/VM1.ova vi:\/\/root:esxi_password@127.0.0.1\n\/vmfs\/volumes\/datastore1\/ovftool\/tools\/ovftool --acceptAllEulas --noSSLVerify --datastore=datastore1 --name=VM2 \/vmfs\/volumes\/nfsshare1\/VM_T\/VM2.ova vi:\/\/root:esxi_password@127.0.0.1\n\n# obtenemos la l\u00ednea con la configuraci\u00f3n de nuestro servidor\n\nssh root@is \"mysql -h'192.168.0.1' -D'servers' -u'user' -p'secretpassword' -e \"SELECT ... WHERE servers.serial='$SYSSN'\"\" | grep -v ^$ | sed 's\/NULL\/\/g' &gt; \/tmp\/servers\n...\n# generamos el script de configuraci\u00f3n de red\n\necho '#!\/bin\/sh' &gt; \/vmfs\/volumes\/datastore1\/netconf.sh\necho \"esxcli network ip interface ipv4 set -i=vmk0 -t=static --ipv4=$IPADDR --netmask=$S_SUB || exit 1\" &gt;&gt; \/vmfs\/volumes\/datastore1\/netconf.sh\necho \"esxcli network ip route ipv4 add -g=$S_GW -n=default || exit 1\" &gt;&gt; \/vmfs\/volumes\/datastore1\/netconf.sh\nchmod a+x \/vmfs\/volumes\/datastore1\/netconf.sh\n\n# establecemos el par\u00e1metro guestinfo.esxihost.id, especificando el n\u00famero de serie\n\necho \"guestinfo.esxihost.id = \"$SYSSN\"\" &gt;&gt; \/vmfs\/volumes\/datastore1\/VM1\/VM1.vmx\necho \"guestinfo.esxihost.id = \"$SYSSN\"\" &gt;&gt; \/vmfs\/volumes\/datastore1\/VM2\/VM2.vmx\n...\n# actualizamos la informaci\u00f3n en la base de datos\n\nSYSNAME=$(esxcli hardware platform get | grep Product | sed 's\/Product Name:\/\/;s\/^ *\/\/')\nUUID=$(vim-cmd hostsvc\/hostsummary | grep uuid | sed 's\/ \/\/g;s\/,$\/\/;s\/^uuid=\"\/\/;s\/\"$\/\/')\nssh root@is \"mysql -D'servers' -u'user' -p'secretpassword' -e \"UPDATE servers ... SET ... WHERE servers.serial='$SYSSN'\"\"\nssh root@is \"mysql -D'servers' -u'user' -p'secretpassword' -e \"INSERT INTO events ...\"\"\n\n# restauramos la configuraci\u00f3n de SSH\n\nrm -rf \/etc\/ssh\nmv \/etc\/ssh.tmp \/etc\/ssh\n\n# configuramos la red y reiniciamos\n\nesxcli system hostname set --fqdn=esx-${G_NICK}.x5.ru\n\/vmfs\/volumes\/datastore1\/netconf.sh\nreboot\n<\/code><\/pre>\n<p>\nEn esta etapa, el hipervisor est\u00e1 instalado y configurado, y se han copiado las m\u00e1quinas virtuales.<\/p>\n<p>\u00bfC\u00f3mo configurar ahora las m\u00e1quinas virtuales?<\/p>\n<p>Hemos sido un poco astutos: durante la instalaci\u00f3n, establecimos el par\u00e1metro guestinfo.esxihost.id = \"$SYSSN\" en el archivo VM1.vmx, indicando el n\u00famero de serie del servidor f\u00edsico.<\/p>\n<p>Ahora, despu\u00e9s de arrancar, la m\u00e1quina virtual (con el paquete vmware-tools instalado) puede acceder a este par\u00e1metro:<\/p>\n<pre><code class=\"plaintext\">ESXI_SN=$(vmtoolsd --cmd \"info-get guestinfo.esxihost.id\")<\/code><\/pre>\n<p>\nEs decir, la VM podr\u00e1 identificarse (sabe el n\u00famero de serie del host f\u00edsico), hacer una consulta a la base de datos del servidor de instalaci\u00f3n y obtener los par\u00e1metros que deben configurarse. Todo esto se presenta en un script que debe ejecutarse autom\u00e1ticamente al iniciar la VM guestos (pero solo una vez: RunOnce).<\/p>\n<p><b>Ahora sabemos c\u00f3mo:<\/p>\n<ul>\n<li>cargar el servidor por PXE;<\/li>\n<li>transferir el control a nuestro script;<\/li>\n<li>identificar el servidor que debe ser preparado por su n\u00famero de serie;<\/li>\n<li>configurar el servidor con las utilidades pertinentes;<\/li>\n<li>transmitir configuraciones a la base de datos del servidor de instalaci\u00f3n a trav\u00e9s del cliente;<\/li>\n<li>configurar diferentes tipos de software, incluyendo implementar el hipervisor ESXi y configurar m\u00e1quinas virtuales (todo autom\u00e1ticamente).<\/li>\n<\/ul>\n<p>\nHemos averiguado c\u00f3mo:<\/p>\n<ul>\n<li>el servidor a instalar obtiene las configuraciones necesarias de la base de datos;<\/li>\n<li>todo el progreso de la preparaci\u00f3n se registra en la base de datos (registros, eventos, banderas de etapas).<\/li>\n<\/ul>\n<p><\/b><br \/>\n<u><b>Conclusi\u00f3n:<\/b><\/u><\/p>\n<p>Creo que la singularidad de esta soluci\u00f3n radica en su flexibilidad, simplicidad, capacidades y versatilidad.<\/p>\n<p>Por favor, escribe en los comentarios qu\u00e9 piensas.<br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/X5RetailGroup\/blog\/493124\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u044f \u0414\u0435\u043d\u0438\u0441 \u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u043c\u043e\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2013 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432 X5. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u0431\u0430\u0437\u0435 \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435, \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0438 \u0433\u0438\u0431\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041f\u043e\u0434 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u043e\u0439 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f: \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":74906,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-74905","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u044f \u0414\u0435\u043d\u0438\u0441 \u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u043c\u043e\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2013 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432 X5.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Bare-Metal Provisioning \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438, \u0438\u043b\u0438 \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441 \u043d\u0443\u043b\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u044f \u0414\u0435\u043d\u0438\u0441 \u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u043c\u043e\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2013 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432 X5.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-21T17:42:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-21T17:42:25+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Bare-Metal Provisioning por ti mismo, o Preparaci\u00f3n autom\u00e1tica de servidores desde cero | ProHoster","description":"Hola, soy Denis y una de mis \u00e1reas de trabajo es el desarrollo de soluciones de infraestructura en X5.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Bare-Metal Provisioning \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438, \u0438\u043b\u0438 \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441 \u043d\u0443\u043b\u044f | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u044f \u0414\u0435\u043d\u0438\u0441 \u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u043c\u043e\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2013 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432 X5.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-21T17:42:25+00:00","article:modified_time":"2020-03-21T17:42:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"74905","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:05:46","updated":"2026-02-09 16:50:18","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/74905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=74905"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/74905\/revisions"}],"predecessor-version":[{"id":158713,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/74905\/revisions\/158713"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/74906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=74905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=74905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=74905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}