cavemandaveman.nifi
Rôle Ansible : NiFi
Un rôle Ansible qui installe NiFi sur Linux. Par défaut, il installe NiFi de manière à rendre l’upgrade sans douleur.
Exigences
Nécessite au moins Java 8.
Variables du rôle
Consultez defaults/main.yml
pour toutes les variables et comment les spécifier. Pour en savoir plus, le Guide de l'administrateur système NiFi est une excellente ressource.
Ce qui suit spécifie où télécharger (ou chercher des) binaires (tarballs), où installer NiFi, et un répertoire home qui sera lié symboliquement à la version spécifiée. Également, un répertoire de configuration centralisé pour stocker les fichiers qui ne doivent pas être modifiés (pour éviter la copie lors des upgrades). Vous pouvez ajouter plus de paires clé/valeur arbitraires à ce dictionnaire et ces répertoires seront créés. Cela peut être utile si vous avez besoin de répertoires supplémentaires pour des éléments comme des nars personnalisés, des pilotes, etc.
nifi_config_dirs:
binaries: /tmp
install: /opt/nifi/releases
home: /opt/nifi/releases/current
external_config: /opt/nifi/config_resources
Par défaut, voici la structure de répertoires qui sera créée :
|--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
Toute paire clé/valeur d'un fichier de configuration peut être ajoutée aux dictionnaires suivants. Les noms des dictionnaires correspondent aux noms des fichiers. Les options de configuration actuelles pour ces fichiers peuvent être trouvées ici.
nifi_properties:
bootstrap:
nifi_env:
logback:
login_identity_providers:
state_management:
authorizers:
zookeeper:
Dépendances
Aucune.
Exemples de playbooks
Ces exemples supposent que vous avez hash_behaviour=merge
défini dans votre configuration. Sinon, veuillez également inclure les clés/valeurs par défaut du dictionnaire de defaults/main.yml
.
Instance NiFi de base à un seul nœud :
- hosts: nifi_servers
become: yes
roles:
- cavemandaveman.nifi
Cluster NiFi de base à 3 nœuds utilisant Zookeeper embarqué :
- hosts: nifi_servers
become: yes
roles:
- cavemandaveman.nifi
vars:
nifi_properties:
# Les propriétés HTTP doivent être désactivées pour que HTTPS fonctionne
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'] }}"
# En supposant que nifi_server1 = 192.168.1.10, nifi_server2 = 192.168.1.11, nifi_server3 = 192.168.1.12
# nous faisons en sorte qu'Ansible définisse automatiquement le fichier myid sur chaque hôte au dernier octet de l'adresse IP du nœud
# et nous définissons les 'X' des clés zookeeper['server.X'] à ces mêmes numéros.
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
Instance NiFi sécurisée à un seul nœud avec LDAP :
- hosts: nifi_servers
become: yes
roles:
- cavemandaveman.nifi
vars:
nifi_properties:
# Les propriétés HTTP doivent être désactivées pour que HTTPS fonctionne
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
Cluster NiFi sécurisé à 3 nœuds avec LDAP utilisant Zookeeper embarqué :
- hosts: nifi_servers
become: yes
roles:
- cavemandaveman.nifi
vars:
nifi_properties:
# Les propriétés HTTP doivent être désactivées pour que HTTPS fonctionne
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
/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
# Utilisez le DN complet des certificats de nœud ici
/authorizers/userGroupProvider[1]/property[@name="Initial User Identity 2"]: CN=nifi_server1.example.com, O=ExampleLLC, L=Saint Louis, ST=Missouri, C=US
/authorizers/userGroupProvider[1]/property[@name="Initial User Identity 3"]: CN=nifi_server2.example.com, O=ExampleLLC, L=Saint Louis, ST=Missouri, C=US
/authorizers/userGroupProvider[1]/property[@name="Initial User Identity 4"]: CN=nifi_server3.example.com, O=ExampleLLC, L=Saint Louis, 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=Saint Louis, ST=Missouri, C=US
/authorizers/accessPolicyProvider/property[@name="Node Identity 2"]: CN=nifi_server2.example.com, O=ExampleLLC, L=Saint Louis, ST=Missouri, C=US
/authorizers/accessPolicyProvider/property[@name="Node Identity 3"]: CN=nifi_server3.example.com, O=ExampleLLC, L=Saint Louis, ST=Missouri, C=US
/authorizers/authorizer/identifier: managed-authorizer
/authorizers/authorizer/class: org.apache.nifi.authorization.StandardManagedAuthorizer
state_management:
/stateManagement/cluster-provider/property[@name="Connect String"]: "{{ nifi_properties['nifi.zookeeper.connect.string'] }}"
# En supposant que nifi_server1 = 192.168.1.10, nifi_server2 = 192.168.1.11, nifi_server3 = 192.168.1.12
# nous avons Ansible définir automatiquement le fichier myid sur chaque hôte au dernier octet de l'adresse IP du nœud
# et nous avons défini les 'X' des clés zookeeper['server.X'] aux mêmes numéros.
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
Licence
GPLv3
Informations sur l'auteur
Ce rôle a été créé en 2018 par 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