Endringer i Cerebrum i forbindelse med innføring av Exchange på UiO

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

System Message: WARNING/2 (/usit/vortex-sync/vortex/til_vortex_rsync/www_usit_uio_no/om/tjenestegrupper/cerebrum/utvikling/aktiviteter/NIKE/dok-jazz/dokumentasjon-utvikling-cerebrum-exchange.rst, line 152)

Bullet list ends without a blank line; unexpected unindent.

-./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
Publisert 9. jan. 2014 01:54