diff --git a/generators/gh-maven-build/index.js b/generators/gh-maven-build/index.js index 2705edd..baa1355 100644 --- a/generators/gh-maven-build/index.js +++ b/generators/gh-maven-build/index.js @@ -188,12 +188,25 @@ export default class extends Generator { message: 'Deploy on-prem:', default: false, }, + { + type: 'confirm', + name: 'deployJasperReports', + message: 'Deploy Jasper Reports:', + default: false, + }, + { + type: 'input', + name: 'jasperServerInstance', + message: 'Jasper Reports server instance:', + default: 'JCRS', + when: (answers) => answers.deployJasperReports, + }, { type: 'input', name: 'playbookPath', message: 'Playbook path:', default: 'playbooks', - when: (answers) => answers.deployOnPrem, + when: (answers) => answers.deployOnPrem || answers.deployJasperReports, }, { type: 'input', @@ -314,6 +327,15 @@ export default class extends Generator { playbook_args, playbook_options, ); + const jasper_reports_args = [ + this.answers.projectName, + this.answers.jasperServerInstance, + this.answers.playbookPath, + ]; + this.composeWith( + 'nr-repository-composer:pd-jasper-reports', + jasper_reports_args, + ); } } diff --git a/generators/pd-jasper-reports/index.js b/generators/pd-jasper-reports/index.js new file mode 100644 index 0000000..9dde7be --- /dev/null +++ b/generators/pd-jasper-reports/index.js @@ -0,0 +1,53 @@ +'use strict'; +import Generator from 'yeoman-generator'; +// eslint-disable-next-line no-unused-vars +import yosay from 'yosay'; +// eslint-disable-next-line no-unused-vars +import chalk from 'chalk'; +import * as fs from 'node:fs'; + +/** + * Generate the Ansible playbook needed for Jasper Reports deployments + */ +export default class extends Generator { + constructor(args, opts) { + super(args, opts); + + this.argument('projectName', { + type: String, + required: true, + description: 'Project Name', + }); + this.argument('jasperServerInstance', { + type: String, + required: true, + description: 'Jasper Server Instance', + }); + this.argument('playbookPath', { + type: String, + required: true, + description: 'Playbook Path', + }); + } + + // Generate playbook file + writing() { + this.log('Generating playbook file'); + if ( + !fs.existsSync( + this.destinationPath(`${this.options.playbookPath}/jasper-reports.yaml`), + ) + ) { + this.fs.copyTpl( + this.templatePath('jasper-reports.yaml'), + this.destinationPath(`${this.options.playbookPath}/jasper-reports.yaml`), + { + projectNameUpperCase: this.options.projectName.toUpperCase(), + jasperServerInstanceUpperCase: this.options.jasperServerInstance.toUpperCase(), + }, + ); + } + + this.config.save(); + } +} diff --git a/generators/pd-jasper-reports/templates/jasper-reports.yaml b/generators/pd-jasper-reports/templates/jasper-reports.yaml new file mode 100644 index 0000000..e926040 --- /dev/null +++ b/generators/pd-jasper-reports/templates/jasper-reports.yaml @@ -0,0 +1,41 @@ + +--- +- name: Deploy <%= projectNameUpperCase %> Jasper Reports + hosts: localhost + connection: local + collections: + - polaris.deploy + vars: + jasper_server_instance: <%= jasperServerInstanceUpperCase %> + jasper_project_name: <%= projectNameUpperCase %> + jasper_ds_0_url: "{{ lookup('ansible.builtin.env', 'PODMAN_cfg_jasper_ds_0_url') | default('') }}" + jasper_ds_0_user: "{{ lookup('ansible.builtin.env', 'PODMAN_cfg_jasper_ds_0_user') | default('') }}" + jasper_ds_0_password: "{{ lookup('ansible.builtin.env', 'PODMAN_cfg_jasper_ds_0_password') | default('') }}" + jasper_deployer_url: "{{ lookup('ansible.builtin.env', 'PODMAN_cfg_jasper_deployer_url') | default('') }}" + jasper_deployer_user: "{{ lookup('ansible.builtin.env', 'PODMAN_cfg_jasper_deployer_user') | default('') }}" + jasper_deployer_password: "{{ lookup('ansible.builtin.env', 'PODMAN_cfg_jasper_deployer_password') | default('') }}" + + tasks: + - name: Create packages + include_role: + name: jasper_reports + tags: create_packages + + - name: Deploy to node 1 + when: jasper_env in ["dev", "test", "prod"] + include_role: + name: jasper_reports + tags: deploy_packages + + - name: Deploy to node 2 + when: jasper_env in ["test", "prod"] + include_role: + name: jasper_reports + vars: + jasper_route_id: ".2" + tags: deploy_packages + + - name: Delete staging directory + include_role: + name: jasper_reports + tags: delete_staging_dir diff --git a/generators/util/yaml.js b/generators/util/yaml.js index 7e50aac..56402ec 100644 --- a/generators/util/yaml.js +++ b/generators/util/yaml.js @@ -81,6 +81,16 @@ export const pathToProps = [ prop: 'deployOnPrem', writeEmpty: false, }, + { + path: ['metadata', 'annotations', 'playbook.io.nrs.gov.bc.ca/deployJasperReports'], + prop: 'deployJasperReports', + writeEmpty: false, + }, + { + path: ['metadata', 'annotations', 'playbook.io.nrs.gov.bc.ca/jasperServerInstance'], + prop: 'jasperServerInstance', + writeEmpty: false, + }, { path: ['metadata', 'annotations', 'playbook.io.nrs.gov.bc.ca/playbookPath'], prop: 'playbookPath',