From 08d7dbbe4eb2e88d93f803f387438faef68e601d Mon Sep 17 00:00:00 2001 From: Yann Stepienik Date: Mon, 8 May 2023 12:38:27 +0100 Subject: [PATCH] [release] v0.4.0-unstable6 --- client/src/index.css | 4 ++ client/src/pages/servapps/actionBar.jsx | 12 ++++-- .../src/pages/servapps/containers/network.jsx | 43 +++++++++++++------ .../src/pages/servapps/containers/setup.jsx | 3 +- .../src/pages/servapps/containers/volumes.jsx | 13 +++--- client/src/pages/servapps/networks.jsx | 3 ++ client/src/pages/servapps/servapps.jsx | 2 +- client/src/pages/servapps/volumes.jsx | 3 ++ package.json | 2 +- src/docker/api_managecont.go | 8 ++++ src/docker/api_networks.go | 7 +++ src/docker/api_secureContainer.go | 7 +++ src/docker/api_updateContainer.go | 7 +++ src/index.go | 8 ++-- 14 files changed, 93 insertions(+), 29 deletions(-) diff --git a/client/src/index.css b/client/src/index.css index a2edbe1..4ddf7cd 100644 --- a/client/src/index.css +++ b/client/src/index.css @@ -65,4 +65,8 @@ .darken { filter: brightness(0.5); +} + +.MuiAlert-icon { + align-items: center; } \ No newline at end of file diff --git a/client/src/pages/servapps/actionBar.jsx b/client/src/pages/servapps/actionBar.jsx index a213e35..adedec6 100644 --- a/client/src/pages/servapps/actionBar.jsx +++ b/client/src/pages/servapps/actionBar.jsx @@ -1,6 +1,6 @@ import React from 'react'; import { IconButton, Tooltip } from '@mui/material'; -import { CloseSquareOutlined, DeleteOutlined, PauseCircleOutlined, PlaySquareOutlined, ReloadOutlined, RollbackOutlined, StopOutlined, UpCircleOutlined } from '@ant-design/icons'; +import { CheckCircleOutlined, CloseSquareOutlined, DeleteOutlined, PauseCircleOutlined, PlaySquareOutlined, ReloadOutlined, RollbackOutlined, StopOutlined, UpCircleOutlined } from '@ant-design/icons'; import * as API from '../../api'; const GetActions = ({ @@ -9,6 +9,8 @@ const GetActions = ({ refreshServeApps, setIsUpdatingId }) => { + const [confirmDelete, setConfirmDelete] = React.useState(false); + const doTo = (action) => { setIsUpdatingId(Id, true); API.docker.manageContainer(Id, action).then((res) => { @@ -76,8 +78,12 @@ const GetActions = ({ { t: 'Delete', if: ['exited', 'created'], - e: {doTo('remove')}} color="error" size='large'> - + e: { + if(confirmDelete) doTo('remove') + else setConfirmDelete(true); + }} color="error" size='large'> + {confirmDelete ? + : } } ]; diff --git a/client/src/pages/servapps/containers/network.jsx b/client/src/pages/servapps/containers/network.jsx index 4d78cab..1b85e44 100644 --- a/client/src/pages/servapps/containers/network.jsx +++ b/client/src/pages/servapps/containers/network.jsx @@ -1,6 +1,6 @@ import React from 'react'; import { Formik } from 'formik'; -import { Button, Stack, Grid, MenuItem, TextField, IconButton, FormHelperText, CircularProgress, useTheme } from '@mui/material'; +import { Button, Stack, Grid, MenuItem, TextField, IconButton, FormHelperText, CircularProgress, useTheme, Alert } from '@mui/material'; import MainCard from '../../../components/MainCard'; import { CosmosCheckbox, CosmosFormDivider, CosmosInputText, CosmosSelect } from '../../config/users/formShortcuts'; @@ -12,13 +12,6 @@ import { NetworksColumns } from '../networks'; import NewNetworkButton from '../createNetwork'; const NetworkContainerSetup = ({ config, containerInfo, refresh }) => { - const restartPolicies = [ - ['no', 'No Restart'], - ['always', 'Always Restart'], - ['on-failure', 'Restart On Failure'], - ['unless-stopped', 'Restart Unless Stopped'], - ]; - const [networks, setNetworks] = React.useState([]); const theme = useTheme(); const isDark = theme.palette.mode === 'dark'; @@ -40,13 +33,13 @@ const NetworkContainerSetup = ({ config, containerInfo, refresh }) => { const connect = (network) => { setNetworks(null); - return API.docker.attachNetwork(containerInfo.Id, network).then(() => { + return API.docker.attachNetwork(containerInfo.Name.replace('/', ''), network).then(() => { refreshAll(); }); } const disconnect = (network) => { - return API.docker.detachNetwork(containerInfo.Id, network).then(() => { + return API.docker.detachNetwork(containerInfo.Name.replace('/', ''), network).then(() => { refreshAll(); }); } @@ -94,18 +87,20 @@ const NetworkContainerSetup = ({ config, containerInfo, refresh }) => { .then((res) => { setStatus({ success: true }); setSubmitting(false); + refresh && refresh(); } ).catch((err) => { setStatus({ success: false }); setErrors({ submit: err.message }); setSubmitting(false); + refresh && refresh(); }); }} > {(formik) => (
- + {formik.values.ports.map((port, idx) => ( @@ -209,7 +204,30 @@ const NetworkContainerSetup = ({ config, containerInfo, refresh }) => { - + + + {networks && + {Object.keys(containerInfo.NetworkSettings.Networks).map((networkName) => { + const network = networks.find((n) => n.Name === networkName); + if (!network) { + return + You are connected to a network that has been removed: {networkName}. + Either re-create it or + + + } + })} + } + {networks && { )} +
diff --git a/client/src/pages/servapps/containers/setup.jsx b/client/src/pages/servapps/containers/setup.jsx index 876fe1e..6f5784a 100644 --- a/client/src/pages/servapps/containers/setup.jsx +++ b/client/src/pages/servapps/containers/setup.jsx @@ -8,7 +8,7 @@ import { DeleteOutlined, PlusCircleOutlined } from '@ant-design/icons'; import * as API from '../../../api'; import { LoadingButton } from '@mui/lab'; -const DockerContainerSetup = ({config, containerInfo}) => { +const DockerContainerSetup = ({config, containerInfo, refresh}) => { const restartPolicies = [ ['no', 'No Restart'], ['always', 'Always Restart'], @@ -66,6 +66,7 @@ const DockerContainerSetup = ({config, containerInfo}) => { .then((res) => { setStatus({ success: true }); setSubmitting(false); + refresh && refresh(); } ).catch((err) => { setStatus({ success: false }); diff --git a/client/src/pages/servapps/containers/volumes.jsx b/client/src/pages/servapps/containers/volumes.jsx index d5c40eb..ea74609 100644 --- a/client/src/pages/servapps/containers/volumes.jsx +++ b/client/src/pages/servapps/containers/volumes.jsx @@ -24,16 +24,16 @@ const VolumeContainerSetup = ({ config, containerInfo, refresh }) => { const isDark = theme.palette.mode === 'dark'; React.useEffect(() => { - API.docker.networkList().then((res) => { - setVolumes(res.data); + API.docker.volumeList().then((res) => { + setVolumes(res.data.Volumes); }); }, []); const refreshAll = () => { setVolumes(null); refresh().then(() => { - API.docker.networkList().then((res) => { - setVolumes(res.data); + API.docker.volumeList().then((res) => { + setVolumes(res.data.Volumes); }); }); }; @@ -75,11 +75,13 @@ const VolumeContainerSetup = ({ config, containerInfo, refresh }) => { .then((res) => { setStatus({ success: true }); setSubmitting(false); + refresh && refresh(); } ).catch((err) => { setStatus({ success: false }); setErrors({ submit: err.message }); setSubmitting(false); + refresh && refresh(); }); }} > @@ -193,7 +195,6 @@ const VolumeContainerSetup = ({ config, containerInfo, refresh }) => { { title: '', field: (r) => { - console.log(r); return (