glance: rip
part of openstack cleanup
This commit is contained in:
parent
d3d94992cf
commit
71767ee3c7
@ -282,7 +282,7 @@
|
|||||||
riak-cs = 263;
|
riak-cs = 263;
|
||||||
infinoted = 264;
|
infinoted = 264;
|
||||||
# keystone = 265; # unused, removed 2017-12-13
|
# keystone = 265; # unused, removed 2017-12-13
|
||||||
glance = 266;
|
# glance = 266; # unused, removed 2017-12-13
|
||||||
couchpotato = 267;
|
couchpotato = 267;
|
||||||
gogs = 268;
|
gogs = 268;
|
||||||
pdns-recursor = 269;
|
pdns-recursor = 269;
|
||||||
@ -552,7 +552,7 @@
|
|||||||
riak-cs = 263;
|
riak-cs = 263;
|
||||||
infinoted = 264;
|
infinoted = 264;
|
||||||
# keystone = 265; # unused, removed 2017-12-13
|
# keystone = 265; # unused, removed 2017-12-13
|
||||||
glance = 266;
|
# glance = 266; # unused, removed 2017-12-13
|
||||||
couchpotato = 267;
|
couchpotato = 267;
|
||||||
gogs = 268;
|
gogs = 268;
|
||||||
kresd = 270;
|
kresd = 270;
|
||||||
|
@ -748,5 +748,4 @@
|
|||||||
./virtualisation/vmware-guest.nix
|
./virtualisation/vmware-guest.nix
|
||||||
./virtualisation/xen-dom0.nix
|
./virtualisation/xen-dom0.nix
|
||||||
./virtualisation/xe-guest-utilities.nix
|
./virtualisation/xe-guest-utilities.nix
|
||||||
./virtualisation/openstack/glance.nix
|
|
||||||
]
|
]
|
||||||
|
@ -1,245 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
with lib; with import ./common.nix {inherit lib;};
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.virtualisation.openstack.glance;
|
|
||||||
commonConf = ''
|
|
||||||
[database]
|
|
||||||
connection = "mysql://${cfg.database.user}:${cfg.database.password.pattern}@${cfg.database.host}/${cfg.database.name}"
|
|
||||||
notification_driver = noop
|
|
||||||
|
|
||||||
[keystone_authtoken]
|
|
||||||
auth_url = ${cfg.authUrl}
|
|
||||||
auth_plugin = password
|
|
||||||
project_name = service
|
|
||||||
project_domain_id = default
|
|
||||||
user_domain_id = default
|
|
||||||
username = ${cfg.serviceUsername}
|
|
||||||
password = ${cfg.servicePassword.pattern}
|
|
||||||
|
|
||||||
[glance_store]
|
|
||||||
default_store = file
|
|
||||||
filesystem_store_datadir = /var/lib/glance/images/
|
|
||||||
'';
|
|
||||||
glanceApiConfTpl = pkgs.writeText "glance-api.conf" ''
|
|
||||||
${commonConf}
|
|
||||||
|
|
||||||
[paste_deploy]
|
|
||||||
flavor = keystone
|
|
||||||
config_file = ${cfg.package}/etc/glance-api-paste.ini
|
|
||||||
'';
|
|
||||||
glanceRegistryConfTpl = pkgs.writeText "glance-registry.conf" ''
|
|
||||||
${commonConf}
|
|
||||||
|
|
||||||
[paste_deploy]
|
|
||||||
config_file = ${cfg.package}/etc/glance-registry-paste.ini
|
|
||||||
'';
|
|
||||||
glanceApiConf = "/var/lib/glance/glance-api.conf";
|
|
||||||
glanceRegistryConf = "/var/lib/glance/glance-registry.conf";
|
|
||||||
|
|
||||||
in {
|
|
||||||
options.virtualisation.openstack.glance = {
|
|
||||||
package = mkOption {
|
|
||||||
type = types.package;
|
|
||||||
default = pkgs.glance;
|
|
||||||
defaultText = "pkgs.glance";
|
|
||||||
description = ''
|
|
||||||
Glance package to use.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
enable = mkOption {
|
|
||||||
default = false;
|
|
||||||
type = types.bool;
|
|
||||||
description = ''
|
|
||||||
This option enables Glance as a single-machine
|
|
||||||
installation. That is, all of Glance's components are
|
|
||||||
enabled on this machine. This is useful for evaluating and
|
|
||||||
experimenting with Glance. Note we are currently not
|
|
||||||
providing any configurations for a multi-node setup.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
authUrl = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = http://localhost:5000;
|
|
||||||
description = ''
|
|
||||||
Complete public Identity (Keystone) API endpoint. Note this is
|
|
||||||
unversionned.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
serviceUsername = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "glance";
|
|
||||||
description = ''
|
|
||||||
The Glance service username. This user is created if bootstrap
|
|
||||||
is enable, otherwise it has to be manually created before
|
|
||||||
starting this service.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
servicePassword = mkSecretOption {
|
|
||||||
name = "glanceAdminPassword";
|
|
||||||
description = ''
|
|
||||||
The Glance service user's password.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
database = databaseOption "glance";
|
|
||||||
|
|
||||||
bootstrap = {
|
|
||||||
enable = mkOption {
|
|
||||||
default = false;
|
|
||||||
type = types.bool;
|
|
||||||
description = ''
|
|
||||||
Bootstrap the Glance service by creating the service tenant,
|
|
||||||
an admin account and a public endpoint. This option provides
|
|
||||||
a ready-to-use glance service. This is only done at the
|
|
||||||
first Glance execution by the systemd post start section.
|
|
||||||
The keystone admin account is used to create required
|
|
||||||
Keystone resource for the Glance service.
|
|
||||||
|
|
||||||
<note><para> This option is a helper for setting up
|
|
||||||
development or testing environments.</para></note>
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
endpointPublic = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "http://localhost:9292";
|
|
||||||
description = ''
|
|
||||||
The public image endpoint. The link <link
|
|
||||||
xlink:href="http://docs.openstack.org/liberty/install-guide-rdo/keystone-services.html">
|
|
||||||
create endpoint</link> provides more informations
|
|
||||||
about that.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
keystoneAdminUsername = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "admin";
|
|
||||||
description = ''
|
|
||||||
The keystone admin user name used to create the Glance account.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
keystoneAdminPassword = mkSecretOption {
|
|
||||||
name = "keystoneAdminPassword";
|
|
||||||
description = ''
|
|
||||||
The keystone admin user's password.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
keystoneAdminTenant = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "admin";
|
|
||||||
description = ''
|
|
||||||
The keystone admin tenant used to create the Glance account.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
keystoneAuthUrl = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "http://localhost:5000/v2.0";
|
|
||||||
description = ''
|
|
||||||
The keystone auth url used to create the Glance account.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
users.extraUsers = [{
|
|
||||||
name = "glance";
|
|
||||||
group = "glance";
|
|
||||||
uid = config.ids.gids.glance;
|
|
||||||
|
|
||||||
}];
|
|
||||||
users.extraGroups = [{
|
|
||||||
name = "glance";
|
|
||||||
gid = config.ids.gids.glance;
|
|
||||||
}];
|
|
||||||
|
|
||||||
systemd.services.glance-registry = {
|
|
||||||
description = "OpenStack Glance Registry Daemon";
|
|
||||||
after = [ "network.target"];
|
|
||||||
path = [ pkgs.curl pkgs.pythonPackages.keystoneclient pkgs.gawk ];
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
preStart = ''
|
|
||||||
mkdir -m 775 -p /var/lib/glance/{images,scrubber,image_cache}
|
|
||||||
chown glance:glance /var/lib/glance/{images,scrubber,image_cache}
|
|
||||||
|
|
||||||
# Secret file managment
|
|
||||||
cp ${glanceRegistryConfTpl} ${glanceRegistryConf};
|
|
||||||
chown glance:glance ${glanceRegistryConf};
|
|
||||||
chmod 640 ${glanceRegistryConf}
|
|
||||||
${replaceSecret cfg.database.password glanceRegistryConf}
|
|
||||||
${replaceSecret cfg.servicePassword glanceRegistryConf}
|
|
||||||
|
|
||||||
cp ${glanceApiConfTpl} ${glanceApiConf};
|
|
||||||
chown glance:glance ${glanceApiConf};
|
|
||||||
chmod 640 ${glanceApiConf}
|
|
||||||
${replaceSecret cfg.database.password glanceApiConf}
|
|
||||||
${replaceSecret cfg.servicePassword glanceApiConf}
|
|
||||||
|
|
||||||
# Initialise the database
|
|
||||||
${cfg.package}/bin/glance-manage --config-file=${glanceApiConf} --config-file=${glanceRegistryConf} db_sync
|
|
||||||
'';
|
|
||||||
postStart = ''
|
|
||||||
set -eu
|
|
||||||
export OS_AUTH_URL=${cfg.bootstrap.keystoneAuthUrl}
|
|
||||||
export OS_USERNAME=${cfg.bootstrap.keystoneAdminUsername}
|
|
||||||
export OS_PASSWORD=${getSecret cfg.bootstrap.keystoneAdminPassword}
|
|
||||||
export OS_TENANT_NAME=${cfg.bootstrap.keystoneAdminTenant}
|
|
||||||
|
|
||||||
# Wait until the keystone is available for use
|
|
||||||
count=0
|
|
||||||
while ! keystone user-get ${cfg.bootstrap.keystoneAdminUsername} > /dev/null
|
|
||||||
do
|
|
||||||
if [ $count -eq 30 ]
|
|
||||||
then
|
|
||||||
echo "Tried 30 times, giving up..."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Keystone not yet started. Waiting for 1 second..."
|
|
||||||
count=$((count++))
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
|
|
||||||
# If the service glance doesn't exist, we consider glance is
|
|
||||||
# not initialized
|
|
||||||
if ! keystone service-get glance
|
|
||||||
then
|
|
||||||
keystone service-create --type image --name glance
|
|
||||||
ID=$(keystone service-get glance | awk '/ id / { print $4 }')
|
|
||||||
keystone endpoint-create --region RegionOne --service $ID --internalurl http://localhost:9292 --adminurl http://localhost:9292 --publicurl ${cfg.bootstrap.endpointPublic}
|
|
||||||
|
|
||||||
keystone user-create --name ${cfg.serviceUsername} --tenant service --pass ${getSecret cfg.servicePassword}
|
|
||||||
keystone user-role-add --tenant service --user ${cfg.serviceUsername} --role admin
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
serviceConfig = {
|
|
||||||
PermissionsStartOnly = true; # preStart must be run as root
|
|
||||||
TimeoutStartSec = "600"; # 10min for initial db migrations
|
|
||||||
User = "glance";
|
|
||||||
Group = "glance";
|
|
||||||
ExecStart = "${cfg.package}/bin/glance-registry --config-file=${glanceRegistryConf}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
systemd.services.glance-api = {
|
|
||||||
description = "OpenStack Glance API Daemon";
|
|
||||||
after = [ "glance-registry.service" "network.target"];
|
|
||||||
requires = [ "glance-registry.service" "network.target"];
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
serviceConfig = {
|
|
||||||
PermissionsStartOnly = true; # preStart must be run as root
|
|
||||||
User = "glance";
|
|
||||||
Group = "glance";
|
|
||||||
ExecStart = "${cfg.package}/bin/glance-api --config-file=${glanceApiConf}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
@ -267,7 +267,6 @@ in rec {
|
|||||||
tests.fleet = hydraJob (import tests/fleet.nix { system = "x86_64-linux"; });
|
tests.fleet = hydraJob (import tests/fleet.nix { system = "x86_64-linux"; });
|
||||||
#tests.gitlab = callTest tests/gitlab.nix {};
|
#tests.gitlab = callTest tests/gitlab.nix {};
|
||||||
tests.gitolite = callTest tests/gitolite.nix {};
|
tests.gitolite = callTest tests/gitolite.nix {};
|
||||||
tests.glance = callTest tests/glance.nix {};
|
|
||||||
tests.gocd-agent = callTest tests/gocd-agent.nix {};
|
tests.gocd-agent = callTest tests/gocd-agent.nix {};
|
||||||
tests.gocd-server = callTest tests/gocd-server.nix {};
|
tests.gocd-server = callTest tests/gocd-server.nix {};
|
||||||
tests.gnome3 = callTest tests/gnome3.nix {};
|
tests.gnome3 = callTest tests/gnome3.nix {};
|
||||||
|
@ -1,77 +0,0 @@
|
|||||||
{ 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;
|
|
||||||
'';
|
|
||||||
}
|
|
@ -1,69 +0,0 @@
|
|||||||
{ stdenv, fetchurl, python2Packages, sqlite, which, strace }:
|
|
||||||
|
|
||||||
python2Packages.buildPythonApplication rec {
|
|
||||||
name = "glance-${version}";
|
|
||||||
version = "11.0.0";
|
|
||||||
namePrefix = "";
|
|
||||||
|
|
||||||
PBR_VERSION = "${version}";
|
|
||||||
|
|
||||||
src = fetchurl {
|
|
||||||
url = "https://github.com/openstack/glance/archive/${version}.tar.gz";
|
|
||||||
sha256 = "05rz1lmzdmpnw8sf87vvi0l6q9g6s840z934zyinw17yfcvmqrdg";
|
|
||||||
};
|
|
||||||
|
|
||||||
# https://github.com/openstack/glance/blob/stable/liberty/requirements.txt
|
|
||||||
propagatedBuildInputs = with python2Packages; [
|
|
||||||
pbr sqlalchemy anyjson eventlet PasteDeploy routes webob sqlalchemy_migrate
|
|
||||||
httplib2 pycrypto iso8601 stevedore futurist keystonemiddleware paste
|
|
||||||
jsonschema keystoneclient pyopenssl six retrying semantic-version qpid-python
|
|
||||||
WSME osprofiler glance_store castellan taskflow cryptography xattr pysendfile
|
|
||||||
|
|
||||||
# oslo componenets
|
|
||||||
oslo-config oslo-context oslo-concurrency oslo-service oslo-utils oslo-db
|
|
||||||
oslo-i18n oslo-log oslo-messaging oslo-middleware oslo-policy oslo-serialization
|
|
||||||
MySQL_python
|
|
||||||
];
|
|
||||||
|
|
||||||
buildInputs = with python2Packages; [
|
|
||||||
Babel coverage fixtures mox3 mock oslosphinx requests testrepository pep8
|
|
||||||
testresources testscenarios testtools psutil_1 oslotest psycopg2
|
|
||||||
sqlite which strace
|
|
||||||
];
|
|
||||||
|
|
||||||
patchPhase = ''
|
|
||||||
# it's not a test, but a class mixin
|
|
||||||
sed -i 's/ImageCacheTestCase/ImageCacheMixin/' glance/tests/unit/test_image_cache.py
|
|
||||||
|
|
||||||
# these require network access, see https://bugs.launchpad.net/glance/+bug/1508868
|
|
||||||
sed -i 's/test_get_image_data_http/noop/' glance/tests/unit/common/scripts/test_scripts_utils.py
|
|
||||||
sed -i 's/test_set_image_data_http/noop/' glance/tests/unit/common/scripts/image_import/test_main.py
|
|
||||||
sed -i 's/test_create_image_with_nonexistent_location_url/noop/' glance/tests/unit/v1/test_api.py
|
|
||||||
sed -i 's/test_upload_image_http_nonexistent_location_url/noop/' glance/tests/unit/v1/test_api.py
|
|
||||||
|
|
||||||
# TODO: couldn't figure out why this test is failing
|
|
||||||
sed -i 's/test_all_task_api/noop/' glance/tests/integration/v2/test_tasks_api.py
|
|
||||||
'';
|
|
||||||
|
|
||||||
postInstall = ''
|
|
||||||
# check all binaries don't crash
|
|
||||||
for i in $out/bin/*; do
|
|
||||||
case "$i" in
|
|
||||||
*glance-artifacts) # https://bugs.launchpad.net/glance/+bug/1508879
|
|
||||||
:
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
$i --help
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
cp etc/*-paste.ini $out/etc/
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = with stdenv.lib; {
|
|
||||||
homepage = http://glance.openstack.org/;
|
|
||||||
description = "Services for discovering, registering, and retrieving virtual machine images";
|
|
||||||
license = stdenv.lib.licenses.asl20;
|
|
||||||
platforms = stdenv.lib.platforms.linux;
|
|
||||||
};
|
|
||||||
}
|
|
@ -16114,7 +16114,6 @@ with pkgs;
|
|||||||
|
|
||||||
# Open Stack
|
# Open Stack
|
||||||
neutron = callPackage ../applications/virtualization/openstack/neutron.nix { };
|
neutron = callPackage ../applications/virtualization/openstack/neutron.nix { };
|
||||||
glance = callPackage ../applications/virtualization/openstack/glance.nix { };
|
|
||||||
|
|
||||||
nova-filters = callPackage ../applications/audio/nova-filters { };
|
nova-filters = callPackage ../applications/audio/nova-filters { };
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user