101
101
RETURN = '''# '''
102
102
103
103
104
- def get_profile (module , name , cluster = 'ceph' , container_image = None ):
104
+ def get_profile (name , cluster = 'ceph' , container_image = None ):
105
105
'''
106
106
Get existing profile
107
107
'''
@@ -116,16 +116,14 @@ def get_profile(module, name, cluster='ceph', container_image=None):
116
116
return cmd
117
117
118
118
119
- def create_profile (module , name , k , m , stripe_unit , crush_device_class , cluster = 'ceph' , force = False , container_image = None ): # noqa: E501
119
+ def create_profile (name , user_profile , force , cluster = 'ceph' , container_image = None ): # noqa: E501
120
120
'''
121
121
Create a profile
122
122
'''
123
123
124
- args = ['set' , name , 'k={}' .format (k ), 'm={}' .format (m )]
125
- if stripe_unit :
126
- args .append ('stripe_unit={}' .format (stripe_unit ))
127
- if crush_device_class :
128
- args .append ('crush-device-class={}' .format (crush_device_class ))
124
+ args = ['set' , name ]
125
+ for key , value in user_profile .items ():
126
+ args .append ('{}={}' .format (key , value ))
129
127
if force :
130
128
args .append ('--force' )
131
129
@@ -137,7 +135,7 @@ def create_profile(module, name, k, m, stripe_unit, crush_device_class, cluster=
137
135
return cmd
138
136
139
137
140
- def delete_profile (module , name , cluster = 'ceph' , container_image = None ):
138
+ def delete_profile (name , cluster = 'ceph' , container_image = None ):
141
139
'''
142
140
Delete a profile
143
141
'''
@@ -152,16 +150,41 @@ def delete_profile(module, name, cluster='ceph', container_image=None):
152
150
return cmd
153
151
154
152
153
+ def parse_user_profile (module ):
154
+ profile_keys = ['plugin' ,
155
+ 'k' , 'm' , 'd' , 'l' , 'c' ,
156
+ 'stripe_unit' , 'scalar_mds' , 'technique' ,
157
+ 'crush-root' , 'crush-device-class' , 'crush-failure-domain' ]
158
+
159
+ profile = {}
160
+ for key in profile_keys :
161
+ ansible_lookup_key = key .replace ('-' , '_' )
162
+ value = module .params .get (ansible_lookup_key )
163
+ if value :
164
+ profile [key ] = value
165
+
166
+ return profile
167
+
168
+
155
169
def run_module ():
156
170
module_args = dict (
157
171
cluster = dict (type = 'str' , required = False , default = 'ceph' ),
158
172
name = dict (type = 'str' , required = True ),
159
173
state = dict (type = 'str' , required = False ,
160
174
choices = ['present' , 'absent' ], default = 'present' ),
161
175
stripe_unit = dict (type = 'str' , required = False ),
162
- k = dict (type = 'str' , required = False ),
163
- m = dict (type = 'str' , required = False ),
164
- crush_device_class = dict (type = 'str' , required = False , default = '' ),
176
+ plugin = dict (type = 'str' , required = False , default = 'jerasure' ),
177
+ k = dict (type = 'int' , required = False ),
178
+ m = dict (type = 'int' , required = False ),
179
+ d = dict (type = 'int' , required = False ),
180
+ l = dict (type = 'int' , required = False ),
181
+ c = dict (type = 'int' , required = False ),
182
+ scalar_mds = dict (type = 'str' , required = False ),
183
+ technique = dict (type = 'str' , required = False ),
184
+ crush_root = dict (type = 'str' , required = False ),
185
+ crush_failure_domain = dict (type = 'str' , required = False ),
186
+ crush_device_class = dict (type = 'str' , required = False ),
187
+ force = dict (type = 'bool' , required = False , default = False ),
165
188
)
166
189
167
190
module = AnsibleModule (
@@ -174,10 +197,8 @@ def run_module():
174
197
name = module .params .get ('name' )
175
198
cluster = module .params .get ('cluster' )
176
199
state = module .params .get ('state' )
177
- stripe_unit = module .params .get ('stripe_unit' )
178
- k = module .params .get ('k' )
179
- m = module .params .get ('m' )
180
- crush_device_class = module .params .get ('crush_device_class' )
200
+ force = module .params .get ('force' )
201
+ user_profile = parse_user_profile (module )
181
202
182
203
if module .check_mode :
183
204
module .exit_json (
@@ -191,54 +212,40 @@ def run_module():
191
212
)
192
213
193
214
startd = datetime .datetime .now ()
215
+ diff = dict (before = "" , after = "" )
194
216
changed = False
195
217
196
218
# will return either the image name or None
197
219
container_image = is_containerized ()
198
220
199
221
if state == "present" :
200
- rc , cmd , out , err = exec_command (module , get_profile (module , name , cluster , container_image = container_image )) # noqa: E501
222
+ rc , cmd , out , err = exec_command (module , get_profile (name , cluster , container_image = container_image )) # noqa: E501
223
+ current_profile = {}
201
224
if rc == 0 :
202
- # the profile already exists, let's check whether we have to
203
- # update it
204
225
current_profile = json .loads (out )
205
- if current_profile ['k' ] != k or \
206
- current_profile ['m' ] != m or \
207
- current_profile .get ('stripe_unit' , stripe_unit ) != stripe_unit or \
208
- current_profile .get ('crush-device-class' , crush_device_class ) != crush_device_class : # noqa: E501
209
- rc , cmd , out , err = exec_command (module ,
210
- create_profile (module ,
211
- name ,
212
- k ,
213
- m ,
214
- stripe_unit ,
215
- crush_device_class , # noqa: E501
216
- cluster ,
217
- force = True , container_image = container_image )) # noqa: E501
218
- changed = True
219
- else :
220
- # the profile doesn't exist, it has to be created
221
- rc , cmd , out , err = exec_command (module , create_profile (module ,
222
- name ,
223
- k ,
224
- m ,
225
- stripe_unit , # noqa: E501
226
- crush_device_class , # noqa: E501
227
- cluster ,
228
- container_image = container_image )) # noqa: E501
229
- if rc == 0 :
230
- changed = True
226
+
227
+ changed = current_profile != user_profile
228
+ if changed :
229
+ diff ['before' ] = json .dumps (current_profile )
230
+ diff ['after' ] = json .dumps (user_profile )
231
+ rc , cmd , out , err = exec_command (module ,
232
+ create_profile (name ,
233
+ user_profile ,
234
+ force ,
235
+ cluster ,
236
+ container_image = container_image ),
237
+ check_rc = True )
231
238
232
239
elif state == "absent" :
233
- rc , cmd , out , err = exec_command (module , delete_profile (module , name , cluster , container_image = container_image )) # noqa: E501
240
+ rc , cmd , out , err = exec_command (module , delete_profile (name , cluster , container_image = container_image )) # noqa: E501
234
241
if not err :
235
242
out = 'Profile {} removed.' .format (name )
236
243
changed = True
237
244
else :
238
245
rc = 0
239
246
out = "Skipping, the profile {} doesn't exist" .format (name )
240
247
241
- exit_module (module = module , out = out , rc = rc , cmd = cmd , err = err , startd = startd , changed = changed ) # noqa: E501
248
+ exit_module (module = module , out = out , rc = rc , cmd = cmd , err = err , startd = startd , changed = changed , diff = diff ) # noqa: E501
242
249
243
250
244
251
def main ():
0 commit comments