Skip to content

Commit d605511

Browse files
committed
Support S3 backend for Stratum 0/1
1 parent a39cedc commit d605511

File tree

9 files changed

+110
-25
lines changed

9 files changed

+110
-25
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.swp

defaults/main.yml

+17
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,23 @@ cvmfs_localproxy_http_ports:
2121
cvmfs_stratum1_apache_port: 8008
2222
cvmfs_stratum1_cache_mem: 128 #MB
2323

24+
# Storage backend for Stratum 0/1 servers
25+
# Can be "disk" (/srv) or "s3" (see: https://cvmfs.readthedocs.io/en/stable/cpt-repo.html#s3-compatible-storage-systems)
26+
cvmfs_storage: disk
27+
# The contents of the S3 config file passed as the -s option to cvmfs_server mkfs/add-replica. Dictionary keys are
28+
# option names (e.g. CVMFS_S3_HOST) and values are the option values
29+
cvmfs_s3_config: {}
30+
31+
# Use POSIX ACLs to allow access to s3.conf by repository owners (access is required if any owners are non-root), if you
32+
# don't want to use ACLs, the cvmfs_s3_config_mode and cvmfs_s3_config_group variables can be used (you are responsible
33+
# for setting up and controlling membership of the group).
34+
cvmfs_set_s3_config_acl: true
35+
36+
# The -w option to cvmfs_server mkfs/add-replica
37+
cvmfs_s3_url: null
38+
# The actual options added to cvmfs_server mkfs/add-replica
39+
cvmfs_storage_cli_options: "{% if cvmfs_storage == 's3' %}-s /etc/cvmfs/s3.conf -w {{ cvmfs_s3_url }}{% endif %}"
40+
2441
# Whether the client or server should be upgraded or just installed if missing
2542
cvmfs_upgrade_client: false
2643
cvmfs_upgrade_server: false

tasks/stratum0.yml

+15-3
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
- name: Include Apache tasks
3535
include_tasks: apache.yml
36+
when: "cvmfs_storage == 'disk'"
3637

3738
- name: Include firewall tasks
3839
include_tasks: firewall.yml
@@ -41,15 +42,26 @@
4142
when: cvmfs_manage_firewall
4243

4344
- name: Create repositories
44-
command: /usr/bin/cvmfs_server mkfs {{ cvmfs_config_apache_flag }} -o {{ item.owner | default('root') }} -f {{ cvmfs_union_fs }} {{ item.repository }}
45+
command: >-
46+
/usr/bin/cvmfs_server mkfs
47+
{{ cvmfs_storage_cli_options }}
48+
{{ cvmfs_config_apache_flag }}
49+
-o {{ item.owner | default('root') }}
50+
-f {{ cvmfs_union_fs }}
51+
{{ item.repository }}
4552
args:
46-
creates: /srv/cvmfs/{{ item.repository }}
53+
creates: "{{ '/srv/cvmfs/' ~ item.repository when (cvmfs_storage == 'disk') else '/etc/cvmfs/repositories.d/' ~ item.repository }}"
4754
with_items: "{{ cvmfs_repositories }}"
4855
notify:
4956
- restart apache
5057

5158
- name: Ensure repositories are imported
52-
command: /usr/bin/cvmfs_server import -r {{ cvmfs_config_apache_flag }} -o {{ item.owner | default('root') }} -f {{ cvmfs_union_fs }} {{ item.repository }}
59+
command: >-
60+
/usr/bin/cvmfs_server import -r
61+
{{ cvmfs_config_apache_flag }}
62+
-o {{ item.owner | default('root') }}
63+
-f {{ cvmfs_union_fs }}
64+
{{ item.repository }}
5365
args:
5466
creates: /etc/cvmfs/repositories.d/{{ item.repository }}
5567
with_items: "{{ cvmfs_repositories }}"

tasks/stratum1.yml

+4-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
- name: Include initial OS-specific tasks
44
include_tasks: "init_{{ ansible_os_family | lower }}.yml"
55
vars:
6-
_cvmfs_role: stratum1
6+
_cvmfs_role: "stratum1-{{ cvmfs_storage }}"
77
_cvmfs_upgrade: "{{ cvmfs_upgrade_server }}"
88

99
- name: Include key setup tasks
@@ -24,11 +24,13 @@
2424

2525
- name: Include Apache tasks
2626
include_tasks: apache.yml
27+
when: "cvmfs_storage == 'disk'"
2728

2829
- name: Include squid tasks
2930
include_tasks: squid.yml
3031
vars:
3132
_cvmfs_squid_conf_src: "{{ cvmfs_squid_conf_src | default('stratum1_squid.conf.j2') }}"
33+
when: "cvmfs_storage == 'disk'"
3234

3335
- name: Include firewall tasks
3436
include_tasks: firewall.yml
@@ -47,6 +49,7 @@
4749
- name: Ensure replicas are configured
4850
command: >-
4951
/usr/bin/cvmfs_server add-replica -o {{ item.owner | default('root') }}
52+
{{ cvmfs_storage_cli_options }}
5053
http://{{ item.stratum0 }}/cvmfs/{{ item.repository }}
5154
{{ item.key_dir | default('/etc/cvmfs/keys') }}/{{ item.repository }}.pub
5255
args:

tasks/stratumN.yml

+42-14
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,44 @@
11
---
22

3-
- name: Create /srv filesystem
4-
filesystem:
5-
dev: "{{ cvmfs_srv_device }}"
6-
force: no
7-
fstype: "{{ cvmfs_srv_fstype | default('ext4') }}"
8-
when: cvmfs_srv_device is defined
9-
10-
- name: Mount /srv
11-
mount:
12-
name: "{{ cvmfs_srv_mount }}"
13-
src: "{{ cvmfs_srv_device }}"
14-
fstype: "{{ cvmfs_srv_fstype | default('ext4') }}"
15-
state: mounted
16-
when: cvmfs_srv_device is defined
3+
- name: Disk storage tasks
4+
block:
5+
6+
- name: Create /srv filesystem
7+
filesystem:
8+
dev: "{{ cvmfs_srv_device }}"
9+
force: no
10+
fstype: "{{ cvmfs_srv_fstype | default('ext4') }}"
11+
12+
- name: Mount /srv
13+
mount:
14+
name: "{{ cvmfs_srv_mount }}"
15+
src: "{{ cvmfs_srv_device }}"
16+
fstype: "{{ cvmfs_srv_fstype | default('ext4') }}"
17+
state: mounted
18+
19+
when: cvmfs_storage == 'disk' and cvmfs_srv_device is defined
20+
21+
- name: S3 storage tasks
22+
block:
23+
24+
- name: Create s3.conf
25+
template:
26+
src: s3.conf.j2
27+
dest: /etc/cvmfs/s3.conf
28+
mode: "{{ cvmfs_s3_config_mode | default('0600') }}"
29+
owner: root
30+
group: "{{ cvmfs_s3_config_group | default('root') }}"
31+
32+
- name: Set ACL for CVMFS repository owners to access s3.conf
33+
acl:
34+
path: /etc/cvmfs/s3.conf
35+
entity: "{{ item.owner }}"
36+
etype: user
37+
permissions: r
38+
state: present
39+
loop: "{{ cvmfs_repositories }}"
40+
when: "cvmfs_set_s3_config_acl and item.owner != 'root'"
41+
loop_control:
42+
label: "{{ item.repository }}: {{ item.owner }}"
43+
44+
when: cvmfs_storage == 's3'

templates/localproxy_squid.conf.j2

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
##
2+
## This file is managed by Ansible. ALL CHANGES WILL BE OVERWRITTEN.
3+
##
4+
5+
http_port 3128 accel
6+
http_access allow all
7+
8+
#acl localnet src 10.0.0.0/8
9+
always_direct allow all
10+
11+
cache_mem {{ cvmfs_localproxy_cache_mem }} MB
12+
13+
minimum_expiry_time 0
14+
# This is for the disk cache
15+
#maximum_object_size 1024 MB
16+
maximum_object_size_in_memory {{ cvmfs_localproxy_maximum_object_size_in_memory }} MB
17+
18+
#visible_hostname {{ inventory_hostname }}

templates/s3.conf.j2

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#
2+
# This file is managed by Ansible. ALL CHANGES WILL BE OVERWRITTEN.
3+
#
4+
{% for opt in (cvmfs_s3_config | dict2items) %}
5+
{{ opt.key }}={{ opt.value }}
6+
{% endfor %}

vars/debian.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ cvmfs_packages:
1212
stratum0:
1313
- apache2
1414
- cvmfs-server
15-
- cvmfs-config-default
16-
stratum1:
15+
stratum1-disk:
1716
- apache2
1817
- cvmfs-server
19-
- cvmfs-config-default
18+
stratum1-s3:
19+
- cvmfs-server
2020
localproxy:
2121
- squid
2222
client:

vars/redhat.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ cvmfs_packages:
1212
stratum0:
1313
- httpd
1414
- cvmfs-server
15-
- cvmfs-config-default
1615
- cvmfs
17-
stratum1:
16+
stratum1-disk:
1817
- httpd
19-
- mod_wsgi
18+
- python3-mod_wsgi
2019
- squid
2120
- cvmfs-server
22-
- cvmfs-config-default
21+
stratum1-s3:
22+
- cvmfs-server
2323
localproxy:
2424
- squid
2525
client:

0 commit comments

Comments
 (0)