UNPKG

@agility/management-sdk

Version:
192 lines (158 loc) 5.98 kB
# Multi-Instance Operations This guide demonstrates how to perform content operations across multiple Agility CMS instances and locales using configuration-driven approaches. ## Overview When managing content across multiple Agility CMS instances (different regions, environments, or brands), you can use a configuration matrix to create identical content across multiple instances and locales. ## Configuration Structure Define your instance matrix using a simple configuration structure: ```typescript interface InstanceConfig { guid: string; locales: string[]; name?: string; // Optional: for reporting region?: string; // Optional: for regional instances } const instances: InstanceConfig[] = [ { guid: 'xxxxxxx-u', locales: ['en-us', 'en-ca', 'fr-ca'], name: 'Production US', region: 'us' }, { guid: 'xxxxxxy-u', locales: ['en-us'], name: 'Production EU', region: 'eu' } ]; ``` ## Basic Multi-Instance Content Creation ### Sequential Content Creation ```typescript import * as mgmtApi from '@agility/management-sdk'; interface ContentCreationResult { guid: string; locale: string; success: boolean; contentId?: number; error?: string; instanceName?: string; } async function createContentAcrossInstances( instances: InstanceConfig[], contentData: any ): Promise<ContentCreationResult[]> { const apiClient = new mgmtApi.ApiClient(); await apiClient.auth(); const results: ContentCreationResult[] = []; for (const instance of instances) { for (const locale of instance.locales) { try { console.log(`Creating content in ${instance.name || instance.guid} (${locale})...`); const contentIds = await apiClient.contentMethods.saveContentItem( contentData, instance.guid, locale ); results.push({ guid: instance.guid, locale, success: true, contentId: Array.isArray(contentIds) ? contentIds[0] : contentIds, instanceName: instance.name }); console.log(`✅ Success: Content created with ID ${contentIds} in ${instance.name} (${locale})`); } catch (error) { results.push({ guid: instance.guid, locale, success: false, error: error.message, instanceName: instance.name }); console.error(`❌ Failed: ${instance.name} (${locale}) - ${error.message}`); } } } return results; } // Usage const contentData = { properties: { referenceName: 'blog-post', definitionName: 'BlogPost', state: 2 }, fields: { title: 'Global Product Launch Announcement', content: 'We are excited to announce our new product...', publishDate: new Date().toISOString(), author: 'Marketing Team' } }; const results = await createContentAcrossInstances(instances, contentData); console.log('Content creation completed:', results); ``` ### Parallel Processing for Better Performance ```typescript async function createContentParallel( instances: InstanceConfig[], contentData: any ): Promise<ContentCreationResult[]> { const apiClient = new mgmtApi.ApiClient(); await apiClient.auth(); // Create array of all instance/locale combinations const operations = instances.flatMap(instance => instance.locales.map(locale => ({ instance, locale })) ); // Execute all operations in parallel const results = await Promise.allSettled( operations.map(async ({ instance, locale }) => { try { const contentIds = await apiClient.contentMethods.saveContentItem( contentData, instance.guid, locale ); return { guid: instance.guid, locale, success: true, contentId: Array.isArray(contentIds) ? contentIds[0] : contentIds, instanceName: instance.name } as ContentCreationResult; } catch (error) { return { guid: instance.guid, locale, success: false, error: error.message, instanceName: instance.name } as ContentCreationResult; } }) ); // Extract results from Promise.allSettled return results.map(result => result.status === 'fulfilled' ? result.value : result.reason ); } // Usage const parallelResults = await createContentParallel(instances, contentData); console.log('Parallel content creation completed:', parallelResults); ``` --- ## Navigation - [← Back to Main Documentation](../README.md) - [Authentication & Setup](./auth.md) - [CI/CD & Automated Environments](./cicd.md) - [AssetMethods](./asset-methods.md) - [BatchMethods](./batch-methods.md) - [ContainerMethods](./container-methods.md) - [ContentMethods](./content-methods.md) - [InstanceMethods](./instance-methods.md) - [InstanceUserMethods](./instance-user-methods.md) - [ModelMethods](./model-methods.md) - [PageMethods](./page-methods.md) - [ServerUserMethods](./server-user-methods.md) - [WebhookMethods](./webhook-methods.md)