A powerful and easy-to-use configuration management system.
2017-03-02 0.6.0
With this release, Converge no longer supports freebsd and solaris.
This release includes new systemd and unarchive capabilities, improvements to the user resource, and generators for man pages and bash autocomplete.
Support for controlling systemd services has been added via #602.
systemd.unit.state "ssh" {
unit = "ssh.service"
state = "running"
}
Managing several archive formats such as zip
and tar.gz
is available through unarchive support in #592.
unarchive "consul.zip" {
source = "/tmp/consul.zip"
destination = "/tmp/consul"
}
A user can now be enabled or disabled with the addition of #581.
Additionally, there are updates to the diffs presented for user with #584 and #588.
A new helper method has been added to for use with resource.Status
. RaiseLevelForDiffs
will raise the status level to StatusWillChange
if any differences exist via #587.
Generators for man pages and bash autocompletion have been added via #571.
See the Converge changelog for additional details on the 0.6.0 release.
We provide support via the Converge Slack and through GitHub Issues.
2017-02-27 0.6.0-rc1
This release includes new systemd and unarchive capabilities, improvements to the user resource, and generators for man pages and bash autocomplete. Additionally, Converge no longer supports freebsd and solaris.
With this release, Converge no longer supports freebsd and solaris.
Support for controlling systemd services has been added via #602.
systemd.unit.state "ssh" {
unit = "ssh.service"
state = "running"
}
Managing several archive formats such as zip
and tar.gz
is available through unarchive support in #592.
unarchive "consul.zip" {
source = "/tmp/consul.zip"
destination = "/tmp/consul"
}
A user can now be enabled or disabled with the addition of #581.
Additionally, there are updates to the diffs presented for user with #584 and #588.
A new helper method has been added to for use with resource.Status
. RaiseLevelForDiffs
will raise the status level to StatusWillChange
if any differences exist via #587.
Generators for man pages and bash autocompletion have been added via #571.
See the Converge changelog for additional details on the 0.6.0 release.
We provide support via the Converge Slack and through GitHub Issues.
2016-12-29 0.5.0
This release includes new modules and general usability enhancements for users and module authors.
For converge 0.5.0 we have removed the vendor
directory from the converge
repository. glide install
will now run as part of the build process to ensure
all dependencies are installed.
A demo of using converge for a kubernetes deployment was added in 524.
File download and verification support has been added via #543.
file.fetch "consul.zip" {
source = "https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_amd64.zip"
destination = "/tmp/consul.zip"
hash_type = "sha256"
hash = "abdf0e1856292468e2c9971420d73b805e93888e006c76324ae39416edcf0627"
}
File ownership can now be changed with the file.owner
module added via #549.
file.owner "owner-test" {
destination = "dir"
group = "root"
user = "root"
verbose = true
recursive = true
}
Modules with failing dependencies are now summarized at the end of a run via 516.
root/task.directory:
Error: exec: "blah": executable file not found in $PATH
Messages:
Has Changes: no
Changes: No changes
Errors:
* root/task.directory: exec: "blah": executable file not found in $PATH
Failed due to failing dependency:
* root/task.key: error in dependency "root/task.directory"
* root/task.csr: error in dependency "root/task.key"
* root/task.crt: error in dependency "root/task.csr"
Summary: 1 errors, 0 changes, 3 dependency errors
As of 535 resource names are
now restricted to strings consisting of letters, numbers, dots .
and dashes
-
. Unicode letter characters are supported.
As of 533 diff outputs
should be displayed when running apply
.
The module authoring API has been updated to make it easier to develop modules.
As of 533 the export
and
re-export-as
tags are supported for resource.Resource
types in modules.
These tags are now required to make fields available for lookup
.
As of 533 resource types in
modules should not embed resource.Status
. The Check
and Apply
functions
should no longer return the resource itself but instead a generated task status.
Converge 0.5.0 introduces a multitiude of bugfixes and stability improvements. Please refer to the changelog for a detailed report.
We provide support via the Converge Slack team and through GitHub issues
title: "0.5.0" date: "2016-12-28" slug: "0-5-0"
menu: main: parent: "release-notes" identifier: 0.5.0
2016-12-28 0.5.0-rc1
This release includes new modules and general usability enhancements for users and module authors.
For converge 0.5.0 we have removed the vendor
directory from the converge
repository. glide install
will now run as part of the build process to ensure
all dependencies are installed.
A demo of using converge for a kubernetes deployment was added in 524.
File download and verification support has been added via #543.
file.fetch "consul.zip" {
source = "https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_amd64.zip"
destination = "/tmp/consul.zip"
hash_type = "sha256"
hash = "abdf0e1856292468e2c9971420d73b805e93888e006c76324ae39416edcf0627"
}
File ownership can now be changed with the file.owner
module added via #549.
file.owner "owner-test" {
destination = "dir"
group = "root"
user = "root"
verbose = true
recursive = true
}
Modules with failing dependencies are now summarized at the end of a run via 516.
root/task.directory:
Error: exec: "blah": executable file not found in $PATH
Messages:
Has Changes: no
Changes: No changes
Errors:
* root/task.directory: exec: "blah": executable file not found in $PATH
Failed due to failing dependency:
* root/task.key: error in dependency "root/task.directory"
* root/task.csr: error in dependency "root/task.key"
* root/task.crt: error in dependency "root/task.csr"
Summary: 1 errors, 0 changes, 3 dependency errors
As of 535 resource names are
now restricted to strings consisting of letters, numbers, dots .
and dashes
-
. Unicode letter characters are supported.
As of 533 diff outputs
should be displayed when running apply
.
The module authoring API has been updated to make it easier to develop modules.
As of 533 the export
and
re-export-as
tags are supported for resource.Resource
types in modules.
These tags are now required to make fields available for lookup
.
As of 533 resource types in
modules should not embed resource.Status
. The Check
and Apply
functions
should no longer return the resource itself but instead a generated task status.
Converge 0.5.0 introduces a multitiude of bugfixes and stability improvements. Please refer to the changelog for a detailed report.
We provide support via the Converge Slack team and through GitHub issues
title: "0.5.0" date: "2016-12-21" slug: "0-5-0"
menu: main: parent: "release-notes" identifier: 0.5.0
2016-12-21 0.5.0-beta1
This release includes new modules and general usability enhancements for users and module authors.
A demo of using converge for a kubernetes deployment was added in 524.
File download and verification support has been added via #543.
file.fetch "consul.zip" {
source = "https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_amd64.zip"
destination = "/tmp/consul.zip"
hash_type = "sha256"
hash = "abdf0e1856292468e2c9971420d73b805e93888e006c76324ae39416edcf0627"
}
File ownership can now be changed with the file.owner
module added via #549.
file.owner "owner-test" {
destination = "dir"
group = "root"
user = "root"
verbose = true
recursive = true
}
Modules with failing dependencies are now summarized at the end of a run via 516.
root/task.directory:
Error: exec: "blah": executable file not found in $PATH
Messages:
Has Changes: no
Changes: No changes
Errors:
* root/task.directory: exec: "blah": executable file not found in $PATH
Failed due to failing dependency:
* root/task.key: error in dependency "root/task.directory"
* root/task.csr: error in dependency "root/task.key"
* root/task.crt: error in dependency "root/task.csr"
Summary: 1 errors, 0 changes, 3 dependency errors
As of 535 resource names are
now restricted to strings consisting of letters, numbers, dots .
and dashes
-
. Unicode letter characters are supported.
As of 533 diff outputs
should be displayed when running apply
.
The module authoring API has been updated to make it easier to develop modules.
As of 533 the export
and
re-export-as
tags are supported for resource.Resource
types in modules.
These tags are now required to make fields available for lookup
.
As of 533 resource types in
modules should not embed resource.Status
. The Check
and Apply
functions
should no longer return the resource itself but instead a generated task status.
Converge 0.5.0 introduces a multitiude of bugfixes and stability improvements. Please refer to the changelog for a detailed report.
We provide support via the Converge Slack team and through GitHub issues
This is the final release for Converge 0.4.0. Please refer to the release notes (also included below) for changes and the 0.4.0 documentation for usage.
This release includes a number of new and improved modules, several bugfixes in the core engine, and enhancements to the internal API to ease the module creation process.
LVM volume creation has been added for Linux based systems via #184.
lvm.volumegroup "vg-test" {
name = "test"
devices = ["/dev/sda","/dev/sdb"]
}
lvm.logicalvolume "lv-test" {
group = "test"
name = "test"
size = "1G"
depends = ["lvm.volumegroup.vg-test"]
}
filesystem "mnt-me" {
device = "/dev/mapper/test-test"
mount = "/mnt"
fstype = "ext3"
depends = ["lvm.logicalvolume.lv-test"]
}
Apt package installation has been added via #461.
package.apt "mc" {
group = "apt"
name = "mc"
state = "present"
}
Support for docker volumes has been added via #453
docker.volume "elasticsearch" {
name = "elasticsearch"
labels {
environment = "test"
}
state = "present"
force = true
}
Support for docker networking has been added via #477
docker.network "test-network" {
name = "test-network"
state = "present"
force = true
labels {
environment = "test"
}
options {
"com.docker.network.bridge.enable_icc" = "true"
}
internal = false
ipv6 = false
ipam_driver = "default"
ipam_config {
subnet = "192.168.129.0/24"
gateway = "192.168.129.1"
aux_addresses {
router = "192.168.129.40"
printer = "192.168.129.41"
}
}
}
Users can now be modified thanks to #434. This change also adds several new fields to the user module which can be used during user creation or modification including:
create_home
to create a home directory for a usermove_dir
to move contents of a users home directory if it changesskel_dir
to specify a skeleton directory to use when creating a userThe module authoring API has been updated to make it easier to develop modules.
Resources now support the nonempty
struct tag as demonstrated by this snippet
from the user module:
type Preparer struct {
// Username is the user login name.
Username string `hcl:"username" required:"true" nonempty:"true"`
when nonempty:"true"
is set, an error will be returned if the user sets the
value of a field to the zero value for it's type.
Resource structs may now use time.Duration
as a field type. Duration strings
will be parsed as a time duration automatically; numeric values will be treated
as a time in seconds.
Please refer to the changelog for a detailed report.
We provide support via the Converge Slack team and through GitHub issues
2016-11-17 0.4.0-rc1
This release includes a number of new and improved modules, several bugfixes in the core engine, and enhancements to the internal API to ease the module creation process.
LVM volume creation has been added for Linux based systems via #184.
lvm.volumegroup "vg-test" {
name = "test"
devices = ["/dev/sda","/dev/sdb"]
}
lvm.logicalvolume "lv-test" {
group = "test"
name = "test"
size = "1G"
depends = ["lvm.volumegroup.vg-test"]
}
filesystem "mnt-me" {
device = "/dev/mapper/test-test"
mount = "/mnt"
fstype = "ext3"
depends = ["lvm.logicalvolume.lv-test"]
}
Apt package installation has been added via #461.
package.apt "mc" {
group = "apt"
name = "mc"
state = "present"
}
Support for docker volumes has been added via #453
docker.volume "elasticsearch" {
name = "elasticsearch"
labels {
environment = "test"
}
state = "present"
force = true
}
Support for docker networking has been added via #477
docker.network "test-network" {
name = "test-network"
state = "present"
force = true
labels {
environment = "test"
}
options {
"com.docker.network.bridge.enable_icc" = "true"
}
internal = false
ipv6 = false
ipam_driver = "default"
ipam_config {
subnet = "192.168.129.0/24"
gateway = "192.168.129.1"
aux_addresses {
router = "192.168.129.40"
printer = "192.168.129.41"
}
}
}
Users can now be modified thanks to #434. This change also adds several new fields to the user module which can be used during user creation or modification including:
create_home
to create a home directory for a usermove_dir
to move contents of a users home directory if it changesskel_dir
to specify a skeleton directory to use when creating a userThe module authoring API has been updated to make it easier to develop modules.
Resources now support the nonempty
struct tag as demonstrated by this snippet
from the user module:
type Preparer struct {
// Username is the user login name.
Username string `hcl:"username" required:"true" nonempty:"true"`
when nonempty:"true"
is set, an error will be returned if the user sets the
value of a field to the zero value for it's type.
Resource structs may now use time.Duration
as a field type. Duration strings
will be parsed as a time duration automatically; numeric values will be treated
as a time in seconds.
Please refer to the changelog for a detailed report.
We provide support via the Converge Slack team and through GitHub issues
title: "0.4.0" date: "2016-11-15" slug: "0-4-0"
menu: main: parent: "release-notes" identifier: 0.4.0
2016-11-14 0.4.0-beta1
This release includes a number of new and improved modules, several bugfixes in the core engine, and enhancements to the internal API to ease the module creation process.
LVM volume creation has been added for Linux based systems via #184.
lvm.volumegroup "vg-test" {
name = "test"
devices = ["/dev/sda","/dev/sdb"]
}
lvm.logicalvolume "lv-test" {
group = "test"
name = "test"
size = "1G"
depends = ["lvm.volumegroup.vg-test"]
}
filesystem "mnt-me" {
device = "/dev/mapper/test-test"
mount = "/mnt"
fstype = "ext3"
depends = ["lvm.logicalvolume.lv-test"]
}
Apt package installation has been added via #461.
package.apt "mc" {
group = "apt"
name = "mc"
state = "present"
}
Support for docker volumes has been added via #453
docker.volume "elasticsearch" {
name = "elasticsearch"
labels {
environment = "test"
}
state = "present"
force = true
}
Support for docker networking has been added via #477
docker.network "test-network" {
name = "test-network"
state = "present"
force = true
labels {
environment = "test"
}
options {
"com.docker.network.bridge.enable_icc" = "true"
}
internal = false
ipv6 = false
ipam_driver = "default"
ipam_config {
subnet = "192.168.129.0/24"
gateway = "192.168.129.1"
aux_addresses {
router = "192.168.129.40"
printer = "192.168.129.41"
}
}
}
Users can now be modified thanks to #434. This change also adds several new fields to the user module which can be used during user creation or modification including:
create_home
to create a home directory for a usermove_dir
to move contents of a users home directory if it changesskel_dir
to specify a skeleton directory to use when creating a userThe module authoring API has been updated to make it easier to develop modules.
Resources now support the nonempty
struct tag as demonstrated by this snippet
from the user module:
type Preparer struct {
// Username is the user login name.
Username string `hcl:"username" required:"true" nonempty:"true"`
when nonempty:"true"
is set, an error will be returned if the user sets the
value of a field to the zero value for it's type.
Resource structs may now use time.Duration
as a field type. Duration strings
will be parsed as a time duration automatically; numeric values will be treated
as a time in seconds.
Please refer to the changelog for a detailed report.
We provide support via the Converge Slack team and through GitHub issues
This is the final release for Converge 0.3.0. Please refer to the release notes (also included below) for changes and the 0.3.0 documentation for usage.
This release includes a number of significant improvements to the core engine including conditionals, wait queries, sequential task groups, and the ability to use lists and maps in parameters. The internal API has also been simplified to make it easier for programmers to create new modules.
RPM package install/uninstall support has been added via #373.
rpm.package "mc" {
name = "mc"
state = "present"
}
Linux user groups can now be modified via #279
Converge now supports waiting for a task to complete or port #334. Users can create a dependency for a port to be open or a condition to be met.
Below is an example of waiting for a port to be open using the wait.port
resource:
wait.port "8080" {
host = "localhost"
port = 8080
interval = "1s"
max_retry = 10
grace_period = "2s"
}
The following shows using wait.query
to wait using a task:
wait.query "service-health" {
check = "nc -z localhost 8080"
interval = "1s"
max_retry = 10
grace_period = "1s"
}
Wait is documented at: wait.port and wait.query.
Support for conditionals via #362.
In the following example, the contents of file greetings.txt
depend on the value of
the lang
parameter:
param "lang" {
default = ""
}
switch "test-switch" {
case "eq `spanish` `{{param `lang`}}`" "spanish" {
file.content "foo-file" {
destination = "greeting.txt"
content = "hola\n"
}
}
case "eq `french` `{{param `lang`}}`" "french" {
file.content "foo-file" {
destination = "greeting.txt"
content = "salut\n"
}
}
Tasks can be assigned to a group to force multiple tasks to run one at a time instead of in parallel. When a node is added to a task group the engine creates a dependency on another node in the group.
Please note that task groups are not supported in conditionals in 0.3.
For example, apt
package installs cannot run in parallel. In the following example
each task with the apt
lock is run sequentially.
task "install-jq" {
check = "dpkg -s jq >/dev/null 2>&1"
apply = "apt-get update 2>&1 > /dev/null && apt-get -y install jq"
group = "apt"
}
task "install-build-essential" {
check = "dpkg -s build-essential >/dev/null 2>&1"
apply = "apt-get update 2>&1 > /dev/null && apt-get -y install build-essential"
group = "apt"
}
bool
, list
, and map
types have been added to parameters via #340.
See values
Rendered graphs have been cleaned and arrows now indicate the order of tasks #387.
Text output for changes is now aligned via #317.
An installation script (install-converge.sh
) has been added that downloads the correct
binary of converge after detecting the underlying Operating System and Processor.
This can be used to install converge during system boot.
For example, the terraform provisioner uses this script download the latest release of converge before configuring a node.
Please refer to the changelog for a detailed report.
A Docker image was created in #372 to speed up Wercker builds and automated tests.
Documentation was updated in #371 so that links like converge.aster.is/0.2.0 will resolve documentation for that version.
The elasticsearch example has been updated to use new features in 0.3.0 #419
We provide support via the Converge Slack team and through GitHub issues
This is the first candidate for the 0.3.0 release of Converge. Please refer to the release notes for changes and the 0.3.0 documentation for usage.
Please feel free to file issues against this release, and if you have any questions at all you can find the team in the Converge Slack.