1{ system ? builtins.currentSystem }:
2
3with import ../lib/testing.nix { inherit system; };
4with pkgs.lib;
5
6let
7 glanceMysqlPassword = "glanceMysqlPassword";
8 glanceAdminPassword = "glanceAdminPassword";
9
10 createDb = pkgs.writeText "db-provisionning.sql" ''
11 create database keystone;
12 GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';
13 GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone';
14
15 create database glance;
16 GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '${glanceMysqlPassword}';
17 GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '${glanceMysqlPassword}';
18 '';
19
20 image =
21 (import ../lib/eval-config.nix {
22 inherit system;
23 modules = [ ../../nixos/modules/virtualisation/nova-image.nix ];
24 }).config.system.build.novaImage;
25
26 # The admin keystone account
27 adminOpenstackCmd = "OS_TENANT_NAME=admin OS_USERNAME=admin OS_PASSWORD=keystone OS_AUTH_URL=http://localhost:5000/v3 OS_IDENTITY_API_VERSION=3 openstack";
28
29in makeTest {
30 meta = with pkgs.stdenv.lib.maintainers; {
31 maintainers = [ lewo ];
32 };
33 machine =
34 { config, pkgs, ... }:
35 {
36 services.mysql.enable = true;
37 services.mysql.package = pkgs.mysql;
38 services.mysql.initialScript = createDb;
39
40 virtualisation = {
41 openstack.keystone = {
42 enable = true;
43 database.password = { value = "keystone"; storage = "fromNixStore"; };
44 adminToken = { value = "adminToken"; storage = "fromNixStore"; };
45 bootstrap.enable = true;
46 bootstrap.adminPassword = { value = "keystone"; storage = "fromNixStore"; };
47 };
48
49 openstack.glance = {
50 enable = true;
51 database.password = { value = glanceMysqlPassword; storage = "fromNixStore"; };
52 servicePassword = { value = glanceAdminPassword; storage = "fromNixStore"; };
53
54 bootstrap = {
55 enable = true;
56 keystoneAdminPassword = { value = "keystone"; storage = "fromNixStore"; };
57 };
58 };
59
60 memorySize = 2096;
61 diskSize = 4 * 1024;
62 };
63
64 environment.systemPackages = with pkgs.pythonPackages; with pkgs; [
65 openstackclient
66 ];
67 };
68
69 testScript =
70 ''
71 $machine->waitForUnit("glance-api.service");
72
73 # Since Glance api can take time to start, we retry until success
74 $machine->waitUntilSucceeds("${adminOpenstackCmd} image create nixos --file ${image}/nixos.img --disk-format qcow2 --container-format bare --public");
75 $machine->succeed("${adminOpenstackCmd} image list") =~ /nixos/ or die;
76 '';
77}