Bir önceki yazımızda kullanıcı durumları aşağıdaki gibiydi:
Öncelikle bağlantı kodumuzu bir python scripti şeklinde oluşturalım. Mesela cloud_connection.py. Sonrasında aşağıdaki kod parçasını bu bağlantı dosyaya yazalım.
import pprint
import openstack
# Initialize PP and turn on OpenStack debug logging
pp = pprint.PrettyPrinter(indent=4)
openstack.enable_logging(debug=False)
# Initialize connection
connold = openstack.connect(cloud='oldstack')
connnew = openstack.connect(cloud='newstack')
Sonrasında kullanıcı taşıma işlemi için cloud_connection.py ile aynı klasörde yeni bir python scripti oluşturalım. Bu ilk taşıma aşamamız olduğu için adı 1_user_migration.py olsun. Bu aşamada yapacağımız işlem oldstack üzerinden kullanıcı bilgilerini okuyup, newstack üzerinde edindiğimiz bu bilgilerle aynı kullanıcıyı yeniden oluşturmak olacak. Buna mevcut cloud_connection.py scriptinden ihtiyacımız olan parçaları import ederek başlayalım.
from cloud_connection import connnew, connold , pp
Bu süreçte taşımayı yaparken belki birden fazla kullanıcıyı taşımak isteyebiliriz, veya bazı kullanıcıları taşımak istemeyebiliriz. Ayrıca newstack üzerinde oluşturacağımız kullancılara bir şifre de belirlememiz gerekecek. Bu sebeple yapımızın başlangıcını aşağıdaki gibi kuralım.
# --------------------------------------------------------------------------------- #
# USERS TO / NOT TO MIGRATE
# If users_to_migrate is empty, script migrates every user that is not in
# users_to_filter list to destination
users_to_migrate = [
]
users_to_filter = [
'cinder',
'glance',
'heat_domain_admin',
'heat',
'neutron',
'nova',
'admin',
'placement',
'ceilometer'
]
# USERS TO / NOT TO MIGRATE
# --------------------------------------------------------------------------------- #
# --------------------------------------------------------------------------------- #
# NEW USER PASSWORD
new_password = "123456"
# NEW USER PASSWORD
# --------------------------------------------------------------------------------- #
users_to_migrate listemiz içine taşımak istediğimiz kullanıcı isimlerini yazarak sadece o kullanıcıları taşıyabiliriz, fakat amacımız filtrelenen kullanıcılar haricindeki her kullanıcıyı taşımak olacak. Mevcut durumumuzda filtrelenmemiş tek kullanıcı var o da deneme_user. Bütün oldstack kullanıcılarını dönerek bu filtreleri deneyecek ve uyanları taşıyacağız. Bunu da aşağıdaki kod parçası ile sağlayacağız.
for user in connold.identity.users():
user = user.to_dict()
should_filter = False
# Check If User Should NOT Migrate
if user['name'] in users_to_filter:
should_filter = True
if users_to_migrate:
if user['name'] not in users_to_migrate:
should_filter = True
# Continue Loop
if should_filter:
continue
# Print Migrating User Details
print("----------------------------------------------------------")
pp.pprint(user)
print("----------------------------------------------------------")
print("USER: ", user['name'], " ID: ", user['id'], " will be migrated..." )
print("----------------------------------------------------------")
# Create New User Details
c_user_attrs = {
"name": user["name"],
"description": user["description"],
"email": user["email"],
"is_enabled": user["is_enabled"],
"password": new_password
}
# Create New User on Destination OpenStack
new_user = connnew.identity.create_user(**c_user_attrs)
new_user = new_user.to_dict()
# Print Migrating User Details
print("-----------------NEW USER DETAILS----------------------")
pp.pprint(user)
print("----------------------------------------------------------")
Kodu koştuğumuzda bu çıktıyı verecek.
----------------------------------------------------------
{ 'default_project_id': '5b656fc728104f97a0d6b8c1e0ac8ed2',
'description': 'Deneme User',
'domain_id': 'default',
'email': '[email protected]',
'id': '65135f083b974ab38bbb032828eb039b',
'is_enabled': True,
'links': { 'self': 'http://172.16.0.10:5000/v3/users/65135f083b974ab38bbb032828eb039b'},
'location': Munch({'cloud': 'oldstack', 'region_name': 'RegionOne', 'zone': None, 'project': Munch({'id': '7525ce2c81a24e87a202dae3c99f3b56', 'name': 'admin', 'domain_id': None, 'domain_name': 'Default'})}),
'name': 'deneme_user',
'password': None,
'password_expires_at': None}
----------------------------------------------------------
USER: deneme_user ID: 65135f083b974ab38bbb032828eb039b will be migrated...
----------------------------------------------------------
-----------------NEW USER DETAILS----------------------
{ 'default_project_id': '5b656fc728104f97a0d6b8c1e0ac8ed2',
'description': 'Deneme User',
'domain_id': 'default',
'email': '[email protected]',
'id': '65135f083b974ab38bbb032828eb039b',
'is_enabled': True,
'links': { 'self': 'http://172.16.0.10:5000/v3/users/65135f083b974ab38bbb032828eb039b'},
'location': Munch({'cloud': 'oldstack', 'region_name': 'RegionOne', 'zone': None, 'project': Munch({'id': '7525ce2c81a24e87a202dae3c99f3b56', 'name': 'admin', 'domain_id': None, 'domain_name': 'Default'})}),
'name': 'deneme_user',
'password': None,
'password_expires_at': None}
----------------------------------------------------------
Farklı bir id ile aynı detaylara sahip kullanıcımız oluştur. Emin olmak için cli komutu koşarak deneme_user adlı kullanıcımızın newstack tarafında olduğunu kontrol edelim.
erdem@EWUL:~$ openstack --os-cloud newstack user list
+----------------------------------+-------------------+
| ID | Name |
+----------------------------------+-------------------+
| ce911f6f97bc4edead28f10d2ed394ee | admin |
| 1e20632f0e7c4f70b22e1b9412e6bca3 | glance |
| 6e7743f268b14ebca52f9859ca79bd94 | cinder |
| e19c7f206f6b40bca5c75d1c98eee828 | placement |
| af4c516502334ad8a9a7070bf3a6592e | nova |
| 9584b3c922ce4330b066ffb48eedcd34 | neutron |
| 321f8908e3754f93b2d3e6bdbf758f91 | heat |
| 4fe818ccd76f4ab4812d789cc7f4358a | heat_domain_admin |
| 415cbda201ff4f0db64d0ddbfb798b2f | deneme_user |
+----------------------------------+-------------------+
Evet oldstack tarafından bir kullanıcıyı newstack tarafına başarıyla aktardık. Kullanıcı taşıma işleri buraya kadar, artık Proje Göçü aşamasına geçebiliriz.
OpenStack'ten OpenStack'e Göç:
- Yazı Dizisi
- Kurulum Bilgileri
- Hazırlık
- Kullanıcı Göçü
- Proje Göçü
- Nitelik Göçü
- Güvenlik Göçü
- Ağ Göçü
- Devam Edecek..
Referanslar:
Teşekkür:
Ana fotoğraf: Jordi Fernandez orjinaline Unsplash üzerinden ulaşabilirsiniz.