|
57 | 57 | - (fluentbit_geoip_account_id | default('', true) | string) | length > 0 |
58 | 58 | - (fluentbit_geoip_license_key | default('', true) | string) | length > 0 |
59 | 59 | block: |
60 | | - - name: Create temporary directory for GeoIP download |
61 | | - ansible.builtin.tempfile: |
62 | | - state: directory |
63 | | - prefix: fluentbit-geoip- |
64 | | - register: __fluentbit_geoip_tmp |
65 | | - check_mode: false |
| 60 | + - name: Check if GeoLite2 City database exists |
| 61 | + ansible.builtin.stat: |
| 62 | + path: /etc/fluent-bit/GeoLite2-City.mmdb |
| 63 | + register: __fluentbit_geoip_existing |
66 | 64 |
|
67 | | - - name: Download GeoLite2 City archive |
68 | | - ansible.builtin.get_url: |
69 | | - url: "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&account_id={{ fluentbit_geoip_account_id | string | urlencode }}&license_key={{ fluentbit_geoip_license_key | string | urlencode }}&suffix=tar.gz" |
70 | | - dest: "{{ __fluentbit_geoip_tmp.path }}/GeoLite2-City.tar.gz" |
71 | | - mode: '0600' |
72 | | - check_mode: false |
| 65 | + - name: Calculate database age in seconds |
| 66 | + ansible.builtin.set_fact: |
| 67 | + __fluentbit_geoip_age: "{{ ((ansible_date_time.epoch | int) - (__fluentbit_geoip_existing.stat.mtime | int)) if __fluentbit_geoip_existing.stat.exists else 86401 }}" |
73 | 68 |
|
74 | | - - name: Extract GeoLite2 City archive |
75 | | - ansible.builtin.unarchive: |
76 | | - src: "{{ __fluentbit_geoip_tmp.path }}/GeoLite2-City.tar.gz" |
77 | | - dest: "{{ __fluentbit_geoip_tmp.path }}" |
78 | | - remote_src: true |
79 | | - check_mode: false |
| 69 | + - name: Download and install GeoLite2 City database |
| 70 | + when: __fluentbit_geoip_age | int > 86400 |
| 71 | + block: |
| 72 | + - name: Create temporary directory for GeoIP download |
| 73 | + ansible.builtin.tempfile: |
| 74 | + state: directory |
| 75 | + prefix: fluentbit-geoip- |
| 76 | + register: __fluentbit_geoip_tmp |
| 77 | + check_mode: false |
80 | 78 |
|
81 | | - - name: Locate GeoLite2 City database file |
82 | | - ansible.builtin.find: |
83 | | - paths: "{{ __fluentbit_geoip_tmp.path }}" |
84 | | - patterns: GeoLite2-City.mmdb |
85 | | - recurse: true |
86 | | - register: __fluentbit_geoip_found |
87 | | - check_mode: false |
| 79 | + - name: Download GeoLite2 City archive |
| 80 | + ansible.builtin.get_url: |
| 81 | + url: "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&account_id={{ fluentbit_geoip_account_id | string | urlencode }}&license_key={{ fluentbit_geoip_license_key | string | urlencode }}&suffix=tar.gz" |
| 82 | + dest: "{{ __fluentbit_geoip_tmp.path }}/GeoLite2-City.tar.gz" |
| 83 | + mode: '0600' |
| 84 | + check_mode: false |
88 | 85 |
|
89 | | - - name: Ensure GeoLite2 City database was extracted |
90 | | - ansible.builtin.fail: |
91 | | - msg: GeoLite2-City.mmdb not found in downloaded archive |
92 | | - when: __fluentbit_geoip_found['files'] | length == 0 |
93 | | - check_mode: false |
| 86 | + - name: Extract GeoLite2 City archive |
| 87 | + ansible.builtin.unarchive: |
| 88 | + src: "{{ __fluentbit_geoip_tmp.path }}/GeoLite2-City.tar.gz" |
| 89 | + dest: "{{ __fluentbit_geoip_tmp.path }}" |
| 90 | + remote_src: true |
| 91 | + check_mode: false |
| 92 | + |
| 93 | + - name: Locate GeoLite2 City database file |
| 94 | + ansible.builtin.find: |
| 95 | + paths: "{{ __fluentbit_geoip_tmp.path }}" |
| 96 | + patterns: GeoLite2-City.mmdb |
| 97 | + recurse: true |
| 98 | + register: __fluentbit_geoip_found |
| 99 | + check_mode: false |
| 100 | + |
| 101 | + - name: Ensure GeoLite2 City database was extracted |
| 102 | + ansible.builtin.fail: |
| 103 | + msg: GeoLite2-City.mmdb not found in downloaded archive |
| 104 | + when: __fluentbit_geoip_found['files'] | length == 0 |
| 105 | + check_mode: false |
| 106 | + |
| 107 | + - name: Install GeoLite2 City database |
| 108 | + ansible.builtin.copy: |
| 109 | + src: "{{ __fluentbit_geoip_found['files'][0]['path'] }}" |
| 110 | + dest: /etc/fluent-bit/GeoLite2-City.mmdb |
| 111 | + owner: root |
| 112 | + group: root |
| 113 | + mode: '0644' |
| 114 | + remote_src: true |
| 115 | + notify: Restart fluent-bit |
94 | 116 |
|
95 | | - - name: Install GeoLite2 City database |
96 | | - ansible.builtin.copy: |
97 | | - src: "{{ __fluentbit_geoip_found['files'][0]['path'] }}" |
98 | | - dest: /etc/fluent-bit/GeoLite2-City.mmdb |
99 | | - owner: root |
100 | | - group: root |
101 | | - mode: '0644' |
102 | | - remote_src: true |
103 | | - notify: Restart fluent-bit |
| 117 | + - name: Skip GeoLite2 City database download |
| 118 | + ansible.builtin.debug: |
| 119 | + msg: "Skipping GeoLite2 City database download - existing database is {{ __fluentbit_geoip_age | int }} seconds old (less than 24 hours)" |
| 120 | + when: __fluentbit_geoip_age | int <= 86400 |
104 | 121 | always: |
105 | 122 | - name: Cleanup GeoIP temporary directory |
106 | 123 | ansible.builtin.file: |
|
0 commit comments