From e6b4ca9bd8756d867d685b93863158c51a8457cf Mon Sep 17 00:00:00 2001 From: Artem Goncharov Date: Thu, 19 Mar 2026 19:18:26 +0100 Subject: [PATCH] refactor: Make assignment sql driver a standalone crate Split out the assignment sql driver to the standalone crate --- Cargo.lock | 13 +++++++ Cargo.toml | 3 +- Dockerfile | 3 ++ crates/assignment-sql/Cargo.toml | 25 +++++++++++++ .../sql => assignment-sql/src}/assignment.rs | 7 ++-- .../src}/assignment/check.rs | 7 ++-- .../src}/assignment/create.rs | 7 ++-- .../src}/assignment/delete.rs | 7 ++-- .../src}/assignment/list.rs | 11 +++--- crates/assignment-sql/src/entity.rs | 21 +++++++++++ .../src}/entity/assignment.rs | 0 crates/assignment-sql/src/entity/prelude.rs | 19 ++++++++++ .../src/entity/sea_orm_active_enums.rs | 30 ++++++++++++++++ .../src}/entity/system_assignment.rs | 19 ++++------ .../sql.rs => assignment-sql/src/lib.rs} | 36 ++++++++----------- crates/core/src/assignment/error.rs | 9 +++++ crates/keystone/Cargo.toml | 1 + crates/keystone/src/assignment/backend.rs | 3 -- crates/keystone/src/db/entity.rs | 2 -- crates/keystone/src/db/entity/prelude.rs | 4 +-- .../src/db/entity/sea_orm_active_enums.rs | 12 ------- crates/keystone/src/plugin_manager.rs | 2 +- tests/integration/Cargo.toml | 1 + tests/integration/src/common.rs | 7 +++- tools/Dockerfile.functest | 2 ++ 25 files changed, 178 insertions(+), 73 deletions(-) create mode 100644 crates/assignment-sql/Cargo.toml rename crates/{keystone/src/assignment/backend/sql => assignment-sql/src}/assignment.rs (95%) rename crates/{keystone/src/assignment/backend/sql => assignment-sql/src}/assignment/check.rs (98%) rename crates/{keystone/src/assignment/backend/sql => assignment-sql/src}/assignment/create.rs (98%) rename crates/{keystone/src/assignment/backend/sql => assignment-sql/src}/assignment/delete.rs (99%) rename crates/{keystone/src/assignment/backend/sql => assignment-sql/src}/assignment/list.rs (98%) create mode 100644 crates/assignment-sql/src/entity.rs rename crates/{keystone/src/db => assignment-sql/src}/entity/assignment.rs (100%) create mode 100644 crates/assignment-sql/src/entity/prelude.rs create mode 100644 crates/assignment-sql/src/entity/sea_orm_active_enums.rs rename crates/{keystone/src/db => assignment-sql/src}/entity/system_assignment.rs (82%) rename crates/{keystone/src/assignment/backend/sql.rs => assignment-sql/src/lib.rs} (94%) diff --git a/Cargo.lock b/Cargo.lock index 7c695156..5d16fc3b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3302,6 +3302,7 @@ dependencies = [ "mockall", "openidconnect", "openstack-keystone-api-types", + "openstack-keystone-assignment-sql", "openstack-keystone-core", "openstack-keystone-distributed-storage", "openstack-keystone-token-fernet", @@ -3348,6 +3349,17 @@ dependencies = [ "webauthn-rs-proto", ] +[[package]] +name = "openstack-keystone-assignment-sql" +version = "0.1.0" +dependencies = [ + "async-trait", + "openstack-keystone-core", + "sea-orm", + "tokio", + "tracing", +] + [[package]] name = "openstack-keystone-core" version = "0.1.1" @@ -5789,6 +5801,7 @@ dependencies = [ "eyre", "itertools 0.14.0", "openstack-keystone", + "openstack-keystone-assignment-sql", "openstack-keystone-core", "openstack-keystone-token-fernet", "sea-orm", diff --git a/Cargo.toml b/Cargo.toml index 36946c7a..b6ce5887 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,7 @@ [workspace] members = [ "crates/api-types", + "crates/assignment-sql", "crates/core", "crates/keystone", "crates/token-fernet", @@ -8,7 +9,7 @@ members = [ "crates/webauthn", "tests/api", "tests/integration", - "tests/federation", + "tests/federation", ] exclude = [ "tests/loadtest" diff --git a/Dockerfile b/Dockerfile index 04b97a68..d4777781 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,6 +16,7 @@ RUN USER=root cargo new keystone # We want dependencies cached, so copy those first. COPY Cargo.toml Cargo.lock /usr/src/keystone/ COPY crates/api-types/Cargo.toml /usr/src/keystone/crates/api-types/ +COPY crates/assignment-sql/Cargo.toml /usr/src/keystone/crates/assignment-sql/ COPY crates/core/Cargo.toml /usr/src/keystone/crates/core/ COPY crates/keystone/Cargo.toml /usr/src/keystone/crates/keystone/ COPY crates/storage/Cargo.toml /usr/src/keystone/crates/storage/ @@ -31,6 +32,7 @@ RUN mkdir -p keystone/crates/keystone/src/bin && touch keystone/crates/keystone/ mkdir -p keystone/tests/loadtest/src &&\ cp keystone/src/main.rs keystone/tests/loadtest/src/main.rs &&\ mkdir -p keystone/crates/api-types/src && touch keystone/crates/api-types/src/lib.rs &&\ + mkdir -p keystone/crates/assignment-sql/src && touch keystone/crates/assignment-sql/src/lib.rs &&\ mkdir -p keystone/crates/core/src && touch keystone/crates/core/src/lib.rs &&\ mkdir -p keystone/crates/storage/src && touch keystone/crates/storage/src/lib.rs &&\ mkdir -p keystone/crates/token-fernet/src && touch keystone/crates/token-fernet/src/lib.rs &&\ @@ -51,6 +53,7 @@ COPY crates/api-types/ /usr/src/keystone/crates/api-types COPY crates/storage/ /usr/src/keystone/crates/storage COPY crates/token-fernet/ /usr/src/keystone/crates/token-fernet COPY crates/webauthn/ /usr/src/keystone/crates/webauthn +COPY crates/assignment-sql/ /usr/src/keystone/crates/assignment-sql ## Touch main.rs to prevent cached release build RUN touch crates/keystone/src/lib.rs && touch crates/keystone/src/bin/keystone.rs diff --git a/crates/assignment-sql/Cargo.toml b/crates/assignment-sql/Cargo.toml new file mode 100644 index 00000000..72e0549a --- /dev/null +++ b/crates/assignment-sql/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "openstack-keystone-assignment-sql" +description = "OpenStack Keystone assignment SQL driver" +version = "0.1.0" +edition.workspace = true +license.workspace = true +authors.workspace = true +rust-version.workspace = true +repository.workspace = true +homepage.workspace = true +exclude.workspace = true + +[dependencies] +async-trait.workspace = true +openstack-keystone-core = { version = "0.1", path = "../core" } +sea-orm.workspace = true +tokio = { workspace = true, features = ["macros"] } +tracing.workspace = true + +[dev-dependencies] +openstack-keystone-core = { version = "0.1", path = "../core", features = ["mock"] } +sea-orm = { workspace = true, features = ["mock", "sqlx-sqlite" ]} + +[lints] +workspace = true diff --git a/crates/keystone/src/assignment/backend/sql/assignment.rs b/crates/assignment-sql/src/assignment.rs similarity index 95% rename from crates/keystone/src/assignment/backend/sql/assignment.rs rename to crates/assignment-sql/src/assignment.rs index 34f63382..7857bd3f 100644 --- a/crates/keystone/src/assignment/backend/sql/assignment.rs +++ b/crates/assignment-sql/src/assignment.rs @@ -13,8 +13,9 @@ // SPDX-License-Identifier: Apache-2.0 //! Role assignment database backend. -use crate::assignment::{AssignmentProviderError, types::*}; -use crate::db::entity::{ +use openstack_keystone_core::assignment::{AssignmentProviderError, types::*}; + +use crate::entity::{ assignment as db_assignment, sea_orm_active_enums::Type as DbAssignmentType, system_assignment as db_system_assignment, }; @@ -95,7 +96,7 @@ impl TryFrom<&AssignmentType> for DbAssignmentType { #[cfg(test)] pub mod tests { - use crate::db::entity::{assignment, sea_orm_active_enums, system_assignment}; + use crate::entity::{assignment, sea_orm_active_enums, system_assignment}; pub fn get_role_assignment_mock>(role_id: S) -> assignment::Model { assignment::Model { diff --git a/crates/keystone/src/assignment/backend/sql/assignment/check.rs b/crates/assignment-sql/src/assignment/check.rs similarity index 98% rename from crates/keystone/src/assignment/backend/sql/assignment/check.rs rename to crates/assignment-sql/src/assignment/check.rs index 47f3d0d8..751f9be6 100644 --- a/crates/keystone/src/assignment/backend/sql/assignment/check.rs +++ b/crates/assignment-sql/src/assignment/check.rs @@ -17,17 +17,18 @@ use sea_orm::DatabaseConnection; use sea_orm::entity::*; use sea_orm::query::*; -use crate::assignment::{ +use openstack_keystone_core::assignment::{ AssignmentProviderError, types::{Assignment, AssignmentType}, }; -use crate::db::entity::{ +use openstack_keystone_core::error::DbContextExt; + +use crate::entity::{ assignment as db_assignment, prelude::{Assignment as DbAssignment, SystemAssignment as DbSystemAssignment}, sea_orm_active_enums::Type as DbAssignmentType, system_assignment as db_system_assignment, }; -use crate::error::DbContextExt; /// Check whether the grant exists. /// diff --git a/crates/keystone/src/assignment/backend/sql/assignment/create.rs b/crates/assignment-sql/src/assignment/create.rs similarity index 98% rename from crates/keystone/src/assignment/backend/sql/assignment/create.rs rename to crates/assignment-sql/src/assignment/create.rs index 358a4f3a..83858177 100644 --- a/crates/keystone/src/assignment/backend/sql/assignment/create.rs +++ b/crates/assignment-sql/src/assignment/create.rs @@ -15,15 +15,16 @@ use sea_orm::DatabaseConnection; use sea_orm::entity::*; -use crate::assignment::{ +use openstack_keystone_core::assignment::{ AssignmentProviderError, types::{Assignment, AssignmentCreate, AssignmentType}, }; -use crate::db::entity::{ +use openstack_keystone_core::error::DbContextExt; + +use crate::entity::{ assignment as db_assignment, sea_orm_active_enums::Type as DbAssignmentType, system_assignment as db_system_assignment, }; -use crate::error::DbContextExt; /// Create assignment grant. pub async fn create( diff --git a/crates/keystone/src/assignment/backend/sql/assignment/delete.rs b/crates/assignment-sql/src/assignment/delete.rs similarity index 99% rename from crates/keystone/src/assignment/backend/sql/assignment/delete.rs rename to crates/assignment-sql/src/assignment/delete.rs index 40ad3b5e..9f73189d 100644 --- a/crates/keystone/src/assignment/backend/sql/assignment/delete.rs +++ b/crates/assignment-sql/src/assignment/delete.rs @@ -13,15 +13,16 @@ // SPDX-License-Identifier: Apache-2.0 use sea_orm::{DatabaseConnection, EntityTrait}; -use crate::assignment::{ +use openstack_keystone_core::assignment::{ AssignmentProviderError, types::{Assignment, AssignmentType}, }; -use crate::db::entity::{ +use openstack_keystone_core::error::DbContextExt; + +use crate::entity::{ assignment as db_assignment, sea_orm_active_enums::Type as DbAssignmentType, system_assignment as db_system_assignment, }; -use crate::error::DbContextExt; /// Delete assignment grant. pub async fn delete( diff --git a/crates/keystone/src/assignment/backend/sql/assignment/list.rs b/crates/assignment-sql/src/assignment/list.rs similarity index 98% rename from crates/keystone/src/assignment/backend/sql/assignment/list.rs rename to crates/assignment-sql/src/assignment/list.rs index f8877cf0..44daa1de 100644 --- a/crates/keystone/src/assignment/backend/sql/assignment/list.rs +++ b/crates/assignment-sql/src/assignment/list.rs @@ -16,18 +16,19 @@ use sea_orm::DatabaseConnection; use sea_orm::entity::*; use sea_orm::query::*; -use crate::assignment::{ +use openstack_keystone_core::assignment::{ AssignmentProviderError, types::{ Assignment, RoleAssignmentListForMultipleActorTargetParameters, RoleAssignmentTargetType, }, }; -use crate::db::entity::{ +use openstack_keystone_core::error::DbContextExt; + +use crate::entity::{ assignment as db_assignment, prelude::{Assignment as DbAssignment, SystemAssignment as DbSystemAssignment}, system_assignment as db_system_assignment, }; -use crate::error::DbContextExt; /// Get all role assignments by list of actors on list of targets. /// @@ -175,11 +176,11 @@ async fn list_for_multiple_actors_and_targets_system( mod tests { use sea_orm::{DatabaseBackend, MockDatabase, Transaction}; - use crate::db::entity::assignment; + use openstack_keystone_core::assignment::types::{AssignmentType, RoleAssignmentTarget}; use super::super::tests::*; use super::*; - use crate::assignment::types::{AssignmentType, RoleAssignmentTarget}; + use crate::entity::assignment; #[tokio::test] async fn test_list_for_multiple_actor_targets_multiple_actors_single_target() { diff --git a/crates/assignment-sql/src/entity.rs b/crates/assignment-sql/src/entity.rs new file mode 100644 index 00000000..778990c5 --- /dev/null +++ b/crates/assignment-sql/src/entity.rs @@ -0,0 +1,21 @@ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// SPDX-License-Identifier: Apache-2.0 +#![allow(clippy::doc_paragraphs_missing_punctuation)] +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.4 + +pub mod prelude; + +pub mod assignment; +pub mod sea_orm_active_enums; +pub mod system_assignment; diff --git a/crates/keystone/src/db/entity/assignment.rs b/crates/assignment-sql/src/entity/assignment.rs similarity index 100% rename from crates/keystone/src/db/entity/assignment.rs rename to crates/assignment-sql/src/entity/assignment.rs diff --git a/crates/assignment-sql/src/entity/prelude.rs b/crates/assignment-sql/src/entity/prelude.rs new file mode 100644 index 00000000..cbe54c3b --- /dev/null +++ b/crates/assignment-sql/src/entity/prelude.rs @@ -0,0 +1,19 @@ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// SPDX-License-Identifier: Apache-2.0 + +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.4 +#![allow(unused_imports)] + +pub use super::assignment::Entity as Assignment; +pub use super::system_assignment::Entity as SystemAssignment; diff --git a/crates/assignment-sql/src/entity/sea_orm_active_enums.rs b/crates/assignment-sql/src/entity/sea_orm_active_enums.rs new file mode 100644 index 00000000..0f32d6d6 --- /dev/null +++ b/crates/assignment-sql/src/entity/sea_orm_active_enums.rs @@ -0,0 +1,30 @@ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// SPDX-License-Identifier: Apache-2.0 + +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.4 + +use sea_orm::entity::prelude::*; + +#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)] +#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "type")] +pub enum Type { + #[sea_orm(string_value = "GroupDomain")] + GroupDomain, + #[sea_orm(string_value = "GroupProject")] + GroupProject, + #[sea_orm(string_value = "UserDomain")] + UserDomain, + #[sea_orm(string_value = "UserProject")] + UserProject, +} diff --git a/crates/keystone/src/db/entity/system_assignment.rs b/crates/assignment-sql/src/entity/system_assignment.rs similarity index 82% rename from crates/keystone/src/db/entity/system_assignment.rs rename to crates/assignment-sql/src/entity/system_assignment.rs index 8224040b..09654e92 100644 --- a/crates/keystone/src/db/entity/system_assignment.rs +++ b/crates/assignment-sql/src/entity/system_assignment.rs @@ -32,19 +32,12 @@ pub struct Model { } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] -pub enum Relation { - #[sea_orm( - belongs_to = "super::role::Entity", - from = "Column::RoleId", - to = "super::role::Column::Id" - )] - Role, -} +pub enum Relation {} -impl Related for Entity { - fn to() -> RelationDef { - Relation::Role.def() - } -} +//impl Related for Entity { +// fn to() -> RelationDef { +// Relation::Role.def() +// } +//} impl ActiveModelBehavior for ActiveModel {} diff --git a/crates/keystone/src/assignment/backend/sql.rs b/crates/assignment-sql/src/lib.rs similarity index 94% rename from crates/keystone/src/assignment/backend/sql.rs rename to crates/assignment-sql/src/lib.rs index b9c56fd2..1ac028bd 100644 --- a/crates/keystone/src/assignment/backend/sql.rs +++ b/crates/assignment-sql/src/lib.rs @@ -11,21 +11,23 @@ // limitations under the License. // // SPDX-License-Identifier: Apache-2.0 +//! # Assignment driver to the OpenStack Keystone for the SQL database. use async_trait::async_trait; use std::collections::{BTreeMap, HashSet}; -use super::super::types::*; -use crate::assignment::{AssignmentProviderError, backend::AssignmentBackend}; -use crate::identity::IdentityApi; -use crate::keystone::ServiceState; -use crate::resource::ResourceApi; -use crate::role::{ +use openstack_keystone_core::assignment::types::*; +use openstack_keystone_core::assignment::{AssignmentProviderError, backend::AssignmentBackend}; +use openstack_keystone_core::identity::IdentityApi; +use openstack_keystone_core::keystone::ServiceState; +use openstack_keystone_core::resource::ResourceApi; +use openstack_keystone_core::role::{ RoleApi, types::{Role, RoleListParameters}, }; -pub(crate) mod assignment; +mod assignment; +pub mod entity; #[derive(Default)] pub struct SqlBackend {} @@ -183,15 +185,6 @@ impl AssignmentBackend for SqlBackend { } } -impl From for AssignmentProviderError { - fn from(source: crate::error::DatabaseError) -> Self { - match source { - cfl @ crate::error::DatabaseError::Conflict { .. } => Self::Conflict(cfl.to_string()), - other => Self::Driver(other.to_string()), - } - } -} - #[cfg(test)] mod tests { use sea_orm::{DatabaseBackend, DatabaseConnection, MockDatabase}; @@ -200,11 +193,12 @@ mod tests { use super::assignment::tests::*; use super::*; - use crate::config::Config; - use crate::keystone::Service; - use crate::policy::MockPolicy; - use crate::provider::Provider; - use crate::role::{MockRoleProvider, types::RoleBuilder}; + use openstack_keystone_core::config::Config; + use openstack_keystone_core::keystone::Service; + use openstack_keystone_core::policy::MockPolicy; + use openstack_keystone_core::provider::Provider; + use openstack_keystone_core::role::{MockRoleProvider, types::RoleBuilder}; + //use openstack_keystone_core::tests::get_mocked_state; fn get_mock_state(db: DatabaseConnection, provider: Provider) -> Arc { Arc::new( diff --git a/crates/core/src/assignment/error.rs b/crates/core/src/assignment/error.rs index d6fd9f99..45726a31 100644 --- a/crates/core/src/assignment/error.rs +++ b/crates/core/src/assignment/error.rs @@ -96,3 +96,12 @@ pub enum AssignmentProviderError { source: validator::ValidationErrors, }, } + +impl From for AssignmentProviderError { + fn from(source: crate::error::DatabaseError) -> Self { + match source { + cfl @ crate::error::DatabaseError::Conflict { .. } => Self::Conflict(cfl.to_string()), + other => Self::Driver(other.to_string()), + } + } +} diff --git a/crates/keystone/Cargo.toml b/crates/keystone/Cargo.toml index 1b377363..8635e4d0 100644 --- a/crates/keystone/Cargo.toml +++ b/crates/keystone/Cargo.toml @@ -30,6 +30,7 @@ config.workspace = true derive_builder.workspace = true eyre.workspace = true openstack-keystone-api-types = { version = "0.1", features = ["openapi", "validate"], path = "../api-types/"} +openstack-keystone-assignment-sql = { version = "0.1", path = "../assignment-sql/" } openstack-keystone-core = { version = "0.1", features = ["api"], path = "../core" } openstack-keystone-distributed-storage = { version = "0.1", path = "../storage/"} openstack-keystone-token-fernet = { version = "0.1", path = "../token-fernet/" } diff --git a/crates/keystone/src/assignment/backend.rs b/crates/keystone/src/assignment/backend.rs index 34267d69..4d6fdebe 100644 --- a/crates/keystone/src/assignment/backend.rs +++ b/crates/keystone/src/assignment/backend.rs @@ -12,7 +12,4 @@ // // SPDX-License-Identifier: Apache-2.0 -pub mod sql; - pub use openstack_keystone_core::assignment::backend::AssignmentBackend; -pub use sql::SqlBackend; diff --git a/crates/keystone/src/db/entity.rs b/crates/keystone/src/db/entity.rs index 5e78f93e..57049129 100644 --- a/crates/keystone/src/db/entity.rs +++ b/crates/keystone/src/db/entity.rs @@ -22,7 +22,6 @@ pub mod alembic_version; pub mod application_credential; pub mod application_credential_access_rule; pub mod application_credential_role; -pub mod assignment; pub mod config_register; pub mod consumer; pub mod credential; @@ -63,7 +62,6 @@ pub mod sea_orm_active_enums; pub mod sensitive_config; pub mod service; pub mod service_provider; -pub mod system_assignment; pub mod token; pub mod token_restriction; pub mod token_restriction_role_association; diff --git a/crates/keystone/src/db/entity/prelude.rs b/crates/keystone/src/db/entity/prelude.rs index b0f6cddc..6d9b9350 100644 --- a/crates/keystone/src/db/entity/prelude.rs +++ b/crates/keystone/src/db/entity/prelude.rs @@ -21,7 +21,7 @@ pub use super::alembic_version::Entity as AlembicVersion; pub use super::application_credential::Entity as ApplicationCredential; pub use super::application_credential_access_rule::Entity as ApplicationCredentialAccessRule; pub use super::application_credential_role::Entity as ApplicationCredentialRole; -pub use super::assignment::Entity as Assignment; +//pub use super::assignment::Entity as Assignment; pub use super::config_register::Entity as ConfigRegister; pub use super::consumer::Entity as Consumer; pub use super::credential::Entity as Credential; @@ -61,7 +61,7 @@ pub use super::role_option::Entity as RoleOption; pub use super::sensitive_config::Entity as SensitiveConfig; pub use super::service::Entity as Service; pub use super::service_provider::Entity as ServiceProvider; -pub use super::system_assignment::Entity as SystemAssignment; +//pub use super::system_assignment::Entity as SystemAssignment; pub use super::token::Entity as Token; pub use super::token_restriction::Entity as TokenRestriction; pub use super::token_restriction_role_association::Entity as TokenRestrictionRoleAssociation; diff --git a/crates/keystone/src/db/entity/sea_orm_active_enums.rs b/crates/keystone/src/db/entity/sea_orm_active_enums.rs index 837dffea..a2070f84 100644 --- a/crates/keystone/src/db/entity/sea_orm_active_enums.rs +++ b/crates/keystone/src/db/entity/sea_orm_active_enums.rs @@ -24,18 +24,6 @@ pub enum EntityType { #[sea_orm(string_value = "user")] User, } -#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)] -#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "type")] -pub enum Type { - #[sea_orm(string_value = "GroupDomain")] - GroupDomain, - #[sea_orm(string_value = "GroupProject")] - GroupProject, - #[sea_orm(string_value = "UserDomain")] - UserDomain, - #[sea_orm(string_value = "UserProject")] - UserProject, -} #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)] #[sea_orm( diff --git a/crates/keystone/src/plugin_manager.rs b/crates/keystone/src/plugin_manager.rs index 6d8369e6..ea0614ed 100644 --- a/crates/keystone/src/plugin_manager.rs +++ b/crates/keystone/src/plugin_manager.rs @@ -369,7 +369,7 @@ impl PluginManager { ); self.register_assignment_backend( "sql", - Arc::new(crate::assignment::backend::SqlBackend::default()), + Arc::new(openstack_keystone_assignment_sql::SqlBackend::default()), ); self.register_catalog_backend( "sql", diff --git a/tests/integration/Cargo.toml b/tests/integration/Cargo.toml index e46ae39f..b58f68bc 100644 --- a/tests/integration/Cargo.toml +++ b/tests/integration/Cargo.toml @@ -13,6 +13,7 @@ dist = false chrono.workspace = true eyre.workspace = true itertools.workspace = true +openstack-keystone-assignment-sql = { version = "0.1", path = "../../crates/assignment-sql/" } openstack-keystone-core = { version = "0.1", path = "../../crates/core", features = ["mock"] } openstack-keystone-token-fernet = { version = "0.1", path = "../../crates/token-fernet/" } openstack-keystone = { version = "0.1", path = "../../crates/keystone/" } diff --git a/tests/integration/src/common.rs b/tests/integration/src/common.rs index 1a163f79..0aac81df 100644 --- a/tests/integration/src/common.rs +++ b/tests/integration/src/common.rs @@ -127,7 +127,12 @@ pub async fn setup_schema(db: &DbConn) -> Result<()> { create_table(db, &schema, Role).await?; create_table(db, &schema, ImpliedRole).await?; - create_table(db, &schema, Assignment).await?; + create_table( + db, + &schema, + openstack_keystone_assignment_sql::entity::prelude::Assignment, + ) + .await?; create_table(db, &schema, RevocationEvent).await?; create_table(db, &schema, AccessRule).await?; diff --git a/tools/Dockerfile.functest b/tools/Dockerfile.functest index 2deac968..4040b382 100644 --- a/tools/Dockerfile.functest +++ b/tools/Dockerfile.functest @@ -15,6 +15,7 @@ RUN USER=root cargo new keystone # We want dependencies cached, so copy those first. COPY Cargo.toml Cargo.lock /usr/src/keystone/ COPY crates/api-types/Cargo.toml /usr/src/keystone/crates/api-types/ +COPY crates/assignment-sql/Cargo.toml /usr/src/keystone/crates/assignment-sql/ COPY crates/core/Cargo.toml /usr/src/keystone/crates/core/ COPY crates/keystone/Cargo.toml /usr/src/keystone/crates/keystone/ COPY crates/storage/Cargo.toml /usr/src/keystone/crates/storage/ @@ -30,6 +31,7 @@ RUN mkdir -p keystone/crates/keystone/src/bin && touch keystone/crates/keystone/ mkdir -p keystone/tests/loadtest/src &&\ cp keystone/src/main.rs keystone/tests/loadtest/src/main.rs &&\ mkdir -p keystone/crates/api-types/src && touch keystone/crates/api-types/src/lib.rs &&\ + mkdir -p keystone/crates/assignment-sql/src && touch keystone/crates/assignment-sql/src/lib.rs &&\ mkdir -p keystone/crates/core/src && touch keystone/crates/core/src/lib.rs &&\ mkdir -p keystone/crates/storage/src && touch keystone/crates/storage/src/lib.rs &&\ mkdir -p keystone/crates/token-fernet/src && touch keystone/crates/token-fernet/src/lib.rs &&\