Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add rclone role #19

Merged
merged 1 commit into from
Jun 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions roles/rclone/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# rclone

Ansible role for configuring [rclone](https://rclone.org/).

## Requirements

None.

## Dependencies

None.

## Role Variables

Refer to [defaults/main.yml](defaults/main.yml) for a list of variables along with documentation.

## Example Playbook

```yaml
- hosts: all
roles:
- role: hostinger.common.rclone
```

## License

See [LICENSE](../../LICENSE)
17 changes: 17 additions & 0 deletions roles/rclone/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
rclone_arch: amd64
rclone_url: https://github.com/rclone/rclone/releases/download/v{{ rclone_version }}/rclone-v{{ rclone_version }}-{{ rclone_os }}-{{ rclone_arch }}.zip
rclone_version: 1.67.0
rclone_os: linux
rclone_install_dir: /opt/rclone/{{ rclone_version }}
rclone_owner: root
rclone_group: root
rclone_config_dir: /etc/rclone
rclone_remotes: {}
# rclone_remotes:
# - name: example
# opts:
# type: drive
# token: ' {"access_token":"","token_type":"","refresh_token":"","expiry":""}'
# client_secret: 67890
# client_id: 12345
22 changes: 22 additions & 0 deletions roles/rclone/meta/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
galaxy_info:
role_name: rclone
author: hostinger
description: Ansible role for configuring rclone.
license: license (MIT)
min_ansible_version: "2.10"
platforms:
- name: EL
versions:
- all
- name: Fedora
versions:
- all
- name: Debian
versions:
- all
- name: Ubuntu
versions:
- all
galaxy_tags:
- rclone
27 changes: 27 additions & 0 deletions roles/rclone/molecule/default/converge.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
- name: Converge
hosts:
- all

pre_tasks:
- name: Update apt cache
ansible.builtin.apt:
update_cache: yes
when: ansible_os_family == 'Debian' or ansible_os_family == 'Ubuntu'

- name: Install unzip
ansible.builtin.package:
name: unzip
state: present

roles:
- rclone

vars:
rclone_remotes:
- name: example
opts:
type: drive
token: ' {"access_token":"","token_type":"","refresh_token":"","expiry":""}'
client_secret: 67890
client_id: 12345
19 changes: 19 additions & 0 deletions roles/rclone/molecule/default/molecule.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: default
image: geerlingguy/docker-${MOLECULE_DISTRO:-ubuntu2204}-ansible:latest
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:rw
command: ${MOLECULE_DOCKER_COMMAND:-""}
cgroupns_mode: host
pre_build_image: true
privileged: true
platform: amd64
provisioner:
name: ansible
playbooks:
converge: ${MOLECULE_PLAYBOOK:-converge.yml}
46 changes: 46 additions & 0 deletions roles/rclone/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
- name: Create directories
ansible.builtin.file:
name: "{{ item }}"
mode: 0755
owner: "{{ rclone_owner }}"
group: "{{ rclone_group }}"
state: directory
loop:
- "{{ rclone_install_dir }}"
- "{{ rclone_config_dir }}"

- name: Download tarball
ansible.builtin.get_url:
url: "{{ rclone_url }}"
dest: "{{ rclone_install_dir }}/rclone.zip"
mode: 0644
owner: "{{ rclone_owner }}"
group: "{{ rclone_group }}"
timeout: 30

- name: Unarchive tarball
ansible.builtin.unarchive:
src: "{{ rclone_install_dir }}/rclone.zip"
remote_src: true
dest: "{{ rclone_install_dir }}"
creates: "{{ rclone_install_dir }}/rclone-v{{ rclone_version }}-linux-{{
rclone_arch }}"
owner: "{{ rclone_owner }}"
group: "{{ rclone_group }}"

- name: Create symlink to binary
ansible.builtin.file:
src: "{{ rclone_install_dir }}/rclone-v{{ rclone_version }}-linux-{{ rclone_arch }}/rclone"
dest: /usr/local/bin/rclone
mode: 0755
state: link
force: true

- name: Template config file
ansible.builtin.template:
src: rclone.conf.j2
dest: "{{ rclone_config_dir }}/rclone.conf"
mode: 0644
owner: "{{ rclone_owner }}"
group: "{{ rclone_group }}"
7 changes: 7 additions & 0 deletions roles/rclone/templates/rclone.conf.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{% for remote in rclone_remotes %}
[{{ remote.name }}]
{% for key, value in remote.opts.items() %}
{{ key }} = {{ value }}
{% endfor %}

{% endfor %}
Loading