diff --git a/libraries/cmd_helper.rb b/libraries/cmd_helper.rb index 089dad21..98838a07 100644 --- a/libraries/cmd_helper.rb +++ b/libraries/cmd_helper.rb @@ -10,8 +10,7 @@ def self.cmd_options(options) end def self.dn(name, ou, domain) - containers = ['users', 'builtin', 'computers', 'foreignsecurityprincipals', - 'managed service accounts'] + containers = ['users', 'builtin', 'computers', 'foreignsecurityprincipals', 'managed service accounts'] dn = "CN=#{name}," unless ou.nil? if containers.include? ou.downcase @@ -36,12 +35,10 @@ def self.ou_leaf(ou) end def self.shell_out(cmd, user, pass, domain) - shellout = Mixlib::ShellOut.new(cmd, user: user, password: pass, - domain: domain) + shellout = Mixlib::ShellOut.new(cmd, user: user, password: pass, domain: domain) shellout.run_command if shellout.exitstatus != 0 - fail "Failed to execute command.\nSTDOUT: #{shellout.stdout}\nSTDERR: - #{shellout.stderr}" + fail "Failed to execute command.\nSTDOUT: #{shellout.stdout}\nSTDERR: #{shellout.stderr}" end shellout end diff --git a/providers/contact.rb b/providers/contact.rb index d3521ec5..549f30d8 100644 --- a/providers/contact.rb +++ b/providers/contact.rb @@ -35,15 +35,13 @@ cmd = 'dsadd' cmd << ' contact ' cmd << "\"" - cmd << CmdHelper.dn(new_resource.name, new_resource.ou, - new_resource.domain_name) + cmd << CmdHelper.dn(new_resource.name, new_resource.ou, new_resource.domain_name) cmd << "\"" cmd << CmdHelper.cmd_options(new_resource.options) Chef::Log.info(print_msg("create #{new_resource.name}")) - CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, - new_resource.cmd_domain) + CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, new_resource.cmd_domain) new_resource.updated_by_last_action(true) end @@ -53,14 +51,12 @@ if exists? cmd = 'dsmod' cmd << ' contact ' - cmd << CmdHelper.dn(new_resource.name, new_resource.ou, - new_resource.domain_name) + cmd << CmdHelper.dn(new_resource.name, new_resource.ou, new_resource.domain_name) cmd << CmdHelper.cmd_options(new_resource.options) Chef::Log.info(print_msg("modify #{new_resource.name}")) - CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, - new_resource.cmd_domain) + CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, new_resource.cmd_domain) new_resource.updated_by_last_action(true) else @@ -72,14 +68,12 @@ action :move do if exists? cmd = 'dsmove ' - cmd << CmdHelper.dn(new_resource.name, new_resource.ou, - new_resource.domain_name) + cmd << CmdHelper.dn(new_resource.name, new_resource.ou, new_resource.domain_name) cmd << CmdHelper.cmd_options(new_resource.options) Chef::Log.info(print_msg("move #{new_resource.name}")) - CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, - new_resource.cmd_domain) + CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, new_resource.cmd_domain) new_resource.updated_by_last_action(true) else @@ -91,15 +85,13 @@ action :delete do if exists? cmd = 'dsrm ' - cmd << CmdHelper.dn(new_resource.name, new_resource.ou, - new_resource.domain_name) + cmd << CmdHelper.dn(new_resource.name, new_resource.ou, new_resource.domain_name) cmd << ' -noprompt' cmd << CmdHelper.cmd_options(new_resource.options) Chef::Log.info(print_msg("delete #{new_resource.name}")) - CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, - new_resource.cmd_domain) + CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, new_resource.cmd_domain) new_resource.updated_by_last_action(true) else diff --git a/providers/group.rb b/providers/group.rb index bf41104b..6da93082 100644 --- a/providers/group.rb +++ b/providers/group.rb @@ -35,15 +35,13 @@ cmd = 'dsadd' cmd << ' group ' cmd << "\"" - cmd << CmdHelper.dn(new_resource.name, new_resource.ou, - new_resource.domain_name) + cmd << CmdHelper.dn(new_resource.name, new_resource.ou, new_resource.domain_name) cmd << "\"" cmd << CmdHelper.cmd_options(new_resource.options) Chef::Log.info(print_msg("create #{new_resource.name}")) - CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, - new_resource.cmd_domain) + CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, new_resource.cmd_domain) new_resource.updated_by_last_action(true) end @@ -53,14 +51,12 @@ if exists? cmd = 'dsmod' cmd << ' group ' - cmd << CmdHelper.dn(new_resource.name, new_resource.ou, - new_resource.domain_name) + cmd << CmdHelper.dn(new_resource.name, new_resource.ou, new_resource.domain_name) cmd << CmdHelper.cmd_options(new_resource.options) Chef::Log.info(print_msg("modify #{new_resource.name}")) - CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, - new_resource.cmd_domain) + CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, new_resource.cmd_domain) new_resource.updated_by_last_action(true) else @@ -72,14 +68,12 @@ action :move do if exists? cmd = 'dsmove ' - cmd << CmdHelper.dn(new_resource.name, new_resource.ou, - new_resource.domain_name) + cmd << CmdHelper.dn(new_resource.name, new_resource.ou, new_resource.domain_name) cmd << CmdHelper.cmd_options(new_resource.options) Chef::Log.info(print_msg("move #{new_resource.name}")) - CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, - new_resource.cmd_domain) + CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, new_resource.cmd_domain) new_resource.updated_by_last_action(true) else @@ -91,15 +85,13 @@ action :delete do if exists? cmd = 'dsrm ' - cmd << CmdHelper.dn(new_resource.name, new_resource.ou, - new_resource.domain_name) + cmd << CmdHelper.dn(new_resource.name, new_resource.ou, new_resource.domain_name) cmd << ' -noprompt' cmd << CmdHelper.cmd_options(new_resource.options) Chef::Log.info(print_msg("delete #{new_resource.name}")) - CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, - new_resource.cmd_domain) + CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, new_resource.cmd_domain) new_resource.updated_by_last_action(true) else diff --git a/providers/group_member.rb b/providers/group_member.rb index 211ac222..f8261731 100644 --- a/providers/group_member.rb +++ b/providers/group_member.rb @@ -26,10 +26,8 @@ # action :add do - group_dn = CmdHelper.dn(new_resource.group_name, new_resource.group_ou, - new_resource.domain_name) - user_dn = CmdHelper.dn(new_resource.user_name, new_resource.user_ou, - new_resource.domain_name) + group_dn = CmdHelper.dn(new_resource.group_name, new_resource.group_ou, new_resource.domain_name) + user_dn = CmdHelper.dn(new_resource.user_name, new_resource.user_ou, new_resource.domain_name) if member_of?(user_dn, group_dn) Chef::Log.debug('The user is already member of the group') @@ -39,26 +37,21 @@ Chef::Log.info(print_msg("add #{new_resource.user_name} to #{new_resource.group_name}")) - CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, - new_resource.cmd_domain) + CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, new_resource.cmd_domain) new_resource.updated_by_last_action(true) end end action :remove do - group_dn = CmdHelper.dn(new_resource.group_name, new_resource.group_ou, - new_resource.domain_name) - user_dn = CmdHelper.dn(new_resource.user_name, new_resource.user_ou, - new_resource.domain_name) + group_dn = CmdHelper.dn(new_resource.group_name, new_resource.group_ou, new_resource.domain_name) + user_dn = CmdHelper.dn(new_resource.user_name, new_resource.user_ou, new_resource.domain_name) if member_of?(user_dn, group_dn) cmd = dsmod_group_cmd(group_dn, user_dn, '-rmmbr') - Chef::Log.info(print_msg("remove #{new_resource.user_name} - from #{new_resource.group_name}")) - CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, - new_resource.cmd_domain) + Chef::Log.info(print_msg("remove #{new_resource.user_name} from #{new_resource.group_name}")) + CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, new_resource.cmd_domain) new_resource.updated_by_last_action(true) else diff --git a/providers/user.rb b/providers/user.rb index 8a118d88..f4017104 100644 --- a/providers/user.rb +++ b/providers/user.rb @@ -30,17 +30,18 @@ Chef::Log.debug('The object already exists') new_resource.updated_by_last_action(false) else + Chef::Log.info("dn is #{dn}") cmd = 'dsadd' cmd << ' user ' cmd << "\"" cmd << dn cmd << "\"" + Chef::Log.info(print_msg("create #{new_resource.name}")) cmd << CmdHelper.cmd_options(new_resource.options) - CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, - new_resource.cmd_domain) + CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, new_resource.cmd_domain) new_resource.updated_by_last_action(true) end @@ -56,8 +57,7 @@ cmd << CmdHelper.cmd_options(new_resource.options) Chef::Log.info(print_msg("modify #{new_resource.name}")) - CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, - new_resource.cmd_domain) + CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, new_resource.cmd_domain) new_resource.updated_by_last_action(true) else @@ -74,8 +74,7 @@ cmd << CmdHelper.cmd_options(new_resource.options) Chef::Log.info(print_msg("move #{new_resource.name}")) - CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, - new_resource.cmd_domain) + CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, new_resource.cmd_domain) new_resource.updated_by_last_action(true) else @@ -93,8 +92,7 @@ cmd << CmdHelper.cmd_options(new_resource.options) Chef::Log.info(print_msg("delete #{new_resource.name}")) - CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, - new_resource.cmd_domain) + CmdHelper.shell_out(cmd, new_resource.cmd_user, new_resource.cmd_pass, new_resource.cmd_domain) new_resource.updated_by_last_action(true) else @@ -120,13 +118,11 @@ def exists? reverse_name = new_resource.name.split(' ').reverse.map! { |k| k }.join(', ') contact = CmdHelper.shell_out("dsquery contact -name \"#{reverse_name}\"", cmd_user, cmd_pass, cmd_domain) user = CmdHelper.shell_out("dsquery user -name \"#{reverse_name}\"", cmd_user, cmd_pass, cmd_domain) - contact.stdout.downcase.include?('dc') || - user.stdout.downcase.include?('dc') + contact.stdout.downcase.include?('dc') || user.stdout.downcase.include?('dc') else contact = CmdHelper.shell_out("dsquery contact -name \"#{new_resource.name}\"", cmd_user, cmd_pass, cmd_domain) user = CmdHelper.shell_out("dsquery user -name \"#{new_resource.name}\"", cmd_user, cmd_pass, cmd_domain) - contact.stdout.downcase.include?('dc') || - user.stdout.downcase.include?('dc') + contact.stdout.downcase.include?('dc') || user.stdout.downcase.include?('dc') end end diff --git a/test/fixtures/test_cookbooks/test_windows_ad/recipes/group.rb b/test/fixtures/test_cookbooks/test_windows_ad/recipes/group.rb new file mode 100644 index 00000000..4b30d75d --- /dev/null +++ b/test/fixtures/test_cookbooks/test_windows_ad/recipes/group.rb @@ -0,0 +1,20 @@ +user = 'Administrator' +pass = 'Passw0rd' +domain = 'contoso.local' + +windows_ad_group 'Group-temp' do + action :create +end + +windows_ad_group 'Group1' do + action :create +end + +windows_ad_group 'group-temp' do + action :delete +end + +windows_ad_group 'OU-group' do + action :create + ou 'Computers' +end