Added a playbook to make sure that time gets configured properly in all nodes.
Signed-off-by: Baha Mesleh <baha.mesleh@nokia.com>
Change-Id: I525c686553b2e4a103f4cc69f1b98a0778d9c5ed
ln -sf %{_playbooks_path}/single_node_storage.yml %{buildroot}/%{_provisioning_path}
ln -sf %{_playbooks_path}/ceph-deploy.yml %{buildroot}/%{_provisioning_path}
ln -sf %{_playbooks_path}/baremetal-interface-config.yml %{buildroot}/%{_provisioning_path}
+ln -sf %{_playbooks_path}/ntp-check.yml %{buildroot}/%{_provisioning_path}
# Create links for the postconfig phase
mkdir -p %{buildroot}/%{_postconfig_path}
--- /dev/null
+# cmframework.requires: baremetal-interface-config.yml,ntp-config.yml
+---
+- name: Check ntpd on management nodes
+ hosts: management
+ vars:
+ external_ntp_server: '{{ time.ntp_servers[0] }}'
+ roles:
+ - ntp-utils
+
+- name: Check ntpd on other nodes
+ hosts: base:!management
+ vars:
+ external_ntp_server: '{{hostvars[installation_controller]["networking"]["infra_internal"]["ip"]}}'
+ modified_ntp_servers_list: '[{% for node in groups["management"] %}"{{hostvars[node]["networking"]["infra_internal"]["ip"]}}"{% if not loop.last %},{% endif %}{% endfor %}]'
+ roles:
+ - ntp-utils
--- /dev/null
+#!/bin/env python
+# pylint: skip-file
+from ansible.module_utils.basic import *
+import os, json
+import re, sys
+import syslog
+import re
+
+if __name__ == '__main__':
+ fields = {
+ "new_ntp_servers": {"required":True, "type": list},
+ }
+
+ module = AnsibleModule(argument_spec=fields)
+
+ new_ntp_servers = module.params['new_ntp_servers']
+
+ ntp_file = "/etc/ntp.conf"
+ tmp_file = "/etc/ntp.conf.mod"
+
+ try:
+ filter = re.compile('^server.*')
+ lines = []
+ with open(ntp_file, 'r') as f:
+ lines = f.readlines()
+
+ updated = []
+ if lines:
+ for line in lines:
+ if filter.match(line):
+ continue
+ else:
+ updated.append(line)
+
+ with open(tmp_file, 'w') as f:
+ for line in updated:
+ f.write(line)
+
+ #append the new server configuration
+ for server in new_ntp_servers:
+ f.write("server " + server + "\n");
+
+ os.rename(tmp_file, ntp_file)
+
+ module.exit_json(changed=True)
+
+ except Exception as exp:
+ module.fail_json(msg=str(ex))
--- /dev/null
+#!/bin/env python
+# pylint: skip-file
+from ansible.module_utils.basic import *
+import os, json
+import re, sys
+import syslog
+import re
+
+if __name__ == '__main__':
+ fields = {
+ "server_extra_params": {"required":True, "type": str},
+ }
+
+ module = AnsibleModule(argument_spec=fields)
+
+ server_extra_params = module.params['server_extra_params']
+
+ ntp_file = "/etc/ntp.conf"
+ tmp_file = "/etc/ntp.conf.mod"
+
+ try:
+ filter = re.compile('^server.*')
+ lines = []
+ with open(ntp_file, 'r') as f:
+ lines = f.readlines()
+
+ updated = []
+ if lines:
+ for line in lines:
+ if filter.match(line) and line.find(server_extra_params) == -1:
+ tmp = line.split('\n')[0]
+ tmp = tmp + " " + server_extra_params + '\n'
+ updated.append(tmp)
+ else:
+ updated.append(line)
+
+ with open(tmp_file, 'w') as f:
+ for line in updated:
+ f.write(line)
+
+ os.rename(tmp_file, ntp_file)
+
+ module.exit_json(changed=True)
+
+ except Exception as exp:
+ module.fail_json(msg=str(ex))
--- /dev/null
+- name: Make sure ntpdate is enabled
+ systemd:
+ enabled: yes
+ name: ntpdate
+
+- name: Stop ntpd
+ systemd:
+ state: stopped
+ name: ntpd
+
+- name: Synchronize time with external ntp server
+ shell: |
+ /usr/bin/logger "ntp-check: Synchronizing time with external server"
+ for ((i=0; i<120; i++)); do
+ /usr/sbin/ntpdate {{ external_ntp_server }}
+ if [ $? -eq 0 ]; then
+ /usr/bin/logger "ntp-check: Succeeded after $i iterations"
+ exit 0
+ fi
+ /usr/bin/logger "Failed, iteration $i"
+ /usr/bin/sleep 2
+ done
+
+- name: Adjust the master ntpd server settings
+ change_master_servers:
+ new_ntp_servers: "{{modified_ntp_servers_list}}"
+ when: modified_ntp_servers_list is defined
+
+- name: Tune ntpd parameters
+ tune_master_server_params:
+ server_extra_params: "iburst minpoll 3"
+
+- name: Start ntpd
+ systemd:
+ state: started
+ name: ntpd
+