Skip to content

Commit 50a83cb

Browse files
committed
feat: add --fsid and --config to cephadm commands
It has been noticed that if you add `--fsid` and `--config` it can speed up the time to execute commands as it avoids having to look up this information. Signed-off-by: Jack Hodgkiss <jack@stackhpc.com>
1 parent 7da4bd4 commit 50a83cb

15 files changed

Lines changed: 200 additions & 64 deletions

File tree

plugins/module_utils/cephadm_common.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,31 @@
2020
import datetime
2121

2222

23-
def generate_ceph_cmd(sub_cmd, args):
23+
def generate_ceph_cmd(sub_cmd, args, image=None, fsid=None, hostname=None):
2424
'''
2525
Generate 'ceph' command line to execute
2626
'''
27-
2827
cmd = [
2928
'cephadm',
3029
'--timeout',
3130
'60',
32-
'shell',
33-
'--',
34-
'ceph',
3531
]
32+
33+
if image:
34+
cmd.extend(['--image', image])
35+
36+
cmd.append('shell')
37+
38+
if fsid:
39+
cmd.extend(['--fsid', fsid])
40+
41+
if fsid and hostname:
42+
cmd.extend([
43+
'--config',
44+
'/var/lib/ceph/{}/mon.{}/config'.format(fsid, hostname),
45+
])
46+
47+
cmd.extend(['--', 'ceph'])
3648
cmd.extend(sub_cmd + args)
3749

3850
return cmd

plugins/modules/cephadm_crush_rule.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,9 @@ def create_rule(module, container_image=None):
124124
bucket_root = module.params.get('bucket_root')
125125
bucket_type = module.params.get('bucket_type')
126126
device_class = module.params.get('device_class')
127+
image = module.params.get('image')
128+
fsid = module.params.get('fsid')
129+
hostname = module.params.get('hostname')
127130
profile = module.params.get('profile')
128131

129132
if rule_type == 'replicated':
@@ -135,8 +138,9 @@ def create_rule(module, container_image=None):
135138
if profile:
136139
args.append(profile)
137140

138-
cmd = generate_ceph_cmd(['osd', 'crush', 'rule'],
139-
args)
141+
cmd = generate_ceph_cmd(subcmd=['osd', 'crush', 'rule'],
142+
image=image, fsid=fsid, hostname=hostname,
143+
args=args)
140144

141145
return cmd
142146

@@ -147,11 +151,15 @@ def get_rule(module, container_image=None):
147151
'''
148152

149153
name = module.params.get('name')
154+
image = module.params.get('image')
155+
fsid = module.params.get('fsid')
156+
hostname = module.params.get('hostname')
150157

151158
args = ['dump', name, '--format=json']
152159

153-
cmd = generate_ceph_cmd(['osd', 'crush', 'rule'],
154-
args)
160+
cmd = generate_ceph_cmd(subcmd=['osd', 'crush', 'rule'],
161+
image=image, fsid=fsid, hostname=hostname,
162+
args=args)
155163

156164
return cmd
157165

@@ -162,11 +170,15 @@ def remove_rule(module, container_image=None):
162170
'''
163171

164172
name = module.params.get('name')
173+
image = module.params.get('image')
174+
fsid = module.params.get('fsid')
175+
hostname = module.params.get('hostname')
165176

166177
args = ['rm', name]
167178

168-
cmd = generate_ceph_cmd(['osd', 'crush', 'rule'],
169-
args)
179+
cmd = generate_ceph_cmd(subcmd=['osd', 'crush', 'rule'],
180+
image=image, fsid=fsid, hostname=hostname,
181+
args=args)
170182

171183
return cmd
172184

@@ -181,7 +193,10 @@ def main():
181193
bucket_type=dict(type='str', required=False, choices=['osd', 'host', 'chassis', 'rack', 'row', 'pdu', 'pod', # noqa: E501
182194
'room', 'datacenter', 'zone', 'region', 'root']), # noqa: E501
183195
device_class=dict(type='str', required=False),
184-
profile=dict(type='str', required=False)
196+
profile=dict(type='str', required=False),
197+
image=dict(type='str', required=False),
198+
fsid=dict(type='str', required=False),
199+
hostname=dict(type='str', required=False)
185200
),
186201
supports_check_mode=True,
187202
required_if=[

plugins/modules/cephadm_ec_profile.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,20 +119,21 @@
119119
RETURN = '''# '''
120120

121121

122-
def get_profile(module, name):
122+
def get_profile(module, name, image=None, fsid=None, hostname=None):
123123
'''
124124
Get existing profile
125125
'''
126126

127127
args = ['get', name, '--format=json']
128128

129129
cmd = generate_ceph_cmd(sub_cmd=['osd', 'erasure-code-profile'],
130+
image=image, fsid=fsid, hostname=hostname,
130131
args=args)
131132

132133
return cmd
133134

134135

135-
def create_profile(module, name, k, m, stripe_unit, crush_device_class, crush_failure_domain, directory, plugin, force=False): # noqa: E501
136+
def create_profile(module, name, k, m, stripe_unit, crush_device_class, crush_failure_domain, directory, plugin, image=None, fsid=None, hostname=None, force=False): # noqa: E501
136137
'''
137138
Create a profile
138139
'''
@@ -152,19 +153,21 @@ def create_profile(module, name, k, m, stripe_unit, crush_device_class, crush_fa
152153
args.append('--force')
153154

154155
cmd = generate_ceph_cmd(sub_cmd=['osd', 'erasure-code-profile'],
156+
image=image, fsid=fsid, hostname=hostname,
155157
args=args)
156158

157159
return cmd
158160

159161

160-
def delete_profile(module, name):
162+
def delete_profile(module, name, image=None, fsid=None, hostname=None,):
161163
'''
162164
Delete a profile
163165
'''
164166

165167
args = ['rm', name]
166168

167169
cmd = generate_ceph_cmd(sub_cmd=['osd', 'erasure-code-profile'],
170+
image=image, fsid=fsid, hostname=hostname,
168171
args=args)
169172

170173
return cmd
@@ -182,6 +185,9 @@ def run_module():
182185
crush_failure_domain=dict(type='str', required=False),
183186
directory=dict(type='str', required=False),
184187
plugin=dict(type='str', required=False),
188+
image=dict(type='str', required=False),
189+
fsid=dict(type='str', required=False),
190+
hostname=dict(type='str', required=False)
185191
)
186192

187193
module = AnsibleModule(
@@ -200,6 +206,9 @@ def run_module():
200206
crush_failure_domain = module.params.get('crush_failure_domain')
201207
directory = module.params.get('directory')
202208
plugin = module.params.get('plugin')
209+
image = module.params.get('image')
210+
fsid = module.params.get('fsid')
211+
hostname = module.params.get('hostname')
203212

204213
if module.check_mode:
205214
module.exit_json(
@@ -216,7 +225,7 @@ def run_module():
216225
changed = False
217226

218227
if state == "present":
219-
rc, cmd, out, err = exec_command(module, get_profile(module, name)) # noqa: E501
228+
rc, cmd, out, err = exec_command(module, get_profile(module, name, image, fsid, hostname)) # noqa: E501
220229
if rc == 0:
221230
# the profile already exists, let's check whether we have to
222231
# update it
@@ -238,6 +247,9 @@ def run_module():
238247
crush_failure_domain,
239248
directory,
240249
plugin,
250+
image,
251+
fsid,
252+
hostname,
241253
force=True)) # noqa: E501
242254
changed = True
243255
else:
@@ -250,12 +262,15 @@ def run_module():
250262
crush_device_class, # noqa: E501
251263
crush_failure_domain,
252264
directory,
265+
image,
266+
fsid,
267+
hostname,
253268
plugin))
254269
if rc == 0:
255270
changed = True
256271

257272
elif state == "absent":
258-
rc, cmd, out, err = exec_command(module, delete_profile(module, name)) # noqa: E501
273+
rc, cmd, out, err = exec_command(module, delete_profile(module, name, image, fsid, hostname)) # noqa: E501
259274
if not err:
260275
out = 'Profile {0} removed.'.format(name)
261276
changed = True

plugins/modules/cephadm_key.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ def generate_caps(caps):
132132
return caps_cli
133133

134134

135-
def create_key(name, caps): # noqa: E501
135+
def create_key(name, caps, image=None, fsid=None, hostname=None): # noqa: E501
136136
'''
137137
Create a CephX key
138138
'''
@@ -145,12 +145,13 @@ def create_key(name, caps): # noqa: E501
145145

146146
args.extend(generate_caps(caps))
147147
cmd.append(generate_ceph_cmd(sub_cmd=['auth'],
148+
image=image, fsid=fsid, hostname=hostname,
148149
args=args))
149150

150151
return cmd
151152

152153

153-
def update_key(name, caps):
154+
def update_key(name, caps, image=None, fsid=None, hostname=None):
154155
'''
155156
Update the caps of a CephX key
156157
'''
@@ -163,12 +164,13 @@ def update_key(name, caps):
163164
]
164165
args.extend(generate_caps(caps))
165166
cmd.append(generate_ceph_cmd(sub_cmd=['auth'],
167+
image=image, fsid=fsid, hostname=hostname,
166168
args=args))
167169

168170
return cmd
169171

170172

171-
def delete_key(name):
173+
def delete_key(name, image=None, fsid=None, hostname=None,):
172174
'''
173175
Delete a CephX key
174176
'''
@@ -181,12 +183,13 @@ def delete_key(name):
181183
]
182184

183185
cmd.append(generate_ceph_cmd(sub_cmd=['auth'],
186+
image=image, fsid=fsid, hostname=hostname,
184187
args=args))
185188

186189
return cmd
187190

188191

189-
def get_key(name, dest):
192+
def get_key(name, dest, image=None, fsid=None, hostname=None):
190193
'''
191194
Get a CephX key (write on the filesystem)
192195
'''
@@ -201,12 +204,13 @@ def get_key(name, dest):
201204
]
202205

203206
cmd.append(generate_ceph_cmd(sub_cmd=['auth'],
207+
image=image, fsid=fsid, hostname=hostname,
204208
args=args))
205209

206210
return cmd
207211

208212

209-
def info_key(name, output_format):
213+
def info_key(name, output_format, image=None, fsid=None, hostname=None):
210214
'''
211215
Get information about a CephX key
212216
'''
@@ -221,12 +225,13 @@ def info_key(name, output_format):
221225
]
222226

223227
cmd_list.append(generate_ceph_cmd(sub_cmd=['auth'],
228+
image=image, fsid=fsid, hostname=hostname,
224229
args=args))
225230

226231
return cmd_list
227232

228233

229-
def list_keys():
234+
def list_keys(image=None, fsid=None, hostname=None):
230235
'''
231236
List all CephX keys
232237
'''
@@ -240,6 +245,7 @@ def list_keys():
240245
]
241246

242247
cmd.append(generate_ceph_cmd(sub_cmd=['auth'],
248+
image=image, fsid=fsid, hostname=hostname,
243249
args=args))
244250

245251
return cmd
@@ -265,6 +271,9 @@ def run_module():
265271
'list', 'info']), # noqa: E501
266272
caps=dict(type='dict', required=False, default={}),
267273
output_format=dict(type='str', required=False, default='json', choices=['json', 'plain', 'xml', 'yaml']) # noqa: E501
274+
image=dict(type='str', required=False),
275+
fsid=dict(type='str', required=False),
276+
hostname=dict(type='str', required=False)
268277
)
269278

270279
module = AnsibleModule(
@@ -277,6 +286,9 @@ def run_module():
277286
name = module.params.get('name')
278287
caps = module.params.get('caps')
279288
output_format = module.params.get('output_format')
289+
image = module.params.get('image')
290+
fsid = module.params.get('fsid')
291+
hostname = module.params.get('hostname')
280292

281293
changed = False
282294

@@ -304,7 +316,7 @@ def run_module():
304316
if state == "present":
305317
_info_key = []
306318
rc, cmd, out, err = exec_commands(
307-
module, info_key(name, output_format)) # noqa: E501
319+
module, info_key(name, output_format, image=image, fsid=fsid, hostname=hostname)) # noqa: E501
308320
key_exist = rc
309321
if not caps and key_exist != 0:
310322
fatal("Capabilities must be provided when state is 'present'", module) # noqa: E501
@@ -318,15 +330,15 @@ def run_module():
318330
result["rc"] = 0
319331
module.exit_json(**result)
320332
else:
321-
rc, cmd, out, err = exec_commands(module, update_key(name, caps)) # noqa: E501
333+
rc, cmd, out, err = exec_commands(module, update_key(name, caps, image=image, fsid=fsid, hostname=hostname)) # noqa: E501
322334
if rc != 0:
323335
result["msg"] = "Couldn't update caps for {0}".format(name)
324336
result["stderr"] = err
325337
module.fail_json(**result)
326338
changed = True
327339

328340
else:
329-
rc, cmd, out, err = exec_commands(module, create_key(name, caps)) # noqa: E501
341+
rc, cmd, out, err = exec_commands(module, create_key(name, caps, image=image, fsid=fsid, hostname=hostname)) # noqa: E501
330342
if rc != 0:
331343
result["msg"] = "Couldn't create {0}".format(name)
332344
result["stderr"] = err
@@ -335,23 +347,23 @@ def run_module():
335347

336348
elif state == "absent":
337349
rc, cmd, out, err = exec_commands(
338-
module, info_key(name, output_format)) # noqa: E501
350+
module, info_key(name, output_format, image=image, fsid=fsid, hostname=hostname)) # noqa: E501
339351
key_exist = rc
340352
if key_exist == 0:
341353
rc, cmd, out, err = exec_commands(
342-
module, delete_key(name)) # noqa: E501
354+
module, delete_key(name, image=image, fsid=fsid, hostname=hostname)) # noqa: E501
343355
if rc == 0:
344356
changed = True
345357
else:
346358
rc = 0
347359

348360
elif state == "info":
349361
rc, cmd, out, err = exec_commands(
350-
module, info_key(name, output_format)) # noqa: E501
362+
module, info_key(name, output_format, image=image, fsid=fsid, hostname=hostname)) # noqa: E501
351363

352364
elif state == "list":
353365
rc, cmd, out, err = exec_commands(
354-
module, list_keys())
366+
module, list_keys(image=image, fsid=fsid, hostname=hostname))
355367

356368
endd = datetime.datetime.now()
357369
delta = endd - startd

0 commit comments

Comments
 (0)