main-chef-wrapper

command module
v0.0.0-...-ee181ec Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 25, 2024 License: Apache-2.0 Imports: 13 Imported by: 0

README

Top-level chef wrapper

This top-level chef command gives us full control of our tooling inside the Chef ecosystem, we are now able to integrate and modularize multiple tools in a single place and make the chef command a first citizen of our development experience.

(Motivation) What problem(s) are we solving?

  • Speed: All the Ruby CLIs we have at Chef are already in a state of considerable slowness, things like chef -v or just a simple knife help takes 10-15m to run, let alone commands that actually do something for the user, for example, chef export policyfile or knife node list.
    • How can we make this experience better?
    • How can we run our CLIs faster?
  • Flexibility: There is so much we can do in Ruby land, there is also a limit on how much can we speed up our CLIs in that language, historically at Chef we have chosen Ruby as our main language since the core of Chef (the product) is written in Ruby and we would like to take advantage of the core code and behavior, though, there have been cases where we don't need to share the code and therefore, no need to use the same language, such cases could be more efficient if we could/would use a compiled language, but we haven't explored that path just yet. Having the ability to write our CLIs in any language will allow us to have much more flexibility to improve all our tooling.
  • Organization: Another problem we are solving is the fact that, at Chef, we have spread very wide in our toolings. We create multiple CLIs, commands, etc. that we deliver to users in various manners, styles, and distributions, some of them are hard to identify as a Chef tool. This work could improve the way we ship our tools and how users find them in their system by having a single top-level command that has a list/catalog of sub- commands (binaries) that can be run individually for better modularity and flexibility.

Design Proposal (GH Issue): https://github.com/chef/chef-workstation/issues/497

Development

As a requirement, you need to Install Habitat on your workstation since we use the Habitat Studio as our development environment for this tool.

After installing Habitat, enter the studio from the root of this repository and run the helper method build_cross_platform which will do a cross-platform compilation of this tool:

$ cd chef-workstation/
$ hab studio enter
[1][default:/src:0]# build_cross_platform
Number of parallel builds: 3

-->     linux/amd64: _/src/components/main-chef-wrapper
-->     windows/386: _/src/components/main-chef-wrapper
-->    darwin/amd64: _/src/components/main-chef-wrapper
-->      darwin/386: _/src/components/main-chef-wrapper
-->       linux/386: _/src/components/main-chef-wrapper
-->   windows/amd64: _/src/components/main-chef-wrapper

Find all the compiled binaries inside the bin/ directory:

[2][default:/src:0]# ll bin/
total 13140
-rwxr-xr-x 1 root root 2066756 Oct  7 21:16 chef_darwin_386
-rwxr-xr-x 1 root root 2322104 Oct  7 21:16 chef_darwin_amd64
-rwxr-xr-x 1 root root 2070971 Oct  7 21:16 chef_linux_386
-rwxr-xr-x 1 root root 2338292 Oct  7 21:15 chef_linux_amd64
-rwxr-xr-x 1 root root 2184704 Oct  7 21:16 chef_windows_386.exe
-rwxr-xr-x 1 root root 2463232 Oct  7 21:16 chef_windows_amd64.exe

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL