Skip to content
Snippets Groups Projects
Commit 5406c601 authored by Rafael Guterres Jeffman's avatar Rafael Guterres Jeffman
Browse files

Add support for service-add-smb.

This patch adds variable `smb`, that can be used when adding a new
service, and creates a SMB service (cifs) with an optional
`netbiosname`.
parent 341078ed
No related branches found
No related tags found
No related merge requests found
...@@ -90,6 +90,14 @@ options: ...@@ -90,6 +90,14 @@ options:
required: false required: false
type: list type: list
aliases: ["krbprincipalname"] aliases: ["krbprincipalname"]
smb:
description: Add a SMB service. Can only be used with new services.
required: false
type: bool
netbiosname:
description: NETBIOS name for the SMB service.
required: false
type: str
host: host:
description: Host that can manage the service. description: Host that can manage the service.
required: false required: false
...@@ -226,11 +234,21 @@ from ansible.module_utils.ansible_freeipa_module import temp_kinit, \ ...@@ -226,11 +234,21 @@ from ansible.module_utils.ansible_freeipa_module import temp_kinit, \
import ipalib.errors import ipalib.errors
def find_service(module, name): def find_service(module, name, netbiosname):
_args = { _args = {
"all": True, "all": True,
} }
# Search for a SMB/cifs service.
if netbiosname is not None:
_result = api_command(
module, "service_find", to_text(netbiosname), _args)
for _res_find in _result.get('result', []):
for uid in _res_find.get('uid', []):
if uid.startswith("%s$@" % netbiosname):
return _res_find
try: try:
_result = api_command(module, "service_show", to_text(name), _args) _result = api_command(module, "service_show", to_text(name), _args)
except ipalib.errors.NotFound: except ipalib.errors.NotFound:
...@@ -275,7 +293,7 @@ def check_parameters(module, state, action, names, parameters): ...@@ -275,7 +293,7 @@ def check_parameters(module, state, action, names, parameters):
# invalid parameters for everything but state 'present', action 'service'. # invalid parameters for everything but state 'present', action 'service'.
invalid = ['pac_type', 'auth_ind', 'skip_host_check', invalid = ['pac_type', 'auth_ind', 'skip_host_check',
'force', 'requires_pre_auth', 'ok_as_delegate', 'force', 'requires_pre_auth', 'ok_as_delegate',
'ok_to_auth_as_delegate'] 'ok_to_auth_as_delegate', 'smb', 'netbiosname']
# invalid parameters when not handling service members. # invalid parameters when not handling service members.
invalid_not_member = \ invalid_not_member = \
...@@ -291,6 +309,16 @@ def check_parameters(module, state, action, names, parameters): ...@@ -291,6 +309,16 @@ def check_parameters(module, state, action, names, parameters):
if action == 'service': if action == 'service':
invalid = ['delete_continue'] invalid = ['delete_continue']
if parameters.get('smb', False):
invalid.extend(['force', 'auth_ind', 'skip_host_check',
'requires_pre_auth', 'auth_ind', 'pac_type'])
for _invalid in invalid:
if parameters.get(_invalid, False):
module.fail_json(
msg="Argument '%s' can not be used with SMB "
"service." % _invalid)
else: else:
invalid.append('delete_continue') invalid.append('delete_continue')
...@@ -334,6 +362,8 @@ def init_ansible_module(): ...@@ -334,6 +362,8 @@ def init_ansible_module():
default=None, required=False), default=None, required=False),
principal=dict(type="list", aliases=["krbprincipalname"], principal=dict(type="list", aliases=["krbprincipalname"],
default=None), default=None),
smb=dict(type="bool", required=False),
netbiosname=dict(type="str", required=False),
pac_type=dict(type="list", aliases=["ipakrbauthzdata"], pac_type=dict(type="list", aliases=["ipakrbauthzdata"],
choices=["MS-PAC", "PAD", "NONE"]), choices=["MS-PAC", "PAD", "NONE"]),
auth_ind=dict(type="list", auth_ind=dict(type="list",
...@@ -411,6 +441,9 @@ def main(): ...@@ -411,6 +441,9 @@ def main():
ok_to_auth_as_delegate = module_params_get(ansible_module, ok_to_auth_as_delegate = module_params_get(ansible_module,
"ok_to_auth_as_delegate") "ok_to_auth_as_delegate")
smb = module_params_get(ansible_module, "smb")
netbiosname = module_params_get(ansible_module, "netbiosname")
host = module_params_get(ansible_module, "host") host = module_params_get(ansible_module, "host")
allow_create_keytab_user = module_params_get( allow_create_keytab_user = module_params_get(
...@@ -461,9 +494,11 @@ def main(): ...@@ -461,9 +494,11 @@ def main():
commands = [] commands = []
for name in names: for name in names:
res_find = find_service(ansible_module, name) res_find = find_service(ansible_module, name, netbiosname)
if state == "present": if state == "present":
# if service exists, 'smb' cannot be used.
if action == "service": if action == "service":
args = gen_args( args = gen_args(
pac_type, auth_ind, skip_host_check, force, pac_type, auth_ind, skip_host_check, force,
...@@ -473,6 +508,11 @@ def main(): ...@@ -473,6 +508,11 @@ def main():
del args['skip_host_check'] del args['skip_host_check']
if res_find is None: if res_find is None:
if smb:
if netbiosname is not None:
args['ipantflatname'] = netbiosname
commands.append([name, 'service_add_smb', args])
else:
commands.append([name, 'service_add', args]) commands.append([name, 'service_add', args])
certificate_add = certificate or [] certificate_add = certificate or []
......
...@@ -541,6 +541,40 @@ ...@@ -541,6 +541,40 @@
register: result register: result
failed_when: result.changed failed_when: result.changed
- name: Ensure SMB service is present.
ipaservice:
ipaadmin_password: MyPassword123
name: "{{ host1_fqdn }}"
smb: yes
netbiosname: SAMBASVC
register: result
failed_when: not result.changed
- name: Ensure SMB service is again.
ipaservice:
ipaadmin_password: MyPassword123
name: "{{ host1_fqdn }}"
smb: yes
netbiosname: SAMBASVC
register: result
failed_when: result.changed
- name: Ensure SMB service is absent.
ipaservice:
ipaadmin_password: MyPassword123
name: "cifs/{{ host1_fqdn }}"
state: absent
register: result
failed_when: not result.changed
- name: Ensure SMB service is absent, again.
ipaservice:
ipaadmin_password: MyPassword123
name: "cifs/{{ host1_fqdn }}"
state: absent
register: result
failed_when: result.changed
# cleanup # cleanup
- name: Ensure services are absent. - name: Ensure services are absent.
...@@ -551,6 +585,7 @@ ...@@ -551,6 +585,7 @@
- HTTP/www.ansible.com - HTTP/www.ansible.com
- HTTP/svc.ihavenodns.info - HTTP/svc.ihavenodns.info
- HTTP/no.idontexist.local - HTTP/no.idontexist.local
- "cifs/{{ host1_fqdn }}"
state: absent state: absent
- name: Ensure host "{{ svc_fqdn }}" is absent - name: Ensure host "{{ svc_fqdn }}" is absent
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment