78 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			78 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| 
								 | 
							
								{ system ? builtins.currentSystem }:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								with import ../lib/testing.nix { inherit system; };
							 | 
						||
| 
								 | 
							
								with pkgs.lib;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let
							 | 
						||
| 
								 | 
							
								  glanceMysqlPassword = "glanceMysqlPassword";
							 | 
						||
| 
								 | 
							
								  glanceAdminPassword = "glanceAdminPassword";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  createDb = pkgs.writeText "db-provisionning.sql" ''
							 | 
						||
| 
								 | 
							
								    create database keystone;
							 | 
						||
| 
								 | 
							
								    GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';
							 | 
						||
| 
								 | 
							
								    GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    create database glance;
							 | 
						||
| 
								 | 
							
								    GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '${glanceMysqlPassword}';
							 | 
						||
| 
								 | 
							
								    GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '${glanceMysqlPassword}';
							 | 
						||
| 
								 | 
							
								  '';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  image =
							 | 
						||
| 
								 | 
							
								    (import ../lib/eval-config.nix {
							 | 
						||
| 
								 | 
							
								      inherit system;
							 | 
						||
| 
								 | 
							
								      modules = [ ../../nixos/modules/virtualisation/nova-image.nix ];
							 | 
						||
| 
								 | 
							
								    }).config.system.build.novaImage;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  # The admin keystone account
							 | 
						||
| 
								 | 
							
								  adminOpenstackCmd = "OS_TENANT_NAME=admin OS_USERNAME=admin OS_PASSWORD=keystone OS_AUTH_URL=http://localhost:5000/v3 OS_IDENTITY_API_VERSION=3 openstack";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								in makeTest {
							 | 
						||
| 
								 | 
							
								  meta = with pkgs.stdenv.lib.maintainers; {
							 | 
						||
| 
								 | 
							
								    maintainers = [ lewo ];
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								  machine =
							 | 
						||
| 
								 | 
							
								    { config, pkgs, ... }:
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      services.mysql.enable = true;
							 | 
						||
| 
								 | 
							
								      services.mysql.package = pkgs.mysql;
							 | 
						||
| 
								 | 
							
								      services.mysql.initialScript = createDb;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      virtualisation = {
							 | 
						||
| 
								 | 
							
								        openstack.keystone = {
							 | 
						||
| 
								 | 
							
								          enable = true;
							 | 
						||
| 
								 | 
							
								          database.password = { value = "keystone"; storage = "fromNixStore"; };
							 | 
						||
| 
								 | 
							
								          adminToken = { value = "adminToken"; storage = "fromNixStore"; };
							 | 
						||
| 
								 | 
							
								          bootstrap.enable = true;
							 | 
						||
| 
								 | 
							
								          bootstrap.adminPassword = { value = "keystone"; storage = "fromNixStore"; };
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        openstack.glance = {
							 | 
						||
| 
								 | 
							
								          enable = true;
							 | 
						||
| 
								 | 
							
								          database.password = { value = glanceMysqlPassword; storage = "fromNixStore"; };
							 | 
						||
| 
								 | 
							
								          servicePassword = { value = glanceAdminPassword; storage = "fromNixStore"; };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          bootstrap = {
							 | 
						||
| 
								 | 
							
								            enable = true;
							 | 
						||
| 
								 | 
							
								            keystoneAdminPassword = { value = "keystone"; storage = "fromNixStore"; };
							 | 
						||
| 
								 | 
							
								          };
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        memorySize = 2096;
							 | 
						||
| 
								 | 
							
								        diskSize = 4 * 1024;
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      environment.systemPackages = with pkgs.pythonPackages; with pkgs; [
							 | 
						||
| 
								 | 
							
								        openstackclient
							 | 
						||
| 
								 | 
							
								      ];
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  testScript =
							 | 
						||
| 
								 | 
							
								    ''
							 | 
						||
| 
								 | 
							
								     $machine->waitForUnit("glance-api.service");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								     # Since Glance api can take time to start, we retry until success
							 | 
						||
| 
								 | 
							
								     $machine->waitUntilSucceeds("${adminOpenstackCmd} image create nixos --file ${image}/nixos.img --disk-format qcow2 --container-format bare --public");
							 | 
						||
| 
								 | 
							
								     $machine->succeed("${adminOpenstackCmd} image list") =~ /nixos/ or die;
							 | 
						||
| 
								 | 
							
								    '';
							 | 
						||
| 
								 | 
							
								}
							 |