diff --git a/src/blocks/Provisioner.ts b/src/blocks/Provisioner.ts index 1a5b4af..9e3a926 100644 --- a/src/blocks/Provisioner.ts +++ b/src/blocks/Provisioner.ts @@ -1,27 +1,47 @@ -import { Argument, Attribute } from '../arguments'; +import { Argument, Attribute, Map } from '../arguments'; import { Util } from '../utils'; import { Block } from '.'; +interface ProvisionerArgs { + when?: Argument<'create' | 'destroy'>; + on_failure?: Argument<'continue' | 'fail'>; +} + /** * @category Block */ -export type ProvisionerType = 'local-exec' | 'remote-exec'; +export interface FileProvisionerArgs extends ProvisionerArgs { + source?: string; + content?: string; + destination?: string; +} /** * @category Block */ -export interface ProvisionerArgs { +export interface LocalExecProvisionerArgs extends ProvisionerArgs { command: string; - when?: Argument<'destroy'>; - on_failure?: Argument<'continue' | 'fail'>; + working_dir?: string; + interpreter?: string[]; + environment?: Map; + quiet?: boolean; +} + +/** + * @category Block + */ +export interface RemoteExecProvisionerArgs extends ProvisionerArgs { + inline?: string[]; + script?: string; + scripts?: string[]; } /** * @category Block */ -export class Provisioner extends Block { +export class Provisioner extends Block { - readonly type: ProvisionerType; + readonly type: 'file' | 'local-exec' | 'remote-exec'; /** * Construct provisioner. @@ -31,7 +51,10 @@ export class Provisioner extends Block { * @param type type * @param args arguments */ - constructor(type: ProvisionerType, args: ProvisionerArgs) { + constructor(type: 'file', args: FileProvisionerArgs); + constructor(type: 'local-exec', args: LocalExecProvisionerArgs); + constructor(type: 'remote-exec', args: RemoteExecProvisionerArgs); + constructor(type: 'file' | 'local-exec' | 'remote-exec', args: FileProvisionerArgs | LocalExecProvisionerArgs | RemoteExecProvisionerArgs) { super('provisioner', [type], args); this.type = type; diff --git a/src/index.ts b/src/index.ts index d776dad..9aae8a0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,7 +12,7 @@ export { Module, ModuleArgs, Output, OutputArgs, Provider, - Provisioner, ProvisionerArgs, ProvisionerType, + Provisioner, FileProvisionerArgs, LocalExecProvisionerArgs, RemoteExecProvisionerArgs, Resource, ResourceToDataOptions, Variable, VariableArgs } from './blocks'; diff --git a/test/blocks/Block.test.ts b/test/blocks/Block.test.ts index 2b1ae23..4352df9 100644 --- a/test/blocks/Block.test.ts +++ b/test/blocks/Block.test.ts @@ -22,7 +22,7 @@ test('Block arguments', () => { command: 'cmd1' }), new Provisioner('remote-exec', { - command: 'cmd2', + script: 'cmd2', when: new Argument('destroy'), on_failure: new Argument('fail') })