summaryrefslogtreecommitdiffstats
path: root/ansible_collections/microsoft/ad/plugins/modules/computer.ps1
diff options
context:
space:
mode:
Diffstat (limited to 'ansible_collections/microsoft/ad/plugins/modules/computer.ps1')
-rw-r--r--ansible_collections/microsoft/ad/plugins/modules/computer.ps1204
1 files changed, 204 insertions, 0 deletions
diff --git a/ansible_collections/microsoft/ad/plugins/modules/computer.ps1 b/ansible_collections/microsoft/ad/plugins/modules/computer.ps1
new file mode 100644
index 000000000..b97bb1062
--- /dev/null
+++ b/ansible_collections/microsoft/ad/plugins/modules/computer.ps1
@@ -0,0 +1,204 @@
+#!powershell
+
+# Copyright: (c) 2023, Ansible Project
+# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+
+#AnsibleRequires -CSharpUtil Ansible.Basic
+#AnsibleRequires -PowerShell ..module_utils._ADObject
+
+$setParams = @{
+ PropertyInfo = @(
+ [PSCustomObject]@{
+ Name = 'delegates'
+ Option = @{
+ aliases = 'principals_allowed_to_delegate'
+ type = 'dict'
+ options = @{
+ add = @{ type = 'list'; elements = 'str' }
+ remove = @{ type = 'list'; elements = 'str' }
+ set = @{ type = 'list'; elements = 'str' }
+ }
+ }
+ Attribute = 'PrincipalsAllowedToDelegateToAccount'
+ CaseInsensitive = $true
+ }
+ [PSCustomObject]@{
+ Name = 'dns_hostname'
+ Option = @{ type = 'str' }
+ Attribute = 'DNSHostName'
+ }
+ [PSCustomObject]@{
+ Name = 'enabled'
+ Option = @{ type = 'bool' }
+ Attribute = 'Enabled'
+ }
+ [PSCustomObject]@{
+ Name = 'kerberos_encryption_types'
+ Option = @{
+ type = 'dict'
+ options = @{
+ add = @{
+ choices = 'aes128', 'aes256', 'des', 'rc4'
+ type = 'list'
+ elements = 'str'
+ }
+ remove = @{
+ choices = 'aes128', 'aes256', 'des', 'rc4'
+ type = 'list'
+ elements = 'str'
+ }
+ set = @{
+ choices = 'aes128', 'aes256', 'des', 'rc4'
+ type = 'list'
+ elements = 'str'
+ }
+ }
+ }
+ Attribute = 'KerberosEncryptionType'
+ CaseInsensitive = $true
+
+ New = {
+ param($Module, $ADParams, $NewParams)
+
+ $encTypes = @(
+ $Module.Params.kerberos_encryption_types.add
+ $Module.Params.kerberos_encryption_types.set
+ ) | Select-Object -Unique
+
+ $NewParams.KerberosEncryptionType = $encTypes
+ $Module.Diff.after.kerberos_encryption_types = $MencTypes
+ }
+ Set = {
+ param($Module, $ADParams, $SetParams, $ADObject)
+
+ # This is an enum value and needs custom handling for things like
+ # unsetting the values with none.
+ $rawValue = $ADObject.KerberosEncryptionType.Value
+
+ $existing = foreach ($v in [System.Enum]::GetValues($rawValue.GetType())) {
+ if ($rawValue -band $v) { $v.ToString() }
+ }
+ if ($existing -eq 'None') {
+ $existing = @()
+ }
+ $module.Diff.before.kerberos_encryption_types = $existing
+
+ $desired = $Module.Params.kerberos_encryption_types
+ $compareParams = @{
+ Existing = $existing
+ CaseInsensitive = $true
+ }
+ $res = Compare-AnsibleADIdempotentList @compareParams @desired
+ if ($res.Changed) {
+ if ($res.Value) {
+ $SetParams.KerberosEncryptionType = $res.Value -join ', '
+ }
+ else {
+ $SetParams.KerberosEncryptionType = 'None'
+ }
+ }
+ $module.Diff.after.kerberos_encryption_types = $res.Value
+ }
+ }
+ [PSCustomObject]@{
+ Name = 'location'
+ Option = @{ type = 'str' }
+ Attribute = 'Location'
+ }
+ [PSCustomObject]@{
+ Name = 'managed_by'
+ Option = @{ type = 'str' }
+ Attribute = 'ManagedBy'
+ }
+ [PSCustomObject]@{
+ Name = 'sam_account_name'
+ Option = @{ type = 'str' }
+ Attribute = 'sAMAccountName'
+ }
+ [PSCustomObject]@{
+ Name = 'spn'
+ Option = @{
+ aliases = 'spns'
+ type = 'dict'
+ options = @{
+ add = @{ type = 'list'; elements = 'str' }
+ remove = @{ type = 'list'; elements = 'str' }
+ set = @{ type = 'list'; elements = 'str' }
+ }
+ }
+ Attribute = 'ServicePrincipalNames'
+ New = {
+ param($Module, $ADParams, $NewParams)
+
+ $spns = @(
+ $Module.Params.spn.add
+ $Module.Params.spn.set
+ ) | Select-Object -Unique
+
+ $NewParams.ServicePrincipalNames = $spns
+ $Module.Diff.after.spn = $spns
+ }
+ Set = {
+ param($Module, $ADParams, $SetParams, $ADObject)
+
+ $desired = $Module.Params.spn
+ $compareParams = @{
+ Existing = $ADObject.ServicePrincipalNames
+ CaseInsensitive = $true
+ }
+ $res = Compare-AnsibleADIdempotentList @compareParams @desired
+ if ($res.Changed) {
+ $SetParams.ServicePrincipalNames = @{}
+ if ($res.ToAdd) {
+ $SetParams.ServicePrincipalNames.Add = $res.ToAdd
+ }
+ if ($res.ToRemove) {
+ $SetParams.ServicePrincipalNames.Remove = $res.ToRemove
+ }
+ }
+ $module.Diff.after.kerberos_encryption_types = @($res.Value | Sort-Object)
+ }
+ }
+ [PSCustomObject]@{
+ Name = 'trusted_for_delegation'
+ Option = @{ type = 'bool' }
+ Attribute = 'TrustedForDelegation'
+ }
+ [PSCustomObject]@{
+ Name = 'upn'
+ Option = @{ type = 'str' }
+ Attribute = 'userPrincipalName'
+ }
+ )
+ ModuleNoun = 'ADComputer'
+ DefaultPath = {
+ param($Module, $ADParams)
+
+ $GUID_COMPUTERS_CONTAINER_W = 'AA312825768811D1ADED00C04FD8D5CD'
+ $defaultNamingContext = (Get-ADRootDSE @ADParams -Properties defaultNamingContext).defaultNamingContext
+
+ Get-ADObject @ADParams -Identity $defaultNamingContext -Properties wellKnownObjects |
+ Select-Object -ExpandProperty wellKnownObjects |
+ Where-Object { $_.StartsWith("B:32:$($GUID_COMPUTERS_CONTAINER_W):") } |
+ ForEach-Object Substring 38
+ }
+ PreAction = {
+ param ($Module, $ADParams, $ADObject)
+
+ if ($Module.Params.sam_account_name -and -not $Module.Params.sam_account_name.EndsWith('$')) {
+ $Module.Params.sam_account_name = "$($Module.Params.sam_account_name)$"
+ }
+ }
+ PostAction = {
+ param($Module, $ADParams, $ADObject)
+
+ if ($ADObject) {
+ $Module.Result.sid = $ADObject.SID.Value
+ }
+ elseif ($Module.Params.state -eq 'present') {
+ # Use dummy value for check mode when creating a new user
+ $Module.Result.sid = 'S-1-5-0000'
+ }
+ }
+}
+Invoke-AnsibleADObject @setParams