Module: Bolt::Config::Options

Included in:
Bolt::Config
Defined in:
lib/bolt/config/options.rb

Constant Summary collapse

TRANSPORT_CONFIG =

Transport config classes. Used to load default transport config which gets passed along to the inventory.

{
  'docker' => Bolt::Config::Transport::Docker,
  'jail'   => Bolt::Config::Transport::Jail,
  'local'  => Bolt::Config::Transport::Local,
  'lxd'    => Bolt::Config::Transport::LXD,
  'podman' => Bolt::Config::Transport::Podman,
  'remote' => Bolt::Config::Transport::Remote,
  'ssh'    => Bolt::Config::Transport::SSH,
  'winrm'  => Bolt::Config::Transport::WinRM
}.freeze
PLUGIN =

Plugin definition. This is used by the JSON schemas to indicate that an option accepts a plugin reference. Since this isn’t used by Bolt to perform automatic type validation, the :type key is set to a JSON type instead of a Ruby type.

{
  "_plugin" => {
    description: "A plugin reference.",
    type: "object",
    required: ["_plugin"],
    properties: {
      "_plugin" => {
        description: "The name of the plugin.",
        type: "string"
      },
      "_cache" => {
        description: "This feature is experimental. Enable plugin caching and set a time-to-live.",
        type: "object",
        required: ["ttl"],
        properties: {
          "ttl" => {
            description: "Time in seconds to keep the plugin cache.",
            type: "integer",
            minimum: 0
          }
        }
      }
    }
  }
}.freeze
PUPPETDB_OPTIONS =

PuppetDB options.

{
  "cacert" => {
    description: "The path to the ca certificate for PuppetDB.",
    type: String,
    _example: "/etc/puppetlabs/puppet/ssl/certs/ca.pem",
    _plugin: true
  },
  "cert" => {
    description: "The path to the client certificate file to use for authentication.",
    type: String,
    _example: "/etc/puppetlabs/puppet/ssl/certs/my-host.example.com.pem",
    _plugin: true
  },
  "connect_timeout" => {
    description: "How long to wait in seconds when establishing connections with PuppetDB.",
    type: Integer,
    minimum: 1,
    _default: 60,
    _example: 120,
    _plugin: true
  },
  "key" => {
    description: "The private key for the certificate.",
    type: String,
    _example: "/etc/puppetlabs/puppet/ssl/private_keys/my-host.example.com.pem",
    _plugin: true
  },
  "read_timeout" => {
    description: "How long to wait in seconds for a response from PuppetDB.",
    type: Integer,
    minimum: 1,
    _default: 60,
    _example: 120,
    _plugin: true
  },
  "server_urls" => {
    description: "An array containing the PuppetDB host to connect to. Include the protocol `https` " \
                  "and the port, which is usually `8081`. For example, " \
                  "`https://my-puppetdb-server.com:8081`.",
    type: Array,
    _example: ["https://puppet.example.com:8081"],
    _plugin: true
  },
  "token" => {
    description: "The path to the PE RBAC Token.",
    type: String,
    _example: "~/.puppetlabs/token",
    _plugin: true
  }
}.freeze
OPTIONS =

Definitions used to validate config options. github.com/puppetlabs/bolt/blob/main/schemas/README.md

{
  "analytics" => {
    description: "Whether to disable analytics. Setting this option to 'false' in the system-wide " \
                 "or user-level configuration will disable analytics for all projects, even if this " \
                 "option is set to 'true' at the project level.",
    type: [TrueClass, FalseClass],
    _example: false
  },
  "apply-settings" => {
    description: "A map of Puppet settings to use when applying Puppet code using the `apply` " \
                 "plan function or the `bolt apply` command.",
    type: Hash,
    properties: {
      "evaltrace" => {
        description: "Whether each resource should log when it is being evaluated. This allows " \
                     "you to interactively see exactly what is being done.",
        type: [TrueClass, FalseClass],
        _example: true,
        _default: false
      },
      "log_level" => {
        description: "The log level for logs in apply reports from Puppet. These can be seen " \
                     "in ApplyResults.",
        type: String,
        enum: %w[debug info notice warning err alert emerg crit],
        _example: "debug",
        _default: "notice"
      },
      "show_diff" => {
        description: "Whether to log and report a contextual diff.",
        type: [TrueClass, FalseClass],
        _example: true,
        _default: false
      },
      "trace" => {
        description: "Whether to print stack traces on some errors. Will print internal Ruby " \
                     "stack trace interleaved with Puppet function frames.",
        type: [TrueClass, FalseClass],
        _example: true,
        _default: false
      }
    },
    _plugin: false
  },
  "color" => {
    description: "Whether to use colored output when printing messages to the console.",
    type: [TrueClass, FalseClass],
    _plugin: false,
    _example: false,
    _default: true
  },
  "compile-concurrency" => {
    description: "The maximum number of simultaneous manifest block compiles.",
    type: Integer,
    minimum: 1,
    _plugin: false,
    _example: 5,
    _default: "Number of cores."
  },
  "concurrency" => {
    description: "The number of threads to use when executing on remote targets.",
    type: Integer,
    minimum: 1,
    _plugin: false,
    _example: 50,
    _default: "100 or 1/7 the ulimit, whichever is lower."
  },
  "disable-warnings" => {
    description: "An array of IDs of warnings to suppress. Warnings with a matching ID will not be logged " \
                 "by Bolt. If you are upgrading Bolt to a new major version, you should re-enable all warnings " \
                 "until you have finished upgrading.",
    type: Array,
    items: {
      type: String
    },
    _plugin: false,
    _example: ["powershell_2"]
  },
  "format" => {
    description: "The format to use when printing results.",
    type: String,
    enum: %w[human json rainbow],
    _plugin: false,
    _example: "json",
    _default: "human"
  },
  "future" => {
    description: "Enable new Bolt features that may include breaking changes.",
    type: Hash,
    properties: {
      "file_paths" => {
        description: "Load scripts from the `scripts/` directory of a module.",
        type: [TrueClass, FalseClass],
        _example: true,
        _default: false,
        _deprecation: "Bolt no longer honors this option and enables loading scripts from the scripts " \
                      "directory by default."
      },
      "script_interpreter" => {
        description: "Use a target's [`interpreters` configuration](bolt_transports_reference.md#interpreters) " \
                     "when running a script.",
        type: [TrueClass, FalseClass],
        _example: true,
        _default: false
      }
    },
    _plugin: false,
    _example: { 'script_interpreter' => true }
  },
  "hiera-config" => {
    description: "The path to the Hiera configuration file.",
    type: String,
    _plugin: false,
    _example: "~/.puppetlabs/bolt/hiera.yaml",
    _default: "project/hiera.yaml"
  },
  "inventory-config" => {
    description: "A map of default configuration options for the inventory. This includes options " \
                 "for setting the default transport to use when connecting to targets, as well as " \
                 "options for configuring the default behavior of each transport.",
    type: Hash,
    _plugin: false,
    _example: {}
  },
  "plugin-cache" => {
    description: "This feature is experimental. Enable plugin caching and set the time-to-live.",
    type: Hash,
    required: ["ttl"],
    properties: {
      "ttl" => {
        description: "Time in seconds to keep the plugin cache.",
        type: Integer,
        minimum: 0
      }
    },
    _plugin: false,
    _example: { "ttl" => 3600 }
  },
  "log" => {
    description: "A map of configuration for the logfile output. Under `log`, you can configure log options " \
                 "for `console` and add configuration for individual log files, such as " \
                 "`~/.puppetlabs/bolt/debug.log`. Individual log files must be valid filepaths. If the log " \
                 "file does not exist, then Bolt will create it before logging information. Set the value to " \
                 "`disable` to remove a log file defined at an earlier level of the config hierarchy. By " \
                 "default, Bolt logs to a bolt-debug.log file in the Bolt project directory.",
    type: Hash,
    properties: {
      "console" => {
        description: "Configuration for logs output to the console.",
        type: [String, Hash],
        enum: ['disable'],
        properties: {
          "level" => {
            description: "The type of information to log.",
            type: String,
            enum: %w[trace debug error info warn fatal],
            _default: "warn"
          }
        }
      }
    },
    additionalProperties: {
      description: "Configuration for the logfile output.",
      type: [String, Hash],
      enum: ['disable'],
      properties: {
        "append" => {
          description: "Whether to append output to an existing log file.",
          type: [TrueClass, FalseClass],
          _default: true
        },
        "level" => {
          description: "The type of information to log.",
          type: String,
          enum: %w[trace debug error info warn fatal],
          _default: "warn"
        }
      }
    },
    _plugin: false,
    _example: { "console" => { "level" => "info" },
                "~/logs/debug.log" => { "append" => false, "level" => "debug" } }
  },
  "modulepath" => {
    description: "An array of directories that Bolt loads content such as plans and tasks from. Read more " \
                 "about modules in [Module structure](module_structure.md).",
    type: [Array, String],
    items: {
      type: String
    },
    _plugin: false,
    _example: ["~/.puppetlabs/bolt/modules", "~/.puppetlabs/bolt/site-modules"],
    _default: ["project/modules"]
  },
  "module-install" => {
    description: "Options that configure where Bolt downloads modules from. This option is only used when " \
                 "installing modules using the `bolt module add|install` commands and " \
                 "`Add|Install-BoltModule` cmdlets.",
    type: Hash,
    properties: {
      "forge" => {
        description: "A subsection for configuring connections to a Forge host.",
        type: Hash,
        properties: {
          "authorization_token" => {
            description: "The token used to authorize requests to the Forge host. Must also specify " \
                         "`baseurl` when using this option.",
            type: String,
            _example: "Bearer eyJhbGciOiJIUzI1NiIsInR5c...",
            _plugin: true
          },
          "baseurl" => {
            description: "The URL to the Forge host.",
            type: String,
            format: "uri",
            _example: "https://forge.example.com"
          },
          "proxy" => {
            description: "The HTTP proxy to use for Forge operations.",
            type: String,
            format: "uri",
            _example: "https://my-forge-proxy.com:8080"
          }
        },
        _example: {
          "authorization_token" => "Bearer eyJhbGciOiJIUzI1NiIsInR5c...",
          "baseurl" => "https://forge.example.com",
          "proxy" => "https://my-forge-proxy.com:8080"
        }
      },
      "proxy" => {
        description: "The HTTP proxy to use for Git and Forge operations.",
        type: String,
        format: "uri",
        _example: "https://my-proxy.com:8080"
      }
    },
    _plugin: false
  },
  "modules" => {
    description: "A list of module dependencies for the project. Each dependency is a map of data specifying " \
                 "the module to install. To install the project's module dependencies, run the `bolt module " \
                 "install` command. For more information about specifying modules, see [the " \
                 "documentation](https://pup.pt/bolt-module-specs).",
    type: Array,
    items: {
      type: [Hash, String],
      oneOf: [
        {
          required: ["name"],
          properties: {
            "name" => {
              description: "The name of the module.",
              type: String
            },
            "resolve" => {
              description: "Whether to resolve the module's dependencies when installing modules.",
              type: [TrueClass, FalseClass]
            },
            "version_requirement" => {
              description: "The version requirement for the module. Accepts a specific version (1.2.3), version " \
                           "shorthand (1.2.x), or a version range (>= 1.2.0).",
              type: String
            }
          }
        },
        {
          required: %w[git ref],
          properties: {
            "git" => {
              description: "The URL to the public git repository.",
              type: String
            },
            "name" => {
              description: "The name of the module. Required when `resolve` is `false`.",
              type: String
            },
            "ref" => {
              description: "The git reference to check out. Can be either a branch, tag, or commit SHA.",
              type: String
            },
            "resolve" => {
              description: "Whether to resolve the module's dependencies when installing modules.",
              type: [TrueClass, FalseClass]
            }
          }
        }
      ]
    },
    _plugin: false,
    _default: [],
    _example: [
      "puppetlabs-facts",
      { "name" => "puppetlabs-mysql" },
      { "name" => "puppetlabs-apache", "version_requirement" => "5.5.0" },
      { "name" => "puppetlabs-puppetdb", "version_requirement" => "7.x" },
      { "name" => "puppetlabs-firewall", "version_requirement" => ">= 1.0.0 < 3.0.0" },
      { "git" => "https://github.com/puppetlabs/puppetlabs-apt", "ref" => "7.6.0" }
    ]
  },
  "name" => {
    description: "The name of the Bolt project. When this option is configured, the project is considered a " \
                 "[Bolt project](projects.md), allowing Bolt to load content from the project directory " \
                 "as though it were a module.",
    type: String,
    _plugin: false,
    _example: "myproject"
  },
  "plans" => {
    description: "A list of plan names and glob patterns to filter the project's plans by. This option is used " \
                 "to limit the visibility of plans for users of the project. For example, project authors " \
                 "might want to limit the visibility of plans that are bundled with Bolt or plans that should " \
                 "only be run as part of another plan. When this option is not configured, all plans are " \
                 "visible. This option does not prevent users from running plans that are not part of this " \
                 "list.",
    type: Array,
    _plugin: false,
    _example: ["myproject", "myproject::foo", "myproject::bar", "myproject::deploy::*"]
  },
  "plugin-hooks" => {
    description: "A map of [plugin hooks](writing_plugins.md#hooks) and which plugins a hook should use. " \
                 "The only configurable plugin hook is `puppet_library`, which can use two possible plugins: " \
                 "[`openvox_bootstrap`](https://github.com/voxpupuli/puppet-openvox_bootstrap#openvox_boostrapinstall) " \
                 "and [`task`](using_plugins.md#task).",
    type: Hash,
    _plugin: true,
    _example: { "puppet_library" => { "plugin" => "openvox_bootstrap", "version" => "1.2.0",
                "_run_as" => "root" } }
  },
  "plugins" => {
    description: "A map of plugins and their configuration data, where each key is the name of a plugin and " \
                 "its value is a map of configuration data. Configurable options are specified by the plugin. " \
                 "Read more about configuring plugins in [Using plugins](using_plugins.md#configuring-plugins).",
    type: Hash,
    additionalProperties: {
      type: Hash,
      _plugin: true
    },
    _plugin: false,
    _example: { "pkcs7" => { "keysize" => 1024 } }
  },
  "policies" => {
    description: "A list of policy names and glob patterns to filter the project's policies by. This option " \
                 "is used to specify which policies are available to a project and can be applied to targets. " \
                 "When this option is not configured, policies are not available to the project and cannot " \
                 "be applied to targets.",
    type: Array,
    _plugin: false,
    _example: ["myproject::apache", "myproject::postgres"]
  },
  "puppetdb" => {
    description: "A map containing options for [configuring the Bolt PuppetDB " \
                 "client](bolt_connect_puppetdb.md).",
    type: Hash,
    properties: PUPPETDB_OPTIONS,
    _plugin: true
  },
  "puppetdb-instances" => {
    description: "A map of named PuppetDB instances and their configuration, where keys are the name " \
                 "of a PuppetDB instance and values are maps of configuration options. For more " \
                 "information, see [Connecting Bolt to PuppetDB](bolt_connect_puppetdb.md).",
    type: Hash,
    additionalProperties: {
      type: Hash,
      properties: PUPPETDB_OPTIONS
    },
    _plugin: true
  },
  "rerunfile" => {
    description: "The path to the project's rerun file. The rerun file is used to store information " \
                 "about targets from the most recent run. Expands relative to the project directory.",
    type: String,
    _example: "/Users/bolt/project/rerun.json",
    _plugin: true
  },
  "save-rerun" => {
    description: "Whether to update `.rerun.json` in the Bolt project directory. If " \
                 "your target names include passwords, set this value to `false` to avoid " \
                 "writing passwords to disk.",
    type: [TrueClass, FalseClass],
    _plugin: false,
    _example: false,
    _default: true
  },
  "spinner" => {
    description: "Whether to print a spinner to the console for long-running Bolt operations.",
    type: [TrueClass, FalseClass],
    _plugin: false,
    _example: false,
    _default: true
  },
  "stream" => {
    description: "Whether to stream output from scripts and commands to the console. " \
                 "**This option is experimental**.",
    type: [TrueClass, FalseClass],
    _plugin: false,
    _default: false,
    _example: true
  },
  "tasks" => {
    description: "A list of task names and glob patterns to filter the project's tasks by. This option is used " \
                 "to limit the visibility of tasks for users of the project. For example, project authors " \
                 "might want to limit the visibility of tasks that are bundled with Bolt or plans that should " \
                 "only be run as part of a larger workflow. When this option is not configured, all tasks " \
                 "are visible. This option does not prevent users from running tasks that are not part of " \
                 "this list.",
    type: Array,
    items: {
      type: String
    },
    _plugin: false,
    _example: ["myproject", "myproject::foo", "myproject::bar", "myproject::deploy_*"]
  },
  "trusted-external-command" => {
    description: "The path to an executable on the Bolt controller that can produce external trusted facts. " \
                 "**External trusted facts are experimental in both Puppet and Bolt and this API might " \
                 "change or be removed.**",
    type: String,
    _plugin: false,
    _example: "/etc/puppetlabs/facts/trusted_external.sh"
  }
}.freeze
INVENTORY_OPTIONS =

Options that configure the inventory, specifically the default transport used by targets and the transports themselves. These options are used in bolt-defaults.yaml under ‘inventory-config’ and in inventory.yaml under ‘config’.

{
  "transport" => {
    description: "The default transport to use when the transport for a target is not " \
                 "specified in the URI.",
    type: String,
    enum: TRANSPORT_CONFIG.keys,
    _plugin: true,
    _example: "winrm",
    _default: "ssh"
  },
  "docker" => {
    description: "A map of configuration options for the docker transport.",
    type: Hash,
    _plugin: true,
    _example: { "cleanup" => false, "service-url" => "https://docker.example.com" }
  },
  "jail" => {
    description: "A map of configuration options for the jail transport.",
    type: Hash,
    _plugin: true,
    _example: { cleanup: false }
  },
  "local" => {
    description: "A map of configuration options for the local transport. The set of available options is " \
                 "platform dependent.",
    type: Hash,
    _plugin: true,
    _example: { "cleanup" => false, "tmpdir" => "/tmp/bolt" }
  },
  "lxd" => {
    description: "A map of configuration options for the LXD transport. The LXD transport is " \
                 "experimental and might include breaking changes between minor versions.",
    type: Hash,
    _plugin: true,
    _example: { cleanup: false }
  },
  "podman" => {
    description: "A map of configuration options for the podman transport.",
    type: Hash,
    _plugin: true,
    _example: { "cleanup" => false, "tmpdir" => "/mount/tmp" }
  },
  "remote" => {
    description: "A map of configuration options for the remote transport.",
    type: Hash,
    additionalProperties: true,
    _plugin: true,
    _example: { "run-on" => "proxy_target" }
  },
  "ssh" => {
    description: "A map of configuration options for the ssh transport.",
    type: Hash,
    _plugin: true,
    _example: { "password" => "hunter2!", "user" => "bolt" }
  },
  "winrm" => {
    description: "A map of configuration options for the winrm transport.",
    type: Hash,
    _plugin: true,
    _example: { "password" => "hunter2!", "user" => "bolt" }
  }
}.freeze
CLI_OPTIONS =

Options that are available on the command line This only includes options where users can provide arbitrary values from the command-line, allowing the validator to check them

%w[
  compile-concurrency
  concurrency
  format
  log
  modulepath
  transport
].freeze
DEFAULTS_OPTIONS =

Options that are available in a bolt-defaults.yaml file

%w[
  analytics
  color
  compile-concurrency
  concurrency
  disable-warnings
  format
  inventory-config
  log
  module-install
  plugin-cache
  plugin-hooks
  plugins
  puppetdb
  puppetdb-instances
  save-rerun
  spinner
  stream
].freeze
PROJECT_OPTIONS =

Options that are available in a bolt-project.yaml file

%w[
  analytics
  apply-settings
  color
  compile-concurrency
  concurrency
  disable-warnings
  format
  future
  hiera-config
  log
  modulepath
  module-install
  modules
  name
  plans
  plugin-cache
  plugin-hooks
  plugins
  policies
  puppetdb
  puppetdb-instances
  rerunfile
  save-rerun
  spinner
  stream
  tasks
  trusted-external-command
].freeze