def role(role, save=False): """Apply the given role to a node ignores existing config unless save=True""" # Do some checks if not env.host_string: abort('no node specified\nUsage: cook node:MYNODE role:MYROLE') print "\n== Applying role {0} to node {1} ==".format(role, env.host_string) if not os.path.exists('roles/' + role + '.json'): if os.path.exists('roles/' + role + '.rb'): msg = "Role '{0}' only found as '{1}.rb'.".format(role, role) msg += " It should be in json format." abort(msg) else: abort("Role '{0}' not found".format(role)) # Now create configuration and sync node data = {"run_list": ["role[{0}]".format(role)]} filepath = chef.save_config(save, data, env.host_string) chef.sync_node(filepath, cookbook_paths, node_work_path)
def recipe(recipe, save=False): """Apply the given recipe to a node ignores existing config unless save=True """ # Do some checks if not env.host_string: abort('no node specified\nUsage: cook node:MYNODE recipe:MYRECIPE') print "\n== Executing recipe {0} on node {1} ==".format( recipe, env.host_string) recipe_found = False for cookbook_path in cookbook_paths: if os.path.exists(os.path.join(cookbook_path, recipe.split('::')[0])): recipe_found = True break if not recipe_found: abort('Cookbook "{0}" not found'.format(recipe)) # Now create configuration and sync node data = {"run_list": ["recipe[{0}]".format(recipe)]} filepath = chef.save_config(save, data, env.host_string) chef.sync_node(filepath, cookbook_paths, node_work_path)