Сбой упаковщика из-за несуществующего пути настраиваемой книги рецептов, созданного локальным инициатором оболочки (berks)

У меня есть конфигурация упаковщика, которая предусматривает использование chef-solo в AWS EC2. Это хорошо работает. Я ввел berkshelf для управления сторонними кулинарными книгами, но это тоже не работает.

Я работаю в репозитории шеф-поваров, который разработал локально кулинарные книги, роли, пакеты данных и т. д. Вводя berks, я хочу сохранить каталог cookbooks в чистоте и поместить сторонние кулинарные книги в vendor/cookbooks (который исключен git, поэтому репозитории должны быть чистыми / сводит к минимуму вероятность того, что другие разработчики добавят / вставят кулинарные книги, управляемые Berks, в vcs). Итак, я добавил локальный инициатор оболочки перед инициатором chef-solo, который запускает berks vendor vendor/cookbooks, и обновил инициатор chef-solo с помощью cookbook_paths ["cookbooks","vendor/cookbooks"]. Моя идея состоит в том, что shell-local будет запускаться до chef-solo, и будут доступны оба пути к кулинарной книге.

Однако, когда я запускаю сборку упаковщика, он быстро терпит неудачу, пытаясь разрешить пути к кулинарной книге, прежде чем сборщик AWS даже начинает сборку, что приводит к ошибке со ссылкой на несуществующий каталог vendor / cookbooks. Вот сегмент упаковщиков:

   "provisioners" : [
        {
            "type": "shell-local",
            "command": "bundle install && bundle exec berks vendor vendor/cookbooks"
        },
        {
            "type" : "chef-solo",
            "cookbook_paths" : ["cookbooks","vendor/cookbooks"],
            "environments_path" : "environments",
            "roles_path" : "roles",
            "run_list" : ["role[somerole]"]
        }
    ],

Когда я запускаю это, он терпит неудачу:

amazon-ebs output will be in this color.

1 error(s) occurred:

* Bad cookbook path 'vendor/cookbooks': stat vendor/cookbooks: no such file or directory

Есть ли в пакере механизм, который сначала запускает локальную оболочку, прежде чем разрешить инициализатор chef-solo? Я бы хотел избежать запуска berks в построителе (т.е. я хочу, чтобы кулинарные книги разрешались хостом, на котором запущен упаковщик), и в идеале хотел бы, чтобы этот запуск выполнялся исключительно в упаковщике, а не в сценариях оболочки, которые сначала запускают berks. На данный момент я решил эту проблему, продав в cookbooks, но также хотел бы избежать этого маршрута, если это возможно.

0
0
226
1

Ответы 1

Просто создайте пустой каталог vendor/cookbooks.

Is there a mechanism in packer that will run the shell-local first before resolving the chef-solo provisioner?

Нет

and would ideally like to have this run solely in packer as apposed to wrapper scripts that run berks first.

Я бы рекомендовал пересмотреть, если у вас есть другая подобная проблема. Packer пытается сделать что-то хорошо и оставить выделение, которое может быть лучше решено сценарием-оболочкой.

Другие вопросы по теме