Background: I come from a world of Linux and Windows with a very small amount of UNIX experience. My current position, I am an IT Army of one. So, I need solutions that make it easy to do the most common tasks.
I have been looking into container hosts and I keep trying to come back to SmartOS, but it has such a steep learning curve. There is so much you have to know about the systems functions to even get started. Complex API syntax, json embedded in CLI commands, seemingly arbitrary command separation, etc. When I get discouraged by it, I start looking at things like CoreOS or just running Docker/LX/KVM on an Ubuntu server because it doesn't require me to understand deep system operations to make anything happen. A few how-tos later and I can be deploying containers and guests.
Just to deploy a image, you have to use a UUID. Completely unfriendly to mere IT mortals and people who have no clue how to even lookup the UUID. I get that there is a reason for the UUID, but that doesn't mean you have to use it as the primary interaction. Docker uses owner/image names. LDAP (specifically AD) has a UUID but also a CN that is unique and friendly.
Take this example from the private cloud post-install doc:
echo '{"metadata": {"IMGAPI_ALLOW_LOCAL_CREATE_IMAGE_FROM_VM": true}}' | sapiadm update $(sdc-sapi /services?name=imgapi | json -H 0.uuid)
Put yourself in the shoes of someone completely new to SDC/SmartOS and think of all of the things you would have to learn about the system to build that command on your own. How would you get from zero to that command on your own?
Another example, creating a basic firewall rule: https://docs.joyent.com/public-cloud/network/firewall
Turn on the firewall:
sdc-enablemachinefirewall 98338d48-d2a7-4e17-bbc7-b44054b04503
Random command that isn't in the sdcadm command for an unknown reason to the new users and UUID.
To check the status:
sdc-getmachine 98338d48-d2a7-4e17-bbc7-b44054b04503 | json firewall_enabled
Different command, UUID and you have know the specific json attribute.
Huge learning curve just to digest what is going on.
I don't know what the best solution is, but as someone who doesn't know SmartOS and doesn't have the time to dedicate to learning the ins and outs of the system just to get started, there has to be something better. My one idea, arguably blue skies and has some issues, would be to look at how networking equipment is configured. A single file to configure the entire system. A series of "set" commands (JunOS/VyOS/EOS/etc.) to build up the configuration. In the case of VyOS/EdgeOS, these are just huge wrappers around the entire OS. They abstract away the configuring of the individual files and services. The CLI shell includes things like tab-completion and contextual help to guide you towards your goal. "What command is next? oh, I need foo." With just a single set command, I can bring up and interface and configure an IP and assign it to a VLAN.
set interfaces ethernet eth0 vif 100 address 10.0.1.1/24;commit;save;
Reading the resulting configuration is very intuitive. I don't have to figure out where the configuration file is or know the syntax. The CLI prevents me from messing it up by validating the input.
show interfaces ethernet eth0
vif 20 {
address 10.0.1.1/24
}
mtu 1500
}
** This is just a simple example to show how easy it can be. It doesn't necessarily translate well to this RFE.
I think SmartOS and SDC could benefit a lot from this model of configuration. Take the CoaL-setup doc for example. https://github.com/joyent/sdc/blob/master/docs/developer-guide/coal-setup.md
Why does there need to be 8 commands to just update the system. If all of those are the typical workflow, make it one command "sdcadm full-system-update" and the prompt me to reboot when you are done.
Why are there post-install steps at all? Shouldn't the system just do that stuff and prompt for input when needed? The assumption is, most of that process are things that are done by everyone anyway, why make the admin wade through extra commands to complete the common workflow?
I am not necessarily suggesting removing all of the underlying pieces or things that give it a robustness, just remove the complexity from getting started and the day-to-day administration. Come up with a "default" model, set the install process to build to it and be done. Anyone who knows that the defaults don't meet their requirements aren't the ones targeted by this. Make it easy to configure the system in the most common use cases.
Apologies for the rambling. I really really want to use SmartOS/SDC, which in my opinion is the best overall solution/architecture, but damn it is so hard to just use.