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
1=== modified file 'assess_model_migration.py'
2--- assess_model_migration.py 2016-12-02 18:07:25 +0000
3+++ assess_model_migration.py 2016-12-05 17:55:04 +0000
4@@ -42,12 +42,22 @@
5 bs1.client.enable_feature('migration')
6 bs2.client.enable_feature('migration')
7 bs2.client.env.juju_home = bs1.client.env.juju_home
8+<<<<<<< TREE
9 with bs2.existing_booted_context(args.upload_tools):
10 source_client = bs1.client
11 dest_client = bs2.client
12 ensure_able_to_migrate_model_between_controllers(
13 source_client, dest_client)
14+=======
15+ with bs2.existing_booted_context(upload_tools):
16+ source_client = bs1.client
17+ dest_client = bs2.client
18+ # ensure_able_to_migrate_model_between_controllers(
19+ # source_client, dest_client, upload_tools)
20+
21+>>>>>>> MERGE-SOURCE
22 with temp_dir() as temp:
23+<<<<<<< TREE
24 ensure_migrating_with_insufficient_user_permissions_fails(
25 source_client, dest_client, temp)
26 ensure_migrating_with_superuser_user_permissions_succeeds(
27@@ -67,6 +77,14 @@
28 ensure_api_login_redirects(source_client, dest_client)
29 ensure_migrating_to_target_and_back_to_source_succeeds(
30 source_client, dest_client)
31+=======
32+ # ensure_migrating_with_insufficient_user_permissions_fails(
33+ # source_client, dest_client, upload_tools, temp)
34+ # ensure_migrating_with_superuser_user_permissions_succeeds(
35+ # source_client, dest_client, upload_tools, temp)
36+ ensure_superuser_can_migrate_other_user_models(
37+ source_client, dest_client, upload_tools, temp)
38+>>>>>>> MERGE-SOURCE
39
40
41 def parse_args(argv):
42@@ -170,7 +188,11 @@
43
44
45 def ensure_able_to_migrate_model_between_controllers(
46+<<<<<<< TREE
47 source_client, dest_client):
48+=======
49+ source_client, dest_client, upload_tools):
50+>>>>>>> MERGE-SOURCE
51 """Test simple migration of a model to another controller.
52
53 Ensure that migration a model that has an application deployed upon it is
54@@ -347,11 +369,17 @@
55 bundle = 'mongodb'
56 log.info('Deploying charm')
57 # Don't move the default model so we can reuse it in later tests.
58+<<<<<<< TREE
59 test_model = client.add_model(client.env.clone(model_name))
60+=======
61+ test_model = source_client.add_model(
62+ source_client.env.clone('example-model'))
63+>>>>>>> MERGE-SOURCE
64 test_model.juju("deploy", (bundle))
65 test_model.wait_for_started()
66 test_model.wait_for_workloads()
67 test_deployed_mongo_is_up(test_model)
68+<<<<<<< TREE
69 return test_model
70
71
72@@ -389,6 +417,22 @@
73 source_client.env.user_name, source_client.env.environment)
74 else:
75 model_name = source_client.env.environment
76+=======
77+
78+ log.info('Initiating migration process')
79+
80+ migration_target_client = migrate_model_to_controller(
81+ test_model, dest_client)
82+
83+ migration_target_client.wait_for_workloads()
84+ test_deployed_mongo_is_up(migration_target_client)
85+ ensure_model_is_functional(migration_target_client, application)
86+
87+ migration_target_client.remove_service(application)
88+
89+
90+def migrate_model_to_controller(source_client, dest_client):
91+>>>>>>> MERGE-SOURCE
92 source_client.controller_juju(
93 'migrate', (model_name, dest_client.env.controller.name))
94 migration_target_client = dest_client.clone(
95@@ -504,31 +548,73 @@
96
97
98 def ensure_migrating_with_insufficient_user_permissions_fails(
99+<<<<<<< TREE
100 source_client, dest_client, tmp_dir):
101+=======
102+ source_client, dest_client, upload_tools, tmp_dir):
103+>>>>>>> MERGE-SOURCE
104 """Ensure migration fails when a user does not have the right permissions.
105
106 A non-superuser on a controller cannot migrate their models between
107 controllers.
108 """
109+<<<<<<< TREE
110 user_source_client, user_dest_client = create_user_on_controllers(
111 source_client, dest_client, tmp_dir, 'failuser', 'addmodel')
112 user_new_model = deploy_dummy_source_to_new_model(
113 user_source_client, 'user-fail')
114+=======
115+ source_user_client, dest_user_client = create_user_on_controllers(
116+ source_client, dest_client, tmp_dir, 'failuser', 'addmodel')
117+
118+ source_client = source_user_client.add_model(
119+ source_user_client.env.clone('model-a'))
120+
121+ charm_path = local_charm_path(
122+ charm='dummy-source', juju_ver=source_client.version)
123+ source_client.deploy(charm_path)
124+ source_client.wait_for_started()
125+
126+>>>>>>> MERGE-SOURCE
127 log.info('Attempting migration process')
128+<<<<<<< TREE
129 expect_migration_attempt_to_fail(user_new_model, user_dest_client)
130+=======
131+
132+ expect_migration_attempt_to_fail(source_client, dest_user_client)
133+>>>>>>> MERGE-SOURCE
134
135
136 def ensure_migrating_with_superuser_user_permissions_succeeds(
137+<<<<<<< TREE
138 source_client, dest_client, tmp_dir):
139+=======
140+ source_client, dest_client, upload_tools, tmp_dir):
141+>>>>>>> MERGE-SOURCE
142 """Ensure migration succeeds when a user has superuser permissions
143
144 A user with superuser permissions is able to migrate between controllers.
145 """
146+<<<<<<< TREE
147 user_source_client, user_dest_client = create_user_on_controllers(
148 source_client, dest_client, tmp_dir, 'passuser', 'superuser')
149 user_new_model = deploy_dummy_source_to_new_model(
150 user_source_client, 'super-permissions')
151+=======
152+ source_user_client, dest_user_client = create_user_on_controllers(
153+ source_client, dest_client, tmp_dir, 'passuser', 'superuser')
154+
155+ source_client = source_user_client.add_model(
156+ source_user_client.env.clone('model-a'))
157+
158+ charm_path = local_charm_path(
159+ charm='dummy-source', juju_ver=source_client.version)
160+ source_client.deploy(charm_path)
161+ source_client.wait_for_started()
162+
163+>>>>>>> MERGE-SOURCE
164 log.info('Attempting migration process')
165+<<<<<<< TREE
166 migrate_model_to_controller(
167 user_new_model, user_dest_client, include_user_name=True)
168 log.info('SUCCESS: superuser migrated other user model.')
169@@ -545,11 +631,53 @@
170 :param permission: String for permissions to grant user on both
171 controllers. Valid values are `EnvJujuClient.controller_permissions`.
172 """
173+=======
174+
175+ migrate_model_to_controller(source_client, dest_user_client)
176+
177+
178+def ensure_superuser_can_migrate_other_user_models(
179+ source_client, dest_client, upload_tools, tmp_dir):
180+
181+ norm_source_client, norm_dest_client = create_user_on_controllers(
182+ source_client, dest_client, tmp_dir, 'normaluser', 'addmodel')
183+
184+ attempt_client = norm_source_client.add_model(
185+ norm_source_client.env.clone('model-a'))
186+ # This is separated into a useful method in another branch.
187+ bundle = 'mongodb'
188+ attempt_client.juju("deploy", (bundle))
189+ attempt_client.wait_for_started()
190+ attempt_client.wait_for_workloads()
191+ test_deployed_mongo_is_up(attempt_client)
192+
193+ log.info('Showing all models available.')
194+ source_client.controller_juju('models', ('--all',))
195+
196+ model_name = '{}/{}'.format(
197+ norm_source_client.env.user_name, attempt_client.env.environment)
198+ source_client.controller_juju(
199+ 'migrate', (model_name, dest_client.env.controller.name))
200+
201+
202+def create_user_on_controllers(
203+ source_client, dest_client, tmp_dir, username, permission):
204+ # Create a user for both controllers that only has addmodel
205+ # permissions not superuser.
206+>>>>>>> MERGE-SOURCE
207 new_user_home = os.path.join(tmp_dir, username)
208 os.makedirs(new_user_home)
209 new_user = User(username, 'write', [])
210+<<<<<<< TREE
211 source_user_client = source_client.register_user(new_user, new_user_home)
212 source_client.grant(new_user.name, permission)
213+=======
214+
215+ source_user_client = source_client.register_user(
216+ new_user, new_user_home)
217+ source_client.grant(new_user.name, permission)
218+
219+>>>>>>> MERGE-SOURCE
220 second_controller_name = '{}_controllerb'.format(new_user.name)
221 dest_user_client = dest_client.register_user(
222 new_user,

Subscribers

People subscribed via source and target branches