I'm assuming you're the one who asked this on StackOverflow recently... 

Please file a bug on this under the ansible/ansible project- it looks like 
it's not a Windows-specific issue, given where it's failing. No guarantees 
we'll be able to thread the needle correctly for separating the script name 
from the args in the free-form script arg, but others have asked for a more 
explicit separation between script name and args in our script action, and 
this would be an excellent case for it.

Thanks,

-Matt

On Wednesday, June 22, 2016 at 9:59:59 AM UTC-7, J Hawkesworth wrote:
>
>
> Looking at the integration tests for the script module, which you can find 
> here, 
> https://github.com/ansible/ansible/blob/devel/test/integration/roles/test_win_script/tasks/main.yml
>  there 
> aren't any tests which demonstrate spaces in the file name, so I think its 
> a case of it being something that's not expected.  Fortunately being an 
> open source project anyone who is troubled by it can dig in and propose an 
> enhancement.
>
> I'd strongly recommend having a look at roles as they are a great 'unit of 
> reuse'.  I prefer modules to be small and do one thing well as that makes 
> them much more re-usable and composable with other modules - but ultimately 
> it depends on what you need to achieve.
>
> Hope this helps,
>
> Jon
>
> On Wednesday, June 22, 2016 at 3:10:03 PM UTC+1, Kenny Evitt wrote:
>>
>> Hi Jon,
>>
>> I'm just starting out with Ansible so I haven't created any roles, nor am 
>> I using any that anyone else created.
>>
>> The file is in the */etc/ansible/files *directory.
>>
>> Escaping the spaces didn't work. And it definitely seems like it's 
>> Ansible itself that fails to parse the spaces, at least based on the error 
>> message.
>>
>> I tried changing `script` to this:
>>
>> ```
>>     script: ./files/name\ of\ a\ script.ps1 -Param1 {{ variable_name }}
>> ```
>>
>> But I get the same error as before.
>>
>> I got it to work by renaming the script and replacing the spaces with 
>> underscores; the updated `script`:
>>
>> ```
>>   script: "./files/name_of_a_script.ps1 -Param1 {{ variable_name }}"
>> ```
>>
>> It also worked without quoting:
>>
>> ```
>>   script: ./files/name_of_a_script.ps1 -Param1 {{ variable_name }}
>> ```
>>
>> I'll take a look at creating a module for this. That'd certainly be a 
>> little cleaner than adding an additional task to save some info to a 
>> register variable and use that to implement a custom `changed_when` setting 
>> for this task.
>>
>> But just for clarification – *should *the script module support scripts 
>> with spaces in their path on Windows hosts?
>>
>> Thanks,
>> Kenny
>>
>> On Wednesday, June 22, 2016 at 7:06:53 AM UTC-4, J Hawkesworth wrote:
>>>
>>> So just so we are clear... script attempts to pick .ps1 off your ansible 
>>> controller and transfer it to the windows node before running it.  If you 
>>> want to run a .ps1 that is already there right now your only choice is to 
>>> use raw.
>>>
>>> If your script task is in a role then 'role magic' (as I have just 
>>> decided to call it) will find files in the files subdir of your role 
>>> without needing a relative path.
>>>
>>> So like this ought to at least stop it looking in 
>>> /etc/ansible\.files\name... like it is at the moment.
>>>
>>>  ```
>>>     - name: Run a script
>>>       script: name of a script.ps1 -Param1 {{ variable_name }}
>>> ```
>>>
>>> You might need to escape the spaces in the file name
>>>
>>>
>>>  ```
>>>     - name: Run a script
>>>       script: name\ of\ a\ script.ps1 -Param1 {{ variable_name }}
>>> ```
>>>
>>> However, if at all possible, I'd recommend saving yourself some pain and 
>>> renaming the .ps1 to avoid spaces, because powershell is very easily 
>>> confused when it comes to parameter parsing (especially when calling 
>>> external programs from within powershell).
>>>
>>> Better still, convert the powershell into an ansible module if at all 
>>> possible.  That way you can do change detection in the powershell (script 
>>> will allways report 'changed').  Its really not that much more work to make 
>>> a module - the only extra things are handling the module parameters and 
>>> setting up the contents of the object that contains the outcome of the 
>>> module.
>>>
>>> Hope this helps,
>>>
>>> Jon
>>>
>>>
>>> On Tuesday, June 21, 2016 at 8:43:11 PM UTC+1, Kenny Evitt wrote:
>>>>
>>>> I'm trying to run a (PowerShell) script with a path in its name:
>>>>
>>>> ```
>>>>     - name: Run a script
>>>>       script: '"./files/name of a script.ps1" -Param1 {{ variable_name 
>>>> }}'
>>>> ```
>>>>
>>>> The above is only the latest attempting at quoting/escaping I've tried. 
>>>> Regardless, I get an error like this when I run the playbook containing 
>>>> the 
>>>> above task:
>>>>
>>>> ```
>>>> TASK [Run a script] *****************************
>>>> task path: /etc/ansible/playbook.yml:38
>>>> <192.168.200.245> ESTABLISH WINRM CONNECTION FOR USER: 
>>>> SOME-HOST\Administrator on PORT 5986 TO 192.168.200.245
>>>> <192.168.200.245> EXEC Set-StrictMode -Version Latest
>>>> (New-Item -Type Directory -Path $env:temp -Name 
>>>> "ansible-tmp-1466538051.8-95578181041077").FullName | Write-Host 
>>>> -Separator 
>>>> '';
>>>> <192.168.200.245> PUT "/etc/ansible/"./files/name\" TO 
>>>> "C:\Users\Administrator\AppData\Local\Temp\ansible-tmp-1466537998.0-243829631467080\name"
>>>> fatal: [some-host]: FAILED! => {"failed": true, "msg": "file or module 
>>>> does not exist: \"/etc/ansible/\"./files/name\\\""}
>>>>
>>>> ```
>>>>
>>>> Any ideas?
>>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/40be9c5a-6523-4dbf-8f34-222c5f7af599%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to