Support naming docker images on eggs; closes #4052
Bumps PTDL_v1 export images to PTDL_v2, updates the Minecraft specific eggs to use named images.
This commit is contained in:
parent
53207abcb3
commit
c8faf64059
17 changed files with 212 additions and 261 deletions
|
@ -6,7 +6,7 @@ import { ServerEggVariable } from '@/api/server/types';
|
|||
interface Response {
|
||||
invocation: string;
|
||||
variables: ServerEggVariable[];
|
||||
dockerImages: string[];
|
||||
dockerImages: Record<string, string>;
|
||||
}
|
||||
|
||||
export default (uuid: string, initialData?: Response) => useSWR([ uuid, '/startup' ], async (): Promise<Response> => {
|
||||
|
@ -14,5 +14,9 @@ export default (uuid: string, initialData?: Response) => useSWR([ uuid, '/startu
|
|||
|
||||
const variables = ((data as FractalResponseList).data || []).map(rawDataToServerEggVariable);
|
||||
|
||||
return { invocation: data.meta.startup_command, variables, dockerImages: data.meta.docker_images || [] };
|
||||
return {
|
||||
variables,
|
||||
invocation: data.meta.startup_command,
|
||||
dockerImages: data.meta.docker_images || {},
|
||||
};
|
||||
}, { initialData, errorRetryCount: 3 });
|
||||
|
|
|
@ -29,11 +29,11 @@ const StartupContainer = () => {
|
|||
|
||||
const { data, error, isValidating, mutate } = getServerStartup(uuid, {
|
||||
...variables,
|
||||
dockerImages: [ variables.dockerImage ],
|
||||
dockerImages: { [variables.dockerImage]: variables.dockerImage },
|
||||
});
|
||||
|
||||
const setServerFromState = ServerContext.useStoreActions(actions => actions.server.setServerFromState);
|
||||
const isCustomImage = data && !data.dockerImages.map(v => v.toLowerCase()).includes(variables.dockerImage.toLowerCase());
|
||||
const isCustomImage = data && !Object.values(data.dockerImages).map(v => v.toLowerCase()).includes(variables.dockerImage.toLowerCase());
|
||||
|
||||
useEffect(() => {
|
||||
// Since we're passing in initial data this will not trigger on mount automatically. We
|
||||
|
@ -87,16 +87,18 @@ const StartupContainer = () => {
|
|||
</div>
|
||||
</TitledGreyBox>
|
||||
<TitledGreyBox title={'Docker Image'} css={tw`flex-1 lg:flex-none lg:w-1/3 mt-8 md:mt-0 md:ml-10`}>
|
||||
{data.dockerImages.length > 1 && !isCustomImage ?
|
||||
{Object.keys(data.dockerImages).length > 1 && !isCustomImage ?
|
||||
<>
|
||||
<InputSpinner visible={loading}>
|
||||
<Select
|
||||
disabled={data.dockerImages.length < 2}
|
||||
disabled={(Object.keys(data.dockerImages)).length < 2}
|
||||
onChange={updateSelectedDockerImage}
|
||||
defaultValue={variables.dockerImage}
|
||||
>
|
||||
{data.dockerImages.map(image => (
|
||||
<option key={image} value={image}>{image}</option>
|
||||
{Object.keys(data.dockerImages).map(key => (
|
||||
<option key={data.dockerImages[key]} value={data.dockerImages[key]}>
|
||||
{key}
|
||||
</option>
|
||||
))}
|
||||
</Select>
|
||||
</InputSpinner>
|
||||
|
|
|
@ -83,8 +83,13 @@
|
|||
</div>
|
||||
<div class="form-group">
|
||||
<label for="pDockerImage" class="control-label">Docker Images <span class="field-required"></span></label>
|
||||
<textarea id="pDockerImages" name="docker_images" class="form-control" rows="4">{{ implode("\n", $egg->docker_images) }}</textarea>
|
||||
<p class="text-muted small">The docker images available to servers using this egg. Enter one per line. Users will be able to select from this list of images if more than one value is provided.</p>
|
||||
<textarea id="pDockerImages" name="docker_images" class="form-control" rows="4">{{ implode(PHP_EOL, $images) }}</textarea>
|
||||
<p class="text-muted small">
|
||||
The docker images available to servers using this egg. Enter one per line. Users
|
||||
will be able to select from this list of images if more than one value is provided.
|
||||
Optionally, a display name may be provided by prefixing the image with the name
|
||||
followed by a pipe character, and then the image URL. Example: <code>Display Name|ghcr.io/my/egg</code>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue