diff --git a/roles/rclone/README.md b/roles/rclone/README.md new file mode 100644 index 0000000..5a09917 --- /dev/null +++ b/roles/rclone/README.md @@ -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) diff --git a/roles/rclone/defaults/main.yml b/roles/rclone/defaults/main.yml new file mode 100644 index 0000000..a5dbcf7 --- /dev/null +++ b/roles/rclone/defaults/main.yml @@ -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 diff --git a/roles/rclone/meta/main.yml b/roles/rclone/meta/main.yml new file mode 100644 index 0000000..4fc314a --- /dev/null +++ b/roles/rclone/meta/main.yml @@ -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 diff --git a/roles/rclone/molecule/default/converge.yml b/roles/rclone/molecule/default/converge.yml new file mode 100644 index 0000000..4322409 --- /dev/null +++ b/roles/rclone/molecule/default/converge.yml @@ -0,0 +1,16 @@ +--- +- name: Converge + hosts: + - all + + roles: + - rclone + + vars: + rclone_remotes: + - name: example + opts: + type: drive + token: ' {"access_token":"","token_type":"","refresh_token":"","expiry":""}' + client_secret: 67890 + client_id: 12345 diff --git a/roles/rclone/molecule/default/molecule.yml b/roles/rclone/molecule/default/molecule.yml new file mode 100644 index 0000000..3dc76ce --- /dev/null +++ b/roles/rclone/molecule/default/molecule.yml @@ -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} diff --git a/roles/rclone/tasks/main.yml b/roles/rclone/tasks/main.yml new file mode 100644 index 0000000..8add59f --- /dev/null +++ b/roles/rclone/tasks/main.yml @@ -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 }}" diff --git a/roles/rclone/templates/rclone.conf.j2 b/roles/rclone/templates/rclone.conf.j2 new file mode 100644 index 0000000..e8533f7 --- /dev/null +++ b/roles/rclone/templates/rclone.conf.j2 @@ -0,0 +1,7 @@ +{% for remote in rclone_remotes %} +[{{ remote.name }}] +{% for key, value in remote.opts.items() %} +{{ key }} = {{ value }} +{% endfor %} + +{% endfor %}