{"id":2119,"date":"2019-12-18T20:52:27","date_gmt":"2019-12-18T19:52:27","guid":{"rendered":"http:\/\/clemente.pamplona.name\/dba\/?p=2119"},"modified":"2020-04-15T16:24:34","modified_gmt":"2020-04-15T14:24:34","slug":"instalando-el-grid-infraesturcure-con-ansible","status":"publish","type":"post","link":"http:\/\/clemente.pamplona.name\/dba\/instalando-el-grid-infraesturcure-con-ansible\/","title":{"rendered":"Instalando el grid infraesturcure con Ansible"},"content":{"rendered":"<p>Hoy vamos a ver los pasos a llevar a cabo y el codigo para llevar a cabo una instalaci\u00f3n de un Grid Infraestructura de la versi\u00f3n 19c en un standalone server .<\/p>\n<p>Como puntos importantes a esta instalaci\u00f3n tenemos:<\/p>\n<h1> Condiciones <\/h1>\n<p><b>1-<\/b> Tenemos configurado el sudores del equipo cliente tal y como explicamos en <a href=\"http:\/\/clemente.pamplona.name\/dba\/requisitos-de-los-equipos-cliente-para-automatizar-con-ansible-sudo\/\">Requisitos de los equipos cliente para  automatizar con Ansible: SUDO<\/a><br \/>\n<b>2-<\/b> Vamos a instalar y configurar solamente el GI y el listener, en este paso no vamos a crear en ASM, de esta manera nos va a servir tanto para llevar a cabo una instalaci\u00f3n de ASM como para un oracle restart sobre filesystem<br \/>\n<b>3-<\/b>Tendremos un punto compartido de red donde podremos obtener los binarios descargados de oracle <\/p>\n<p><requisitos><br \/>\nPara poder ejecutar esta automatizaci\u00f3n necesitamos:<\/p>\n<ul>\n<li> variable env: Nombre del servidor que debe de estar inventariado. En nuestro laboratorio va a ser <b>alone.pamplona.name<\/b>\n<li> variable type: Esta variable en nuestro caso va a estar fija a <b> asm<\/b>\n<li> Variable version: Variable con el numero de version que queremos instalar,en nuestro laboratorio va a ser la <b>19.0.0.3 <\/b>\n<\/ul>\n<p>Como veremos, mas adelante ,  estas tres variables van a ser parseadas enpracticamente todos nuestros playbooks.<\/p>\n<p>Nuestra estructura de Playbooks va a ser muy similar a la de un role de Ansible, nuestros ficheros estar\u00e1n distribuidos de  la siguiente manera <\/p>\n<pre>\r\n\r\nRaiz\r\n|\r\n|- vars:      Ficheros\/Inventario de variables\r\n|- templates: Ficheros de templates  \r\n|- file:       Ficheros espec\u00edficos para  playbooks \r\n<\/pre>\n<p>Como veremos mas adelante, el contenido de los directorios <i>Vars <\/i> y <i> templates <\/i> va a ser com\u00fan a todas las ejecuciones, pero el del directorio <i>temp<\/i> ser\u00e1 \u00fanico por ejecuci\u00f3n.<\/p>\n<h1> Directorio de variables <\/h1>\n<p> Este directorio va a tener los ficheros con informaci\u00f3n de los est\u00e1ndares que queremos aplicar, por decirlo de  una manera sencilla, son los ficheros de <i> nuestras normas <\/i><\/p>\n<p>En el lenguaje de Ansible este directorio se podr\u00eda llamar tambi\u00e9n <i>inventario de variables <\/i><\/p>\n<p>Entr elos ficheros que vamos a usar est\u00e1n:<\/p>\n<h2> oracle_standard.yaml<\/h2>\n<p>Este fichero va a ser el que contenga los est\u00e1ndares del departamento.<br \/>\nVa a ser com\u00fan para todas las acciones que se llevan a cabo para las bases de datos de oracle, ya sea instalaci\u00f3n de binarios, creaci\u00f3n de bases de datos y\/o parchados<br \/>\nEl ejemplo de nuestro laboratorio es:<\/p>\n<p>[code lang=\u00bbpy\u00bb]<br \/>\nroot_user:                      &quot;root&quot;<br \/>\noracle_user:                    &quot;oracle&quot;<br \/>\noracle_group:                   &quot;dba&quot;<br \/>\nmedia_dir:                      &quot;\/mnt\/media&quot;<br \/>\nroot_directory:                 &quot;\/u01\/app&quot;<br \/>\noracle_inventory:               &quot;{{root_directory}}\/oraInventory&quot;<br \/>\noracle_base:                    &quot;{{root_directory}}\/oracle&quot;<br \/>\nstage_directory:                &quot;{{oracle_base}}\/stage&quot;<br \/>\noracle_home_directory:<br \/>\n  db:                           &quot;{{oracle_base}}\/product\/{{version}}\/dbhome1&quot;<br \/>\n  asm:                          &quot;{{oracle_base}}\/product\/{{version}}\/grid&quot;<br \/>\nresponse_file:                  &quot;{{type}_{{action}}_{{version}}.rsp&quot;<br \/>\ndata_location:<br \/>\n FS:                            &quot;\/oradata\/{{SID}}\/data&quot;<br \/>\n ASM:                           &quot;+{{oracle_hostname}}_DATA&quot;<br \/>\nfra_location:<br \/>\n  FS:                           &quot;\/oradata\/{{SID}}\/data&quot;<br \/>\n  ASM:                          &quot;+{{oracle_hostname}}_FRA&quot;<br \/>\nredo1_location:<br \/>\n  FS:                           &quot;\/oradata\/{{SID}}\/redo&quot;<br \/>\n  ASM:                          &quot;+{{oracle_hostname}}_REDO1&quot;<br \/>\nredo2_location:<br \/>\n  FS:                           &quot;\/oradata\/{{SID}}\/redo2&quot;<br \/>\n  ASM:                          &quot;+{{oracle_hostname}}_REDO2&quot;<br \/>\nsysasm_passd:                   changueme2020<br \/>\nasmdbsnmp_passwd:               changueme2020<\/p>\n<p>[\/code]<br \/>\nComo cosas curiosas podeis ver que <\/p>\n<ul>\n<li> Nuestros directorios raices estar\u00e1n como indican las Oracle Best Practices\n<li> Cuando la base de datos tenga ASM los diskgroups no se llamaran DATA,REDO y FRA, sino que tendr\u00e1n como prefijo el nombre del equipo y tendremos dos REDOS\n<li> Al contrario de las best practices de Oracle vamos ha hacer el taller a lo  \u00abold style \u00bb todo bajo el grupo <i>dba<\/i>, el a\u00f1adir los temas grupos es algo trivial una vez se ha visto la manera en la que funciona el playbook\n<\/ul>\n<h2> asm_SO_precondition_19.0.0.3.yaml  <\/h2>\n<p>La notaci\u00f3n de este fichero va a ser <b>$TYPE_SO_precondition_$VERSION.yaml<\/b>, este  este fichero es el que va a ser utilizado para comprobar las precondiciones de la instalaci\u00f3n.<\/p>\n<p>En el laboratorio vamos a incluir solamente a modo de ejemplo cinco de paquetes, pero podr\u00edamos extenderlo a todo lo que queramos que se compruebe como precondicion de la instalaci\u00f3n, como par\u00e1metros del kernel, configuraciones del equipo ( selinux, firewall ) &#8230;<\/p>\n<p>En caso de tener varias distribuciones de sistemas operativos (asumimos que trabajamos bajo linux) o versiones de los mismos, seria este \u00fanico fichero el que guardar\u00eda las precondiciones tanto de los valores comunes como de los  espec\u00edficos para cada sistema distribuci\u00f3n\/version <\/p>\n<p>[code lang=\u00bbpy\u00bb]<br \/>\npackage_name :<br \/>\n &#8211; binutils<br \/>\n &#8211; elfutils-libelf<br \/>\n &#8211; elfutils-libelf<br \/>\n &#8211; oracleasm<br \/>\n &#8211; oracleasm-support<br \/>\n[\/code]<\/p>\n<h2> asm_binaries.yaml<\/h2>\n<p>La notaci\u00f3n de este fichero va a ser <b>$TYPE_binaries.yaml<\/b>, aqui tenemos informaci\u00f3n f\u00edsica del paquete y del response file a usar.<br \/>\nEste fichero no dispone del sufijo version, ya que contendr\u00e1 a modo de inventario la informaci\u00f3n de todos los binarios.<\/p>\n<p>[code lang=\u00bbpy\u00bb]<br \/>\n19.0.0.3:<br \/>\n response_file:                  &quot;asm_binaries_19.0.0.3.rsp&quot;<br \/>\n binary_name:                    &quot;LINUX.X64_193000_grid_home.zip&quot;<br \/>\n19.0.0.5:<br \/>\n response_file:                  &quot;asm_binaries_19.0.0.5.rsp&quot;<br \/>\n  binary_name:                    &quot;LINUX.X64_195000_grid_home.zip&quot;[\/code]<br \/>\nOtra informaci\u00f3n adicional que podr\u00edamos a\u00f1adir es el MD5 del binario para comprobar su estado.<\/p>\n<h1> Playbooks <\/h1>\n<p>En este laboratorio vamos a ejecutar un trabajo en AWX-RPM que va a estar formado por una secuencia de playbooks independientes.<br \/>\nEl orden y contenido de cada uno de ellos es:<\/p>\n<h2> so_packages<\/h2>\n<p>El primer playbook a ejecutar es el que va a comprobar los prerrequisitios de nuestra instalaci\u00f3n.<br \/>\nLos chequeos b\u00e1sicos a llevar a cabo son los paquetes y usuarios y grupos<\/p>\n<p>[code lang=\u00bbpy\u00bb]<br \/>\n# Pamplona 2019<br \/>\n#  Playbook which checks if required packages ares installed at the destination server<br \/>\n#<br \/>\n#  requires<br \/>\n#    env:                             name of the server  which should be in the inventory<br \/>\n#    type:                            type of installation [asm|db]<br \/>\n#    vars\/[type]_SO_precomdition_[version].yaml   configuration file with the S.O preconditions<br \/>\n&#8212;<br \/>\n&#8211; hosts: &quot;{{env}}&quot;<br \/>\n  remote_user: ansible<br \/>\n  become: yes<br \/>\n  become_user: root<br \/>\n  tasks:<br \/>\n  &#8211; fail: msg=&quot;Error no server definied, please define the env variable in the job&quot;<br \/>\n    when: env is not defined<\/p>\n<p>  &#8211; name: Including package<br \/>\n    include_vars:<br \/>\n     file: &quot;{{type}}_SO_precondition_{{version}}.yaml&quot;<\/p>\n<p>  &#8211; name: check packages &quot;{{package_name}}&quot;<br \/>\n    yum:<br \/>\n      name: &quot;{{package_name}}&quot;<br \/>\n      state: latest<br \/>\n    with_items:<br \/>\n      &#8211; &quot;{{ package_name }}&quot;<\/p>\n<p>[\/code]<br \/>\nComo ve\u00edamos en el apartado de variables, carga los paquetes necesarios  de un fichero de inventario <i>{{type}}_SO_preconditions_{{version}}.yaml <\/i>, de esta manera reutilizaremos el mismo fichero para todas las versiones, teniendo que a\u00f1adir simplemente ficheros de requisitos para las distintas versiones que soportemos.<\/p>\n<h2> oracle_directories.yaml <\/h2>\n<p>Tenemos un sistema que cumple con los requisitos de configuraci\u00f3n de sistema operativo, el siguiente paso es comprobar que nuestra estructura de directorios de oracle existe y en caso contrario crearla.<br \/>\nPara este playbook usaremos el fichero de inventario  oracle_standard.yaml  en el que , como explic\u00e1bamos al principio tenemos todos los est\u00e1ndares de nuestra compa\u00f1\u00eda.<\/p>\n<p>[code lang=\u00bbpy\u00bb]<br \/>\n# Pamplona 2019<br \/>\n#  Playbook which create the required directories<br \/>\n#<br \/>\n#   requires<br \/>\n#     env:                              name of the server  which should be in the inventory<br \/>\n#     type:                                 type of installation [asm|db]<br \/>\n#     version:                              version of database or asm<br \/>\n#     vars\/oracle_standard.yaml   standard values for Oracle<br \/>\n#     ignore                                if it can ignore errors<br \/>\n&#8212;<br \/>\n&#8211; hosts: &quot;{{env}}&quot;<br \/>\n  remote_user: ansible<br \/>\n  become: yes<br \/>\n  become_user: oracle<br \/>\n  tasks:<br \/>\n# checking prerrequisites<br \/>\n  &#8211; fail: msg=&quot;Error no server definied, please define the env,type and version variables in the job&quot;<br \/>\n    when: env is not defined or version is not defined or type is not defined<br \/>\n# End prerrequisites  + check var file for improvement<\/p>\n<p># Loading env<br \/>\n  &#8211; name: Including Standard_values<br \/>\n    include_vars:<br \/>\n      file: &quot;vars\/oracle_standard.yaml&quot;<\/p>\n<p>  &#8211; set_fact:<br \/>\n     oracle_home: &quot;{{oracle_home_directory.db}}&quot;<br \/>\n    when: type == &quot;db&quot;<\/p>\n<p>  &#8211; set_fact:<br \/>\n     oracle_home: &quot;{{oracle_home_directory.asm}}&quot;<br \/>\n    when: type == &quot;asm&quot;<\/p>\n<p>#<br \/>\n  &#8211; name: create  directories<br \/>\n    file:<br \/>\n      path: &quot;{{ item }}&quot;<br \/>\n      state: directory<br \/>\n      owner: &quot;{{ oracle_user }}&quot;<br \/>\n      group: &quot;{{ oracle_group }}&quot;<br \/>\n      mode: &#8216;0775&#8217;<br \/>\n    with_items:<br \/>\n      &#8211; &quot;{{ root_directory }}&quot;<br \/>\n      &#8211; &quot;{{ stage_directory }}&quot;<br \/>\n      &#8211; &quot;{{ oracle_inventory }}&quot;<br \/>\n      &#8211; &quot;{{ oracle_base }}&quot;<br \/>\n      &#8211; &quot;{{ oracle_home }}&quot;<br \/>\n    ignore_errors: &quot;{{ ignore}}&quot;<br \/>\n    tags:<br \/>\n      &#8211; create_directories<\/p>\n<p>[\/code]<\/p>\n<h2>unzip_binaries.yaml<\/h2>\n<p>El propio nombre del playbook lo dice todo.<br \/>\nVamos a obtener en el equipo cliente el fichero de binarios descargable de Oracle y lo descomprimiremos en la ubiacion que hayamos elegido como $ORACLE_HOME<\/p>\n<p>[code lang=\u00bbpy\u00bb]<br \/>\n# Pamplona 2020<br \/>\n#  Playbook which unzips the requested file<br \/>\n#<br \/>\n#     requires<br \/>\n#       env:                       name of the server  which should be in the inventory<br \/>\n#       type:                       type of installation [asm|db]<br \/>\n#      version:                              version of database or asm<br \/>\n#      vars\/oracle_standard.yaml   standard values for Oracle<br \/>\n#      vars\/[type]_binaries.yaml   configuration file with the  variables requested for the extraction<br \/>\n#<br \/>\n&#8212;<br \/>\n&#8211; hosts: &quot;{{env}}&quot;<br \/>\n  remote_user: ansible<br \/>\n  become: yes<br \/>\n  become_user: root<br \/>\n  tasks:<br \/>\n# checking prerrequisites<br \/>\n  &#8211; fail: msg=&quot;Error no server definied, please define the env and type variable in the job&quot;<br \/>\n    when: env is not defined or type is not defined<br \/>\n# Loading env<br \/>\n  &#8211; name: Including Standard_values<br \/>\n    include_vars:<br \/>\n     file: &quot;vars\/oracle_standard.yaml&quot;<\/p>\n<p>  &#8211; name: Including binaries info<br \/>\n    include_vars:<br \/>\n      file: &quot;vars\/{{type}}_binaries.yaml&quot;<\/p>\n<p>  &#8211; name: check for required binaries<br \/>\n    stat:<br \/>\n     path: &quot;{{media_dir}}\/{{version.binary_name}}&quot;<br \/>\n    register: exsists<br \/>\n  &#8211; debug:<br \/>\n      msg: The file is availabe<br \/>\n    when: exsists.stat.readable == True<\/p>\n<p>  &#8211; fail:<br \/>\n      msg: &quot;ERROR: Source zip file not found&quot;<br \/>\n    when: exsists.stat.readable ==  False<br \/>\n    ignore_errors: False <\/p>\n<p>  &#8211; set_fact:<br \/>\n     oracle_home: &quot;{{oracle_home_directory.db}}&quot;<br \/>\n    when: type == &#8216;db&#8217;<\/p>\n<p>  &#8211; set_fact:<br \/>\n     oracle_home: &quot;{{oracle_home_directory.asm}}&quot;<br \/>\n    when: type == &#8216;asm&#8217;<\/p>\n<p>  &#8211; name: Extract &quot;{{media_dir}}\/{{version.binary_name}}  {{ oracle_home }}&quot;<br \/>\n    unarchive:<br \/>\n     src: &quot;{{media_dir}}\/{{version.binary_name}}&quot;<br \/>\n     remote_src: yes<br \/>\n     dest: &quot;{{ oracle_home }}&quot;<br \/>\n    become: yes<br \/>\n    become_user: &quot;{{ oracle_user}}&quot;<\/p>\n<p>[\/code]<\/p>\n<h2>asm_binaries_instal.yaml <\/h2>\n<p>Este es el playbook que lleva a cabo la acci\u00f3n real, veamos los pasos que lleva a cabo <\/p>\n<ul>\n<li><b> carga de entornos <\/b>comprueba los prerrequisitos y carga los ficheros de variables\n<li>  <b>Genera un response file:<\/b> Este paso es importante ya que, utiliza una template en <i>Jinja<\/i> para , con las variables obtenidas de nuestro inventario de variables <i> oracle_standard<\/i> generar un fichero de response en el formato especifico para nuestra version de asm\n<li> <b>Instalaci\u00f3n de binarios:<\/b> Ejecuta el comando de instalaci\u00f3n con el response file generado anteriormente, esta instalaci\u00f3n da muchos warnings, entre otras cosas por que , en este laboratorio no estamos cumpliendo todas las Oracle Best practices ( usuarios, grupos, ubicaciones), de ah\u00ed que le a\u00f1adamos la calusula <i> ignore Errors: True <\/i>\n<li> Ejecutamos el conocido root.sh\n<li> <b> Registro del CRS: <\/b> Hemos instalado e inventariado los binarios, pero el CRS no esta instalado, este paso <font color=red>DEBE<\/font> de tener ASM, pero, nosotros vamos a llevarlo a cabo sin la necesidad de decirle que tenemos uno, de ah\u00ed que lo hagamos ahora en un paso separado , como podemos observar, este paso se lleva a cabo como root, no como usuario oracle\n<li> <b> Creaci\u00f3n de un Listener:<\/b> Tenemos nuestro CRS instalado y registrado, pero esta vac\u00edo, por lo que , vamos a crear un listener bajo esta rama de binarios\n<li> <b> Habiitar un Listener:<\/b> Este paso es redundante y da error , ya que el paso anterior lo deja habilitado, simplemente lo ejecutamos como guarda de seguridad\n<li> <b> Arrancar el  Listener:<\/b> Aunque el objetivo de nuestro laboratorio de hoy era el de tener instalado un cls que funcione, hemos de pensar que , en un futuro crearemos el asm y probablemente instalemos las bases de datos, por lo que, es importante asegurarse que una vez acabamos esta todo encendido\n<\/ul>\n<p>[code lang=\u00bbpy\u00bb]<br \/>\n#  Pamplona 2020<br \/>\n#  Playbook which sends a respone file and  uses it to install  Oracle restart\/ CRS  \/ Grid on alone server<br \/>\n#  requires<br \/>\n#   env:                                     name of the server  which should be in the inventory<br \/>\n#   type:                                 asm or dba<br \/>\n#   version:                              version of database or asm<br \/>\n#   vars\/oracle_standard.yaml           standard values for Oracle<br \/>\n#   vars\/asm_binaries.yaml:          Info with the asm binaries<br \/>\n&#8212;<br \/>\n&#8211; hosts: &quot;{{ env }}&quot;<br \/>\n  remote_user: ansible<br \/>\n  become: yes<br \/>\n  become_user: root<br \/>\n  tasks:<br \/>\n # checking prerrequisites<br \/>\n  &#8211; fail: msg=&quot;Error no server definied, please define the env variable in the job&quot;<br \/>\n    when: env is not defined or version is not defined or type is not defined<br \/>\n# Loading env<br \/>\n  &#8211; name: Including Standard_values<br \/>\n    include_vars:<br \/>\n      file: &quot;vars\/oracle_standard.yaml&quot;<\/p>\n<p>  &#8211; name: Including binaries info<br \/>\n    include_vars:<br \/>\n     file: &quot;vars\/{{type}}_binaries.yaml&quot;<br \/>\n  &#8211; set_fact:<br \/>\n     oracle_home: &quot;{{oracle_home_directory.db}}&quot;<br \/>\n    when: type == &#8216;db&#8217;<\/p>\n<p>  &#8211; set_fact:<br \/>\n     oracle_home: &quot;{{oracle_home_directory.asm}}&quot;<br \/>\n    when: type == &#8216;asm&#8217;<br \/>\n#<br \/>\n  &#8211; name: generate response file<br \/>\n    template:<br \/>\n     src: &quot;templates\/{{ version.response_file }}.j2&quot;<br \/>\n     dest: &quot;{{ stage_directory }}\/{{version.response_file}}&quot;<br \/>\n     mode: &#8216;0644&#8217;<\/p>\n<p>  &#8211; name: Install Grid  19c Software<br \/>\n    shell: &quot;{{ oracle_home }}\/gridSetup.sh  -silent -responseFile {{ stage_directory }}\/{{version.response_file}}&quot;<br \/>\n    become: yes<br \/>\n    become_user: &quot;{{ oracle_user }}&quot;<br \/>\n    args:<br \/>\n     chdir: &quot;{{ oracle_home }}&quot;<br \/>\n    ignore_errors: True<\/p>\n<p>  &#8211; name: execute root.sh<br \/>\n    shell: &quot;{{ oracle_home }}\/root.sh&quot;<br \/>\n    become: yes<br \/>\n    become_user: root<br \/>\n    args:<br \/>\n     chdir: &quot;{{ oracle_home }}&quot;<\/p>\n<p>  &#8211; name: Configure CRS<br \/>\n    shell: $GI_HOME\/perl\/bin\/perl -I $GI_HOME\/perl\/lib -I $GI_HOME\/crs\/install $GI_HOME\/crs\/install\/roothas.pl<br \/>\n    become: yes<br \/>\n    become_user: root<br \/>\n    args:<br \/>\n     chdir: &quot;{{ oracle_home }}&quot;<br \/>\n    environment:<br \/>\n      GI_HOME: &quot;{{ oracle_home }}&quot;<br \/>\n    ignore_errors: True<\/p>\n<p>  &#8211; name: Create listener<br \/>\n    shell: &quot;$GI_HOME\/bin\/srvctl add listener -listener LISTENER  -oraclehome  {{ oracle_home }}&quot;<br \/>\n    become: yes<br \/>\n    become_user: &quot;{{oracle_user}}&quot;<br \/>\n    args:<br \/>\n     chdir: &quot;{{ oracle_home }}&quot;<br \/>\n    environment:<br \/>\n      GI_HOME: &quot;{{ oracle_home }}&quot;<br \/>\n      ORACLE_BASE: &quot;{{ oracle_base}}&quot;<br \/>\n    ignore_errors: False<\/p>\n<p>  &#8211; name: Enable listener<br \/>\n    shell: $GI_HOME\/bin\/srvctl enable listener -listener LISTENER<br \/>\n    become: yes<br \/>\n    become_user: &quot;{{oracle_user}}&quot;<br \/>\n    args:<br \/>\n     chdir: &quot;{{ oracle_home }}&quot;<br \/>\n    environment:<br \/>\n      GI_HOME: &quot;{{ oracle_home }}&quot;<br \/>\n      ORACLE_BASE: &quot;{{ oracle_base}}&quot;<br \/>\n    ignore_errors: True<\/p>\n<p>  &#8211; name: Start listener<br \/>\n    shell: $GI_HOME\/bin\/srvctl start listener -listener LISTENER<br \/>\n    become: yes<br \/>\n    become_user: &quot;{{oracle_user}}&quot;<br \/>\n    args:<br \/>\n     chdir: &quot;{{ oracle_home }}&quot;<br \/>\n    environment:<br \/>\n      GI_HOME: &quot;{{ oracle_home }}&quot;<br \/>\n      ORACLE_BASE: &quot;{{ oracle_base}}&quot;<br \/>\n    ignore_errors: False<\/p>\n<p>[\/code]<\/p>\n<p>Como siempre, las ultimas versiones de este codigo est\u00e1n disponibles en el proyecto <a href=\"https:\/\/github.com\/pamplonaDBA\/provisioning\" rel=\"noopener noreferrer\" target=\"_blank\">provisioning<\/a> en GITHUB<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hoy vamos a ver los pasos a llevar a cabo y el codigo para llevar a cabo una instalaci\u00f3n de un Grid Infraestructura de la versi\u00f3n 19c en un standalone server . Como puntos importantes a esta instalaci\u00f3n tenemos: Condiciones &hellip; <a href=\"http:\/\/clemente.pamplona.name\/dba\/instalando-el-grid-infraesturcure-con-ansible\/\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[567,921,976],"tags":[],"class_list":["post-2119","post","type-post","status-publish","format-standard","hentry","category-12c-en","category-18c","category-ansible"],"_links":{"self":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/2119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/comments?post=2119"}],"version-history":[{"count":19,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/2119\/revisions"}],"predecessor-version":[{"id":2183,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/2119\/revisions\/2183"}],"wp:attachment":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/media?parent=2119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/categories?post=2119"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/tags?post=2119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}