Initial commit
This commit is contained in:
1
roles/freedomofpress.signal-desktop/.gitignore
vendored
Executable file
1
roles/freedomofpress.signal-desktop/.gitignore
vendored
Executable file
@ -0,0 +1 @@
|
||||
.molecule/
|
11
roles/freedomofpress.signal-desktop/.yamllint
Executable file
11
roles/freedomofpress.signal-desktop/.yamllint
Executable file
@ -0,0 +1,11 @@
|
||||
extends: default
|
||||
|
||||
rules:
|
||||
braces:
|
||||
max-spaces-inside: 1
|
||||
level: error
|
||||
brackets:
|
||||
max-spaces-inside: 1
|
||||
level: error
|
||||
line-length: disable
|
||||
truthy: disable
|
44
roles/freedomofpress.signal-desktop/README.md
Executable file
44
roles/freedomofpress.signal-desktop/README.md
Executable file
@ -0,0 +1,44 @@
|
||||
Signal Desktop Ansible role
|
||||
===========================
|
||||
|
||||
Installs [Signal Desktop] on Linux hosts via `apt`.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
Debian or Ubuntu.
|
||||
|
||||
Role Variables
|
||||
--------------
|
||||
|
||||
```yaml
|
||||
# GPG full fingerprint of apt repo key, retrieved from:
|
||||
# https://updates.signal.org/desktop/apt/keys.asc
|
||||
signal_desktop_gpg_fingerprint: "DBA36B5181D0C816F630E889D980A17457F6FB06"
|
||||
|
||||
# Prerequisites for configuring HTTPS apt repo.
|
||||
signal_desktop_apt_dependencies:
|
||||
- apt-transport-https
|
||||
- gpg
|
||||
|
||||
# Pinning the Xenial repo, works fine on e.g. Debian Stretch.
|
||||
# The Signal team does not maintain specific versions for other dists,
|
||||
# so intentionally not using `{{ ansible_distribution }}`
|
||||
signal_desktop_apt_repo: "deb [arch=amd64] https://updates.signal.org/desktop/apt xenial main"
|
||||
```
|
||||
|
||||
|
||||
|
||||
Example Playbook
|
||||
----------------
|
||||
|
||||
```yaml
|
||||
- hosts: workstations
|
||||
roles:
|
||||
- role: freedomofpress.signal-desktop
|
||||
```
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
MIT
|
13
roles/freedomofpress.signal-desktop/defaults/main.yml
Executable file
13
roles/freedomofpress.signal-desktop/defaults/main.yml
Executable file
@ -0,0 +1,13 @@
|
||||
---
|
||||
# GPG full fingerprint of apt repo key, retrieved from:
|
||||
# https://updates.signal.org/desktop/apt/keys.asc
|
||||
signal_desktop_gpg_fingerprint: "DBA36B5181D0C816F630E889D980A17457F6FB06"
|
||||
|
||||
# Prerequisites for configuring HTTPS apt repo.
|
||||
signal_desktop_apt_dependencies:
|
||||
- apt-transport-https
|
||||
|
||||
# Pinning the Xenial repo, works fine on e.g. Debian Stretch.
|
||||
# The Signal team does not maintain specific versions for other dists,
|
||||
# so intentionally not using `{{ ansible_distribution }}`
|
||||
signal_desktop_apt_repo: "deb [arch=amd64] https://updates.signal.org/desktop/apt xenial main"
|
51
roles/freedomofpress.signal-desktop/files/signal-apt-key.asc
Executable file
51
roles/freedomofpress.signal-desktop/files/signal-apt-key.asc
Executable file
@ -0,0 +1,51 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
ek8WAVNyvuvoTwm3GG6+/pkTwu0J79lAMD1mhJsuSca6SFNgYnd+PQARAQABiQIf
|
||||
BBgBCgAJBQJY5UonAhsMAAoJENmAoXRX9vsGvRgQAJ4tWnK2TncCpu5nTCxYMXjW
|
||||
LuvwORq8EBWczHS6SjLdwmSVKGKSYtl2n6nCkloVY6tONMoiCWmtcq7SJMJoyZw3
|
||||
XIf82Z39tzn/conjQcP0aIOFzww1XG7YiaTAhsDZ62kchukI52jUYm2w8cTZMEZB
|
||||
oIwIWBpmLlyaDhjIM5neY5RuL7IbIpS/fdk2lwfAwcNq6z/ri2E5RWl3AEINdLUO
|
||||
gAiVMagNJaJ+ap7kMcwOLoI2GD84mmbtDWemdUZ3HnqLHv0mb1djsWL6LwjCuOgK
|
||||
l2GDrWCh18mE+9mVB1Lo7jzYXNSHXQP6FlDE6FhGO1nNBs2IJzDvmewpnO+a/0pw
|
||||
dCerATHWtrCKwMOHrbGLSiTKEjnNt/74gKjXxdFKQkpaEfMFCeiAOFP93tKjRRhP
|
||||
5wf1JHBZ1r1+pgfZlS5F20XnM2+f/K1dWmgh+4Grx8pEHGQGLP+A22O7iWjg9pS+
|
||||
LD3yikgyGGyQxgcN3sJBQ4yxakOUDZiljm3uNyklUMCiMjTvT/F02PalQMapvA5w
|
||||
7Gwg5mSI8NDs3RtiG1rKl9Ytpdq7uHaStlHwGXBVfvayDDKnlpmndee2GBiU/hc2
|
||||
ZsYHzEWKXME/ru6EZofUFxeVdev5+9ztYJBBZCGMug5Xp3Gxh/9JUWi6F1+9qAyz
|
||||
N+O606NOXLwcmq5KZL0g
|
||||
=zyVo
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
2
roles/freedomofpress.signal-desktop/handlers/main.yml
Executable file
2
roles/freedomofpress.signal-desktop/handlers/main.yml
Executable file
@ -0,0 +1,2 @@
|
||||
---
|
||||
# handlers file for signal-desktop
|
1
roles/freedomofpress.signal-desktop/meta/.galaxy_install_info
Executable file
1
roles/freedomofpress.signal-desktop/meta/.galaxy_install_info
Executable file
@ -0,0 +1 @@
|
||||
{install_date: 'Sun Jan 12 13:47:06 2020', version: master}
|
22
roles/freedomofpress.signal-desktop/meta/main.yml
Executable file
22
roles/freedomofpress.signal-desktop/meta/main.yml
Executable file
@ -0,0 +1,22 @@
|
||||
---
|
||||
galaxy_info:
|
||||
author: Conor Schaefer (@conorsch)
|
||||
description: Installs Signal Desktop on Linux hosts.
|
||||
company: Freedom of the Press Foundation (@freedomofpress)
|
||||
license: MIT
|
||||
min_ansible_version: 2.4
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- stretch
|
||||
|
||||
galaxy_tags:
|
||||
- chat
|
||||
- communications
|
||||
- desktop
|
||||
- encryption
|
||||
- im
|
||||
- secure
|
||||
- signal
|
||||
- workstation
|
||||
dependencies: []
|
9
roles/freedomofpress.signal-desktop/molecule/default/Dockerfile.j2
Executable file
9
roles/freedomofpress.signal-desktop/molecule/default/Dockerfile.j2
Executable file
@ -0,0 +1,9 @@
|
||||
# Molecule managed
|
||||
|
||||
FROM {{ item.image }}
|
||||
|
||||
RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get upgrade -y && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
|
||||
elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python python-devel python2-dnf bash && dnf clean all; \
|
||||
elif [ $(command -v yum) ]; then yum makecache fast && yum update -y && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
|
||||
elif [ $(command -v zypper) ]; then zypper refresh && zypper update -y && zypper install -y python sudo bash python-xml && zypper clean -a; \
|
||||
elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; fi
|
16
roles/freedomofpress.signal-desktop/molecule/default/INSTALL.rst
Executable file
16
roles/freedomofpress.signal-desktop/molecule/default/INSTALL.rst
Executable file
@ -0,0 +1,16 @@
|
||||
*******
|
||||
Install
|
||||
*******
|
||||
|
||||
Requirements
|
||||
============
|
||||
|
||||
* Docker Engine
|
||||
* docker-py
|
||||
|
||||
Install
|
||||
=======
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo pip install docker-py
|
47
roles/freedomofpress.signal-desktop/molecule/default/create.yml
Executable file
47
roles/freedomofpress.signal-desktop/molecule/default/create.yml
Executable file
@ -0,0 +1,47 @@
|
||||
---
|
||||
- name: Create
|
||||
hosts: localhost
|
||||
connection: local
|
||||
gather_facts: False
|
||||
no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
|
||||
vars:
|
||||
molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}"
|
||||
molecule_ephemeral_directory: "{{ lookup('env', 'MOLECULE_EPHEMERAL_DIRECTORY') }}"
|
||||
molecule_scenario_directory: "{{ lookup('env', 'MOLECULE_SCENARIO_DIRECTORY') }}"
|
||||
molecule_yml: "{{ lookup('file', molecule_file) | molecule_from_yaml }}"
|
||||
tasks:
|
||||
- name: Create Dockerfiles from image names
|
||||
template:
|
||||
src: "{{ molecule_scenario_directory }}/Dockerfile.j2"
|
||||
dest: "{{ molecule_ephemeral_directory }}/Dockerfile_{{ item.image | regex_replace('[^a-zA-Z0-9_]', '_') }}"
|
||||
with_items: "{{ molecule_yml.platforms }}"
|
||||
register: platforms
|
||||
|
||||
- name: Discover local Docker images
|
||||
docker_image_facts:
|
||||
name: "molecule_local/{{ item.item.name }}"
|
||||
with_items: "{{ platforms.results }}"
|
||||
register: docker_images
|
||||
|
||||
- name: Build an Ansible compatible image
|
||||
docker_image:
|
||||
path: "{{ molecule_ephemeral_directory }}"
|
||||
name: "molecule_local/{{ item.item.image }}"
|
||||
dockerfile: "{{ item.item.dockerfile | default(item.invocation.module_args.dest) }}"
|
||||
force: "{{ item.item.force | default(True) }}"
|
||||
with_items: "{{ platforms.results }}"
|
||||
when: platforms.changed or docker_images.results | map(attribute='images') | select('equalto', []) | list | count >= 0
|
||||
|
||||
- name: Create molecule instance(s)
|
||||
docker_container:
|
||||
name: "{{ item.name }}"
|
||||
hostname: "{{ item.name }}"
|
||||
image: "molecule_local/{{ item.image }}"
|
||||
state: started
|
||||
recreate: False
|
||||
log_driver: syslog
|
||||
command: "{{ item.command | default('sleep infinity') }}"
|
||||
privileged: "{{ item.privileged | default(omit) }}"
|
||||
volumes: "{{ item.volumes | default(omit) }}"
|
||||
capabilities: "{{ item.capabilities | default(omit) }}"
|
||||
with_items: "{{ molecule_yml.platforms }}"
|
16
roles/freedomofpress.signal-desktop/molecule/default/destroy.yml
Executable file
16
roles/freedomofpress.signal-desktop/molecule/default/destroy.yml
Executable file
@ -0,0 +1,16 @@
|
||||
---
|
||||
- name: Destroy
|
||||
hosts: localhost
|
||||
connection: local
|
||||
gather_facts: False
|
||||
no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
|
||||
vars:
|
||||
molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}"
|
||||
molecule_yml: "{{ lookup('file', molecule_file) | molecule_from_yaml }}"
|
||||
tasks:
|
||||
- name: Destroy molecule instance(s)
|
||||
docker_container:
|
||||
name: "{{ item.name }}"
|
||||
state: absent
|
||||
force_kill: "{{ item.force_kill | default(True) }}"
|
||||
with_items: "{{ molecule_yml.platforms }}"
|
20
roles/freedomofpress.signal-desktop/molecule/default/molecule.yml
Executable file
20
roles/freedomofpress.signal-desktop/molecule/default/molecule.yml
Executable file
@ -0,0 +1,20 @@
|
||||
---
|
||||
dependency:
|
||||
name: galaxy
|
||||
driver:
|
||||
name: docker
|
||||
lint:
|
||||
name: yamllint
|
||||
platforms:
|
||||
- name: instance
|
||||
image: debian:stretch
|
||||
provisioner:
|
||||
name: ansible
|
||||
lint:
|
||||
name: ansible-lint
|
||||
scenario:
|
||||
name: default
|
||||
verifier:
|
||||
name: testinfra
|
||||
lint:
|
||||
name: flake8
|
5
roles/freedomofpress.signal-desktop/molecule/default/playbook.yml
Executable file
5
roles/freedomofpress.signal-desktop/molecule/default/playbook.yml
Executable file
@ -0,0 +1,5 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
roles:
|
||||
- role: signal-desktop
|
5
roles/freedomofpress.signal-desktop/molecule/default/prepare.yml
Executable file
5
roles/freedomofpress.signal-desktop/molecule/default/prepare.yml
Executable file
@ -0,0 +1,5 @@
|
||||
---
|
||||
- name: Prepare
|
||||
hosts: all
|
||||
gather_facts: False
|
||||
tasks: []
|
15
roles/freedomofpress.signal-desktop/molecule/default/tests/test_default.py
Executable file
15
roles/freedomofpress.signal-desktop/molecule/default/tests/test_default.py
Executable file
@ -0,0 +1,15 @@
|
||||
import os
|
||||
|
||||
import pytest
|
||||
import testinfra.utils.ansible_runner
|
||||
|
||||
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
|
||||
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
|
||||
|
||||
|
||||
@pytest.mark.parametrize('pkg', [
|
||||
'apt-transport-https',
|
||||
'signal-desktop',
|
||||
])
|
||||
def test_packages_installed(host, pkg):
|
||||
assert host.package(pkg).is_installed
|
27
roles/freedomofpress.signal-desktop/tasks/main.yml
Executable file
27
roles/freedomofpress.signal-desktop/tasks/main.yml
Executable file
@ -0,0 +1,27 @@
|
||||
---
|
||||
# tasks file for signal-desktop
|
||||
- name: Installs apt repo prerequisites.
|
||||
become: yes
|
||||
apt:
|
||||
name: "{{ item }}"
|
||||
state: present
|
||||
with_items: "{{ signal_desktop_apt_dependencies }}"
|
||||
|
||||
- name: Install Signal apt repo GPG key.
|
||||
become: yes
|
||||
apt_key:
|
||||
data: "{{ lookup('file', 'signal-apt-key.asc') }}"
|
||||
state: present
|
||||
keyring: /etc/apt/trusted.gpg.d/signal-desktop.gpg
|
||||
|
||||
- name: Add Signal apt repo.
|
||||
become: yes
|
||||
apt_repository:
|
||||
repo: "{{ signal_desktop_apt_repo }}"
|
||||
state: present
|
||||
|
||||
- name: Installs Signal desktop.
|
||||
become: yes
|
||||
apt:
|
||||
name: signal-desktop
|
||||
state: present
|
2
roles/freedomofpress.signal-desktop/vars/main.yml
Executable file
2
roles/freedomofpress.signal-desktop/vars/main.yml
Executable file
@ -0,0 +1,2 @@
|
||||
---
|
||||
# vars file for signal-desktop
|
Reference in New Issue
Block a user