So everybody just does copy/paste and manages multiple files by hand? A
nightmare indeed.

On Thu, Sep 5, 2019 at 4:13 PM Nicholas Bayle <
[email protected]> wrote:

> So I'm trying to merge multiple packer json files together using the
> following json files:
> - variables used by all platforms
> - platform-specific requirements (usually a builder & sometimes a
> provisioner and/or post-processor)
> - the provisioners used for all platforms
> - the post-processors used by all platforms
>
> So, generating the json and running packer to build a VM would look
> roughly like:
> PACKER_LOG=1 jq -s 'reduce .[] as $item ({}; . * $item)'
> packer-variables.json packer-vm.json packer-provisioners.json
> packer-post-processors.json | packer build -force -
>
> The json output at first glance looks ok, but on closer inspection I have
> an issue. If packer-vm.json contains this snippet (among other things):
>   "provisioners": [
>     {
>       "type": "shell",
>       "inline": ["echo 'vagrant' | sudo -S -- bash -c 'dd if=/dev/zero
> of=/EMPTY bs=1M; rm -f /EMPTY; sync'"]
>     }
>   ],
>
> *and* packer-provsioners.json contains:
> {
>   "provisioners": [
>     {
>       "type": "shell",
>       "inline": ["echo 'vagrant' | sudo -S bash -c 'echo {
> \\\"platform_type\\\": \\\"{{user `platform`}}\\\" } > /.platform_info' &&
> echo 'vagrant' | sudo -S chmod 666 /.platform_info"]
>     },
>     {
>       "type": "chef-solo",
>       "cookbook_paths": ["cookbooks"],
>       "run_list": ["things"],
>       "version": "14.13",
>       "chef_environment": "{{user `chef_env_type`}}",
>       "environments_path": "./environments"
>     },
>     {
>       "type": "shell",
>       "inline": ["echo 'vagrant' | sudo -S apt-get --yes --purge
> autoremove chef"]
>     },
>     {
>       "type": "shell",
>       "inline": ["dpkg-query -f '${Package} ${Version}\n' -W >
> /tmp/manifest; sleep 2"]
>     },
>     {
>       "type": "file",
>       "source": "/tmp/manifest",
>       "destination": "manifest",
>       "direction": "download"
>     },
>     {
>       "type": "shell",
>       "inline": ["rm /tmp/manifest"]
>     }
>   ]
> }
>
> Then jq will just wipe out the provisioners from packer-vm.json (i.e. no
> dd command in this example). Does anyone know the magic jq sauce to
> preserve that during a merge?
>
> Nick
>
>
>
>
> On Tue, Jun 11, 2019 at 10:15 AM Rickard von Essen <
> [email protected]> wrote:
>
>> or you can pipe it like this:
>>
>> cat template.json | packer build -
>>
>>
>> On Tue, Jun 11, 2019 at 3:13 PM Nasir Amin <[email protected]> wrote:
>>
>>> Hi Richard,
>>>
>>> Thanks. So that means I'll have to generate files at runtime and then
>>> delete them once the packer build has completed?
>>>
>>> Regards,
>>>
>>> On Tuesday, June 11, 2019 at 1:30:51 PM UTC+1, Rickard von Essen wrote:
>>>>
>>>> You can use jq to join several json files and thus keep snippets that
>>>> you join together. See
>>>> https://stackoverflow.com/questions/19529688/how-to-merge-2-json-file-using-jq
>>>>
>>>> On Tue, Jun 11, 2019 at 12:42 PM Nasir Amin <[email protected]> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I am using Packer version 1.4.1
>>>>> What is the best practice to manage generic templates.
>>>>> We have a few packer template files for different windows versions.
>>>>> The template's builders section is common and we use var files to pass in
>>>>> any user variables.
>>>>>
>>>>> The reason we are having to keep multiple json template files is due
>>>>> to the Provisioner sections being different for different types of
>>>>> templates.
>>>>>
>>>>> Question:
>>>>> Is there a way we can use the same template file with just the
>>>>> builders section.
>>>>> For provisioners, we can either put them in a separate file and then
>>>>> somehow inject it into the main tempalte OR
>>>>> if we can pass in the Provisioners in the form of a json array through
>>>>> a user variable from a variables file?
>>>>>
>>>>> Some of my provisioners are powershell scripts, ansible and windows
>>>>> restart. Is it possible to pass in provisioners from a variable file like
>>>>> this?
>>>>>
>>>>>
>>>>>   "host_provisioners": [
>>>>>     {
>>>>>       "type": "powershell",
>>>>>       "inline": [
>>>>>                 "cmd.exe /c powershell.exe Set-ExecutionPolicy 
>>>>> Unrestricted -force",
>>>>>                 "a:\\scripts\\Configure-MinorSettings.ps1",
>>>>>                 "a:\\scripts\\win2019-setup-ssh.ps1",
>>>>>                 "a:\\scripts\\Setup-Docker.ps1"
>>>>>                 ]
>>>>>     },
>>>>>     {
>>>>>       "type": "windows-restart",
>>>>>       "restart_check_command": "powershell -command \"& {Write-Output 
>>>>> 'Guest Restarted Successfully.'}\""
>>>>>     }
>>>>> ]
>>>>> }
>>>>>
>>>>>
>>>>> Then in the main template file where my builders are, I do this:
>>>>>
>>>>> "provisioners": "{{user host_provisioners }}"
>>>>>
>>>>> It seems like you have to put provisioners and builders in the same
>>>>> file. It would be good if we can do on one of the following and if it is
>>>>> already possible:
>>>>>
>>>>>
>>>>>    - Isolate builders and provisioners into separate files and then
>>>>>    combine them in the packer build command with a flag like
>>>>>    --provisioner-file=<path to file>
>>>>>    - OR Allow passing the provisioners from a variables file.
>>>>>
>>>>> The first approach will probably be more flexible.
>>>>>
>>>>> What is the best practice on structuring and managing multiple
>>>>> templates or making your templates generic? As things stand, it seems
>>>>> impossible to apply DRY principles to Packer.
>>>>>
>>>>> I'll really appreciate any guidance on this please as our packer
>>>>> scripts and templates are becoming a bit hard to scale and maintain.
>>>>> I see packer will eventually support HCL2 which should make some of
>>>>> the things easier e.g. conditional provisioners etc
>>>>> https://github.com/hashicorp/packer/issues/1768
>>>>>
>>>>>
>>>>> Regards,
>>>>>
>>>>> Nas
>>>>>
>>>>>
>>>>> --
>>>>> This mailing list is governed under the HashiCorp Community Guidelines
>>>>> - https://www.hashicorp.com/community-guidelines.html. Behavior in
>>>>> violation of those guidelines may result in your removal from this mailing
>>>>> list.
>>>>>
>>>>> GitHub Issues: https://github.com/mitchellh/packer/issues
>>>>> IRC: #packer-tool on Freenode
>>>>> ---
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Packer" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to [email protected].
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/packer-tool/ea90623a-2da1-453e-969c-0e7c39a04969%40googlegroups.com
>>>>> <https://groups.google.com/d/msgid/packer-tool/ea90623a-2da1-453e-969c-0e7c39a04969%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>> --
>>> This mailing list is governed under the HashiCorp Community Guidelines -
>>> https://www.hashicorp.com/community-guidelines.html. Behavior in
>>> violation of those guidelines may result in your removal from this mailing
>>> list.
>>>
>>> GitHub Issues: https://github.com/mitchellh/packer/issues
>>> IRC: #packer-tool on Freenode
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "Packer" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/packer-tool/317528bb-11d0-42f8-ad75-e6fcfa9411e0%40googlegroups.com
>>> <https://groups.google.com/d/msgid/packer-tool/317528bb-11d0-42f8-ad75-e6fcfa9411e0%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>> --
>> This mailing list is governed under the HashiCorp Community Guidelines -
>> https://www.hashicorp.com/community-guidelines.html. Behavior in
>> violation of those guidelines may result in your removal from this mailing
>> list.
>>
>> GitHub Issues: https://github.com/mitchellh/packer/issues
>> IRC: #packer-tool on Freenode
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "Packer" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/packer-tool/CALz9Rt8sZk%2BEQGpFqmaWk_4Tc97n%2BBwwY_EvZ9Yu4LdXBaGvnw%40mail.gmail.com
>> <https://groups.google.com/d/msgid/packer-tool/CALz9Rt8sZk%2BEQGpFqmaWk_4Tc97n%2BBwwY_EvZ9Yu4LdXBaGvnw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
This mailing list is governed under the HashiCorp Community Guidelines - 
https://www.hashicorp.com/community-guidelines.html. Behavior in violation of 
those guidelines may result in your removal from this mailing list.

GitHub Issues: https://github.com/mitchellh/packer/issues
IRC: #packer-tool on Freenode
--- 
You received this message because you are subscribed to the Google Groups 
"Packer" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/packer-tool/CAGzi4%3D7RD0VnjKWa8QP9J9ythbAjO8L0GkSH3D9Qivs%2B32wDHw%40mail.gmail.com.

Reply via email to