mirror of
https://github.com/jdalrymple/gitbeaker.git
synced 2026-01-25 16:04:01 +00:00
Add Terraform State API
This commit is contained in:
parent
30dbcfbc21
commit
4cc0fb9bca
89
packages/core/src/resources/ProjectTerraformState.ts
Normal file
89
packages/core/src/resources/ProjectTerraformState.ts
Normal file
@ -0,0 +1,89 @@
|
||||
import { BaseResource } from '@gitbeaker/requester-utils';
|
||||
import { GitlabAPIResponse, ShowExpanded, Sudo } from '@gitbeaker/core';
|
||||
import { endpoint, RequestHelper } from '../infrastructure';
|
||||
|
||||
export interface TerraformStateSchema extends Record<string, unknown> {
|
||||
version: number;
|
||||
terraform_version: string;
|
||||
serial: number;
|
||||
lineage: string;
|
||||
outputs?: Record<string, unknown>;
|
||||
resources?: Record<string, unknown>[];
|
||||
check_results: Record<string, unknown>[];
|
||||
}
|
||||
|
||||
export class ProjectTerraformState<C extends boolean = false> extends BaseResource<C> {
|
||||
show<E extends boolean = false>(
|
||||
projectId: string | number,
|
||||
name: string,
|
||||
options?: Sudo & ShowExpanded<E>,
|
||||
): Promise<GitlabAPIResponse<TerraformStateSchema, C, E, void>> {
|
||||
return RequestHelper.get<TerraformStateSchema>()(
|
||||
this,
|
||||
endpoint`projects/${projectId}/terraform/state/${name}`,
|
||||
options,
|
||||
);
|
||||
}
|
||||
|
||||
showVersion<E extends boolean = false>(
|
||||
projectId: string | number,
|
||||
name: string,
|
||||
serial: number,
|
||||
options?: Sudo & ShowExpanded<E>,
|
||||
): Promise<GitlabAPIResponse<TerraformStateSchema, C, E, void>> {
|
||||
return RequestHelper.get<TerraformStateSchema>()(
|
||||
this,
|
||||
endpoint`projects/${projectId}/terraform/state/${name}/versions/${serial}`,
|
||||
options,
|
||||
);
|
||||
}
|
||||
|
||||
removeVersion<E extends boolean = false>(
|
||||
projectId: string | number,
|
||||
name: string,
|
||||
serial: number,
|
||||
options?: Sudo & ShowExpanded<E>,
|
||||
): Promise<GitlabAPIResponse<void, C, E, void>> {
|
||||
return RequestHelper.del()(
|
||||
this,
|
||||
endpoint`projects/${projectId}/terraform/state/${name}/versions/${serial}`,
|
||||
options,
|
||||
);
|
||||
}
|
||||
|
||||
remove<E extends boolean = false>(
|
||||
projectId: string | number,
|
||||
name: string,
|
||||
options?: Sudo & ShowExpanded<E>,
|
||||
): Promise<GitlabAPIResponse<void, C, E, void>> {
|
||||
return RequestHelper.del()(
|
||||
this,
|
||||
endpoint`projects/${projectId}/terraform/state/${name}`,
|
||||
options,
|
||||
);
|
||||
}
|
||||
|
||||
removeTerraformStateLock<E extends boolean = false>(
|
||||
projectId: string | number,
|
||||
name: string,
|
||||
options?: Sudo & ShowExpanded<E>,
|
||||
): Promise<GitlabAPIResponse<void, C, E, void>> {
|
||||
return RequestHelper.del()(
|
||||
this,
|
||||
endpoint`projects/${projectId}/terraform/state/${name}/lock`,
|
||||
options,
|
||||
);
|
||||
}
|
||||
|
||||
createVersion<E extends boolean = false>(
|
||||
projectId: string | number,
|
||||
name: string,
|
||||
options?: Sudo & ShowExpanded<E>,
|
||||
): Promise<GitlabAPIResponse<TerraformStateSchema, C, E, void>> {
|
||||
return RequestHelper.post<TerraformStateSchema>()(
|
||||
this,
|
||||
endpoint`projects/${projectId}/terraform/state/${name}`,
|
||||
options,
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -131,6 +131,7 @@ export * from './ProjectSnippetNotes';
|
||||
export * from './ProjectSnippets';
|
||||
export * from './ProjectStatistics';
|
||||
export * from './ProjectTemplates';
|
||||
export * from './ProjectTerraformState'
|
||||
export * from './ProjectVariables';
|
||||
export * from './ProjectVulnerabilities';
|
||||
export * from './ProjectWikis';
|
||||
|
||||
88
packages/core/test/unit/resources/ProjectTerraform.ts
Normal file
88
packages/core/test/unit/resources/ProjectTerraform.ts
Normal file
@ -0,0 +1,88 @@
|
||||
import { ProjectTerraformState } from '../../../src';
|
||||
import { RequestHelper } from '../../../src/infrastructure';
|
||||
|
||||
jest.mock(
|
||||
'../../../src/infrastructure/RequestHelper',
|
||||
() => require('../../__mocks__/RequestHelper').default,
|
||||
);
|
||||
|
||||
let service: ProjectTerraformState;
|
||||
|
||||
beforeEach(() => {
|
||||
service = new ProjectTerraformState({
|
||||
requesterFn: jest.fn(),
|
||||
token: 'abcdefg',
|
||||
});
|
||||
});
|
||||
|
||||
describe('ProjectTerraformState.show', () => {
|
||||
it('should request GET /projects/:id/terraform/state/:name', async () => {
|
||||
await service.show(1, 'state-name');
|
||||
|
||||
expect(RequestHelper.get()).toHaveBeenCalledWith(
|
||||
service,
|
||||
'projects/1/terraform/state/state-name',
|
||||
undefined,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('ProjectTerraformState.showVersion', () => {
|
||||
it('should request GET /projects/:id/terraform/state/:name/versions/:serial', async () => {
|
||||
await service.showVersion(1, 'state-name', 42);
|
||||
|
||||
expect(RequestHelper.get()).toHaveBeenCalledWith(
|
||||
service,
|
||||
'projects/1/terraform/state/state-name/versions/42',
|
||||
undefined,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('ProjectTerraformState.removeVersion', () => {
|
||||
it('should request DELETE /projects/:id/terraform/state/:name/versions/:serial', async () => {
|
||||
await service.removeVersion(1, 'state-name', 42);
|
||||
|
||||
expect(RequestHelper.del()).toHaveBeenCalledWith(
|
||||
service,
|
||||
'projects/1/terraform/state/state-name/versions/42',
|
||||
undefined,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('ProjectTerraformState.remove', () => {
|
||||
it('should request DELETE /projects/:id/terraform/state/:name', async () => {
|
||||
await service.remove(1, 'state-name');
|
||||
|
||||
expect(RequestHelper.del()).toHaveBeenCalledWith(
|
||||
service,
|
||||
'projects/1/terraform/state/state-name',
|
||||
undefined,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('ProjectTerraformState.removeTerraformStateLock', () => {
|
||||
it('should request DELETE /projects/:id/terraform/state/:name/lock', async () => {
|
||||
await service.removeTerraformStateLock(1, 'state-name');
|
||||
|
||||
expect(RequestHelper.del()).toHaveBeenCalledWith(
|
||||
service,
|
||||
'projects/1/terraform/state/state-name/lock',
|
||||
undefined,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('ProjectTerraformState.createVersion', () => {
|
||||
it('should request POST /projects/:id/terraform/state/:name', async () => {
|
||||
await service.createVersion(1, 'state-name');
|
||||
|
||||
expect(RequestHelper.post()).toHaveBeenCalledWith(
|
||||
service,
|
||||
'projects/1/terraform/state/state-name',
|
||||
undefined,
|
||||
);
|
||||
});
|
||||
});
|
||||
@ -149,6 +149,7 @@ export const {
|
||||
ProjectSnippets,
|
||||
ProjectStatistics,
|
||||
ProjectTemplates,
|
||||
ProjectTerraformState,
|
||||
ProjectVariables,
|
||||
ProjectVulnerabilities,
|
||||
ProjectWikis,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user