cavemandaveman.nifi

Ansible Rolle: NiFi

Eine Ansible Rolle, die NiFi auf Linux installiert. Standardmäßig installiert sie NiFi so, dass das Upgrade einfach ist.

Voraussetzungen

Mindestens Java 8 wird benötigt.

Rollenvariablen

Siehe defaults/main.yml für alle Variablen und wie man sie festlegt. Für eine detailliertere Erklärung ist das NiFi System Administrator’s Guide eine hilfreiche Ressource.

Die folgenden Angaben spezifizieren, wo man Binärdateien (tarballs) herunterladen (oder nach vorhandenen suchen) kann, wo NiFi installiert wird und ein Home-Verzeichnis, das symbolisch mit der angegebenen Version verlinkt wird. Zudem gibt es ein zentrales Konfigurationsverzeichnis für Dateien, die nicht geändert werden müssen (um das Kopieren während der Upgrades zu vermeiden). Sie können weitere beliebige Schlüssel/Wert-Paare zu diesem Dictionary hinzufügen, und diese Verzeichnisse werden erstellt. Dies könnte nützlich sein, wenn Sie zusätzliche Verzeichnisse für Dinge wie benutzerdefinierte NARs, Treiber usw. benötigen.

nifi_config_dirs:
  binaries: /tmp
  install: /opt/nifi/releases
  home: /opt/nifi/releases/current
  external_config: /opt/nifi/config_resources

Standardmäßig wird diese Verzeichnisstruktur erstellt:

|--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

Jedes Schlüssel/Wert-Paar aus einer Konfigurationsdatei kann zu den folgenden Dicts hinzugefügt werden. Die Namen der Dictionaires entsprechen den Dateinamen. Die aktuellen Konfigurationsoptionen für diese Dateien finden Sie hier.

nifi_properties:
bootstrap:
nifi_env:
logback:
login_identity_providers:
state_management:
authorizers:
zookeeper:

Abhängigkeiten

Keine.

Beispiel-Playbooks

Diese gehen davon aus, dass Sie hash_behaviour=merge in Ihrer Konfiguration gesetzt haben. Wenn nicht, fügen Sie bitte auch die Standard-Dict-Schlüssel/Werte aus defaults/main.yml hinzu.

Basisinstanz von NiFi auf einem einzelnen Knoten:

- hosts: nifi_servers
  become: yes
  roles:
    - cavemandaveman.nifi

Basiscluster von 3 NiFi-Knoten mit eingebettetem Zookeeper:

- hosts: nifi_servers
  become: yes
  roles:
    - cavemandaveman.nifi
  vars:
    nifi_properties:
      # HTTP-Eigenschaften müssen deaktiviert sein, damit HTTPS funktioniert
      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'] }}"
    # Angenommen, nifi_server1 = 192.168.1.10, nifi_server2 = 192.168.1.11, nifi_server3 = 192.168.1.12
    # hier wird Ansible automatisch die myid-Datei auf jedem Host auf die letzte Oktette der IP-Adresse des Knotens setzen
    # und wir setzen die 'X' der zookeeper['server.X']-Schlüssel auf diese gleichen Zahlen.
    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

Sichere NiFi-Instanz auf einem einzelnen Knoten mit LDAP:

- hosts: nifi_servers
  become: yes
  roles:
    - cavemandaveman.nifi
  vars:
    nifi_properties:
      # HTTP-Eigenschaften müssen deaktiviert sein, damit HTTPS funktioniert
      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
      /login_identity_providers/provider/property[@name="Url"]: ldap://hostname:port
      /login_identity_providers/provider/property[@name="User Search Base"]: OU=people,DC=example,DC=com
      /login_identity_providers/provider/property[@name="User Search Filter"]: sAMAccountName={0}
      /login_identity_providers/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
      /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

Sicheres 3-Knoten NiFi-Cluster mit LDAP unter Verwendung von eingebettetem Zookeeper:

- hosts: nifi_servers
  become: yes
  roles:
    - cavemandaveman.nifi
  vars:
    nifi_properties:
      # HTTP-Eigenschaften müssen deaktiviert sein, damit HTTPS funktioniert
      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
      # Verwenden Sie den vollständigen DN der Knotenzertifikate hier
      /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
      /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'] }}"
    # Angenommen, nifi_server1 = 192.168.1.10, nifi_server2 = 192.168.1.11, nifi_server3 = 192.168.1.12
    # wir haben Ansible automatisch die myid-Datei auf jedem Host auf die letzte Oktette der IP-Adresse des Knotens setzen
    # und wir setzen die 'X' der zookeeper['server.X']-Schlüssel auf diese gleichen Zahlen.
    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

Lizenz

GPLv3

Autoreninformationen

Diese Rolle wurde 2018 von cavemandaveman erstellt.

Über das Projekt

An Ansible Role that installs NiFi on Linux. By default, it installs NiFi in a way that makes upgrading painless.

Installieren
ansible-galaxy install cavemandaveman.nifi
Lizenz
gpl-3.0
Downloads
246
Besitzer