Artifacts

The pallet 0.8 projects are now using leiningen. They are being published to clojars using the com.palletops group-id.

The crate artifact-ids now end in -crate, e.g. java-crate.

Compute Service

The pallet.configure/compute-service function can no longer be used to instantiate providers directly - use pallet.compute/instantiate-provider to do this. Continue to use pallet.configure/compute-service to look up service definitions in ~/.pallet/config.clj.

Phases and Plans

Phase functions are now referred to as plan functions. Plan functions no longer take a session argument, and the session map does not need threading through the actions. This change makes writing pallet code simpler.

The phase-fn equivalent is now pallet.api/plan-fn. Note that unlike with phase-fn, plain vars will not be called; you will need to ensure that they are function calls by putting them in parens. So, (plan-fn (automated-admin-user)) rather than (plan-fn automated-admin-user).

The crate plan functions are now written using the pallet.crate/defplan form. The defplan form is optional, you can use a plain function. defplan adds logging and context automatically.

The :configure phase is the default phase for converge and lift but is no longer always enforced on converge.

Namespace changes:

  • The specs and top level lift and converge from pallet.core are now in pallet.api.
  • pallet.core/phase-fn is now pallet.api/plan-fn
  • the session lookup functions from pallet.session are now in pallet.crate.
  • the parameter settings functions are now in pallet.crate.
  • pallet.utils/make-user is now pallet.api/make-user. There is now also a pallet.core.user/make-user that takes a map rather than varargs, and doesn't provide defaults.
  • *admin-user* is now in pallet.core.user.
  • actions are now all defined in pallet.actions

lift and converge

lift and converge now optionally return operations. When passing :async true, you can wait on the result of an operation by derefing it. The operation supports the pallet.fsmop/Control protocol. This provides abort, status, complete?, failed? and wait-for functions. Using status, you can now follow how far pallet has got in the execution of the lift or converge.

Low level lift and converge

pallet.core.operations provide lower level implementations of lift and converge that operate on sequences of node-maps, where a node-map is essentially a group-spec with a :node key containing a value implementing the pallet.node/Node protocol.

These operations allow you to specify the targets in a more flexible fashion than their pallet.api counterparts.

Below this, there is pallet.core.primitives that provide various low level finite state machines, which can be used to compose your own variotions of lift and compose that have potentially different semantics.

At the bottom, pallet.core.api provides the base functions used to build the primitives and the operations.