diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..79776e8 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.kitchen/* diff --git a/.kitchen.yml b/.kitchen.yml new file mode 100644 index 0000000..7a16e14 --- /dev/null +++ b/.kitchen.yml @@ -0,0 +1,27 @@ +--- +driver: + name: docker_cli + +transport: + name: docker_cli + +provisioner: + name: ansible_playbook + hosts: localhost + require_ansible_repo: false + require_ansible_omnibus: false + require_chef_for_busser: true + ansible_verbose: false + ansible_inventory: ./test/integration/inventory + +platforms: + - name: debian-9 + driver_config: + image: "nishiki/debian9:ansible-<%= ENV['ANSIBLE_VERSION'] ? ENV['ANSIBLE_VERSION'] : '2.7' %>" + command: /bin/systemd + volume: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + security_opt: seccomp=unconfined + +suites: + - name: default diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000..5465b58 --- /dev/null +++ b/.yamllint @@ -0,0 +1,12 @@ +--- +extends: default + +ignore: | + .kitchen/* + vendor/ + +rules: + line-length: + max: 120 + level: warning + truthy: false diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..35b5fa8 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,11 @@ +# CHANGELOG + +This project adheres to [Semantic Versioning](http://semver.org/). +Which is based on [Keep A Changelog](http://keepachangelog.com/) + +## [Unreleased] + +### Added + +- install kibana package +- copy configuration diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..0d96441 --- /dev/null +++ b/Gemfile @@ -0,0 +1,8 @@ +source 'https://rubygems.org' + +group :development do + gem 'kitchen-ansible' + gem 'kitchen-docker_cli' + gem 'rubocop', '0.50.0' + gem 'test-kitchen' +end diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..a7102f1 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,130 @@ +GEM + remote: https://rubygems.org/ + specs: + ast (2.4.0) + bcrypt_pbkdf (1.0.1) + builder (3.2.3) + ed25519 (1.2.4) + equatable (0.6.1) + erubis (2.7.0) + ffi (1.11.1) + gssapi (1.3.0) + ffi (>= 1.0.1) + gyoku (1.3.1) + builder (>= 2.1.2) + httpclient (2.8.3) + kitchen-ansible (0.50.1) + net-ssh (>= 3) + test-kitchen (>= 1.4) + kitchen-docker_cli (0.19.0) + test-kitchen (>= 1.3) + license-acceptance (1.0.13) + pastel (~> 0.7) + tomlrb (~> 1.2) + tty-box (~> 0.3) + tty-prompt (~> 0.18) + little-plugger (1.1.4) + logging (2.2.2) + little-plugger (~> 1.1) + multi_json (~> 1.10) + mixlib-install (3.11.21) + mixlib-shellout + mixlib-versioning + thor + mixlib-shellout (3.0.7) + mixlib-versioning (1.2.7) + multi_json (1.13.1) + necromancer (0.5.0) + net-scp (2.0.0) + net-ssh (>= 2.6.5, < 6.0.0) + net-ssh (5.2.0) + net-ssh-gateway (2.0.0) + net-ssh (>= 4.0.0) + nori (2.6.0) + parallel (1.17.0) + parser (2.6.4.0) + ast (~> 2.4.0) + pastel (0.7.3) + equatable (~> 0.6) + tty-color (~> 0.5) + powerpack (0.1.2) + rainbow (2.2.2) + rake + rake (12.3.3) + rubocop (0.50.0) + parallel (~> 1.10) + parser (>= 2.3.3.1, < 3.0) + powerpack (~> 0.1) + rainbow (>= 2.2.2, < 3.0) + ruby-progressbar (~> 1.7) + unicode-display_width (~> 1.0, >= 1.0.1) + ruby-progressbar (1.10.1) + rubyntlm (0.6.2) + rubyzip (1.2.3) + strings (0.1.6) + strings-ansi (~> 0.1) + unicode-display_width (~> 1.5) + unicode_utils (~> 1.4) + strings-ansi (0.1.0) + test-kitchen (2.3.2) + bcrypt_pbkdf (~> 1.0) + ed25519 (~> 1.2) + license-acceptance (~> 1.0, >= 1.0.11) + mixlib-install (~> 3.6) + mixlib-shellout (>= 1.2, < 4.0) + net-scp (>= 1.1, < 3.0) + net-ssh (>= 2.9, < 6.0) + net-ssh-gateway (>= 1.2, < 3.0) + thor (~> 0.19) + winrm (~> 2.0) + winrm-elevated (~> 1.0) + winrm-fs (~> 1.1) + thor (0.20.3) + tomlrb (1.2.8) + tty-box (0.4.1) + pastel (~> 0.7.2) + strings (~> 0.1.6) + tty-cursor (~> 0.7) + tty-color (0.5.0) + tty-cursor (0.7.0) + tty-prompt (0.19.0) + necromancer (~> 0.5.0) + pastel (~> 0.7.0) + tty-reader (~> 0.6.0) + tty-reader (0.6.0) + tty-cursor (~> 0.7) + tty-screen (~> 0.7) + wisper (~> 2.0.0) + tty-screen (0.7.0) + unicode-display_width (1.6.0) + unicode_utils (1.4.0) + winrm (2.3.2) + builder (>= 2.1.2) + erubis (~> 2.7) + gssapi (~> 1.2) + gyoku (~> 1.0) + httpclient (~> 2.2, >= 2.2.0.2) + logging (>= 1.6.1, < 3.0) + nori (~> 2.0) + rubyntlm (~> 0.6.0, >= 0.6.1) + winrm-elevated (1.1.1) + winrm (~> 2.0) + winrm-fs (~> 1.0) + winrm-fs (1.3.2) + erubis (~> 2.7) + logging (>= 1.6.1, < 3.0) + rubyzip (~> 1.1) + winrm (~> 2.0) + wisper (2.0.0) + +PLATFORMS + ruby + +DEPENDENCIES + kitchen-ansible + kitchen-docker_cli + rubocop (= 0.50.0) + test-kitchen + +BUNDLED WITH + 1.16.6 diff --git a/README.md b/README.md new file mode 100644 index 0000000..ed4ac70 --- /dev/null +++ b/README.md @@ -0,0 +1,69 @@ +# Ansible role: Kibana + +[![Version](https://img.shields.io/badge/latest_version-1.0.0_dev-green.svg)](https://git.yaegashi.fr/nishiki/ansible-role-kibana/releases) +[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](https://git.yaegashi.fr/nishiki/ansible-role-kibana/src/branch/master/LICENSE) + +Install and configure kibana + +## Requirements + +* Ansible >= 2.7 +* Debian Stretch and Buster + +## Role variables + +* `kibana_major_version` set major version to install- (default: `7`) +* `kibana_config` - hash with the configuration (see [kibana documentation](https://www.elastic.co/guide/en/kibana/current/settings.html)) + +``` + console.enabled: true + elasticsearch.requestTimeout: 30000 +``` + +## How to use + +``` +- hosts: server + roles: + - kibana +``` + +## Development + +### Test syntax with yamllint + +* install `python` and `python-pip` +* install yamllint `pip install yamllint` +* run `yamllint .` + +### Test syntax with ansible-lint + +* install `python` and `python-pip` +* install yamllint `pip install ansible-lint` +* run `ansible-lint .` + +### Tests with docker + +* install [docker](https://docs.docker.com/engine/installation/) +* install ruby +* install bundler `gem install bundler` +* install dependencies `bundle install` +* run the tests `kitchen test` + +## License + +``` +Copyright (c) 2019 Adrien Waksberg + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +``` diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..59ac9e4 --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,3 @@ +--- +kibana_major_version: 7 +kibana_config: {} diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000..c5a8be2 --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,5 @@ +--- +- name: restart kibana + systemd: + name: kibana + state: restarted diff --git a/meta/main.yml b/meta/main.yml new file mode 100644 index 0000000..41ccf73 --- /dev/null +++ b/meta/main.yml @@ -0,0 +1,21 @@ +--- +galaxy_info: + role_name: kibana + author: Adrien Waksberg + company: Adrien Waksberg + description: Install and configure kibana + license: Apache2 + min_ansible_version: 2.7 + + platforms: + - name: Debian + versions: + - stretch + - buster + + galaxy_tags: + - dashboard + - elk + - elastic + +dependencies: [] diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..8abfa10 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,46 @@ +--- +- name: install dependencies packages + apt: + name: apt-transport-https + retries: 2 + register: result + until: result is succeeded + tags: kibana + +- name: add repository key + apt_key: + url: https://artifacts.elastic.co/GPG-KEY-elasticsearch + retries: 2 + register: result + until: result is succeeded + tags: kibana + +- name: add repository + apt_repository: + repo: 'deb https://artifacts.elastic.co/packages/{{ kibana_major_version }}.x/apt stable main' + tags: kibana + +- name: install package + apt: + name: kibana + retries: 2 + register: result + until: result is succeeded + tags: kibana + +- name: copy config file + copy: + content: '{{ kibana_config|to_yaml }}' + dest: /etc/kibana/kibana.yml + owner: root + group: root + mode: 0644 + notify: restart kibana + tags: kibana + +- name: enable and start service + systemd: + name: kibana + state: started + enabled: true + tags: kibana diff --git a/test/integration/default/default.yml b/test/integration/default/default.yml new file mode 100644 index 0000000..2e56e34 --- /dev/null +++ b/test/integration/default/default.yml @@ -0,0 +1,7 @@ +--- +- hosts: localhost + connection: local + vars: + + roles: + - ansible-role-kibana diff --git a/test/integration/default/serverspec/default_spec.rb b/test/integration/default/serverspec/default_spec.rb new file mode 100644 index 0000000..98e5320 --- /dev/null +++ b/test/integration/default/serverspec/default_spec.rb @@ -0,0 +1,30 @@ +require 'serverspec' + +set :backend, :exec + +puts +puts '================================' +puts %x(ansible --version) +puts '================================' + +sleep 10 + +describe package('kibana') do + it { should be_installed } +end + +describe file('/etc/kibana/kibana.yml') do + it { should be_file } + it { should be_mode 644 } + it { should be_owned_by 'root' } + it { should be_grouped_into 'root' } +end + +describe service('kibana') do + it { should be_enabled } + it { should be_running.under('systemd') } +end + +describe port(5601) do + it { should be_listening } +end diff --git a/test/integration/inventory b/test/integration/inventory new file mode 100644 index 0000000..2fbb50c --- /dev/null +++ b/test/integration/inventory @@ -0,0 +1 @@ +localhost