A cross-platform module to validate infrastructure as code (IaC) and objects using PowerShell rules. PSRule works great and integrates with popular continuous integration (CI) systems.
Features of PSRule include:
- DevOps - Built to support DevOps culture and tools.
- Extensible - Define tests using YAML, JSON, or PowerShell format.
- Reusable - Reuse and share rules across teams or organizations.
- Extensible:
- Provide an execution environment (tools and language) to validate infrastructure code.
- Handling of common concerns such as input/ output/ reporting should be handled by the engine.
- Language must be flexible enough to support a wide range of use cases.
- DevOps:
- Validation should support and enhance DevOps workflows by providing fast feedback in pull requests.
- Allow quality gates to be implemented between environments such development, test, and production.
- Cross-platform:
- A wide range of platforms can be used to author and deploy infrastructure code. PSRule must support rule validation and authoring on Linux, MacOS, and Windows.
- Runs in a Linux container. For continuous integration (CI) systems that do not support PowerShell, run in a container.
- Reusable:
- Validation should plug and play, reusable across teams and organizations.
- Any reusable validation will have exceptions. Rules must be able to be disabled where they are not applicable.
Continue reading the PSRule design specification.
This project uses GitHub Issues to track bugs and feature requests. Please search the existing issues before filing new issues to avoid duplicates.
- For new issues, file your bug or feature request as a new issue.
- For help, discussion, and support questions about using this project, join or start a discussion.
Support for this project/ product is limited to the resources listed above.
You can download and install the PSRule module from the PowerShell Gallery.
Module | Description | Downloads / instructions |
---|---|---|
PSRule | Validate infrastructure as code (IaC) and objects using PowerShell rules. | latest / instructions |
For rule and integration modules see related projects.
Companion extensions are available for the following platforms.
Platform | Description | Downloads / instructions |
---|---|---|
Azure Pipelines | Validate infrastructure as code (IaC) and DevOps repositories using Azure Pipelines. | latest / instructions |
GitHub Actions | Validate infrastructure as code (IaC) and DevOps repositories using GitHub Actions. | latest / instructions |
Visual Studio Code | Visual Studio Code extension for PSRule. | latest / instructions |
For an quickstart example of using PSRule see Create a standalone rule. For specific use cases see scenarios.
For frequently asked questions, see the FAQ.
For walk through examples of PSRule usage see:
- Validate Azure resource configuration
- Validate Azure resources tags
- Validate Kubernetes resources
- Using within continuous integration
- Packaging rules in a module
- Writing rule help
PSRule extends PowerShell with domain specific language (DSL) keywords, cmdlets and automatic variables.
The following language keywords are used by the PSRule
module:
- Rule - A rule definition.
- Exists - Assert that a field or property must exist.
- Match - Assert that the field must match any of the regular expressions.
- AnyOf - Assert that any of the child expressions must be true.
- AllOf - Assert that all of the child expressions must be true.
- Within - Assert that the field must match any of the values.
- TypeOf - Assert that the object must be of a specific type.
- Reason - Return a reason for why the rule failed.
- Recommend - Return a recommendation to resolve the issue and pass the rule.
The following commands exist in the PSRule
module:
- Assert-PSRule - Evaluate objects against matching rules and assert any failures.
- Export-PSRuleBaseline - Exports a list of baselines to a file.
- Get-PSRule - Get a list of rule definitions.
- Get-PSRuleBaseline - Get a list of baselines.
- Get-PSRuleHelp - Get documentation for a rule.
- Get-PSRuleTarget - Get a list of target objects.
- Invoke-PSRule - Evaluate objects against matching rules and output the results.
- New-PSRuleOption - Create options to configure PSRule execution.
- Set-PSRuleOption - Sets options that configure PSRule execution.
- Test-PSRuleTarget - Pass or fail objects against matching rules.
The following conceptual topics exist in the PSRule
module:
- Assert
- Contains
- Count
- EndsWith
- FileHeader
- FilePath
- Greater
- GreaterOrEqual
- HasDefaultValue
- HasField
- HasFields
- HasFieldValue
- HasJsonSchema
- In
- IsArray
- IsBoolean
- IsDateTime
- IsInteger
- IsLower
- IsNumeric
- IsString
- IsUpper
- JsonSchema
- Less
- LessOrEqual
- Like
- Match
- NotContains
- NotCount
- NotEndsWith
- NotHasField
- NotIn
- NotLike
- NotMatch
- NotNull
- NotStartsWith
- NotWithinPath
- Null
- NullOrEmpty
- TypeOf
- SetOf
- StartsWith
- Subset
- Version
- WithinPath
- Badges
- Baselines
- Conventions
- Docs
- Expressions
- AllOf
- AnyOf
- Contains
- Count
- EndsWith
- Exists
- Equals
- Field
- Greater
- GreaterOrEquals
- HasDefault
- HasSchema
- HasValue
- In
- IsLower
- IsString
- IsArray
- IsBoolean
- IsDateTime
- IsInteger
- IsNumeric
- IsUpper
- Less
- LessOrEquals
- Like
- Match
- Name
- Not
- NotContains
- NotCount
- NotEndsWith
- NotEquals
- NotIn
- NotLike
- NotMatch
- NotStartsWith
- NotWithinPath
- SetOf
- Source
- StartsWith
- Subset
- Type
- WithinPath
- Version
- Options
- Binding.Field
- Binding.IgnoreCase
- Binding.NameSeparator
- Binding.PreferTargetInfo
- Binding.TargetName
- Binding.TargetType
- Binding.UseQualifiedName
- Configuration
- Convention.Include
- Execution.AliasReferenceWarning
- Execution.LanguageMode
- Execution.InconclusiveWarning
- Execution.NotProcessedWarning
- Execution.SuppressedRuleWarning
- Execution.InvariantCultureWarning
- Include.Module
- Include.Path
- Input.Format
- Input.IgnoreGitPath
- Input.IgnoreObjectSource
- Input.IgnoreRepositoryCommon
- Input.ObjectPath
- Input.PathIgnore
- Input.TargetType
- Logging.LimitDebug
- Logging.LimitVerbose
- Logging.RuleFail
- Logging.RulePass
- Output.As
- Output.Banner
- Output.Culture
- Output.Encoding
- Output.Footer
- Output.Format
- Output.JsonIndent
- Output.Outcome
- Output.Path
- Output.SarifProblemsOnly
- Output.Style
- Requires
- Rule.Baseline
- Rule.Include
- Rule.IncludeLocal
- Rule.Exclude
- Rule.Tag
- Suppression
- Rules
- Selectors
- Suppression Groups
- Variables
PSRule uses the following schemas:
- Options - Schema for PSRule YAML options file.
- Language - Schema for PSRule resources such as baselines.
- Resources - Schema for PSRule resources documents used with JSON.
For a list of projects and integrations see Related projects.
Modules in this repository use semantic versioning to declare breaking changes. For a list of module changes please see the change log.
Pre-release module versions are created on major commits and can be installed from the PowerShell Gallery. Pre-release versions should be considered experimental. Modules and change log details for pre-releases will be removed as stable releases are made available.
This project welcomes contributions and suggestions. If you are ready to contribute, please visit the contribution guide.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.
This project is licensed under the MIT License.