nixos/glance: add test

The test starts the glance service, creates a nixos image and ensures Glance
list it.

Note the test also starts the Keystone service since it is required
by Glance.

+78
+1
nixos/release.nix
··· 242 242 tests.firewall = callTest tests/firewall.nix {}; 243 243 tests.fleet = hydraJob (import tests/fleet.nix { system = "x86_64-linux"; }); 244 244 #tests.gitlab = callTest tests/gitlab.nix {}; 245 + tests.glance = callTest tests/glance.nix {}; 245 246 tests.gocd-agent = callTest tests/gocd-agent.nix {}; 246 247 tests.gocd-server = callTest tests/gocd-server.nix {}; 247 248 tests.gnome3 = callTest tests/gnome3.nix {};
+77
nixos/tests/glance.nix
··· 1 + { system ? builtins.currentSystem }: 2 + 3 + with import ../lib/testing.nix { inherit system; }; 4 + with pkgs.lib; 5 + 6 + let 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 + 29 + in 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 + }