summaryrefslogtreecommitdiffstats
path: root/deployment/playbooks/roles/prerequisites
diff options
context:
space:
mode:
Diffstat (limited to 'deployment/playbooks/roles/prerequisites')
-rw-r--r--deployment/playbooks/roles/prerequisites/defaults/main.yaml6
l---------deployment/playbooks/roles/prerequisites/library/openshift_facts.py1
-rw-r--r--deployment/playbooks/roles/prerequisites/library/rpm_q.py72
-rw-r--r--deployment/playbooks/roles/prerequisites/tasks/main.yaml84
4 files changed, 163 insertions, 0 deletions
diff --git a/deployment/playbooks/roles/prerequisites/defaults/main.yaml b/deployment/playbooks/roles/prerequisites/defaults/main.yaml
new file mode 100644
index 00000000..1705ee4f
--- /dev/null
+++ b/deployment/playbooks/roles/prerequisites/defaults/main.yaml
@@ -0,0 +1,6 @@
+---
+openshift_required_packages:
+- iptables
+- iptables-services
+- NetworkManager
+- docker{{ '-' + docker_version if docker_version is defined else '' }}
diff --git a/deployment/playbooks/roles/prerequisites/library/openshift_facts.py b/deployment/playbooks/roles/prerequisites/library/openshift_facts.py
new file mode 120000
index 00000000..e0061bb7
--- /dev/null
+++ b/deployment/playbooks/roles/prerequisites/library/openshift_facts.py
@@ -0,0 +1 @@
+/usr/share/ansible/openshift-ansible/roles/openshift_facts/library/openshift_facts.py \ No newline at end of file
diff --git a/deployment/playbooks/roles/prerequisites/library/rpm_q.py b/deployment/playbooks/roles/prerequisites/library/rpm_q.py
new file mode 100644
index 00000000..3dec50fc
--- /dev/null
+++ b/deployment/playbooks/roles/prerequisites/library/rpm_q.py
@@ -0,0 +1,72 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+# (c) 2015, Tobias Florek <tob@butter.sh>
+# Licensed under the terms of the MIT License
+"""
+An ansible module to query the RPM database. For use, when yum/dnf are not
+available.
+"""
+
+# pylint: disable=redefined-builtin,wildcard-import,unused-wildcard-import
+from ansible.module_utils.basic import * # noqa: F403
+
+DOCUMENTATION = """
+---
+module: rpm_q
+short_description: Query the RPM database
+author: Tobias Florek
+options:
+ name:
+ description:
+ - The name of the package to query
+ required: true
+ state:
+ description:
+ - Whether the package is supposed to be installed or not
+ choices: [present, absent]
+ default: present
+"""
+
+EXAMPLES = """
+- rpm_q: name=ansible state=present
+- rpm_q: name=ansible state=absent
+"""
+
+RPM_BINARY = '/bin/rpm'
+
+
+def main():
+ """
+ Checks rpm -q for the named package and returns the installed packages
+ or None if not installed.
+ """
+ module = AnsibleModule( # noqa: F405
+ argument_spec=dict(
+ name=dict(required=True),
+ state=dict(default='present', choices=['present', 'absent'])
+ ),
+ supports_check_mode=True
+ )
+
+ name = module.params['name']
+ state = module.params['state']
+
+ # pylint: disable=invalid-name
+ rc, out, err = module.run_command([RPM_BINARY, '-q', name])
+
+ installed = out.rstrip('\n').split('\n')
+
+ if rc != 0:
+ if state == 'present':
+ module.fail_json(msg="%s is not installed" % name, stdout=out, stderr=err, rc=rc)
+ else:
+ module.exit_json(changed=False)
+ elif state == 'present':
+ module.exit_json(changed=False, installed_versions=installed)
+ else:
+ module.fail_json(msg="%s is installed", installed_versions=installed)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/deployment/playbooks/roles/prerequisites/tasks/main.yaml b/deployment/playbooks/roles/prerequisites/tasks/main.yaml
new file mode 100644
index 00000000..a2686796
--- /dev/null
+++ b/deployment/playbooks/roles/prerequisites/tasks/main.yaml
@@ -0,0 +1,84 @@
+---
+- name: Gather facts
+ openshift_facts:
+ role: common
+
+- block:
+ - name: Clear yum cache
+ command: "yum clean all"
+ ignore_errors: true
+
+ - name: Install the required rpms
+ package:
+ name: "{{ item }}"
+ state: latest
+ with_items: "{{ openshift_required_packages }}"
+
+ - name: Start NetworkManager and network
+ service:
+ name: "{{ item }}"
+ state: restarted
+ enabled: true
+ with_items:
+ - NetworkManager
+ - network
+
+ - name: Determine if firewalld is installed
+ rpm_q:
+ name: "firewalld"
+ state: present
+ register: firewalld_installed
+ failed_when: false
+
+ - name: Stop firewalld
+ service:
+ name: firewalld
+ state: stopped
+ enabled: false
+ when:
+ - "{{ firewalld_installed.installed_versions | default([]) | length > 0 }}"
+
+ - name: Start iptables
+ service:
+ name: iptables
+ state: started
+ enabled: true
+
+ - name: Start docker
+ service:
+ name: docker
+ state: started
+ enabled: true
+
+ when: not (openshift.common.is_atomic | default(openshift_is_atomic)) | bool
+
+# Fail as early as possible if Atomic and old version of Docker
+- block:
+ - name: Determine Atomic Host Docker Version
+ shell: 'CURLY="{"; docker version --format "$CURLY{json .Server.Version}}"'
+ register: l_atomic_docker_version
+
+ - assert:
+ msg: Installation on Atomic Host requires Docker 1.12 or later. Attempting to patch.
+ that:
+ - l_atomic_docker_version.stdout | replace('"', '') | version_compare('1.12','>=')
+
+ rescue:
+ - name: Patching Atomic instances
+ shell: atomic host upgrade
+ register: patched
+
+ - name: Reboot when patched
+ shell: sleep 5 && shutdown -r now "Reboot due to Atomic Patching"
+ async: 1
+ poll: 0
+ ignore_errors: true
+ when: patched.changed
+
+ - name: Wait for hosts to be back
+ pause:
+ seconds: 60
+ delegate_to: 127.0.0.1
+ when: patched.changed
+
+ when: (openshift.common.is_atomic | default(openshift_is_atomic)) | bool