Skip to content

Commit f2f447e

Browse files
authored
Merge pull request #22 from cobaltcore-dev/cinder
Add cinder setup
2 parents bdb274e + f99a242 commit f2f447e

14 files changed

Lines changed: 1042 additions & 24 deletions

File tree

checks/.typos.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[default]
2+
extend-ignore-words-re = [
3+
# ignore some correct command line tools
4+
"exportfs"
5+
]

checks/default.nix

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
hooks = {
77
nixfmt-rfc-style.enable = true;
88
deadnix.enable = true;
9-
typos.enable = true;
9+
typos = {
10+
enable = true;
11+
settings.configPath = "checks/.typos.toml";
12+
};
1013
};
1114
};
1215
}

modules/compute/nova.nix

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,16 @@ let
100100
enabled = true
101101
server_listen = 0.0.0.0
102102
server_proxyclient_address = $my_ip
103-
novncproxy_base_url = http://controller:6080/vnc_lite.html
103+
novncproxy_base_url = http://127.0.0.1:6080/vnc_lite.html
104104
105105
[cells]
106106
enable = False
107107
108108
[os_region_name]
109109
openstack =
110+
111+
[cinder]
112+
os_region_name = RegionOne
110113
'';
111114

112115
rootwrapConf = pkgs.callPackage ../../lib/rootwrap-conf.nix {
@@ -186,9 +189,20 @@ in
186189
user = "nova";
187190
};
188191
};
192+
# we don't need tgt on a compute node -> only iscsi-client (openiscsi)
189193
};
190194
};
191195

196+
services.openiscsi = {
197+
enable = true;
198+
name = "iqn.iscsi.${config.networking.hostName}";
199+
};
200+
201+
environment.systemPackages = with pkgs; [
202+
openiscsi
203+
nfs-utils
204+
];
205+
192206
systemd.services.nova-compute = {
193207
description = "OpenStack Nova Scheduler Daemon";
194208
after = [
@@ -202,6 +216,10 @@ in
202216
sudo
203217
nova_env
204218
qemu
219+
util-linux
220+
lvm2
221+
openiscsi
222+
nfs-utils
205223
]
206224
++ cfg.extraPkgs;
207225
environment.PYTHONPATH = "${nova_env}/${pkgs.python3.sitePackages}";

modules/controller/cinder.nix

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
{ cinder }:
2+
{
3+
config,
4+
lib,
5+
pkgs,
6+
...
7+
}:
8+
9+
with lib;
10+
11+
let
12+
cfg = config.cinder;
13+
14+
cinderConf = pkgs.writeText "cinder-api.conf" ''
15+
[DEFAULT]
16+
transport_url = rabbit://openstack:openstack@controller
17+
auth_strategy = keystone
18+
my_ip = controller
19+
verify_glance_signatures = disabled
20+
21+
[database]
22+
connection = mysql+pymysql://cinder:cinder@controller/cinder
23+
24+
[keystone_authtoken]
25+
www_authenticate_uri = http://controller:5000
26+
auth_url = http://controller:5000
27+
memcached_servers = controller:11211
28+
auth_type = password
29+
project_domain_name = default
30+
user_domain_name = default
31+
project_name = service
32+
username = cinder
33+
password = cinder
34+
35+
[oslo_concurrency]
36+
lock_path = /var/lib/cinder/tmp
37+
'';
38+
in
39+
{
40+
options.cinder = {
41+
enable = mkEnableOption "Enable OpenStack Cinder." // {
42+
default = true;
43+
};
44+
config = mkOption {
45+
default = cinderConf;
46+
description = ''
47+
The Cinder config.
48+
'';
49+
};
50+
cinderPackage = mkOption {
51+
default = cinder;
52+
type = types.package;
53+
description = ''
54+
The OpenStack Cinder package to use.
55+
'';
56+
};
57+
};
58+
config = mkIf cfg.enable {
59+
60+
users.extraUsers.cinder = {
61+
group = "cinder";
62+
isSystemUser = true;
63+
};
64+
users.groups.cinder = {
65+
name = "cinder";
66+
members = [ "cinder" ];
67+
};
68+
69+
systemd.tmpfiles.settings = {
70+
"10-cinder" = {
71+
"/var/lib/cinder/" = {
72+
D = {
73+
user = "cinder";
74+
group = "cinder";
75+
mode = "0755";
76+
};
77+
};
78+
"/var/lib/cinder/volumes" = {
79+
D = {
80+
user = "cinder";
81+
group = "cinder";
82+
mode = "0755";
83+
};
84+
};
85+
"/var/log/cinder/" = {
86+
D = {
87+
user = "cinder";
88+
group = "cinder";
89+
mode = "0755";
90+
};
91+
};
92+
"/etc/cinder/api-paste.ini" = {
93+
L = {
94+
argument = "${cinder}/etc/cinder/api-paste.ini";
95+
};
96+
};
97+
"/etc/cinder/cinder.conf" = {
98+
L = {
99+
argument = "${cinderConf}";
100+
};
101+
};
102+
};
103+
};
104+
105+
systemd.services.cinder-api = {
106+
description = "OpenStack Cinder API Daemon";
107+
after = [
108+
"cinder.service"
109+
"rabbitmq.service"
110+
"mysql.service"
111+
"network.target"
112+
];
113+
path = [ cinder ];
114+
wantedBy = [ "multi-user.target" ];
115+
serviceConfig = {
116+
User = "cinder";
117+
Group = "cinder";
118+
ExecStart = pkgs.writeShellScript "cinder-api.sh" ''
119+
.cinder-wsgi-wrapped --port 8776
120+
'';
121+
};
122+
};
123+
124+
systemd.services.cinder-scheduler = {
125+
description = "OpenStack Cinder Scheduler";
126+
after = [
127+
"cinder.service"
128+
"rabbitmq.service"
129+
"mysql.service"
130+
"network.target"
131+
];
132+
path = [ cinder ];
133+
wantedBy = [ "multi-user.target" ];
134+
serviceConfig = {
135+
User = "cinder";
136+
Group = "cinder";
137+
ExecStart = pkgs.writeShellScript "cinder-scheduler.sh" ''
138+
.cinder-scheduler-wrapped
139+
'';
140+
};
141+
};
142+
};
143+
}

modules/controller/keystone.nix

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ let
3939
catalog.RegionOne.placement.adminURL = http://controller:8778
4040
catalog.RegionOne.placement.internalURL = http://controller:8778
4141
catalog.RegionOne.placement.name = Placement Service
42+
43+
catalog.RegionOne.volumev3.publicURL = http://controller:8776/v3
44+
catalog.RegionOne.volumev3.adminURL = http://controller:8776/v3
45+
catalog.RegionOne.volumev3.internalURL = http://controller:8776/v3
46+
catalog.RegionOne.volumev3.name = Cinder Service
4247
'';
4348

4449
keystoneConf = pkgs.writeText "keystone.conf" ''

modules/controller/neutron.nix

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ let
2222
"update_port:binding:profile": "@"
2323
'';
2424

25+
# neutron.conf is used as configuration file for neutron-metadata-agent as well
2526
neutronConf = pkgs.writeText "neutron.conf" ''
2627
[database]
2728
connection = mysql+pymysql://neutron:neutron@controller/neutron
@@ -35,6 +36,8 @@ let
3536
notify_nova_on_port_status_changes = true
3637
notify_nova_on_port_data_changes = true
3738
log_dir = /var/log/neutron
39+
nova_metadata_host = controller
40+
metadata_proxy_shared_secret = neutron_metadata_secret
3841
3942
[keystone_authtoken]
4043
www_authenticate_uri = http://controller:5000
@@ -107,12 +110,6 @@ let
107110
ovsdb_debug = true
108111
'';
109112

110-
metadataAgentConf = pkgs.writeText "metadata_agent.ini" ''
111-
[DEFAULT]
112-
nova_metadata_host = controller
113-
metadata_proxy_shared_secret = neutron_metadata_secret
114-
'';
115-
116113
neutron_env = pkgs.python3.buildEnv.override {
117114
extraLibs = [ neutron ];
118115
};
@@ -166,12 +163,6 @@ in
166163
The Neutron DHCP agent config.
167164
'';
168165
};
169-
metadataAgentConfig = mkOption {
170-
default = metadataAgentConf;
171-
description = ''
172-
The Neutron metadata agent config.
173-
'';
174-
};
175166
providerInterface = mkOption {
176167
default = "eth2";
177168
type = types.str;
@@ -221,11 +212,6 @@ in
221212
argument = "${cfg.dhcpAgentConfig}";
222213
};
223214
};
224-
"/etc/neutron/metadata_agent.ini" = {
225-
L = {
226-
argument = "${cfg.metadataAgentConfig}";
227-
};
228-
};
229215
"/etc/neutron/api-paste.ini" = {
230216
L = {
231217
argument = "${neutron}/etc/neutron/api-paste.ini";
@@ -264,7 +250,7 @@ in
264250
wantedBy = [ "multi-user.target" ];
265251
path = [ neutron ];
266252
serviceConfig = {
267-
ExecStart = ''${neutron}/bin/neutron-metadata-agent --config-file=${cfg.config} --config-file=${cfg.ml2Config}'';
253+
ExecStart = ''${neutron}/bin/neutron-metadata-agent --config-file=${cfg.config}'';
268254
};
269255
};
270256

modules/controller/openstack-controller.nix

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
glance,
66
placement,
77
horizon,
8+
cinder,
89
}:
910
{
1011
config,
@@ -32,6 +33,7 @@ in
3233
(import ./nova.nix { inherit nova; })
3334
(import ./neutron.nix { inherit neutron; })
3435
(import ./horizon.nix { inherit horizon; })
36+
(import ./cinder.nix { inherit cinder; }) # only cinder management component
3537
];
3638

3739
config = {
@@ -60,6 +62,12 @@ in
6062
mysql -N -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'glance';"
6163
mysql -N -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';"
6264
65+
# Cinder
66+
mysql -N -e "drop database cinder;" || true
67+
mysql -N -e "create database cinder;" || true
68+
mysql -N -e "GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'cinder';"
69+
mysql -N -e "GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'cinder';"
70+
6371
# Placement
6472
mysql -N -e "drop database placement;" || true
6573
mysql -N -e "create database placement;" || true
@@ -146,6 +154,29 @@ in
146154
};
147155
};
148156

157+
systemd.services.cinder = {
158+
description = "OpenStack Cinder setup";
159+
after = [ "keystone-all.service" ];
160+
wantedBy = [ "multi-user.target" ];
161+
environment = adminEnv;
162+
path = [
163+
pkgs.openstackclient
164+
cinder
165+
];
166+
serviceConfig = {
167+
Type = "oneshot";
168+
User = "cinder";
169+
Group = "cinder";
170+
ExecStart = pkgs.writeShellScript "cinder.sh" ''
171+
set -euxo pipefail
172+
openstack user create --domain default --password cinder cinder || true
173+
openstack role add --project service --user cinder admin || true
174+
openstack role add --user cinder --user-domain default --system all reader || true
175+
cinder-manage --config-file ${config.cinder.config} db sync
176+
'';
177+
};
178+
};
179+
149180
# Placement service can be tested by executing
150181
# curl http://controller:8778
151182
# and receive some json with version info as result.

modules/default.nix

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@
77
keystone
88
glance
99
horizon
10+
cinder
1011
;
1112
placement = openstackPkgs.openstack-placement;
1213
};
1314

1415
computeModule = import ./compute/compute.nix { inherit (openstackPkgs) neutron nova; };
1516

17+
storageModule = import ./storage/cinder-storage-node.nix { inherit (openstackPkgs) cinder; };
18+
1619
testModules = import ./testing { };
1720
}

0 commit comments

Comments
 (0)