Skip to content

Commit 61eb57c

Browse files
committed
Add support for custom attributes
1 parent 8c60ad3 commit 61eb57c

File tree

3 files changed

+205
-45
lines changed

3 files changed

+205
-45
lines changed

docs/QUEUE_MANAGER.md

Lines changed: 70 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,85 @@
1-
# `queue_manager.py`
2-
1+
# `queue_manager.py`
32
Module to create, start, delete a queue manager and run MQSC files.
43

54
## Parameters
6-
75
- `qmname` : IBM MQ queue manager name.
86
- `state` : Desired state of the queue manager (`present`, `absent`, `running`).
97
- `description` : IBM MQ queue manager description - *optional*.
10-
- `unit_test`: flag used for unit tests of modules.
8+
- `unit_test`: Flag used for unit tests of modules.
119
- `mqsc_file` : Specified MQSC command file to run - *optional*.
10+
- `data_dir` : Data directory path for queue manager (`-md` flag) - *optional*.
11+
- `log_dir` : Log directory path for queue manager (`-ld` flag) - *optional*.
12+
- `log_file_size` : Log file size in kilobytes (`-lf` flag) - *optional*.
13+
- `log_primary` : Number of primary log files (`-lp` flag) - *optional*.
14+
- `log_secondary` : Number of secondary log files (`-ls` flag) - *optional*.
1215

1316
## Return values
14-
15-
- `msg` : message of the performed task.
16-
- `rc` : return code.
17-
- `state`
17+
- `msg` : Message of the performed task.
18+
- `rc` : Return code.
19+
- `state` : State of the queue manager after the operation.
1820

1921
## Examples for playbooks
2022

2123
#### Creating a Queue Manager task
22-
23-
```
24+
```yaml
2425
- name: Create queue manager
25-
queue_manager:
26-
qmname: 'queue_manager_name'
27-
state: present
26+
queue_manager:
27+
qmname: 'queue_manager_name'
28+
state: present
2829
```
2930
30-
#### Starting a Queue Manager task
31-
31+
#### Creating a Queue Manager with custom directory paths and log settings
32+
```yaml
33+
- name: Create queue manager with custom paths and log settings
34+
queue_manager:
35+
qmname: 'queue_manager_name'
36+
state: present
37+
data_dir: '/path/to/data/directory'
38+
log_dir: '/path/to/log/directory'
39+
log_file_size: 8192
40+
log_primary: 200
41+
log_secondary: 200
42+
description: 'My custom queue manager'
3243
```
44+
45+
#### Starting a Queue Manager task
46+
```yaml
3347
- name: Start queue manager
34-
queue_manager:
35-
qmname: 'queue_manager_name'
36-
state: running
48+
queue_manager:
49+
qmname: 'queue_manager_name'
50+
state: running
3751
```
3852
3953
#### Deleting a Queue Manager task
40-
41-
```
42-
- name: Start queue manager
43-
queue_manager:
44-
qmname: 'queue_manager_name'
45-
state: absent
54+
```yaml
55+
- name: Delete queue manager
56+
queue_manager:
57+
qmname: 'queue_manager_name'
58+
state: absent
4659
```
4760
4861
#### Run MQSC command file task
49-
50-
```
51-
- name: Run MQSC command file
52-
queue_manager:
53-
qmname: 'queue_manager_name'
54-
state: running
55-
mqsc_file: 'commfile.in'
62+
```yaml
63+
- name: Run MQSC command file
64+
queue_manager:
65+
qmname: 'queue_manager_name'
66+
state: running
67+
mqsc_file: 'commfile.in'
5668
```
5769
5870
#### Use of ALL_QMGRS value
59-
6071
This may be used to refer to all queue managers currently defined to a system, e.g to start/stop both QM1 and QM2 defined in mq-setup.yml.
61-
62-
```
63-
- name: Run MQSC command file
64-
queue_manager:
65-
qmname: 'ALL_QMGRS'
66-
state: running
72+
```yaml
73+
- name: Start all queue managers
74+
queue_manager:
75+
qmname: 'ALL_QMGRS'
76+
state: running
6777
```
6878
69-
## Example of unit testing of a module
79+
## Example of unit testing of a module
80+
Note: Exception classes `AnsibleExitJson` and `AnsibleFailJson` should be set. See [`test_queue_manager.py`](ansible_collections/ibm/ibmmq/tests/unit/test_queue_manager.py) for reference.
7081

71-
Note: Exeption classes `AnsibleExitJson` and `AnsibleFailJson` should be set. See [`test_queue_manager.py`](ansible_collections/ibm/ibmmq/tests/unit/test_queue_manager.py) for reference.
72-
73-
```
82+
```python
7483
def test_delete_qm(self):
7584
set_module_args({
7685
'qmname': 'qm1',
@@ -82,3 +91,22 @@ def test_delete_qm(self):
8291
queue_manager.main()
8392
self.assertEquals(result.exception.args[0]['state'], 'absent')
8493
```
94+
95+
## Example of creating a queue manager with custom paths
96+
```python
97+
def test_create_qm_with_paths(self):
98+
set_module_args({
99+
'qmname': 'qm1',
100+
'state': 'present',
101+
'description': 'Queue manager with custom paths',
102+
'data_dir': '/var/mqm/qmgrs/qm1/data',
103+
'log_dir': '/var/mqm/qmgrs/qm1/logs',
104+
'log_file_size': 8192,
105+
'log_primary': 10,
106+
'log_secondary': 20,
107+
'unit_test': True
108+
})
109+
with self.assertRaises(AnsibleExitJson) as result:
110+
queue_manager.main()
111+
self.assertEquals(result.exception.args[0]['state'], 'present')
112+
```

plugins/modules/queue_manager.py

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,45 @@ def check_status_queue_managers(qmname, module):
3535
return False
3636

3737

38+
def build_crtmqm_command(qmname, module):
39+
"""Build the crtmqm command with all supported flags"""
40+
cmd = ['crtmqm']
41+
42+
# Add data directory if specified
43+
if module.params.get('data_dir'):
44+
cmd.extend(['-md', module.params['data_dir']])
45+
46+
# Add log directory if specified
47+
if module.params.get('log_dir'):
48+
cmd.extend(['-ld', module.params['log_dir']])
49+
50+
# Add log file size if specified
51+
if module.params.get('log_file_size'):
52+
cmd.extend(['-lf', str(module.params['log_file_size'])])
53+
54+
# Add log primary files if specified
55+
if module.params.get('log_primary'):
56+
cmd.extend(['-lp', str(module.params['log_primary'])])
57+
58+
# Add log secondary files if specified
59+
if module.params.get('log_secondary'):
60+
cmd.extend(['-ls', str(module.params['log_secondary'])])
61+
62+
# Add queue manager description if specified
63+
if module.params.get('description'):
64+
cmd.extend(['-q', module.params['description']])
65+
66+
# Add queue manager name at the end
67+
cmd.append(qmname)
68+
69+
return cmd
70+
3871

3972
def state_present(qmname, module):
4073
if module.params['unit_test'] is False:
41-
rc, stdout, stderr = module.run_command(['crtmqm', qmname])
74+
# Use the function to build the command with all parameters
75+
cmd = build_crtmqm_command(qmname, module)
76+
rc, stdout, stderr = module.run_command(cmd)
4277
result['rc'] = rc
4378

4479
if module.params['mqsc_file'] is not None:
@@ -93,7 +128,8 @@ def state_running(qmname, module):
93128

94129
if rc == 72:
95130
# QMGR does not exist Create then set running
96-
rc, stdout, stderr = module.run_command(['crtmqm', qmname])
131+
cmd = build_crtmqm_command(qmname, module)
132+
rc, stdout, stderr = module.run_command(cmd)
97133
if rc > 0:
98134
# Critical Error
99135
module.fail_json(**result)
@@ -185,7 +221,12 @@ def main():
185221
state=dict(type='str', required=True),
186222
description=dict(type='str', required=False),
187223
unit_test=dict(type='bool', default=False, required=False),
188-
mqsc_file=dict(type='str', required=False)
224+
mqsc_file=dict(type='str', required=False),
225+
data_dir=dict(type='str', required=False),
226+
log_dir=dict(type='str', required=False),
227+
log_file_size=dict(type='int', required=False),
228+
log_primary=dict(type='int', required=False),
229+
log_secondary=dict(type='int', required=False)
189230
)
190231

191232
module = AnsibleModule(

tests/unit/test_queue_manager.py

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,60 @@ def test_create_qm(self):
8484
queue_manager.main()
8585
self.assertEquals(result.exception.args[0]['state'], 'present')
8686

87+
def test_create_qm_with_data_dir(self):
88+
set_module_args({
89+
'qmname': 'qm1',
90+
'state': 'present',
91+
'description': 'testing',
92+
'data_dir': '/mnt/mqm/qmgrs/qm1/data',
93+
'unit_test': True
94+
})
95+
with self.assertRaises(AnsibleExitJson) as result:
96+
queue_manager.main()
97+
self.assertEquals(result.exception.args[0]['state'], 'present')
98+
99+
def test_create_qm_with_log_dir(self):
100+
set_module_args({
101+
'qmname': 'qm1',
102+
'state': 'present',
103+
'description': 'testing',
104+
'log_dir': '/mnt/mqm/qmgrs/qm1/logs',
105+
'unit_test': True
106+
})
107+
with self.assertRaises(AnsibleExitJson) as result:
108+
queue_manager.main()
109+
self.assertEquals(result.exception.args[0]['state'], 'present')
110+
111+
def test_create_qm_with_log_parameters(self):
112+
set_module_args({
113+
'qmname': 'qm1',
114+
'state': 'present',
115+
'description': 'testing',
116+
'log_file_size': 8192,
117+
'log_primary': 200,
118+
'log_secondary': 200,
119+
'unit_test': True
120+
})
121+
with self.assertRaises(AnsibleExitJson) as result:
122+
queue_manager.main()
123+
self.assertEquals(result.exception.args[0]['state'], 'present')
124+
125+
def test_create_qm_with_all_parameters(self):
126+
set_module_args({
127+
'qmname': 'qm1',
128+
'state': 'present',
129+
'description': 'testing',
130+
'data_dir': '/mnt/mqm/qmgrs/qm1/data',
131+
'log_dir': '/mnt/mqm/qmgrs/qm1/logs',
132+
'log_file_size': 8192,
133+
'log_primary': 200,
134+
'log_secondary': 200,
135+
'unit_test': True
136+
})
137+
with self.assertRaises(AnsibleExitJson) as result:
138+
queue_manager.main()
139+
self.assertEquals(result.exception.args[0]['state'], 'present')
140+
87141
def test_delete_qm(self):
88142
set_module_args({
89143
'qmname': 'qm1',
@@ -109,6 +163,24 @@ def test_start_qmgr(self):
109163
self.assertEquals(result.exception.args[0]['msg'], 'IBM MQ queue manager \'qm1\' started')
110164
self.assertEquals(result.exception.args[0]['rc'], 0)
111165

166+
def test_start_qmgr_with_all_parameters(self):
167+
set_module_args({
168+
'qmname': 'qm1',
169+
'state': 'running',
170+
'description': 'testing',
171+
'data_dir': '/mnt/mqm/qmgrs/qm1/data',
172+
'log_dir': '/mnt/mqm/qmgrs/qm1/logs',
173+
'log_file_size': 8192,
174+
'log_primary': 200,
175+
'log_secondary': 200,
176+
'unit_test': True
177+
})
178+
with self.assertRaises(AnsibleExitJson) as result:
179+
queue_manager.main()
180+
self.assertEquals(result.exception.args[0]['state'], 'running')
181+
self.assertEquals(result.exception.args[0]['msg'], 'IBM MQ queue manager \'qm1\' started')
182+
self.assertEquals(result.exception.args[0]['rc'], 0)
183+
112184
def test_runmqsc_on_qmgr(self):
113185
set_module_args({
114186
'qmname': 'qm1',
@@ -122,3 +194,22 @@ def test_runmqsc_on_qmgr(self):
122194
self.assertEquals(result.exception.args[0]['state'], 'present')
123195
self.assertEquals(result.exception.args[0]['msg'], 'runmqsc command ran successfully')
124196
self.assertEquals(result.exception.args[0]['rc'], 0)
197+
198+
def test_runmqsc_on_qmgr_with_all_parameters(self):
199+
set_module_args({
200+
'qmname': 'qm1',
201+
'state': 'present',
202+
'description': 'testing',
203+
'mqsc_file': 'testing_file',
204+
'data_dir': '/mnt/mqm/qmgrs/qm1/data',
205+
'log_dir': '/mnt/mqm/qmgrs/qm1/logs',
206+
'log_file_size': 8192,
207+
'log_primary': 200,
208+
'log_secondary': 200,
209+
'unit_test': True
210+
})
211+
with self.assertRaises(AnsibleExitJson) as result:
212+
queue_manager.main()
213+
self.assertEquals(result.exception.args[0]['state'], 'present')
214+
self.assertEquals(result.exception.args[0]['msg'], 'runmqsc command ran successfully')
215+
self.assertEquals(result.exception.args[0]['rc'], 0)

0 commit comments

Comments
 (0)