Configuration management tool embedding mruby, which is alternative implementation of Itamae
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
mrblib Rollback the variable rename Sep 4, 2018
spec Prevent CI failure by curl installation failure Oct 2, 2018
tools Cross-compile mitamae for arm-linux-gnueabihf Jun 24, 2018
.rspec Add .rspec Oct 30, 2016
.travis.yml Add missing deployment config Jun 23, 2018
Gemfile Add pry Nov 14, 2016
Gemfile.lock Add pry Nov 14, 2016
LICENSE Reflect specinfra removal to License Nov 15, 2016 Note about paths for resource plugins Nov 8, 2016 Rename MItamae to mitamae Aug 29, 2018
Rakefile Compress arm binary as well Jun 24, 2018
build_config.rb Cross-compile mitamae for arm-linux-gnueabihf Jun 24, 2018
mrbgem.rake Resolve TravisCI failure for hone/mruby-yaml#3 Jul 6, 2018

mitamae Build Status

Itamae implementation that is runnable without Ruby, which is a lightweight configuration management tool inspired by Chef. With mitamae's standalone binary, you can write a configuration recipe in Ruby and apply it without Ruby.


All features are implemented and tested.


Like original Itamae, you can manage configuration by Ruby DSL. But mitamae does not require MRI to run.

# cat recipe.rb
include_recipe 'included'

directory '/tmp/etc'

file '/tmp/etc/hello' do
  content 'This is mitamae'

template '/tmp/etc/config.yml' do
  source 'config.yml.erb'
# cat included.rb
define :vim, options: '--with-lua --with-luajit' do
  package 'vim' do
    version params[:name]
    options params[:options]

vim '7.4.1910-1'

service 'mysqld' do
  action [:start, :enable]
# wget
# chmod +x ./mitamae-x86_64-linux
# ./mitamae-x86_64-linux local -j node.json recipe.rb
 INFO : Starting mitamae...
 INFO : Recipe: /home/k0kubun/mitamae/recipe.rb
 INFO :   Recipe: /home/k0kubun/mitamae/included.rb
 INFO :     service[mysqld] running will change from 'false' to 'true'
 INFO :     service[mysqld] enabled will change from 'false' to 'true'
 INFO :   file[/tmp/etc/hello] exist will change from 'false' to 'true'
 INFO :   diff:
 INFO :   --- /dev/null 2016-07-23 16:06:36.583327464 +0900
 INFO :   +++ /tmp/1470446745.956       2016-08-06 10:25:45.967255508 +0900
 INFO :   @@ -0,0 +1 @@
 INFO :   +This is mitamae

How to write recipes

See Itamae's reference.

Plugins are implemented differently. See for details.

Supported features

itamae ssh is omitted by design because it's slow. If you want to provision a server, download mitamae binary, transfer recipes and execute it over ssh. For that reason, mitamae is more suitable for development environment bootstrap.

In recipes, you can use the features listed below.

  • Common Attributes
    • user
    • cwd
    • only_if
    • not_if
    • notifies
    • subscribes
    • verify
  • Resources
    • execute resource
    • package resource
    • directory resource
    • git resource
    • file resource
    • remote_file resource
    • template resource
    • link resource
    • service resource
    • gem_package resource
    • user resource
    • group resource
    • remote_directory resource
    • http_request resource
    • local_ruby_block resource
  • Definitions
  • Including Recipes
  • Node Attributes
  • run_command
  • Plugins
  • Host Inventory

Supported platforms

Currently following platforms are supported but others can be easily supported by porting specinfra modules.

  • Alpine Linux
  • Amazon Linux
  • Arch Linux
  • CentOS
  • Debian
  • Gentoo
  • Ubuntu
  • macOS
  • ...etc



$ rake compile && ./mruby/bin/mitamae local recipe.rb

# If you add mrbgem to mrbgem.rake, execute:
$ rake clean


# Run integration tests on Docker
$ bundle exec rspec

Cross compile

# Compile and copy binaries to ./mitamae-build
$ rake release:build


$ git commit -m "Version vX.X.X"
$ git tag vX.X.X
$ git push origin --tags # released here
$ git push origin master


Thanks to the original implementation
And this tools is built as the next generation of itamae-go


Takashi Kokubun