VM jogosultság automatikusan
Néhány bejegyzéssel korábban igértem, hogy bemutatom egy cikkben, miként lehet a vCenter Server adatbázisán keresztül automatikusan VI hozzáférést adni Kollégáknak az általuk felügyelt virtuális szerverekhez.
Feladat a következő: egy adatbázisban már egyébként is nyilván tartom szervereimet, azok funkciójával, illetve gazdájával. Az a cél, hogy az itt tárolt szervergazda automatikusan kapjon a VMware infrastruktúrában jogot a szerveréhez, amivel a VMware adminisztrátor munkáját is csökkentettük, illetve a VI klienssel bejelentkező szervergazda menedzselni tudja virtuális szervereit is.
Először is nézzük milyen formában tárolom a szervereket és gazdáikat:
from ServerInfo.dbo.ServerAdmins
where Szervergazda = ‘Sárándi Attila’
Keressük ki a VPX_ROLE táblából a “VirtualMachineAdministrator” jogosultsághoz tartozó ID-t, ez fog kelleni a későbbiekben:
Megnézhetjük jelenleg melyik szerverhez, melyik Kollégának van meg a keresett joga:
select dbo.VPX_ENTITY.NAME, dbo.VPX_ACCESS.PRINCIPALfrom dbo.VPX_ENTITY
left outer join dbo.VPX_ACCESS
on dbo.VPX_ENTITY.ID = dbo.VPX_ACCESS.ENTITY_ID
where dbo.VPX_ACCESS.ROLE_ID = 1 — role_id
and dbo.VPX_ENTITY.”TYPE_ID” = 0 –virt.gépek típusa
A következő lépésben már összekapcsoljuk a ServerAdmins táblát a vCenter megfelelő tábláival, hogy ellenőrízhessük a megfelelő embernek megvan-e a joga:
select A.Host, A.Szervergazda_Login,
VPX.dbo.VPX_ACCESS.PRINCIPAL as Admin_in_VMware
from (select VPX.dbo.VPX_ENTITY.ID, VPX.dbo.VPX_ENTITY.NAME as Host,
‘MOL\’ + ServerInfo.dbo.ServerAdmins.SAMAccName as Szervergazda_Login
from VPX.dbo.VPX_ENTITY, ServerInfo.dbo.ServerAdmins
where VPX.dbo.VPX_ENTITY.NAME = ServerInfo.dbo.ServerAdmins.Host
and VPX.dbo.VPX_ENTITY.”TYPE_ID” = 0) A left outer join VPX.dbo.VPX_ACCESS
on (A.ID = VPX.dbo.VPX_ACCESS.ENTITY_ID) and (A.Szervergazda_Login = VPX.dbo.VPX_ACCESS.PRINCIPAL)
Sok a NULL a jobb szélső oszlopban, azaz sok szervergazdának nincs meg a szükséges VMware-es joga, ami ellen tennünk kell. Jogosultságot nemes egyszerűséggel úgy tudunk adni, hogy a VPX_ACCESS táblába be kell szúrni egy sort. Az alábbi értékekkel:
ENTITY_ID: a vCenter központi táblájának (VPX_ENTITY) ID mezője, az adott virt.gép sorában
ROLE_ID: VPX_ROLE táblából az adni kívánt jog ID-ja, esetünkben 1
PRINCIPAL: a jogosultság kedvezményezettjének login-ja
FLAG: ha a PRINCIPAL felhasználói account, akkor 1, ha csoport account, akkor 3
select C.NEXT_ID,
‘MOL\’ + B.SAMAccName,
1,
A.ID,
1
from VPX.dbo.VPX_ENTITY A, ServerInfo.dbo.ServerAdmins B,
(select max(ID)+1 as NEXT_ID from VPX.dbo.VPX_ACCESS) C
where A.NAME = B.Host
and A.”TYPE_ID” = 0
Már készen is lennénk, de tekintettel kell lennünk arra, hogy ha másodjára akarjuk a fenti SQL-t futtatni hibaüzenetet fogunk kapni vagy dupla bejegyzést hozunk létre, mert már meglévő rekordok lesznek a VPX_ACCESS táblában – ezért gondoskodni kell a meglévő rekordok törléséről. Ha adatbáziskezelőnk támogatja az “INSERT or UPDATE” SQL szintaxist, akkor nem kell a törléssel foglalkoznunk, nekem sajnos kell, mert az itt alkalmazott MS SQL – ha jól tudom – nem támogatja ezt:(
delete from VPX.dbo.VPX_ACCESSwhere ROLE_ID = 1
and FLAG = 1
and convert(varchar, ENTITY_ID) + ‘—’ + PRINCIPAL in
(select convert(varchar, A.ID) + ‘—’ + VPX.dbo.VPX_ACCESS.PRINCIPAL
from
(select VPX.dbo.VPX_ENTITY.ID,
VPX.dbo.VPX_ENTITY.NAME,
‘MOL\’ + ServerInfo.dbo.ServerAdmins.SAMAccName as ServerInfo_SAMAccName
from VPX.dbo.VPX_ENTITY, ServerInfo.dbo.ServerAdmins
where VPX.dbo.VPX_ENTITY.NAME = ServerInfo.dbo.ServerAdmins.Host
and VPX.dbo.VPX_ENTITY.”TYPE_ID” = 0) A
left outer join VPX.dbo.VPX_ACCESS
on A.ID = VPX.dbo.VPX_ACCESS.ENTITY_ID
where A.ServerInfo_SAMAccName = VPX.dbo.VPX_ACCESS.PRINCIPAL
Nincs más dolgunk, mint beütemezni a két utolsó DELETE és INSERT SQL parancsot (fontos a sorrend;) ), az adatforrás ServerInfo tábla töltési idejét és gyakoriságát figyelmbe véve. Fontos, hogy a vCenter adatbázis külső módosítása csak akkor jut érvényre, ha újraindítjuk a vCenter Server szolgáltatást! Ha a fenti SQL-ekben hangolható részt találtok, kérem a comment-be adjátok közre.
…és persze csak a vCenter adatbázis mentése után adjuk ki az INSERT/DELETE parancsokat!!!
Remélem hasznosnak találtátok a cikket, a következőben azt használjuk fel, hogy a ServerAdmins tábla a szerverről egyéb információt is tárol (pl. a rajta futó alkalmazás nevét), amit a fentiekhez hasonló egyszerűséggel lehet betölteni a vCenter adatbázisába pl. custom tag-ként.



