chilcano.apache-nifi

Rol de Ansible: apache-nifi

Un Rol de Ansible que instala, configura y ejecuta Apache NiFi. Este Rol ofrece las siguientes características:

  • Instala Apache NiFi.
  • Configura Apache NiFi en 3 modos:
    • http: Configuración estándar de NiFi, sin autenticación y ejecutándose sobre HTTP.
    • https: Configura y ejecuta NiFi sobre SSL/TLS con autenticación basada en certificado del cliente.
    • tls_toolkit: Recoge el par de claves, certificados digitales, almacén de claves de Java y archivos de configuración generados por Apache NiFi para configurar y ejecutar NiFi de manera segura.
  • Ejecuta Apache NiFi como un servicio systemd.

Requisitos

  • Java.

Variables del Rol

Las variables predeterminadas están en defaults/main.yml.

Dependencias

Este Rol de Ansible no tiene dependencias, aunque Apache NiFi requiere Java.
Para instalar Java, usaré el rol de (geerlingguy.java)[https://github.com/geerlingguy/ansible-role-java], pero con algunos cambios para instalar Oracle Java 8 en Debian. Puedes encontrar estos cambios en mi fork en (chilcano.java / branch oracle-java-debian)[https://github.com/chilcano/ansible-role-java/tree/oracle-java-debian]. Solo clona esa rama.

Si vas a usar Apache NiFi en Ubuntu o CentOS, no necesitarás los cambios anteriores. Solo descarga el geerlingguy.java como se indica a continuación, o instala Java 7 u 8 manualmente en tu máquina:

$ sudo ansible-galaxy install geerlingguy.java

Ejemplo de Playbook

- hosts: nf1
  become: yes
  vars_files:
    - vars.yml
  roles:
    - role: ../../playbooks/roles/ansible-role-java
      java_packages:
        - oracle-java8-installer
        - ca-certificates
        - oracle-java8-set-default
      java_cleanup: false
      java_home: "/usr/lib/jvm/java-8-oracle"

    - role: chilcano.apache-nifi
      nifi:
        version: "1.2.0"
        packaging_bin: "tar.gz"
        packaging_src: "zip"
        action:
          clean:
            installer: false
            installation: false
            dependencies: false
          install: true
          run: true
        deployment:
          mode: "http"
          tls_toolkit:
            shared_dir_local: "/Users/Chilcano/1github-repo/binaries"
            hostname: ""
            dir_repo: ""
        download:
          http_uri: "http://mirror.ox.ac.uk/sites/rsync.apache.org"
      nifi_conf_authorizers:
        initial_admin_identity: ""
        nf_hostname_pattern: ""
        nf_domain: ""
        nf_dn_suffix: ""
      nifi_properties_j2:
        nifi.remote.input.host: ""
        nifi.remote.input.secure: false
        nifi.remote.input.socket.port:
        nifi.web.http.host: ""
        nifi.web.http.port: 8080
        nifi.web.https.host: ""
        nifi.web.https.port:
        nifi.security.keystore: ""
        nifi.security.keystoreType: ""
        nifi.security.keystorePasswd: ""
        nifi.security.keyPasswd: ""
        nifi.security.truststore: ""
        nifi.security.truststoreType: ""
        nifi.security.truststorePasswd: ""
        nifi.security.user.authorizer: ""
        nifi.security.user.login.identity.provider: ""
        nifi.cluster.protocol.is.secure: false
        nifi.cluster.node.address: ""
        nifi.cluster.node.protocol.port:
      nifi_sync_dir_local: "/Users/Chilcano/1github-repo/binaries"

- hosts: nf2
  become: yes
  vars_files:
    - vars.yml
  roles:
    - role: ../../playbooks/roles/ansible-role-java
      java_packages:
        - oracle-java8-installer
        - ca-certificates
        - oracle-java8-set-default
      java_cleanup: false
      java_home: "/usr/lib/jvm/java-8-oracle"

    - role: chilcano.apache-nifi
      nifi:
        action:
          clean:
            installer: false
            installation: false
            dependencies: false
          install: true
          run: true
        deployment:
          mode: "https"
          tls_toolkit:
            shared_dir_local: "/Users/Chilcano/1github-repo/binaries"
            hostname: "nftk1"
            dir_repo: "nifi-toolkit_repo"
        download:
          http_uri: "http://mirror.ox.ac.uk/sites/rsync.apache.org"
      nifi_conf_authorizers:
        initial_admin_identity: "{{ _nftk_client_cert_dn }}"
        nf_hostname_pattern: "{{ _nftk_hostname }}"
        nf_domain: "{{ _nftk_domain }}"
        nf_dn_suffix: "{{ _nftk_dn_suffix }}"
      nifi_properties_j2:
        nifi.remote.input.host: ""
        nifi.remote.input.secure: true
        nifi.remote.input.socket.port: 10443
        nifi.web.http.host: ""
        nifi.web.http.port:
        nifi.web.https.host: ""
        nifi.web.https.port: 9443
        nifi.security.keystore: ./conf/keystore.jks
        nifi.security.keystoreType: jks
        nifi.security.keystorePasswd: "{{ _nftk_run_keystorepasswd }}"
        nifi.security.keyPasswd: "{{ _nftk_run_keypasswd }}"
        nifi.security.truststore: ./conf/truststore.jks
        nifi.security.truststoreType: jks
        nifi.security.truststorePasswd: "{{ _nftk_run_truststorepasswd }}"
        nifi.security.user.authorizer: "file-provider"
        nifi.security.user.login.identity.provider: ""
        nifi.cluster.protocol.is.secure: true
        nifi.cluster.node.address: ""
        nifi.cluster.node.protocol.port: 11443
      nifi_sync_dir_local: "/Users/Chilcano/1github-repo/binaries"

- hosts: nf3
  become: yes
  vars_files:
    - vars.yml
  roles:
    - role: ../../playbooks/roles/ansible-role-java
      java_packages:
        - oracle-java8-installer
        - ca-certificates
        - oracle-java8-set-default
      java_cleanup: false
      java_home: "/usr/lib/jvm/java-8-oracle"

    - role: chilcano.apache-nifi
      nifi:
        action:
          clean:
            installer: false
            installation: false
            dependencies: false
          install: true
          run: true
        deployment:
          mode: "tls_toolkit"
          tls_toolkit:
            shared_dir_local: "/Users/Chilcano/1github-repo/binaries"
            hostname: "nftk1"
            dir_repo: "nifi-toolkit_repo"
        download:
          http_uri: "http://mirror.ox.ac.uk/sites/rsync.apache.org"
      nifi_conf_authorizers:
        initial_admin_identity: "{{ _nftk_client_cert_dn }}"
        nf_hostname_pattern: "{{ _nftk_hostname }}"
        nf_domain: "{{ _nftk_domain }}"
        nf_dn_suffix: "{{ _nftk_dn_suffix }}"
      nifi_properties_j2:
        nifi.remote.input.host: ""
        nifi.remote.input.secure: true
        nifi.remote.input.socket.port: 10443
        nifi.web.http.host: ""
        nifi.web.http.port:
        nifi.web.https.host: ""
        nifi.web.https.port: 9443
        nifi.security.keystore: ./conf/keystore.jks
        nifi.security.keystoreType: jks
        nifi.security.keystorePasswd: "{{ _nftk_run_keystorepasswd }}"
        nifi.security.keyPasswd: "{{ _nftk_run_keypasswd }}"
        nifi.security.truststore: ./conf/truststore.jks
        nifi.security.truststoreType: jks
        nifi.security.truststorePasswd: "{{ _nftk_run_truststorepasswd }}"
        nifi.security.user.authorizer: "file-provider"
        nifi.security.user.login.identity.provider: ""
        nifi.cluster.protocol.is.secure: true
        nifi.cluster.node.address: ""
        nifi.cluster.node.protocol.port: 11443
      nifi_sync_dir_local: "/Users/Chilcano/1github-repo/binaries"

El archivo vars.yml es:

_nftk_domain: "intix.info"
_nftk_hostname: "nf[1-3]"
_nftk_dn_suffix: "OU=INTIX"
_nftk_client_cert_dn: "CN=chilcano, {{ _nftk_dn_suffix }}"
_nftk_run_clientpasswd: demo00a
_nftk_run_keypasswd: demo00b
_nftk_run_truststorepasswd: demo00c
_nftk_run_keystorepasswd: demo00d

El archivo inventory es:

[nifis]
nf1
nf2
nf3

nf1 ansible_host=192.168.77.5
nf2 ansible_host=192.168.77.6
nf3 ansible_host=192.168.77.7

[nifis:vars]
ansible_user=vagrant
ansible_ssh_private_key_file="/Users/Chilcano/.vagrant.d/insecure_private_key"

Actualización

  • Ahora el Rol copia el instalador/binario desde el sistema de archivos local; si no existe, intenta descargarlo desde una URL. Finalmente, el binario descargado se copiará al sistema de archivos local para ser reutilizado.
  • El archivo inventory debe actualizarse agregando ansible_ssh_private_key_file para usar el módulo synchronize de Ansible (para sincronizar archivos grandes) en lugar del módulo fetch.
  • Se agregó la variable nifi_sync_dir_local a este Rol de Ansible. Es el directorio local desde donde el Rol de Ansible tomará el binario/o instalador que se copiará al remoto.

Licencia

MIT / BSD

Información del Autor

Este rol fue creado en 2017 por Roger Carhuatocto, autor del Blog HolisticSecurity.io.

Acerca del proyecto

An Ansible Role that installs and runs Apache NiFi.

Instalar
ansible-galaxy install chilcano.apache-nifi
Licencia
Unknown
Descargas
385
Propietario
Crypto, PKI, DevSecOps, Cloud & Cyber Security, SOA, API & Service Mesh.