summaryrefslogtreecommitdiffstats
path: root/test/integration/targets/service/tasks
diff options
context:
space:
mode:
Diffstat (limited to 'test/integration/targets/service/tasks')
-rw-r--r--test/integration/targets/service/tasks/main.yml62
-rw-r--r--test/integration/targets/service/tasks/rc_cleanup.yml9
-rw-r--r--test/integration/targets/service/tasks/rc_setup.yml21
-rw-r--r--test/integration/targets/service/tasks/systemd_cleanup.yml25
-rw-r--r--test/integration/targets/service/tasks/systemd_setup.yml17
-rw-r--r--test/integration/targets/service/tasks/sysv_cleanup.yml9
-rw-r--r--test/integration/targets/service/tasks/sysv_setup.yml11
-rw-r--r--test/integration/targets/service/tasks/tests.yml258
-rw-r--r--test/integration/targets/service/tasks/upstart_cleanup.yml17
-rw-r--r--test/integration/targets/service/tasks/upstart_setup.yml19
10 files changed, 448 insertions, 0 deletions
diff --git a/test/integration/targets/service/tasks/main.yml b/test/integration/targets/service/tasks/main.yml
new file mode 100644
index 0000000..4fc2ddf
--- /dev/null
+++ b/test/integration/targets/service/tasks/main.yml
@@ -0,0 +1,62 @@
+- name: skip unsupported distros
+ meta: end_host
+ when: ansible_distribution in ['Alpine']
+
+- name: install the test daemon script
+ copy:
+ src: ansible_test_service.py
+ dest: /usr/sbin/ansible_test_service
+ mode: '755'
+
+- name: rewrite shebang in the test daemon script
+ lineinfile:
+ path: /usr/sbin/ansible_test_service
+ line: "#!{{ ansible_python_interpreter | realpath }}"
+ insertbefore: BOF
+ firstmatch: yes
+
+- block:
+ # determine init system is in use
+ - name: detect sysv init system
+ set_fact:
+ service_type: sysv
+ when:
+ - ansible_distribution in ['RedHat', 'CentOS', 'ScientificLinux']
+ - ansible_distribution_version is version('6', '>=')
+ - ansible_distribution_version is version('7', '<')
+ - name: detect systemd init system
+ set_fact:
+ service_type: systemd
+ when: (ansible_distribution in ['RedHat', 'CentOS', 'ScientificLinux'] and ansible_distribution_major_version is version('7', '>=')) or ansible_distribution == 'Fedora' or (ansible_distribution == 'Ubuntu' and ansible_distribution_version is version('15.04', '>=')) or (ansible_distribution == 'Debian' and ansible_distribution_version is version('8', '>=')) or ansible_os_family == 'Suse'
+ - name: detect upstart init system
+ set_fact:
+ service_type: upstart
+ when:
+ - ansible_distribution == 'Ubuntu'
+ - ansible_distribution_version is version('15.04', '<')
+ - name: detect rc init system
+ set_fact:
+ service_type: rc
+ when:
+ - ansible_distribution.lower().endswith('bsd')
+
+
+ - name: display value of ansible_service_mgr
+ debug:
+ msg: 'ansible_service_mgr: {{ ansible_service_mgr }}'
+
+ - name: setup test service script
+ include_tasks: '{{ service_type }}_setup.yml'
+
+ - name: execute tests
+ import_tasks: tests.yml
+
+ always:
+ - name: disable and stop ansible test service
+ service:
+ name: ansible_test
+ state: stopped
+ enabled: false
+
+ # cleaning up changes made by this playbook
+ - include_tasks: '{{ service_type }}_cleanup.yml'
diff --git a/test/integration/targets/service/tasks/rc_cleanup.yml b/test/integration/targets/service/tasks/rc_cleanup.yml
new file mode 100644
index 0000000..47f470c
--- /dev/null
+++ b/test/integration/targets/service/tasks/rc_cleanup.yml
@@ -0,0 +1,9 @@
+- name: remove the rc init file
+ file: path=/etc/rc.d/ansible_test state=absent
+ register: remove_rc_result
+
+- name: assert that the rc init file was removed
+ assert:
+ that:
+ - "remove_rc_result.path == '/etc/rc.d/ansible_test'"
+ - "remove_rc_result.state == 'absent'"
diff --git a/test/integration/targets/service/tasks/rc_setup.yml b/test/integration/targets/service/tasks/rc_setup.yml
new file mode 100644
index 0000000..45d2c90
--- /dev/null
+++ b/test/integration/targets/service/tasks/rc_setup.yml
@@ -0,0 +1,21 @@
+- name: install the rc init file
+ copy: src=ansible.rc dest=/etc/rc.d/ansible_test mode=0755
+ register: install_rc_result
+
+- name: assert that the rc init file was installed
+ assert:
+ that:
+ - "install_rc_result.dest == '/etc/rc.d/ansible_test'"
+ - "install_rc_result.state == 'file'"
+ - "install_rc_result.mode == '0755'"
+ - "install_rc_result.checksum == '8526e4571d2ac685fa5a73af723183c194bda35d'"
+
+# FreeBSD (likely others as well) requires the command_interpreter to match the
+# shebang the script was started with as an extra caution against killing the
+# wrong thing. We add the line here.
+- name: add command_interpreter in rc init file
+ lineinfile:
+ path: /etc/rc.d/ansible_test
+ line: "command_interpreter={{ ansible_python_interpreter | realpath }}"
+ insertafter: '^pidfile.*'
+ firstmatch: yes
diff --git a/test/integration/targets/service/tasks/systemd_cleanup.yml b/test/integration/targets/service/tasks/systemd_cleanup.yml
new file mode 100644
index 0000000..e070726
--- /dev/null
+++ b/test/integration/targets/service/tasks/systemd_cleanup.yml
@@ -0,0 +1,25 @@
+- name: remove the systemd unit file
+ file: path=/usr/lib/systemd/system/ansible_test.service state=absent
+ register: remove_systemd_result
+
+- name: remove the systemd unit file
+ file: path=/usr/lib/systemd/system/ansible_test_broken.service state=absent
+ register: remove_systemd_broken_result
+
+- debug: var=remove_systemd_broken_result
+- name: assert that the systemd unit file was removed
+ assert:
+ that:
+ - "remove_systemd_result.path == '/usr/lib/systemd/system/ansible_test.service'"
+ - "remove_systemd_result.state == 'absent'"
+ - "remove_systemd_broken_result.path == '/usr/lib/systemd/system/ansible_test_broken.service'"
+ - "remove_systemd_broken_result.state == 'absent'"
+
+- name: make sure systemd is reloaded
+ shell: systemctl daemon-reload
+ register: restart_systemd_result
+
+- name: assert that systemd was reloaded
+ assert:
+ that:
+ - "restart_systemd_result.rc == 0"
diff --git a/test/integration/targets/service/tasks/systemd_setup.yml b/test/integration/targets/service/tasks/systemd_setup.yml
new file mode 100644
index 0000000..a9170a3
--- /dev/null
+++ b/test/integration/targets/service/tasks/systemd_setup.yml
@@ -0,0 +1,17 @@
+- name: install the systemd unit file
+ copy: src=ansible.systemd dest=/etc/systemd/system/ansible_test.service mode=0644
+ register: install_systemd_result
+
+- name: install a broken systemd unit file
+ file: src=ansible_test.service path=/etc/systemd/system/ansible_test_broken.service state=link
+ register: install_broken_systemd_result
+
+- name: assert that the systemd unit file was installed
+ assert:
+ that:
+ - "install_systemd_result.dest == '/etc/systemd/system/ansible_test.service'"
+ - "install_systemd_result.state == 'file'"
+ - "install_systemd_result.mode == '0644'"
+ - "install_systemd_result.checksum == '9e6320795a5c79c01230a6de1c343ea32097af52'"
+ - "install_broken_systemd_result.dest == '/etc/systemd/system/ansible_test_broken.service'"
+ - "install_broken_systemd_result.state == 'link'"
diff --git a/test/integration/targets/service/tasks/sysv_cleanup.yml b/test/integration/targets/service/tasks/sysv_cleanup.yml
new file mode 100644
index 0000000..dbdfcf8
--- /dev/null
+++ b/test/integration/targets/service/tasks/sysv_cleanup.yml
@@ -0,0 +1,9 @@
+- name: remove the sysV init file
+ file: path=/etc/init.d/ansible_test state=absent
+ register: remove_sysv_result
+
+- name: assert that the sysV init file was removed
+ assert:
+ that:
+ - "remove_sysv_result.path == '/etc/init.d/ansible_test'"
+ - "remove_sysv_result.state == 'absent'"
diff --git a/test/integration/targets/service/tasks/sysv_setup.yml b/test/integration/targets/service/tasks/sysv_setup.yml
new file mode 100644
index 0000000..7b648c2
--- /dev/null
+++ b/test/integration/targets/service/tasks/sysv_setup.yml
@@ -0,0 +1,11 @@
+- name: install the sysV init file
+ copy: src=ansible.sysv dest=/etc/init.d/ansible_test mode=0755
+ register: install_sysv_result
+
+- name: assert that the sysV init file was installed
+ assert:
+ that:
+ - "install_sysv_result.dest == '/etc/init.d/ansible_test'"
+ - "install_sysv_result.state == 'file'"
+ - "install_sysv_result.mode == '0755'"
+ - "install_sysv_result.checksum == '362899814c47d9aad6e93b2f64e39edd24e38797'"
diff --git a/test/integration/targets/service/tasks/tests.yml b/test/integration/targets/service/tasks/tests.yml
new file mode 100644
index 0000000..cfb4215
--- /dev/null
+++ b/test/integration/targets/service/tasks/tests.yml
@@ -0,0 +1,258 @@
+- name: disable the ansible test service
+ service: name=ansible_test enabled=no
+
+- name: (check mode run) enable the ansible test service
+ service: name=ansible_test enabled=yes
+ register: enable_in_check_mode_result
+ check_mode: yes
+
+- name: assert that changes reported for check mode run
+ assert:
+ that:
+ - "enable_in_check_mode_result is changed"
+
+- name: (check mode run) test that service defaults are used
+ service:
+ register: enable_in_check_mode_result
+ check_mode: yes
+ module_defaults:
+ service:
+ name: ansible_test
+ enabled: yes
+
+- name: assert that changes reported for check mode run
+ assert:
+ that:
+ - "enable_in_check_mode_result is changed"
+
+- name: (check mode run) test that specific module defaults are used
+ service:
+ register: enable_in_check_mode_result
+ check_mode: yes
+ when: "ansible_service_mgr in ['sysvinit', 'systemd']"
+ module_defaults:
+ sysvinit:
+ name: ansible_test
+ enabled: yes
+ systemd:
+ name: ansible_test
+ enabled: yes
+
+- name: assert that changes reported for check mode run
+ assert:
+ that:
+ - "enable_in_check_mode_result is changed"
+ when: "ansible_service_mgr in ['sysvinit', 'systemd']"
+
+- name: enable the ansible test service
+ service: name=ansible_test enabled=yes
+ register: enable_result
+
+- name: assert that the service was enabled and changes reported
+ assert:
+ that:
+ - "enable_result.enabled == true"
+ - "enable_result is changed"
+
+- name: start the ansible test service
+ service: name=ansible_test state=started
+ register: start_result
+
+- name: assert that the service was started
+ assert:
+ that:
+ - "start_result.state == 'started'"
+ - "start_result is changed"
+
+- name: check that the service was started
+ shell: 'cat /proc/$(cat /var/run/ansible_test_service.pid)/cmdline'
+ register: cmdline
+ failed_when: cmdline is failed or '\0/usr/sbin/ansible_test_service\0' not in cmdline.stdout
+ # No proc on BSD
+ when: not ansible_distribution.lower().endswith('bsd')
+
+- name: check that the service was started (*bsd)
+ shell: 'ps -p $(cat /var/run/ansible_test_service.pid)'
+ register: cmdline
+ failed_when: cmdline is failed or '/usr/sbin/ansible_test_service' not in cmdline.stdout
+ when: ansible_distribution.lower().endswith('bsd')
+
+- name: find the service with a pattern
+ service: name=ansible_test pattern="ansible_test_ser" state=started
+ register: start2_result
+
+- name: assert that the service was started via the pattern
+ assert:
+ that:
+ - "start2_result.name == 'ansible_test'"
+ - "start2_result.state == 'started'"
+ - "start2_result is not changed"
+
+- name: fetch PID for ansible_test service (before restart)
+ command: 'cat /var/run/ansible_test_service.pid'
+ register: pid_before_restart
+
+- name: restart the ansible test service
+ service: name=ansible_test state=restarted
+ register: restart_result
+
+- name: assert that the service was restarted
+ assert:
+ that:
+ - "restart_result.state == 'started'"
+ - "restart_result is changed"
+
+- name: fetch PID for ansible_test service (after restart)
+ command: 'cat /var/run/ansible_test_service.pid'
+ register: pid_after_restart
+
+- name: "check that PIDs aren't the same"
+ fail:
+ when: pid_before_restart.stdout == pid_after_restart.stdout
+
+- name: check that service is started
+ command: 'cat /proc/{{ pid_after_restart.stdout }}/cmdline'
+ register: cmdline
+ failed_when: cmdline is failed or '\0/usr/sbin/ansible_test_service\0' not in cmdline.stdout
+ # No proc on BSD
+ when: not ansible_distribution.lower().endswith('bsd')
+
+- name: check that the service is started (*bsd)
+ shell: 'ps -p {{ pid_after_restart.stdout }}'
+ register: cmdline
+ failed_when: cmdline is failed or '/usr/sbin/ansible_test_service' not in cmdline.stdout
+ when: ansible_distribution.lower().endswith('bsd')
+
+- name: restart the ansible test service with a sleep
+ service: name=ansible_test state=restarted sleep=2
+ register: restart_sleep_result
+
+- name: assert that the service was restarted with a sleep
+ assert:
+ that:
+ - "restart_sleep_result.state == 'started'"
+ - "restart_sleep_result is changed"
+
+- name: reload the ansible test service
+ service: name=ansible_test state=reloaded
+ register: reload_result
+ # don't do this on systems with systemd because it triggers error:
+ # Unable to reload service ansible_test: ansible_test.service is not active, cannot reload.
+ when: service_type != "systemd"
+
+- name: assert that the service was reloaded
+ assert:
+ that:
+ - "reload_result.state == 'started'"
+ - "reload_result is changed"
+ when: service_type != "systemd"
+
+- name: "test for #42786 (sysvinit)"
+ when: service_type == "sysv"
+ block:
+ - name: "sysvinit (#42786): check state, 'enable' parameter isn't set"
+ service: use=sysvinit name=ansible_test state=started
+
+ - name: "sysvinit (#42786): check that service is still enabled"
+ service: use=sysvinit name=ansible_test enabled=yes
+ register: result_enabled
+ failed_when: result_enabled is changed
+
+- name: fetch PID for ansible_test service
+ command: 'cat /var/run/ansible_test_service.pid'
+ register: ansible_test_pid
+
+- name: check that service is started
+ command: 'cat /proc/{{ ansible_test_pid.stdout }}/cmdline'
+ register: cmdline
+ failed_when: cmdline is failed or '\0/usr/sbin/ansible_test_service\0' not in cmdline.stdout
+ # No proc on BSD
+ when: not ansible_distribution.lower().endswith('bsd')
+
+- name: check that the service is started (*bsd)
+ shell: 'ps -p {{ ansible_test_pid.stdout }}'
+ register: cmdline
+ failed_when: cmdline is failed or '/usr/sbin/ansible_test_service' not in cmdline.stdout
+ when: ansible_distribution.lower().endswith('bsd')
+
+- name: stop the ansible test service
+ service: name=ansible_test state=stopped
+ register: stop_result
+
+- name: check that the service is stopped
+ command: 'cat /proc/{{ ansible_test_pid.stdout }}/cmdline'
+ register: cmdline
+ failed_when: cmdline is not failed or '\0/usr/sbin/ansible_test_service\0' in cmdline.stdout
+ # No proc on BSD
+ when: not ansible_distribution.lower().endswith('bsd')
+
+- name: check that the service is stopped (*bsd)
+ shell: 'ps -p {{ ansible_test_pid.stdout }}'
+ register: cmdline
+ failed_when: cmdline is not failed or '/usr/sbin/ansible_test_service' in cmdline.stdout
+ when: ansible_distribution.lower().endswith('bsd')
+
+- name: assert that the service was stopped
+ assert:
+ that:
+ - "stop_result.state == 'stopped'"
+ - "stop_result is changed"
+
+- name: disable the ansible test service
+ service: name=ansible_test enabled=no
+ register: disable_result
+
+- name: assert that the service was disabled
+ assert:
+ that:
+ - "disable_result.enabled == false"
+ - "disable_result is changed"
+
+- name: try to enable a broken service
+ service: name=ansible_broken_test enabled=yes
+ register: broken_enable_result
+ ignore_errors: True
+
+- name: assert that the broken test failed
+ assert:
+ that:
+ - "broken_enable_result is failed"
+
+- name: remove the test daemon script
+ file: path=/usr/sbin/ansible_test_service state=absent
+ register: remove_result
+
+- name: assert that the test daemon script was removed
+ assert:
+ that:
+ - "remove_result.path == '/usr/sbin/ansible_test_service'"
+ - "remove_result.state == 'absent'"
+
+- name: the module must fail when a service is not found
+ service:
+ name: 'nonexisting'
+ state: stopped
+ register: result
+ ignore_errors: yes
+ when: ansible_distribution != 'FreeBSD'
+
+- assert:
+ that:
+ - result is failed
+ - result is search("Could not find the requested service nonexisting")
+ when: ansible_distribution != 'FreeBSD'
+
+- name: the module must fail in check_mode as well when a service is not found
+ service:
+ name: 'nonexisting'
+ state: stopped
+ register: result
+ check_mode: yes
+ ignore_errors: yes
+ when: ansible_distribution != 'FreeBSD'
+
+- assert:
+ that:
+ - result is failed
+ - result is search("Could not find the requested service nonexisting")
+ when: ansible_distribution != 'FreeBSD'
diff --git a/test/integration/targets/service/tasks/upstart_cleanup.yml b/test/integration/targets/service/tasks/upstart_cleanup.yml
new file mode 100644
index 0000000..683fb10
--- /dev/null
+++ b/test/integration/targets/service/tasks/upstart_cleanup.yml
@@ -0,0 +1,17 @@
+- vars:
+ upstart_files:
+ - /etc/init/ansible_test.conf
+ - /etc/init/ansible_test.override
+ - /etc/init/ansible_test_broken.conf
+ block:
+ - name: remove upstart init files
+ file:
+ path: '{{ item }}'
+ state: absent
+ loop: '{{ upstart_files }}'
+
+ - name: assert that upstart init files were removed
+ raw: 'test -e {{ item }}'
+ loop: '{{ upstart_files }}'
+ register: file_exists
+ failed_when: file_exists is not failed
diff --git a/test/integration/targets/service/tasks/upstart_setup.yml b/test/integration/targets/service/tasks/upstart_setup.yml
new file mode 100644
index 0000000..e9607bb
--- /dev/null
+++ b/test/integration/targets/service/tasks/upstart_setup.yml
@@ -0,0 +1,19 @@
+- name: install the upstart init file
+ copy: src=ansible.upstart dest=/etc/init/ansible_test.conf mode=0644
+ register: install_upstart_result
+
+- name: install an upstart init file that will fail (manual in .conf)
+ copy: src=ansible-broken.upstart dest=/etc/init/ansible_broken_test.conf mode=0644
+ register: install_upstart_broken_result
+
+- name: assert that the upstart init file was installed
+ assert:
+ that:
+ - "install_upstart_result.dest == '/etc/init/ansible_test.conf'"
+ - "install_upstart_result.state == 'file'"
+ - "install_upstart_result.mode == '0644'"
+ - "install_upstart_result.checksum == '5c314837b6c4dd6c68d1809653a2974e9078e02a'"
+ - "install_upstart_broken_result.dest == '/etc/init/ansible_broken_test.conf'"
+ - "install_upstart_broken_result.state == 'file'"
+ - "install_upstart_broken_result.mode == '0644'"
+ - "install_upstart_broken_result.checksum == 'e66497894f2b2bf71e1380a196cc26089cc24a10'"