Reputation: 4403
I have a chef recipe that I'm using for deploying an application. Each time the recipe runs it creates a new "release" (with the current timestamp) directory and deletes older "release" directories leaving only the 5 most recent "release" directories. (similar to how Capistrano's keep_releases works).
To test that functionality I need to run my "deploy" recipe 6 times and verify that there are only 5 "release" directories. It seems that I am not able to have the same recipe in the run_list more than once.
Any ideas?
Thanks!
Upvotes: 4
Views: 2778
Reputation: 1426
Update 2019: use multiple_converge
as described in https://docs.chef.io/config_yml_kitchen.html
Old solution:
You can use duplicate suite names to converge a node twice (or more times).
e.g. in your .kitchen.yml to run the "default" suite twice:
suites:
- name: default
run_list:
- recipe[your-cookbook::recipe]
attributes:
- name: default
run_list:
- recipe[your-cookbook::recipe]
attributes:
However maybe you want to use ChefSpec to test it without having to converge a node each time.
Tested with test-kitchen 1.4.0 + kitchen-vagrant 0.18.0
Upvotes: 4
Reputation: 520
There is an option within the provisioner in Test Kitchen now which allows you to run multiple converges.
The provisioner configuration below will tell Chef to converge 3 times:
provisioner:
name: chef_zero
product_name: chef
deprecations_as_errors: true
multiple_converge: 3
Upvotes: 3
Reputation: 11
If you use kitchen dokken to test your cookbook, you can simply do 'kitchen converge' again once the node is converged. It is simillar to running chef-client again on converged node.
Upvotes: 1