feat: PostgreSQL score works, added postgresql example, tested on OKD 4.19, added note about incompatible default namespace settings
Some checks failed
Run Check Script / check (pull_request) Failing after 2m37s
Some checks failed
Run Check Script / check (pull_request) Failing after 2m37s
This commit is contained in:
18
examples/postgresql/Cargo.toml
Normal file
18
examples/postgresql/Cargo.toml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
[package]
|
||||||
|
name = "example-postgresql"
|
||||||
|
edition = "2024"
|
||||||
|
version.workspace = true
|
||||||
|
readme.workspace = true
|
||||||
|
license.workspace = true
|
||||||
|
publish = false
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
harmony = { path = "../../harmony" }
|
||||||
|
harmony_cli = { path = "../../harmony_cli" }
|
||||||
|
harmony_types = { path = "../../harmony_types" }
|
||||||
|
cidr = { workspace = true }
|
||||||
|
tokio = { workspace = true }
|
||||||
|
harmony_macros = { path = "../../harmony_macros" }
|
||||||
|
log = { workspace = true }
|
||||||
|
env_logger = { workspace = true }
|
||||||
|
url = { workspace = true }
|
||||||
22
examples/postgresql/src/main.rs
Normal file
22
examples/postgresql/src/main.rs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
use harmony::{
|
||||||
|
inventory::Inventory, modules::postgresql::PostgreSQLScore, topology::K8sAnywhereTopology,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
let postgresql = PostgreSQLScore {
|
||||||
|
name: "harmony-postgres-example".to_string(), // Override default name
|
||||||
|
namespace: "harmony-postgres-example".to_string(),
|
||||||
|
..Default::default() // Use harmony defaults, they are based on CNPG's default values :
|
||||||
|
// "default" namespace, 1 instance, 1Gi storage
|
||||||
|
};
|
||||||
|
|
||||||
|
harmony_cli::run(
|
||||||
|
Inventory::autoload(),
|
||||||
|
K8sAnywhereTopology::from_env(),
|
||||||
|
vec![Box::new(postgresql)],
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
@@ -10,6 +10,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
namespaced = true,
|
namespaced = true,
|
||||||
schema = "disabled"
|
schema = "disabled"
|
||||||
)]
|
)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct ClusterSpec {
|
pub struct ClusterSpec {
|
||||||
pub instances: i32,
|
pub instances: i32,
|
||||||
pub image_name: Option<String>,
|
pub image_name: Option<String>,
|
||||||
|
|||||||
@@ -27,6 +27,9 @@ use k8s_openapi::apimachinery::pkg::apis::meta::v1::ObjectMeta;
|
|||||||
/// specific behavior
|
/// specific behavior
|
||||||
#[derive(Debug, Clone, Serialize)]
|
#[derive(Debug, Clone, Serialize)]
|
||||||
pub struct PostgreSQLScore {
|
pub struct PostgreSQLScore {
|
||||||
|
pub name: String,
|
||||||
|
/// **Note :** on OpenShfit based clusters, the namespace `default` has security
|
||||||
|
/// settings incompatible with the default CNPG behavior.
|
||||||
pub namespace: String,
|
pub namespace: String,
|
||||||
pub instances: i32,
|
pub instances: i32,
|
||||||
pub storage_size: String,
|
pub storage_size: String,
|
||||||
@@ -36,7 +39,10 @@ pub struct PostgreSQLScore {
|
|||||||
impl Default for PostgreSQLScore {
|
impl Default for PostgreSQLScore {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
namespace: "default".to_string(),
|
name: "harmony-pg".to_string(),
|
||||||
|
// We are using the namespace harmony by default since some clusters (openshift family)
|
||||||
|
// have incompatible configuration of the default namespace with cnpg
|
||||||
|
namespace: "harmony".to_string(),
|
||||||
instances: 1,
|
instances: 1,
|
||||||
storage_size: "1Gi".to_string(),
|
storage_size: "1Gi".to_string(),
|
||||||
image_name: None, // This lets cnpg use its default image
|
image_name: None, // This lets cnpg use its default image
|
||||||
@@ -56,7 +62,7 @@ impl PostgreSQLScore {
|
|||||||
impl<T: Topology + K8sclient> Score<T> for PostgreSQLScore {
|
impl<T: Topology + K8sclient> Score<T> for PostgreSQLScore {
|
||||||
fn create_interpret(&self) -> Box<dyn Interpret<T>> {
|
fn create_interpret(&self) -> Box<dyn Interpret<T>> {
|
||||||
let metadata = ObjectMeta {
|
let metadata = ObjectMeta {
|
||||||
name: Some("postgres".to_string()),
|
name: Some(self.name.clone()),
|
||||||
namespace: Some(self.namespace.clone()),
|
namespace: Some(self.namespace.clone()),
|
||||||
..ObjectMeta::default()
|
..ObjectMeta::default()
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user