Migrering av UKAs Workspace
Det har lenge vært et ønske om å få migrert UKA sitt Google Workspace over til Samfundet sitt. Nå i skrivende stund før UKA-25 er vi snart i mål. Dersom vi ikke greier det vil dette fungere som en guide for nestmann som tar over.
Bakgrunn
Det er dumt å ha to google workspaces: da har vi essensielt to vedlikeholdsbyrder. I tillegg driver UKA en egen tilgangskontroll som er hierarkisk og langt fra optimal og ikke integrert mot MDB2. Vi har også automatisk synk for sletting/oppretting av brukere i Samfundet sitt Workspace som UKA ikke får nytte av (de må manuelt lage alle brukere...)
Hvordan ?
Du tenker sikkert logisk at Google har egne verktøy for å migrere workspaces. Jo de har det, Google Workspace Migrate. Synd for vår del, Google gjemmer det bak en premium plan vi ikke har råd til. Dermed må vi ta til andre virkemidler. Redningsmannen vår er rclone, et program som finnes i apt. Rclone er et verktøy for å lese/skrive mengder med filer fra ulike remotes, f.eks. Google Drive og Microsofts OneDrive. Rclone har god dokumentasjon for håndtering av Google Drives: bare se her.
Flytting av filer
Rclone krever litt knoting både på UKA-siden, Samfundet-siden og i rclone. Vi benytter oss av Service Accounts, basically dummy-brukere som vi som Admins gir en del privilegier.
UKA
Hvert UKE-år har UKA absolutt alle filer i en mappe som ligger i en personlig drive i en i UKST det året, oftest UKEsjef (ja, du leste det riktig). For å få tilgang til denne mappa må vi følge instruksjonene hos rclone: se seksjonen "Use case - Google Apps/G-suite account and individual Drive". Her gjør vi noen ting: lager en service account, gir API-tilganger til denne service accounten og kobler denne service accounten til rclone via credentials.
Samfundet
Vi ønsker så å ta denne mappen i UKAs drive og legge det i en Shared Drive i vårt Workspace. Du trenger igjen en service account i Samfundet-workspacen og du må igjen koble denne til remoten i rclone. Det står ikke i doken, men for å få til dette må du gi manager-tilgang til epost-adressen til service accounten som overfører og personen i UKA som filene ligger under, hvis ikke vil du ikke ha riktige rettigheter. Du kan se eposten til service-accounten inne i Google Cloud Console og du gir den tilgang til Shared Drive-en akkurat som du gir en vanlig UKEfunk tilgang til en shared drive.
Magien
Etter oppsett av rclone sine remotes gjør vi følgende
rclone -v –drive-impersonate ukeperson@uka.no sync uka-remote:/UKA-XX/ samfundet-remote:/ –drive-skip-shortcuts –server-side-across-configs
Forklaring:
kommando-bit | forklart |
---|---|
-v | gir verbost output. |
–drive-impersonate ukeperson@uka.no | gjør at vi betrakter uka-remoten som personen med den eposten. Altså vi spoofer egentlig kontoen. Dette gir oss tilgang til hjemme-Driven til UKApersonen. Merk at det må være eier av mappen vi gjør dette med, ikke bare en person som har fått delt mappen av noen andre! Dette fordi vi bruker –drive-skip-shortcuts, og Drive anser en delt mappe som en snarvei. |
sync | Selve kommandoen vi kjører. Sync gjør kopiering uten å overskrive allerede eksisterende filer. Du kunne sikkert brukt copy, men i tilfelle du fucker opp er det nok lurt å bruke sync :) |
uka-remote:/UKA-XX/ | her er uka-remote placeholder-navnet for hva enn du kalte remoten. UKA-XX er her navnet på UKA sin rotmappe. |
samfundet-remote:/ | placeholder-navnet til Samfundets remote. Her kopierer vi alt inn i rot-nivået til remoten (siden det er en Shared Drive er nok det ønskelig) |
–drive-skip-shortcuts | Rclone kopierer filen snarveien peker til, ikke selve snarveien. Det blir derfor mye duplisering av filer: dette vil vi unngå. |
–server-side-across-configs | gjør kopieringen av filer på server-siden. Hvis ikke går den via din maskin, og da liker rclone å overføre Google-dokumenter til Office-format, og da er det Office-filer som lastes opp på mottaker-remoten. Det er ikke ønskelig ettersom Google-scripts ikke kan kjøre Office-filer. |
OBS: les ALT av tekst under før du begynner å fikse lenkene under! Det er noen viktige detaljer :)
Fiksing av lenker i filer
Du er ikke helt ferdig enda! UKA er også glad i å lenke sammen Google Sheets ved å importere et ark inn i et annet via f.eks. kommandoen IMPORTRANGE. Alle lenkene i filene du kopierte over peker nå til de originale filene, ikke de nye kopiene. Fiksen er som følger:
Fil-ID-mapping
Hver eneste fil i Google Workspace har en unik ID. For eksempel https://docs.google.com/document/d/<ID_GOES_HERE>/edit. For å erstatte de brukne lenkene må vi ha en måte å kople de gamle fil-IDene med nye fil-IDer. Igjen kan vi bruke rclone til dette formålet. Med kommandoen
rclone -v –drive-impersonate ukeperson@uka.no lsjson uka-eller-samf-remote:/RotMappe/ –recursive –drive-skip-shortcuts
får vi ut en JSON som inneholder full filsti (relativt til RotMappe) og fil-ID. Deretter kjører vi et par hjemmesnekra perl-skripts (de ligger i ~mikkeab/uka_migration/) som kan hente ut alle fil-ID-er og lage en kopling fra gammel til ny fil-ID ved å sammenligne filstiene. Merk at vi kun bryr oss om Google Sheets / Document-filer her, alt annet kan nok trygt ignoreres og fungerer uansett ikke med Google Scripts.
Fil-ID-erstatning
Erstatningen av gamle ID-er med nye ID-er gjøres av et Google Apps Script, som er JavaScript med sukker på. Her kan vi gå gjennom alle fil-IDene til de filene vi må se på (hentet ut fra forrige seksjon), gjøre litt regex-matching, og så erstatte ID-ene basert på mappingen vi fant ovenfor. IMPORTRANGE, funksjonen som henter inn deler av et annet regneark må også eksplisitt gi tillatelse for å koble regnearkene sammen, det håndterer også skriptet.
Ett problem: når du overfører filene som ukesjef@uka.no i rclone blir han satt som eier av filen; det betyr at du ikke har tillatelse til å endre på beskyttede områder i Google Sheets-ene. Løsningen jeg har funnet er derfor å kopiere alle filene to ganger: først som UKEsjef, så som meg selv. Ja dette virker dumt, finner du en bedre løsning så ta kontakt! Så først kopierer jeg til en midlertidig Shared Drive, og så overfører jeg alle filene til sin endelige destinasjon. Da er jeg eier av filene, og jeg kan gjøre hva jeg vil med dem.
Lenker: Start
Epost: itk@samfundet.no | Telefon: 992 15 925 | Sist endret: 2024-08-21 14:45 | Revisjon: 29 (historie, blame) | Totalt: 1899 kB | Rediger