--- - name: Configure a Buildbot worker for Zcash CI hosts: zcash-ci-worker-unix become: true gather_facts: False vars_files: - vars/default.yml - vars/buildbot.yml vars_prompt: - name: "buildbot_worker_admin" prompt: "Admin details" default: "Zcash " - name: "buildbot_worker_name" prompt: "Buildbot worker name (provided by ZECC)" private: no - name: "buildbot_worker_password" prompt: "Buildbot worker password (provided by ZECC)" pre_tasks: - name: Install Python 2.7 for Ansible and Buildbot raw: test -e /usr/bin/python || test -e /usr/bin/python2 || test -e /usr/bin/python2.7 || test -e /usr/local/bin/python2.7 || (test -e /usr/bin/apt && apt -qqy update && apt install -qqy python) || (test -e /usr/bin/dnf && dnf install -qqy python2) || (test -e /usr/sbin/pkg && pkg install -qqy python2) register: output changed_when: - output.stdout != "" - output.stdout != "\r\n" - name: Check if Python is in the configured location raw: test -e {{ ansible_python_interpreter }} ignore_errors: true register: python_check when: ansible_python_interpreter is defined - name: Fail if configured Python is unavailable fail: msg: "Python is not accessible at {{ ansible_python_interpreter }} on this host! Please set the inventory variable 'ansible_python_interpreter' to the location of the Python 2.7 binary." when: ansible_python_interpreter is defined and python_check.rc == 1 - name: Check if Python is in the default location raw: test -e /usr/bin/python ignore_errors: true register: python_check when: ansible_python_interpreter is undefined - name: Fail if default Python is unavailable fail: msg: Python is not accessible at /usr/bin/python on this host! Please set the inventory variable 'ansible_python_interpreter' to the location of the Python 2.7 binary. when: ansible_python_interpreter is undefined and python_check.rc == 1 - name: Gathering Facts setup: tags: deps - name: Fail if Python is the wrong version fail: msg: "The Python binary at {{ ansible_python.executable }} is version {{ ansible_python_version }}! Please set the inventory variable 'ansible_python_interpreter' to the location of the Python 2.7 binary." when: ansible_python.version.major != 2 or ansible_python.version.minor != 7 tasks: - name: Get dependencies for distribution include_vars: "{{ item }}" with_first_found: - files: - "vars/{{ ansible_distribution }}-{{ ansible_distribution_version }}.yml" - "vars/{{ ansible_distribution }}-{{ ansible_distribution_major_version | int }}.yml" - "vars/{{ ansible_distribution }}.yml" - "vars/{{ ansible_os_family }}.yml" skip: true tags: deps - name: Collate dependencies set_fact: package_deps: "{{ buildbot_deps + fetch_deps + conf_deps + build_deps + link_deps + dist_deps }}" python_modules: "{{ buildbot_modules + rpc_test_modules }}" tags: deps - name: Install Homebrew [MacOSX] include: tasks/install-brew.yml when: ansible_distribution == 'MacOSX' tags: deps - name: Update rolling release [Arch Linux] pacman: update_cache: yes upgrade: yes when: ansible_distribution == 'Archlinux' tags: deps - name: Install required packages package: name: "{{ item }}" state: present with_items: "{{ package_deps }}" become_user: "{{ ansible_ssh_user if ansible_distribution == 'MacOSX' else 'root' }}" tags: deps - name: Install pip [CentOS, MacOSX] include: tasks/install-pip.yml when: ansible_distribution in ['CentOS', 'MacOSX'] - name: Install required Python system modules pip: name: "{{ item }}" state: latest executable: "{{ '/usr/local/bin/pip' if ansible_distribution == 'MacOSX' else omit }}" with_items: "{{ system_modules }}" - name: Set up the Buildbot worker user user: name: "{{ buildbot_worker_user }}" comment: Buildbot worker shell: /bin/bash state: present - name: Get absolute path to Buildbot worker home directory command: echo ~ register: homedir become_user: "{{ buildbot_worker_user }}" - name: Save absolute path to Buildbot worker home directory set_fact: buildbot_worker_dir: "{{ homedir.stdout }}" - name: Install required Python modules pip: name: "{{ item }}" state: latest virtualenv: "~{{ buildbot_worker_user }}/venv" virtualenv_command: "{{ '/usr/local/bin/virtualenv' if ansible_distribution == 'MacOSX' else omit }}" with_items: "{{ python_modules }}" become_user: "{{ buildbot_worker_user }}" notify: restart buildbot-worker - name: Create Buildbot worker command: > ~{{ buildbot_worker_user }}/venv/bin/buildbot-worker create-worker ~/{{ buildbot_worker_name }} {{ buildbot_master_host }}:{{ buildbot_master_port }} {{ buildbot_worker_name|quote }} {{ buildbot_worker_password|quote }} args: creates: "~/{{ buildbot_worker_name }}/buildbot.tac" become_user: "{{ buildbot_worker_user }}" - name: Set admin details for Buildbot worker copy: content: "{{ buildbot_worker_admin }}" dest: "~{{ buildbot_worker_user }}/{{ buildbot_worker_name }}/info/admin" owner: "{{ buildbot_worker_user }}" group: "{{ omit if ansible_distribution == 'MacOSX' else buildbot_worker_user }}" mode: "0644" - name: Set host details for Buildbot worker template: src: "{{ buildbot_worker_host_template }}" dest: "~{{ buildbot_worker_user }}/{{ buildbot_worker_name }}/info/host" owner: "{{ buildbot_worker_user }}" group: "{{ omit if ansible_distribution == 'MacOSX' else buildbot_worker_user }}" mode: "0644" - name: Install custom bashrc for virtualenv copy: src: bashrc dest: "~{{ buildbot_worker_user }}/.bashrc" owner: "{{ buildbot_worker_user }}" group: "{{ omit if ansible_distribution == 'MacOSX' else buildbot_worker_user }}" mode: "0644" - name: Copy Buildbot worker systemd service unit template: src: templates/buildbot-worker.service.j2 dest: "/etc/systemd/system/buildbot-worker.service" owner: root group: root mode: "0644" when: ansible_distribution != 'MacOSX' notify: reload systemd - name: Copy Buildbot worker launchd service unit template: src: templates/buildbot-worker.plist.j2 dest: "/Library/LaunchDaemons/net.buildbot.worker.plist" owner: root group: wheel mode: "0644" when: ansible_distribution == 'MacOSX' - name: Start Buildbot worker service: name: buildbot-worker state: started enabled: yes when: ansible_distribution != 'MacOSX' - name: Load Buildbot worker service [MacOSX] command: launchctl load /Library/LaunchDaemons/net.buildbot.worker.plist when: ansible_distribution == 'MacOSX' - name: Start Buildbot worker [MacOSX] command: launchctl start net.buildbot.worker when: ansible_distribution == 'MacOSX' handlers: - name: restart buildbot-worker service: name: buildbot-worker state: restarted - name: reload systemd command: /bin/systemctl daemon-reload