A Unified UI

Adjusting the mindset

  • Increased focus on maintenance
  • Lets decouple our users' duties:
    • BAU maintenance
    • Development
    • Business reporting
    • System configuration
    • (Consumer: Self-service portal)

A new mental model and structure

With support for "domains"

Overview

  • Focus on "looking after computing resources"
    • Done by exposing via a hierarchy
    • "Devops best practices, in a box"
  • Development activities via templates for provisioning, drift, and complex actions
  • BAU activities via actions and template updates
  • Drift activities via selectable entity comparisons, snapshots within hosts, and top level reports

The hierarchy

Environment

Asset

Provider

Host

Uses

Influences

Facilitate a bottom up view for assets and hosts.

Informational

"Semantic"

"Physical"

The look and feel is not a focus of the wireframes (read: they look bad, I know)

Visual overview

Template definition updates are done offline

Clone or download template. Downloaded tarball/zip contains a working directory with .git/:

 {{template_name}}/
       .git/...
       metadata.yml
       properties.yml
       actions.yml
       composition.yml
       transforms.yml
       compliance.yml
       testing.yml
       states.yml
       definition/ -- (chef) stuff

Equivalent of running `mintpress-cli init-template`.

Action

Instance card

Scripting actions

Assets, bottom up

Environment actions for flexibility, and complex (assets)

Update config: SSL certificates

Apply to env to roll out

Apply to env to roll out: manual

Edit config

Rollout can be done piecemeal

Deploying a change

(First time steps)

Offline dev flow

  • git clone ...
  • vim ...
  • mintpress-cli test ...
  • git commit ...
  • git tag ...
  • git push ...

Make the OS Release a prop

- <<: *instances
- key: os_release
  label: RHEL release
  default: 7.0
  build_property: true
  attribute:
    type: number
    min: 5
    max: 7
    step: 0.1
    required: true
# git add properties.yml
# git commit -m 'Add os_release prop.'
# git tag v1.2 # optional -m
# git push
> Changes verified.
> OSI template v1.2 now available in non-production environments.
  Access https://mintpress.../templates/osi to alter this template's availability.
> 4 assets could be updated to this release.
  Run `./mintpress-cli apply osi:v1.2 all --canary [--no-confirm]` to apply this
  version to all available instances.
# git clone https://.../osi.git && cd osi
# vim properties.yml

Types of change

  • Patch version
  • New config option
  • Implementation updates

Add asset

Add Env

Configure env

Transforms

Creating a new transform

Transforms are part of the template

# Override a common property scaleout with a default value of 3 (instead of the usual value)
- <<: *scaleout
  overrides:
    input:
      - key: *scaleout_count_key
        default: 3
- key: path_prefix
  label: Install path prefix
  type: javascript
  target: !!js/function |-
    function getInstallationList(json) {
      return json.installationList
    }
  implementation: !!js/function |-
    function setName(inJson) {
      var prefix = input['prefix'].endsWith('/') ? inputs['prefix'] : (inputs['prefix'] + '/')
      for(var inst in inJson) {
        inst.installPath = prefix + inst.installPath
      }
    }
  input:
    - key: prefix
      label: Prefix
      default: ''
      attribute:
        type: string
        maxlength: 10
        required: true
# git ...
# git clone https://.../osi.git && cd osi
# vim transforms.yml

mintpress-cli to facilitate dev and testing

function getMulti(json) {
 // builtin functions:
 //   - walk: traverse every node
 //   - onMatch: indicate match to process
 walk(json, function(n) {
   if(new RegExp('x', 'i').test(n.name)) {
     onMatch(n)
   }
 })
}
{
 "name": "x",
 "product": "x"
 "installPath": "/opt"
}
---
{
 "name": "x",
 "product": "y",
 "installPath": "/var"
}
{
 "toInstall": [
  {
    "name": "x",
    "product": "x"
    "installPath": "/opt"
  },
  {
    "name": "x",
    "product": "y",
    "installPath": "/var"
  }
]
function setMulti(json) {
  json.name = json.name.toUpperCase()
}
{
  "name": "X",
  "product": "x"
  "installPath": "/opt"
}
---
{
  "name": "X",
  "product": "y",
  "installPath": "/var"
}
{
  "name": "x",
  "product": "x"
  "installPath": "/opt"
}
---
{
  "name": "x",
  "product": "y",
  "installPath": "/var"
}

Bikeshed example

Create template

Making definition updates is done offline

Clone or download template. Downloaded tarball/zip contains a working directory with .git/:

 {{template_name}}/
       .git/...
       metadata.yml
       properties.yml
       actions.yml
       composition.yml
       transforms.yml
       compliance.yml
       testing.yml
       states.yml
       definition/ -- (chef) stuff

Equivalent of running `mintpress-cli init`.

yum upgrade

yum upgrade, host stylz

yum upgrade, config

Providers and friends

Home >> Provider: Prod >> awsosi1

System config

BAU configuration

  • Precedence
    • Global
    • Environment
    • Provider
    • Instance/build

mintpress-cli

./mintpress-cli
  console

  create-asset-template
  add-{transform,property,action,transform,compliance}
  remove-{transform,property,action,transform,compliance}
  build-transform
  update-version

  create-action-definition

  create-drift-report-definition

  create-provider-definition

  add-asset
  do-asset
  do-asset-hosts

  apply

Random...

  • mintpress-cli tool
  • Consumer-only launch interface
  • DIY dashboarding
  • TOML vs YAML (vs something else?)
  • Templates: Git GUI/Git endpoint for direct interactions with files and templates
  • Plugins
    • Slack integration for quick commands
  • Only support LDAP, but bundle a simple LDAP server
  • CD pipeline by integrating test suite into templates
  • Storage for arbitrary (job-related) data
  • Bundle Boulder as a CA for internal cert generation (with a mind to facilitating LetsEncrypt for external)

TODO

  • Scheduling actions - actions page
  • (Treating properties as groups)
  • Version number formats...
    • Workflow config?
  • Testing status as labels
    • Testing/rollout checklist
  • `mintpress-cli test` - sandbox testing
  • Custom upload hooks
  •  

deck

By bruce_one

deck

  • 47