diff --git a/README-user.md b/README-user.md index e7402610638e40224c7c42f7bd33aa38106f130e..e7267c52286f240a127c427256fd6c0c0c383a2a 100644 --- a/README-user.md +++ b/README-user.md @@ -397,6 +397,7 @@ Variable | Description | Required `uid` \| `uidnumber` | User ID Number (system will assign one if not provided). | no `gid` \| `gidnumber` | Group ID Number. | no `gecos` | GECOS | no +`street` | Street address | no `city` | City | no `userstate` \| `st` | State/Province | no `postalcode` \| `zip` | Postalcode/ZIP | no @@ -444,3 +445,4 @@ Authors ======= Thomas Woerner +Rafael Jeffman diff --git a/plugins/modules/ipauser.py b/plugins/modules/ipauser.py index b703b09f54c9a970a365f5d0861aec3ccf61da2a..6441259eb2434d956779f6e7eb11f6bd71e1a19e 100644 --- a/plugins/modules/ipauser.py +++ b/plugins/modules/ipauser.py @@ -137,6 +137,10 @@ options: type: int required: false aliases: ["gidnumber"] + street: + description: Street address + type: str + required: false city: description: City type: str @@ -365,6 +369,10 @@ options: type: int required: false aliases: ["gidnumber"] + street: + description: Street address + type: str + required: false city: description: City type: str @@ -662,10 +670,11 @@ def find_user(module, name): def gen_args(first, last, fullname, displayname, initials, homedir, gecos, shell, email, principalexpiration, passwordexpiration, password, - random, uid, gid, city, userstate, postalcode, phone, mobile, - pager, fax, orgunit, title, carlicense, sshpubkey, userauthtype, - userclass, radius, radiususer, departmentnumber, employeenumber, - employeetype, preferredlanguage, noprivate, nomembers): + random, uid, gid, street, city, userstate, postalcode, phone, + mobile, pager, fax, orgunit, title, carlicense, sshpubkey, + userauthtype, userclass, radius, radiususer, departmentnumber, + employeenumber, employeetype, preferredlanguage, noprivate, + nomembers): # principal, manager, certificate and certmapdata are handled not in here _args = {} if first is not None: @@ -698,6 +707,8 @@ def gen_args(first, last, fullname, displayname, initials, homedir, gecos, _args["uidnumber"] = to_text(str(uid)) if gid is not None: _args["gidnumber"] = to_text(str(gid)) + if street is not None: + _args["street"] = street if city is not None: _args["l"] = city if userstate is not None: @@ -746,39 +757,31 @@ def gen_args(first, last, fullname, displayname, initials, homedir, gecos, def check_parameters( # pylint: disable=unused-argument module, state, action, first, last, fullname, displayname, initials, homedir, gecos, shell, email, principal, principalexpiration, - passwordexpiration, password, random, uid, gid, city, phone, mobile, - pager, fax, orgunit, title, manager, carlicense, sshpubkey, + passwordexpiration, password, random, uid, gid, street, city, phone, + mobile, pager, fax, orgunit, title, manager, carlicense, sshpubkey, userauthtype, userclass, radius, radiususer, departmentnumber, employeenumber, employeetype, preferredlanguage, certificate, certmapdata, noprivate, nomembers, preserve, update_password): - invalid = [] - if state == "present": - if action == "member": - invalid = ["first", "last", "fullname", "displayname", "initials", - "homedir", "gecos", "shell", "email", - "principalexpiration", - "passwordexpiration", "password", "random", "uid", - "gid", "city", "phone", "mobile", "pager", "fax", - "orgunit", "title", "carlicense", "sshpubkey", - "userauthtype", "userclass", "radius", "radiususer", - "departmentnumber", "employeenumber", "employeetype", - "preferredlanguage", "noprivate", "nomembers", - "preserve", "update_password"] - + if state == "present" and action == "user": + invalid = ["preserve"] else: - invalid = ["first", "last", "fullname", "displayname", "initials", - "homedir", "gecos", "shell", "email", "principalexpiration", - "passwordexpiration", "password", "random", "uid", - "gid", "city", "phone", "mobile", "pager", "fax", - "orgunit", "title", "carlicense", "sshpubkey", - "userauthtype", "userclass", "radius", "radiususer", - "departmentnumber", "employeenumber", "employeetype", - "preferredlanguage", "noprivate", "nomembers", - "update_password"] - if action == "user": - invalid.extend(["principal", "manager", - "certificate", "certmapdata", - ]) + invalid = [ + "first", "last", "fullname", "displayname", "initials", "homedir", + "shell", "email", "principalexpiration", "passwordexpiration", + "password", "random", "uid", "gid", "street", "city", "phone", + "mobile", "pager", "fax", "orgunit", "title", "carlicense", + "sshpubkey", "userauthtype", "userclass", "radius", "radiususer", + "departmentnumber", "employeenumber", "employeetype", + "preferredlanguage", "noprivate", "nomembers", "update_password", + "gecos", + ] + + if state == "present" and action == "member": + invalid.append("preserve") + else: + if action == "user": + invalid.extend( + ["principal", "manager", "certificate", "certmapdata"]) if state != "absent" and preserve is not None: module.fail_json( @@ -929,6 +932,7 @@ def main(): random=dict(type='bool', default=None), uid=dict(type="int", aliases=["uidnumber"], default=None), gid=dict(type="int", aliases=["gidnumber"], default=None), + street=dict(type="str", default=None), city=dict(type="str", default=None), userstate=dict(type="str", aliases=["st"], default=None), postalcode=dict(type="str", aliases=["zip"], default=None), @@ -1046,6 +1050,7 @@ def main(): random = ansible_module.params_get("random") uid = ansible_module.params_get("uid") gid = ansible_module.params_get("gid") + street = ansible_module.params_get("street") city = ansible_module.params_get("city") userstate = ansible_module.params_get("userstate") postalcode = ansible_module.params_get("postalcode") @@ -1096,11 +1101,11 @@ def main(): first, last, fullname, displayname, initials, homedir, gecos, shell, email, principal, principalexpiration, passwordexpiration, password, random, - uid, gid, city, phone, mobile, pager, fax, orgunit, title, manager, - carlicense, sshpubkey, userauthtype, userclass, radius, radiususer, - departmentnumber, employeenumber, employeetype, preferredlanguage, - certificate, certmapdata, noprivate, nomembers, preserve, - update_password) + uid, gid, street, city, phone, mobile, pager, fax, orgunit, title, + manager, carlicense, sshpubkey, userauthtype, userclass, radius, + radiususer, departmentnumber, employeenumber, employeetype, + preferredlanguage, certificate, certmapdata, noprivate, nomembers, + preserve, update_password) certmapdata = convert_certmapdata(certmapdata) # Use users if names is None @@ -1165,6 +1170,7 @@ def main(): random = user.get("random") uid = user.get("uid") gid = user.get("gid") + street = user.get("street") city = user.get("city") userstate = user.get("userstate") postalcode = user.get("postalcode") @@ -1194,8 +1200,8 @@ def main(): ansible_module, state, action, first, last, fullname, displayname, initials, homedir, gecos, shell, email, principal, principalexpiration, - passwordexpiration, password, random, uid, gid, city, - phone, mobile, pager, fax, orgunit, title, manager, + passwordexpiration, password, random, uid, gid, street, + city, phone, mobile, pager, fax, orgunit, title, manager, carlicense, sshpubkey, userauthtype, userclass, radius, radiususer, departmentnumber, employeenumber, employeetype, preferredlanguage, certificate, @@ -1252,10 +1258,10 @@ def main(): first, last, fullname, displayname, initials, homedir, gecos, shell, email, principalexpiration, passwordexpiration, - password, random, uid, gid, city, userstate, postalcode, - phone, mobile, pager, fax, orgunit, title, carlicense, - sshpubkey, userauthtype, userclass, radius, radiususer, - departmentnumber, employeenumber, employeetype, + password, random, uid, gid, street, city, userstate, + postalcode, phone, mobile, pager, fax, orgunit, title, + carlicense, sshpubkey, userauthtype, userclass, radius, + radiususer, departmentnumber, employeenumber, employeetype, preferredlanguage, noprivate, nomembers) if action == "user": diff --git a/tests/user/test_user.yml b/tests/user/test_user.yml index 46a7de9923837e25cbb60da4a0c023506330c669..8af9a80a46201cfd8d111edb6c94ff5c89a71098 100644 --- a/tests/user/test_user.yml +++ b/tests/user/test_user.yml @@ -59,6 +59,7 @@ #password: foo2 principal: pa random: yes + street: PinkyStreet city: PinkyCity userstate: PinkyState postalcode: PinkyZip @@ -86,6 +87,33 @@ register: result failed_when: not result.changed or result.failed + - name: Set street, again + ipauser: + ipaadmin_password: SomeADMINpassword + ipaapi_context: "{{ ipa_context | default(omit) }}" + name: pinky + street: PinkyStreet + register: result + failed_when: result.changed or result.failed + + - name: Clear street attribute. + ipauser: + ipaadmin_password: SomeADMINpassword + ipaapi_context: "{{ ipa_context | default(omit) }}" + name: pinky + street: "" + register: result + failed_when: not result.changed or result.failed + + - name: Clear street attribute, again + ipauser: + ipaadmin_password: SomeADMINpassword + ipaapi_context: "{{ ipa_context | default(omit) }}" + name: pinky + street: "" + register: result + failed_when: result.changed or result.failed + - name: User pinky present with changed settings ipauser: ipaadmin_password: SomeADMINpassword diff --git a/tests/user/test_users.yml b/tests/user/test_users.yml index 9b795244edc848ec34324e204700f6546a585842..7c0d11e26181ea9d425afb47a056b3dc3aa52b22 100644 --- a/tests/user/test_users.yml +++ b/tests/user/test_users.yml @@ -151,6 +151,7 @@ #password: foo2 principal: pa random: yes + street: PinkyStreet city: PinkyCity userstate: PinkyState postalcode: PinkyZip @@ -194,6 +195,7 @@ #password: foo2 principal: pa random: yes + street: PinkyStreet city: PinkyCity userstate: PinkyState postalcode: PinkyZip