Merge lp:~veebers/juju-ci-tools/model-migration_migration_of_models_by_superuser into lp:juju-ci-tools

Proposed by Curtis Hovey
Status: Work in progress
Proposed branch: lp:~veebers/juju-ci-tools/model-migration_migration_of_models_by_superuser
Merge into: lp:juju-ci-tools
Diff against target: 222 lines (+128/-0) (has conflicts)
1 file modified
assess_model_migration.py (+128/-0)
Text conflict in assess_model_migration.py
To merge this branch: bzr merge lp:~veebers/juju-ci-tools/model-migration_migration_of_models_by_superuser
Reviewer Review Type Date Requested Status
Juju Release Engineering Pending
Review via email: mp+312495@code.launchpad.net

Description of the change

looking

To post a comment you must log in.

Unmerged revisions

1719. By Christopher Lee

Working example.

1718. By Christopher Lee

Debugging.

1717. By Christopher Lee

Simplify creating users on controllers.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'assess_model_migration.py'
--- assess_model_migration.py 2016-12-02 18:07:25 +0000
+++ assess_model_migration.py 2016-12-05 17:55:04 +0000
@@ -42,12 +42,22 @@
42 bs1.client.enable_feature('migration')42 bs1.client.enable_feature('migration')
43 bs2.client.enable_feature('migration')43 bs2.client.enable_feature('migration')
44 bs2.client.env.juju_home = bs1.client.env.juju_home44 bs2.client.env.juju_home = bs1.client.env.juju_home
45<<<<<<< TREE
45 with bs2.existing_booted_context(args.upload_tools):46 with bs2.existing_booted_context(args.upload_tools):
46 source_client = bs1.client47 source_client = bs1.client
47 dest_client = bs2.client48 dest_client = bs2.client
48 ensure_able_to_migrate_model_between_controllers(49 ensure_able_to_migrate_model_between_controllers(
49 source_client, dest_client)50 source_client, dest_client)
51=======
52 with bs2.existing_booted_context(upload_tools):
53 source_client = bs1.client
54 dest_client = bs2.client
55 # ensure_able_to_migrate_model_between_controllers(
56 # source_client, dest_client, upload_tools)
57
58>>>>>>> MERGE-SOURCE
50 with temp_dir() as temp:59 with temp_dir() as temp:
60<<<<<<< TREE
51 ensure_migrating_with_insufficient_user_permissions_fails(61 ensure_migrating_with_insufficient_user_permissions_fails(
52 source_client, dest_client, temp)62 source_client, dest_client, temp)
53 ensure_migrating_with_superuser_user_permissions_succeeds(63 ensure_migrating_with_superuser_user_permissions_succeeds(
@@ -67,6 +77,14 @@
67 ensure_api_login_redirects(source_client, dest_client)77 ensure_api_login_redirects(source_client, dest_client)
68 ensure_migrating_to_target_and_back_to_source_succeeds(78 ensure_migrating_to_target_and_back_to_source_succeeds(
69 source_client, dest_client)79 source_client, dest_client)
80=======
81 # ensure_migrating_with_insufficient_user_permissions_fails(
82 # source_client, dest_client, upload_tools, temp)
83 # ensure_migrating_with_superuser_user_permissions_succeeds(
84 # source_client, dest_client, upload_tools, temp)
85 ensure_superuser_can_migrate_other_user_models(
86 source_client, dest_client, upload_tools, temp)
87>>>>>>> MERGE-SOURCE
7088
7189
72def parse_args(argv):90def parse_args(argv):
@@ -170,7 +188,11 @@
170188
171189
172def ensure_able_to_migrate_model_between_controllers(190def ensure_able_to_migrate_model_between_controllers(
191<<<<<<< TREE
173 source_client, dest_client):192 source_client, dest_client):
193=======
194 source_client, dest_client, upload_tools):
195>>>>>>> MERGE-SOURCE
174 """Test simple migration of a model to another controller.196 """Test simple migration of a model to another controller.
175197
176 Ensure that migration a model that has an application deployed upon it is198 Ensure that migration a model that has an application deployed upon it is
@@ -347,11 +369,17 @@
347 bundle = 'mongodb'369 bundle = 'mongodb'
348 log.info('Deploying charm')370 log.info('Deploying charm')
349 # Don't move the default model so we can reuse it in later tests.371 # Don't move the default model so we can reuse it in later tests.
372<<<<<<< TREE
350 test_model = client.add_model(client.env.clone(model_name))373 test_model = client.add_model(client.env.clone(model_name))
374=======
375 test_model = source_client.add_model(
376 source_client.env.clone('example-model'))
377>>>>>>> MERGE-SOURCE
351 test_model.juju("deploy", (bundle))378 test_model.juju("deploy", (bundle))
352 test_model.wait_for_started()379 test_model.wait_for_started()
353 test_model.wait_for_workloads()380 test_model.wait_for_workloads()
354 test_deployed_mongo_is_up(test_model)381 test_deployed_mongo_is_up(test_model)
382<<<<<<< TREE
355 return test_model383 return test_model
356384
357385
@@ -389,6 +417,22 @@
389 source_client.env.user_name, source_client.env.environment)417 source_client.env.user_name, source_client.env.environment)
390 else:418 else:
391 model_name = source_client.env.environment419 model_name = source_client.env.environment
420=======
421
422 log.info('Initiating migration process')
423
424 migration_target_client = migrate_model_to_controller(
425 test_model, dest_client)
426
427 migration_target_client.wait_for_workloads()
428 test_deployed_mongo_is_up(migration_target_client)
429 ensure_model_is_functional(migration_target_client, application)
430
431 migration_target_client.remove_service(application)
432
433
434def migrate_model_to_controller(source_client, dest_client):
435>>>>>>> MERGE-SOURCE
392 source_client.controller_juju(436 source_client.controller_juju(
393 'migrate', (model_name, dest_client.env.controller.name))437 'migrate', (model_name, dest_client.env.controller.name))
394 migration_target_client = dest_client.clone(438 migration_target_client = dest_client.clone(
@@ -504,31 +548,73 @@
504548
505549
506def ensure_migrating_with_insufficient_user_permissions_fails(550def ensure_migrating_with_insufficient_user_permissions_fails(
551<<<<<<< TREE
507 source_client, dest_client, tmp_dir):552 source_client, dest_client, tmp_dir):
553=======
554 source_client, dest_client, upload_tools, tmp_dir):
555>>>>>>> MERGE-SOURCE
508 """Ensure migration fails when a user does not have the right permissions.556 """Ensure migration fails when a user does not have the right permissions.
509557
510 A non-superuser on a controller cannot migrate their models between558 A non-superuser on a controller cannot migrate their models between
511 controllers.559 controllers.
512 """560 """
561<<<<<<< TREE
513 user_source_client, user_dest_client = create_user_on_controllers(562 user_source_client, user_dest_client = create_user_on_controllers(
514 source_client, dest_client, tmp_dir, 'failuser', 'addmodel')563 source_client, dest_client, tmp_dir, 'failuser', 'addmodel')
515 user_new_model = deploy_dummy_source_to_new_model(564 user_new_model = deploy_dummy_source_to_new_model(
516 user_source_client, 'user-fail')565 user_source_client, 'user-fail')
566=======
567 source_user_client, dest_user_client = create_user_on_controllers(
568 source_client, dest_client, tmp_dir, 'failuser', 'addmodel')
569
570 source_client = source_user_client.add_model(
571 source_user_client.env.clone('model-a'))
572
573 charm_path = local_charm_path(
574 charm='dummy-source', juju_ver=source_client.version)
575 source_client.deploy(charm_path)
576 source_client.wait_for_started()
577
578>>>>>>> MERGE-SOURCE
517 log.info('Attempting migration process')579 log.info('Attempting migration process')
580<<<<<<< TREE
518 expect_migration_attempt_to_fail(user_new_model, user_dest_client)581 expect_migration_attempt_to_fail(user_new_model, user_dest_client)
582=======
583
584 expect_migration_attempt_to_fail(source_client, dest_user_client)
585>>>>>>> MERGE-SOURCE
519586
520587
521def ensure_migrating_with_superuser_user_permissions_succeeds(588def ensure_migrating_with_superuser_user_permissions_succeeds(
589<<<<<<< TREE
522 source_client, dest_client, tmp_dir):590 source_client, dest_client, tmp_dir):
591=======
592 source_client, dest_client, upload_tools, tmp_dir):
593>>>>>>> MERGE-SOURCE
523 """Ensure migration succeeds when a user has superuser permissions594 """Ensure migration succeeds when a user has superuser permissions
524595
525 A user with superuser permissions is able to migrate between controllers.596 A user with superuser permissions is able to migrate between controllers.
526 """597 """
598<<<<<<< TREE
527 user_source_client, user_dest_client = create_user_on_controllers(599 user_source_client, user_dest_client = create_user_on_controllers(
528 source_client, dest_client, tmp_dir, 'passuser', 'superuser')600 source_client, dest_client, tmp_dir, 'passuser', 'superuser')
529 user_new_model = deploy_dummy_source_to_new_model(601 user_new_model = deploy_dummy_source_to_new_model(
530 user_source_client, 'super-permissions')602 user_source_client, 'super-permissions')
603=======
604 source_user_client, dest_user_client = create_user_on_controllers(
605 source_client, dest_client, tmp_dir, 'passuser', 'superuser')
606
607 source_client = source_user_client.add_model(
608 source_user_client.env.clone('model-a'))
609
610 charm_path = local_charm_path(
611 charm='dummy-source', juju_ver=source_client.version)
612 source_client.deploy(charm_path)
613 source_client.wait_for_started()
614
615>>>>>>> MERGE-SOURCE
531 log.info('Attempting migration process')616 log.info('Attempting migration process')
617<<<<<<< TREE
532 migrate_model_to_controller(618 migrate_model_to_controller(
533 user_new_model, user_dest_client, include_user_name=True)619 user_new_model, user_dest_client, include_user_name=True)
534 log.info('SUCCESS: superuser migrated other user model.')620 log.info('SUCCESS: superuser migrated other user model.')
@@ -545,11 +631,53 @@
545 :param permission: String for permissions to grant user on both631 :param permission: String for permissions to grant user on both
546 controllers. Valid values are `EnvJujuClient.controller_permissions`.632 controllers. Valid values are `EnvJujuClient.controller_permissions`.
547 """633 """
634=======
635
636 migrate_model_to_controller(source_client, dest_user_client)
637
638
639def ensure_superuser_can_migrate_other_user_models(
640 source_client, dest_client, upload_tools, tmp_dir):
641
642 norm_source_client, norm_dest_client = create_user_on_controllers(
643 source_client, dest_client, tmp_dir, 'normaluser', 'addmodel')
644
645 attempt_client = norm_source_client.add_model(
646 norm_source_client.env.clone('model-a'))
647 # This is separated into a useful method in another branch.
648 bundle = 'mongodb'
649 attempt_client.juju("deploy", (bundle))
650 attempt_client.wait_for_started()
651 attempt_client.wait_for_workloads()
652 test_deployed_mongo_is_up(attempt_client)
653
654 log.info('Showing all models available.')
655 source_client.controller_juju('models', ('--all',))
656
657 model_name = '{}/{}'.format(
658 norm_source_client.env.user_name, attempt_client.env.environment)
659 source_client.controller_juju(
660 'migrate', (model_name, dest_client.env.controller.name))
661
662
663def create_user_on_controllers(
664 source_client, dest_client, tmp_dir, username, permission):
665 # Create a user for both controllers that only has addmodel
666 # permissions not superuser.
667>>>>>>> MERGE-SOURCE
548 new_user_home = os.path.join(tmp_dir, username)668 new_user_home = os.path.join(tmp_dir, username)
549 os.makedirs(new_user_home)669 os.makedirs(new_user_home)
550 new_user = User(username, 'write', [])670 new_user = User(username, 'write', [])
671<<<<<<< TREE
551 source_user_client = source_client.register_user(new_user, new_user_home)672 source_user_client = source_client.register_user(new_user, new_user_home)
552 source_client.grant(new_user.name, permission)673 source_client.grant(new_user.name, permission)
674=======
675
676 source_user_client = source_client.register_user(
677 new_user, new_user_home)
678 source_client.grant(new_user.name, permission)
679
680>>>>>>> MERGE-SOURCE
553 second_controller_name = '{}_controllerb'.format(new_user.name)681 second_controller_name = '{}_controllerb'.format(new_user.name)
554 dest_user_client = dest_client.register_user(682 dest_user_client = dest_client.register_user(
555 new_user,683 new_user,

Subscribers

People subscribed via source and target branches