From 2d9122859121773088b6ddaea20868373c1b0366 Mon Sep 17 00:00:00 2001 From: Matthew Aynalem Date: Wed, 16 Aug 2017 06:27:32 -0700 Subject: [PATCH] add chef-client provisioner --- CHANGELOG.md | 1 + README.rst | 1 + src/packerlicious/provisioner.py | 34 ++++++++++++++++++++ tests/packerlicious/test_provisioner_chef.py | 8 +++++ 4 files changed, 44 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4ea6c0..4cc64fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## (UNRELEASED) ### FEATURES: +* provisioner/ChefClient: add support for packer's chef client provisioner * provisioner/ChefSolo: add support for packer's chef solo provisioner * provisioner/Converge: add support for packer's converge provisioner * provisioner/PowerShell: add support for packer's powershell provisioner diff --git a/README.rst b/README.rst index 1e3d985..f8da264 100644 --- a/README.rst +++ b/README.rst @@ -114,6 +114,7 @@ Provisioners: - ansible-local - ansible +- chef-client - chef-solo - converge - file diff --git a/src/packerlicious/provisioner.py b/src/packerlicious/provisioner.py index c14cdee..8260c5b 100644 --- a/src/packerlicious/provisioner.py +++ b/src/packerlicious/provisioner.py @@ -74,6 +74,40 @@ class Ansible(PackerProvisioner): } +class ChefClient(PackerProvisioner): + """ + Chef Client Provisioner + https://www.packer.io/docs/provisioners/chef-client.html + """ + resource_type = "chef-client" + + # guest_os_type options + UNIX = "unix" + WINDOWS = "windows" + + props = { + 'chef_environment': (basestring, False), + 'config_template': (basestring, False), + 'encrypted_data_bag_secret_path': (basestring, False), + 'execute_command': (basestring, False), + 'guest_os_type': (validator.string_list_item([UNIX, WINDOWS]), False), + 'install_command': (basestring, False), + 'json': (basestring, False), + 'knife_command': (basestring, False), + 'node_name': (basestring, False), + 'prevent_sudo': (validator.boolean, False), + 'run_list': ([basestring], False), + 'server_url': (basestring, False), + 'skip_clean_client': (validator.boolean, False), + 'skip_clean_node': (validator.boolean, False), + 'skip_install': (validator.boolean, False), + 'staging_directory': (basestring, False), + 'client_key': (basestring, False), + 'validation_client_name': (basestring, False), + 'validation_key_path': (basestring, False), + } + + class ChefSolo(PackerProvisioner): """ Chef Solo Provisioner diff --git a/tests/packerlicious/test_provisioner_chef.py b/tests/packerlicious/test_provisioner_chef.py index 1532f39..0fa2df0 100644 --- a/tests/packerlicious/test_provisioner_chef.py +++ b/tests/packerlicious/test_provisioner_chef.py @@ -3,6 +3,14 @@ import packerlicious.provisioner as provisioner +class TestChefClientProvisioner(object): + + def test_no_required_fields(self): + b = provisioner.ChefClient() + + b.to_dict() + + class TestChefSoloProvisioner(object): def test_no_required_fields(self):