Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions components/console/src/pages/VANs/VANs.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import {
NumberInput,
IconButton,
Link,
Checkbox,
} from '@carbon/react';
import { Add, TrashCan, Gui, Deploy } from '@carbon/icons-react';
import OwnerGroupSelect from '../../components/OwnerGroupSelect/OwnerGroupSelect';
Expand Down Expand Up @@ -61,6 +62,7 @@ const VANs = () => {
const [deploymentTarget, setDeploymentTarget] = useState('standalone');
const [vanAccessPoints, setVanAccessPoints] = useState([]);
const [loadingAccessPoints, setLoadingAccessPoints] = useState(false);
const [exposeNetworkObserver, setExposeNetworkObserver] = useState(false);

useEffect(() => {
fetchBackbones();
Expand Down Expand Up @@ -203,6 +205,7 @@ const VANs = () => {
setVanToDeploy(van);
setDeployModalOpen(true);
setDeploymentTarget('standalone');
setExposeNetworkObserver(false);

// Fetch access points of type "van" from the VAN's backbone
let backbone = (van.backbone) ? van.backbone : selectedBackbone;
Expand Down Expand Up @@ -751,12 +754,14 @@ const VANs = () => {
setVanToDeploy(null);
setDeploymentTarget('standalone');
setVanAccessPoints([]);
setExposeNetworkObserver(false);
}}
onRequestSubmit={() => {
setDeployModalOpen(false);
setVanToDeploy(null);
setDeploymentTarget('standalone');
setVanAccessPoints([]);
setExposeNetworkObserver(false);
}}
>
<p style={{ marginBottom: '1rem' }}>
Expand All @@ -780,21 +785,31 @@ const VANs = () => {
/>
))}
</Select>

{loadingAccessPoints && (
<p style={{ marginTop: '0.5rem', marginBottom: '1rem', color: '#525252', fontSize: '0.875rem' }}>
Loading access points...
</p>
)}

{deploymentTarget !== 'standalone' && (
<Checkbox
id="expose-console"
labelText="Expose Network Observer Console"
checked={exposeNetworkObserver}
onChange={(e) => setExposeNetworkObserver(e.target.checked)}
style={{ marginTop: '1rem', marginBottom: '1rem' }}
/>
)}

{vanToDeploy && (
<div style={{ marginTop: '1rem', marginBottom: '1rem' }}>
<h5 style={{ marginBottom: '0.5rem' }}>Download Configuration</h5>
<Link
href={
deploymentTarget === 'standalone'
? `/api/v1alpha1/vans/${vanToDeploy.id}/config/nonconnecting`
: `/api/v1alpha1/vans/${vanToDeploy.id}/config/connecting/${deploymentTarget}`
: `/api/v1alpha1/vans/${vanToDeploy.id}/config/connecting/${deploymentTarget}${exposeNetworkObserver ? '?expose-console=true' : ''}`
}
download={'onboard.yaml'}
>
Expand Down
7 changes: 7 additions & 0 deletions components/management-controller/src/mc-apiserver.js
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,7 @@ const fetchBackboneLinksOutgoingKube = async function (req, res) {
const getVanConfigConnecting = async function (req, res) {
const vid = req.params.vid
const apid = req.params.apid
let exposeNetworkObserverConsole = req.query['expose-console'] === 'true';
let returnStatus = 200;
const client = await ClientFromPool();
try {
Expand Down Expand Up @@ -287,6 +288,12 @@ const getVanConfigConnecting = async function (req, res) {
resourceTemplates.NetworkLinkCR(ap.hostname, ap.port, van.objectname),
resourceTemplates.Secret(secret, van.objectname),
];
if (exposeNetworkObserverConsole) {
output.push(
resourceTemplates.ConnectorCR('vms-console', 8443, 'vms-console', 'app.kubernetes.io/name=network-observer', 'skupper-network-observer-client'),
resourceTemplates.InterNetworkIngressCR('vms-console', 'vms-console', 'management-link')
);
}
res.status(returnStatus).send(util.ToYaml(output));
}
} catch (err) {
Expand Down
39 changes: 38 additions & 1 deletion components/management-controller/src/resource-templates.js
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ export function NetworkLinkCR(host, port, secret) {
},
spec : {
hostname : host,
port : port,
port : parseInt(port, 10),
tlsCredentials : secret,
},
};
Expand Down Expand Up @@ -281,6 +281,43 @@ const accessPointNetworkAccess = function(apId, data) {
return networkAccess;
}

export function ConnectorCR(name, port, routingKey, selector, tlsCredentials) {
let connector = {
apiVersion: "skupper.io/v2alpha1",
kind: "Connector",
metadata: {
name: name,
},
spec: {
port: port,
routingKey: routingKey,
selector: selector,
type: "tcp",
tlsCredentials: tlsCredentials,
}
};
return connector;
}

export function InterNetworkIngressCR(name, routingKey, networkLink='', networkAccess='') {
let ingress = {
apiVersion: "skupper.io/v2alpha1",
kind: "InterNetworkIngress",
metadata: {
name: name,
},
spec: {
routingKey: routingKey,
}
};
if (!!networkLink) {
ingress.spec.networkLink = networkLink;
} else if (!!networkAccess) {
ingress.spec.networkAccess = networkAccess;
}
return ingress;
}

export function Secret(certificate, profile_name, inject, stateKey) {
let secret = {
apiVersion: 'v1',
Expand Down