5.0.0 to 5.1.0

5.0.0 to 5.1.0

Overview

This page details out the jobs required to be run as part of the upgrade from Sunbird Ed and CoKreat release 5.0.0 to release 5.1.0. Use the following table to understand the jobs that need to be executed in order to successfully complete the upgrade. Any jenkins job configuration or pre-requisites mentioned under manual configuration section needs to be done first before running any of the mentioned jobs. The order of the jobs should also be run as shown below. They can be run in parallel to speed up the execution.

Create cname for storage account

Create custom domain for storage account and update variables Before starting deployments.

Below are the steps to add custom domain to storage account

For Azure Click Here , AWS Click Here , for GCP Click Here

Build and Deploy for Sunbird

Sunbird_ED:

ServiceBuild jobBuild tagDeploy JobDeploy tagComments

Mobile App

Mobile/job/Sunbird-IONIC-Mobile-App/

release-5.1.0.1

Portal

Build/Core/Player

Deploy/Kubernetes/Player

release-5.1.0.6

ML Services

Build/managed-learn/ml-projects-service

release-5.1.0_RC32

Deploy/managed-learn/ml-projects-service

release-5.1.0_RC7

release-5.1.0.1

Build/managed-learn/ml-core-service

release-5.1.0_RC11

Deploy/managed-learn/ml-core-service

release-5.1.0_RC7

release-5.1.0.1

Build/managed-learn/ml-reports-service

release-5.1.0_RC10

Deploy/managed-learn/ml-reports-service

release-5.1.0_RC7

release-5.1.0.1

Build/managed-learn/ml-survey-service

release-5.1.0_RC5

Deploy/managed-learn/ml-survey-service

release-5.1.0_RC7

release-5.1.0.1

ML-Analytics

Deploy/managed-learn/ml-analytics-service

release-5.1.0_RC14

release-5.1.0.1

Other

Deploy/Kubernetes/OnboardAPI

5.1.0_RC5

Deploy/Kubernetes/OnboardConsumers

5.1.0_RC5

Deploy/Kubernetes/nginx-public-ingress

5.1.0_RC9

Deploy/DataPipeline/InternalKong

ServiceBuild JobBuild TagDeploy JobDeploy TagComments

Certificate API

CertificateAPI

v0.0.11

CertificateAPI

release-5.1.0_RC5

First build the service with values -

github_release_tag = "release-5.1.0_RC5", dockerhub_image_source = "dockerhub/sunbird-rc-certificate-api:v0.0.11" and repository_name = "sunbird-rc-certificate-api"

and then deploy

Registry

Registry

v0.0.13

Registry

release-5.1.0_RC5

First build the service with values -

github_release_tag = "release-5.1.0_RC5", dockerhub_image_source = "dockerhub/sunbird-rc-core:v0.0.13" and repository_name = "sunbird-rc-core"

and then deploy

UploadRCSchema

release-5.1.0_RC5

Service/ComponBuild jobBuild tagDeploy JobDeploy tagComments

Sync tool

Build/KnowledgePlatform/SyncTool

release-5.2.0_RC9

migratecspdata - **** Add this command to the command list in the Deploy/KnowledgePlatform/Neo4jElasticSearchSyncTool Jenkins job.

Content service

Build/Core/Content

release-5.2.0_RC5

Deploy/Kubernetes/Content

release-5.1.0_RC6

Taxonomy service

Build/Core/Taxonomy

release-5.2.0_RC5

Deploy/Kubernetes/Taxonomy

release-5.1.0_RC6

****

DIAL service

Build/Core/Dial

release-5.2.0_RC1

Deploy/Kubernetes/Dial

release-5.1.0_RC6

****

Learning service

Build/KnowledgePlatform/Learning

release-5.2.0_RC9

Deploy/KnowledgePlatform/Learning

release-5.2.0_RC9

****

Knowlg middleware

Build/Core/KnowledgeMW

release-5.2.0_RC1

Deploy/Kubernetes/KnowledgeMW

release-5.1.0_RC6

Deploy this before deploying the service and flink-jobs.

Knowlg platform jobs

Build/KnowledgePlatform/FlinkJobs

release-5.2.0_RC11

Deploy/KnowledgePlatform/FlinkJobs

release-5.2.0_RC8

Add the below job list to the job_names_to_deploy list in the Deploy/KnowledgePlatform/FlinkJobs jenkins job

csp-migrator,

live-node-publisher,

live-video-stream-generator,

cassandra-data-migration

Deploy the

assessment-enrichment,

content-publish,

qrcode-image-generator, search-indexer,

csp-migrator,

live-node-publisher,

live-video-stream-generator,

cassandra-data-migration flink jobs.

Interactive editor

Build/Plugins/ContentEditor

release-5.2.0_RC1

Deploy/Plugins/ContentEditor

release-5.1.0_RC5

Content plugins

Build/Plugins/ContentPlugins

release-5.2.0_RC1

Deploy/Plugins/ContentPlugins

release-5.0.0_RC5

File upload editor

Build/Plugins/GenericEditor

release-5.2.0_RC1

Deploy/Plugins/GenericEditor

release-5.0.0_RC5

Service/ComponentBuild jobBuild tagDeploy JobDeploy tagComments

User & Org service

Build/Core/Learner

release-5.0.1_RC2

Deploy/Kubernetes/Learner

release-5.1.0_RC6

release-5.1.0

LMS

Build/Core/Lms

release-5.0.1_RC3

Deploy/Kubernetes/Lms

release-5.1.0_RC6

Certificate

Build/Core/Cert

release-5.0.1_RC2

Deploy/Kubernetes/Cert

release-5.1.0_RC6

release-5.1.0.1

Lern data products

Build/Lern/LernDataProducts

release-5.0.1_RC4

Deploy/Lern/LernDataProducts

release-5.0.1_RC4

release-5.1.0.1

Lern jobs

Build/Lern/LernFlinkJobs

release-5.0.1_RC5

Deploy/Lern/LernFlinkJobs

release-5.0.1_RC5

release-5.1.0.1

Service to be BuildBuild TagService to DeployDeploy TagComments

Deploy/Kubernetes/InquiryUploadSchema

schema_repo_branch_or_tag: release-5.2.0_RC2 source_folder: question,questionset

Create jenkins jobs from config

Build/Core/Assessment

release-5.2.0_RC3

Deploy/Kubenetes/Assessment

release-5.1.0_RC4

Update build and deploy job config, job-config

Build/job/KnowledgePlatform/InquiryFlinkJob

release-5.2.0_RC3

Deploy/KnowledgePlatform/InquiryFlinkJob

release-5.2.0_RC3

create build, deploy and artifactupload jobs, job-config

Build/Core/Analytics

release-5.1.0_RC2

Deploy/Kubernetes/Analytics

release-5.1.0_RC3

Service to be BuildBuild TagService to DeployDeploy TagComments

Build/Core/Analytics

release-5.1.0_RC2

Deploy/Kubernetes/Analytics

release-5.1.0_RC3

Variables to update for Ed and vdn

variable namedescriptionValue

cloudstorage_replace_absolute_path

Boolean value is required to enable/disable cloud storage agnostic urls in db. Update in core/common.yml and KnowledgePlatform/common.yml

'true'

cloudstorage_base_path

String value is required. The value could be either cloud specific base path or cname configured for current cloud storage provider. Update in core/common.yml and KnowledgePlatform/common.yml

ex: storage url: "https://storagename.blob.core.windows.net" cname url: https://obj.stage.sunbirded.org

valid_cloudstorage_base_urls

Array of String value is required. This array will have list of all cloud path which should be accepted by service. Update in core/common.yml and KnowledgePlatform/common.yml

ex: '["https://storagename.blob.core.windows.net","https://obj.stage.sunbirded.org"]'

cloudstorage_relative_path_prefix

String value is required. This value will be used as prefix for any metadata which holds cloud storage path. Update in Core/common.yml and KnowledgePlatform/common.yml

CONTENT_STORAGE_BASE_PATH

cloudstorage_metadata_list

Array of String value is required. This array will have list of metadata keys which holds cloud storage path. Update in Core/common.yml

["appIcon","posterImage","artifactUrl","downloadUrl","variants","previewUrl","pdfUrl"]

cloud_storage_base_url

storage url, Update in Core/common.yml.

ex: "https://storagename.blob.core.windows.n

cloud_storage_cname_url

cname url, Update in Core/common.yml

ex: "https://obj.stage.sunbirded.org"

lern variables to be updated in inventory

update Lern/common.yml

cloud_service_provider

Update in core, kp, dp common.yml

Supported values are aws, azure, gcloud

lp_vault_youtube_api_key

youtube api key. Add in core/common.yml

copy value from KP secrets file

cloud_storage_url

storage url

ex: "https://storagename.blob.core.windows.n

Add below Api's in Internal Kong configuration

Check if below api's exists or not before adding, if exists replace the existing one if not add it.

- name: createAndUpdateCertificateTemplate
  uris: "{{ private_ml_core_prefix }}/api/v1/certificateTemplates/createOrUpdate"
  upstream_url: "{{ ml_core_private_url }}/v1/certificateTemplates/createOrUpdate"
  strip_uri: true
  plugins:
  - name: jwt
  - name: cors
  - "{{ statsd_pulgin }}"
  - name: acl
    config.whitelist:
      - 'projectAccess'
  - name: rate-limiting
    config.policy: local
    config.hour: "{{ medium_rate_limit_per_hour }}"
    config.limit_by: credential
  - name: request-size-limiting
    config.allowed_payload_size: "{{ medium_request_size_limit }}"

- name: uploadCertificateTemplate
  uris: "{{ private_ml_core_prefix }}/api/v1/certificateTemplates/uploadTemplate"
  upstream_url: "{{ ml_core_private_url }}/v1/certificateTemplates/uploadTemplate"
  strip_uri: true
  plugins:
  - name: jwt
  - name: cors
  - "{{ statsd_pulgin }}"
  - name: acl
    config.whitelist:
      - 'projectAccess'
  - name: rate-limiting
    config.policy: local
    config.hour: "{{ medium_rate_limit_per_hour }}"
    config.limit_by: credential
  - name: request-size-limiting
    config.allowed_payload_size: "{{ medium_request_size_limit }}"

- name: projectCertificateReissue
  uris: "{{ private_ml_project_prefix }}/api/v1/userProjects/certificateReIssue"
  upstream_url: "{{ ml_project_private_url }}/v1/userProjects/certificateReIssue"
  strip_uri: true
  plugins:
  - name: jwt
  - name: cors
  - "{{ statsd_pulgin }}"
  - name: acl
    config.whitelist:
      - 'projectAccess'
  - name: rate-limiting
    config.policy: local
    config.hour: "{{ medium_rate_limit_per_hour }}"
    config.limit_by: credential
  - name: request-size-limiting
    config.allowed_payload_size: "{{ medium_request_size_limit }}"

- name: createCertificateTemplateSvg
  uris: "{{ private_ml_core_prefix }}/api/v1/certificateTemplates/createSvg"
  upstream_url: "{{ ml_core_private_url }}/v1/certificateTemplates/createSvg"
  strip_uri: true
  plugins:
  - name: jwt
  - name: cors
  - "{{ statsd_pulgin }}"
  - name: acl
    config.whitelist:
      - 'projectAccess'
  - name: rate-limiting
    config.policy: local
    config.hour: "{{ medium_rate_limit_per_hour }}"
    config.limit_by: credential
  - name: request-size-limiting
    config.allowed_payload_size: "{{ medium_request_size_limit }}"

- name: createAndUpdateCertificateBaseTemplate
  uris: "{{ private_ml_core_prefix }}/api/v1/certificateBaseTemplates/createOrUpdate"
  upstream_url: "{{ ml_core_private_url }}/v1/certificateBaseTemplates/createOrUpdate"
  strip_uri: true
  plugins:
  - name: jwt
  - name: cors
  - "{{ statsd_pulgin }}"
  - name: acl
    config.whitelist:
      - 'projectAccess'
  - name: rate-limiting
    config.policy: local
    config.hour: "{{ medium_rate_limit_per_hour }}"
    config.limit_by: credential
  - name: request-size-limiting
    config.allowed_payload_size: "{{ medium_request_size_limit }}"

- name: certificateBaseTemplateDetailsList
  uris: "{{ private_ml_core_prefix }}/api/v1/certificateBaseTemplates/list"
  upstream_url: "{{ ml_core_private_url }}/v1/certificateBaseTemplates/list"
  strip_uri: true
  plugins:
  - name: jwt
  - name: cors
  - "{{ statsd_pulgin }}"
  - name: acl
    config.whitelist:
      - 'projectAccess'
  - name: rate-limiting
    config.policy: local
    config.hour: "{{ medium_rate_limit_per_hour }}"
    config.limit_by: credential
  - name: request-size-limiting
    config.allowed_payload_size: "{{ medium_request_size_limit }}"

Execute Below API for ML Analytic Data Product Survey Status Report Configuration Update

curl -X POST \
  {{host}}/api/dataset/v1/add \
  -H 'authorization: Bearer {{jwt_token}}' \
  -H 'content-type: application/json' \
  -d '{
    "id": "ekstep.analytics.dataset.add",
    "ver": "1.0",
    "ts": "2016-12-07T12:40:40+05:30",
    "params": {
        "msgid": "4f04da60-1e24-4d31-aa7b-1daf91c46341"
    },
    "request": {"dataset":"druid-dataset","datasetSubId":"ml-survey-status-detail-exhaust","datasetConfig":{"type":"ml-survey-status-detail-exhaust","params":{"programId":"program-1","solutionId":"solution-1"}},"datasetType":"druid","visibility":"private","version":"v1","authorizedRoles":["PROGRAM_MANAGER","PROGRAM_DESIGNER"],"validationJson":{"type":"object","properties":{"tag":{"id":"http://api.ekstep.org/dataexhaust/request/tag","type":"string"},"dataset":{"id":"http://api.ekstep.org/dataexhaust/request/dataset","type":"string"},"datasetSubId":{"id":"http://api.ekstep.org/dataexhaust/request/datasetSubId","type":"string"},"requestedBy":{"id":"http://api.ekstep.org/dataexhaust/request/requestedBy","type":"string"},"encryptionKey":{"id":"http://api.ekstep.org/dataexhaust/request/encryptionKey","type":"string"},"datasetConfig":{"id":"http://api.ekstep.org/dataexhaust/request/datasetConfig","type":"object"}},"required":["tag","dataset","datasetConfig"]},"druidQuery":{"id":"ml-survey-status-detail-exhaust","labels":{"user_id" : "UUID","user_type" : "User type","user_sub_tye" : "User sub type","state_name" : "Declared State","district_name" : "District","block_name" : "Block","school_code" : "School ID","school_name" : "School Name","board_name" : "Declared Board","organisation_name" : "Org Name","program_name" : "Program Name","program_externalId" : "Program ID","survey_name" : "Survey Name","survey_externalId" : "Survey ID","survey_submission_id" : "survey_submission_id","submission_status" : "Status of submission","submission_date" : "Submission date"},"dateRange":{"interval":{"startDate":"1901-01-01","endDate":"2101-01-01"},"granularity":"all","intervalSlider":0},"metrics":[{"metric":"total_content_plays_on_portal","label":"total_content_plays_on_portal","druidQuery":{"intervals":"1901-01-01T00:00+00:00/2101-01-01T00:00:00+00:00","dataSource":"ml-survey-status","columns":["user_id", "user_type", "user_sub_type", "state_name", "district_name", "block_name", "school_code", "school_name", "board_name", "organisation_name", "program_name", "program_externalId", "survey_name", "survey_externalId", "survey_submission_id", "submission_status","submission_date"],"queryType":"scan"}}],"output":[{"zip":false,"label":"","dims":["date"],"fileParameters":["id","dims"],"metrics":["user_id", "user_type", "user_sub_type", "state_name", "district_name", "block_name", "school_code", "school_name", "board_name", "organisation_name", "program_name", "program_externalId", "survey_name", "survey_externalId", "survey_submission_id", "submission_status","submission_date"],"type":"csv"}],"sort":["UUID","Program ID","Survey ID","survey_submission_id"],"queryType":"scan"},"supportedFormats":["csv","zip"],"exhaustType":"OnDemand"}}'

Execute Below API for ML Analytic Data Product Project Status Report Configuration Update

curl -X POST \
  {{host}}/api/dataset/v1/add \
  -H 'authorization: Bearer {{jwt_token}}' \
  -H 'content-type: application/json' \
  -d '{
    "id": "ekstep.analytics.dataset.add",
    "ver": "1.0",
    "ts": "2016-12-07T12:40:40+05:30",
    "params": {
        "msgid": "4f04da60-1e24-4d31-aa7b-1daf91c46341"
    },
    "request": {
        "dataset": "druid-dataset",
        "datasetSubId": "ml-project-status-exhaust",
        "datasetConfig": {
            "type": "ml-project-status-exhaust",
            "params": {
                "programId": "program-1",
                "solutionId": "solution-1"
            }
        },
        "datasetType": "druid",
        "visibility": "private",
        "version": "v1",
        "authorizedRoles": [
            "PROGRAM_MANAGER",
            "PROGRAM_DESIGNER"
        ],
        "validationJson": {"type":"object","properties":{"tag":{"id":"http://api.ekstep.org/dataexhaust/request/tag","type":"string"},"dataset":{"id":"http://api.ekstep.org/dataexhaust/request/dataset","type":"string"},"datasetSubId":{"id":"http://api.ekstep.org/dataexhaust/request/datasetSubId","type":"string"},"requestedBy":{"id":"http://api.ekstep.org/dataexhaust/request/requestedBy","type":"string"},"encryptionKey":{"id":"http://api.ekstep.org/dataexhaust/request/encryptionKey","type":"string"},"datasetConfig":{"id":"http://api.ekstep.org/dataexhaust/request/datasetConfig","type":"object"}},"required":["tag","dataset","datasetConfig"]},
        "druidQuery":{"id":"ml-project-status-exhaust","labels":{"block_name":"Block","board_name":"Declared Board","project_title_editable":"Project Title","project_completed_date":"Project completion date of the user","user_type":"User Type","designation":"User sub type","school_code":"School ID","project_created_date":"Project start date of the user","project_last_sync":"Project last Synced date","project_duration":"Project Duration","status_of_project":"Project Status","project_id":"Project ID","project_description":"Project Objective","program_externalId":"Program ID","organisation_name":"Org Name","createdBy":"UUID","school_name":"School Name","district_name":"District","program_name":"Program Name","certificate_status_customised":"Certificate Status","state_name":"Declared State"},"dateRange":{"interval":{"startDate":"1901-01-01","endDate":"2101-01-01"},"granularity":"all","intervalSlider":0},"metrics":[{"metric":"total_content_plays_on_portal","label":"total_content_plays_on_portal","druidQuery":{"intervals":"1901-01-01T00:00+00:00/2101-01-01T00:00:00+00:00","dataSource":"sl-project","columns":["createdBy","user_type","designation","state_name","district_name","block_name","school_name","school_code","board_name","organisation_name","program_name","program_externalId","project_id","project_title_editable","project_description","project_created_date","project_completed_date","project_duration","project_last_sync","status_of_project","certificate_status_customised"],"queryType":"scan"}}],"output":[{"zip":false,"label":"","dims":["date"],"fileParameters":["id","dims"],"metrics":["createdBy","user_type","designation","state_name","district_name","block_name","school_name","school_code","board_name","organisation_name","program_name","program_externalId","project_id","project_title_editable","project_description","project_created_date","project_completed_date","project_duration","project_last_sync","status_of_project","certificate_status_customised"],"type":"csv"}],"sort":["UUID","Program ID","Project ID"],"queryType":"scan"},
        "supportedFormats": ["csv","zip"],
        "exhaustType": "OnDemand"
    }
}'

Add below variables in Core,KnowledgePlatform and Datapipeline inventory for ED and vdn

Refer to variables and comment section from here link to update below variables.

storage_endpoint variables for public, private, management and artifact is not required in current release, give empty string as value (cloud_public_storage_endpoint, cloud_private_storage_endpoint, etc)

// ###### common.yml ###############

cloud_public_storage_accountname: ""
cloud_public_storage_endpoint: ""
cloud_public_storage_region: ""
cloud_public_storage_project: ""

cloud_private_storage_accountname: ""
cloud_private_storage_endpoint: ""
cloud_private_storage_region: ""
cloud_private_storage_project: ""

cloud_management_storage_accountname: ""
cloud_management_storage_endpoint: ""
cloud_management_storage_region: ""
cloud_management_storage_project: ""

cloud_artifact_storage_accountname: ""
cloud_artifact_storage_endpoint: ""
cloud_artifact_storage_region: ""
cloud_artifact_storage_project: ""

Refer to variables and comment section from here link to update below secrets variables

// ########## secrets.yml ###############
cloud_public_storage_secret: ""
cloud_private_storage_secret: ""
cloud_management_storage_secret: ""
cloud_artifact_storage_secret: ""

Refer to variables and comment section from here link to update below variables

// ############# common.yml ##############
cloud_storage_certqr_bucketname: "certqr"
cloud_storage_chatbot_bucketname: "chatbot"
cloud_storage_dial_bucketname: "dial"
cloud_storage_flink_bucketname: "flink-state-backend"
cloud_storage_playercdn_bucketname: "player"
cloud_storage_public_bucketname: "public"
cloud_storage_publicreports_bucketname: "public-reports"
cloud_storage_privatereports_bucketname: "reports"
cloud_storage_samiksha_bucketname: "samiksha"
cloud_storage_schema_bucketname: "schema"
cloud_storage_sourcing_bucketname: "sourcing"
cloud_storage_offlineinstaller_bucketname: "{{env}}-offlineinstaller"
cloud_storage_content_bucketname: "sunbird-content-{{env}}"
cloud_storage_telemetry_bucketname: "telemetry-data-store"
cloud_storage_termsandcondtions_bucketname: "termsandcondtions"
cloud_storage_user_bucketname: "user"
cloud_storage_desktopappcrashlogs_bucketname: "desktopappcrashlogs"
cloud_storage_label_bucketname: "label"
cloud_storage_certservice_bucketname: "{{env}}-e-credentials"
cloud_storage_uci_bucketname: "uci-staging"
cloud_storage_cassandrabackup_bucketname: "cassandra-backup"
cloud_storage_dpcassandrabackup_bucketname: "dp-cassandra-backup"
cloud_storage_dppostgresbackup_bucketname: "dp-postgresql-backup"
cloud_storage_dpredisbackup_bucketname: "dp-redis-backup"
cloud_storage_esbackup_bucketname: "elasticsearch-snapshots"
cloud_storage_influxdbbackup_bucketname: "influxdb-backup"
cloud_storage_jenkinsbackup_bucketname: "jenkins-backup"
cloud_storage_mongobackup_bucketname: "mongodb-backup"
cloud_storage_neo4jbackup_bucketname: "neo4j-backup"
cloud_storage_redisbackup_bucketname: "redis-backup"
cloud_storage_artifacts_bucketname: "{{ artifacts_container }}"

Variables to remove from inventory

delete below variables from core/common.yml if its defined.

upstream_url

plugin_upstream_url

discussion_upstream_url

Migrations

Please execute the migration instructions mentioned by the dependent building blocks

Add new Form

To create a new form to show or remove the onboarding popups\

// Some codecurl --location --request POST '<https://{{env}}>/api/data/v1/form/create' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{API KEY}}' \
--data-raw '{
    "request": {
        "type": "newUserOnboarding",
        "action": "onboarding",
        "subType": "global",
        "rootOrgId": <please specify your root org id>,
        "component": "portal",
        "data":{
        "fields": {
                    "shownewUserOnboarding": "true"
                }
      }
    }
}'

CoKreat Deployments and migration

Please follow the instructions mentioned in the below link by CoKreat building block to upgrade CoKreat from 5.0.0 to 5.1.0

Variables lists and build tag is same for Ed and vdn. Use release-5.1.0-vdn_RC1 for knowlg service deployments in VDN

Last updated