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) stuffEquivalent 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.ymlmintpress-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) stuffEquivalent 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
applyRandom...
- 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