Skip to content

Commit

Permalink
add powershell provisioner
Browse files Browse the repository at this point in the history
  • Loading branch information
mayn committed Aug 16, 2017
1 parent e2d6632 commit f8a58e0
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
## (UNRELEASED)

### FEATURES:
* provisioner/PowerShell: add support for packer's powershell provisioner
* provisioner/PuppetMasterless: add support for packer's puppet masterless provisioner
* provisioner/PuppetServer: add support for packer's puppet server provisioner
* provisioner/WindowsShell: add support for packer's windows shell provisioner
Expand Down
1 change: 1 addition & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ Provisioners:
- ansible-local
- ansible
- file
- powershell
- puppet-masterless
- puppet-server
- salt-masterless
Expand Down
41 changes: 40 additions & 1 deletion src/packerlicious/provisioner.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,46 @@ class File(PackerProvisioner):
}


class PowerShell(PackerProvisioner):
"""
PowerShell Provisioner
https://www.packer.io/docs/provisioners/powershell.html
"""
resource_type = "powershell"

# PowerShell Template Variables
Path = TemplateVar("Path")
Vars = TemplateVar("Vars")

# PowerShell Environment Variables
PackerBuildName = EnvVar("PACKER_BUILD_NAME")
PackerBuilderType = EnvVar("PACKER_BUILDER_TYPE")
PackerHttpAddr = EnvVar("PACKER_HTTP_ADDR")

props = {
'inline': ([basestring], False),
'script': (basestring, False),
'scripts': ([basestring], False),
'binary': (validator.boolean, False),
'environment_vars': ([basestring], False),
'execute_command': (basestring, False),
'elevated_user': (basestring, False),
'elevated_password': (basestring, False),
'remote_path': (basestring, False),
'skip_clean': (validator.boolean, False),
'start_retry_timeout': (basestring, False),
'valid_exit_codes': ([int], False),
}

def validate(self):
conds = [
'inline',
'script',
'scripts'
]
validator.exactly_one(self.__class__.__name__, self.properties, conds)


class PuppetMasterless(PackerProvisioner):
"""
Puppet Masterless
Expand Down Expand Up @@ -136,7 +176,6 @@ class PuppetServer(PackerProvisioner):
}



class SaltMasterless(PackerProvisioner):
"""
Salt Masterless Provisioner
Expand Down
14 changes: 14 additions & 0 deletions tests/packerlicious/test_provisioner_powershell.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import pytest

import packerlicious.provisioner as provisioner


class TestPowerShellProvisioner(object):

def test_required_fields_missing(self):
b = provisioner.PowerShell()

with pytest.raises(ValueError) as excinfo:
b.to_dict()
assert 'PowerShell: one of the following must be specified: inline, script, scripts' == str(excinfo.value)

0 comments on commit f8a58e0

Please sign in to comment.