Search code examples
chef-infratest-kitchen

How can I get test kitchen run same chef recipe multiple times?


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!


Solution

  • 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