Skip to content

Commit

Permalink
fix: #108 create secrets file each deployment
Browse files Browse the repository at this point in the history
  • Loading branch information
bohdan-shulha committed Aug 9, 2024
1 parent 2e1790f commit 9e1cdf1
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 49 deletions.
22 changes: 12 additions & 10 deletions app/Models/DeploymentData/Process.php
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ public function asNodeTasks(Deployment $deployment): array
'payload' => [
'AuthConfigName' => $authConfigName,
'ReleaseCommand' => $this->getReleaseCommandPayload($deployment, $labels),
'SecretVars' => (object) $this->getSecretVars($previous, $labels),
'SecretVars' => (object) $this->getSecretVars($deployment, $previous, $labels),
'SwarmServiceSpec' => [
'Name' => $this->dockerName,
'Labels' => $labels,
Expand Down Expand Up @@ -442,27 +442,29 @@ public function asNodeTasks(Deployment $deployment): array
return $tasks;
}

protected function getSecretVars(?Process $previous, $labels): array|object
protected function getSecretVars(Deployment $deployment, ?Process $previous, $labels): array|object
{
if (empty($this->data->secretVars->vars)) {
if (empty($this->secretVars->vars)) {
$this->secretVars->dockerName = null;

return (object) [];
}

$this->data->secretVars->dockerName = $this->makeResourceName('secret_vars');
$this->secretVars->dockerName = $this->makeResourceName('dpl_'.$deployment->id.'_secret_vars');

$data = [
'ConfigName' => $this->data->secretVars->dockerName,
'ConfigName' => $this->secretVars->dockerName,
'ConfigLabels' => dockerize_labels([
...$labels,
'kind' => 'secret-env-vars',
]),
'Values' => (object) collect($this->data->secretVars->vars)
'Values' => (object) collect($this->secretVars->vars)
->reject(fn (EnvVar $var) => $var->value === null)
->reduce(fn ($carry, EnvVar $var) => [...$carry, $var->name => $var->value], []),
];

if (! empty($previous?->secretVars->dockerName)) {
$data['Preserve'] = collect($this->data->secretVars->vars)
$data['Preserve'] = collect($this->secretVars->vars)
->filter(fn (EnvVar $var) => $var->value === null)
->map(fn (EnvVar $var) => $var->name)
->toArray();
Expand All @@ -475,18 +477,18 @@ protected function getSecretVars(?Process $previous, $labels): array|object

private function getWorkerSecretVars(Worker $worker, array $labels): array|object
{
if (empty($this->data->secretVars->vars)) {
if (empty($this->secretVars->vars)) {
return (object) [];
}

return [
'ConfigName' => $this->data->secretVars->dockerName.'_wkr_'.$worker->name,
'ConfigName' => $this->secretVars->dockerName.'_wkr_'.$worker->name,
'ConfigLabels' => dockerize_labels([
...$labels,
'kind' => 'secret-env-vars',
]),
'Values' => [],
'Preserve' => collect($this->data->secretVars->vars)->map(fn (EnvVar $var) => $var->name)->toArray(),
'Preserve' => collect($this->secretVars->vars)->map(fn (EnvVar $var) => $var->name)->toArray(),
'PreserveFromConfig' => $this->secretVars->dockerName,
];
}
Expand Down
110 changes: 73 additions & 37 deletions resources/js/Pages/Nodes/Partials/AgentStatus.vue
Original file line number Diff line number Diff line change
@@ -1,54 +1,90 @@

<script setup>
import PrimaryButton from "@/Components/PrimaryButton.vue";
import AgentInstall from "@/Pages/Nodes/Partials/AgentInstall.vue";
import FormSection from "@/Components/FormSection.vue";
import ValueCard from "@/Components/ValueCard.vue";
import {useForm} from "@inertiajs/vue3";
import { useForm } from "@inertiajs/vue3";
const props = defineProps([
'node',
'lastAgentVersion',
])
const props = defineProps(["node", "lastAgentVersion"]);
const upgradeAgentForm = useForm({
targetVersion: props.lastAgentVersion,
})
targetVersion: props.lastAgentVersion,
});
function upgradeAgent() {
upgradeAgentForm.post(route('nodes.upgrade-agent', {
node: props.node.id,
}), {
preserveScroll: true,
});
upgradeAgentForm.post(
route("nodes.upgrade-agent", {
node: props.node.id,
}),
{
preserveScroll: true,
},
);
}
</script>
<template>
<FormSection>
<template #title>
Agent Status
</template>
<FormSection>
<template #title> Agent Status </template>

<template #description>
Agent on your server is up and running. You can see the agent's version, available IP interfaces and upgrade the agent, if a new version is available.
</template>
<template #description>
Once the Agent on your server is up and running, you can see the
agent's version, available IP interfaces and upgrade the agent, if a
new version is available.
</template>

<template #form>
<div v-if="$props.node.online && $props.node.data" class="col-span-full">
<ValueCard :value="$props.node.data.version" label="Agent Version"/>
<template v-for="network in $props.node.data.host.networks" :key="network.if_name">
<ValueCard v-for="ip in network.ips" :key="ip" :value="ip.ip" :label="network.if_name" />
<template #form>
<div
v-if="$props.node.online && $props.node.data"
class="col-span-full"
>
<ValueCard
:value="$props.node.data.version"
label="Agent Version"
/>
<template
v-for="network in $props.node.data.host.networks"
:key="network.if_name"
>
<ValueCard
v-for="ip in network.ips"
:key="ip"
:value="ip.ip"
:label="network.if_name"
/>
</template>
<ValueCard
:value="$props.node.data.docker.platform.name"
label="Docker Platform"
/>
</div>
<div v-else class="col-span-10">
<AgentInstall :node="$props.node" />
</div>
</template>
<ValueCard :value="$props.node.data.docker.platform.name" label="Docker Platform"/>
</div>
<div v-else class="col-span-10">
<AgentInstall :node="$props.node" />
</div>
</template>

<template v-if="$props.node.online && $props.lastAgentVersion !== $props.node.data.version" #submit>
<a class="text-sm text-blue-700 hover:underline px-8" :href="'https://github.com/ptah-sh/ptah-agent/compare/' + $props.node.data.version + '...' + $props.lastAgentVersion" target="_blank">Compare {{$props.node.data.version}}...{{$props.lastAgentVersion}}</a>
<PrimaryButton type="button" @click="upgradeAgent">Upgrade to {{$props.lastAgentVersion}}</PrimaryButton>
</template>
</FormSection>
</template>
<template
v-if="
$props.node.online &&
$props.lastAgentVersion !== $props.node.data.version
"
#submit
>
<a
class="text-sm text-blue-700 hover:underline px-8"
:href="
'https://github.com/ptah-sh/ptah-agent/compare/' +
$props.node.data.version +
'...' +
$props.lastAgentVersion
"
target="_blank"
>Compare {{ $props.node.data.version }}...{{
$props.lastAgentVersion
}}</a
>
<PrimaryButton type="button" @click="upgradeAgent"
>Upgrade to {{ $props.lastAgentVersion }}</PrimaryButton
>
</template>
</FormSection>
</template>
4 changes: 2 additions & 2 deletions resources/js/Pages/Services/Index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ const props = defineProps({
service: service.id,
})
"
class="p-4 flex justify-between"
class="p-4 grid grid-cols-2"
>
<div class="flex flex-col">
<span class="font-semibold text-lg">{{
Expand All @@ -71,7 +71,7 @@ const props = defineProps({
}}</span>
</div>

<div class="flex flex-col w-44">
<div class="flex flex-col">
<span class="text-sm text-gray-500">{{
service.latest_deployment.data
.internalDomain
Expand Down

0 comments on commit 9e1cdf1

Please sign in to comment.