vpc_create_instance
Create a virtual server instance on IBM Cloud VPC by specifying required parameters like name, VPC, zone, profile, image, and subnet. Optionally add SSH keys and resource group.
Instructions
Create a virtual server instance
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| vpc_id | Yes | ||
| zone | Yes | ||
| profile | Yes | e.g. bx2-2x8 | |
| image_id | Yes | ||
| subnet_id | Yes | ||
| ssh_key_ids | No | Comma-separated SSH key IDs | |
| resource_group_id | No | ||
| region | No |
Implementation Reference
- src/tools/vpc/index.ts:57-64 (handler)The handler function for 'vpc_create_instance' tool. It parses SSH key IDs, constructs the VPC instance payload (with name, vpc, zone, profile, image, primary_network_interface, keys, resource_group), and sends a POST request to the VPC API /instances endpoint.
server.tool("vpc_create_instance", "Create a virtual server instance", { name: z.string(), vpc_id: z.string(), zone: z.string(), profile: z.string().describe("e.g. bx2-2x8"), image_id: z.string(), subnet_id: z.string(), ssh_key_ids: z.string().optional().describe("Comma-separated SSH key IDs"), resource_group_id: z.string().optional(), region: z.string().optional(), }, async (p) => safeTool(async () => { w(); const keys = p.ssh_key_ids?.split(",").map(id=>({id:id.trim()}))||[]; return client.post(vpcUrl(p.region||r, "/instances"), {name:p.name,vpc:{id:p.vpc_id},zone:{name:p.zone},profile:{name:p.profile},image:{id:p.image_id},primary_network_interface:{subnet:{id:p.subnet_id}},keys,resource_group:p.resource_group_id?{id:p.resource_group_id}:undefined}); })); - src/tools/vpc/index.ts:57-61 (schema)Zod schema definition for 'vpc_create_instance' input parameters: name (string), vpc_id (string), zone (string), profile (string with description), image_id (string), subnet_id (string), ssh_key_ids (optional string), resource_group_id (optional string), region (optional string).
server.tool("vpc_create_instance", "Create a virtual server instance", { name: z.string(), vpc_id: z.string(), zone: z.string(), profile: z.string().describe("e.g. bx2-2x8"), image_id: z.string(), subnet_id: z.string(), ssh_key_ids: z.string().optional().describe("Comma-separated SSH key IDs"), resource_group_id: z.string().optional(), region: z.string().optional(), }, async (p) => safeTool(async () => { w(); - src/tools/vpc/index.ts:57-64 (registration)Tool registered via server.tool('vpc_create_instance', ...) inside the registerVPCTools function which is called from src/server.ts at line 53.
server.tool("vpc_create_instance", "Create a virtual server instance", { name: z.string(), vpc_id: z.string(), zone: z.string(), profile: z.string().describe("e.g. bx2-2x8"), image_id: z.string(), subnet_id: z.string(), ssh_key_ids: z.string().optional().describe("Comma-separated SSH key IDs"), resource_group_id: z.string().optional(), region: z.string().optional(), }, async (p) => safeTool(async () => { w(); const keys = p.ssh_key_ids?.split(",").map(id=>({id:id.trim()}))||[]; return client.post(vpcUrl(p.region||r, "/instances"), {name:p.name,vpc:{id:p.vpc_id},zone:{name:p.zone},profile:{name:p.profile},image:{id:p.image_id},primary_network_interface:{subnet:{id:p.subnet_id}},keys,resource_group:p.resource_group_id?{id:p.resource_group_id}:undefined}); })); - src/lib/utils.ts:23-27 (helper)The vpcUrl helper function builds the VPC API URL with region, path, and version parameter. Used by the handler to construct the API endpoint.
export function vpcUrl(region: string, path: string, version: string = "2024-11-19"): string { const base = `https://${region}.iaas.cloud.ibm.com/v1${path}`; const sep = base.includes("?") ? "&" : "?"; return `${base}${sep}version=${version}&generation=2`; } - src/lib/utils.ts:14-18 (helper)The assertWriteAllowed helper checks if write operations are allowed. Called via 'w()' at the start of the handler to enforce read-only mode.
export function assertWriteAllowed(allowWrite: boolean): void { if (!allowWrite) { throw new WriteNotAllowedError(); } }