Pantheon (Terminus) Terminus is Pantheon’s command line tool. It enables you to do almost everything in a terminal that you can do in the Dashboard, and much more. Before the Ages: c. Beginning of Time -1000 IH: Establishment of the Air and Sea Dragon Kingdoms, named respectively the Rhy'Vulrene and the Sol'Kromane c. 1000 IH: Usurpation of the Dragon Kingdoms and crowning of Rok'Nhilthamos as King of Dragons following the slaying of the leader of the Sol'Kromane (Sea Dragons) and Rok'Tsolfyensire. Terminus: A Rapid Introduction to Pantheon's Command Line Interface If you need to manage several sites throughout the day, read on to learn how to use an open-source solution that only requires. I like Terminus. It makes sense for what the world is in lore - a convergence of universes. A terminus is a final point, and Pantheon's Terminus is a final point/destination for the various worlds that compose it. That's actually one of the reasons I dislike it, personally. It's way too 'on the nose.'
In the previous post we looked into Pantheon hosting and how we can use it to easily create a suite of similar websites without having to build them individually each time. Often the requirement isn’t only easily creating new sites, but having to maintain them easily as well. When you have dozens or hundreds of websites that need changes applied to them, managing each one individually through Pantheon’s dashboard becomes a bottleneck. Fortunately Pantheon offers a command line interface that allows developers to automate much of that maintenance. In this post we’ll take a look at using Terminus to manage our sites.
Pantheon: Rise of the Fallen takes place on the high fantasy world of Terminus, a wildly diverse planet formed from fragments of many different realms that were forced together by massive planar collisions, each bringing their own unique civilizations and deities.
Understanding Pantheon’s Framework
Before we can start rolling out features to multiple sites, it is helpful to understand how Pantheon groups the websites it hosts. Websites can be first grouped into an Organization. Within that, they can be tagged in any manner that makes sense for your needs. Both the organization and the tags can be used to filter sites into more targeted groups.
Each site then gets three environments; dev
, test
, and live
are their machine names. Those machine names are important, as we’ll need to know which environment we’re targeting when we do our deployments. A single site also gets a machine name, like my-awesome-site
. The combination of site name and environment name create a single instance identifier, which we use in our Terminus commands. For example, to clear Drupal’s cache on a live environment we’d run:
[geshifilter-]terminus remote:drush my-awesome-site.live -- cache-rebuild[/geshifilter-] Huawei mobile doctor software, free download.
Doc Terminus
A deployment on Pantheon has to follow a specific process, whether done via the dashboard or through Terminus. First, code must be deployed to the dev
environment. Normally this is done with Git by pushing new code into the master
branch on Pantheon’s repo. For features we’re deploying to multiple sites, the code must be pushed to the Upstream and then pulled from there. In the dashboard, this takes the form of a button that appears to alert you to new changes. In Terminus, you’d run the following command. Note, the --updatedb
flag ensures any Drupal database updates get run as well.
[geshifilter-]terminus upstream:updates:apply my-awesome-site.dev --updatedb[/geshifilter-]
Second, we have to move those updates to testing and then to production. Again, the dashboard provides a button on those environments when there are updates that can be made to them. In Terminus, this is done with:
[geshifilter-]terminus env:deploy my-awesome-site.test --updatedb --cc --note=”Deployed new feature.”[/geshifilter-]
As before --updatedb
runs the database updates, --cc
rebuilds Drupal’s cache, and --note
is the description of the updates that gets added to the Pantheon dashboard.
There are many other actions you can handle with Terminus. Their documentation covers the full list. However, out of the box Terminus has the same limitation that the dashboard has. You can only run a command on one site at a time. Thankfully, Terminus has additional plugins that solve this problem for us.
New Commands with Terminus Plugins
Terminus is built on PHP and managed with Composer. This allows for new commands to be built and distributed on Pantheon’s Terminus Plugin Library. We’ll need to install two plugins to run Terminus commands on multiple sites at once: Terminus Mass Update and Terminus Mass Run. Mass Update is created by Pantheon and runs the upstream:updates:apply
command on a list of sites that get piped into it. Mass Run builds on that idea, by using the same piping logic and implements it onto more commands. With it you can run Drush commands, create site backups, and deploy code among other things.
To get the list of sites, we’ll use the org:site:list
command. We could also use site:list
, however since Custom Upstreams are an Organization level feature we’ll more than likely want to filter by Organization; org:site:list
takes the name of the organization we want to filter by. To get a list of the Organizations you have access to, run terminus org:list
. This returns both the machine name and the ID number of the Organizations, either will work for org:site:list
.
Running terminus org:site:list aten
will return a table of all sites in Aten’s Organization account. However, we still might only want a subset of those sites. This is where tagging comes in. Adding the --tag
flag to our command lets us get only sites we’ve tagged with whatever is passed in. To see all sites tagged with “US” our command becomes terminus org:site:list aten --tag=US
. This gets us closer, however it still returns a table of all site information. We only need the site ID numbers as a list for our Mass Run and Mass Update commands. To get this list we’ll add --format=list
to our command, making the entire thing:
[geshifilter-]terminus org:site:list aten --tag=US --format=list[/geshifilter-]
Now that we have a list of the site IDs we want to update, all we need to do is pipe that list into our plugin commands. To deploy a new feature from our upstream, we’d run:
[geshifilter-]terminus org:site:list aten --tag=US --format=list | terminus site:mass-update:apply --updatedb[/geshifilter-]
Moving that feature through Pantheon’s environments is:
Pantheon Terminus Install
[geshifilter-]terminus org:site:list aten --tag=US --format=list | terminus env:mass:deploy --sync-content --cc --updatedb --env=test --note='Updated Drupal Core.'[/geshifilter-]
Removing a user from all sites they exist on becomes:
[geshifilter-]terminus org:site:list aten --tag=US --format=list | terminus remote:mass:drush --env=live -- ucan bad-user[/geshifilter-]
Long Commands, Amazing Results
At this point you’ve probably noticed the commands we’re using have become very verbose. This is one downside of this approach: the commands themselves are not intuitive at first glance. For common tasks creating aliases can help simplify this. Leveraging the terminal’s history to bring up past commands and then modifying them speeds up more one-off tasks. But the ability to manage our websites en masse becomes a huge time saver over clicking our way through the dashboard for dozens of sites.
History of Terminus[edit | edit source]
There has never been nothing.
When the thorns of Terminus press against your skin, it may not seem useful to remember the past. As you look the rose of this world in the eye, a natural beauty crowned in the splendor of her many peoples, you may think that only the blind could deny this all had a beginning. Beneath the innumerable hands of deities and pantheons, it may seem only a faithless fool should doubt such a plain thing, and with the splinters of other worlds grafted over the skin of this one, springing back to life as of old.. to argue against realms beyond may sound as astute as claiming the death of the Sun after its rays retreat for night.
But I saw a dreadful power spread its wings over the cosmos, and it pierced my faith in the past. I stared into the eyeless face of an eclipse as it bore down upon my world, crowned in the dust of those it had already turned to nothing. I have felt the hands of my pantheon torn in two, witnessed that cosmic power grip the very god I worshipped with indifference, withering him to a dead husk. The ground beneath my feet splintered as my own planet's invincible beauty was crushed by an unseen hand, only a fragment of my people spared. I was blind with fear, I called the Sun dead. I believed in nothing.
Yet nothing did not claim me. This world is filled with those it did not claim, preserved by an unseen hand, perhaps at great risk. Though I have no evidence of it, there is a war waged beyond our gods for many things, and this world is one of them. To these higher sovereignties we gave our nothing, and they have given us Terminus. Though lain in a bed of thorns, this world is a cradle of infant hope for we old orphans. This is our wild, delicate cosmos now. This is our undeserved inheritance, our humble crown. And we must exhaust ourselves knowing and discovering it, lose ourselves defending it from within.
For there has never been nothing. Nor will there ever be.
- From 'The Confession of Semina', Last of the Ginto
~|~
It is fitting the Last of the Ginto race introduce the unprecedented events brought about by the collapse of their pantheon, the tragically named 'Infinite Union'. Semina, High Priest of the Infinite Union, never wavered in his clarity of what transpired, nor misconstrued the truth that the most destructive force to ever stretch across Terminus descended from one of his own gods. This is a credit to his humble character, and many who shall never know it are indebted to the pained honesty of this departed servant, the last member of a people transfigured by mercy and sacrifice.The shorthand of this vast account would say that amidst the Age of Chaos, a force known as the Revenant rose like a flooding tide across Terminus. Led by the Ravaging Lord, the Revenant host sought to exterminate the six races who were brought to the planet by a means still unknown, a power which outranks every god or even pantheon a sleepy zoo of historians could name. Doomed to defeat, the Sacred Six races embraced a prophecy that warned them to but endure the many perils and the darkness would be crushed. To this end the Six constructed three monolithic refuges called Sanctums, barricading their hopes and races within.In the face of certain annihilation, aid of divine proportion did arrive. By an act fraught with consequence, six mythical beings altered the fate and upended the fears of all creation on Terminus. Yet as these heroic warriors stepped away from the glory of their triumph, the six cast a giant shadow behind, and the inhabitants of Terminus were left with a riddle which may have no answer… Where go our gods?But who thirsty comes for a little drink? Newest version of edge chromium. Thus, I submit a compilation much longer in the telling..
~|~
Before the Ages[edit | edit source]
Terminus has not always been Terminus, at least by name. For most of its existence, this world went by the name of Nhystyrrok and was ruled by an order of Dragonkind known as the Reignborn. At the time prior to the arrival of the 'Sacred Six' races, the Reignborn and all Dragonkind submitted to the one Dragon King, Rok'Nhilthamos. (It is important to note that the term 'Sacred Six' speaks to more than simply six races. Yet so formative were the events centered around the nations chiefly targeted by the Revenant -- six, all told -- that the term became a common title to address the group of new arrivals, in any sum. There are certainly more than that number, now even twice or thrice as many, with perhaps more yet to come.)
Rok'Nhilthamos was, or rather 'is', a beast of such mythic size and strength that he was finally able to lead the Dragons of Air, named the Rhy'Vulrene, to utterly defeat their rivals beneath the sea, the Sol'Kromane. Yet in the wake of this unprecedented victory, the then Dragon King Rok'Tsolfyensire mourned the death of his brother and ruler of the Sol'Kromane, rather than immediately moving to name his son as heir. The son was enraged at both the dishonoring slight of his father, as well his empathy for the foe he had so narrowly defeated. The memory of his dead companions boiled over in Rok'Nhilthamos, and in a terrifying moment he usurped his ancient father and killed him. In the span of one day, both ageless leaders of Dragonkind were violently deposed on land and sea. Thus began the reign of Rok'Nhilthamos, thousands of years before the arrival of the Sacred Six.
Why is still a mystery, but some time shortly before the First Era of Collisions (as they are oft called, though few were especially violent), the Reignborn left their lands of sovereignty, or at least appeared to. In turn, all of Dragonkind similarly deferred their territories, roosts and dwellings, down even to the common spawn. This is verified by credible native peoples such as the Tholen of Itholis and the Elvonnen Giants of what is now Kingsreach. The Tholen began a new calendar to correspond with this strange new behavior, the Ithosbrun Hjilen, abbreviated as “IH”.It is certain they have not left the planet entirely, however. In fact, a persistent, fanatically believed myth is that the dragons will reap a great reward one day, far in the future. (The Sect of Peryth is one such cult of dragon seekers, whose entire devotion is bent on finding and serving the absconded beasts so they may one day share in the endless, heavenly fortune). Ask when the alleged date will arrive and the myth finds no shelter in things actually known. Yet it has abided for centuries, and is at least remarked on by the Tholen.
There is a more credible legend that centers around the time shortly before the First Collisions. It speaks to some manner of deep, mystical agreement that was struck by Rok'Nhilthamos and another power of unknown origin. As part of that agreement, Aevozul was rechristened Terminus. As significant as it is poorly understood, the fairest treatment of this agreement, henceforth called ‘The Dragon Accord’, can be found in the letters between the Human Narian Castigue and the Elf Kaolyen Greyborne. Alas, only the three letters appear to have survived to this day, though there is reason to hope more shall surface.When the Dwarves of Oldassa first arrived in the year of 7 IH, the last of Dragonkind withdrew to peculiar obscurity, most often to places of extreme difficulty for mortals to reach, often it seems to enter a “dead hibernation” for centuries at a time. (Yes, these dragons take very long naps). After the Dwarves there came the Elves, of S’iolaen in 9 IH, then thirdly the Ogres of Ghorrok in 12 IH. While the Dwarves did hold annual meetings with the Elves, the trio of nations kept mostly to themselves. In fact, after the Ogres lost their expansion-obsessed ruler Rothuk the Black Moon King to something like madness in 23 IH, the Age of Seclusion was officially begun.