Skip to content

Commit

Permalink
feat(unraid): add identconfig module (#11)
Browse files Browse the repository at this point in the history
  • Loading branch information
dunklesToast authored Dec 5, 2021
1 parent 9ec0dd8 commit 6e04cd4
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 2 deletions.
70 changes: 70 additions & 0 deletions src/modules/unraid/extensions/identconfig.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import { Executor } from '../../../instance/executor';
import { UnraidModuleExtensionBase } from '../unraid-module-extension-base';

export type IdentConfig = {
name: string;
timezone: string;
comment: string;
security: string;
workgroup: string;
domain: string;
domainShort: string;
hidedotfiles: string;
localmaster: string;
enablefruit: string;
useNetbios: string;
useWsd: string;
wsdOpt: string;
useNtp: string;
ntpServer1: string;
ntpServer2: string;
ntpServer3: string;
ntpServer4: string;
domainLogin: string;
domainPasswd: string;
sysModel: string;
sysArraySlots: string;
useSsl: string;
port: string;
portssl: string;
localTld: string;
bindMgt: string;
useTelnet: string;
porttelnet: string;
useSsh: string;
portssh: string;
useUpnp: string;
startPage: string;
[key: string]: string;
};

function snakeToCamel(input: string): string {
const keys = input.split('_');
const partsWithUpperCase = keys.map((key, index) => {
if (index === 0) return key;
return key.charAt(0).toUpperCase() + key.slice(1);
});
return partsWithUpperCase.join('');
}

export class UnraidModuleIdentConfigExtension<
ExecutorConfig,
Ex extends Executor<ExecutorConfig>
> extends UnraidModuleExtensionBase<ExecutorConfig, Ex> {
/**
* Returns /boot/config/ident.cfg as parsed JSON
*/
async getIdentConfig(): Promise<IdentConfig> {
const { code, stdout } = await this.instance.execute(`cat /boot/config/ident.cfg`);
if (code !== 0) throw new Error('Got non-zero exit code while catting ident.cfg');
const result = {};
stdout.forEach((line) => {
if (line.startsWith('#')) return;
const [key, value] = line.split('=');
const cameledKey = snakeToCamel(key.toLowerCase());
result[cameledKey] = value.replace('\r', '').replace(/"/g, '');
});

return result as IdentConfig;
}
}
1 change: 1 addition & 0 deletions src/modules/unraid/extensions/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export * from './casemodel';
export * from './identconfig';
export * from './notifications';
9 changes: 7 additions & 2 deletions src/modules/unraid/unraid-module.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
import { mix } from 'ts-mixer';
import { Executor } from '../../instance/executor';
import { Unraid } from '../../instance/unraid';
import { UnraidModuleCaseModelExtension, UnraidModuleNotificationExtension } from './extensions';
import {
UnraidModuleCaseModelExtension,
UnraidModuleIdentConfigExtension,
UnraidModuleNotificationExtension,
} from './extensions';

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

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

Expand Down

0 comments on commit 6e04cd4

Please sign in to comment.