feat: add Play Kubernetes YAML to pod navigation (#739)

### What does this PR do?

* Refactors the Kubernetes-specific actions, to a new folder named
  `kube`
* Adds a button to Play Kubernetes YAML on the pod navigation screen

### Screenshot/screencast of this PR

<!-- Please include a screenshot or a screencast explaining what is doing this PR -->

### What issues does this PR fix or reference?

<!-- Please include any related issue from Podman Desktop repository (or from another issue tracker).
-->

Fixes containers#540

### How to test this PR?

Run `yarn watch`

<!-- Please explain steps to reproduce -->

Signed-off-by: Charlie Drage <charlie@charliedrage.com>

Signed-off-by: Charlie Drage <charlie@charliedrage.com>
This commit is contained in:
Charlie Drage 2022-11-02 08:32:09 -04:00 committed by GitHub
parent 86961c9f90
commit 6820e5bb91
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 41 additions and 20 deletions

View file

@ -29,7 +29,7 @@ import PreferencesNavigation from './PreferencesNavigation.svelte';
import AppNavigation from './AppNavigation.svelte';
import VolumesList from './lib/volume/VolumesList.svelte';
import VolumeDetails from './lib/volume/VolumeDetails.svelte';
import ContainerPlayKubefile from './lib/container/ContainerPlayKubefile.svelte';
import KubePlayYAML from './lib/kube/KubePlayYAML.svelte';
import PodDetails from './lib/pod/PodDetails.svelte';
import PodCreateFromContainers from './lib/pod/PodCreateFromContainers.svelte';
import DeployPodToKube from './lib/pod/DeployPodToKube.svelte';
@ -97,8 +97,9 @@ window.events?.receive('display-help', () => {
<Route path="/containers/:id/*" let:meta>
<ContainerDetails containerID="{meta.params.id}" />
</Route>
<Route path="/containers/play">
<ContainerPlayKubefile />
<Route path="/kube/play">
<KubePlayYAML />
</Route>
<Route path="/images">

View file

@ -20,8 +20,8 @@ import NavPage from './ui/NavPage.svelte';
import { faChevronDown, faChevronRight } from '@fortawesome/free-solid-svg-icons';
import Fa from 'svelte-fa/src/fa.svelte';
import ContainerGroupIcon from './container/ContainerGroupIcon.svelte';
import KubePlayIcon from './container/KubePlayIcon.svelte';
import { podCreationHolder } from '../stores/creation-from-containers-store';
import KubePlayButton from './kube/KubePlayButton.svelte';
const containerUtils = new ContainerUtils();
let openChoiceModal = false;
@ -280,16 +280,7 @@ function toggleAllContainerGroups(value: boolean) {
Create container
</button>
{#if providerPodmanConnections.length > 0}
<button
on:click="{() => runContainerYaml()}"
class="pf-c-button pf-m-primary"
type="button"
title="Play pod/containers from kubernetes YAML file ">
<div class="flex flex-row align-text-top justify-start items-center">
<KubePlayIcon />
Play Kubernetes YAML
</div>
</button>
<KubePlayButton />
{/if}
</div>
<div slot="bottom-additional-actions" class="flex flex-row justify-start items-center w-full">

View file

@ -0,0 +1,19 @@
<script lang="ts">
import { router } from 'tinro';
import KubePlayIcon from './KubePlayIcon.svelte';
function runContainerYaml(): void {
router.goto('/kube/play');
}
</script>
<button
on:click="{() => runContainerYaml()}"
class="pf-c-button pf-m-primary"
type="button"
title="Play pod/containers from kubernetes YAML file ">
<div class="flex flex-row align-text-top justify-start items-center">
<KubePlayIcon />
Play Kubernetes YAML
</div>
</button>

View file

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -8,7 +8,7 @@ import { providerInfos } from '../../stores/providers';
import MonacoEditor from '../editor/MonacoEditor.svelte';
import NoContainerEngineEmptyScreen from '../image/NoContainerEngineEmptyScreen.svelte';
import NavPage from '../ui/NavPage.svelte';
import KubePlayIcon from './KubePlayIcon.svelte';
import KubePlayIcon from '../kube/KubePlayIcon.svelte';
let runStarted = false;
let runFinished = false;
@ -55,9 +55,6 @@ async function playKubeFile(): Promise<void> {
}
runStarted = false;
}
function goToContainerList(): void {
window.location.href = '#/containers';
}
onMount(() => {
providerUnsubscribe = providerInfos.subscribe(value => {
@ -162,7 +159,8 @@ async function getKubernetesfileLocation() {
<div class="text-red-500 text-sm">{runError}</div>
{/if}
{#if runFinished}
<button on:click="{() => goToContainerList()}" class="w-full pf-c-button pf-m-primary">Done</button>
<!-- On click, go BACK to the previous page (if clicked on Pods page, go back to pods, same for Containers)-->
<button on:click="{() => history.back()}" class="w-full pf-c-button pf-m-primary">Done</button>
{/if}
</div>
{#if playKubeResultRaw}

View file

@ -13,6 +13,7 @@ import NoContainerEngineEmptyScreen from '../image/NoContainerEngineEmptyScreen.
import PodEmptyScreen from './PodEmptyScreen.svelte';
import PodIcon from '../container/PodIcon.svelte';
import PodActions from './PodActions.svelte';
import KubePlayButton from '../kube/KubePlayButton.svelte';
let searchTerm = '';
$: searchPattern.set(searchTerm);
@ -25,6 +26,13 @@ $: providerConnections = $providerInfos
.flat()
.filter(providerContainerConnection => providerContainerConnection.status === 'started');
$: providerPodmanConnections = $providerInfos
.map(provider => provider.containerConnections)
.flat()
// keep only podman providers as it is not supported by docker
.filter(providerContainerConnection => providerContainerConnection.type === 'podman')
.filter(providerContainerConnection => providerContainerConnection.status === 'started');
// number of selected items in the list
$: selectedItemsNumber = pods.filter(pod => pod.selected).length;
@ -108,7 +116,11 @@ function openContainersFromPod(pod: PodInfoUI) {
bind:searchTerm
title="pods"
subtitle="Hover over an pod to view action buttons; click to open up full details.">
<div slot="additional-actions" class="space-x-2 flex flex-nowrap"></div>
<div slot="additional-actions" class="space-x-2 flex flex-nowrap">
{#if providerPodmanConnections.length > 0}
<KubePlayButton />
{/if}
</div>
<div slot="bottom-additional-actions" class="flex flex-row justify-start items-center w-full">
{#if selectedItemsNumber > 0}