How to create pages from template pages
Description
Situations arise where it would be nice to be able to create a new space pre-populated with pages or to create a new section of an existing space with a standard set of pages. This could be for new projects as they get defined, new design pages, new customers, or new employees' user spaces. Processes or company policies may demand specific permissions and standards.
The CLI can be used to automate the creation of sets of pages that follow a standard format. First, template (or skeleton) pages are created that represent the page content for the new pages. The new pages will be created from the template pages. Permissions can be added where needed. Replacement text can automatically replace text on the copy.
Template
We use template as a generic term (not related to Confluence templates). Here a template page is just a normal page that can be edited in the standard way, but is used as the base for a copy.
Server or Cloud
This works with Confluence Server or Cloud.
Self service
For Confluence Server users, a self service setup is possible using Run CLI Actions in Confluence - see How to create pages from template pages - self service
Example - creating a standard personal space
The following creates a personal space for a user (userId) who has a manager (managerId). We assume the template pages are already defined in a space with key: templateSpace. We use replacement variables of the form @xxxx@ so the script can be generalized. See the findReplace paramater used below.
Action script
# add personal space --action addSpace --userId "@userId@" # add admin permission for the user to their own space --action addpermissions --space "~@userId@" --permissions "SETSPACEPERMISSIONS" --userId @userId@ # add space permissions to allow general user access to personal space --action addPermissions --space "~@userId@" --group confluence-users --permissions "VIEWSPACE, COMMENT" # add space permissions to all manager more access --action addPermissions --space "~@userId@" --userId @managerId@ --permissions "VIEWSPACE, EDITSPACE, EXPORTPAGE, SETPAGEPERMISSIONS, REMOVEPAGE, COMMENT, REMOVECOMMENT, CREATEATTACHMENT, REMOVEATTACHMENT, EXPORTSPACE" # add pages by copying template pages --action copyPage --space templateSpace --title @home --newSpace "~@userId@" --descendents --replace --noConvert --action copyPage --space templateSpace --title "Public stuff" --newSpace "~@userId@" --descendents --parent @home --replace --noConvert --action copyPage --space templateSpace --title "Private stuff" --newSpace "~@userId@" --descendents --parent @home --replace --noConvert --action copyPage --space templateSpace --title "Manager stuff" --newSpace "~@userId@" --descendents --parent @home --replace --noConvert # add page permission to protect private section --action addPermissions --space "~@userId@" --title "Private stuff" --permissions "view, edit" --userId @userId@ # add page permission to protect manager section --action addPermissions --space "~@userId@" --title "Manager stuff" --permissions "view" --userId @userId@ --action addPermissions --space "~@userId@" --title "Manager stuff" --permissions "view, edit" --userId @managerId@
Run the action script
confluence --action run --file personal-space.txt --continue --findReplace "@userId@:bob,@managerId@tom"
Continue
We use --continue so that all actions will be run even if there are errors on one or more actions. This allows for the script to be corrected and re-run easily.
Example output
Run: --action addSpace --userId bob Space added with key: ~bob name: bob and url: http://imac2.local:8118/display/~bob # add admin permission for the user to their own space Run: --action addpermissions --space "~bob" --permissions "SETSPACEPERMISSIONS" --userId bob [SETSPACEPERMISSIONS] permissions where added to space: '~bob' for: 'bob'. # add space permissions to allow general user access to personal space Run: --action addPermissions --space "~bob" --group confluence-users --permissions "VIEWSPACE, COMMENT" [VIEWSPACE, COMMENT] permissions where added to space: '~bob' for: 'confluence-users'. # add space permissions to all manager more access Run: --action addPermissions --space "~bob" --userId tom --permissions "VIEWSPACE, EDITSPACE, EXPORTPAGE, SETPAGEPERMISSIONS, REMOVEPAGE, COMMENT, REMOVECOMMENT, CREATEATTACHMENT, REMOVEATTACHMENT, EXPORTSPACE" [VIEWSPACE, EDITSPACE, EXPORTPAGE, SETPAGEPERMISSIONS, REMOVEPAGE, COMMENT, REMOVECOMMENT, CREATEATTACHMENT, REMOVEATTACHMENT, EXPORTSPACE] permissions where added to space: '~bob' for: 'tom'. # add pages by copying template pages Run: --action copyPage --space templateSpace --title @home --newSpace "~bob" --replace --noConvert Page 'Home' copied to: 'Home' in space ~bob. Page has id: 94833027 Run: --action copyPage --space templateSpace --title "Public stuff" --newSpace "~bob" --parent @home --replace --noConvert Page 'Public stuff' copied to: 'Public stuff' in space ~bob as child of '@home'. Page has id: 94833032 Run: --action copyPage --space templateSpace --title "Private stuff" --newSpace "~bob" --parent @home --replace --noConvert Page 'Private stuff' copied to: 'Private stuff' in space ~bob as child of '@home'. Page has id: 94833033 Run: --action copyPage --space templateSpace --title "Manager stuff" --newSpace "~bob" --parent @home --replace --noConvert Page 'Manager stuff' copied to: 'Manager stuff' in space ~bob as child of '@home'. Page has id: 94833034 # add page permission to protect private section Run: --action addPermissions --space "~bob" --title "Private stuff" --permissions "view, edit" --userId bob [View, Edit] permissions where added to page: 'Private stuff' in space: '~bob' for: 'bob'. # add page permission to protect manager section Run: --action addPermissions --space "~bob" --title "Manager stuff" --permissions "view" --userId bob [View] permissions where added to page: 'Manager stuff' in space: '~bob' for: 'bob'. Run: --action addPermissions --space "~bob" --title "Manager stuff" --permissions "view, edit" --userId tom [View, Edit] permissions where added to page: 'Manager stuff' in space: '~bob' for: 'tom'. Run completed successfully. 11 actions were successful