From 196402ac657f86a94b86a12b07dfeaf7d3a0a273 Mon Sep 17 00:00:00 2001 From: Alexander Couzens Date: Tue, 6 Mar 2018 14:07:16 +0100 Subject: add ansible playbooks Introduce playbooks to do: - setup-jenkins-slave - setup a usualy or special jenkins-slave - setup-gsm-tester - setup the gsm-tester Change-Id: I7007a4e6c38f73843390ec2b3b91133aff21e36a --- ansible/roles/gsm-tester/defaults/main.yml | 7 + .../gsm-tester/files/dbus_osmo-gsm-tester.conf | 9 + .../files/osmo-gsm-tester_setcap_net_admin.sh | 2 + .../files/osmo-gsm-tester_setcap_net_raw.sh | 3 + ansible/roles/gsm-tester/tasks/main.yml | 244 +++++++++++++++++++++ .../gsm-tester/templates/quad_modem_power_cycle.sh | 16 ++ 6 files changed, 281 insertions(+) create mode 100644 ansible/roles/gsm-tester/defaults/main.yml create mode 100644 ansible/roles/gsm-tester/files/dbus_osmo-gsm-tester.conf create mode 100644 ansible/roles/gsm-tester/files/osmo-gsm-tester_setcap_net_admin.sh create mode 100755 ansible/roles/gsm-tester/files/osmo-gsm-tester_setcap_net_raw.sh create mode 100644 ansible/roles/gsm-tester/tasks/main.yml create mode 100755 ansible/roles/gsm-tester/templates/quad_modem_power_cycle.sh (limited to 'ansible/roles/gsm-tester') diff --git a/ansible/roles/gsm-tester/defaults/main.yml b/ansible/roles/gsm-tester/defaults/main.yml new file mode 100644 index 0000000..a61d3be --- /dev/null +++ b/ansible/roles/gsm-tester/defaults/main.yml @@ -0,0 +1,7 @@ +--- + +# how many modem are connected? +# This is used when reseting the modems via quad_modem_power_cycle.sh, +# because some modems take longer and the script waits until all +# modems connected +gsm_modems: 4 diff --git a/ansible/roles/gsm-tester/files/dbus_osmo-gsm-tester.conf b/ansible/roles/gsm-tester/files/dbus_osmo-gsm-tester.conf new file mode 100644 index 0000000..d867833 --- /dev/null +++ b/ansible/roles/gsm-tester/files/dbus_osmo-gsm-tester.conf @@ -0,0 +1,9 @@ + + + + + + + diff --git a/ansible/roles/gsm-tester/files/osmo-gsm-tester_setcap_net_admin.sh b/ansible/roles/gsm-tester/files/osmo-gsm-tester_setcap_net_admin.sh new file mode 100644 index 0000000..60e527a --- /dev/null +++ b/ansible/roles/gsm-tester/files/osmo-gsm-tester_setcap_net_admin.sh @@ -0,0 +1,2 @@ +#!/bin/sh +/sbin/setcap cap_net_admin+ep "$1" diff --git a/ansible/roles/gsm-tester/files/osmo-gsm-tester_setcap_net_raw.sh b/ansible/roles/gsm-tester/files/osmo-gsm-tester_setcap_net_raw.sh new file mode 100755 index 0000000..1f3a727 --- /dev/null +++ b/ansible/roles/gsm-tester/files/osmo-gsm-tester_setcap_net_raw.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +/sbin/setcap cap_net_raw+ep "$1" diff --git a/ansible/roles/gsm-tester/tasks/main.yml b/ansible/roles/gsm-tester/tasks/main.yml new file mode 100644 index 0000000..b6de075 --- /dev/null +++ b/ansible/roles/gsm-tester/tasks/main.yml @@ -0,0 +1,244 @@ +--- +# gsm tester would only need the libraries, not the dev packages. +# But the name of the -dev packages are more stable over multiple release. +- name: install osmocom runtime dependencies + apt: + name: "{{ item }}" + cache_valid_time: 3600 + update_cache: yes + with_items: + - build-essential + - git + - automake + - libdbi-dev + - libdbd-sqlite3 + - sqlite3 + - libsctp-dev + - libortp-dev + - libpcap-dev + - libc-ares-dev + - libtool + - shtool + - pkg-config + - libtalloc-dev + - libpcsclite-dev + - libgnutls28-dev + - libmnl-dev + - libssl-dev + - libczmq-dev + - libsofia-sip-ua-glib-dev + - libsqlite3-dev + - libasound2-dev + - mdbus2 + +- name: install ofono build dependencies + apt: + name: ofono + state: build-dep + cache_valid_time: 3600 + update_cache: yes + +- name: install libqmi-glib a dependency of sysmocom ofono + apt: + name: libqmi-glib-dev + cache_valid_time: 3600 + update_cache: yes + +- name: install uhub dependencies + apt: + name: "{{ item }}" + cache_valid_time: 3600 + update_cache: yes + with_items: + - libusb-1.0-0-dev + +- name: setup uhubctl repository + git: + repo: "https://github.com/mvp/uhubctl.git" + dest: /root/uhubctl + version: master + clone: yes + update: no + +- name: build uhubctl + shell: | + make && \ + make install + args: + chdir: /root/uhubctl + creates: /usr/sbin/uhubctl + +# TODO: move this into restart-modems.d directory +- name: copy quad_modem_power_cycle.sh + template: + src: quad_modem_power_cycle.sh + dest: /usr/local/bin/quad_modem_power_cycle.sh + mode: 0755 + tags: + - ofono + +- name: setup ofono repository + git: + repo: 'git://git.sysmocom.de/ofono' + dest: /root/ofono + version: osmo-gsm-tester + clone: yes + update: no + tags: + - ofono + +- name: build ofono + shell: | + ./bootstrap && \ + CFLAGS="-g" ./configure --disable-bluez4 && \ + CFLAGS="-g" make -j3 && \ + make install && \ + systemctl daemon-reload + args: + chdir: /root/ofono + creates: /usr/local/sbin/ofonod + tags: + - ofono + +- name: ensure ofono is started + service: + name: ofono + state: started + enabled: yes + tags: + - ofono + +- name: install gsm tester dependencies + apt: + name: "{{ item }}" + cache_valid_time: 3600 + update_cache: yes + with_items: + - dbus + - tcpdump + - sqlite3 + - python3 + - python3-yaml + - python3-mako + - python3-gi + - ofono + - patchelf + - sudo + - libcap2-bin + - python3-pip + +- name: install gsm tester pip dependencies + pip: + name: "{{ item }}" + executable: pip3 + editable: no + with_items: + - "git+https://github.com/podshumok/python-smpplib.git@master#egg=smpplib" + - pydbus + tags: [pip] + +- name: create group osmo-gsm-tester + group: + name: osmo-gsm-tester + +- name: add jenkins to osmo-gsm-tester and systemd-journal + user: + name: jenkins + groups: "{{ item }}" + append: yes + shell: /bin/bash + with_items: + - systemd-journal + - osmo-gsm-tester + +- name: setup state directory + file: + path: /var/tmp/osmo-gsm-tester/state + state: directory + group: osmo-gsm-tester + mode: g+rwxs + +- name: install acl + apt: + name: acl + +# Ensure the group always has access to all files +- name: add acl to state directory + acl: + path: /var/tmp/osmo-gsm-tester/state + state: present + etype: group + entity: osmo-gsm-tester + default: yes + permissions: rwx + +- name: create trials directory + file: + path: /var/tmp/osmo-gsm-tester/trials + state: directory + group: osmo-gsm-tester + mode: g+rwxs + +- name: allow osmo-gsm-tester to access ofono + copy: + src: dbus_osmo-gsm-tester.conf + dest: /etc/dbus-1/system.d/osmo-gsm-tester.conf + +- name: ensure tcpdump can be called by osmo-gsm-tester + file: + path: /usr/sbin/tcpdump + group: osmo-gsm-tester + mode: 750 + +- name: create a symlink for tcpdump + file: + src: /usr/sbin/tcpdump + dest: /usr/local/bin/tcpdump + state: link + +- name: add correct capabilities to tcpdump + capabilities: + path: /usr/sbin/tcpdump + capability: cap_net_raw,cap_net_admin=eip + state: present + +- name: allow core files for the group osmo-gsm-tester + copy: + content: "@osmo-gsm-tester - core unlimited" + dest: /etc/security/limits.d/osmo-gsm-tester_allowcore.conf + +- name: allow rt priority for the group osmo-gsm-tester + copy: + content: "@osmo-gsm-tester - rtprio 99" + dest: /etc/security/limits.d/osmo-gsm-tester_rtprio.conf + +- name: create a wrapper script to add CAP_NET_RAW + copy: + src: osmo-gsm-tester_setcap_net_raw.sh + dest: /usr/local/bin/osmo-gsm-tester_setcap_net_raw.sh + mode: 755 + +- name: allow osmo-gsm-tester sudo osmo-gsm-tester_setcap_net_raw.sh + copy: + content: | + %osmo-gsm-tester ALL=(root) NOPASSWD: /usr/local/bin/osmo-gsm-tester_setcap_net_raw.sh + dest: /etc/sudoers.d/osmo-gsm-tester_setcap_net_raw + mode: 0440 + +- name: create a wrapper script to add CAP_NET_ADMIN + copy: + src: osmo-gsm-tester_setcap_net_admin.sh + dest: /usr/local/bin/osmo-gsm-tester_setcap_net_admin.sh + mode: 755 + +- name: allow osmo-gsm-tester sudo osmo-gsm-tester_setcap_net_admin.sh + copy: + content: | + %osmo-gsm-tester ALL=(root) NOPASSWD: /usr/local/bin/osmo-gsm-tester_setcap_net_admin.sh + dest: /etc/sudoers.d/osmo-gsm-tester_setcap_net_admin + mode: 0440 + +- name: logrotate limit filesizes to 10M + copy: + content: "maxsize 10M" + dest: /etc/logrotate.d/maxsize diff --git a/ansible/roles/gsm-tester/templates/quad_modem_power_cycle.sh b/ansible/roles/gsm-tester/templates/quad_modem_power_cycle.sh new file mode 100755 index 0000000..9262f97 --- /dev/null +++ b/ansible/roles/gsm-tester/templates/quad_modem_power_cycle.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -ex +uhubctl -p 123456 -a 0 +# give a lot of time to discharge capacitors on the board +sleep 20 +uhubctl -p 123456 -a 1 +attempts=30 +while [ "x$(uhubctl | grep -e 05c6 -e 1199 -c)" != "x{{ gsm_modems }}" ]; do + attempts=$(($attempts - 1)) + if [ "$attempts" -le 0 ]; then + echo "Timeout" + exit 1 + fi + sleep 1 +done +uhubctl -- cgit v1.2.3