Merk at dokumentet kun omhandler de endringene som er utført på Cerebrum-siden og ikke selve integrasjonsløsning m Exchange.
Merk også at den generelle funksjonelle beskrivelsen er tilgjengelig i andre dokumenter, ikke alle detaljer er ivaretatt her.
Merk at samtlige endringer beskrevet her er gjort i Cerebrums exchange-branch. Endringer på cereconf.py og scheduled_jobs.py er gjort på kopifilene **uio/cereconf-exchange-dev.py* og scheduled_jobs-exchange-dev.py.*
NIKE-prosjektet bestilte ifm innføring av Exchange på UiO en rekke endringer på UiOs Cerebrum. Endringene ble bestilt som enten ny funksjonalitet eller endring på eksisterende funksjonalitet. I tillegg til bestilte endringer ble det gjort justeringer på eksisterende kode og etablert ny kode for å opprettholde Cerebrums kodeintegritet.
Det ble også gjort mindre endringer i koden. Ikke alle av disse er tatt med. Men, samtlige endringer er merket med en kommentar som inneholder frasen "exchange-relatert-jazz" og en forklaring på hvorfor endringen er introdusert og antatt levetid for endringen.
ExchangeGroups.py
I tillegg til modulene knyttet til selve integrasjonsløsningen mellom Cerebrum og Exchange, var den viktigste ønskede funksjonen for NIKE-prosjektet støtte for distribusjonsgrupper i Exchange basert på grupper i Cerebrum. Behovet for funksjonalitet og støtte ble løst gjennom implementering av en ny modul i Cerebrum, design/mod_distributiongroup.sql med tilhørende API definert i Cerebrum/modules/exchange/v2013/ExchangeGroups.py.
Modulen inneholder kun en ekstra tabell. I denne lagres de informasjon som er spesifikk til bruk av grupper som distribusjonsgrupper i Exchange. Primærnøkkelen i tabellen er entity_id for distribusjonsgruppen. Mer informasjon om attributtene og bruk av data finnes i kommentarene for moduldefinisjon.
API'et definerer klassene SecurityGroup (som det foreløpig ikke har vært nødvendig å legge noe funksjonalitet i) og DistributionGroup.
DistributionGroup
Klassen DistributionGroup arver Factory-klassen Group. Den implementerer metoder for opprettelse av ny distribusjonsgruppe (new(..)), så vel som for etablering av distribusjonsgruppeattributter for en eksisterende gruppe (populate(..)). Den er definert som en Factory-klasse og distribusjonsgruppeobjekter kan opprettes gjennom standard Factory-kall.
Implementasjon av write_db følger Cerebrum standard. Attributter som skal oppdateres er definert i __write_attr__ og kun oppdaterte attributter overskrives ved write_db-kall.
Initiell write_db logger enten en dl_roomlist_create hendelse eller en dl_group_create hendelse. Skillet mellom disse er nødvendig fordi de skal behandles forskjellig ved eksport til Exchange.
Klassen implementerer ikke "cascading delete". Ved kall på delete() fjernes raden i tabellen distribution_group der group_id er i samsvar med gruppen som behandles. Selve gruppeentitet fortsetter å leve i Cerebrum og må deaktivere via vanlig Group-API dersom behovet skulle oppstå.
I tillegg implementerer klassen en find(..). Noe behov for list/search-funksjoner eksisterer i dag da man kan benytte superklassens metoder search(..) og search_members()... Merk at find returner raden med samtlige attributter knyttet til gruppen (query_1).
Videre er det implementert metoder som benyttes til modifisering av attributter for distribusjonsgrupper. For å oppretholde Cerebrums standard og behov for historikk er det implementert metoder for å sette og modifisere samtlige av attributtene. Full oversikt over relevante metoder og informasjon om hvilket attributt de brukes på er tilgjengelig i klassedefinisjonen.
For å gjøre synkroniseringsrutinen noe enklere er det implementert en metode, get_distgroup_attributes_and_targetdata(..) som returner et dict med alle data relevante for synkronisering av distribusjonsgruppen til Exchange.
Til sist implementerer klassen de e-postrelaterte metodene som er nødvendig for distribusjonsgrupper:
- create_distgroup_mailtarget
- deactivate_dl_mailtarget
- og hjelpemetoden _create_distgroup_mailaddr
Disse metodene er forholdsvis enkel og gjør akkurat det navnene tilsier, nemlig etablerer og fjerner en distribusjonsgruppe. Inline-kommentarene i de aktuelle metoden forklarer hvorfor en mixin-klasse implementasjon ikke ble valgt, samt gir noen forretningsregler for e-postdata knyttet til distribusjonsgrupper.
I forbindelse med implemetnasjon av denne modulen ble det gjort en enkel justering av contrib/migrate_cerebrum_database.py.
Nye konstanter
Det er, i forbindelse med NIKE-prosjektet, etablert en rekke nye konstanter i Cerebrum. De fleste av disse er knyttet til logging av historikk for mailtargets og logging av historikk for distribusjonsgrupper men det er også definert target_type for distribusjonsgrupper, en navnetype for display_name, spread til Exchange for sikkerhets- og distribusjonsgrupper osv.
Endringer i kode og funksjonalitet
Det er blitt gjort endringer flere steder i Cerebrum. Noen av endringene har medført endret funksjonalitet. De viktigste slike endringer er:
- Eksport av maildata til LDAP - det er lagt inn hindring for eksport av tripnote og forwards til LDAP for brukere som er aktive i Exchange. Dette skal beskytte UiO mot migreringsutfordringer og feil i oppryddingsrutiner. Oppdatert kode er å finne i contrib/generate_mail_ldif.py og ./Cerebrum/modules/no/uio/EmailLDAP.py.
- Populering av automatiske ansattgrupper har fått ekstra funksjonalitet og kan nå brukes til å populere ansattgruppene med primærbrukere i stedet for personobjekter. Dette ble gjort for å forenkle eksporten til Exchange og fordi det ikke finnes noe case for grupper populert med personobjekter per i dag. Det er svært viktig at contrib/populate_automatic_groups.py med tilhørende scheduled_jobs.py kommer i produksjon når Exchange kommer i produksjon (må ikke vente til migreringen er ferdig!).
Email.py
I Email.py er det gjort store endringer. De aller fleste av disse endringer er knyttet til logging av e-posthendelser, men det er også definert en ny target_type, og gjort en justering av list_email_targets_ext(..).
Andre endringer
Det er gjort endringer flere andre steder i Cerebrum. cerebrum/default_config.py og Cerebrum/modules/no/uio/Account.py har f.eks. flere relevante endringer hver. Oversikt over filer med endringer (fra Cerebrums exchange-branch):
- ./Cerebrum/Constants.py
- ./Cerebrum/default_config.py
- ./Cerebrum/Group.py
-./Cerebrum/modules/CLConstants.py - ./Cerebrum/modules/Email.py - ./Cerebrum/modules/exchange/v2013/ExchangeGroups.py - ./Cerebrum/modules/no/uio/Account.py - ./Cerebrum/modules/no/uio/bofhd_uio_cmds.py - ./Cerebrum/modules/no/uio/Constants.py - ./Cerebrum/modules/no/uio/EmailLDAP.py - ./Cerebrum/modules/no/uio/Group.py - ./Cerebrum/Person.py - ./Cerebrum/Utils.py - ./contrib/generate_mail_ldif.py - ./contrib/populate-automatic-groups.py
Det er imidlertid ingen flere store endringer som krever særskilt dokumentasjon. Bruk "exchange-relatert-jazz" for å finne kommentarer om hvilken kode som er relevant og hva levetiden for koden er (etter utrulling, etter migrering o.l.)
Produksjonssetting
Produksjonssetting av Cerebrum-side endringer kan gjøres uavhengig av produksjonssetting av integrasjonsløsningen dersom det er ønskelig. Uansett valgt tidspunkt for produksjonssetting er det viktig å oppdatere følgende filer:
- Cerebrum/Constants.py
- Cerebrum/default_config.py
- Cerebrum/Group.py
- Cerebrum/modules/CLConstants.py
- Cerebrum/modules/Email.py
- Cerebrum/modules/exchange/v2013/ExchangeGroups.py
- Cerebrum/modules/no/uio/Account.py
- Cerebrum/modules/no/uio/bofhd_uio_cmds.py
- Cerebrum/modules/no/uio/Constants.py
- Cerebrum/modules/no/uio/EmailLDAP.py
- Cerebrum/modules/no/uio/Group.py
- Cerebrum/Person.py
- Cerebrum/Utils.py
- contrib/generate_mail_ldif.py
- contrib/populate-automatic-groups.py
- design/mod_distribution_group.sql
- setup.py
I tillegg må endringene fra uio/cereconf-exchange-dev.py og scheduled_jobs-exchange-dev.py flettes inn i produksjonsutgavene av disse filene og filene oppdateres.
Etter oppdatering av filer bør man kjøre en make_db.py med entent "update-codes" eller "only-insert-codes" som parameter slik at man får lagt inn alle relevante konstanter.
I neste steg bør man restarte bofhd (best å ta alle kjørende instanser av bofhd på UiO).
Sjekk
- At produksjonsmiljøet har tabellen distribution_group
- At bofhd.py starter som den skal
- At populate-automatic-groups.py produserer ansattgrupper med primærbrukere som medlemmer og at gruppene har de samme spread som tidligere
- Be postmaster om å teste e-postkommandoer