1
0
Fork 0
mirror of https://codeberg.org/icewind/haze.git synced 2026-06-03 17:14:08 +02:00

link clouds to each other

This commit is contained in:
Robin Appelman 2021-08-13 16:05:17 +02:00
commit 55f6b18b69
3 changed files with 62 additions and 0 deletions

View file

@ -109,6 +109,20 @@ async fn main() -> Result<()> {
Option::<&mut Vec<u8>>::None, Option::<&mut Vec<u8>>::None,
) )
.await?; .await?;
cloud
.exec_with_output(
&mut docker,
vec![
"occ",
"config:system:set",
"trusted_domains",
"3",
"--value",
&cloud.id,
],
Option::<&mut Vec<u8>>::None,
)
.await?;
for service in &cloud.services { for service in &cloud.services {
for app in service.apps() { for app in service.apps() {
cloud cloud

View file

@ -1,3 +1,4 @@
use bollard::network::CreateNetworkOptions;
use bollard::Docker; use bollard::Docker;
use color_eyre::{eyre::WrapErr, Result}; use color_eyre::{eyre::WrapErr, Result};
@ -19,3 +20,33 @@ pub async fn clear_networks(docker: &Docker) -> Result<()> {
} }
Ok(()) Ok(())
} }
async fn get_network_id(docker: &Docker, name: &str) -> Result<Option<String>> {
let networks = docker
.list_networks::<&str>(None)
.await
.wrap_err("Failed to list docker networks")?;
Ok(networks.into_iter().find_map(|network| {
if network.name.as_deref() == Some(name) {
Some(network.id.unwrap())
} else {
None
}
}))
}
pub async fn ensure_network_exists(docker: &Docker, name: &str) -> Result<String> {
if let Some(id) = get_network_id(docker, name).await? {
Ok(id)
} else {
Ok(docker
.create_network(CreateNetworkOptions {
name,
check_duplicate: true,
..Default::default()
})
.await?
.id
.unwrap())
}
}

View file

@ -1,7 +1,9 @@
use crate::database::Database; use crate::database::Database;
use crate::image::pull_image; use crate::image::pull_image;
use crate::network::ensure_network_exists;
use bollard::container::{Config, CreateContainerOptions, NetworkingConfig}; use bollard::container::{Config, CreateContainerOptions, NetworkingConfig};
use bollard::models::{EndpointSettings, HostConfig}; use bollard::models::{EndpointSettings, HostConfig};
use bollard::network::ConnectNetworkOptions;
use bollard::Docker; use bollard::Docker;
use color_eyre::{eyre::WrapErr, Report, Result}; use color_eyre::{eyre::WrapErr, Report, Result};
use maplit::hashmap; use maplit::hashmap;
@ -66,6 +68,7 @@ impl PhpVersion {
volumes: Vec<String>, volumes: Vec<String>,
host: &str, host: &str,
) -> Result<String> { ) -> Result<String> {
ensure_network_exists(docker, "haze").await?;
pull_image(docker, self.image()).await?; pull_image(docker, self.image()).await?;
let options = Some(CreateContainerOptions { let options = Some(CreateContainerOptions {
name: id.to_string(), name: id.to_string(),
@ -98,6 +101,20 @@ impl PhpVersion {
let id = docker.create_container(options, config).await?.id; let id = docker.create_container(options, config).await?.id;
docker.start_container::<String>(&id, None).await?; docker.start_container::<String>(&id, None).await?;
docker
.connect_network(
"haze",
ConnectNetworkOptions {
container: id.as_str(),
endpoint_config: EndpointSettings {
aliases: Some(vec![id.to_string()]),
..Default::default()
},
},
)
.await?;
Ok(id) Ok(id)
} }