parent
009e753f29
commit
6cbf055517
27 changed files with 0 additions and 559 deletions
|
@ -1,31 +0,0 @@
|
|||
---
|
||||
language: python
|
||||
services: docker
|
||||
|
||||
env:
|
||||
global:
|
||||
- ROLE_NAME: ansible-rclone
|
||||
matrix:
|
||||
- MOLECULE_DISTRO: centos7
|
||||
- MOLECULE_DISTRO: centos8
|
||||
- MOLECULE_DISTRO: debian10
|
||||
- MOLECULE_DISTRO: debian9
|
||||
- MOLECULE_DISTRO: fedora32
|
||||
- MOLECULE_DISTRO: fedora31
|
||||
- MOLECULE_DISTRO: fedora30
|
||||
- MOLECULE_DISTRO: ubuntu2004
|
||||
- MOLECULE_DISTRO: ubuntu1804
|
||||
- MOLECULE_DISTRO: ubuntu1604
|
||||
|
||||
install:
|
||||
# Install test dependencies.
|
||||
- pip install molecule docker yamllint ansible-lint
|
||||
|
||||
script:
|
||||
- molecule --version
|
||||
- ansible --version
|
||||
# Run tests.
|
||||
- molecule test -s travis
|
||||
|
||||
notifications:
|
||||
webhooks: https://galaxy.ansible.com/api/v1/notifications/
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
|
||||
extends: default
|
||||
|
||||
rules:
|
||||
line-length:
|
||||
max: 140
|
||||
level: warning
|
|
@ -1,142 +0,0 @@
|
|||
# ansible-rclone
|
||||
AKA `ansible_rclone` and formerly `rclone`
|
||||
|
||||
[![Build Status](https://travis-ci.org/stefangweichinger/ansible-rclone.svg?branch=master)](https://travis-ci.org/stefangweichinger/ansible-rclone)
|
||||
|
||||
[![GitHub Open Issues](https://img.shields.io/github/issues/stefangweichinger/ansible-rclone.svg)](https://github.com/stefangweichinger/ansible-rclone/issues)
|
||||
[![GitHub Stars](https://img.shields.io/github/stars/stefangweichinger/ansible-rclone.svg)](https://github.com/stefangweichinger/ansible-rclone)
|
||||
[![GitHub Forks](https://img.shields.io/github/forks/stefangweichinger/ansible-rclone.svg)](https://github.com/stefangweichinger/ansible-rclone)
|
||||
|
||||
[![Ansible Role](https://img.shields.io/ansible/role/46861.svg)](https://galaxy.ansible.com/stefangweichinger/ansible_rclone)
|
||||
[![Ansible Role Downloads](https://img.shields.io/ansible/role/d/46861.svg)](https://galaxy.ansible.com/stefangweichinger/ansible_rclone)
|
||||
|
||||
|
||||
An Ansible role to install [rclone](https://github.com/ncw/rclone)
|
||||
|
||||
Please note that this role installs rclone from the upstream repository and not from the OS repositories!
|
||||
|
||||
## Usage
|
||||
|
||||
1. Clone this repo into your local roles-directory or install via `ansible-galaxy install stefangweichinger.ansible_rclone`
|
||||
2. Add role to the hosts you want rclone installed to.
|
||||
|
||||
## Supported Platforms
|
||||
|
||||
(2020-may-25)
|
||||
|
||||
* CentOS 7,8
|
||||
* Debian 8,9,10
|
||||
* Fedora 30,31,32
|
||||
* Ubuntu 1604,1804,2004
|
||||
* Ubuntu derivated distros: Linux Mint, Pop!\_OS
|
||||
|
||||
Some older releases also work with this role, but I decided to remove some of them from `galaxy_info`.
|
||||
PRs welcome, but we can't test on every platform.
|
||||
|
||||
## Role Variables
|
||||
|
||||
Available variables are listed below, along with default values (see `defaults/main.yml`):
|
||||
|
||||
install_manpages: "true"
|
||||
|
||||
This can be used to toggle the installation of manpages.
|
||||
|
||||
rclone_arch: "amd64"
|
||||
|
||||
This variable chooses the target architecture (for example 'amd64').
|
||||
|
||||
rclone_version: ""
|
||||
|
||||
The version of rclone to install. `rclone_version` is no longer set as a default, but if provided as a variable, can be set to a specific version number or "beta" to install the latest beta version.
|
||||
|
||||
rclone_config_location: "/root/.config/rclone/rclone.conf"
|
||||
|
||||
The location to install the rclone config file if you provide `rclone_configs`
|
||||
|
||||
rclone_configs: ""
|
||||
|
||||
This variable allows for predefined remote configs to be loaded. `rclone_configs` must be a YAML list with a name variable and a properties variable which is another list of arbitrary key value pairs. See the example below which would configure a Google Drive remote:
|
||||
|
||||
```
|
||||
rclone_configs:
|
||||
- name: ExampleGoogleDriveRemote
|
||||
properties:
|
||||
type: drive
|
||||
client_id: 12345
|
||||
client_secret: 67890
|
||||
token: {"access_token":"","token_type":"","refresh_token":"","expiry":""}
|
||||
```
|
||||
|
||||
### rclone_configs detailed example
|
||||
|
||||
The `rclone_configs` variable is used to recreate the `rclone.conf` file. This config file stores the rclone remotes that have been defined and are usable. This is an alternative to simply copying a stored `rclone.conf` file directly.
|
||||
|
||||
The `rclone_configs` simply takes a list of YAML objects which must have a `name` which will map to the name of the remote, and a `properties` which can be any key, value pairs which will map to the variables stored under that remote. These should be the ones expected by the `rclone.conf` file for the remote type you're configuring.
|
||||
|
||||
For example, to recreate a standard encrypted Google Drive mount setup, the `rclone.conf` will look similar to below, assuming you have your encypted files stored in the "media" folder on Google Drive:
|
||||
|
||||
```
|
||||
[google-drive]
|
||||
type = drive
|
||||
client_id = <CLIENT_ID>
|
||||
client_secret = <CLIENT_SECRET>
|
||||
token = {"access_token":"<ACCESS_TOKEN>","token_type":"Bearer","refresh_token":"<REFRESH_TOKEN>","expiry":"<DATETIME>"}
|
||||
root_folder_id = <ROOT_FOLDER_ID>
|
||||
|
||||
[encrypted-media]
|
||||
type = crypt
|
||||
remote = google-drive:media
|
||||
filename_encryption = standard
|
||||
password = <PASSWORD>
|
||||
password2 = <PASSWORD2>
|
||||
```
|
||||
|
||||
To enable ansible-rclone to recreate that config file, you can provide an `rclone_configs` variable as follows.
|
||||
Note that this should always be encrypted if stored publicly as it gives access to your remotes:
|
||||
|
||||
```
|
||||
rclone_configs:
|
||||
- name: google-drive
|
||||
properties:
|
||||
type: drive
|
||||
client_id: <CLIENT_ID>
|
||||
client_secret: <CLIENT_SECRET>
|
||||
token: {"access_token":"<ACCESS_TOKEN>","token_type":"Bearer","refresh_token":"<REFRESH_TOKEN>","expiry":"<DATETIME>"}
|
||||
root_folder_id = <ROOT_FOLDER_ID>
|
||||
- name: encrypted-media
|
||||
properties:
|
||||
type: crypt
|
||||
remote: google-drive:media
|
||||
filename_encryption: standard
|
||||
password: <PASSWORD>
|
||||
password2: <PASSWORD2>
|
||||
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
None.
|
||||
|
||||
## Example Playbook
|
||||
|
||||
- hosts: rclone-hosts
|
||||
roles:
|
||||
- rclone
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Module Name Issue**:
|
||||
```
|
||||
[WARNING]: - stefangweichinger.rclone was NOT installed successfully: - sorry, stefangweichinger.rclone was not found on https://galaxy.ansible.com/api/
|
||||
```
|
||||
|
||||
Note that this module has undergone a name change. It was previously known as `stefangweichinger.rclone`, however Galaxy changed it's naming methods. We are working on a change that will put move it back to this name for simplicity. Ansible Galaxy substitutes `-` to `_` and used to strip a prefix or `ansible`. For more information, see the [this issue](https://github.com/stefangweichinger/ansible-rclone/issues/48).
|
||||
|
||||
## Tests
|
||||
|
||||
New tests using [molecule](https://molecule.readthedocs.io/en/latest/index.html)
|
||||
|
||||
pls feel free to review my first steps into testing the role with molecule
|
||||
additional distros might be added/tested soon
|
||||
|
||||
Check the travis logs at https://travis-ci.org/github/stefangweichinger/ansible-rclone
|
|
@ -1,18 +0,0 @@
|
|||
---
|
||||
# rclone_arch can be defined as an architecture (e.g. arm, mips, 386) listed at https://github.com/ncw/rclone/releases
|
||||
rclone_arch: amd64
|
||||
|
||||
install_manpages: true
|
||||
|
||||
# Defaults in case no variables for OS are chosen
|
||||
rclone_setup_tmp_dir: "/tmp/rclone_setup"
|
||||
|
||||
# The location to install the config file if configured
|
||||
rclone_config_location: "/root/.config/rclone/rclone.conf"
|
||||
|
||||
PACKAGES:
|
||||
- unzip
|
||||
|
||||
MAN_PAGES:
|
||||
OWNER: root
|
||||
GROUP: root
|
|
@ -1,32 +0,0 @@
|
|||
---
|
||||
|
||||
dependencies: []
|
||||
|
||||
galaxy_info:
|
||||
author: 'Stefan G. Weichinger'
|
||||
description: 'Install rclone'
|
||||
company: 'oops'
|
||||
license: 'GNU General Public License v3'
|
||||
min_ansible_version: '2.0'
|
||||
platforms:
|
||||
- name: EL
|
||||
versions:
|
||||
- 7
|
||||
- 8
|
||||
- name: Debian
|
||||
versions:
|
||||
- buster
|
||||
- stretch
|
||||
- name: Fedora
|
||||
versions:
|
||||
- 32
|
||||
- 31
|
||||
- 30
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- focal
|
||||
- bionic
|
||||
- xenial
|
||||
galaxy_tags:
|
||||
- networking
|
||||
- system
|
|
@ -1,22 +0,0 @@
|
|||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
become: true
|
||||
|
||||
pre_tasks:
|
||||
- name: Update apt cache.
|
||||
apt: update_cache=true cache_valid_time=600
|
||||
when: ansible_os_family == 'Debian'
|
||||
- name: Wait for systemd to complete initialization. # noqa 303
|
||||
command: systemctl is-system-running
|
||||
register: systemctl_status
|
||||
until: >
|
||||
'running' in systemctl_status.stdout or
|
||||
'degraded' in systemctl_status.stdout
|
||||
retries: 30
|
||||
delay: 5
|
||||
when: ansible_distribution == 'Fedora'
|
||||
changed_when: false
|
||||
|
||||
roles:
|
||||
- role: ansible-rclone
|
|
@ -1,23 +0,0 @@
|
|||
---
|
||||
dependency:
|
||||
name: galaxy
|
||||
driver:
|
||||
name: docker
|
||||
lint: |
|
||||
set -e
|
||||
yamllint .
|
||||
ansible-lint
|
||||
platforms:
|
||||
- name: instance
|
||||
image: "geerlingguy/docker-${MOLECULE_DISTRO:-centos7}-ansible:latest"
|
||||
command: ${MOLECULE_DOCKER_COMMAND:-""}
|
||||
volumes:
|
||||
- /sys/fs/cgroup:/sys/fs/cgroup:ro
|
||||
privileged: false
|
||||
pre_build_image: true
|
||||
provisioner:
|
||||
name: ansible
|
||||
playbooks:
|
||||
converge: ${MOLECULE_PLAYBOOK:-converge.yml}
|
||||
lint:
|
||||
name: ansible-lint
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
roles:
|
||||
- role: ansible-rclone
|
Binary file not shown.
Binary file not shown.
|
@ -1,14 +0,0 @@
|
|||
import os
|
||||
|
||||
import testinfra.utils.ansible_runner
|
||||
|
||||
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
|
||||
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
|
||||
|
||||
|
||||
def test_hosts_file(host):
|
||||
f = host.file('/usr/bin/rclone')
|
||||
|
||||
assert f.exists
|
||||
assert f.user == 'root'
|
||||
assert f.group == 'root'
|
|
@ -1,22 +0,0 @@
|
|||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
become: true
|
||||
|
||||
pre_tasks:
|
||||
- name: Update apt cache.
|
||||
apt: update_cache=true cache_valid_time=600
|
||||
when: ansible_os_family == 'Debian'
|
||||
- name: Wait for systemd to complete initialization. # noqa 303
|
||||
command: systemctl is-system-running
|
||||
register: systemctl_status
|
||||
until: >
|
||||
'running' in systemctl_status.stdout or
|
||||
'degraded' in systemctl_status.stdout
|
||||
retries: 30
|
||||
delay: 5
|
||||
when: ansible_distribution == 'Fedora'
|
||||
changed_when: false
|
||||
|
||||
roles:
|
||||
- role: ansible-rclone
|
|
@ -1,23 +0,0 @@
|
|||
---
|
||||
dependency:
|
||||
name: galaxy
|
||||
driver:
|
||||
name: docker
|
||||
lint: |
|
||||
set -e
|
||||
yamllint .
|
||||
ansible-lint
|
||||
platforms:
|
||||
- name: instance
|
||||
image: "geerlingguy/docker-${MOLECULE_DISTRO:-centos7}-ansible:latest"
|
||||
command: ${MOLECULE_DOCKER_COMMAND:-""}
|
||||
volumes:
|
||||
- /sys/fs/cgroup:/sys/fs/cgroup:ro
|
||||
privileged: true
|
||||
pre_build_image: true
|
||||
provisioner:
|
||||
name: ansible
|
||||
playbooks:
|
||||
converge: ${MOLECULE_PLAYBOOK:-converge.yml}
|
||||
lint:
|
||||
name: ansible-lint
|
|
@ -1,18 +0,0 @@
|
|||
---
|
||||
- block:
|
||||
- name: Check latest beta rclone version number
|
||||
uri:
|
||||
url: https://beta.rclone.org/version.txt
|
||||
return_content: true
|
||||
register:
|
||||
rclone_latest_beta_version
|
||||
- name: Set variable for beta version
|
||||
set_fact:
|
||||
rclone_version: "{{ rclone_latest_beta_version.content | replace ('rclone v', '', 1) | trim }}"
|
||||
|
||||
- name: Get rclone latest beta version
|
||||
unarchive:
|
||||
src: https://beta.rclone.org/rclone-beta-latest-linux-{{ rclone_arch }}.zip
|
||||
dest: "{{ rclone_setup_tmp_dir }}"
|
||||
remote_src: true
|
||||
creates: "{{ rclone_setup_tmp_dir }}/rclone-v{{ rclone_version }}-linux-{{ rclone_arch }}"
|
|
@ -1,86 +0,0 @@
|
|||
---
|
||||
- name: Gather OS specific variables
|
||||
include_vars: "{{ item }}"
|
||||
with_first_found:
|
||||
- '{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml'
|
||||
- '{{ ansible_distribution }}.yml'
|
||||
- '{{ ansible_os_family }}.yml'
|
||||
tags:
|
||||
- vars
|
||||
|
||||
- name: Update repositories cache on Ubuntu
|
||||
apt:
|
||||
update_cache: true
|
||||
become: true
|
||||
when: ansible_distribution == 'Ubuntu'
|
||||
|
||||
- name: Install required packages
|
||||
package:
|
||||
name: '{{ item }}'
|
||||
state: present
|
||||
become: true
|
||||
with_items: '{{ PACKAGES }}'
|
||||
|
||||
- name: Create temporary working directory
|
||||
file:
|
||||
path: "{{ rclone_setup_tmp_dir }}"
|
||||
state: directory
|
||||
mode: '0775'
|
||||
|
||||
- name: Do stable install
|
||||
include_tasks: stable.yml
|
||||
when: rclone_version is undefined or rclone_version != 'beta'
|
||||
|
||||
- name: Do beta install
|
||||
include_tasks: beta.yml
|
||||
when: rclone_version == 'beta'
|
||||
|
||||
- name: Copy rclone binary
|
||||
copy:
|
||||
src: "{{ rclone_setup_tmp_dir }}/rclone-v{{ rclone_version }}-linux-{{ rclone_arch }}/rclone"
|
||||
dest: "/usr/local/bin/rclone"
|
||||
mode: '0755'
|
||||
owner: root
|
||||
group: root
|
||||
remote_src: true
|
||||
become: true
|
||||
|
||||
- name: Create config directory
|
||||
file:
|
||||
path: '{{ rclone_config_location | dirname }}'
|
||||
state: directory
|
||||
mode: '0700'
|
||||
when: rclone_configs is defined
|
||||
|
||||
- name: Set up rclone config
|
||||
template:
|
||||
src: rclone.conf.j2
|
||||
dest: '{{ rclone_config_location }}'
|
||||
when: rclone_configs is defined
|
||||
|
||||
- name: Make dir for local manpages
|
||||
file:
|
||||
path: '{{ MAN_PAGES.PATH }}'
|
||||
state: directory
|
||||
mode: '0775'
|
||||
owner: '{{ MAN_PAGES.OWNER }}'
|
||||
group: '{{ MAN_PAGES.GROUP }}'
|
||||
become: true
|
||||
when: install_manpages
|
||||
|
||||
- name: Copy rclone manpage
|
||||
copy:
|
||||
src: "{{ rclone_setup_tmp_dir }}/rclone-v{{ rclone_version }}-linux-{{ rclone_arch }}/rclone.1"
|
||||
dest: "{{ MAN_PAGES.PATH }}/rclone.1"
|
||||
mode: '0644'
|
||||
owner: root
|
||||
group: root
|
||||
remote_src: true
|
||||
become: true
|
||||
when: install_manpages
|
||||
|
||||
- name: Update mandb
|
||||
command: mandb
|
||||
become: true
|
||||
changed_when: false
|
||||
when: install_manpages
|
|
@ -1,20 +0,0 @@
|
|||
---
|
||||
- block:
|
||||
- name: Check latest stable rclone version number
|
||||
uri:
|
||||
url: https://downloads.rclone.org/version.txt
|
||||
return_content: true
|
||||
register:
|
||||
rclone_latest_version
|
||||
check_mode: false
|
||||
- name: Set variable to latest stable version number
|
||||
set_fact:
|
||||
rclone_version: "{{ rclone_latest_version.content | replace ('rclone v', '', 1) | trim }}"
|
||||
when: rclone_version is undefined
|
||||
|
||||
- name: Get rclone stable version {{ rclone_version }}
|
||||
unarchive:
|
||||
src: https://downloads.rclone.org/v{{ rclone_version }}/rclone-v{{ rclone_version }}-linux-{{ rclone_arch }}.zip
|
||||
dest: "{{ rclone_setup_tmp_dir }}"
|
||||
remote_src: true
|
||||
creates: "{{ rclone_setup_tmp_dir }}/rclone-v{{ rclone_version }}-linux-{{ rclone_arch }}"
|
|
@ -1,7 +0,0 @@
|
|||
{% for config in rclone_configs %}
|
||||
[{{ config.name }}]
|
||||
{% for key, value in config.properties.items() %}
|
||||
{{ key }} = {{ value }}
|
||||
{% endfor %}
|
||||
|
||||
{% endfor %}
|
|
@ -1 +0,0 @@
|
|||
localhost
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
- hosts: localhost
|
||||
remote_user: root
|
||||
roles:
|
||||
- ansible-rclone
|
|
@ -1,10 +0,0 @@
|
|||
---
|
||||
|
||||
PACKAGES:
|
||||
- unzip
|
||||
- man
|
||||
|
||||
MAN_PAGES:
|
||||
OWNER: root
|
||||
GROUP: root
|
||||
PATH: '/usr/local/share/man/man1'
|
|
@ -1,10 +0,0 @@
|
|||
---
|
||||
|
||||
PACKAGES:
|
||||
- unzip
|
||||
- man-db
|
||||
|
||||
MAN_PAGES:
|
||||
OWNER: root
|
||||
GROUP: root
|
||||
PATH: '/usr/local/share/man/man1'
|
|
@ -1,10 +0,0 @@
|
|||
---
|
||||
|
||||
PACKAGES:
|
||||
- unzip
|
||||
- man-db
|
||||
|
||||
MAN_PAGES:
|
||||
OWNER: root
|
||||
GROUP: root
|
||||
PATH: '/usr/share/man/man1'
|
|
@ -1,11 +0,0 @@
|
|||
---
|
||||
|
||||
PACKAGES:
|
||||
- unzip
|
||||
- man
|
||||
- file
|
||||
|
||||
MAN_PAGES:
|
||||
OWNER: root
|
||||
GROUP: root
|
||||
PATH: '/usr/local/share/man/man1'
|
|
@ -1,10 +0,0 @@
|
|||
---
|
||||
|
||||
PACKAGES:
|
||||
- unzip
|
||||
- man-db
|
||||
|
||||
MAN_PAGES:
|
||||
OWNER: root
|
||||
GROUP: root
|
||||
PATH: '/usr/local/share/man/man1'
|
|
@ -1,10 +0,0 @@
|
|||
---
|
||||
|
||||
PACKAGES:
|
||||
- unzip
|
||||
- man-db
|
||||
|
||||
MAN_PAGES:
|
||||
OWNER: root
|
||||
GROUP: root
|
||||
PATH: '/usr/local/share/man/man1'
|
|
@ -1,11 +0,0 @@
|
|||
---
|
||||
|
||||
PACKAGES:
|
||||
- unzip
|
||||
- man
|
||||
- file
|
||||
|
||||
MAN_PAGES:
|
||||
OWNER: root
|
||||
GROUP: root
|
||||
PATH: '/usr/local/share/man/man1'
|
|
@ -1,10 +0,0 @@
|
|||
---
|
||||
|
||||
PACKAGES:
|
||||
- unzip
|
||||
- man-db
|
||||
|
||||
MAN_PAGES:
|
||||
OWNER: root
|
||||
GROUP: root
|
||||
PATH: '/usr/local/share/man/man1'
|
Loading…
Reference in a new issue