Add ceph role

Just prepares the servers, all management is then done through cephadm.
This commit is contained in:
Timotej Lazar 2023-11-20 13:03:19 +01:00
parent 832be31e21
commit 5038411af3
6 changed files with 106 additions and 0 deletions

View file

@ -0,0 +1,7 @@
- name: reboot
reboot:
- name: reload nftables
service:
name: nftables
state: reloaded

View file

@ -0,0 +1,16 @@
- name: Install nftables
package:
name: nftables
- name: Configure nftables
template:
dest: /etc/nftables.conf
src: nftables.conf.j2
mode: 0644
notify: reload nftables
- name: Enable nftables
service:
name: nftables
enabled: true
state: started

38
roles/ceph/tasks/main.yml Normal file
View file

@ -0,0 +1,38 @@
- name: Configure /etc/hosts
template:
dest: /etc/hosts
src: hosts.j2
- name: Get cluster
set_fact:
cluster: "{{ query('netbox.netbox.nb_lookup', 'clusters', raw_data=true, api_filter='name='~cluster) | first }}"
- name: Generate my SSH key
openssh_keypair:
path: /root/.ssh/id_ed25519
type: ed25519
comment: "root@{{ ansible_hostname }}"
register: my_key
- name: Deploy my key on other nodes
authorized_key:
user: root
key: "{{ my_key.public_key }}"
comment: "{{ my_key.comment }}"
delegate_to: "{{ item }}"
loop: "{{ query('netbox.netbox.nb_lookup', 'devices', api_filter='cluster_id='~cluster.id, raw_data=true) | map(attribute='name') }}"
- name: Install required packages
package:
name:
- lvm2
- podman
- name: Install cephadm script
get_url:
url: https://download.ceph.com/rpm-{{ ceph_version }}/el9/noarch/cephadm
checksum: sha512:dc9bfed5b56c3756720e935a1520ccffe4ecf5e37502fe60a6ff835b98da8afe23a0ecab3770698c10ce1278004c788091eed9b4651d1c52f8d05729b4036c12
dest: /usr/local/bin/cephadm
mode: 0755
- include_tasks: firewall.yml

View file

@ -0,0 +1,11 @@
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
{% set my_cluster = query('netbox.netbox.nb_lookup', 'clusters', raw_data=true, api_filter='name='~cluster) | first %}
{% for host in query('netbox.netbox.nb_lookup', 'devices', raw_data=true, api_filter='cluster_id='~my_cluster.id) | map(attribute='name') %}
{% for address in (hostvars[host].interfaces | selectattr('name', 'equalto', 'lo') | map(attribute='ip_addresses') | first) %}
{{ address.address | ipaddr('address') }} {{ host }}
{% endfor %}
{% endfor %}

View file

@ -0,0 +1,33 @@
#!/usr/sbin/nft -f
flush ruleset
# Just a temporary filter until we get our shit together policy-wise.
table inet filter {
set allowed {
type ipv4_addr
flags interval
elements = { 10.32.0.0/14, 193.2.76.176/24, 192.168.19.0/24, 192.168.251.0/24 }
}
chain input {
type filter hook input priority filter; policy drop
ct state vmap { invalid : drop, established : accept, related : accept }
iif lo accept
# BGP / BFD sessions
iif lan0 ip6 saddr fe80::/64 accept
iif lan1 ip6 saddr fe80::/64 accept
ip saddr @allowed accept
}
chain forward {
type filter hook forward priority filter; policy accept
}
chain output {
type filter hook output priority filter; policy accept
}
}

View file

@ -1,6 +1,7 @@
- hosts: ceph-*
roles:
- debian
- ceph
- hosts: proxmox-rc-next-*
roles: