---
- name : fail with incorrect DSC resource name
win_dsc :
resource_name : FakeResource
register : fail_invalid_resource
failed_when : fail_invalid_resource.msg != "Resource 'FakeResource' not found."
- name : fail with invalid DSC version
win_dsc :
resource_name : xTestResource
module_version : 0.0 .1
register : fail_invalid_version
failed_when : 'fail_invalid_version.msg != "Resource ' 'xTestResource'' with version ''0.0.1'' not found. Versions installed : '' 1.0 .0 '' , '' 1.0 .1 '' ."'
- name : fail with mandatory option not set
win_dsc :
resource_name : xSetReboot
Value : yes
register : fail_man_key
failed_when : 'fail_man_key.msg != "missing required arguments: KeyParam"'
- name : fail with mandatory option not set in sub dict
win_dsc :
resource_name : xTestResource
Path : C:\path
Ensure : Present
CimInstanceParam : # Missing KeyValue in dict
Choice : Choice1
register : fail_man_key_sub_dict
failed_when : 'fail_man_key_sub_dict.msg != "missing required arguments: KeyValue found in CimInstanceParam"'
- name : fail invalid option
win_dsc :
resource_name : xSetReboot
KeyParam : key
OtherParam : invalid
register : fail_invalid_option
failed_when : 'fail_invalid_option.msg != "Unsupported parameters for (win_dsc) module: OtherParam. Supported parameters include: KeyParam, PsDscRunAsCredential_username, module_version, Value, PsDscRunAsCredential_password, resource_name, DependsOn"'
- name : fail invalid option in sub dict
win_dsc :
resource_name : xTestResource
Path : C:\path
Ensure : Present
NestedCimInstanceParam :
KeyValue : key
CimValue :
KeyValue : other key
InvalidKey : invalid
register : fail_invalid_option_sub_dict
failed_when : 'fail_invalid_option_sub_dict.msg != "Unsupported parameters for (win_dsc) module: InvalidKey found in NestedCimInstanceParam -> CimValue. Supported parameters include: IntValue, KeyValue, StringArrayValue, Choice, StringValue"'
- name : fail invalid read only option
win_dsc :
resource_name : xTestResource
Path : C:\path
Ensure : Present
ReadParam : abc
register : fail_invalid_option_read_only
failed_when : '"Unsupported parameters for (win_dsc) module: ReadParam" not in fail_invalid_option_read_only.msg'
- name : fail invalid choice
win_dsc :
resource_name : xTestResource
Path : C:\path
Ensure : invalid
register : fail_invalid_choice
failed_when : 'fail_invalid_choice.msg != "value of Ensure must be one of: Present, Absent. Got no match for: invalid"'
- name : fail invalid choice in sub dict
win_dsc :
resource_name : xTestResource
Path : C:\path
Ensure : Present
CimInstanceArrayParam :
- KeyValue : key
- KeyValue : key2
Choice : Choice3
register : fail_invalid_choice_sub_dict
failed_when : 'fail_invalid_choice_sub_dict.msg != "value of Choice must be one of: Choice1, Choice2. Got no match for: Choice3 found in CimInstanceArrayParam"'
- name : fail old version missing new option
win_dsc :
resource_name : xTestResource
module_version : 1.0 .0
Path : C:\path
Ensure : Present
CimInstanceParam : # CimInstanceParam does not exist in the 1.0.0 version
Key : key
register : fail_invalid_option_old
failed_when : '"Unsupported parameters for (win_dsc) module: CimInstanceParam" not in fail_invalid_option_old.msg'
- name : fail old version missing new option sub dict
win_dsc :
resource_name : xTestResource
module_version : 1.0 .0
Path : C:\path
Ensure : Present
CimInstanceArrayParam :
- Key : key
Choice : Choice1
register : fail_invalid_option_old_sub_dict
failed_when : 'fail_invalid_option_old_sub_dict.msg != "Unsupported parameters for (win_dsc) module: Choice found in CimInstanceArrayParam. Supported parameters include: Key, IntValue, StringArrayValue, StringValue"'
- name : create test file (check mode)
win_dsc :
resource_name : File
DestinationPath : '{{ remote_tmp_dir }}\dsc-file'
Contents : file contents
Attributes :
- Hidden
- ReadOnly
Ensure : Present
Type : File
register : create_file_check
check_mode : yes
- name : get result of create test file (check mode)
win_stat :
path : '{{ remote_tmp_dir }}\dsc-file'
register : create_file_actual_check
- name : assert create test file (check mode)
assert :
that :
- create_file_check is changed
- create_file_check.module_version == None # Some built in modules don't have a version set
- not create_file_check.reboot_required
- not create_file_actual_check.stat.exists
- name : assert create test file verbosity (check mode)
assert :
that :
- create_file_check.verbose_test is defined
- not create_file_check.verbose_set is defined
when : ansible_verbosity >= 3
- name : create test file
win_dsc :
resource_name : File
DestinationPath : '{{ remote_tmp_dir }}\dsc-file'
Contents : file contents
Attributes :
- Hidden
- ReadOnly
Ensure : Present
Type : File
register : create_file
- name : get result of create test file
win_stat :
path : '{{ remote_tmp_dir }}\dsc-file'
register : create_file_actual
- name : assert create test file verbosity
assert :
that :
- create_file.verbose_test is defined
- create_file.verbose_set is defined
when : ansible_verbosity >= 3
- name : assert create test file
assert :
that :
- create_file is changed
- create_file.module_version == None
- not create_file.reboot_required
- create_file_actual.stat.exists
- create_file_actual.stat.attributes == "ReadOnly, Hidden, Archive"
- create_file_actual.stat.checksum == 'd48daab51112b49ecabd917adc345b8ba257055e'
- name : create test file (idempotent)
win_dsc :
resource_name : File
DestinationPath : '{{ remote_tmp_dir }}\dsc-file'
Contents : file contents
Attributes :
- Hidden
- ReadOnly
Ensure : Present
Type : File
register : create_file_again
- name : assert create test file (idempotent)
assert :
that :
- not create_file_again is changed
- create_file.module_version == None
- not create_file.reboot_required
- name : get SID of the current Ansible user
win_shell : |
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
[ System.DirectoryServices.AccountManagement.UserPrincipal]::Current.Sid.Value
register : actual_sid
- name : run DSC process as another user
win_dsc :
resource_name : Script
GetScript : '@{ Result= "" }'
SetScript : |
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$sid = [System.DirectoryServices.AccountManagement.UserPrincipal]::Current.Sid.Value
Set-Content -Path "{{ remote_tmp_dir }}\runas.txt" -Value $sid
TestScript : $false
PsDscRunAsCredential_username : '{{ ansible_user }}'
PsDscRunAsCredential_password : '{{ ansible_password }}'
register : runas_user
- name : get result of run DSC process as another user
slurp :
path : '{{ remote_tmp_dir }}\runas.txt'
register : runas_user_result
- name : assert run DSC process as another user
assert :
that :
- runas_user is changed
- runas_user.module_version != None # Can't reliably set the version but we can test it is set
- not runas_user.reboot_required
- runas_user_result.content|b64decode == actual_sid.stdout
- name : run DSC that sets reboot_required with defaults
win_dsc :
resource_name : xSetReboot
KeyParam : value # Just to satisfy the Resource with key validation
register : set_reboot_defaults
- name : assert run DSC that sets reboot_required with defaults
assert :
that :
- set_reboot_defaults.reboot_required
- name : run DSC that sets reboot_required with False
win_dsc :
resource_name : xSetReboot
KeyParam : value
Value : no
register : set_reboot_false
- name : assert run DSC that sets reboot_required with False
assert :
that :
- not set_reboot_false.reboot_required
- name : run DSC that sets reboot_required with True
win_dsc :
resource_name : xSetReboot
KeyParam : value
Value : yes
register : set_reboot_true
- name : assert run DSC that sets reboot_required with True
assert :
that :
- set_reboot_true.reboot_required
- name : test DSC with all types
win_dsc :
resource_name : xTestResource
Path : '{{ remote_tmp_dir }}\test-types.json'
Ensure : Present
StringParam : string param
StringArrayParam :
- string 1
- string 2
Int8Param : 127 # [SByte]::MaxValue
Int8ArrayParam :
- 127
- '127'
UInt8Param : 255 # [Byte]::MaxValue
UInt8ArrayParam :
- 255
- '255'
Int16Param : 32767 # [Int16]::MaxValue
Int16ArrayParam : 32767 , 32767
UInt16Param : '65535' # [UInt16]::MaxValue
UInt16ArrayParam : 65535
Int32Param : 2147483647 # [Int32]::MaxValue
Int32ArrayParam : '2147483647'
UInt32Param : '4294967295' # [UInt32]::MaxValue
UInt32ArrayParam :
- '4294967295'
- 4294967295
Int64Param : 9223372036854775807 # [Int64]::MaxValue
Int64ArrayParam :
- -9223372036854775808 # [Int64]::MinValue
- 9223372036854775807
UInt64Param : 18446744073709551615 # [UInt64]::MaxValue
UInt64ArrayParam :
- 0 # [UInt64]::MinValue
- 18446744073709551615
BooleanParam : True
BooleanArrayParam :
- True
- 'True'
- 'true'
- 'y'
- 'yes'
- 1
- False
- 'False'
- 'false'
- 'n'
- 'no'
- 0
CharParam : c
CharArrayParam :
- c
- h
- a
- r
SingleParam : 3. 402823E+38
SingleArrayParam :
- '3.402823E+38'
- 1.2393494
DoubleParam : 1. 79769313486232E+300
DoubleArrayParam :
- '1.79769313486232E+300'
- 3.56821831681516
DateTimeParam : '2019-02-22T13:57:31.2311892-04:00'
DateTimeArrayParam :
- '2019-02-22T13:57:31.2311892+00:00'
- '2019-02-22T13:57:31.2311892+04:00'
PSCredentialParam_username : username1
PSCredentialParam_password : password1
HashtableParam :
key1 : string 1
key2 : ''
key3 : 1
CimInstanceParam :
KeyValue : a
CimInstanceArrayParam :
- KeyValue : b
Choice : Choice1
StringValue : string 1
IntValue : 1
StringArrayValue :
- abc
- def
- KeyValue : c
Choice : Choice2
StringValue : string 2
IntValue : '2'
StringArrayValue :
- ghi
- jkl
NestedCimInstanceParam :
KeyValue : key value
CimValue :
KeyValue : d
CimArrayValue :
- KeyValue : e
Choice : Choice2
HashValue :
a : a
IntValue : '300'
register : dsc_types
- name : get result of test DSC with all types
slurp :
path : '{{ remote_tmp_dir }}\test-types.json'
register : dsc_types_raw
- name : convert result of test DSC with all types to dict
set_fact :
dsc_types_actual : '{{ dsc_types_raw.content | b64decode | from_json }}'
- name : assert test DSC with all types
assert :
that :
- dsc_types is changed
- dsc_types.module_version == '1.0.1'
- not dsc_types.reboot_required
- dsc_types_actual.Version == '1.0.1'
- dsc_types_actual.Verbose.Value.IsPresent
- dsc_types_actual.DefaultParam.Value == 'Default' # ensures that the default is set in the engine if we don't set it outselves
- dsc_types_actual.Ensure.Value == 'Present'
- dsc_types_actual.Path.Value == remote_tmp_dir + "\\test-types.json"
- dsc_types_actual.StringParam.Type == 'System.String'
- dsc_types_actual.StringParam.Value == 'string param'
- dsc_types_actual.StringArrayParam.Type == 'System.String[]'
- dsc_types_actual.StringArrayParam.Value == ['string 1', 'string 2']
- dsc_types_actual.Int8Param.Type == 'System.SByte'
- dsc_types_actual.Int8Param.Value == 127
- dsc_types_actual.Int8ArrayParam.Type == 'System.SByte[]'
- dsc_types_actual.Int8ArrayParam.Value == [127, 127]
- dsc_types_actual.UInt8Param.Type == 'System.Byte'
- dsc_types_actual.UInt8Param.Value == 255
- dsc_types_actual.UInt8ArrayParam.Type == 'System.Byte[]'
- dsc_types_actual.UInt8ArrayParam.Value == [255, 255]
- dsc_types_actual.Int16Param.Type == 'System.Int16'
- dsc_types_actual.Int16Param.Value == 32767
- dsc_types_actual.Int16ArrayParam.Type == 'System.Int16[]'
- dsc_types_actual.Int16ArrayParam.Value == [32767, 32767]
- dsc_types_actual.UInt16Param.Type == 'System.UInt16'
- dsc_types_actual.UInt16Param.Value == 65535
- dsc_types_actual.UInt16ArrayParam.Type == 'System.UInt16[]'
- dsc_types_actual.UInt16ArrayParam.Value == [65535]
- dsc_types_actual.Int32Param.Type == 'System.Int32'
- dsc_types_actual.Int32Param.Value == 2147483647
- dsc_types_actual.Int32ArrayParam.Type == 'System.Int32[]'
- dsc_types_actual.Int32ArrayParam.Value == [2147483647]
- dsc_types_actual.UInt32Param.Type == 'System.UInt32'
- dsc_types_actual.UInt32Param.Value == 4294967295
- dsc_types_actual.UInt32ArrayParam.Type == 'System.UInt32[]'
- dsc_types_actual.UInt32ArrayParam.Value == [4294967295, 4294967295]
- dsc_types_actual.Int64Param.Type == 'System.Int64'
- dsc_types_actual.Int64Param.Value == 9223372036854775807
- dsc_types_actual.Int64ArrayParam.Type == 'System.Int64[]'
- dsc_types_actual.Int64ArrayParam.Value == [-9223372036854775808, 9223372036854775807]
- dsc_types_actual.UInt64Param.Type == 'System.UInt64'
- dsc_types_actual.UInt64Param.Value == 18446744073709551615
- dsc_types_actual.UInt64ArrayParam.Type == 'System.UInt64[]'
- dsc_types_actual.UInt64ArrayParam.Value == [0, 18446744073709551615]
- dsc_types_actual.BooleanParam.Type == 'System.Boolean'
- dsc_types_actual.BooleanParam.Value == True
- dsc_types_actual.BooleanArrayParam.Type == 'System.Boolean[]'
- dsc_types_actual.BooleanArrayParam.Value == [True, True, True, True, True, True, False, False, False, False, False, False]
- dsc_types_actual.CharParam.Type == 'System.Char'
- dsc_types_actual.CharParam.Value == 'c'
- dsc_types_actual.CharArrayParam.Type == 'System.Char[]'
- dsc_types_actual.CharArrayParam.Value == ['c', 'h', 'a', 'r']
- dsc_types_actual.SingleParam.Type == 'System.Single'
- dsc_types_actual.SingleParam.Value|string == '3.402823e+38'
- dsc_types_actual.SingleArrayParam.Type == 'System.Single[]'
- dsc_types_actual.SingleArrayParam.Value|length == 2
- dsc_types_actual.SingleArrayParam.Value[0]|string == '3.402823e+38'
- dsc_types_actual.SingleArrayParam.Value[1]|string == '1.23934937'
- dsc_types_actual.DoubleParam.Type == 'System.Double'
- dsc_types_actual.DoubleParam.Value == '1.79769313486232E+300'
- dsc_types_actual.DoubleArrayParam.Type == 'System.Double[]'
- dsc_types_actual.DoubleArrayParam.Value|length == 2
- dsc_types_actual.DoubleArrayParam.Value[0] == '1.79769313486232E+300'
- dsc_types_actual.DoubleArrayParam.Value[1] == '3.56821831681516'
- dsc_types_actual.DateTimeParam.Type == 'System.DateTime'
- dsc_types_actual.DateTimeParam.Value == '2019-02-22T17:57:31.2311890+00:00'
- dsc_types_actual.DateTimeArrayParam.Type == 'System.DateTime[]'
- dsc_types_actual.DateTimeArrayParam.Value == ['2019-02-22T13:57:31.2311890+00:00', '2019-02-22T09:57:31.2311890+00:00']
- dsc_types_actual.PSCredentialParam.Type == 'System.Management.Automation.PSCredential'
- dsc_types_actual.PSCredentialParam.Value.username == 'username1'
- dsc_types_actual.PSCredentialParam.Value.password == 'password1'
# Hashtable is actually a CimInstance[] of MSFT_KeyValuePairs
- dsc_types_actual.HashtableParam.Type == 'Microsoft.Management.Infrastructure.CimInstance[]'
- dsc_types_actual.HashtableParam.Value|length == 3
# Can't guarantee the order of the keys so just check they are the values they could be
- dsc_types_actual.HashtableParam.Value[0].Key in ["key1", "key2", "key3"]
- dsc_types_actual.HashtableParam.Value[0].Value in ["string 1", "1", ""]
- dsc_types_actual.HashtableParam.Value[0]._cim_instance == 'MSFT_KeyValuePair'
- dsc_types_actual.HashtableParam.Value[1].Key in ["key1", "key2", "key3"]
- dsc_types_actual.HashtableParam.Value[1].Value in ["string 1", "1", ""]
- dsc_types_actual.HashtableParam.Value[1]._cim_instance == 'MSFT_KeyValuePair'
- dsc_types_actual.HashtableParam.Value[2].Key in ["key1", "key2", "key3"]
- dsc_types_actual.HashtableParam.Value[2].Value in ["string 1", "1", ""]
- dsc_types_actual.HashtableParam.Value[2]._cim_instance == 'MSFT_KeyValuePair'
- dsc_types_actual.CimInstanceParam.Type == 'Microsoft.Management.Infrastructure.CimInstance'
- dsc_types_actual.CimInstanceParam.Value.Choice == None
- dsc_types_actual.CimInstanceParam.Value.IntValue == None
- dsc_types_actual.CimInstanceParam.Value.KeyValue == 'a'
- dsc_types_actual.CimInstanceParam.Value.StringArrayValue == None
- dsc_types_actual.CimInstanceParam.Value.StringValue == None
- dsc_types_actual.CimInstanceParam.Value._cim_instance == "ANSIBLE_xTestClass"
- dsc_types_actual.CimInstanceArrayParam.Type == 'Microsoft.Management.Infrastructure.CimInstance[]'
- dsc_types_actual.CimInstanceArrayParam.Value|length == 2
- dsc_types_actual.CimInstanceArrayParam.Value[0].Choice == 'Choice1'
- dsc_types_actual.CimInstanceArrayParam.Value[0].IntValue == 1
- dsc_types_actual.CimInstanceArrayParam.Value[0].KeyValue == 'b'
- dsc_types_actual.CimInstanceArrayParam.Value[0].StringArrayValue == ['abc', 'def']
- dsc_types_actual.CimInstanceArrayParam.Value[0].StringValue == 'string 1'
- dsc_types_actual.CimInstanceArrayParam.Value[0]._cim_instance == 'ANSIBLE_xTestClass'
- dsc_types_actual.CimInstanceArrayParam.Value[1].Choice == 'Choice2'
- dsc_types_actual.CimInstanceArrayParam.Value[1].IntValue == 2
- dsc_types_actual.CimInstanceArrayParam.Value[1].KeyValue == 'c'
- dsc_types_actual.CimInstanceArrayParam.Value[1].StringArrayValue == ['ghi', 'jkl']
- dsc_types_actual.CimInstanceArrayParam.Value[1].StringValue == 'string 2'
- dsc_types_actual.CimInstanceArrayParam.Value[1]._cim_instance == 'ANSIBLE_xTestClass'
- dsc_types_actual.NestedCimInstanceParam.Type == 'Microsoft.Management.Infrastructure.CimInstance'
- dsc_types_actual.NestedCimInstanceParam.Value.CimArrayValue|length == 1
- dsc_types_actual.NestedCimInstanceParam.Value.CimArrayValue[0].Choice == 'Choice2'
- dsc_types_actual.NestedCimInstanceParam.Value.CimArrayValue[0].IntValue == None
- dsc_types_actual.NestedCimInstanceParam.Value.CimArrayValue[0].KeyValue == 'e'
- dsc_types_actual.NestedCimInstanceParam.Value.CimArrayValue[0].StringArrayValue == None
- dsc_types_actual.NestedCimInstanceParam.Value.CimArrayValue[0].StringValue == None
- dsc_types_actual.NestedCimInstanceParam.Value.CimArrayValue[0]._cim_instance == 'ANSIBLE_xTestClass'
- dsc_types_actual.NestedCimInstanceParam.Value.CimValue.Choice == None
- dsc_types_actual.NestedCimInstanceParam.Value.CimValue.IntValue == None
- dsc_types_actual.NestedCimInstanceParam.Value.CimValue.KeyValue == 'd'
- dsc_types_actual.NestedCimInstanceParam.Value.CimValue.StringArrayValue == None
- dsc_types_actual.NestedCimInstanceParam.Value.CimValue.StringValue == None
- dsc_types_actual.NestedCimInstanceParam.Value.CimValue._cim_instance == 'ANSIBLE_xTestClass'
- dsc_types_actual.NestedCimInstanceParam.Value.HashValue|length == 1
- dsc_types_actual.NestedCimInstanceParam.Value.HashValue[0].Key == 'a'
- dsc_types_actual.NestedCimInstanceParam.Value.HashValue[0].Value == 'a'
- dsc_types_actual.NestedCimInstanceParam.Value.HashValue[0]._cim_instance == 'MSFT_KeyValuePair'
- dsc_types_actual.NestedCimInstanceParam.Value.IntValue == 300
- dsc_types_actual.NestedCimInstanceParam.Value.KeyValue == 'key value'
- dsc_types_actual.NestedCimInstanceParam.Value._cim_instance == 'ANSIBLE_xNestedClass'
- name : test DSC with all types older version
win_dsc :
resource_name : xTestResource
module_version : 1.0 .0
Path : '{{ remote_tmp_dir }}\test-types.json'
Ensure : Absent
StringParam : string param old
CimInstanceArrayParam :
- Key : old key
StringValue : string old 1
IntValue : 0
StringArrayValue :
- zyx
- wvu
register : dsc_types_old
- name : get result of test DSC with all types older version
slurp :
path : '{{ remote_tmp_dir }}\test-types.json'
register : dsc_types_old_raw
- name : convert result of test DSC with all types to dict
set_fact :
dsc_types_old_actual : '{{ dsc_types_old_raw.content | b64decode | from_json }}'
- name : assert test DSC with all types older version
assert :
that :
- dsc_types_old is changed
- dsc_types_old.module_version == '1.0.0'
- not dsc_types_old.reboot_required
- dsc_types_old_actual.Version == '1.0.0'
- dsc_types_old_actual.Verbose.Value.IsPresent
- dsc_types_old_actual.DefaultParam.Value == 'Default'
- dsc_types_old_actual.Ensure.Value == 'Absent'
- dsc_types_old_actual.Path.Value == remote_tmp_dir + "\\test-types.json"
- dsc_types_old_actual.StringParam.Type == 'System.String'
- dsc_types_old_actual.StringParam.Value == 'string param old'
- dsc_types_old_actual.CimInstanceArrayParam.Type == 'Microsoft.Management.Infrastructure.CimInstance[]'
- dsc_types_old_actual.CimInstanceArrayParam.Value|length == 1
- not dsc_types_old_actual.CimInstanceArrayParam.Value[0].Choice is defined # 1.0.0 does not have a Choice option
- dsc_types_old_actual.CimInstanceArrayParam.Value[0].IntValue == 0
- dsc_types_old_actual.CimInstanceArrayParam.Value[0].Key == 'old key'
- dsc_types_old_actual.CimInstanceArrayParam.Value[0].StringArrayValue == ['zyx', 'wvu']
- dsc_types_old_actual.CimInstanceArrayParam.Value[0].StringValue == 'string old 1'
- dsc_types_old_actual.CimInstanceArrayParam.Value[0]._cim_instance == 'ANSIBLE_xTestClass'