Property and Template References

Page last updated:

This topic describes the product template of your tile and how to modify it to include different properties.

Overview

The metadata subdirectory of a tile contains a product template file in .yml format. The product template file specifies how the tile interface collects configurable properties from the user, and how Ops Manager incorporates these properties into its deployment manifest.

You can modify your tile’s product template in many different ways. The sections below describe what the product template contains and how to modify it to include different properties.

Product Template Contents

The product template, a .yml file in the tile’s metadata subdirectory, includes or points to:

  • Metadata: High-level information about your tile.

  • Dependencies: Specifies tile dependencies.

  • Property blueprints: Templates to represent values.

  • Form types: Exposes property blueprints to generated forms.

  • Job types: Configuration properties for jobs defined in the BOSH release.

  • Runtime configs: Specifies the manifest for any number of global deployment configurations.

Examples in this topic that refer to the product template use the Ops Manager example tile, a functional tile provided by the Ops Manager engineering team that deploys the NGINX web server.

For more information about product template configuration, see Top-Level Properties.

To learn how to configure your tile’s forms, see Form Properties.

Modifying the Product Template

You can modify the product template to designate property values.

Within the product template, there are two sections with manifest snippets:

  • form_types: This defines the tile interface, or how users of your tile view and interact with different tile features.

  • job_types: This defines the jobs that the manifest deploys, or what the tile does in response to user input, developer input, or at set intervals.

You can use special expressions in these snippets to include property values that the tile would otherwise not use, such as user-provided configurable properties or dynamically generated system properties.

These special expressions take two forms: double parentheses expressions and triple parentheses expressions.

Double Parentheses Expressions

Double parentheses expressions, such as (( PROPERTY-VALUE )), designate property values that Ops Manager fills in when it generates the deployment manifest. This occurs after the user clicks Apply Changes.

These values include configurable properties and properties supplied by Ops Manager.

To include these properties in a manifest snippet, use “double-parens” syntax, which consists of a variable name surrounded by two sets of parentheses, as shown in the following example:

manifest: |
  pizza_toppings:
    peppers: (( .properties.example_selector.pizza_option.peppers.value ))

Triple Parentheses Expressions

Triple-parentheses expressions, such as ((( PROPERTY-VALUE ))), designate property values that BOSH supplies when it deploys instances of the tile service. For example, CredHub credentials are designated in triple parentheses.

To include these BOSH deploy-time properties in a manifest snippet, use “triple-parens” notation, as shown in the following example:

manifest: |
  credhub:
    concatenated_password: prefix-((( credhub-password )))-suffix
    password: ((( credhub-password )))

When Ops Manager parses a product template and BOSH parses a manifest, they both fill in properties designated by double-parens syntax.

Some property values in a product template, such as CredHub credentials, must be filled in by BOSH on the BOSH Director VM, rather than by Ops Manager.

Ops Manager strips the outer parentheses from these expressions and includes the resulting double-parens expressions in the manifest it generates, for BOSH to evaluate at deploy time.

For more information about tile properties, see Referencing Properties.

Referencing Properties

Each property is represented by two segments:

  • The location of the property.
  • The information from the property you want to access, commonly known as accessors.

Using these two segments, you can write an expression as:

(( PROPERTY-LOCATION.ACCESSOR ))

Where:

  • PROPERTY-LOCATION is the location of the property.
  • ACCESSOR is the accessor.

Referencing a Location

The method of referencing the location of the property varies. The following table describes the different methods of referencing a property:

Method Name Description
.properties.top_level_property The property blueprint called “top_level_property” found in the global list of properties of the same tile.
.job_one.job_level_property The property blueprint called “job_level_property” found in the list of properties of the job “job_one” of the same tile.
job_level_property The property blueprint called “top_level_property” found in the same tile and job whose manifest is currently being evaluated.
..other_product.properties.top_level_property The property blueprint called “top_level_property” found in the global list of properties of the tile “other_product”.
..other_product.job_two.job_level_property The property blueprint called “job_level_property” found in the list of properties of the job “job_one” of the tile “other_product”.

Referencing an Accessor

Accessors vary between property blueprint types. The following example uses the property blueprint type string with its one accessor, value:

(( .properties.example-string.value ))

Ops Manager allows empty arrays in double-parentheses expressions. For example:

(( .properties.example-string.value || [] ))

For more information about the available properties and their accessors, see Property Blueprint Reference.

Product Context

Product context is useful for accessing information about a tile. It can be used in a manifest using this syntax:

(( ..TILE-NAME.accessor ))

Where TILE-NAME is the name of the tile.

These are the allowed accessors:

Accessor Description
deployment_name Provides the deployment name passed to BOSH for the tile.
network_name Provides the name of the network assigned for the tile.
present? Returns true when the tile is staged or deployed

Dollar Contexts

Outside of properties, you can also retrieve information about various configuration details of your tile and Ops Manager.

  • $ops_manager: Any tile can use this to obtain information about specific Ops Manager deployments.

  • $director: Any tile can use this to obtain information about the BOSH Director.

  • $runtime: Any tile can use this to obtain information about the VMware Tanzu Application Service for VMs tile.

  • $self: Your own tile uses this to obtain information about its configuration.

$ops_manager

The table below describes the accessors you can use to retrieve information about an Ops Manager deployment:

Accessor Description
ca_certificate Provides the root CA cert that is used to sign the Director VM.
trusted_certificates Provides a list of certificates that the Director applies to all VMs.
http_proxy Provides the comma-separated values (CSV) that are entered when Ops Manager traffic is directed to an HTTP Proxy.
https_proxy Provides the CSVs that are entered when Ops Manager traffic is directed to an HTTPS Proxy.
no_proxy Provides the CSVs that should not go through a proxy.
instance_types_catalog Provides a list of all available VM types. Includes custom VM types.
restricted_view_api_access_credentials Provides a payload for a UAA client to make read-only non-credential requests against Ops Manager. The payload includes uaa_client_name, uaa_client_secret, hostname, and port.
iaas_type Provides the type of the infrastructure: google, aws, azure, vsphere, or openstack.

$director

The table below describes the accessors you can use to retrieve information about your BOSH Director:

Accessor Description
guid Unique identifier for the BOSH Director.
deployment_ip Provides the IP address where the BOSH Director is deployed.
username Provides the username for the BOSH Director VM.
password Provides the password for the BOSH Director VM.
ntp_servers Provides a list of Network Time Protocol (NTP) servers that the BOSH Director deploys.
ca_public_key Provides the public key that is used to sign the BOSH Director VM.
hostname Provides the hostname for the BOSH Director VM.
tld Returns the string bosh as the top-level domain (TLD) of the BOSH Director.
bosh_metrics_forwarder_client_name Provides the BOSH Metrics Forwarder client name.
bosh_metrics_forwarder_client_secret Provides the BOSH Metrics Forwarder client secret.
metrics_server_enabled Exposes whether the system-metrics-server job of the bosh-system-metrics-server release is included in the BOSH Director.
system_metrics_runtime_enabled Exposes whether the ops_manager_system_metrics_runtime is added to the BOSH Director.
dns_release_present Exposes the BOSH Director configuration for disable_dns_release.

$runtime

The table below describes the accessors you can use to retrieve information about your TAS for VMs tile:

Accessor Description
system_domain Provides domain for system-level TAS for VMs components, such as the API, UAA, or Apps Manager.
apps_domain Provides the default domain used by apps.
system_api_url Provides the URL to the TAS for VMs API component.
login_url Provides the URL to authenticate with the TAS for VMs components.
uaa_url Provides the URL to the TAS for VMs UAA component.
console_url Provides the URL to the TAS for VMs Apps Manager component.
default_reply_to Provides the default reply-to email address for the system domain.
default_from Provides the default from email address of the system domain.

$self

The table below describes the accessors you can use to retrieve information about your own tile:

Accessor Description
uaa_client_name Provides the UAA client name created for your tile to communicate with the BOSH Director.
uaa_client_secret Provides the UAA client secret created for your tile to communicate with the BOSH Director.
service_network Provides the name of the service network assigned to your tile.
stemcell_version Provides the version of the stemcell your tile uses.

Complex Properties: Selectors and Collections

Most properties are simple values such as strings, integers, URL addresses, or IP addresses. Others are complex, such as selectors or collections.

  • Selectors: Give the user a choice of a set of inputs.
  • Collections: Give the user the ability to enter an array of values to create a hash.

Selectors appear as follows:

Selector

Collections appear as follows:

Collection

The selector and collections inputs are referenced by their selector and collection property blueprints.

Most properties are simple values such as strings, integers, URL addresses, or IP addresses. Selectors and collections are more complicated than simple properties because they contain manifest snippets, which are further referenced in other manifest snippets. Selectors and collections can exist alone, or nest within each other or within different parts of the manifest.

Top-Level Properties

The exerpt below is an example of the properties that appear at the top of a product template. Definitions of each property follow this example.

---
name: example-tile
product_version: "1.0-build.0"
minimum_version_for_upgrade: "1.7.0"
pivnet_filename_regex: "tile-*.pivotal"
metadata_version: "1.11"
opsmanager_syslog: true
label: 'Ops Manager: Example Tile'
description: An example tile to demonstrate Ops Manager tile author features
rank: 1
service_broker: false # Default value
stemcell_criteria:
  os: ubuntu-xenial
  version: "97.0"

  enable_patch_security_updates: true

requires_product_versions:
  - name: p-mysql
    version: '~> 2.4'

releases:
  - name: example-release
    file: "example-release.tgz"
    version: "15"

variables:
  - name: credhub-password
    type: password

post_deploy_errands:
  - name: example-errand

pre_delete_errands:
  - name: example-errand

runtime_configs:
  - name: example-runtime-config
  runtime_config: |
    releases:
    - name: os-conf
      version: 15
    addons:
    - name: login
      jobs:
      - name: login-banner
        release: os-conf
      properties:
        login_banner:
          text: |
            (( .properties.example_string.value )).

name

  • Format: String
  • Type: Required

The internal name of the tile. You must keep the name of your tile consistent for migrations to function properly. Changing the name indicates the installation of a completely different tile.

product_version

  • Format: String
  • Type: Required

The version of the tile.

You can only import this version into Ops Manager once. If you want to import the same tile or version, you must delete the existing one from the /metadata folder and delete the installation files from Ops Manager’s disk.

The version number is important for migrations. For more information, see Upgrading Tiles.

minimum_version_for_upgrade

  • Format: String
  • Type: Required

You must set a minimum version for upgrading to your current tile version. This example shows a current tile version of v1.7 that only upgrades from a v1.6.x version of the same tile:

- product_version:  1.7.0.0
  minimum_version_for_upgrade:  1.6.0.0

metadata_version

  • Format: String
  • Type: Required

The version of the schema of the product template, the file that this documentation describes.

Bumping the version number enables new properties that are not present in an older metadata_version but may also require restructuring of the product template to conform to the new metadata_version.

The metadata_version corresponds to a major or minor release of Ops Manager. Ops Manager can accept a tile with a metadata_version that is older than the Ops Manager version, but Ops Manager cannot accept a tile with a metadata_version that is newer than the Ops Manager version. It is therefore best practice to set the metadata_version to be the same as the oldest version of Ops Manager that the tile version supports.

label

  • Format: String
  • Type: Optional

The label that appears in the tile when it displays in the Ops Manager Dashboard.

description

  • Format: String
  • Type: Optional

A description of the tile.

rank

  • Format: Integer
  • Type: Optional

The order in which a tile appears on the dashboard. The BOSH Director always appears at rank 100.

For your tile to appear to the right of BOSH Director, you must set this value to an integer less than 100.

VMware recommends that you set it to 1.

If all tiles have the same rank, Ops Manager sorts them alphabetically.

pivnet_filename_regex

  • Format: String
  • Type: Optional

This regular expression allows Ops Manager’s VMware Tanzu Network integration to pull a specific tile file. You must do this when there are multiple tiles with the same product slug.

service_broker

  • Format: Boolean
  • Type: Optional, default false

Set service_broker to true for on-demand service brokers. Setting service_broker to true:

  • Enables the service network selector property type.

  • Requires the operator to select a service network during tile configuration. Tile authors can reference the selected service network with (( $self.service_network )).

  • Includes a UAA client for the service to use. Tile authors can reference the UAA client credentials with (( $self.uaa_client_name )) and (( $self.uaa_client_secret )).

stemcell_criteria

  • Format: Hash
  • Type: Required

enable_patch_security_updates enables you to automatically use the latest patched version of a stemcell. This key is set to true by default. For tiles using static compilations, you can disable this feature. This feature increases security by automatically using the latest patched version of a stemcell. However, operators might experience longer than expected upgrade times.

For example:

stemcell_criteria
  os: ubuntu-xenial
  version: "97.0"
  enable_patch_security_updates: false

VMware recommends setting the enable_patch_security_updates property to true. If you set the property to false, your tile does not receive security patches through automatic stemcell updates.

You do not specify which IaaS the stemcell targets. This keeps your product template IaaS agnostic so that one product template can be deployed on any IaaS.

For a list of stemcells, including OS and version, see the BOSH website.

For more information, see Floating Stemcells.

additional_stemcells_criteria

  • Format: Array of hashes
  • Type: Optional

A list of stemcell criteria that can be selected using the stemcell_selector property type. These stemcells are listed in addition to the stemcell configured with stemcell_criteria. After an operator has selected a stemcell, it becomes required.

For more information about the stemcell_selector property type, see stemcell_selector.

For example:

additional_stemcells_criteria:
  - os: ubuntu-xenial
    version: 97.0
    enable_patch_security_updates: false
  - os: windows2016
    version: 1709.1

requires_product_versions

  • Format: Array of hashes
  • Type: Optional

A list of tile dependencies. If the required tile is not present in the Ops Manager installation, Ops Manager lists the needed dependencies and does not install your tile until the dependencies are satisfied.

Supported restriction operators are =, !=, >, <, >=, <=, and ~>.

The following keys are supported:

  • name: The name of the tile required by your tile. This is a required key.
  • version: The version range required by your tile. This is a required key.
  • optional: Whether or not this dependency is optional. This is an optional key that defaults to false.

    Warning: The optional key was introduced in Ops Manager v2.8. It is ignored in earlier versions. This means that declared dependencies are required in Ops Manager v2.7 and earlier.

For example:

 requires_product_versions:
  - name: tile-one
    version: '> 1.2'
  - name: tile-two
    version: '~> 2.3.4'
    optional: true

For more information about required and optional dependencies, see Dependencies in How Tiles Work.

releases

  • Format: Array of hashes
  • Type: Required

The list of releases contained in your tile’s releases directory.

The version of the release must be exactly the same as the version contained in the release.

Each release requires the following keys:

  • name
  • file
  • version

variables

  • Format: Array of hashes
  • Type: Optional

A list of variables, that are generated after a deploy succeeds.

You can reference variables in a manifest snippet using triple-parentheses expressions.

Each release requires the following keys:

  • name
  • type

post_deploy_errands

  • Format: Array of hashes
  • Type: Optional

A list of errands that run after a deploy succeeds.

Set the run_post_deploy_errand_default: property to on or off to set the default for the errand’s run rule selector in Ops Manager.

For more information, see Errands. If this property is not supplied, the selector defaults to On.

pre_delete_errands

  • Format: Array of hashes
  • Type: Optional

A list of errands that run before a deployment is deleted.

Set the run_pre_delete_errand_default: property to on or off to set the default for the errand’s run rule selector in Ops Manager. If you do not specify this property, the selector defaults to On.

For more information, see Errands.

runtime_configs

  • Format: Array of hashes
  • Type: Optional

These are keys that define global deployment configurations. For more information, see Managing Runtime Configs.

install_time_verifiers

  • Format: Array of hashes
  • Type: Optional

Install-time verifiers confirm that properties for external services are set correctly. Install-time verifiers run in Ops Manager before changes are applied. This enables operators to correct invalid properties before deploying.

For example, Verifiers::MysqlDatabaseVerifier checks that MySQL database properties are valid by using the properties to connect to the MySQL database. If the properties are invalid, the install-time verifier informs the operator.

Each install-time verifier supports the following keys:

  • name: The type of verifier. The value must be one of the verifiers listed in the table below.

  • properties: A mapping of verifier inputs to either property references or static values. The required properties for each verifier are listed in the table below.

  • ignorable: If this key is set to false, an operator cannot Apply Changes until the verification errors are resolved. If this key is set to true, an operator can ignore the warning message and Apply Changes. This key is set to false by default.

  • run_on: Determines when to run the verifier. Valid values include 'always' and 'major_or_minor_upgrades'. Defaults to 'always'.

For information about how operators manage and view verifiers, see Managing Ops Manager Verifiers.

The following table lists the available install-time verifiers:

Verifier Type Verifies that… Properties
Verifiers::BlobstoreVerifier the specified AWS s3 bucket exists and is accessible.
  • access_key_id
  • bucket_name
  • secret_access_key
  • (Optional) signature_version
  • (Optional) region
  • (Optional) use_path_style
  • (Optional) endpoint
  • (Optional) use_path_style
Verifiers::LDAPBindVerifier the specified LDAP server exists and that the provided credentials are valid. Multiple LDAP servers may be verified if the url property is a space-separated list of server URLs.
  • url
  • credentials
Verifiers::MysqlDatabaseVerifier the specified MySQL server exists and that the provided credentials and database are valid.
  • database
  • host
  • password
  • port
  • username
  • (Optional) tls_enabled
  • (Optional) tls_ca
  • (Optional) tls_certificate
  • (Optional) tls_private_key
Verifiers::SmtpAuthenticationVerifier the specified SMTP server exists and that the provided credentials are valid.
  • credentials
  • address
  • port
  • helo_domain
  • authentication
  • enable_starttls_auto
Verifiers::SsoUrlVerifier the specified SSO server exists.
  • url
Verifiers::StaticIpsVerifier all requested static IPs fall within the subnet assigned to the job. For more information, see static_ips in Job Types. (none)
Verifiers::WildcardDomainVerifier the specified domain resolves using DNS.
  • domain
Verifiers::VsphereConfigurationVerifier the vSphere configuration is valid.
  • vcenter_hosturl
  • vcenter_credentials
  • datacenter
  • datastore_pattern
Verifiers::HttpSuccessVerifier the specified endpoint returns successfully. If must_match_regex expression is provided, it must be wrapped in forward slashes. For example, /.*/. The verifier ensures that the response body matches the regular expression.
  • host
  • port
  • path
  • scheme
  • (Optional) must_match_regex
  • (Optional) skip_ssl_verification

The following is an example of a install_time_verifiers section:

install_time_verifiers:
- ignorable: true
  name: Verifiers::WildcardDomainVerifier
  properties:
    domain: .cloud_controller.system_domain
- name: Verifiers::SsoUrlVerifier
  properties:
    url: .properties.uaa.saml.sso_url
- ignorable: true
  name: Verifiers::BlobstoreVerifier
  properties:
    access_key_id: .properties.system_blobstore.external.access_key
    bucket_name: .properties.system_blobstore.external.buildpacks_bucket
    endpoint: .properties.system_blobstore.external.endpoint # Optional. Defaults to AWS
    region: .properties.system_blobstore.external.region # Optional. Defaults to default IaaS setting
    secret_access_key: .properties.system_blobstore.external.secret_key
    signature_version: .properties.system_blobstore.external.signature_version
    use_path_style: .properties.system_blobstore.external.use_path_style # Optional. Defaults to false
- ignorable: true
  name: Verifiers::MysqlDatabaseVerifier
  properties:
    database: "static-database-name"
    host: .properties.system_database.external.host
    password: .properties.system_database.external.account_password
    port: 1234
    username: example-dbuser
- ignorable: true
  name: Verifiers::HttpSuccessVerifier
  run_on: major_or_minor_upgrades
  properties:
    host: .properties.external_host
    scheme: https
    port: 443
    path: /verify

icon_image

  • Format: Base64 Image
  • Type: Required

This is the icon that displays on the tile in the Ops Manager Installation Dashboard.

base_releases_url

  • Format: String
  • Type: Optional

A publicly available URL that is passed to BOSH in order to download your releases during installation. If you use this field, BOSH Director must have internet connectivity. This allows you to package your tile without releases, decreasing the tile size.

opsmanager_syslog

  • Format: Boolean
  • Type: Optional, default false

Set opsmanager_syslog to true to opt in to the Ops Manager provided syslog form. If you opt in, you do not need provide the Syslog BOSH release for your tile.

For more information about the Syslog BOSH release, see the Syslog BOSH Release repository on GitHub.

For more information about migrating an existing form to the Ops Manager provided syslog form, see Migrating Existing Syslog Configuration to Ops Manager.

Form Properties

Each form type you write is composed of form properties. Form properties dictate the structure of the form fields that appear in the Ops Manager UI. The name of each form appears on the left-hand side as navigational tabs.

Form properties reference property_blueprints. Property blueprints define each field’s data type. For a corresponding example to the form_types example below, see property_blueprints.

The following is an example of the properties that appear in the form_types section of a product template:

form_types:
  - name: example-form
    label: Configurable Properties
    description: All the properties that you can configure!
    markdown: |
      ## I am markdown, hear me _roar_.

      ![Alt text](http://placekitten.com/g/400/200)

      Things to do:

      1. Learn [markdown](https://daringfireball.net/projects/markdown/).
      1. ...
      1. Profit!
    property_inputs:
      - reference: .web_server.example_string
        label: Example string
        description: 'Configure a property of type string'
      - reference: .web_server.example_string_with_placeholder
        label: Example string containing Placeholder text
        description: 'Optional field. Configuration not necessary'
        placeholder: 'Ghost text. Spooky!'
      - reference: .web_server.example_migrated_integer
        label: Example integer
        description: 'Configure a property of type integer'
      - reference: .web_server.example_boolean
        label: Example boolean
        description: 'Configure a property of type boolean'
      - reference: .web_server.example_dropdown
        label: Example dropdown
        description: 'Configure a property of type dropdown'
      - reference: .web_server.example_domain
        label: Example domain
        description: 'Configure a property of type domain'
      - reference: .web_server.example_wildcard_domain
        label: Example wildcard_domain
        description: 'Configure a property of type wildcard_domain'
      - reference: .web_server.example_string_list
        label: Example string_list
        description: 'Configure a property of type string_list'
      - reference: .web_server.example_text
        label: Example text
        description: 'Configure a property of type text (setting to "magic value" causes the web server job instance count to go to 0)'
      - reference: .web_server.example_ldap_url
        label: Example ldap_url
        description: 'Configure a property of type ldap_url'
      - reference: .web_server.example_email
        label: Example email
        description: 'Configure a property of type email'
      - reference: .web_server.example_http_url
        label: Example http_url
        description: 'Configure a property of type http_url'
      - reference: .web_server.example_ip_address
        label: Example ip_address
        description: 'Configure a property of type ip_address'
      - reference: .web_server.example_ip_ranges
        label: Example ip_ranges
        description: 'Configure a property of type ip_ranges'
      - reference: .web_server.example_multi_select_options
        label: Example multi_select_options
        description: 'Configure a property of type multi_select_options'
      - reference: .web_server.example_network_address_list
        label: Example network_address_list
        description: 'Configure a property of type network_address_list (this property was marked with freeze_on_deploy, and so cannot be edited after changes are first applied)'
      - reference: .web_server.example_network_address
        label: Example network_address
        description: 'Configure a property of type network_address'
      - reference: .web_server.example_port
        label: Example port
        description: 'Configure a property of type port'
      - reference: .web_server.example_smtp_authentication
        label: Example smtp_authentication
        description: 'Configure a property of type smtp_authentication'
      - reference: .web_server.client_certificate
        label: Example certificate
        description: 'Configure a certificate'
    verifiers:
      - name: Verifiers::WildcardDomainVerifier
        properties:
          domain: .web_server.example_wildcard_domain
      - name: Verifiers::StaticIpsVerifier
        properties:
          domain: .web_server.example_ip_address

name

  • Format: String
  • Type: Required

The internal name of the form.

label

  • Format: String
  • Type: Required

The label of the form as it appears as a link on the left hand side of each form.

description

  • Format: String
  • Type: Optional

The description of the form. Appears at the top of the form as a header.

markdown

  • Format: Markdown
  • Type: Optional

Provide a block of markdown to display at the top of the form, including image support. Use this property to document the tile and provide explanations or references.

property_inputs

  • Format: Array of hashes
  • Type: Required

References to properties defined in the property_blueprints section of the product template.

verifiers

Verifiers confirm that properties are set correctly in forms. If a verifier displays a warning, the form can still be saved and the warning can be ignored.

Verifiers are similar to install-time verifiers except that they run after a form is saved and not before Apply Changes. Verifiers do not block deployments and only inform operators that set properties are invalid.

If you want to have a verifier run when a form is saved and before Apply Changes, add the verifier to both the verifiers and install_time_verifiers sections.

For information about how operators manage and view verifiers, see Managing Ops Manager Verifiers.

For information about how verifiers are configured, see install_time_verifiers.

The following is an example of a verifiers section:

form_types:
  - name: example-form
    label: Configurable Properties
    description: All the properties that you can configure!
    property_inputs:
      - reference: .web_server.example_wildcard_domain
        label: Example wildcard_domain
        description: 'Configure a property of type wildcard_domain'
      - reference: .web_server.static_ips
        label: Example ip_address
        description: 'Configure a property of type ip_address'
    verifiers:
      - name: Verifiers::WildcardDomainVerifier
        properties:
          domain: .web_server.example_wildcard_domain
      - name: Verifiers::StaticIpsVerifier
      - name: Verifiers::MysqlDatabaseVerifier
        properties:
          database: "static-database-name"
          host: .properties.example-database-host
          port: 1234
          username: example-dbuser

You can specify either a tile property reference or a static value for a form verifier. In the example above, Verifiers::MysqlDatabaseVerifier uses a tile property reference for the database host and static values for the database name, port number, and username.

placeholder

  • Format: String
  • Type: Optional

Specify placeholder text for a field. The text appears in light gray to show an example value for the user. The text disappears when the user types in the field and reappears if the user leaves the field empty.

The placeholder attribute displays for the following form types:

  • string
  • integer
  • domain
  • wildcard_domain
  • string_list
  • text
  • ldap_url
  • email
  • http_url
  • ip_address
  • ip_ranges
  • network_address_list
  • network_address
  • port

Job Types

The following is an example of the job_types section that appears in a product template.

This section defines the jobs that end up in a BOSH manifest. Those jobs are defined in your BOSH release.

Jobs require many different settings in order to function properly. That is the core of what Ops Manager does for you: Ops Manager asks a user to designate values for those settings and generates a manifest based on what the user specifies.

Ops Manager does not require tile authors to provide vm_credentials in the property_blueprints for each job_type. This is because vm_credentials are generated automatically. You can find them in the release manifest.

Note: Ops Manager ignores static_ip and dynamic_ip keys. To configure the static IPs of a job_type, create a property blueprint with name: static_ips and type: ip_ranges.
static_ips is a special keyword that Ops Manager uses to find static IPs and pass them to the BOSH manifest. For more information about ip_ranges, see ip_ranges.


  job_types:
    - name: web_server
      resource_label: Web Server
      templates:
        - name: web_server
          release: example-release
        - name: time_logger
          release: example-release
      release: example-release
      static_ip: 1
      dynamic_ip: 0
      single_az_only: true
      use_stemcell: ubuntu-xenial
      max_in_flight: 1
      resource_definitions:
        - name: ram
          type: integer
          configurable: true
          default: 1024
        - name: ephemeral_disk
          type: integer
          configurable: true
          default: 2048
        - name: persistent_disk
          type: integer
          configurable: true
          default: 1024
          constraints:
            min: 1024
        - name: cpu
          type: integer
          configurable: true
          default: 1
      instance_definition:
        name: instances
        type: integer
        configurable: true
        default: 1
        constraints:
          max: 1
        zero_if:
          property_reference: '.web_server.example_text'
          property_value: 'magic value'
          allow_manual_selection_of_zero: false
      manifest: |
        generated:
          root_rsa_certificate: (( $ops_manager.ca_certificate ))
          rsa_cert_credentials:
            public_key_pem: (( generated_rsa_cert_credentials.public_key_pem ))
            cert_and_private_key_pems: (( generated_rsa_cert_credentials.cert_and_private_key_pems ))
          rsa_pkey_credentials:
            public_key_pem: (( generated_rsa_pkey_credentials.public_key_pem ))
            private_key_pem: (( generated_rsa_pkey_credentials.private_key_pem ))
            public_key_openssh: (( generated_rsa_pkey_credentials.public_key_openssh ))
            public_key_fingerprint: (( generated_rsa_pkey_credentials.public_key_fingerprint ))
          salted_credentials:
            sha512_hashed_password: (( generated_salted_credentials.sha512_hashed_password ))
            identity: (( generated_salted_credentials.identity ))
            salt: (( generated_salted_credentials.salt ))
            password: (( generated_salted_credentials.password ))
          simple_credentials:
            identity: (( generated_simple_credentials.identity ))
            password: (( generated_simple_credentials.password ))
          secret: (( generated_secret.value ))
          uuid: (( generated_uuid.value ))
        configured:
          string: (( example_string.value ))
          integer: (( example_migrated_integer.value ))
          ...
          record_collection: (( .properties.example_collection.value || [] ))
          selector: (( .properties.example_selector.selected_option.parsed_manifest(my_snippet) ))
        ops_manager_provided_accessors:
          name: (( name ))
          cpu: (( cpu ))
          ram: (( ram ))
          ephemeral_disk: (( ephemeral_disk ))
          persistent_disk: (( persistent_disk ))
          instances: (( instances ))
          any_instances: (( any_instances ))
          subnet_cidrs: (( subnet_cidrs ))
      property_blueprints:
      - name: static_ips
        type: ip_ranges
        configurable: true
        optional: true
      - name: generated_rsa_cert_credentials
        type: rsa_cert_credentials
      - name: generated_rsa_pkey_credentials
        type: rsa_pkey_credentials
      - name: generated_salted_credentials
        type: salted_credentials
      - name: generated_simple_credentials
        type: simple_credentials
      - name: generated_secret
        type: secret
      - name: generated_uuid
        type: uuid
      - name: example_string_with_placeholder
        type: string
        configurable: true
        optional: true
        placeholder: 'Configure me!'
      - name: example_string
        type: string
        configurable: true
        default: 'Hello world'
        constraints:
        - must_match_regex: '^[^!@#$%^&*()]*$'
          error_message: 'This name cannot contain capital digits.'
        - must_match_regex: '^[^0-9]*$'
          error_message: 'This name cannot contain digits.'
      - name: example_migrated_integer
        type: integer
        configurable: true
        default: 1
      - name: example_boolean
        type: boolean
        configurable: true
        default: true
      - name: example_dropdown
        type: dropdown_select
        configurable: true
        default: kiwi
        options:
          - name: kiwi
            label: 'label for kiwi'
          - name: lime
            label: 'label for lime'
          - name: avocado
            label: 'label for avocado'
      - name: example_domain
        type: domain
        configurable: true
        default: www.example.com
      - name: example_wildcard_domain
        type: wildcard_domain
        configurable: true
        default: 'example.com'
      - name: example_string_list
        type: string_list
        configurable: true
        default: 'a,list,of,strings'
      - name: example_text
        type: text
        configurable: true
        default: 'some_text'
      - name: example_ldap_url
        type: ldap_url
        configurable: true
        default: 'ldap://example.com'
      - name: example_email
        type: email
        configurable: true
        default: foo@example.com
      - name: example_http_url
        type: http_url
        configurable: true
        default: 'http://www.example.com'
      - name: example_ip_address
        type: ip_address
        configurable: true
        default: '192.168.0.1'
      - name: example_ip_ranges
        type: ip_ranges
        configurable: true
        default: '1.1.1.1-1.1.1.4,2.2.2.1-2.2.2.4'
      - name: example_multi_select_options
        type: multi_select_options
        configurable: true
        default: ['earth', 'jupiter']
        options:
          - name: mercury
            label: 'label for mercury'
          - name: venus
            label: 'label for venus'
          - name: earth
            label: 'label for earth'
          - name: mars
            label: 'label for mars'
          - name: jupiter
            label: 'label for jupiter'
          - name: saturn
            label: 'label for saturn'
          - name: uranus
            label: 'label for uranus'
          - name: neptune
            label: 'label for neptune'
      - name: example_network_address_list
        type: network_address_list
        configurable: true
        default: '1.1.1.1,example.com,foo.bar.example.com'
      - name: example_network_address
        type: network_address
        configurable: true
        default: '1.1.1.1'
      - name: example_port
        type: port
        configurable: true
        default: 1111
      - name: example_smtp_authentication
        type: smtp_authentication
        configurable: true
        default: plain
      - name: client_certificate
        type: ca_certificate
        configurable: true
        optional: true

name

  • Format: String
  • Type: Required

The name of the job as it is to be created in the Ops Manager generated BOSH manifest.

resource_label

  • Format: String
  • Type: Required

The label of the job as it is to appear in the resources page of the tile.

templates

  • Format: Array of hashes
  • Type: Required

Each element has the following fields:

  • name
  • release
  • consumes
  • provides

name

  • Format: Name of the job template to use
  • Type: Required

release

  • Format: Name of the release the template is from
  • Type: Required

consumes

  • Format: YAML string defining BOSH links that this job consumes
  • Type: Optional

For more information about BOSH links, see Links in the BOSH documentation.

provides

  • Format: YAML string defining BOSH links that this job provides
  • Type: Optional

For more information about BOSH links, see Links in the BOSH documentation.

release

  • Format: String
  • Type: Required

The name of the BOSH release contained in your tile archive, which is the .pivotal file.

single_az_only

  • Format: Boolean
  • Type: Required

You can give users control of balancing jobs across availability zones (AZs) by setting single_az_only to false.

To limit a job to a single AZ, set single_az_only to true.

Warning: If you change the single_az_only setting, your VMs may switch AZs. This change can cause an orphaned disk.

max_in_flight

  • Format: Integer
  • Type: Required

A BOSH setting that controls the number of instances of this job that BOSH deploys in parallel.

use_stemcell

  • Format: String
  • Type: Optional

The stemcell operating system for this job. You must set use_stemcell to the value of an os key configured in stemcell_criteria or additional_stemcell_criteria.

You can configure use_stemcell to enable jobs to run on different operating systems. For example, you can configure one job to run on Linux and configure a different job to run on Windows. If the instance count of a job is 0, the configured stemcell operating system is not required to deploy the tile.

If a job does not have a use_stemcell property, the job uses the stemcell operating system configured in stemcell_criteria. For more information, see stemcell_criteria and additional_stemcell_criteria.

resource_definitions

  • Format: Array of hashes
  • Type: Required

A set of resource settings for the job along with maximum and minimum constraints, defaults, and enabled or disabled configurability.

The resources you can set are:

  • ram
  • ephemeral_disk
  • persistent_disk
  • cpu

For examples of supported constraint types, see integer.

Note: If you set the default property for persistent_disk to 0, users cannot edit this value and the Resource Config pane in the Ops Manager tile displays None under the persistent disk field.

instance_definition

  • Format: Hash
  • Type: Required

The number of default instances for a job, including maximum, minimum, odd, and the ability to decrease sizing after deploy.

If your tile uses an external service that performs the same job as a service in TAS for VMs, you can reduce resource usage by setting the instance count of a job to 0 with the zero_if property.

When zero_if is not active for an instance group, you cannot set the instance count to 0. You can override this by setting allow_manual_selection_of_zero to true. By default, it is set to false.

For example, your tile uses Amazon Relational Database Service (RDS) instead of MySQL, which is the default system database for TAS for VMs. Remove all instance counts of MySQL by setting property reference to .properties.system.database and property value to magic value.

For examples of supported constraint types, see integer.

Note: If you are using the zero_if property, you should not set the may_only_increase constraint to true.

manifest

  • Format: Text snippet, prefaced by pipe symbol: |
  • Type: Optional

Ops Manager generates a BOSH manifest that defines properties for each job the manifest deploys. Some of these properties are not set until the user clicks Apply Changes, because the user configures them in the tile or because Ops Manager has to generate them.

For more information about referencing these properties, see Referencing Properties.

Job Accessors

The table below describes the double parentheses expressions Ops Manager provides to access information about the jobs that the manifest deploys:

Double Parentheses Expression Description
(( name )) The name of the job.
(( cpu )) The CPU of the VM type configured for the job.
(( ram )) The RAM of the VM type configured for the job.
(( ephemeral_disk )) The ephemeral disk of the VM type configured for the job.
(( persistent_disk )) The persistent disk of the VM type configured for the job.
(( instances )) The number of instances configured for the job.
(( any_instances )) Returns true if there is a non-zero number of instances for the job.
(( subnet_cidrs )) A list of CIDRs associated with the job.

Property Blueprint Reference

Common Property Blueprint Attributes

All property blueprints can have the following attributes:

  • name: Required. The name of the property. The name is used to reference a property in form_types and in (( )) accessors.

  • type: Required. The type of property. Must be one of the property types listed in this topic.

  • optional: Optional. Default: false. When set to true, Ops Manager does not require this property to be set in order to deploy, nor does it validate that this field has a value when saving a form with this property. optional cannot be set to true if a default value is set. For more information about which types support default, see All Property Blueprint Types. optional cannot be set to true if the property also has configurable: false.

  • configurable: Optional. Default: false. When set to true for property types that support operator configuration, the operator is not allowed to configure this value. Do not set configurable: true for property types that do not support operator configuration. When set to false, Ops Manager does not render this property in any form, even if it is specified in a form_type, nor does it allow the property to be updated via the API. For property types that support auto-generation of values, when configurable is set to false, Ops Manager generates and saves a value for this property when the tile this property belongs to is deployed for the first time.

  • freeze_on_deploy: Optional. Default: false. When set to true, Ops Manager does not allow this property to be changed after the tile this property belongs to is successfully deployed.

  • conditional_default: Optional. Accepts two nested keys: dependency_present and value. The conditional_default key overrides the default value specified in the property blueprint only when that tile dependency is present. Otherwise, the default value is used. The conditional_default key is evaluated when the specified tile dependency is imported. It is reevaluated only when that tile dependency is staged or deleted. For example:

    - name: example_selector
      type: selector
      default: Yes
      conditional_default:
        dependency_present: cf
        value: No
      option_templates:
        - name: yes_option
          select_value: Yes
          named_manifests:
            - name: my_snippet
              manifest: |
                ...
        - name: no_option
          select_value: No
          named_manifests:
            - name: my_other_snippet
              manifest: |
                ...
    

Configurable and Auto-Generated Properties

When a property has configurable: true and is added to a form_type, the operator can configure the value of that property.

Alternatively, a property with configurable: false gets a value auto-generated by Ops Manager. For which property types support each of these usages, see the sections below.

Properties with configurable set to false:

  • Cannot be edited by the operator.
  • Do not show up in forms, even if added under form_types.
  • Get auto-generated values filled in by Ops Manager if that specific type of property supports auto-generation of values.

named_manifest for Selector and Collection Type Properties

Specify a property for collection within the named_manifest section of the metadata, as in the example below:

- name: certificate_collection
  type: collection
  configurable: true
  property_blueprints:
    - name: some_cert_name
      type: string
    - name: some_cert
      type: rsa_cert_credentials
  named_manifests:
  - name: for_routing
    manifest: |
      name:  (( current_record.some_cert_name.value ))
      private_key:  (( current_record.some_cert.private_key_pem ))
      public_key:  (( current_record.some_cert.public_key_pem ))
      certificate: (( current_record.some_cert.cert_pem ))

Use the current_record property within a collection record to refer to other properties in the same record.

For example, the properties in the for_routing named manifest refer to the values for name, private_key, public_key, and certificate within this record only.

Note: The current_record property is reserved. You cannot create a new property named current_record.

After defining a named manifest, you can reference it using a manifest snippet in the following format:

routing_certificates: (( .properties.certificate_collection.parsed_manifest(for_routing) ))

Ops Manager renders the following manifest from this example:

routing_certificates:
  - name: foo_cert
    private_key: PRIVATE-KEY
    public_key: PUBLIC-KEY
    certificate: CERTIFICATE
  - name: bar_cert
    private_key: PRIVATE-KEY
    public_key: PUBLIC-KEY
    certificate: CERTIFICATE

For more information, see Selector and Collection Types.

All Property Blueprint Types

These sections describe every property blueprint type.

boolean

This holds a single boolean value.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

value Returns the boolean value of the property.
value_present? Returns true only if the value of the property is set.

Example

property_blueprints:
  - name: example_boolean
    type: boolean
    configurable: true
    default: false

form_types:
  - name: example_form
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_boolean
        label: 'Example checkbox'
        description: 'This is an example checkbox'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
    templates:
      - name: user_add
        release: os-conf
        manifest: |
          persistent_homes: (( .properties.example_boolean.value ))

Example Product with Boolean Information

ca_certificate

This holds a string value

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

value Returns a string or null.
value_present? Returns true only if the value of the property is set.

Example

property_blueprints:
- name: ca_cert
  type: ca_certificate
  configurable: true

form_types:
- name: example_form
  label: 'Example form'
  description: 'An example form'
  property_inputs:
    - reference: .properties.ca_cert
      label: 'Trusted CA certs'
      description: 'These certificates will be trusted by the deployed VM'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: ca_certs
      release: os-conf
      manifest: |
        certs: (( .properties.ca_cert.value ))

Example Product with CA Certificate

collection

This holds multiple records of a group of custom defined properties.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

If specified, the default value must be an array where each item of the array has the keys and values which are appropriate for the property blueprints provided. For the example below, a default value could be:
default:
  - name: sam
    public_key: ssh-rsa AAAAB3NzaC1yc2EAAAAD...
    sudo: true
property_blueprints A group of property blueprints that each record will have. Any type and combination of property types can be used except collections and selectors which cannot be nested inside of collections.
named_manifests An array of objects each containing a name and a manifest. The manifest specifies the YAML which can be used with parsed_manifest(name) where the manifest will be interpolated for each record in the collection. The manifest has a special property level, current_record, which has all the properties in a record of the collection. The provided example below shows have named_manifest, current_record, and parsed_manifest together to render a collection in a BOSH manifest.

Accessors

parsed_manifest(named) An array of interpolated YAML elements (often objects, but could be strings or numbers). Where each element of the array is an interpolation of the named_manifest for each record.
value An array of objects whose keys are the property names specified under property_blueprints, and whose values are the .value for each property. For example, if a collection “albums” had properties: title (string) and explicit (boolean), (( albums.value )) would render:
[
  {title: 'album-one', explicit: true},
  {title: 'album-two', explicit: false}
]

Example using .value accessor

property_blueprints:
  - name: users_to_add
    type: collection
    configurable: true
    property_blueprints:
      - name: name
        type: string
        configurable: true
      - name: public_key
        type: string
        configurable: true
      - name: sudo
        type: boolean
        configurable: true

form_types:
  - name: example_form
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.users_to_add
        label: 'Users to add'
        description: 'will added to deployed VM'
        property_inputs:
          - reference: name
            label: Username
            description: username of the added user
          - reference: public_key
            label: Public key
            description: RSA public key used to SSH onto the VM
          - reference: sudo
            label: make sudoer
            description: if checked, user will be able to sudo

job_types:
  - name: example-job
    resource_label: An Example Job
    <<: *job_type_boilerplate
    templates:
      - name: user_add
        release: os-conf
        manifest: |
          users: ((.properties.users_to_add.value))

Example Product with a Collection

Resulting manifest snippet
...
instance_groups:
- name: example-job
  jobs:
  - name: user_add
    release: os-conf
    ...
    properties:
      users:
      - name: tom
        public_key: ssh-rsa MFwwDQYJKoZIhvcNAQEBBQ...
        sudo: false
      - name: sameer
        public_key: ssh-rsa MFwwDQYJKoZIhvcNAQEBBQ...
        sudo: true
...

Example with .parsed_manifest(name)

property_blueprints:
  - name: sysctls
    type: collection
    configurable: true
    property_blueprints:
      - name: setting_name
        type: string
        configurable: true
      - name: setting_value
        type: string
        configurable: true
    named_manifests:
      - name: name_value_format
        manifest: (( current_record.setting_name.value ))=(( current_record.setting_value.value ))

form_types:
  - name: example_form
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.sysctls
        label: 'Custom sysctls'
        description: 'sysctl configuration settings to be placed in /etc/sysctl.d'
        property_inputs:
          - reference: setting_name
            label: Setting name
            description: the sysctl setting name, e.g. net.core.somaxconn
          - reference: setting_value
            label: Setting value
            description: value for this sysctl setting

job_types:
  - name: example-job
    resource_label: An Example Job
    <<: *job_type_boilerplate
    templates:
      - name: sysctl
        release: os-conf
        manifest: |
          sysctl: (( .properties.sysctls.parsed_manifest(name_value_format) ))

Example Product with a Collection

Resulting manifest snippet
...
instance_groups:
- name: example-job
  jobs:
  - name: sysctl
    release: os-conf
    ...
    properties:
      sysctl:
      - foo=bar
      - fooz=baz
...

disk_type_dropdown

This holds a single string value selected from allowed disk types.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

resource_definitions Optional. An array of objects with the same schema as resource_definitions for job_types. For disk_type_dropdown, resource_definitions should only have one element with name “persistent_disk”. This element can also specify a default which OpsManager uses as a minimum bound when it selects a default value. It can also specify constraints, which can be any set of constraints that can be specified for an integer property. For examples of supported constraint types, see integer below.

Accessors

value Returns a string containing the size of the selected disk in megabytes, e.g. “1024”. If nothing or “Automatic” was specified by the operator, then then this returns the smallest disk that is greater than the default value specified in resource_definitions. If no default was specified, then this returns the smallest disk in the catalog.
value_present? Returns true only if a disk type is selected. If the user has selected “Automatic”, value_present? will be false.

Example

property_blueprints:
  - name: example_disk_type_dropdown
    type: disk_type_dropdown
    configurable: true
    resource_definitions:
      - name: persistent_disk
        default: 4096
        constraints:
          min: 2048

form_types:
  - name: example_form
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_disk_type_dropdown
        label: 'Example disk_type_dropdown'
        description: 'This is an example'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: "Hello user, I see that your favorite disk size greater than 2 Gb is: (( .properties.example_disk_type_dropdown.value ))."

Example Product with Disk Types Dropdown

domain

This holds a string value that is a valid domain (e.g. example.com or x.example.com:80/a/b).

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

value Returns the domain as a string or null.
value_present? Returns true only if the value is a non-empty string.

Example

property_blueprints:
  - name: example_domain
    type: domain
    configurable: true

form_types:
  - name: example_form
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_domain
        label: 'Example domain'
        description: 'This is an example'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: Hello, user. I see your favorite domain is (( .properties.example_domain.value )).

Example Product with Domain

dropdown_select

This holds an array of strings selected string values.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

The default value should be one of the options’ names. For example, in the example shown below, “tomato” could be used as the default.
options An array of hashes, each item specifying a: name, which becomes the value of the property if this option is selected, and label shows up as the text in the dropdown for this option.

Accessors

value Returns the name of the selected option.
value_present? Returns true if an option in selected, and that option’s name is a non-empty string.

Example

property_blueprints:
- name: example_dropdown_select
  type: dropdown_select
  default: kiwi
  configurable: true
  options:
  - name: kiwi
    label: 'Kiwi'
  - name: lime
    label: 'Lime'
  - name: tomato
    label: 'Tomato'

form_types:
- name: example_dropdown
  label: 'Example form'
  description: 'An example form'
  property_inputs:
  - reference: .properties.example_dropdown_select
    label: Favorite fruit
    description: 'What is your favorite fruit?'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
  - name: login_banner
    release: os-conf
    manifest: |
      login_banner:
        text: Hello, user. I see your favorite fruit is (( .properties.example_dropdown_select.value )).

Example Product with Multi-Select Options

email

This ensures the string value is formatted as an email address.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

value Returns a string or null.
value_present? Returns true if value is a non-empty string.

Example

property_blueprints:
- name: example_email
  type: email
  configurable: true

form_types:
- name: example_dropdown
  label: 'Example form'
  description: 'An example form'
  property_inputs:
  - reference: .properties.example_email
    label: User email
    description: 'What is your email?'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
  - name: login_banner
    release: os-conf
    manifest: |
      login_banner:
        text: Hello, user. Your email is (( .properties.example_email.value )).

Example Product with Email

http_url

This holds an HTTP URL.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

value Returns a string or null.
value_present? Returns true if value is a non-empty string.

Example

property_blueprints:
  - name: example_http_url
    type: http_url
    configurable: true
    default: 'http://example.com'

form_types:
  - name: example_form
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_http_url
        label: Example http_url
        description: 'Configure a property of type http_url'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
  - name: login_banner
    release: os-conf
    manifest: |
      login_banner:
        text: Hello, user. For fun, please visit (( .properties.example_http_url.value )).

Example Product with Http URL

integer

This holds a single integer value.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.
constraints Constrains which integer values are considered valid. See the below table for all supported constraint types.

Supported Constraints

max Sets the maximum value of the integer.
may_only_be_odd_or_zero Sets the integer to only allow odd or zero values.
may_only_increase Sets the integer to only increase in value.
min Sets the minimum value of the integer.
modulo Sets the integer to only be divisable by the given value.
power_of_two Sets the integer to only be a power of two.
zero_or_min Sets the minimum value of the integer but allows zero.

Accessors

value Returns an integer or null.
value_present? Returns true if value is an integer.

Example

property_blueprints:
  - name: example_integer1
    type: integer
    configurable: true
    default: 9
    constraints: # the following constraints allow the values 9, 15, and 21
      min: 8
      max: 21
      may_only_increase: true
      may_only_be_odd_or_zero: true
      modulo: 3
  - name: example_integer2 # the following constraints allow the values 8 and 16
    type: integer
    configurable: true
    optional: true
    constraints:
      zero_or_min: 5
      max: 20
      power_of_two: true

form_types:
  - name: example_integer
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_integer1
        label: Example Integer 1
        description: 'Configure a property of type integer'
      - reference: .properties.example_integer2
        label: Example Integer 2
        description: 'Configure another property of type integer'

job_types:
  - name: example-job
    resource_label: An Example Job
    <<: *job_type_boilerplate
    templates:
    - name: tcp_keepalive
      release: os-conf
      manifest: |
        tcp_keepalive:
          time: (( .properties.example_integer1.value ))
          interval: (( .properties.example_integer2.value ))

Example Product with Integer

ip_address

Ensures the string value is an IP address.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

value Returns a string or null.
value_present? Returns true if value is a non-empty string.

Example

property_blueprints:
  - name: example_ip_address
    type: ip_address
    configurable: true
    default: 192.168.0.1

form_types:
  - name: example_form
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_ip_address
        label: Example IP Address
        description: 'Configure a property of type ip_address'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: Hello, user. I see your favorite IP Address is (( .properties.example_ip_address.value )).

Example Product with IP Address

ip_ranges

This holds a string that is a comma-separated list of IP addresses and IP address ranges.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

parsed_ip_ranges Returns an array of strings containing each IP range
value Returns a string containing a comma-separated list of IP ranges and IP addresses, or null.
value_present? Returns true if value is a non-empty string.

Example

property_blueprints:
  - name: example_ip_ranges
    type: ip_ranges
    configurable: true
    default: 1.1.1.1-1.1.1.4,2.2.2.1-2.2.2.4,3.3.3.3

form_types:
  - name: example_form
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_ip_ranges
        label: Example IP Ranges
        description: 'Configure a property of type ip_ranges'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: Hello, user. I see your favorite IP ranges are (( .properties.example_ip_ranges.value )).

Example Product with IP Ranges

ldap_url

Ensures the inputted string matches a URL of the LDAP protocol, or a space-separated list of LDAP protocol URLs.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

value Returns a string or null.
value_present? Returns true if value is a non-empty string.

Example

property_blueprints:
  - name: example_ldap_url
    type: ldap_url
    configurable: true
    default: 'ldap://example.com'

form_types:
  - name: example_form
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_ldap_url
        label: Example ldap_url
        description: 'Configure a property of type ldap_url'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
  - name: login_banner
    release: os-conf
    manifest: |
      login_banner:
        text: Hello, user. I see your favorite LDAP URL is (( .properties.example_ldap_url.value )).

Example Product with LDAP URL

multi_select_options

This holds an array of selected string values. Must be an array of non-blank strings.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

value Returns an array of strings for the selected options or null.
value_present? Returns true if any of the checkboxes are checked.

Example

property_blueprints:
  - name: example_multi_select_options
    type: multi_select_options
    configurable: true
    default: ['earth', 'mercury']
    options:
    - name: mercury
      label: 'label for mercury'
    - name: venus
      label: 'label for venus'
    - name: earth
      label: 'label for earth'

form_types:
  - name: example_multi_select_options
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_multi_select_options
        label: Example Multi-Select Options
        description: 'Configure a property of type multi_select_options'

job_types:
  - name: example-job
    resource_label: An Example Job
    <<: *job_type_boilerplate
    templates:
    - name: modprobe
      release: os-conf
      manifest: |
        # the value at the 'modules' key will render as an array of strings
        modules: (( .properties.example_multi_select_options.value ))

Example Product with Multi-Select Options

network_address

This holds a string which is a hostname, domain name, or IP addresses.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

value Returns a string or null.
value_present? Returns true if value is a non-empty string.

Example

property_blueprints:
  - name: example_network_address
    type: network_address
    configurable: true
    default: 'localhost'

form_types:
  - name: example_network_address
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_network_address
        label: Example Network Address
        description: 'Configure a property of type network_address'

job_types:
  - name: example-job
    resource_label: An Example Job
    <<: *job_type_boilerplate
    templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: Hello, user. I see your favorite network address is (( .properties.example_network_address.value )).

Example Product with Network Address

network_address_list

This holds a string which is a comma-separated list of hostnames and IP addresses.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

parsed_network_addresses Returns the list of hostnames and IP addresses as an array of strings
value Returns a string which is a comma-separated list of hostnames and IP addresses or null.
value_present? Returns true if value is a non-empty string.

Example

property_blueprints:
  - name: example_network_address_list
    type: network_address_list
    configurable: true
    default: 'localhost,8.8.8.8'

form_types:
  - name: example_network_address_list
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_network_address_list
        label: Example Network Address List
        description: 'Configure a property of type network_address_list'

job_types:
  - name: example-job
    resource_label: An Example Job
    <<: *job_type_boilerplate
    templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: Hello, user. I see your favorite network addresses are (( .properties.example_network_address_list.value )).
          an_ignored_array_of_network_addresses: (( .properties.example_network_address_list.parsed_network_addresses ))

Example Product with Network Address List

port

This holds a single integer value. Allowed values are 0 through 65535 and null.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

value Returns an integer or null.
value_present? Returns true if value is not null.

Example

property_blueprints:
  - name: example_port
    type: port
    configurable: true
    default: 3000

form_types:
  - name: example_port
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_port
        label: Example Port
        description: 'Configure a property of type port'

job_types:
  - name: example-job
    resource_label: An Example Job
    <<: *job_type_boilerplate
    templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: Hello, user. I see your favorite network port is (( .properties.example_port.value )).

Example Product with Port

rsa_cert_credentials

This holds SSL certificate generated from root CA

credential yes
supports auto-generation yes
supports operator configuration yes

Property Blueprint Attributes

default For properties which use configurable: false, the default can specify a list of domain names to use when auto-generating the RSA certificate. The first domain listed will be the value of the Common Name field of the cert. The full list of domains will be the value of the Alternative Names field of the cert. See below for an example.

Note: This property does not work with a selector property when configurable: false is set. For more information, see Non-Configurable Certificates Are Invalid Within a Selector in the release notes.

Accessors

cert_pem Returns a string
private_key_pem Returns a string
cert_and_private_key_pems Returns a string
public_key_pem Returns a string
value_present? Returns true if value is an RSA certificate. Returns false if the value is null.

Example

property_blueprints:
  # This is configurable by the operator and appears in the form_types section
  - name: example_configurable_rsa_cert_credentials
    type: rsa_cert_credentials
    configurable: true
    optional: true
  # This is not configurable by the operator and is auto-generated
  - name: example_non_configurable_rsa_cert_credentials
    type: rsa_cert_credentials
    configurable: false
    default:
      domains:
        - 'cell.service.cf.internal'
        - '*cell.service.cf.internal'
form_types:
  - name: example_form
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_configurable_rsa_cert_credentials
        label: Example configurable rsa_cert_credentials
        description: 'Configure a property of type rsa_cert_credentials'

job_types:
  - name: example-job
    resource_label: An Example Job
    <<: *job_type_boilerplate
    templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: |
            Hello, user.
            Here is your public_key_pem
            (( .properties.example_non_configurable_rsa_cert_credentials.public_key_pem ))
            Here is your private_key_pem
            (( .properties.example_non_configurable_rsa_cert_credentials.private_key_pem ))
            Here is your cert_pem
            (( .properties.example_non_configurable_rsa_cert_credentials.cert_pem ))
            Here is your cert_and_private_key_pems
            (( .properties.example_non_configurable_rsa_cert_credentials.cert_and_private_key_pems ))

Example Product with RSA Cert Credentials

rsa_pkey_credentials

This holds RSA public and private keys. This is a non-configurable property.

credential yes
supports auto-generation yes
supports operator configuration no

Accessors

public_key_pem Returns a string
private_key_pem Returns a string
public_key_fingerprint Returns a string
public_key_openssh Returns a string
value_present? Returns true if value of the pkey already exists.

Example

property_blueprints:
  - name: example_rsa_pkey_credentials
    type: rsa_pkey_credentials
    configurable: false

job_types:
  - name: example-job
    resource_label: An Example Job
    <<: *job_type_boilerplate
    templates:
      - name: user_add
        release: os-conf
        manifest: |
          users:
            - name: nick
              public_key: ((.properties.example_rsa_pkey_credentials.public_key_pem))

salted_credentials

This holds credentials with salted and hashed passwords. This is a non-configurable property.

credential yes
supports auto-generation yes
supports operator configuration no

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

If specified, the default value must be an object which is allowed to have the key identity. For example, a default value could be:
default:
  - identity: ryan

Accessors

identity Returns a string
password Returns a string
salt Returns a string
sha512_hashed_password Returns a string
value_present? Returns true if value of the credential has been generated already

Example

property_blueprints:
  # Example without defaults
  - name: example_salted_credentials
    type: salted_credentials
  # Example with default identity
  - name: example_salted_credentials_with_default
    type: salted_credentials
    default:
      identity: vcap

job_types:
  - name: example-job
    resource_label: An Example Job
    <<: *job_type_boilerplate
    templates:
      - name: user_add
        release: os-conf
        manifest: |
          users:
            - name: vcap
              crypted_password: ((.properties.example_salted_credentials.sha512_hashed_password))

secret

This holds a single string value for a secret. Adding display_type: text_area to the property inputs creates a multi-line credential.

credential yes
supports auto-generation yes
supports operator configuration yes

Property Blueprint Attributes

constraints.must_match_regex A regular expression that the user input must match. Create a validator that runs on the form save event. If the user input does not match the must_match_regex constraint, the form displays the specified error_message. Multiple must_match_regex constraints for a single property blueprint are evaluated in the order listed. See below for an example.

Accessors

value Returns the secret as a string or null.
value_present? Returns true if value is a non-empty string.

Example

property_blueprints:
  - name: example_secret
    type: secret
    configurable: true
    constraints:
      - must_match_regex: '^[a-zA-Z]{20,}$'
        error_message: 'This password must be at least 20 alphabetic characters '

form_types:
  - name: example_secret
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_secret
        label: Example Secret
        description: 'Configure a property of type secret'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: Shh, today's secret is (( .properties.example_secret.value )).

Example Product with Secret

Example of a multi-line credential

form_types:
  - name: example_secret
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_secret
        label: Example Secret
        description: 'Configure a property of type secret'
        display_type: text_area

Example Product with Secret

selector

Provides the ability to switch between groups of properties. Shows in the UI as a radio button group, potentially with additional options nested under each radio button.

Selectors are unique in the way that property information is accessed. Ops Manager provides accessors available at the top-level selector property, accessors for retrieving a specific property in an option group, and the ability to provide manifest snippets for a selector option group.

Each selector group may provide manifest snippets. This is because Ops Manager does not support conditionally adding manifest snippets. A manifest snippet should be present within all option groups, and can be used to create a simple kind of branching logic in manifest generation. Only one of these sets is evaluated and inserted into the job’s manifest.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

If specified, the default value should be one of the values of select_value.
option_templates An array of objects which defines the options available. See example below.

Accessors

selected_option.parsed_manifest(manifest_snippet_name) Returns a parsed named manifest snippet for the currently selected option.
Example: .properties.example_selector.selected_option.parsed_manifest(my_snippet)
SPECIFIC_SELECTOR_OPTION_GROUP.OPTION_GROUP_PROPERTY.value Scopes the accessor to a specific selector option group.
Does not return meaningful information alone. Must be followed with the name and accessor of a specific property in the option group.
Example: .properties.example_selector.filet_mignon_option.review.value
value Returns the select_value of the selected option. For example, the selector shown in the example below might return “Filet Mignon” as its value.

Example

property_blueprints:
  - name: example_selector
    type: selector
    configurable: true
    default: Pizza
    freeze_on_deploy: true
    option_templates:
      - name: pizza_option
        select_value: Pizza
        named_manifests:
          - name: my_snippet
            manifest: |
              pizza_toppings:
                pepperoni: (( .properties.example_selector.pizza_option.pepperoni.value ))
                other: (( .properties.example_selector.pizza_option.other_toppings.value ))
        property_blueprints:
          - name: pepperoni
            type: boolean
            configurable: true
            freeze_on_deploy: true
          - name: other_toppings
            type: string
            configurable: true
            optional: true
      - name: filet_mignon_option
        select_value: Filet Mignon
        named_manifests:
          - name: my_snippet
            manifest: |
              rarity: (( .properties.example_selector.filet_mignon_option.rarity_dropdown.value ))
              review: (( .properties.example_selector.filet_mignon_option.review.value ))
        property_blueprints:
          - name: rarity_dropdown
            type: dropdown_select
            configurable: true
            default: rare
            options:
              - name: rare
                label: 'Rare'
              - name: medium
                label: 'Medium'
              - name: well-done
                label: 'Well done'
          - name: review
            type: string
            configurable: true
            default: A+ power seller of mail order steak
            optional: false

form_types:
  - name: example_selector_form
    label: 'Selector Example'
    description: 'A selector example form'
    property_inputs:
      - reference: .properties.example_selector
        label: 'Food Choices'
        selector_property_inputs:
          - reference: .properties.example_selector.pizza_option
            label: 'Pizza'
            property_inputs:
              - reference: .properties.example_selector.pizza_option.pepperoni
                label: 'Add Pepperoni'
                description: 'Yum!'
              - reference: .properties.example_selector.pizza_option.other_toppings
                label: 'Other toppings'
          - reference: .properties.example_selector.filet_mignon_option
            label: 'Filet Mignon'
            property_inputs:
              - reference: .properties.example_selector.filet_mignon_option.rarity_dropdown
                label: 'How rare?'
                description: 'Extinct.'
              - reference: .properties.example_selector.filet_mignon_option.review
                label: 'Write your review'
                description: '"E.g. Would not buy again"'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: |
            Would you like some (( .properties.example_selector.value ))?
            I'm asking because you mentioned (( .properties.example_selector.pizza_option.other_toppings.value ))
          more_manifest_ignored_by_os_conf: (( .properties.example_selector.selected_option.parsed_manifest(my_snippet) ))

Example Product with a Selector

service_network_az_multi_select

This holds an arrays of string value selected from allowed availability zones (AZs).

credential no
supports auto-generation no
supports operator configuration yes

Accessors

value Returns an array of strings for the selected options.
value_present? Returns true if value is set.

Example

service_broker: true

property_blueprints:
  - name: service_instance_azs
    type: service_network_az_multi_select
    configurable: true
    optional: false

form_types:
  - name: example_service_network_az_multi_select
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.service_instance_azs
        label: Example Service Network AZ Multi-Select
        description: 'Configure a property of type service_network_az_multi_select'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: "Hello, user. Here is an array of AZ names: (( .properties.service_instance_azs.value ))"

Example Product with Service Network AZ Multi-Select

service_network_az_single_select

This holds a single string value selected from allowed azs. Appears as a radio button group in the UI.

credential no
supports auto-generation no
supports operator configuration yes

Accessors

value Returns a string or null.
value_present? Returns true if value is a non-empty string

Example

service_broker: true

property_blueprints:
  - name: example_service_network_az_single_select
    type: service_network_az_single_select
    configurable: true
    optional: false

form_types:
  - name: example_service_network_az_single_select
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_service_network_az_single_select
        label: Example Service Network AZ Single-Select
        description: 'Configure a property of type service_network_az_single_select'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: "Hello, user. Here is a single AZ name: (( .properties.example_service_network_az_single_select.value ))"

Example Product with Service Network AZ Single-Select

simple_credentials

This holds an identity and password.

credential yes
supports auto-generation yes
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

If specified, the default value must be an object which is allowed to have the key identity. For example, a default value could be:
default:
  - identity: ryan

Accessors

identity Returns a string
password Returns a string
value_present? Returns true if value is a non-empty string.

Example

property_blueprints:
  - name: example_configurable_simple_credentials
    type: simple_credentials
    configurable: true
  - name: example_non_configurable_simple_credentials
    type: simple_credentials
    configurable: false
    default:
      identity: vcap
form_types:
  - name: example_form
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_configurable_simple_credentials
        label: Example configurable simple_credentials
        description: 'Configure a property of type simple_credentials'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: |
            Shh, today's secret password is (( .properties.example_non_configurable_simple_credentials.password ))
            And the username is (( .properties.example_non_configurable_simple_credentials.identity ))

Example Product with Simple Credentials

smtp_authentication

This holds string with a possible value of plain, login, or cram_md5.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

value Returns a string with possible value of plain, login, cram_md5.
value_present? Returns true if value is a non-empty string.

Example

property_blueprints:
  - name: example_smtp_authentication
    type: smtp_authentication
    configurable: true
    default: plain

form_types:
  - name: example_text
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_smtp_authentication
        label: Example SMTP Authentication
        description: 'Configure a property of type smtp_authentication'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: Hello. The SMTP auth type is (( .properties.example_smtp_authentication.value ))

Example Product with SMTP Authentication

stemcell_selector

Provides the ability to select between all available stemcell criteria. The stemcell selector is automatically populated with a list of all stemcell operating systems that are listed in the stemcell_criteria and additional_stemcells_criteria top-level properties.

After an operator has selected a stemcell listed in stemcell_selector, that stemcell is required to deploy the product.

For more information about the stemcell_criteria top-level property, see stemcell_criteria above.

For more information about the additional_stemcells_criteria top-level property, see additional_stemcells_criteria above.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

If specified, the default value should be the operating system of a stemcell criteria.

Accessors

os The operating system of the stemcell that is assigned to the product. This is not always the same as value. If a stemcell is selected but not assigned, this is set to nil.
version The version of the stemcell that is assigned to the product. If a stemcell is selected but not assigned, this is set to nil.
assigned? Boolean. Returns true if there is an assigned stemcell that matches the selected stemcell.
value Returns the selected operating system.
value_present? Returns true if the operator has selected an operating system.

Example

stemcell_criteria:
  os: ubuntu-xenial
  version: 1.0.0
additional_stemcells_criteria:
  os: windows2016
  version: 1.0.0

property_blueprints:
  - name: example_stemcell_selector
    type: stemcell_selector
    configurable: true
    optional: true
form_types:
  - name: example_stemcell_selector_form
    label: 'Stemcell Selector Example'
    description: 'A stemcell selector example form'
    property_inputs:
      - reference: .properties.example_stemcell_selector
        label: 'Example stemcell selector'
        description: 'Select which stemcell you want to use'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: |
            Stemcell Assigned?: (( .properties.example_stemcell_selector.assigned? ))
            Assigned stemcell OS: (( .properties.example_stemcell_selector.os ))
            Assigned stemcell version: (( .properties.example_stemcell_selector.version ))
            Selected stemcell?: (( .properties.example_stemcell_selector.value_present? ))
            Selected stemcell OS: (( .properties.example_stemcell_selector.value ))

Example Stemcell Selector

string_list

This holds an array of strings.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

parsed_strings Returns an array of strings for each string entry
parsed_regex Returns a string containing a regex of the format ^(string1|string2|string3)$ where the value of this property is string1,string2,string3
value Returns a string or null.
value_present? Returns true if value is a non-empty string.

Example

property_blueprints:
  - name: example_string_list
    type: string_list
    configurable: true
    default: foo,bar,baz

form_types:
  - name: example_string_list
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_string_list
        label: Example String List
        description: 'Configure a property of type string_list'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: Hello. Your array of strings is (( .properties.example_string_list.value ))

Example Product with String List

string

This holds a single string value.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

constraints.must_match_regex A regular expression that the user input must match. Create a validator that runs on the form save event. If the user input does not match the must_match_regex constraint, the form displays the specified error_message. Multiple must_match_regex constraints for a single property blueprint are evaluated in the order listed. See below for an example.
constraints.must_be_cron_schedule Creates a validator that ensures the value of the string satisfies a cron schedule expression. If the user input is not a valid cron schedule expression, the form displays the specified error_message. See below for an example.

Accessors

value Returns the string value or null.
value_present? Returns true only if the value is a non-empty string.

Example

property_blueprints:
  - name: example_string
    type: string
    configurable: true
    default: 'Karl'
    constraints:
    - must_match_regex: 'A[^!@#$%^&*()]*z'
      error_message: 'This name cannot contain special characters.'
    - must_match_regex: 'A[^0-9]*z'
      error_message: 'This name cannot contain digits.'
    - must_be_cron_schedule: true
      error_message: 'This must be a valid cron schedule expression.'

form_types:
  - name: example_form
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_string
        label: 'Example string'
        description: 'This is an example'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: Hello, (( .properties.example_string.value ))! Welcome.

Example Product with String Information

text

This holds a string value. For configurable properties of this type, the UI allows multi-line strings to be entered.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

value Returns a string or null.
value_present? Returns true if value is a non-empty string.

Example

property_blueprints:
  - name: example_text
    type: text
    configurable: true
    default: |
      Example
      Text

form_types:
  - name: example_text
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_text
        label: Example Text
        description: 'Configure a property of type text'

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: |
            Hello. Check out all this text!
            (( .properties.example_text.value ))

Example Product with Text

uuid

This holds a string uuid value.

credential no
supports auto-generation yes
supports operator configuration no

Accessors

value Returns a string or null.
value_present? Returns true if value is a non-empty string.

Example

property_blueprints:
  - name: example_uuid
    type: uuid
    configurable: false

job_types:
- name: example-job
  resource_label: An Example Job
  <<: *job_type_boilerplate
  templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: Hello. Your UUID is (( .properties.example_uuid.value ))

vm_type_dropdown

This holds single string value selected from allowed vm_types.

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

resource_definitions Optional. An array of objects with the same schema as resource_definitions for job_types. For vm_type_dropdown, resource_definitions can have elements with name “ram”, “cpu”, or “ephemeral_disk”. This element can also specify a default which OpsManager uses as a minimum bound when it selects a default value. It can also specify constraints, which can be any set of constraints that can be specified for an integer property. For examples of supported constraint types, see integer above.

Accessors

value Returns a string which is the name of the selected VM type.
value_present? Returns true if value is a non-empty string.

Example

property_blueprints:
  - name: example_vm_type_dropdown
    type: vm_type_dropdown
    configurable: true
    resource_definitions:
    - name: ram
      default: 4096
    - name: cpu
      default: 1
    - name: ephemeral_disk
      default: 4096
      constraints:
        min: 2048

form_types:
  - name: example_vm_type_dropdown
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_vm_type_dropdown
        label: Example VM Type Dropdown
        description: 'Configure a property of type vm_type_dropdown'

job_types:
  - name: example-job
    resource_label: An Example Job
    <<: *job_type_boilerplate
    templates:
      - name: login_banner
        release: os-conf
        manifest: |
          login_banner:
            text: Hello. Your chosen VM Type is (( .properties.example_vm_type_dropdown.value )).

Example Product with VM Types Dropdown

wildcard_domain

Ensures the string value is a domain prefixed with *..

credential no
supports auto-generation no
supports operator configuration yes

Property Blueprint Attributes

default Optional. Specifies a default value. When provided, must be set to a value which is valid for this type. Cannot be used when the property also has optional: true.

Accessors

to_wildcard Returns a string of the value prefixed with *. if not present
value Returns a string or null.
value_present? Returns true if value is a non-empty string.

Example

property_blueprints:
  - name: example_wildcard_domain
    type: wildcard_domain
    configurable: true
    default: 'example.com'

form_types:
  - name: example_form
    label: 'Example form'
    description: 'An example form'
    property_inputs:
      - reference: .properties.example_wildcard_domain
        label: Example Wildcard Domain
        description: 'Configure a property of type wildcard_domain'

job_types:
  - name: example-job
    resource_label: An Example Job
    <<: *job_type_boilerplate
    templates:
    - name: login_banner
      release: os-conf
      manifest: |
        login_banner:
          text: Hello. Your wildcard domain is (( .properties.example_wildcard_domain.value )).

Example Product with Wildcard Domain

Use the Examples Provided

You can copy each example into the metadata.yml template below and package it together along with the os-conf release as a .pivotal file to make a working tile.

---
name: p-example
label: Example Tile
description: An example tile
product_version: '1.1'
minimum_version_for_upgrade: '1.0'
metadata_version: '2.2'
rank: 1
 stemcell_criteria:
  os: ubuntu-xenial
  version: '97.3'
 releases:
  - name: os-conf
    file: os-conf
    version: '15'
 # a base 64 encoded PNG with a teal square
icon_image: iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVQI12NgaC8BAAGGAPwUz8ygAAAAAElFTkSuQmCC

 includes: # This top-level key is ignored by Ops Manager.
  # This anchor is only to make the examples below more terse and is not required.
  job_type_boilerplate: &job_type_boilerplate
    max_in_flight: 1
    single_az_only: true
    resource_definitions:
      - name: ram
        configurable: true
        default: 1024
       - name: ephemeral_disk
         configurable: true
         default: 1024
       - name: persistent_disk
         configurable: true
         default: 1024
         constraints:
           min: 1024
       - name: cpu
         configurable: true
         default: 1
     instance_definition:
      name: instances
      configurable: true
      default: 1