diff --git a/Makefile b/Makefile index d0adbd87a..55bb78c4f 100644 --- a/Makefile +++ b/Makefile @@ -115,13 +115,13 @@ endif $(call build_binary,infrakit,github.com/docker/infrakit/cmd/cli) $(call build_binary,infrakit-manager,github.com/docker/infrakit/cmd/manager) $(call build_binary,infrakit-group-default,github.com/docker/infrakit/cmd/group) - $(call build_binary,infrakit-flavor-combo,github.com/docker/infrakit/pkg/example/flavor/combo) - $(call build_binary,infrakit-flavor-swarm,github.com/docker/infrakit/pkg/example/flavor/swarm) - $(call build_binary,infrakit-flavor-vanilla,github.com/docker/infrakit/pkg/example/flavor/vanilla) - $(call build_binary,infrakit-flavor-zookeeper,github.com/docker/infrakit/pkg/example/flavor/zookeeper) - $(call build_binary,infrakit-instance-file,github.com/docker/infrakit/pkg/example/instance/file) - $(call build_binary,infrakit-instance-terraform,github.com/docker/infrakit/pkg/example/instance/terraform) - $(call build_binary,infrakit-instance-vagrant,github.com/docker/infrakit/pkg/example/instance/vagrant) + $(call build_binary,infrakit-flavor-combo,github.com/docker/infrakit/examples/flavor/combo) + $(call build_binary,infrakit-flavor-swarm,github.com/docker/infrakit/examples/flavor/swarm) + $(call build_binary,infrakit-flavor-vanilla,github.com/docker/infrakit/examples/flavor/vanilla) + $(call build_binary,infrakit-flavor-zookeeper,github.com/docker/infrakit/examples/flavor/zookeeper) + $(call build_binary,infrakit-instance-file,github.com/docker/infrakit/examples/instance/file) + $(call build_binary,infrakit-instance-terraform,github.com/docker/infrakit/examples/instance/terraform) + $(call build_binary,infrakit-instance-vagrant,github.com/docker/infrakit/examples/instance/vagrant) install: @echo "+ $@" diff --git a/README.md b/README.md index ead516d7d..37bd1a936 100644 --- a/README.md +++ b/README.md @@ -70,16 +70,16 @@ Executables will be placed in the `./build` directory. This will produce binaries for tools and several reference Plugin implementations: + [`infrakit`](cmd/cli/README.md): a command line interface to interact with plugins + [`infrakit-group-default`](cmd/group/README.md): the default [Group plugin](./pkg/spi/group) - + [`infrakit-instance-file`](pkg/example/instance/file): an Instance plugin using dummy files to represent instances - + [`infrakit-instance-terraform`](pkg/example/instance/terraform): + + [`infrakit-instance-file`](examples/instance/file): an Instance plugin using dummy files to represent instances + + [`infrakit-instance-terraform`](examples/instance/terraform): an Instance plugin integrating [Terraform](https://www.terraform.io) - + [`infrakit-instance-vagrant`](pkg/example/instance/vagrant): + + [`infrakit-instance-vagrant`](examples/instance/vagrant): an Instance plugin using [Vagrant](https://www.vagrantup.com/) - + [`infrakit-flavor-vanilla`](pkg/example/flavor/vanilla): + + [`infrakit-flavor-vanilla`](examples/flavor/vanilla): a Flavor plugin for plain vanilla set up with user data and labels - + [`infrakit-flavor-zookeeper`](pkg/example/flavor/zookeeper): + + [`infrakit-flavor-zookeeper`](examples/flavor/zookeeper): a Flavor plugin for [Apache ZooKeeper](https://zookeeper.apache.org/) ensemble members - + [`infrakit-flavor-swarm`](pkg/example/flavor/swarm): + + [`infrakit-flavor-swarm`](examples/flavor/swarm): a Flavor plugin for Docker in [Swarm mode](https://docs.docker.com/engine/swarm/). All provided binaries have a `help` sub-command to get usage and a `version` sub-command to identify the build revision. diff --git a/pkg/example/flavor/combo/README.md b/examples/flavor/combo/README.md similarity index 97% rename from pkg/example/flavor/combo/README.md rename to examples/flavor/combo/README.md index 1769042b2..093c0883d 100644 --- a/pkg/example/flavor/combo/README.md +++ b/examples/flavor/combo/README.md @@ -59,7 +59,7 @@ INFO[0000] Listening at: ~/.infrakit/plugins/flavor-combo Using the [example](example.json) configuration, commit a group: ```shell -$ build/infrakit group commit example/flavor/combo/example.json +$ build/infrakit group commit examples/flavor/combo/example.json Committed combo ``` @@ -91,4 +91,3 @@ $ cat tutorial/instance-4039631736808433938 } } ``` - diff --git a/pkg/example/flavor/combo/example.json b/examples/flavor/combo/example.json similarity index 100% rename from pkg/example/flavor/combo/example.json rename to examples/flavor/combo/example.json diff --git a/pkg/example/flavor/combo/flavor.go b/examples/flavor/combo/flavor.go similarity index 100% rename from pkg/example/flavor/combo/flavor.go rename to examples/flavor/combo/flavor.go diff --git a/pkg/example/flavor/combo/flavor_test.go b/examples/flavor/combo/flavor_test.go similarity index 100% rename from pkg/example/flavor/combo/flavor_test.go rename to examples/flavor/combo/flavor_test.go diff --git a/pkg/example/flavor/combo/main.go b/examples/flavor/combo/main.go similarity index 100% rename from pkg/example/flavor/combo/main.go rename to examples/flavor/combo/main.go diff --git a/pkg/example/flavor/swarm/README.md b/examples/flavor/swarm/README.md similarity index 94% rename from pkg/example/flavor/swarm/README.md rename to examples/flavor/swarm/README.md index 79f4173f9..c48af4ee4 100644 --- a/pkg/example/flavor/swarm/README.md +++ b/examples/flavor/swarm/README.md @@ -65,7 +65,7 @@ fetched from. In this case, we are pointing at the yet-to-be-created Swarm mana Next, create the [manager node](swarm-vagrant-manager.json) and initialize the cluster: ```shell -$ build/infrakit group commit example/flavor/swarm/swarm-vagrant-manager.json +$ build/infrakit group commit examples/flavor/swarm/swarm-vagrant-manager.json ``` Once the first node has been successfully created, confirm that the Swarm was initialized: @@ -77,7 +77,7 @@ exid5ftbv15pgqkfzastnpw9n * infrakit Ready Active Leader Now the [worker group](swarm-vagrant-workers.json) may be created: ```shell -$ build/infrakit group commit example/flavor/swarm/swarm-vagrant-workers.json +$ build/infrakit group commit examples/flavor/swarm/swarm-vagrant-workers.json ``` Once completed, the cluster contains two nodes: diff --git a/examples/flavor/swarm/e2e-plugins.json b/examples/flavor/swarm/e2e-plugins.json new file mode 100644 index 000000000..b6c1e79fd --- /dev/null +++ b/examples/flavor/swarm/e2e-plugins.json @@ -0,0 +1,56 @@ +[ + { + "Plugin" : "group-default", + "Launch" : { + "Exec" : "os", + "Properties": { + "Cmd" : "infrakit-group-default --poll-interval 500ms --name group-stateless --log 5 > {{env "LOG_DIR"}}/group-default-{{unixtime}}.log 2>&1 &", + "SamePgID" : true + } + } + } + , + { + "Plugin" : "instance-file", + "Launch" : { + "Exec" : "os", + "Properties" : { + "Cmd" : "infrakit-instance-file --dir {{env "TUTORIAL_DIR"}} --log 5 > {{env "LOG_DIR"}}/instance-file-{{unixtime}}.log 2>&1", + "SamePgID" : true + } + } + } + , + { + "Plugin" : "instance-vagrant", + "Launch" : { + "Exec" : "os", + "Properties" : { + "Cmd" : "infrakit-instance-vagrant --log 5 > {{env "LOG_DIR"}}/instance-vagrant-{{unixtime}}.log 2>&1", + "SamePgID" : true + } + } + } + , + { + "Plugin" : "flavor-vanilla", + "Launch" : { + "Exec" : "os", + "Properties" : { + "Cmd" : "infrakit-flavor-vanilla --log 5 > {{env "LOG_DIR"}}/flavor-vanilla-{{unixtime}}.log 2>&1", + "SamePgID" : true + } + } + } + , + { + "Plugin" : "flavor-swarm", + "Launch" : { + "Exec" : "os", + "Properties" : { + "Cmd" : "infrakit-flavor-swarm --host {{env "SWARM_MANAGER"}} --log 5 > {{env "LOG_DIR"}}/flavor-swarm-{{unixtime}}.log 2>&1", + "SamePgID" : true + } + } + } +] diff --git a/scripts/e2e-swarm.sh b/examples/flavor/swarm/e2e.sh similarity index 91% rename from scripts/e2e-swarm.sh rename to examples/flavor/swarm/e2e.sh index cc13501f5..c3e9e6aed 100755 --- a/scripts/e2e-swarm.sh +++ b/examples/flavor/swarm/e2e.sh @@ -4,7 +4,7 @@ set -o errexit set -o nounset HERE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -cd "$HERE/.." +cd "$HERE/../../.." export PATH=$PWD/build:$PATH @@ -59,7 +59,7 @@ export E2E_SWARM_DIR=$E2E_SWARM_DIR export SWARM_MANAGER="tcp://192.168.2.200:4243" # note -- on exit, this won't clean up the plugins started by the cli since they will be in a separate process group -infrakit plugin start --wait --config-url file:///$PWD/scripts/e2e-test-plugins.json --os group-default instance-vagrant flavor-swarm flavor-vanilla & +infrakit plugin start --wait --config-url file:///$PWD/examples/flavor/swarm/e2e-plugins.json --os group-default instance-vagrant flavor-swarm flavor-vanilla & starterpid=$! echo "plugin start pid=$starterpid" @@ -106,7 +106,7 @@ expect_output_lines "7 plugins should be discoverable" "infrakit plugin ls -q" " expect_output_lines "0 instances should exist" "infrakit instance describe -q --name instance-vagrant" "0" echo "Commiting manager" -infrakit group commit pkg/example/flavor/swarm/swarm-vagrant-manager.json +infrakit group commit examples/flavor/swarm/swarm-vagrant-manager.json echo 'Waiting for group to be provisioned' sleep 60 @@ -116,7 +116,7 @@ expect_output_lines "1 instances should exist in group" "infrakit group describe expect_output_lines "1 instances should exist" "infrakit instance describe -q --name instance-vagrant" "1" echo "Commiting workers" -infrakit group commit pkg/example/flavor/swarm/swarm-vagrant-workers.json +infrakit group commit examples/flavor/swarm/swarm-vagrant-workers.json echo 'Waiting for group to be provisioned' sleep 120 @@ -125,6 +125,11 @@ expect_output_lines "Should be watching two groups" "infrakit group ls -q" "2" expect_output_lines "2 instances should exist in group" "infrakit group describe swarm-workers -q" "2" expect_output_lines "3 instances should exist" "infrakit instance describe -q --name instance-vagrant" "3" +echo "Checking Docker Swarm" + +docker -H $SWARM_MANAGER node ls + + echo "Destroying workers" infrakit group destroy swarm-workers expect_output_lines "1 instances should exist" "infrakit instance describe -q --name instance-vagrant" "1" diff --git a/pkg/example/flavor/swarm/flavor.go b/examples/flavor/swarm/flavor.go similarity index 100% rename from pkg/example/flavor/swarm/flavor.go rename to examples/flavor/swarm/flavor.go diff --git a/pkg/example/flavor/swarm/flavor_test.go b/examples/flavor/swarm/flavor_test.go similarity index 100% rename from pkg/example/flavor/swarm/flavor_test.go rename to examples/flavor/swarm/flavor_test.go diff --git a/pkg/example/flavor/swarm/main.go b/examples/flavor/swarm/main.go similarity index 100% rename from pkg/example/flavor/swarm/main.go rename to examples/flavor/swarm/main.go diff --git a/pkg/example/flavor/swarm/manager.go b/examples/flavor/swarm/manager.go similarity index 100% rename from pkg/example/flavor/swarm/manager.go rename to examples/flavor/swarm/manager.go diff --git a/pkg/example/flavor/swarm/swarm-vagrant-manager.json b/examples/flavor/swarm/swarm-vagrant-manager.json similarity index 100% rename from pkg/example/flavor/swarm/swarm-vagrant-manager.json rename to examples/flavor/swarm/swarm-vagrant-manager.json diff --git a/pkg/example/flavor/swarm/swarm-vagrant-workers.json b/examples/flavor/swarm/swarm-vagrant-workers.json similarity index 100% rename from pkg/example/flavor/swarm/swarm-vagrant-workers.json rename to examples/flavor/swarm/swarm-vagrant-workers.json diff --git a/pkg/example/flavor/swarm/worker.go b/examples/flavor/swarm/worker.go similarity index 100% rename from pkg/example/flavor/swarm/worker.go rename to examples/flavor/swarm/worker.go diff --git a/pkg/example/flavor/vanilla/README.md b/examples/flavor/vanilla/README.md similarity index 100% rename from pkg/example/flavor/vanilla/README.md rename to examples/flavor/vanilla/README.md diff --git a/pkg/example/flavor/vanilla/example.json b/examples/flavor/vanilla/example.json similarity index 100% rename from pkg/example/flavor/vanilla/example.json rename to examples/flavor/vanilla/example.json diff --git a/pkg/example/flavor/vanilla/flavor.go b/examples/flavor/vanilla/flavor.go similarity index 100% rename from pkg/example/flavor/vanilla/flavor.go rename to examples/flavor/vanilla/flavor.go diff --git a/pkg/example/flavor/vanilla/main.go b/examples/flavor/vanilla/main.go similarity index 100% rename from pkg/example/flavor/vanilla/main.go rename to examples/flavor/vanilla/main.go diff --git a/pkg/example/flavor/zookeeper/README.md b/examples/flavor/zookeeper/README.md similarity index 95% rename from pkg/example/flavor/zookeeper/README.md rename to examples/flavor/zookeeper/README.md index b0a5bf1ee..22fab4236 100644 --- a/pkg/example/flavor/zookeeper/README.md +++ b/examples/flavor/zookeeper/README.md @@ -10,7 +10,7 @@ This is a plugin for handling Zookeeper ensemble. Begin by building plugin [binaries](/README.md#binaries). -Start the [vagrant instance plugin](/example/instance/vagrant): +Start the [vagrant instance plugin](/examples/instance/vagrant): ```shell $ build/infrakit-instance-vagrant diff --git a/pkg/example/flavor/zookeeper/flavor.go b/examples/flavor/zookeeper/flavor.go similarity index 100% rename from pkg/example/flavor/zookeeper/flavor.go rename to examples/flavor/zookeeper/flavor.go diff --git a/pkg/example/flavor/zookeeper/main.go b/examples/flavor/zookeeper/main.go similarity index 100% rename from pkg/example/flavor/zookeeper/main.go rename to examples/flavor/zookeeper/main.go diff --git a/pkg/example/flavor/zookeeper/vagrant-zk-docker-registry.json b/examples/flavor/zookeeper/vagrant-zk-docker-registry.json similarity index 100% rename from pkg/example/flavor/zookeeper/vagrant-zk-docker-registry.json rename to examples/flavor/zookeeper/vagrant-zk-docker-registry.json diff --git a/pkg/example/flavor/zookeeper/vagrant-zk-docker.json b/examples/flavor/zookeeper/vagrant-zk-docker.json similarity index 100% rename from pkg/example/flavor/zookeeper/vagrant-zk-docker.json rename to examples/flavor/zookeeper/vagrant-zk-docker.json diff --git a/pkg/example/flavor/zookeeper/vagrant-zk.json b/examples/flavor/zookeeper/vagrant-zk.json similarity index 100% rename from pkg/example/flavor/zookeeper/vagrant-zk.json rename to examples/flavor/zookeeper/vagrant-zk.json diff --git a/pkg/example/instance/file/README.md b/examples/instance/file/README.md similarity index 100% rename from pkg/example/instance/file/README.md rename to examples/instance/file/README.md diff --git a/pkg/example/instance/file/main.go b/examples/instance/file/main.go similarity index 100% rename from pkg/example/instance/file/main.go rename to examples/instance/file/main.go diff --git a/pkg/example/instance/file/plugin.go b/examples/instance/file/plugin.go similarity index 100% rename from pkg/example/instance/file/plugin.go rename to examples/instance/file/plugin.go diff --git a/pkg/example/instance/terraform/README.md b/examples/instance/terraform/README.md similarity index 95% rename from pkg/example/instance/terraform/README.md rename to examples/instance/terraform/README.md index 4d7d9b861..afacd6ea9 100644 --- a/pkg/example/instance/terraform/README.md +++ b/examples/instance/terraform/README.md @@ -117,7 +117,7 @@ See the [CLI Doc](/cmd/cli/README.md) for details on accessing the instance plug Start the plugin: ```shell -$ build/infrakit-instance-terraform --dir=./example/instance/terraform/aws-two-tier/ +$ build/infrakit-instance-terraform --dir=./examples/instance/terraform/aws-two-tier/ INFO[0000] Listening at: ~/.infrakit/plugins/instance-terraform ``` @@ -127,7 +127,7 @@ Now lets try to validate something. Instead of reading from stdin we are loadin to avoid problems with bad bash substitution beacuse Terrafrom configs use `$` to indicate variables. ```shell -$ cat example/instance/terraform/aws-two-tier/instance-plugin-properties.json +$ cat examples/instance/terraform/aws-two-tier/instance-plugin-properties.json { "type" : "aws_instance", "value" : { @@ -145,14 +145,14 @@ $ cat example/instance/terraform/aws-two-tier/instance-plugin-properties.json } } } -$ build/infrakit instance --name instance-terraform validate example/instance/terraform/aws-two-tier/instance-plugin-properties.json +$ build/infrakit instance --name instance-terraform validate examples/instance/terraform/aws-two-tier/instance-plugin-properties.json validate:ok ``` Now we can provision: ```shell -$ cat example/instance/terraform/aws-two-tier/instance-plugin-spec.json +$ cat examples/instance/terraform/aws-two-tier/instance-plugin-spec.json { "Properties" : { "type" : "aws_instance", @@ -176,7 +176,7 @@ $ cat example/instance/terraform/aws-two-tier/instance-plugin-spec.json }, "Init" : "#!/bin/sh; sudo apt-get -y update; sudo apt-get -y install nginx; sudo service nginx start" } -$ build/infrakit instance --name instance-terraform provision example/instance/terraform/aws-two-tier/instance-plugin-spec.json +$ build/infrakit instance --name instance-terraform provision examples/instance/terraform/aws-two-tier/instance-plugin-spec.json instance-1475004829 ``` diff --git a/pkg/example/instance/terraform/aws-two-tier/group.json b/examples/instance/terraform/aws-two-tier/group.json similarity index 100% rename from pkg/example/instance/terraform/aws-two-tier/group.json rename to examples/instance/terraform/aws-two-tier/group.json diff --git a/pkg/example/instance/terraform/aws-two-tier/instance-plugin-properties.json b/examples/instance/terraform/aws-two-tier/instance-plugin-properties.json similarity index 100% rename from pkg/example/instance/terraform/aws-two-tier/instance-plugin-properties.json rename to examples/instance/terraform/aws-two-tier/instance-plugin-properties.json diff --git a/pkg/example/instance/terraform/aws-two-tier/instance-plugin-spec.json b/examples/instance/terraform/aws-two-tier/instance-plugin-spec.json similarity index 100% rename from pkg/example/instance/terraform/aws-two-tier/instance-plugin-spec.json rename to examples/instance/terraform/aws-two-tier/instance-plugin-spec.json diff --git a/pkg/example/instance/terraform/aws-two-tier/main.tf b/examples/instance/terraform/aws-two-tier/main.tf similarity index 100% rename from pkg/example/instance/terraform/aws-two-tier/main.tf rename to examples/instance/terraform/aws-two-tier/main.tf diff --git a/pkg/example/instance/terraform/aws-two-tier/variables.tf b/examples/instance/terraform/aws-two-tier/variables.tf similarity index 100% rename from pkg/example/instance/terraform/aws-two-tier/variables.tf rename to examples/instance/terraform/aws-two-tier/variables.tf diff --git a/pkg/example/instance/terraform/cattle_demo.md b/examples/instance/terraform/cattle_demo.md similarity index 100% rename from pkg/example/instance/terraform/cattle_demo.md rename to examples/instance/terraform/cattle_demo.md diff --git a/pkg/example/instance/terraform/example.png b/examples/instance/terraform/example.png similarity index 100% rename from pkg/example/instance/terraform/example.png rename to examples/instance/terraform/example.png diff --git a/pkg/example/instance/terraform/images/1.png b/examples/instance/terraform/images/1.png similarity index 100% rename from pkg/example/instance/terraform/images/1.png rename to examples/instance/terraform/images/1.png diff --git a/pkg/example/instance/terraform/images/2.png b/examples/instance/terraform/images/2.png similarity index 100% rename from pkg/example/instance/terraform/images/2.png rename to examples/instance/terraform/images/2.png diff --git a/pkg/example/instance/terraform/main.go b/examples/instance/terraform/main.go similarity index 100% rename from pkg/example/instance/terraform/main.go rename to examples/instance/terraform/main.go diff --git a/pkg/example/instance/terraform/plugin.go b/examples/instance/terraform/plugin.go similarity index 100% rename from pkg/example/instance/terraform/plugin.go rename to examples/instance/terraform/plugin.go diff --git a/pkg/example/instance/terraform/terminated.png b/examples/instance/terraform/terminated.png similarity index 100% rename from pkg/example/instance/terraform/terminated.png rename to examples/instance/terraform/terminated.png diff --git a/pkg/example/instance/vagrant/instance.go b/examples/instance/vagrant/instance.go similarity index 100% rename from pkg/example/instance/vagrant/instance.go rename to examples/instance/vagrant/instance.go diff --git a/pkg/example/instance/vagrant/main.go b/examples/instance/vagrant/main.go similarity index 100% rename from pkg/example/instance/vagrant/main.go rename to examples/instance/vagrant/main.go