Skip to content

Commit

Permalink
feat: add unraid module and fix docgen (#6)
Browse files Browse the repository at this point in the history
  • Loading branch information
dunklesToast authored Nov 30, 2021
1 parent 58970f0 commit b251357
Show file tree
Hide file tree
Showing 9 changed files with 60 additions and 5 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
node_modules
.env
dist
docs
4 changes: 4 additions & 0 deletions src/instance/unraid.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { SystemModule } from '../modules/system/system-module';
import { UnraidModule } from '../modules/unraid/unraid-module';
import { VMModule } from '../modules/vms/vm-module';
import { Type } from '../util';
import { Executor, IExecute, IExecuteResult, IExecuteSimple } from './executor';
Expand All @@ -15,11 +16,14 @@ export class Unraid<ExecutorConfig, Ex extends Executor<ExecutorConfig>> {

readonly system: SystemModule<ExecutorConfig, Ex>;

readonly unraid: UnraidModule<ExecutorConfig, Ex>;

constructor(config: UnraidConfig<ExecutorConfig, Ex>) {
// eslint-disable-next-line new-cap
this.executor = new config.executor(config.executorConfig);
this.vm = new VMModule<ExecutorConfig, Ex>(this);
this.system = new SystemModule<ExecutorConfig, Ex>(this);
this.unraid = new UnraidModule<ExecutorConfig, Ex>(this);
}

async execute(command: IExecuteSimple): Promise<IExecuteResult>;
Expand Down
2 changes: 1 addition & 1 deletion src/modules/system/extensions/lsblk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export class SystemModuleLsblkExtension<
> extends SystemModuleExtensionBase<ExecutorConfig, Ex> {
/**
* List all block devices
* @param all - toggles --all flag in lsblk
* @param all - toggles `--all` flag in `lsblk`
* @example Get basic information
* ```ts
* await lsblk();
Expand Down
19 changes: 19 additions & 0 deletions src/modules/unraid/extensions/casemodel.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { Executor } from '../../../instance/executor';
import { UnraidModuleExtensionBase } from '../unraid-module-extension-base';

export class UnraidModuleCaseModelExtension<
ExecutorConfig,
Ex extends Executor<ExecutorConfig>
> extends UnraidModuleExtensionBase<ExecutorConfig, Ex> {
async getCaseModel(): Promise<string> {
const { code, stdout } = await this.instance.execute(`cat /boot/config/plugins/dynamix/case-model.cfg`);
if (code !== 0) throw new Error('Got non-zero exit code while getting case-model');

return stdout.join('');
}

async setCaseModel(caseModel: string): Promise<void> {
const { code } = await this.instance.execute(`echo ${caseModel} > /boot/config/plugins/dynamix/case-model.cfg`);
if (code !== 0) throw new Error('Got non-zero exit code while writing case-model');
}
}
1 change: 1 addition & 0 deletions src/modules/unraid/extensions/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './casemodel';
1 change: 1 addition & 0 deletions src/modules/unraid/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * as UnraidModule from './unraid-module';
10 changes: 10 additions & 0 deletions src/modules/unraid/unraid-module-extension-base.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Executor } from '../../instance/executor';
import { Unraid } from '../../instance/unraid';

export class UnraidModuleExtensionBase<ExecutorConfig, Ex extends Executor<ExecutorConfig>> {
readonly instance: Unraid<ExecutorConfig, Ex>;

constructor(instance: Unraid<ExecutorConfig, Ex>) {
this.instance = instance;
}
}
19 changes: 19 additions & 0 deletions src/modules/unraid/unraid-module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { mix } from 'ts-mixer';
import { Executor } from '../../instance/executor';
import { Unraid } from '../../instance/unraid';
import { UnraidModuleCaseModelExtension } from './extensions';

// required for mixins
export interface UnraidModule<ExecutorConfig, Ex extends Executor<ExecutorConfig>>
extends UnraidModuleCaseModelExtension<ExecutorConfig, Ex> {
instance: Unraid<ExecutorConfig, Ex>;
}

@mix(UnraidModuleCaseModelExtension)
export class UnraidModule<ExecutorConfig, Ex extends Executor<ExecutorConfig>> {
instance: Unraid<ExecutorConfig, Ex>;

constructor(instance: Unraid<ExecutorConfig, Ex>) {
this.instance = instance;
}
}
8 changes: 4 additions & 4 deletions typedoc.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"name": "Unraid API Client",
"entryPoints": ["src/index.ts"],
"entryPoints": ["src/modules/"],
"entryPointStrategy": "Expand",
"out": "docs",
"theme": "minimal",
"includeVersion": true,
"toc": ["System", "Virtual Machines"]
"theme": "default",
"includeVersion": true
}

0 comments on commit b251357

Please sign in to comment.