@weiyentan/opencode-plugin-awx 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +262 -0
- package/dist/auth.d.ts +112 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +180 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +148 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +334 -0
- package/dist/client.js.map +1 -0
- package/dist/contracts/job-detail.d.ts +141 -0
- package/dist/contracts/job-detail.d.ts.map +1 -0
- package/dist/contracts/job-detail.js +98 -0
- package/dist/contracts/job-detail.js.map +1 -0
- package/dist/contracts/sync-project.d.ts +31 -0
- package/dist/contracts/sync-project.d.ts.map +1 -0
- package/dist/contracts/sync-project.js +30 -0
- package/dist/contracts/sync-project.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +754 -0
- package/dist/index.js.map +1 -0
- package/dist/job-status.d.ts +116 -0
- package/dist/job-status.d.ts.map +1 -0
- package/dist/job-status.js +168 -0
- package/dist/job-status.js.map +1 -0
- package/dist/launch.d.ts +76 -0
- package/dist/launch.d.ts.map +1 -0
- package/dist/launch.js +133 -0
- package/dist/launch.js.map +1 -0
- package/dist/list-projects.d.ts +63 -0
- package/dist/list-projects.d.ts.map +1 -0
- package/dist/list-projects.js +84 -0
- package/dist/list-projects.js.map +1 -0
- package/dist/list-templates.d.ts +60 -0
- package/dist/list-templates.d.ts.map +1 -0
- package/dist/list-templates.js +120 -0
- package/dist/list-templates.js.map +1 -0
- package/dist/metrics.d.ts +174 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +275 -0
- package/dist/metrics.js.map +1 -0
- package/dist/transforms.d.ts +52 -0
- package/dist/transforms.d.ts.map +1 -0
- package/dist/transforms.js +108 -0
- package/dist/transforms.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* job-status.ts — AWX Job Status Mapping
|
|
3
|
+
*
|
|
4
|
+
* Transforms raw AWX API job responses into the canonical
|
|
5
|
+
* JobDetailOutput v1.0 contract format.
|
|
6
|
+
*
|
|
7
|
+
* ## Key Transformations
|
|
8
|
+
*
|
|
9
|
+
* - **related**: Extracts resolved names from AWX `summary_fields`
|
|
10
|
+
* (inventory, project, job_template, instance_group, created_by,
|
|
11
|
+
* credentials, labels) rather than returning raw URLs.
|
|
12
|
+
*
|
|
13
|
+
* - **host_status_counts**: Maps from `host_summary` (AWX key
|
|
14
|
+
* "failures" → contract key "failed").
|
|
15
|
+
*
|
|
16
|
+
* - **derived**: Computes booleans (is_successful, is_failed,
|
|
17
|
+
* has_unreachable_hosts) from job status and host counts.
|
|
18
|
+
*
|
|
19
|
+
* - **warnings / errors**: Populated from job status context.
|
|
20
|
+
*
|
|
21
|
+
* ## Usage
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* const response = await fetch(client, "GET", "/api/v2/jobs/142/");
|
|
25
|
+
* const awxJob = await response.json();
|
|
26
|
+
* const output = mapAwxJobToContract(awxJob);
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
import type { AwxClient } from "./client.js";
|
|
30
|
+
import type { JobDetailOutput } from "./contracts/job-detail.js";
|
|
31
|
+
/**
|
|
32
|
+
* Raw AWX API job response shape (the subset we care about).
|
|
33
|
+
* We use a broad type since we're accessing dynamic properties.
|
|
34
|
+
*/
|
|
35
|
+
export interface RawAwxJob {
|
|
36
|
+
id: number;
|
|
37
|
+
name: string;
|
|
38
|
+
status: string;
|
|
39
|
+
failed: boolean;
|
|
40
|
+
job_type: string;
|
|
41
|
+
playbook: string;
|
|
42
|
+
created: string;
|
|
43
|
+
started: string | null;
|
|
44
|
+
finished: string | null;
|
|
45
|
+
elapsed: number | null;
|
|
46
|
+
execution_node: string;
|
|
47
|
+
controller_node: string;
|
|
48
|
+
scm_branch: string;
|
|
49
|
+
verbosity: number;
|
|
50
|
+
forks: number | null;
|
|
51
|
+
limit: string;
|
|
52
|
+
summary_fields?: {
|
|
53
|
+
inventory?: {
|
|
54
|
+
id?: number;
|
|
55
|
+
name?: string;
|
|
56
|
+
};
|
|
57
|
+
project?: {
|
|
58
|
+
id?: number;
|
|
59
|
+
name?: string;
|
|
60
|
+
};
|
|
61
|
+
job_template?: {
|
|
62
|
+
id?: number;
|
|
63
|
+
name?: string;
|
|
64
|
+
};
|
|
65
|
+
instance_group?: {
|
|
66
|
+
id?: number;
|
|
67
|
+
name?: string;
|
|
68
|
+
};
|
|
69
|
+
created_by?: {
|
|
70
|
+
id?: number;
|
|
71
|
+
username?: string;
|
|
72
|
+
};
|
|
73
|
+
credentials?: Array<{
|
|
74
|
+
id?: number;
|
|
75
|
+
name?: string;
|
|
76
|
+
}>;
|
|
77
|
+
labels?: {
|
|
78
|
+
results?: Array<{
|
|
79
|
+
id?: number;
|
|
80
|
+
name?: string;
|
|
81
|
+
}>;
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
host_summary?: {
|
|
85
|
+
ok?: number;
|
|
86
|
+
failures?: number;
|
|
87
|
+
changed?: number;
|
|
88
|
+
unreachable?: number;
|
|
89
|
+
skipped?: number;
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Transform a raw AWX API job response into the JobDetailOutput v1.0 contract.
|
|
94
|
+
*
|
|
95
|
+
* Pure function — no side effects, no HTTP calls.
|
|
96
|
+
*
|
|
97
|
+
* @param awxJob Raw JSON-decoded AWX API response from /api/v2/jobs/<id>/
|
|
98
|
+
* @returns A JobDetailOutput matching the v1.0 contract
|
|
99
|
+
*/
|
|
100
|
+
export declare function mapAwxJobToContract(awxJob: RawAwxJob, stdout?: string): JobDetailOutput;
|
|
101
|
+
/**
|
|
102
|
+
* Fetch job status from AWX and return formatted JobDetailOutput.
|
|
103
|
+
*
|
|
104
|
+
* Makes HTTP requests via the AwxClient:
|
|
105
|
+
* 1. GET /api/v2/jobs/<jobId>/
|
|
106
|
+
* 2. Optionally GET /api/v2/jobs/<jobId>/stdout/?format=txt
|
|
107
|
+
*
|
|
108
|
+
* @param client The AWX HTTP client
|
|
109
|
+
* @param jobId Numeric job ID
|
|
110
|
+
* @param includeStdout Whether to fetch and include stdout
|
|
111
|
+
* @param abortSignal Optional abort signal
|
|
112
|
+
* @param toolName Optional tool name for metrics attribution (default: "awx-job-status")
|
|
113
|
+
* @returns Formatted JobDetailOutput
|
|
114
|
+
*/
|
|
115
|
+
export declare function fetchJobStatus(client: AwxClient, jobId: number, includeStdout?: boolean, abortSignal?: AbortSignal, toolName?: string): Promise<JobDetailOutput>;
|
|
116
|
+
//# sourceMappingURL=job-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-status.d.ts","sourceRoot":"","sources":["../src/job-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAKV,eAAe,EAChB,MAAM,2BAA2B,CAAC;AAInC;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3C,OAAO,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,YAAY,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9C,cAAc,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAChD,UAAU,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAChD,WAAW,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACpD,MAAM,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,KAAK,CAAC;gBAAE,EAAE,CAAC,EAAE,MAAM,CAAC;gBAAC,IAAI,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC;KAC9D,CAAC;IACF,YAAY,CAAC,EAAE;QACb,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAuFD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,eAAe,CAmCjB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,OAAO,EACvB,WAAW,CAAC,EAAE,WAAW,EACzB,QAAQ,SAAmB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAkC1B"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* job-status.ts — AWX Job Status Mapping
|
|
3
|
+
*
|
|
4
|
+
* Transforms raw AWX API job responses into the canonical
|
|
5
|
+
* JobDetailOutput v1.0 contract format.
|
|
6
|
+
*
|
|
7
|
+
* ## Key Transformations
|
|
8
|
+
*
|
|
9
|
+
* - **related**: Extracts resolved names from AWX `summary_fields`
|
|
10
|
+
* (inventory, project, job_template, instance_group, created_by,
|
|
11
|
+
* credentials, labels) rather than returning raw URLs.
|
|
12
|
+
*
|
|
13
|
+
* - **host_status_counts**: Maps from `host_summary` (AWX key
|
|
14
|
+
* "failures" → contract key "failed").
|
|
15
|
+
*
|
|
16
|
+
* - **derived**: Computes booleans (is_successful, is_failed,
|
|
17
|
+
* has_unreachable_hosts) from job status and host counts.
|
|
18
|
+
*
|
|
19
|
+
* - **warnings / errors**: Populated from job status context.
|
|
20
|
+
*
|
|
21
|
+
* ## Usage
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* const response = await fetch(client, "GET", "/api/v2/jobs/142/");
|
|
25
|
+
* const awxJob = await response.json();
|
|
26
|
+
* const output = mapAwxJobToContract(awxJob);
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
// ─── Mapping Functions ─────────────────────────────────────────
|
|
30
|
+
/**
|
|
31
|
+
* Resolve the related resource names from AWX summary_fields.
|
|
32
|
+
*/
|
|
33
|
+
function mapRelated(awxJob) {
|
|
34
|
+
const sf = awxJob.summary_fields ?? {};
|
|
35
|
+
return {
|
|
36
|
+
inventory_name: sf.inventory?.name ?? "",
|
|
37
|
+
project_name: sf.project?.name ?? "",
|
|
38
|
+
job_template_name: sf.job_template?.name ?? "",
|
|
39
|
+
instance_group_name: sf.instance_group?.name ?? "",
|
|
40
|
+
created_by: sf.created_by?.username ?? "",
|
|
41
|
+
credential_names: sf.credentials?.map((c) => c.name ?? "").filter(Boolean) ?? [],
|
|
42
|
+
label_names: sf.labels?.results?.map((l) => l.name ?? "").filter(Boolean) ?? [],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Map host_summary from the AWX API to host_status_counts.
|
|
47
|
+
* Note: AWX uses the key "failures", but the contract uses "failed".
|
|
48
|
+
*/
|
|
49
|
+
function mapHostStatusCounts(awxJob) {
|
|
50
|
+
const hs = awxJob.host_summary ?? {};
|
|
51
|
+
return {
|
|
52
|
+
ok: hs.ok ?? 0,
|
|
53
|
+
failed: hs.failures ?? 0,
|
|
54
|
+
skipped: hs.skipped ?? 0,
|
|
55
|
+
changed: hs.changed ?? 0,
|
|
56
|
+
unreachable: hs.unreachable ?? 0,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Compute derived booleans from job status and host counts.
|
|
61
|
+
*/
|
|
62
|
+
function mapDerived(awxJob) {
|
|
63
|
+
const failed = awxJob.failed;
|
|
64
|
+
const unreachable = awxJob.host_summary?.unreachable ?? 0;
|
|
65
|
+
return {
|
|
66
|
+
is_successful: !failed,
|
|
67
|
+
is_failed: failed,
|
|
68
|
+
has_unreachable_hosts: unreachable > 0,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Extract user-facing error messages from a job.
|
|
73
|
+
*/
|
|
74
|
+
function mapErrors(awxJob) {
|
|
75
|
+
const hostFailed = awxJob.host_summary?.failures ?? 0;
|
|
76
|
+
const unreachable = awxJob.host_summary?.unreachable ?? 0;
|
|
77
|
+
const errors = [];
|
|
78
|
+
if (awxJob.failed && hostFailed > 0) {
|
|
79
|
+
errors.push(`Job failed: ${hostFailed} host(s) reported failure(s).`);
|
|
80
|
+
}
|
|
81
|
+
if (unreachable > 0) {
|
|
82
|
+
errors.push(`${unreachable} host(s) were unreachable during job execution.`);
|
|
83
|
+
}
|
|
84
|
+
return errors;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Extract user-facing warning messages.
|
|
88
|
+
*/
|
|
89
|
+
function mapWarnings(_awxJob) {
|
|
90
|
+
// Initial implementation: no warnings inferred from job detail alone.
|
|
91
|
+
// Future enhancement: parse stdout for deprecation warnings.
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
// ─── Public API ────────────────────────────────────────────────
|
|
95
|
+
/**
|
|
96
|
+
* Transform a raw AWX API job response into the JobDetailOutput v1.0 contract.
|
|
97
|
+
*
|
|
98
|
+
* Pure function — no side effects, no HTTP calls.
|
|
99
|
+
*
|
|
100
|
+
* @param awxJob Raw JSON-decoded AWX API response from /api/v2/jobs/<id>/
|
|
101
|
+
* @returns A JobDetailOutput matching the v1.0 contract
|
|
102
|
+
*/
|
|
103
|
+
export function mapAwxJobToContract(awxJob, stdout) {
|
|
104
|
+
const job = {
|
|
105
|
+
id: awxJob.id,
|
|
106
|
+
name: awxJob.name,
|
|
107
|
+
status: awxJob.status,
|
|
108
|
+
failed: awxJob.failed,
|
|
109
|
+
job_type: awxJob.job_type,
|
|
110
|
+
playbook: awxJob.playbook,
|
|
111
|
+
created: awxJob.created,
|
|
112
|
+
started: awxJob.started,
|
|
113
|
+
finished: awxJob.finished,
|
|
114
|
+
elapsed: awxJob.elapsed,
|
|
115
|
+
execution_node: awxJob.execution_node,
|
|
116
|
+
controller_node: awxJob.controller_node,
|
|
117
|
+
scm_branch: awxJob.scm_branch,
|
|
118
|
+
verbosity: awxJob.verbosity,
|
|
119
|
+
forks: awxJob.forks,
|
|
120
|
+
limit: awxJob.limit,
|
|
121
|
+
};
|
|
122
|
+
const output = {
|
|
123
|
+
schema_version: "1.0",
|
|
124
|
+
job,
|
|
125
|
+
related: mapRelated(awxJob),
|
|
126
|
+
host_status_counts: mapHostStatusCounts(awxJob),
|
|
127
|
+
derived: mapDerived(awxJob),
|
|
128
|
+
warnings: mapWarnings(awxJob),
|
|
129
|
+
errors: mapErrors(awxJob),
|
|
130
|
+
};
|
|
131
|
+
if (stdout !== undefined) {
|
|
132
|
+
output.stdout = stdout;
|
|
133
|
+
}
|
|
134
|
+
return output;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Fetch job status from AWX and return formatted JobDetailOutput.
|
|
138
|
+
*
|
|
139
|
+
* Makes HTTP requests via the AwxClient:
|
|
140
|
+
* 1. GET /api/v2/jobs/<jobId>/
|
|
141
|
+
* 2. Optionally GET /api/v2/jobs/<jobId>/stdout/?format=txt
|
|
142
|
+
*
|
|
143
|
+
* @param client The AWX HTTP client
|
|
144
|
+
* @param jobId Numeric job ID
|
|
145
|
+
* @param includeStdout Whether to fetch and include stdout
|
|
146
|
+
* @param abortSignal Optional abort signal
|
|
147
|
+
* @param toolName Optional tool name for metrics attribution (default: "awx-job-status")
|
|
148
|
+
* @returns Formatted JobDetailOutput
|
|
149
|
+
*/
|
|
150
|
+
export async function fetchJobStatus(client, jobId, includeStdout, abortSignal, toolName = "awx-job-status") {
|
|
151
|
+
// Fetch job detail
|
|
152
|
+
const jobResponse = await client.request(toolName, `/api/v2/jobs/${jobId}/`, undefined, abortSignal);
|
|
153
|
+
if (!jobResponse.ok) {
|
|
154
|
+
const errorBody = await jobResponse.text().catch(() => "");
|
|
155
|
+
throw new Error(`AWX API error (${jobResponse.status}): ${errorBody || jobResponse.statusText}`);
|
|
156
|
+
}
|
|
157
|
+
const awxJob = (await jobResponse.json());
|
|
158
|
+
// Optionally fetch stdout
|
|
159
|
+
let stdout;
|
|
160
|
+
if (includeStdout) {
|
|
161
|
+
const stdoutResponse = await client.request(toolName, `/api/v2/jobs/${jobId}/stdout/?format=txt`, undefined, abortSignal);
|
|
162
|
+
if (stdoutResponse.ok) {
|
|
163
|
+
stdout = await stdoutResponse.text();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return mapAwxJobToContract(awxJob, stdout);
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=job-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-status.js","sourceRoot":"","sources":["../src/job-status.ts"],"names":[],"mappings":"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"}
|
package/dist/launch.d.ts
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { AwxClient } from "./client.js";
|
|
2
|
+
/** Options for the transforms pipeline */
|
|
3
|
+
export interface PipelineOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Key in extra_vars containing the SCM URL to normalize (default: "scm_url")
|
|
6
|
+
*/
|
|
7
|
+
scmUrlKey?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Key in extra_vars containing the SCM branch ref to infer (default: "scm_branch")
|
|
10
|
+
*/
|
|
11
|
+
scmBranchKey?: string;
|
|
12
|
+
/**
|
|
13
|
+
* List of required variable names. Variables whose value is null,
|
|
14
|
+
* undefined, or an empty string are considered missing.
|
|
15
|
+
* (default: ["inventory", "scm_url", "scm_branch"])
|
|
16
|
+
*/
|
|
17
|
+
requiredVars?: string[];
|
|
18
|
+
/**
|
|
19
|
+
* Abort signal to cancel the request (forwarded to the HTTP client).
|
|
20
|
+
*/
|
|
21
|
+
abortSignal?: AbortSignal;
|
|
22
|
+
}
|
|
23
|
+
/** Result of the transforms pipeline */
|
|
24
|
+
export interface PipelineResult {
|
|
25
|
+
/** Transformed extra_vars (shallow copy, only mutated fields change) */
|
|
26
|
+
extraVars: Record<string, unknown>;
|
|
27
|
+
/** Non-fatal warnings (e.g., URLs were transformed) */
|
|
28
|
+
warnings: string[];
|
|
29
|
+
/** Fatal errors (e.g., missing required vars) — launch MUST abort if non-empty */
|
|
30
|
+
errors: string[];
|
|
31
|
+
}
|
|
32
|
+
/** Result of a successful job launch */
|
|
33
|
+
export interface LaunchJobResult {
|
|
34
|
+
/** The AWX job ID */
|
|
35
|
+
jobId: number;
|
|
36
|
+
/** The AWX job status (e.g., "pending", "running") */
|
|
37
|
+
jobStatus: string;
|
|
38
|
+
/** Non-fatal warnings from the transforms pipeline */
|
|
39
|
+
warnings: string[];
|
|
40
|
+
/** Fatal errors from the transforms pipeline */
|
|
41
|
+
errors: string[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Run the extra-vars transforms pipeline.
|
|
45
|
+
*
|
|
46
|
+
* Pipeline order:
|
|
47
|
+
* 1. Normalize SCM URL (SSH → HTTPS)
|
|
48
|
+
* 2. Infer git branch (refs/heads/ → short name)
|
|
49
|
+
* 3. Validate required vars
|
|
50
|
+
*
|
|
51
|
+
* Each step produces warnings or errors.
|
|
52
|
+
*
|
|
53
|
+
* @param extraVars - Raw extra vars from the caller (may be undefined)
|
|
54
|
+
* @param options - Optional pipeline configuration
|
|
55
|
+
* @returns PipelineResult with transformed vars, warnings, and errors
|
|
56
|
+
*/
|
|
57
|
+
export declare function runTransformsPipeline(extraVars: Record<string, unknown> | undefined, options?: PipelineOptions): PipelineResult;
|
|
58
|
+
/**
|
|
59
|
+
* Execute the launch job workflow.
|
|
60
|
+
*
|
|
61
|
+
* 1. Run the transforms pipeline on extra_vars
|
|
62
|
+
* 2. If pipeline produces errors, return them without launching
|
|
63
|
+
* 3. Call POST /api/v2/job_templates/<id>/launch/ with transformed vars
|
|
64
|
+
* 4. Return job ID, status, warnings, and errors
|
|
65
|
+
*
|
|
66
|
+
* @param client - The AWX HTTP client
|
|
67
|
+
* @param templateId - The job template ID to launch
|
|
68
|
+
* @param extraVars - Raw extra vars (may be undefined)
|
|
69
|
+
* @param options - Optional pipeline configuration
|
|
70
|
+
* @returns LaunchJobResult with job ID and metadata
|
|
71
|
+
* @throws Error if the AWX API returns an unexpected error
|
|
72
|
+
*/
|
|
73
|
+
export declare function launchJob(client: AwxClient, templateId: number, extraVars: Record<string, unknown> | undefined, options?: PipelineOptions & {
|
|
74
|
+
abortSignal?: AbortSignal;
|
|
75
|
+
}): Promise<LaunchJobResult>;
|
|
76
|
+
//# sourceMappingURL=launch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../src/launch.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,0CAA0C;AAC1C,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,wCAAwC;AACxC,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,uDAAuD;IACvD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kFAAkF;IAClF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wCAAwC;AACxC,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gDAAgD;IAChD,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAcD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC9C,OAAO,CAAC,EAAE,eAAe,GACxB,cAAc,CAwChB;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC9C,OAAO,CAAC,EAAE,eAAe,GAAG;IAAE,WAAW,CAAC,EAAE,WAAW,CAAA;CAAE,GACxD,OAAO,CAAC,eAAe,CAAC,CA+D1B"}
|
package/dist/launch.js
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* launch.ts — Launch AWX jobs with a transforms pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the extra-vars transforms pipeline (normalizeScmUrl →
|
|
5
|
+
* inferGitBranch → validateRequiredVars) before calling the AWX
|
|
6
|
+
* launch API. If any transform step fails, the launch is aborted.
|
|
7
|
+
*/
|
|
8
|
+
import { normalizeScmUrl, inferGitBranch, validateRequiredVars, } from "./transforms.js";
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Constants
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
const DEFAULT_SCM_URL_KEY = "scm_url";
|
|
13
|
+
const DEFAULT_SCM_BRANCH_KEY = "scm_branch";
|
|
14
|
+
const DEFAULT_REQUIRED_VARS = ["inventory", "scm_url", "scm_branch"];
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// runTransformsPipeline
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
/**
|
|
19
|
+
* Run the extra-vars transforms pipeline.
|
|
20
|
+
*
|
|
21
|
+
* Pipeline order:
|
|
22
|
+
* 1. Normalize SCM URL (SSH → HTTPS)
|
|
23
|
+
* 2. Infer git branch (refs/heads/ → short name)
|
|
24
|
+
* 3. Validate required vars
|
|
25
|
+
*
|
|
26
|
+
* Each step produces warnings or errors.
|
|
27
|
+
*
|
|
28
|
+
* @param extraVars - Raw extra vars from the caller (may be undefined)
|
|
29
|
+
* @param options - Optional pipeline configuration
|
|
30
|
+
* @returns PipelineResult with transformed vars, warnings, and errors
|
|
31
|
+
*/
|
|
32
|
+
export function runTransformsPipeline(extraVars, options) {
|
|
33
|
+
const scmUrlKey = options?.scmUrlKey ?? DEFAULT_SCM_URL_KEY;
|
|
34
|
+
const scmBranchKey = options?.scmBranchKey ?? DEFAULT_SCM_BRANCH_KEY;
|
|
35
|
+
const requiredVars = options?.requiredVars ?? DEFAULT_REQUIRED_VARS;
|
|
36
|
+
const vars = extraVars ? { ...extraVars } : {};
|
|
37
|
+
const warnings = [];
|
|
38
|
+
const errors = [];
|
|
39
|
+
// ── Step 1: Normalize SCM URL ────────────────────────────────────
|
|
40
|
+
const rawUrl = vars[scmUrlKey];
|
|
41
|
+
if (rawUrl !== undefined && rawUrl !== null) {
|
|
42
|
+
const normalized = normalizeScmUrl(String(rawUrl));
|
|
43
|
+
if (normalized !== String(rawUrl)) {
|
|
44
|
+
warnings.push(`SCM URL transformed: "${String(rawUrl)}" → "${normalized}"`);
|
|
45
|
+
}
|
|
46
|
+
vars[scmUrlKey] = normalized;
|
|
47
|
+
}
|
|
48
|
+
// ── Step 2: Infer git branch ─────────────────────────────────────
|
|
49
|
+
const rawBranch = vars[scmBranchKey];
|
|
50
|
+
if (rawBranch !== undefined && rawBranch !== null) {
|
|
51
|
+
const inferred = inferGitBranch(String(rawBranch));
|
|
52
|
+
if (inferred !== String(rawBranch)) {
|
|
53
|
+
warnings.push(`Git branch inferred: "${String(rawBranch)}" → "${inferred}"`);
|
|
54
|
+
}
|
|
55
|
+
vars[scmBranchKey] = inferred;
|
|
56
|
+
}
|
|
57
|
+
// ── Step 3: Validate required vars ───────────────────────────────
|
|
58
|
+
const missing = validateRequiredVars(vars, requiredVars);
|
|
59
|
+
for (const name of missing) {
|
|
60
|
+
errors.push(`Missing required variable: "${name}"`);
|
|
61
|
+
}
|
|
62
|
+
return { extraVars: vars, warnings, errors };
|
|
63
|
+
}
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// launchJob
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
/**
|
|
68
|
+
* Execute the launch job workflow.
|
|
69
|
+
*
|
|
70
|
+
* 1. Run the transforms pipeline on extra_vars
|
|
71
|
+
* 2. If pipeline produces errors, return them without launching
|
|
72
|
+
* 3. Call POST /api/v2/job_templates/<id>/launch/ with transformed vars
|
|
73
|
+
* 4. Return job ID, status, warnings, and errors
|
|
74
|
+
*
|
|
75
|
+
* @param client - The AWX HTTP client
|
|
76
|
+
* @param templateId - The job template ID to launch
|
|
77
|
+
* @param extraVars - Raw extra vars (may be undefined)
|
|
78
|
+
* @param options - Optional pipeline configuration
|
|
79
|
+
* @returns LaunchJobResult with job ID and metadata
|
|
80
|
+
* @throws Error if the AWX API returns an unexpected error
|
|
81
|
+
*/
|
|
82
|
+
export async function launchJob(client, templateId, extraVars, options) {
|
|
83
|
+
// ── Step 1: Run transforms pipeline ─────────────────────────────
|
|
84
|
+
const pipeline = runTransformsPipeline(extraVars, options);
|
|
85
|
+
// ── Step 2: If pipeline errors, abort launch ────────────────────
|
|
86
|
+
if (pipeline.errors.length > 0) {
|
|
87
|
+
return {
|
|
88
|
+
jobId: 0,
|
|
89
|
+
jobStatus: "failed",
|
|
90
|
+
warnings: pipeline.warnings,
|
|
91
|
+
errors: pipeline.errors,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// ── Step 3: Call AWX launch API ─────────────────────────────────
|
|
95
|
+
const body = {};
|
|
96
|
+
// Only include extra_vars in the request body if there are any
|
|
97
|
+
const hasExtraVars = Object.keys(pipeline.extraVars).length > 0;
|
|
98
|
+
if (hasExtraVars) {
|
|
99
|
+
body.extra_vars = pipeline.extraVars;
|
|
100
|
+
}
|
|
101
|
+
const response = await client.request("awx-launch-job", `/api/v2/job_templates/${templateId}/launch/`, {
|
|
102
|
+
method: "POST",
|
|
103
|
+
headers: { "Content-Type": "application/json" },
|
|
104
|
+
body: JSON.stringify(body),
|
|
105
|
+
}, options?.abortSignal);
|
|
106
|
+
// ── Step 4: Parse response body (text-first to handle non-JSON) ──
|
|
107
|
+
const text = await response.text();
|
|
108
|
+
let responseBody;
|
|
109
|
+
try {
|
|
110
|
+
responseBody = text ? JSON.parse(text) : undefined;
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
responseBody = undefined;
|
|
114
|
+
}
|
|
115
|
+
// ── Handle error responses ──────────────────────────────────────
|
|
116
|
+
if (!response.ok) {
|
|
117
|
+
const detail = typeof responseBody === "object" && responseBody && "detail" in responseBody
|
|
118
|
+
? String(responseBody.detail)
|
|
119
|
+
: text || response.statusText;
|
|
120
|
+
throw new Error(`AWX launch failed: HTTP ${response.status}: ${detail}`);
|
|
121
|
+
}
|
|
122
|
+
// ── Step 5: Parse success response ──────────────────────────────
|
|
123
|
+
const safeBody = responseBody ?? {};
|
|
124
|
+
const jobId = Number(safeBody.id);
|
|
125
|
+
const jobStatus = String(safeBody.status ?? "unknown");
|
|
126
|
+
return {
|
|
127
|
+
jobId,
|
|
128
|
+
jobStatus,
|
|
129
|
+
warnings: pipeline.warnings,
|
|
130
|
+
errors: pipeline.errors,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=launch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../src/launch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* list-projects.ts — Paginated project listing for the AWX plugin.
|
|
3
|
+
*
|
|
4
|
+
* Handles pagination loop, per-page timeout budget, page cap enforcement,
|
|
5
|
+
* and name sorting for the `awx-list-projects` tool.
|
|
6
|
+
*/
|
|
7
|
+
import type { AwxClient } from "./client.js";
|
|
8
|
+
/** A single AWX project (relevant subset of fields) */
|
|
9
|
+
export interface Project {
|
|
10
|
+
id: number;
|
|
11
|
+
name: string;
|
|
12
|
+
type: string;
|
|
13
|
+
url: string;
|
|
14
|
+
summary_fields: Record<string, unknown>;
|
|
15
|
+
created: string;
|
|
16
|
+
modified: string;
|
|
17
|
+
description: string;
|
|
18
|
+
scm_type: string;
|
|
19
|
+
status: string;
|
|
20
|
+
[key: string]: unknown;
|
|
21
|
+
}
|
|
22
|
+
/** AWX paginated response shape for /api/v2/projects/ */
|
|
23
|
+
export interface PaginatedResponse {
|
|
24
|
+
count: number;
|
|
25
|
+
next: string | null;
|
|
26
|
+
previous: string | null;
|
|
27
|
+
results: Project[];
|
|
28
|
+
}
|
|
29
|
+
/** Structured output of the list-projects tool */
|
|
30
|
+
export interface ListProjectsOutput {
|
|
31
|
+
count: number;
|
|
32
|
+
results: Project[];
|
|
33
|
+
warning?: string;
|
|
34
|
+
}
|
|
35
|
+
/** Options for listProjects */
|
|
36
|
+
export interface ListProjectsOptions {
|
|
37
|
+
maxPages?: number;
|
|
38
|
+
pageSize?: number;
|
|
39
|
+
timeout?: number;
|
|
40
|
+
abortSignal?: AbortSignal;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Calculate per-page timeout budget.
|
|
44
|
+
*
|
|
45
|
+
* Formula: totalTimeout / (maxPages + 1)
|
|
46
|
+
* The +1 accounts for any overhead/rounding and ensures we never
|
|
47
|
+
* exceed the total tool timeout even if all pages are fetched.
|
|
48
|
+
*
|
|
49
|
+
* @param totalTimeout Total tool timeout in milliseconds
|
|
50
|
+
* @param maxPages Maximum number of pages to fetch
|
|
51
|
+
* @returns Per-page budget in milliseconds (rounded down)
|
|
52
|
+
*/
|
|
53
|
+
export declare function calcPageBudget(totalTimeout: number, maxPages: number): number;
|
|
54
|
+
/**
|
|
55
|
+
* Fetch paginated projects from the AWX API, consolidate results,
|
|
56
|
+
* and return them sorted by name.
|
|
57
|
+
*
|
|
58
|
+
* @param client The AWX HTTP client
|
|
59
|
+
* @param options Pagination and timeout options
|
|
60
|
+
* @returns Consolidated, sorted list of projects
|
|
61
|
+
*/
|
|
62
|
+
export declare function listProjects(client: AwxClient, options?: ListProjectsOptions): Promise<ListProjectsOutput>;
|
|
63
|
+
//# sourceMappingURL=list-projects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-projects.d.ts","sourceRoot":"","sources":["../src/list-projects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,uDAAuD;AACvD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,yDAAyD;AACzD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,kDAAkD;AAClD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,+BAA+B;AAC/B,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7E;AAID;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,SAAS,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAgF7B"}
|