cavemandaveman.nifi
Rol de Ansible: NiFi
Un rol de Ansible que instala NiFi en Linux. Por defecto, instala NiFi de una manera que hace que actualizar sea sencillo.
Requisitos
Requiere al menos Java 8.
Variables del Rol
Consulta defaults/main.yml
para todas las variables y cómo especificarlas. Para un análisis más profundo, la Guía del Administrador del Sistema de NiFi es un gran recurso.
Lo siguiente especifica dónde descargar (o buscar) binarios (archivos tar), dónde instalar NiFi y un directorio home que estará vinculado simbólicamente a la versión especificada. También, un directorio de configuración centralizado para almacenar archivos que no necesitan ser cambiados (para evitar la copia durante las actualizaciones). Puedes agregar más pares clave/valor arbitrarios a este diccionario y esos directorios serán creados. Esto puede ser útil si necesitas directorios extra para cosas como nars personalizados, controladores, etc.
nifi_config_dirs:
binaries: /tmp
install: /opt/nifi/releases
home: /opt/nifi/releases/current
external_config: /opt/nifi/config_resources
Por defecto, esta es la estructura de directorios que se creará:
|--opt/
|--nifi/
|--releases/
|--current -> nifi-1.14.0/
|--nifi-1.14.0/
|--nifi-1.13.2/
|--config_resources/
|--archive/
|--authorizations.xml
|--content_repository/
|--custom_nars/
|--database_repository/
|--flow.xml.gz
|--flowfile_repository/
|--provenance_repository/
|--state/
|--users.xml
Cualquier par clave/valor de un archivo de configuración se puede agregar a los siguientes diccionarios. Los nombres de los diccionarios corresponden a los nombres de los archivos. Las opciones de configuración actuales para estos archivos se pueden encontrar aquí.
nifi_properties:
bootstrap:
nifi_env:
logback:
login_identity_providers:
state_management:
authorizers:
zookeeper:
Dependencias
Ninguna.
Ejemplos de Playbooks
Estos asumen que tienes hash_behaviour=merge
establecido en tu configuración. Si no, incluye también las claves/valores por defecto del diccionario de defaults/main.yml
.
Instancia básica de un nodo NiFi:
- hosts: nifi_servers
become: yes
roles:
- cavemandaveman.nifi
Cluster básico de 3 nodos NiFi usando Zookeeper embebido:
- hosts: nifi_servers
become: yes
roles:
- cavemandaveman.nifi
vars:
nifi_properties:
# Las propiedades HTTP deben estar desactivadas para que HTTPS funcione
nifi.web.http.host: ""
nifi.web.http.port: ""
nifi.web.https.host: "{{ ansible_fqdn }}"
nifi.web.https.port: 8443
nifi.cluster.is.node: true
nifi.cluster.node.address: "{{ ansible_fqdn }}"
nifi.cluster.node.protocol.port: 11443
nifi.cluster.flow.election.max.candidates: 3
nifi.cluster.load.balance.host: "{{ ansible_fqdn }}"
nifi.cluster.load.balance.port: 6342
nifi.state.management.embedded.zookeeper.start: true
nifi.zookeeper.connect.string: nifi_server1:2181,nifi_server2:2181,nifi_server3:2181
login_identity_providers:
/loginIdentityProviders/provider/identifier: single-user-provider
/loginIdentityProviders/provider/class: org.apache.nifi.authentication.single.user.SingleUserLoginIdentityProvider
authorizers_user_group_providers: 0
authorizers:
/authorizers/authorizer/identifier: single-user-authorizer
/authorizers/authorizer/class: org.apache.nifi.authorization.single.user.SingleUserAuthorizer
state_management:
/stateManagement/cluster-provider/property[@name="Connect String"]: "{{ nifi_properties['nifi.zookeeper.connect.string'] }}"
# Suponiendo que nifi_server1 = 192.168.1.10, nifi_server2 = 192.168.1.11, nifi_server3 = 192.168.1.12
# hacemos que Ansible establezca automáticamente el archivo myid en cada host al último octeto de la dirección IP del nodo
# y establecemos la 'X' de las claves zookeeper['server.X'] a esos mismos números.
zookeeper_myid: "{{ ansible_default_ipv4.address.split('.')[-1] }}"
zookeeper:
server.10: nifi_server1:2888:3888
server.11: nifi_server2:2888:3888
server.12: nifi_server3:2888:3888
Instancia segura de un nodo NiFi con LDAP:
- hosts: nifi_servers
become: yes
roles:
- cavemandaveman.nifi
vars:
nifi_properties:
# Las propiedades HTTP deben estar desactivadas para que HTTPS funcione
nifi.web.http.host: ""
nifi.web.http.port: ""
nifi.web.https.host: "{{ ansible_fqdn }}"
nifi.web.https.port: 8443
nifi.security.keystore: /path/to/keystore.jks
nifi.security.keystoreType: JKS
nifi.security.keystorePasswd: keystorePassword
nifi.security.keyPasswd: keyPassword
nifi.security.truststore: /path/to/truststore.jks
nifi.security.truststoreType: JKS
nifi.security.truststorePasswd: truststorePassword
login_identity_providers:
/loginIdentityProviders/provider/identifier: ldap-provider
/loginIdentityProviders/provider/class: org.apache.nifi.ldap.LdapProvider
/loginIdentityProviders/provider/property[@name="Authentication Strategy"]: SIMPLE
/loginIdentityProviders/provider/property[@name="Manager DN"]: cn=nifi,ou=people,dc=example,dc=com
/loginIdentityProviders/provider/property[@name="Manager Password"]: password
/loginIdentityProviders/provider/property[@name="Referral Strategy"]: FOLLOW
/loginIdentityProviders/provider/property[@name="Connect Timeout"]: 10 secs
/login_identity_providers/provider/property[@name="Read Timeout"]: 10 secs
/loginIdentityProviders/provider/property[@name="Url"]: ldap://hostname:port
/loginIdentityProviders/provider/property[@name="User Search Base"]: OU=people,DC=example,DC=com
/loginIdentityProviders/provider/property[@name="User Search Filter"]: sAMAccountName={0}
/loginIdentityProviders/provider/property[@name="Identity Strategy"]: USE_DN
/loginIdentityProviders/provider/property[@name="Authentication Expiration"]: 12 hours
authorizers_user_group_providers: 1
authorizers:
/authorizers/userGroupProvider[1]/identifier: file-user-group-provider
/authorizers/userGroupProvider[1]/class: org.apache.nifi.authorization.FileUserGroupProvider
/authorizers/userGroupProvider[1]/property[@name="Users File"]: "{{ nifi_config_dirs.external_config }}/users.xml"
/authorizers/userGroupProvider[1]/property[@name="Initial User Identity 1"]: cn=John Smith,ou=people,dc=example,dc=com
/authorizers/accessPolicyProvider/identifier: file-access-policy-provider
/authorizers/accessPolicyProvider/class: org.apache.nifi.authorization.FileAccessPolicyProvider
/authorizers/accessPolicyProvider/property[@name="User Group Provider"]: file-user-group-provider
/authorizers/accessPolicyProvider/property[@name="Authorizations File"]: "{{ nifi_config_dirs.external_config }}/authorizations.xml"
/authorizers/accessPolicyProvider/property[@name="Initial Admin Identity"]: cn=John Smith,ou=people,dc=example,dc=com
/authorizers/authorizer/identifier: managed-authorizer
/authorizers/authorizer/class: org.apache.nifi.authorization.StandardManagedAuthorizer
/authorizers/authorizer/property[@name="Access Policy Provider"]: file-access-policy-provider
Cluster seguro de 3 nodos NiFi con LDAP usando Zookeeper embebido:
- hosts: nifi_servers
become: yes
roles:
- cavemandaveman.nifi
vars:
nifi_properties:
# Las propiedades HTTP deben estar desactivadas para que HTTPS funcione
nifi.web.http.host: ""
nifi.web.http.port: ""
nifi.web.https.host: "{{ ansible_fqdn }}"
nifi.web.https.port: 8443
nifi.security.keystore: /path/to/keystore.jks
nifi.security.keystoreType: JKS
nifi.security.keystorePasswd: keystorePassword
nifi.security.keyPasswd: keyPassword
nifi.security.truststore: /path/to/truststore.jks
nifi.security.truststoreType: JKS
nifi.security.truststorePasswd: truststorePassword
nifi.cluster.protocol.is.secure: true
nifi.cluster.is.node: true
nifi.cluster.node.address: "{{ ansible_fqdn }}"
nifi.cluster.node.protocol.port: 11443
nifi.cluster.flow.election.max.candidates: 3
nifi.cluster.load.balance.host: "{{ ansible_fqdn }}"
nifi.cluster.load.balance.port: 6342
nifi.state.management.embedded.zookeeper.start: true
nifi.zookeeper.connect.string: nifi_server1:2181,nifi_server2:2181,nifi_server3:2181
login_identity_providers:
/loginIdentityProviders/provider/identifier: ldap-provider
/loginIdentityProviders/provider/class: org.apache.nifi.ldap.LdapProvider
/loginIdentityProviders/provider/property[@name="Authentication Strategy"]: SIMPLE
/loginIdentityProviders/provider/property[@name="Manager DN"]: cn=nifi,ou=people,dc=example,dc=com
/loginIdentityProviders/provider/property[@name="Manager Password"]: password
/loginIdentityProviders/provider/property[@name="Referral Strategy"]: FOLLOW
/loginIdentityProviders/provider/property[@name="Connect Timeout"]: 10 secs
/loginIdentityProviders/provider/property[@name="Read Timeout"]: 10 secs
/loginIdentityProviders/provider/property[@name="Url"]: ldap://hostname:port
/loginIdentityProviders/provider/property[@name="User Search Base"]: OU=people,DC=example,DC=com
/loginIdentityProviders/provider/property[@name="User Search Filter"]: sAMAccountName={0}
/loginIdentityProviders/provider/property[@name="Identity Strategy"]: USE_DN
/login_identity_providers/provider/property[@name="Authentication Expiration"]: 12 hours
authorizers_user_group_providers: 1
authorizers:
/authorizers/userGroupProvider[1]/identifier: file-user-group-provider
/authorizers/userGroupProvider[1]/class: org.apache.nifi.authorization.FileUserGroupProvider
/authorizers/userGroupProvider[1]/property[@name="Users File"]: "{{ nifi_config_dirs.external_config }}/users.xml"
/authorizers/userGroupProvider[1]/property[@name="Initial User Identity 1"]: cn=John Smith,ou=people,dc=example,dc=com
# Usa el DN completo de los certificados del nodo aquí
/authorizers/userGroupProvider[1]/property[@name="Initial User Identity 2"]: CN=nifi_server1.example.com, O=ExampleLLC, L=San Luis, ST=Missouri, C=US
/authorizers/userGroupProvider[1]/property[@name="Initial User Identity 3"]: CN=nifi_server2.example.com, O=ExampleLLC, L=San Luis, ST=Missouri, C=US
/authorizers/userGroupProvider[1]/property[@name="Initial User Identity 4"]: CN=nifi_server3.example.com, O=ExampleLLC, L=San Luis, ST=Missouri, C=US
/authorizers/accessPolicyProvider/identifier: file-access-policy-provider
/authorizers/accessPolicyProvider/class: org.apache.nifi.authorization.FileAccessPolicyProvider
/authorizers/accessPolicyProvider/property[@name="User Group Provider"]: file-user-group-provider
/authorizers/accessPolicyProvider/property[@name="Authorizations File"]: "{{ nifi_config_dirs.external_config }}/authorizations.xml"
/authorizers/accessPolicyProvider/property[@name="Initial Admin Identity"]: cn=John Smith,ou=people,dc=example,dc=com
/authorizers/accessPolicyProvider/property[@name="Node Identity 1"]: CN=nifi_server1.example.com, O=ExampleLLC, L=San Luis, ST=Missouri, C=US
/authorizers/accessPolicyProvider/property[@name="Node Identity 2"]: CN=nifi_server2.example.com, O=ExampleLLC, L=San Luis, ST=Missouri, C=US
/authorizers/accessPolicyProvider/property[@name="Node Identity 3"]: CN=nifi_server3.example.com, O=ExampleLLC, L=San Luis, ST=Missouri, C=US
/authorizers/authorizer/identifier: managed-authorizer
/authorizers/authorizer/class: org.apache.nifi.authorization.StandardManagedAuthorizer
/authorizers/authorizer/property[@name="Access Policy Provider"]: file-access-policy-provider
state_management:
/stateManagement/cluster-provider/property[@name="Connect String"]: "{{ nifi_properties['nifi.zookeeper.connect.string'] }}"
# Suponiendo que nifi_server1 = 192.168.1.10, nifi_server2 = 192.168.1.11, nifi_server3 = 192.168.1.12
# hacemos que Ansible establezca automáticamente el archivo myid en cada host al último octeto de la dirección IP del nodo
# y establecemos la 'X' de las claves zookeeper['server.X'] a esos mismos números.
zookeeper_myid: "{{ ansible_default_ipv4.address.split('.')[-1] }}"
zookeeper:
server.10: nifi_server1:2888:3888
server.11: nifi_server2:2888:3888
server.12: nifi_server3:2888:3888
Licencia
GPLv3
Información del Autor
Este rol fue creado en 2018 por cavemandaveman.
An Ansible Role that installs NiFi on Linux. By default, it installs NiFi in a way that makes upgrading painless.
ansible-galaxy install cavemandaveman.nifi