cavemandaveman.nifi
Rola Ansible: NiFi
Rola Ansible, która instaluje NiFi na systemie Linux. Domyślnie instaluje NiFi w sposób, który ułatwia aktualizacje.
Wymagania
Wymaga przynajmniej Javy 8.
Zmienne roli
Szczegóły dotyczące zmiennych oraz ich specyfikacji można znaleźć w pliku defaults/main.yml
. Aby uzyskać więcej informacji, polecamy Przewodnik dla Administratorów Systemu NiFi.
Poniższe ustawienia definiują, skąd pobrać (lub gdzie szukać) plików binarnych (archiwów tar), gdzie zainstalować NiFi oraz katalog domowy, który będzie symbolicznym linkiem do określonej wersji. Umożliwiają także stworzenie centralnego katalogu konfiguracyjnego do przechowywania plików, które nie muszą być zmieniane (aby uniknąć kopiowania podczas aktualizacji). Możesz dodać więcej dowolnych par klucz/wartość do tego słownika, a te katalogi zostaną utworzone. Może to być przydatne, jeśli potrzebujesz dodatkowych katalogów do rzeczy takich jak niestandardowe pliki .nar, sterowniki itp.
nifi_config_dirs:
binaries: /tmp
install: /opt/nifi/releases
home: /opt/nifi/releases/current
external_config: /opt/nifi/config_resources
Domyślnie tworzona jest następująca struktura katalogów:
|-- 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
Każda para klucz/wartość z pliku konfiguracyjnego może być dodana do poniższych słowników. Nazwy słowników odpowiadają nazwom plików. Aktualne opcje konfiguracyjne dla tych plików znajdują się tutaj.
nifi_properties:
bootstrap:
nifi_env:
logback:
login_identity_providers:
state_management:
authorizers:
zookeeper:
Zależności
Brak.
Przykłady Playbooków
Przykłady te zakładają, że masz ustawione hash_behaviour=merge
w swojej konfiguracji. Jeśli nie, dodaj również domyślne pary klucz/wartość z defaults/main.yml
.
Podstawowa instancja NiFi na jednym węźle:
- hosts: nifi_servers
become: yes
roles:
- cavemandaveman.nifi
Podstawowy klaster NiFi składający się z 3 węzłów z użyciem wbudowanego Zookeepera:
- hosts: nifi_servers
become: yes
roles:
- cavemandaveman.nifi
vars:
nifi_properties:
# Właściwości HTTP muszą być wyłączone, aby HTTPS działał
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'] }}"
# Zakładając, że nifi_server1 = 192.168.1.10, nifi_server2 = 192.168.1.11, nifi_server3 = 192.168.1.12,
# Ansible automatycznie ustawia plik myid na każdym hoście na ostatni oktet adresu IP węzła
# i ustawiamy 'X' kluczy zookeeper['server.X'] na te same liczby.
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
Bezpieczna instancja NiFi na jednym węźle z LDAP:
- hosts: nifi_servers
become: yes
roles:
- cavemandaveman.nifi
vars:
nifi_properties:
# Właściwości HTTP muszą być wyłączone, aby HTTPS działał
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
/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
/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
Bezpieczny klaster NiFi z 3 węzłami i LDAP, wykorzystujący wbudowanego Zookeepera:
- hosts: nifi_servers
become: yes
roles:
- cavemandaveman.nifi
vars:
nifi_properties:
# Właściwości HTTP muszą być wyłączone, aby HTTPS działał
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
/login_identity_providers/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
# Użyj pełnego DN certyfikatów węzłów
/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'] }}"
# Zakładając, że nifi_server1 = 192.168.1.10, nifi_server2 = 192.168.1.11, nifi_server3 = 192.168.1.12
# Ansible automatycznie ustawia plik myid na każdym hoście na ostatni oktet adresu IP węzła
# i ustawiamy 'X' kluczy zookeeper['server.X'] na te same liczby.
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
Licencja
GPLv3
Informacje o autorze
Ta rola została stworzona w 2018 roku przez 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