Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Instruqt enables you to create engaging hands-on learning experiences with your product. Using our cloud sandboxes, you can create real-world scenarios for product demos, tutorials, and workshops.
Learners interact with your product alongside terminals, code editors, and more - all from a browser.
Embed Instruqt into your existing sites, such as an LMS, for a seamless learning experience.
Monitor learner progress as they progress through your content with in-depth analytics.
Instruqt sandboxes can contain any of the cloud infrastructure you need to make your product shine.
Want to see the end user experience?
In the previous section you made the first changes to the lab, in this section you will start adding instructions to the lab. Instructions are what guide the end-user through the lab.
Instructions consist of chapters and pages that the end-user goes through to complete the lab.
This outline of chapters and pages is defined on the lab
resource, which makes it easy to move pages and chapters around by changing their order.
Lets start by adding the content
block to the lab
resource. This block holds the outline of the lab and will dictate the structure of the instructions.
Inside of the content
block, you can add a chapter
block for each chapter that your instructions contain.
The order the chapter
blocks are defined in, directly determines the order the chapters are displayed in within the instructions and how progression is determined within the lab.
Each chapter has a label that defines the slug of the chapter, used when navigating between chapters.
Define a new chapter in the content
block and name the slug "introduction", and set the title to "Introduction".
page
to your labEach chapter can contain any number of pages. These are defined by adding a page
block to the chapter
block you want to nest the page under.
The page
block also has a slug label, just like the chapter, used when navigating between pages.
Define a new page in the "introduction" chapter and name the slug "first_page".
page
resourceThe page
block only defines the page inside the outline of the instructions.
To configure the actual contents of the page, we need to create a page
resource that can be referenced inside of the page
block.
This makes it possible to reuse pages between labs, when bundling them into reusable "modules".
At a minimum, a page
resource needs a file
field that specifies where to find the markdown file that contains the contents of the page.
The path specified in the file
field is either an absolute path, or relative to the file the page
resource itself is defined in.
Create a new file in the root of the lab directory and name it pages.hcl
.
Inside of the pages.hcl
file, define a page
resource and give it a name of "first".
Because the instructions
directory is located next to the pages.hcl
file the page is defined in, we can use a relative path in the file
field e.g. "instructions/first.md".
markdown
contentNow that we have defined the page
resource, we need to create the markdown file "instructions/first.md" that will contain the actual contents of the page.
Create a new file in the "instructions" directory and name it the same as defined on the page
resource e.g. first.md
, and add markdown content to the file.
If the markdown content of the page contains an H1 heading (e.g. # Heading
) at the top of the file, this will be used as the fallback value for the title of the page. This value can be overridden with the title
field of the page
block on the lab.
Now that you have defined the page
resource, we can reference it in the reference
field of the page
block.
Update the page
block on the chapter and add the reference
field to it.
A reference to the page
resource, resource.page.first
, works in the same way as you defined the reference to the layout
resource in the previous section of this guide.
The instructions are now configured on the lab, but they are not visible yet to the end user.
To display the instructions, you need to assign the instructions
tab to a panel on a layout of the lab.
Since the layout currently has a single panel defined, lets add the instructions to that panel by adding an instructions
block to the "single_column" layout
block of the lab
resource.
Inside the instructions
block, we need to assign it to a panel inside of the layout
resource, by setting the panel
field to the id
of the panel (column/row) we want to add the instructions e.g. to "instructions" column in this case.
Like in the previous sections, you need to git add
, git commit
and then git push
the changes to GitHub.
You can then go to the "Labs" section, verify the latest commit on GitHub matches the status of your lab, and start the lab.
Your lab should now have an "Instructions" tab that displays the first page that you created in this guide.
When you click the "Progress" button in the top-right of the Lab UI, you should see the outline you defined on the lab
resource.
Once you are done exploring your lab, click the "Stop" button at the top right of the Lab UI to shut down your lab environment and go back to the "Labs" list.
The markdown file supports all standard markdown formatting, as well as custom Instruqt interactive components and templated values using the template syntax. And variables to replace in the content can be passed to the markdown by specifying a variables
map on the page
resource.
This guide will walk you through how to create and manage your first Instruqt Lab, using the Instruqt CLI and the GitHub integration. At the end of this guide you will have a complete lab with a live terminal, embedded web server, and an interactive quiz.
In the previous section you added instructions to the lab, in this section you will add sandbox components to the lab and learn how to expose them to end-users within the Lab UI.
The sandbox of a lab is where your software runs inside of Instruqt. It contains all the resources that the end-user interacts with during the lifecycle of a lab.
network
within your labTo start off, define a network
resource in the sandbox, which allows us to control networking of our resources by attaching them to the network. It is possible to attach resources to multiple networks.
In most simple sandboxes a single network
resource will suffice, but when simulating more complex situations such as "multi-cloud deployments" and "network federation", the network
resource is what allows you to create those scenarios.
Lets create a sandbox.hcl
file in the root of the lab directory, and define a network
resource named "main" in it.
The network resource has one required field, which is the subnet that you want the network to use e.g. "10.0.200.0/16".
container
to your labNext, in the sandbox.hcl
file, add a container
resource to the lab named "webserver".
In order for the container to be able to start, you must define what image it should use.
For this guide we will use the nginx
image as the webserver.
Since the specific version of the image does not matter for this guide, you can omit the tag of the image to use the latest version of the image.
But it is highly recommended to use a tagged version of an image e.g. nginx:1.27.4
, so you know exactly what version of the image is used within the sandbox.
The nginx
container image runs on port 80
by default, so you need to map that local
port on the container.
And finally attach the container to the network
resource you specified before by setting the id
field of the network
block to the meta.id
field of the "main" network
resource: resource.network.main.meta.id
.
service
resourceTo expose a web service to the end-user in the Lab UI, you need to add a service
resource that points at the service you want to expose.
This service
resource can then be used within a layout as a tab on a specific panel, to show to the end-user.
Create a file called tabs.hcl
in the root of the lab directory, and add a service
resource named "webserver" to it.
The service
resource will contain all the configuration for exposing your web service.
This makes it easier to reuse these tabs in multiple layouts, without having to redefine the configuration each time.
A service resource has a few fields that can be configured to point it exactly at the web service you want to expose.
The most important field to configure is the target
field, which is a reference to the resource that hosts the web service e.g. resource.container.webserver
. It is also necessary to specify the port the web service is listening on, which in the case of the nginx
image is port 80
.
In the case that the web service is not listening on the default path /
, it is also possible to override this by specifying the path
field and setting it to the desired path e.g. /ui
.
In order to show both the instructions and the service in the Lab UI at the same time, we will separate them horizontally into two columns.
Lets add a second layout
resource in the layouts.hcl
file, named "two_panels".
Define two columns on the layout, named "left" and "right", and set the width
of the "right" panel to 33
.
This new layout can then be added to the lab
resource by defining another layout
block and referencing the new "two_panels" layout resource.layout.two_panels
.
Lets set this "two_column" layout as the default layout for now, so we can see the changes made to the lab.
service
to a layoutIn the previous section, you added the instructions
tab to the single panel layout.
Add the instructions
tab to the "two_columns" layout
block, as you did before on the "single_column" layout
block, but assign it to the "left" panel.
Other tabs are defined in a similar way, but slightly different due to the unique nature of the instructions
tab.
To add other tabs to a layout, you can use the tab
block with a label that specifies its id
.
This id
can be used to interact with it from the instructions, such as focusing a specific tab on the push of a button within the content.
Define a new tab
block on the "two_columns" layout
block with a label of "webserver", set its target
to point at the webserver service resource you created before resource.service.webserver
, and assign the tab to the "right" panel.
To set the title of any tab, including instructions
, you can specify the title
field to.
Like in the previous sections, you need to git add
, git commit
and then git push
the changes to GitHub.
You can then go to the "Labs" section, verify the latest commit on GitHub matches the status of your lab, and start the lab.
Your lab should now have a new layout with two columns, the left one showing the web service and the right one showing the instructions.
Once you are done exploring your lab, click the "Stop" button at the top right of the Lab UI to shut down your lab environment and go back to the "Labs" list.
For more information on how to configure containers, please see the reference page for many more options.
Content changes
Notes vs Pages
Challenges vs Pages and Activities
YAML vs HCL
Single way to define all lab content, rather than mix of conventions and (file) formats
yaml, markdown, frontmatter, forced folder structure, scripts
Flexible file/folder structure
Lifecycle scripts
Implicit vs Explicit dependencies
Sandbox changes
Resources and References
Dependency Graph
Health Checks
Native version control
Versioning, Branches and Tags
Workflow changes
>> Print the mapping from challenges to pages and activities
List of containers, VMs, Cloud Accounts
List of setup scripts
Map out dependencies between components
Configure Containers, VMs, Cloud Accounts
Replace scripted dependencies with health checks and resource references
(Explain quizzes briefly)
quiz
resourceStart by adding a quizzes.hcl
file, then add the following resources
(Explain the resources, fields)
(Explain the activities block and what the fields mean)
(Explain tasks, explain Instruqt Custom Component, especially )
Embed the quiz in your instructional content, create instructions/quiz.md
and add the <instruqt-quiz>
element so it looks like this
Note that the id
of the quiz must correspond to the resource name.
(Guide, and screenshot of how our lab looks at this stage.)
This will open up Visual Studio Code and all the files in the lab directory.
You should see several directories containing a README.md
file, explaining what the directories are used for, and two .hcl
files that contain a minimal functional configuration for a lab.
Lets start by taking a look at the main.hcl
file, which contains the definition of the lab
resource.
Below the description field, you can see a layout
block that is named "single_column". The layout
block defines which layouts are available to the use inside the lab content. This block can be repeated multiple times, with unique names, and they have a reference to a layout
resource.
You can reference other resources and fields within those resources by providing the full path to them.
In the generated example lab, layout
block on the lab
is referencing a resource
of type layout
and a name of single_panel
, which results in a reference of resource.layout.single_panel
. If for instance you wanted to reference the title
field of the lab
, you could use resource.lab.main.title
to get the value of "Skeleton Lab".
The layout
resource lets you define your own custom layouts of the Instruqt Lab UI.
A layout consists of "panels", defined as nested columns and rows.
For each panel, you can define the size of the panel in percentages e.g. 50
.
In the layouts.hcl
file there is a generated single panel layout.
This layout defines a single column named "instructions".
You can later use this name to assign tabs to that panel.
Now lets see what the workflow is to make changes to an existing lab.
Change the title of the lab
resource located in main.hcl
to reflect the title of your lab e.g. "My First Lab", and update the description field to "This is my first lab".
To validate that the lab definition is still correct, you can run the validate command from the lab directory:
If there are any validation errors, the CLI will tell you where and what is incorrect. Please correct any errors, until the lab validates successfully.
Now we can use standard developer workflows using git to manage the lab. To see what changes have been made to the lab, we can check the status:
If there are no unintended changes, we can add the files we want to include in the commit:
And then commit the changes with a descriptive message, which helps others that are collaborating on the content to understand what has changed since the last time they worked on the lab.
Finally the changes can be pushed to GitHub. Because we have already defined the upstream of the respository in the previous section, we can simply push the changes.
This will trigger the changes to be pulled into the Instruqt platform from GitHub. Head on over to the "Labs" section of the Instruqt platform and find your lab. The status message on the lab should still contain a checkmark and the hash of your new commit on GitHub.
When you start the lab, you should now see your new title and description on the loading screen.
Once you are done exploring your lab, click the "Stop" button at the top right of the Lab UI to shut down your lab environment and go back to the "Labs" list.
Before you begin, ensure you have the following:
A code editor to edit the configuration of the lab.
Start by initializing a new lab from one of the starter templates, using the instruqt CLI. In your terminal, run the following command and follow the steps in the CLI.
You will be prompted to provide the title of the lab e.g. "My First Lab".
This will be used to create a target directory on your machine for your configuration based on the sluggified title e.g. my-first-lab
. The directory will be created in the current directory you are running the CLI command from.
The CLI will then prompt you to select one of the starter templates to base your lab on. For the purposes of this guide, we will be starting from the "Empty/Skeleton" template. Depending on which template you choose, the configuration will contain additional configuration to assist in that use-case.
Once the template is chosen, review the details and confirm to create the lab. For example ,given the title of "My First Lab", the directory structure will resemble:
From your GitHub dashboard perform the following actions to create a repository in your own user account:
Click the New button.
Set the Repository Name.
This can match your lab directory, e.g., my-first-lab
, but is not required.
Optionally, add a description.
Choose the visibility (public or private).
Do not initialize with a README, .gitignore
, or license.
This is to keep the initial commit simpler, so you do not have to merge these changes to the README.md
.
Click Create Repository.
You should now have an empty repository, and should see instructions how to interact with the repository.
Copy the url in the input field of the "Quick setup — if you’ve done this kind of thing before" section of the instructions.
For example if you named the repository my-first-lab
, it should look something like:
or:
Open up your terminal and navigate to the lab directory you created in Step 1.
If you did not do anything in the terminal after running instruqt lab init
, you should just run:
Otherwise navigate to the full path of the lab directory instead:
Now that you are in the lab directory, you need to initialize the git repository.
You can then link your local directory to the repository you created on GitHub in Step 2. To do this, use the url you copied at the end of Step 2 and replace the url in the example below with your url:
or:
Now that you have linked the local directory to the remote repository, you can add the files and commit them. This will tell git which files you want to include in the commit, and the commit will store the changes to those files in version control and the git history.
Because we want to include all files in the current directory, we can use .
as the files we want to include, which means "everything in the current directory".
Then commit the changes and write a short message that describes what the changes are that are included in the commit. Because this is the first change to the repository, a common commit message to use is "Initial commit".
Now that the changes are stored in git and recorded in the history, you can push them to the remote repository by running the git push
command.
Because this is the first time you are pushing to the remote repository, you will need to set the upstream branch.
Now that all configuration is done, we can import the lab from GitHub into the Instruqt platform. First log into your Instruqt account and navigate to the "Labs" section. Click the "Import Lab" button and select the repository you have created in Step 2, then click "Next". If you do not see your lab, make sure that the Instruqt GitHub application has access to the repository.
Fill out the form by entering a name for your lab, e.g. "My First Lab".
This will be used as the slug of the lab, e.g. my-first-lab
.
If you are using branches and the lab lives on a different branch than main, or if you want a specific branch/tag of your lab, you can specify the "ref". For the purpose of the guide, we can leave this blank and use the default ref that comes from the GitHub repository.
Next, fill in the path where the lab is located within the repository.
If you are using a mono-repository, this is where you can select the directory the lab is in.
For the purpose of this guide we can just leave it empty, which will default to the root path /
of the directory.
The repository url is shown as the bottom of the form for reference.
You can then click "Import" to start importing your lab. All branches and tags of the repository will be imported and parsed, so you can launch any of them if needed.
Now that the lab is imported, we can launch it to test it out.
From the labs list, locate your lab e.g. my-first-lab
and make sure that the status behind the lab has a checkmark and a text similar to #8ec1470 Success
. The first part of the success message is the hash of the latest commit that was found on GitHub.
Click the "Start" button on your lab, this will create your lab environment and redirect you to the Lab UI for your lab. Once the lab environment is ready, click the "Enter Lab" button to enter your lab.
Explore the bare Instruqt lab as it will look for your end users. It looks a bit barren at the moment. In the next sections, you will explore adding some basic functionality to your labs.
Once you are done exploring your lab, click the "Stop" button at the top right of the Lab UI to shut down your lab environment and go back to the "Labs" list.
(Write section on finishing up content.)
Concepts we will learn about in this section:
(Write about feedback component, and use case)
In any page's markdown section, you can add a feedback component your end users can interact with. This can help you source feedback both during and after a lab has been completed.
Let's add a feedback component as a standalone page at the end of the lab.
(Explain tasks and this section, what its used for)
Concepts we will learn about in this section:
(Write better) We want to use a separate container to connect to a termainl and run our conditions against.
Add an ubuntu
image container
resource in sandbox.hcl
. We will connect to this sandbox
(Add section on terminals)
Add a terminal
resource called shell
. Have it target the new ubuntu
container we just defined.
(Explain the fields, and why they are needed.)
task
resourceIn your acitivities.hcl
file, add the following task
resource.
(Explain the fields, especially the scripts, as they are not yet defined)
(Explain scripts)
Create a new directory called scripts
, inside the directory, create two new files; file_exists.sh
& contents_match.sh
. As the names indicate, we will be adding scripts to these files that check if a file exists and whether the content matches.
In /scripts/file_exists.sh
add the following script:
In /scripts/contents_match.sh
add the following script:
In pages.hcl
add a new page
and name it task
. Add the helloworld
activity to it, like we did with quizzes before.
For the end user to interact with the shell
terminal we created earlier, we need to connect a tab to the shell.
In main.hcl
, add the terminal to the layout in our lab
. While we're here, also add the new page in the content block.
(Explain the shell targeting & fields)
In instructions/page.md
, add the <instruqt-task>
element and point it to the helloworld
task. This will give the end user feedback on how they're faring with their task.
(Guide, and screenshot of how our lab looks at this stage.)
For more information and configuration on quizzes, please see the reference page.
For more information and configuration on quizzes, please see the reference page.
We will use the skeleton lab we created in the section and start adding configuration to it until we have a complete lab.
To start off, lets open the lab directory in your favourite code editor to can take a look around the configuration. If you still have the terminal open in the lab directory from the last steps, and you are using , run:
The lab
resource is the main entrypoint of your lab configuration, that contains all the configuration for your lab. You can find all the possible settings for a in the "Lab reference" section of the documentation.
Besides a title for the lab, it also includes a multi-line description. There are different ways to write text values for fields. If it is a single line, you can simply use double quotes description = "this is my title"
to define the value. But if your description is longer you can either use syntax as you can see in the generated skeleton lab and the example above, or use the file()
function to use the contents of a local file instead e.g. description = file("README.md")
.
You can find all the possible settings for a in the "Lab reference" section of the documentation.
You will need to have Git on your system, which will be used for version control.
The Instruqt command-line tool needs to be to initialize and validate your lab.
You will need a account to store your lab repository.
The Instruqt-GitHub integration needs to be to connect Instruqt with your GitHub account.
In order to get your lab into the Instruqt platform, we will use the GitHub integration which makes it possible to use your standard developer workflows to manage your content. Log into your account and create a new, empty repository that will store your lab configuration. It is also possible to use mono-repositories to store your labs, but for the purpose of this guide we will create a separate repository specifically for this lab.
For more information and configuration on scripts, please see the reference page.
For more information and configuration of custom markdown components, please see the reference page.
A quiz consists of a number of questions that need to be answered in order to complete the quiz.
The questions that need to be answered in order to complete the quiz.
ShowHints show_hints
type: bool
Whether to show hints to the participants.
ShowAnswers show_answers
type: bool
Whether to show answers to the participants.
Attempts attempts
type: int
The number of attempts a participant can make.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Questions questions
type: Reference to , , ,
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Content content
type: string
The content of the file at the path specified in the `file` field.
File file
required
type: string
The path to the markdown file that contains the content of the page.
Title title
type: string
The title of the page. This can be overridden in the `content` block of a `lab` when referencing the page.
Variables variables
type: map[string]string
A key/value map of variables that are passed to the markdown. Handlebars templates are used to substitute the variables. The placeholders will be replaced with the variable values at runtime.
The activities that are embedded in the content of the page. This maps the chosen ID to the activity reference. This ID will be replaced with the interpolated activity reference at runtime.
Activities activities
type: Reference to ,
The lab
resource provides the metadata about the lab and some of its configuration.
This is the equivalent of what is currently called a "track".
Title title
required
type: string
The title of the lab.
Description description
required
type: string
A description of the lab.
Tags tags
type: []string
Tags that describe the lab.
Settings that configure the lab.
A layout that can be used within the lab. This block can be specified multiple times on a lab resource, to allow using multiple layouts throughout a lab.
The instructional content of the lab that is presented to the end-user.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
DefaultLayout default_layout
type: string
The default layout is determined by the first layout that has the `default` field set to `true`. In the case that no layout has a default set, the first layout defined on the lab will be set as the default.
Settings that configure the lab.
Theme theme
type: string
default: modern_dark
The theme used to style the lab.
Configure the timelimit settings.
Configure the idle timeout settings.
Configure the controls that are presented to the end-user.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Configure the timelimit settings.
Duration duration
type: int
default: 15
The maximum duration of the lab in minutes.
Extend extend
type: int
default: 0
How long the lab can be extended in minutes once the timelimit is hit. Set to 0 to disable extending.
ShowTimer show_timer
type: bool
default: true
Whether or not to show the timelimit timer to the end-user.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Configure the idle timeout settings.
Enabled enabled
type: bool
default: true
Whether or not idle timeout is enabled.
Timeout timeout
type: int
default: 5
The inactivity duration in minutes after which an end user will be timed out.
ShowWarning show_warning
type: bool
default: true
Whether or not to show an idle timeout warning to the end user.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Configure the controls that are presented to the end-user.
ShowStop show_stop
type: bool
default: true
Whether or not to show the stop lab button to the end-user.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A layout that can be used within the lab. Layouts define what panels and tabs are visible and how they are arranged.
Name name
required
type: string
The name of the layout, that can be used by chapters and pages to switch to.
A reference to the layout that defines the panels.
Default default
type: bool
Whether or not the layout of the default one to use when the lab does not have any instructional content.
The tabs that are used within the layout.
The instructional content that is displayed in the layout.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A tab that is used within the layout and points at a tab target e.g. Terminal, Service, Editor, etc.
Name name
required
type: string
The Name of the tab.
Panel panel
required
type: string
The name of the panel of the layout that the tab is displayed in.
The target resource of the tab that is shown when the tab is active.
Title title
type: string
The title of the tab.
Active active
type: bool
Whether or not the tab is active.
Visible visible
type: bool
Whether or not the tab is visible.
Closeable closeable
type: bool
Whether or not the tab is closeable.
Movable movable
type: bool
Whether or not the tab is movable.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
The instructional content that is displayed in the layout.
Panel panel
required
type: string
The panel of the layout that the instructions are displayed in.
Title title
type: string
The title of the instructions tab.
Active active
type: bool
Whether or not the tab is active.
Visible visible
type: bool
Whether or not the tab is visible.
Closeable closeable
type: bool
Whether or not the tab is closeable.
Movable movable
type: bool
Whether or not the tab is movable.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
The instructional content of the lab that is presented to the end-user.
Title title
type: string
The title of the content tab.
The chapters that are part of the content.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A chapter within the content.
Slug slug
required
type: string
The slug of the chapter.
Title title
required
type: string
The title of the chapter.
LayoutName layout_name
type: string
The default layout for all pages in the chapter.
The pages that are part of the chapter.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A page within a chapter that is part of the content.
Slug slug
required
type: string
The slug of the page.
A reference to the resource of the page that contains the content.
Title title
type: string
The title of the page. This overrides the title of the page source.
LayoutName layout_name
type: string
The layout to use for the page. When switching to that page, the layout will then change to the selected layout.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Settings settings
type: block
Layouts layout
type: []block
Content content
type: block
TimeLimit timelimit
type: block
Idle idle
type: block
Controls controls
type: block
Reference reference
required
type: Reference to
Tabs tab
type: []block
Instructions instructions
type: block
Target target
required
type: Reference to , , , ,
Chapters chapter
type: []block
Pages page
type: []block
Reference reference
required
type: Reference to
There is a lot of flexibility in how you can structure your lab configuration. One structure that we have found to work well is shown below.
This structure groups artifacts into manageable chunks and provides a clear structure of where files should live. In the example structure below we have separated resources into multiple .hcl
files, mostly due to the amount of content in each of those files. If your labs are small, we recommend not splitting up the files too quickly, but chosing consistant names for them when splitting.
In the example project structure we have chosen to follow certain standards when placing our files. This structure follows the best practises we have found while creating content, but it is possible to deviate from the naming conventions above.
The instructions
directory holds all the written content of your lab. The instructions are separated by chapter which contains each of the pages as a separate markdown file.
The lifecycle scripts of the tasks are contained in the scripts
directory. We have separated by task name, and the scripts themselves can be named anything as they are referenced by path inside of the configuration.
Any assets that you want to use within the instructions should live in the assets
directory. This has the benefit that they are automatically served from the sandbox itself, and can be referenced as e.g. /assets/subdirectory/image.png
.
If you have note tabs defined, the content of those notes should be placed in the notes
directory as a separate markdown file for each note.
If your sandbox needs to use a configuration file, template, or any other arbitrary file, these can be placed in the files
directory.
It is a good idea to keep any nested modules inside of the modules
directory so they do not clutter the root directory of the project.
Labs are guided learning experiences. Labs are created from two main concepts:
Sandbox environments
Instructional content
Chapters/pages/instructions
Task and Quiz activities
Components
Container/VM/etc
Setup scripts
Content Structure
Chapters
Pages
Instructions
Learner Activities
Tasks and conditions
Quizes
A question that requires a multiple choice answer.
Answers and distractors are combined in a single list and showed in randomized order.
Question question
type: string
The question that needs to be answered.
Answer answer
type: []string
The correct answer to the question.
Distractors distractors
type: []string
Additional incorect options to present to the participants.
Hints hints
type: []string
The hints to show to the participants.
Tags tags
type: []string
The tags to associate with the question.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Check out the components that you can use inside the markdown of instructions
Simple link to a URL:
to
string
required
URL to link to
color
string
optional
Custom text color
Choose between different variants or customize it with your own colors:
to
string
required
URL to link to
variant
enum
optional
Pick a style: white
, danger
, warning
, success
or outline
background
string
optional
Custom background color
color
string
optional
Custom text color
Place a link that takes the user to a specific tab inside the lab:
id
string
required
Resource id of the target tab
color
string
optional
Custom text color
Place a button that takes the user to a specific tab inside the lab:
id
string
required
Resource id of the target tab
variant
enum
optional
Pick a style: white
, danger
, warning
, success
or outline
background
string
optional
Custom background color
color
string
optional
Custom text color
Show a code snippet to the user:
language
string
optional
Which syntax highlight to use
line-numbers
boolean
optional
Show each line number
line-numbers-start
number
optional
What number to start counting from
no-copy
boolean
optional
Hide the copy button
run
boolean
optional
Offer to run the code in a terminal
title
string
optional
Used only by the code group component
Group code snippets together:
Show how the user is progressing on their tasks, with a call to action when they are all complete:
heading
string
optional
Greetings message
finish-button-label
string
optional
Call to action button text
Ask the user to rate the track with an optional message:
Show the user an embedded PDF:
url
string
required
URL to the file
Interactively ask questions to the user:
id
string
required
Resource id of the quiz
Embed a presentation from Google Slides:
id
string
required
Google Slides id
Show the user a breakdown of task conditions:
id
string
required
Resource id of the task
Embed a video from Vimeo or YouTube:
id
string
required
The id of the video
source
enum
optional
Either vimeo
or youtube
, defaults to youtube
The task
resource is the new form of the lifecycle scripts, that can now be embedded anywhere on a page within the instructions.
Each task resource can have multiple condition
blocks that need to be met before the task is completed, which in turn
can have multiple of each type of lifecycle block and each of the blocks are executed in sequence in the order they appear in code.
SuccessMessage success_message
type: string
The message to display when the task is successfully completed.
Configuration for the task. This configuration will be used for all scripts within the task.
The conditions that have to be met in order for the task to successfully be validated.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
A condition
is a partial validation for a task. Conditions can be used to split up bigger task into smaller pieces, allowing for more granular feedback to users.
Name id
required
type: string
The id of the condition.
Description description
required
type: string
The description of the condition. This will be visible on the task in the frontend.
Configuration for the condition. This configuration will be used for all scripts within the condition. This overrides the configuration for the task.
The checks that need to be executed successfully in order for the condition to pass. Check scripts are triggered when a task is validated.
The solve scripts that are executed when skipping the condition.
The setup scripts that are executed when unlocking the condition.
The cleanup scripts that are executed when the condition is completed or skipped.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A script that gets executed in the lifecycle of a lab. The script can be used to check the state of the lab, solve a challenge, setup the lab, or cleanup the lab, etc.
Script script
required
type: string
The file location of the script to execute.
The configuration for the script. This overrides the configuration for the task or condition.
FailureMessage failure_message
type: string
The message to show if the check has failed.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
The configuration for scripts.
The target resource to execute the script on.
User user
type: string
default: root
The user to execute the script as.
Group group
type: string
default: root
The group to execute the script as.
WorkingDirectory working_directory
type: string
default: /
The working directory to execute the script in.
Environment environment
type: map[string]string
The environment variables to set for the script.
Timeout timeout
type: int
default: 30
The timeout in seconds for the script to execute.
SuccessExitCodes success_exit_codes
type: []int
default: []int{0}
The exit codes that are considered successful.
FailureExitCodes failure_exit_codes
type: []int
default: []int{}
The exit codes that are considered expected failures. Any other failure codes will be considered errors.
ParallelExec configures wether conditions or scripts are executed in parallel.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Configures wether conditions or scripts are executed in parallel.
Condition condition
type: bool
Condition configures wether conditions are executed in parallel.
Check check
type: bool
Check configures wether check scripts are executed in parallel.
Solve solve
type: bool
Solve configures wether solve scripts are executed in parallel.
Setup setup
type: bool
Setup configures wether setup scripts are executed in parallel.
Cleanup cleanup
type: bool
Cleanup configures wether cleanup scripts are executed in parallel.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A question that requires a text answer.
Question question
type: string
The question that needs to be answered.
Answer answer
type: string
The correct answer to the question.
Exact exact
type: bool
Whether the answer needs to be an exact match.
Hints hints
type: []string
The hints to show to the participants.
Tags tags
type: []string
The tags to associate with the question.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
The layout resource defines the layout of the lab UI through rows and columns. These "panels" are referenced by id from the available tabs in a lab. This allows us to make layouts reusable.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A column is vertical panel within the layout.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A row is horizontal panel within the layout.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
The terminal
resource represents a target that a tab in the layout can point at.
It contains all the configuration that the terminal session needs to start.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
The service
resource represents a target that a tab in the layout can point at. A service is a web service or application running on a sandbox container or VM.
It contains all the configuration that the participants proxy needs to route to the target service behind it.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
The editor
resource represents a target that a tab in the layout can point at.
It contains all the configuration that the participants proxy needs to route to the target service behind it.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Question question
type: string
The question that needs to be answered.
Answer answer
type: string
The correct answer to the question.
Distractors distractors
type: []string
Additional incorect options to present to the participants.
Hints hints
type: []string
The hints to show to the participants.
Tags tags
type: []string
The tags to associate with the question.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Config config
type: block
Conditions condition
type: []block
Config config
type: block
Checks check
type: []block
Solves solve
type: []block
Setups setup
type: []block
Cleanups cleanup
type: []block
Config config
type: block
Target target
type: Reference to
ParallelExec parallel_exec
type: block
Question question
type: string
The question that needs to be answered.
Answer answer
type: int
The correct answer to the question.
Hints hints
type: []string
The hints to show to the participants.
Tags tags
type: []string
The tags to associate with the question.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
The vertical columns the layout is divided into.
ID id
required
type: string
The ID of the panel that will be referenced by the tabs.
Width width
type: string
The width of a column can be specified in percentages.
The horizontal rows the column is divided into.
ID id
required
type: string
The ID of the panel that will be referenced by the tabs.
Height height
type: string
The height of a row can be specified in percentages.
The vertical columns the row is divided into.
A reference to the resource the terminal is attached to.
Shell shell
type: string
The shell the terminal will use.
User user
type: string
The user the terminal will run as.
Group group
type: string
The group the terminal will run as.
WorkingDirectory working_directory
type: string
The working directory the terminal will start in.
Command command
type: []string
The command the terminal will run.
The resource that hosts the service.
Scheme scheme
required
type: string
Which scheme to use to connect to the service e.g. "http", "https".
Port port
required
type: int
The port the service is listening on.
Title title
type: string
DEPRECATED: Use the `title` field on Lab.Layout.Tab instead
Path path
type: string
The path to call on the service.
Directory trees that are exposed as workspaces in the editor.
Name name
required
type: string
The name of the workspace.
Directory directory
required
type: string
The directory to open in the workspace.
The target host that the directory should be opened on.
The note
resource represents a single page of content that can be displayed in a tab.
This resource does not have the capability to embed quiz
and task
components, because it does not keep track of any progress.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
The kubernetes_config
resource allows Kubernetes configuraton to be applied to a kubernetes_cluster
.
You can specify a list of paths or individual files and health checks for the resources.
A kubernetes_config
only completes once the configuration has been successfully applied and any health checks have passed.
This allows you to create complex dependencies for your applications.
The system monitors changes to the config defined in the paths property and automatically recreates this resource when the configuration is applied.
The reference to a cluster to apply the jobs to. Kubernetes config is only applied when the referenced cluster is created and healthy.
Paths paths
required
type: []string
Paths to the Kubernetes config files to apply to the cluster.
WaitUntilReady wait_until_ready
required
type: bool
Determines if the resource waits until all config defined in the paths has been accepted and started by the server. If set to `false` the resource returns immediately after submitting the job.
Optional health check to perform after the jobs have been applied, this resource will not complete until the health checks are passing.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
A health_check
stanza allows the definition of a health check which must pass before the resource is marked as successfully created.
Timeout timeout
required
type: string
The maximum duration to wait before marking the health check as failed. Expressed as a Go duration, e.g. `1s` = 1 second, `100ms` = 100 milliseconds.
Pods pods
required
type: []string
An array of kubernetes selector syntax. The healthcheck ensures that all containers defined by the selector are running before passing the healthcheck.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Sidecar defines a structure for creating Docker containers
```hcl target = resource.container.ubuntu ```
Image defines a Docker image to use when creating the container.
Entrypoint entrypoint
type: []string
Entrypoint for the container, if not set, Jumppad starts the container using the entrypoint defined in the Docker image.
Command command
type: []string
Command allows you to specify a command to execute when starting a container. Command is specified as an array of strings, each part of the command is a separate string.
For example, to start a container and follow logs at /dev/null the following command could be used.
Environment environment
type: map[string]string
Allows you to set environment variables in the container.
Labels labels
type: map[string]string
Labels to apply to the container
A volume allows you to specify a local volume which is mounted to the container when it is created. This stanza can be specified multiple times.
Privileged privileged
type: bool
Should the container run in Docker privileged mode?
Define resource constraints for the container
Define a health check for the container, the resource will only be marked as successfully created when the health check passes.
MaxRestartCount max_restart_count
type: int
The maximum number of times a container will be restarted when it exits with a status code other than 0
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
ContainerName container_name
type: string
Fully qualified resource name for the container the sidecar is linked to, this can be used to access the sidecar from other sources.
Image defines a Docker image used when creating this container. An Image can be stored in a public or a private repository.
Name name
required
type: string
Name of the image to use when creating the container, can either be the full canonical name or short name for Docker official images. e.g. `consul:v1.6.1` or `docker.io/consul:v1.6.1`.
Username username
type: string
Username to use when connecting to a private image repository
Password password
type: string
Password to use when connecting to a private image repository, for both username and password interpolated environment variables can be used in place of static values.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
ID id
type: string
ID is the unique identifier for the image, this is independent of tag and changes each time the image is built. An image that has been tagged multiple times also shares the same ID. ID string `hcl:"id,optional" json:"id,omitempty"`
A volume type allows the specification of an attached volume.
Source source
required
type: string
The source volume to mount in the container, can be specified as a relative `./` or absolute path `/usr/local/bin`. Relative paths are relative to the file declaring the container.
Destination destination
required
type: string
The destination in the container to mount the volume to, must be an absolute path.
Type type
type: string
The type of the mount, can be one of the following values:
bind: bind the source path to the destination path in the container
volume: source is a Docker volume
tmpfs: create a temporary filesystem
ReadOnly read_only
type: bool
Whether or not the volume is read only.
BindPropagation bind_propagation
type: string
Configures bind propagation for Docker volume mounts, only applies to bind mounts, can be one of the following values:
shared
slave
private
rslave
rprivate
For more information please see the Docker documentation https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation
BindPropagationNonRecursive bind_propagation_non_recursive
type: bool
Configures recursiveness of the bind mount.
By default Docker mounts with the equivalent of mount --rbind
meaning that mounts below the the source directory are visible in the container.
or instance running docker run --rm --mount type=bind,src=/,target=/host,readonly
busybox will make /run
of the host available as/host/run
in the container. To make matters even worse it will be writable (since only the toplevel bind is set readonly, not the children).
If bind_propagation_non_recursive
is set to true then the container will only see an empty /host/run
, meaning thetmpfs
which is typically mounted to /run
on the host is not propagated into the container.
SelinuxRelabel selinux_relabel
type: string
Configures Selinux relabeling for the container (usually specified as :z or :Z) and can be one of the following values:
shared (Equivalent to :z)
private (Equivalent to :Z)
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A resources type allows you to configure the maximum resources which can be consumed.
CPU cpu
type: int
Set the maximum CPU which can be consumed by the container in MHz, 1 CPU == 1000MHz.
CPUPin cpu_pin
type: []int
Pin the container CPU consumption to one or more logical CPUs. For example to pin the container to the core 1 and 4.
Memory memory
type: int
Maximum memory which a container can consume, specified in Megabytes.
GPU settings to pass through to container
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A health_check
stanza allows the definition of a health check which must pass before the container is marked as successfully created.
There are three different types of healthcheck http
, tcp
, and exec
, these are not mutually exclusive, it is possible to define more than one health check.
Health checks are executed sequentially, if one health check fails, the following checks are not executed. The execution order is http
, tcp
, exec
.
Timeout timeout
required
type: string
The maximum duration to wait before marking the health check as failed. Expressed as a Go duration, e.g. `1s` = 1 second, `100ms` = 100 milliseconds.
HTTP Health Check block defining the address to check and expected status codes.
Can be specified more than once.
TCP Health Check block defining the address to test.
Can be specified more than once.
Exec Health Check block defining either a command to run in the current container, or a script to execute.
Can be specified more than once.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A HTTP health check executes an HTTP request for the given address and evaluates the response against the expected success_codes
.
If the reponse matches any of the given codes the check passes.
Address address
required
type: string
The URL to check, health check expects a HTTP status code to be returned by the URL in order to pass the health check.
Method method
type: string
HTTP method to use when executing the check
Body body
type: string
HTTP body to send with the request
Headers headers
type: map[string]string
HTTP headers to send with the check
SuccessCodes success_codes
type: []int
HTTP status codes returned from the endpoint when called. If the returned status code matches any in the array then the health check will pass.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A TCP health check attempts to open a connection to the given address. If a connection can be opened then the check passes.
Address address
required
type: string
The adress to check.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Exec health checks allow you to execute a command or script in the current container. If the command or script receives an exit code 0 the check passes.
Command command
type: []string
The command to execute, the command is run in the target container.
Script script
type: string
A script to execute in the target container, the script is coppied to the container into the /tmp directory and is then executed.
ExitCode exit_code
type: int
ExitCode to mark a successful check, default 0
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
The kubernetes_cluster
resource allows you to create immutable Kubernetes clusters running in Docker containers using K3s.
Kubernetes clusters do not share the local machines Docker image cache. Each node in a cluster has it's own unqiue cache.
To save bandwidth all containers launched in the Kubernetes cluster pulled through an image cache that runs in Docker. After the first pull all images are subsequently pulled from the image cache not the public internet. This cache is global to all Nomad and Kubernetes clusters created with Jumppad.
For more information on the image cache see the container_registry
resource.
Attach to the correct network // only when Image is specified
Network attaches the container to an existing network defined in a separate stanza. This block can be specified multiple times to attach the container to multiple networks.
Image defines a Docker image to use when creating the container. By default the kubernetes cluster resource will be created using the latest Jumppad container image.
Nodes nodes
type: int
The number of nodes to create in the cluster.
Additional volume to mount to the server and client nodes.
Docker image in the local Docker image cache to copy to the cluster on creation. This image is added to the Kubernetes clients docker cache enabling jobs to use images that may not be in the local registry.
Jumppad tracks changes to copied images, should the image change running jumppad up would push any changes to the cluster automatically.
A `port` stanza allows you to expose container ports on the local network or host. This stanza can be specified multiple times.
A `port_range` stanza allows you to expose a range of container ports on the local network or host. This stanza can be specified multiple times.
The following example would create 11 ports from 80 to 90 (inclusive) and expose them to the host machine.
Environment environment
type: map[string]string
environment variables to set when starting the container
An env stanza allows you to set environment variables in the container. This stanza can be specified multiple times.
Specifies the configuration for the Kubernetes cluster.
APIPort api_port
type: int
Port to expose the Kubernetes API on the host. By default this uses the standard api port `443`; however, if you are running multiple kubernetes instances you will need to override this value.
ContainerName container_name
type: string
The fully qualified resource name for the Kubernetes cluster, this value can be used to address the server from the Docker network. It is also the name of the Docker container.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
KubeConfig kube_config
type: KubeConfig
Details for the Kubenetes config file that can be used to interact with the cluster.
ConnectorPort connector_port
type: int
The port where the Jumppad connector is exposed to the host, this property is requied by the ingress resource and is not generally needed when building blueprints.
ExternalIP external_ip
type: string
Local IP address of the Nomad server, this property can be used to set the NOAMD_ADDR on the Jumppad client.
Image defines a Docker image used when creating this container. An Image can be stored in a public or a private repository.
Name name
required
type: string
Name of the image to use when creating the container, can either be the full canonical name or short name for Docker official images. e.g. `consul:v1.6.1` or `docker.io/consul:v1.6.1`.
Username username
type: string
Username to use when connecting to a private image repository
Password password
type: string
Password to use when connecting to a private image repository, for both username and password interpolated environment variables can be used in place of static values.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
ID id
type: string
ID is the unique identifier for the image, this is independent of tag and changes each time the image is built. An image that has been tagged multiple times also shares the same ID. ID string `hcl:"id,optional" json:"id,omitempty"`
Network attachment defines a network to which the container is attached.
ID id
required
type: string
ID of the network to attach the container to, specified in reference format. e.g. to attach to a network called `cloud`.
IPAddress ip_address
type: string
Static IP address to assign container for the network, the ip address must be within range defined by the network subnet. If this parameter is omitted an IP address will be automatically assigned.
Aliases aliases
type: []string
Aliases allow alternate names to specified for the container. Aliases can be used to reference a container across the network, the container will respond to ping and other network resolution using the primary assigned name `[name].container.shipyard.run` and the aliases.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Name name
type: string
Name will equal the name of the network as created by jumppad.
AssignedAddress assigned_address
type: string
`assigned_address` will equal the assigned IP address for the network. This will equal ip_address if set; otherwise, this is the automatically assigned IP address.
A port stanza defines host to container communications
Local local
required
type: string
The local port in the container.
Host host
type: string
The host port to map the local port to.
Protocol protocol
type: string
The protocol to use when exposing the port, can be "tcp", or "udp".
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A port_range stanza defines host to container communications by exposing a range of ports for the container.
Range range
required
type: string
The port range to expose, e.g, `8080-8082` would expose the ports `8080`, `8081`, `8082`.
EnableHost enable_host
type: bool
Expose the port range on the host.
Protocol protocol
type: string
The protocol to use when exposing the port, can be "tcp", or "udp".
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A volume type allows the specification of an attached volume.
Source source
required
type: string
The source volume to mount in the container, can be specified as a relative `./` or absolute path `/usr/local/bin`. Relative paths are relative to the file declaring the container.
Destination destination
required
type: string
The destination in the container to mount the volume to, must be an absolute path.
Type type
type: string
The type of the mount, can be one of the following values:
bind: bind the source path to the destination path in the container
volume: source is a Docker volume
tmpfs: create a temporary filesystem
ReadOnly read_only
type: bool
Whether or not the volume is read only.
BindPropagation bind_propagation
type: string
Configures bind propagation for Docker volume mounts, only applies to bind mounts, can be one of the following values:
shared
slave
private
rslave
rprivate
For more information please see the Docker documentation https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation
BindPropagationNonRecursive bind_propagation_non_recursive
type: bool
Configures recursiveness of the bind mount.
By default Docker mounts with the equivalent of mount --rbind
meaning that mounts below the the source directory are visible in the container.
or instance running docker run --rm --mount type=bind,src=/,target=/host,readonly
busybox will make /run
of the host available as/host/run
in the container. To make matters even worse it will be writable (since only the toplevel bind is set readonly, not the children).
If bind_propagation_non_recursive
is set to true then the container will only see an empty /host/run
, meaning thetmpfs
which is typically mounted to /run
on the host is not propagated into the container.
SelinuxRelabel selinux_relabel
type: string
Configures Selinux relabeling for the container (usually specified as :z or :Z) and can be one of the following values:
shared (Equivalent to :z)
private (Equivalent to :Z)
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Specifies the configuration for the Kubernetes cluster.
Docker configuration for the Kubernetes cluster.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Specifies the configuration for the Docker engine in the cluster.
NoProxy no_proxy
type: []string
A list of docker registries that should not be proxied.
InsecureRegistries insecure_registries
type: []string
A list of insecure docker registries.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Details for the Kubenetes config file that can be used to interact with the cluster.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
ConfigPath path
type: string
The path to the kubeconfig file
CA ca
type: string
The base64 encoded ca certificate
ClientCertificate client_certificate
type: string
The base64 encoded client certificate
ClientKey client_key
type: string
The base64 encoded client key
Container defines a structure for creating Docker containers
Image defines a Docker image to use when creating the container.
A port stanza allows you to expose container ports on the local network or host. This stanza can be specified multiple times.
A port_range stanza allows you to expose a range of container ports on the local network or host. This stanza can be specified multiple times.
The following example would create 11 ports from 80 to 90 (inclusive) and expose them to the host machine.
Command command
type: []string
Command allows you to specify a command to execute when starting a container. Command is specified as an array of strings, each part of the command is a separate string.
For example, to start a container and follow logs at /dev/null the following command could be used.
Environment environment
type: map[string]string
Allows you to set environment variables in the container.
Labels labels
type: map[string]string
Labels to apply to the container
A volume allows you to specify a local volume which is mounted to the container when it is created. This stanza can be specified multiple times.
Network attaches the container to an existing network defined in a separate stanza. This block can be specified multiple times to attach the container to multiple networks.
Entrypoint entrypoint
type: []string
Entrypoint for the container, if not set, Jumppad starts the container using the entrypoint defined in the Docker image.
DNS dns
type: []string
The nameservers to use to resolve dns requests.
Privileged privileged
type: bool
Should the container run in Docker privileged mode?
The capabilities to add or drop.
MaxRestartCount max_restart_count
type: int
The maximum number of times a container will be restarted when it exits with a status code other than 0
Define resource constraints for the container
Define a health check for the container, the resource will only be marked as successfully created when the health check passes.
Allows the container to be run as a specific user or group.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
ContainerName container_name
type: string
Fully qualified resource name for the container, this value can be used to access the container from within the Docker network. `container_name` is also the name of the created Docker container.
Network attachment defines a network to which the container is attached.
ID id
required
type: string
ID of the network to attach the container to, specified in reference format. e.g. to attach to a network called `cloud`.
IPAddress ip_address
type: string
Static IP address to assign container for the network, the ip address must be within range defined by the network subnet. If this parameter is omitted an IP address will be automatically assigned.
Aliases aliases
type: []string
Aliases allow alternate names to specified for the container. Aliases can be used to reference a container across the network, the container will respond to ping and other network resolution using the primary assigned name `[name].container.shipyard.run` and the aliases.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Name name
type: string
Name will equal the name of the network as created by jumppad.
AssignedAddress assigned_address
type: string
`assigned_address` will equal the assigned IP address for the network. This will equal ip_address if set; otherwise, this is the automatically assigned IP address.
Image defines a Docker image used when creating this container. An Image can be stored in a public or a private repository.
Name name
required
type: string
Name of the image to use when creating the container, can either be the full canonical name or short name for Docker official images. e.g. `consul:v1.6.1` or `docker.io/consul:v1.6.1`.
Username username
type: string
Username to use when connecting to a private image repository
Password password
type: string
Password to use when connecting to a private image repository, for both username and password interpolated environment variables can be used in place of static values.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
ID id
type: string
ID is the unique identifier for the image, this is independent of tag and changes each time the image is built. An image that has been tagged multiple times also shares the same ID. ID string `hcl:"id,optional" json:"id,omitempty"`
A volume type allows the specification of an attached volume.
Source source
required
type: string
The source volume to mount in the container, can be specified as a relative `./` or absolute path `/usr/local/bin`. Relative paths are relative to the file declaring the container.
Destination destination
required
type: string
The destination in the container to mount the volume to, must be an absolute path.
Type type
type: string
The type of the mount, can be one of the following values:
bind: bind the source path to the destination path in the container
volume: source is a Docker volume
tmpfs: create a temporary filesystem
ReadOnly read_only
type: bool
Whether or not the volume is read only.
BindPropagation bind_propagation
type: string
Configures bind propagation for Docker volume mounts, only applies to bind mounts, can be one of the following values:
shared
slave
private
rslave
rprivate
For more information please see the Docker documentation https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation
BindPropagationNonRecursive bind_propagation_non_recursive
type: bool
Configures recursiveness of the bind mount.
By default Docker mounts with the equivalent of mount --rbind
meaning that mounts below the the source directory are visible in the container.
or instance running docker run --rm --mount type=bind,src=/,target=/host,readonly
busybox will make /run
of the host available as/host/run
in the container. To make matters even worse it will be writable (since only the toplevel bind is set readonly, not the children).
If bind_propagation_non_recursive
is set to true then the container will only see an empty /host/run
, meaning thetmpfs
which is typically mounted to /run
on the host is not propagated into the container.
SelinuxRelabel selinux_relabel
type: string
Configures Selinux relabeling for the container (usually specified as :z or :Z) and can be one of the following values:
shared (Equivalent to :z)
private (Equivalent to :Z)
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A port stanza defines host to container communications
Local local
required
type: string
The local port in the container.
Host host
type: string
The host port to map the local port to.
Protocol protocol
type: string
The protocol to use when exposing the port, can be "tcp", or "udp".
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A port_range stanza defines host to container communications by exposing a range of ports for the container.
Range range
required
type: string
The port range to expose, e.g, `8080-8082` would expose the ports `8080`, `8081`, `8082`.
EnableHost enable_host
type: bool
Expose the port range on the host.
Protocol protocol
type: string
The protocol to use when exposing the port, can be "tcp", or "udp".
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A resources type allows you to configure the maximum resources which can be consumed.
CPU cpu
type: int
Set the maximum CPU which can be consumed by the container in MHz, 1 CPU == 1000MHz.
CPUPin cpu_pin
type: []int
Pin the container CPU consumption to one or more logical CPUs. For example to pin the container to the core 1 and 4.
Memory memory
type: int
Maximum memory which a container can consume, specified in Megabytes.
GPU settings to pass through to container
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Add add
type: []string
CapAdd is a list of kernel capabilities to add to the container
Drop drop
type: []string
CapDrop is a list of kernel capabilities to remove from the container
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
User and Group configuration to be used when running a container, by default Docker runs commands in the container as root id 0.
User user
required
type: string
Linux user ID or user name to run the container as, this overrides the default user configured in the container image.
Group group
required
type: string
Linux group ID or group name to run the container as, this overrides the default group configured in the container image.
group = "root"
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A health_check
stanza allows the definition of a health check which must pass before the container is marked as successfully created.
There are three different types of healthcheck http
, tcp
, and exec
, these are not mutually exclusive, it is possible to define more than one health check.
Health checks are executed sequentially, if one health check fails, the following checks are not executed. The execution order is http
, tcp
, exec
.
Timeout timeout
required
type: string
The maximum duration to wait before marking the health check as failed. Expressed as a Go duration, e.g. `1s` = 1 second, `100ms` = 100 milliseconds.
HTTP Health Check block defining the address to check and expected status codes.
Can be specified more than once.
TCP Health Check block defining the address to test.
Can be specified more than once.
Exec Health Check block defining either a command to run in the current container, or a script to execute.
Can be specified more than once.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A HTTP health check executes an HTTP request for the given address and evaluates the response against the expected success_codes
.
If the reponse matches any of the given codes the check passes.
Address address
required
type: string
The URL to check, health check expects a HTTP status code to be returned by the URL in order to pass the health check.
Method method
type: string
HTTP method to use when executing the check
Body body
type: string
HTTP body to send with the request
Headers headers
type: map[string]string
HTTP headers to send with the check
SuccessCodes success_codes
type: []int
HTTP status codes returned from the endpoint when called. If the returned status code matches any in the array then the health check will pass.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A TCP health check attempts to open a connection to the given address. If a connection can be opened then the check passes.
Address address
required
type: string
The adress to check.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Exec health checks allow you to execute a command or script in the current container. If the command or script receives an exit code 0 the check passes.
Command command
type: []string
The command to execute, the command is run in the target container.
Script script
type: string
A script to execute in the target container, the script is coppied to the container into the /tmp directory and is then executed.
ExitCode exit_code
type: int
ExitCode to mark a successful check, default 0
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
The helm
resource allows Helm charts to be provisioned to k8s_cluster resources.
Chart chart
required
type: string
The name of the chart within the repository, or a souce such as a git repository, URL, or file path where the chart file exist.
A reference to a kubernetes clusters to apply the chart to. The system waits until the referenced cluster is healthy before attempting t apply any charts.
ValuesString values_string
type: map[string]string
Map containing helm values to apply with the chart.
Version version
type: string
Semver of the chart to install, only used when `repository` is specified.
Values values
type: string
File path to a valid Helm values file to be used when applying the config.
The details for the Helm chart repository where the chart exists. If this property is not specifed, the chart location is assumed to be either a local directory or Git reference.
Namespace namespace
type: string
Kubernetes namespace to apply the chart to.
CreateNamespace create_namespace
type: bool
If the namespace does not exist, should the helm resource attempt to create it.
SkipCRDs skip_crds
type: bool
If the chart defines custom resource definitions, should these be ignored.
Retry retry
type: int
Enables the ability to retry the installation of a chart.
Timeout timeout
type: string
Maximum time the application phase of a chart can run before failing. This duration is different to the health_check that runs after a chart has been applied.
Health check to run after installing the chart.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
A helm_repository
stanza defines the details for a remote helm repository.
Name name
required
type: string
The name of the repository.
URL url
required
type: string
The repository URL.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A health_check
stanza allows the definition of a health check which must pass before the resource is marked as successfully created.
Timeout timeout
required
type: string
The maximum duration to wait before marking the health check as failed. Expressed as a Go duration, e.g. `1s` = 1 second, `100ms` = 100 milliseconds.
Pods pods
required
type: []string
An array of kubernetes selector syntax. The healthcheck ensures that all containers defined by the selector are running before passing the healthcheck.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Network resources allow you to create isolated networks for your resources. There is no limit to the number of Network resources you can create, the only limitation is that they must not have overlapping subnets.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
The nomad_job
resource allows you to apply one or more Nomad job files to a cluster.
Jumppad monitors changes to the jobs defined in the paths property and automatically recreates this resource when jumppad up is called.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
AWS Account
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
User
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Azure Subscription
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Azure User
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Azure Service Principal
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
The ingress resource allows you to expose services in Kubernetes and Nomad tasks to the local machine.
It also allows you to expose applications that are running to the local machine to a Kubernetes or Nomad cluster.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Traffic defines either a source or a destination block for ingress traffic
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
The nomad_cluster
resource allows you to create Nomad clusters as Docker containers.
Clusters can either be a single node combined server and client, or comprised of a dedicated server and client nodes.
Nomad clusters do not share the local machines Docker image cache. Each node in a cluster has it's own unqiue cache.
To save bandwidth all containers launched in the Nomad cluster pulled through an image cache that runs in Docker. After the first pull all images are subsequently pulled from the image cache not the public internet. This cache is global to all Nomad and Kubernetes clusters created with Jumppad.
For more information on the image cache see the container_registry
resource.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Image defines a Docker image used when creating this container. An Image can be stored in a public or a private repository.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Network attachment defines a network to which the container is attached.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A port stanza defines host to container communications
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A port_range stanza defines host to container communications by exposing a range of ports for the container.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
A volume type allows the specification of an attached volume.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Google Cloud Project
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Google Cloud User
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Google Cloud Service Account
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Columns column
type: []block
Rows row
type: []block
Columns column
type: []block
Target target
required
type: Reference to
Target target
required
type: Reference to
Workspaces workspace
type: []block
Target target
type: Reference to
URL url
required
type: string
The URL of the external website.
OpenInNewWindow open_in_new_window
type: bool
Whether to open the external website in a new window.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
File file
required
type: string
The file that contains the note markdown.
Variables variables
type: map[string]string
A key/value map of variables that are passed to the markdown. Handlebars templates are used to substitute the variables. The placeholders will be replaced with the variable values at runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Cluster cluster
required
type: Reference to
HealthCheck health_check
type: block
Target target
required
type: Reference to
Image image
required
type: block
Volumes volume
type: []block
Resources resources
type: block
HealthCheck health_check
type: block
GPU gpu
type: block
HTTP http
type: []block
TCP tcp
type: []block
Exec exec
type: []block
Networks network
type: []block
Image image
type: block
Volumes volume
type: []block
CopyImages copy_image
type: []block
Ports port
type: []block
PortRanges port_range
type: []block
Config config
type: block
DockerConfig docker
type: block
Image image
required
type: block
Ports port
type: []block
PortRanges port_range
type: []block
Volumes volume
type: []block
Networks network
type: []block
Capabilities capabilities
type: block
Resources resources
type: block
HealthCheck health_check
type: block
RunAs run_as
type: block
GPU gpu
type: block
HTTP http
type: []block
TCP tcp
type: []block
Exec exec
type: []block
Cluster cluster
required
type: Reference to
Repository repository
type: block
HealthCheck health_check
type: block
Subnet subnet
required
type: string
Subnet to use for the network, must not overlap any other existing networks.
EnableIPv6 enable_ipv6
type: bool
Enable IPv6 on the network
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Timeout timeout
required
type: string
Timeout expressed as a go duration i.e 10s
Jobs jobs
required
type: []string
The jobs to check the status of.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Name name
required
type: string
The username of the user.
IAMPolicy iam_policy
type: string
The IAM policy to apply to the user.
ManagedPolicies managed_policies
type: []string
The managed policies to apply to the user.
Username username
type: string
Output parameters
Password password
type: string
AccessKey access_key
type: AccessKey
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Name name
required
type: string
The username of the user.
Roles roles
type: []string
The roles that will be assigned to the user.
UserID user_id
type: string
Output parameters
Username username
type: string
Password password
type: string
Name name
required
type: string
The name of the service principal.
Roles roles
type: []string
The roles that will be assigned to the service principal.
ServicePrincipalID service_principal_id
type: string
Output parameters
AppID app_id
type: string
Password password
type: string
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
IngressID ingress_id
type: string
The unique identifier for the created ingress.
LocalAddress local_address
type: string
The full address where the exposed application can be reached from the local network.
Generally this is the local ip address of the machine running Jumppad and the port where the application is exposed.
RemoteAddress remote_address
type: string
The address of the exposed service as it would be rechable from the target cluster.
This is generally a kubernetes service reference and port or for Nomad a rechable IP address and port.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
ConnectorPort connector_port
type: int
The port where the Jumppad connector is exposed to the host, this property is requied by the ingress resource and is not generally needed when building blueprints.
ConfigDir config_dir
type: string
Local directory where the server and client configuration is stored.
ServerContainerName server_container_name
type: string
The fully qualified resource name for the Nomad server, this value can be used to address the server from the Docker network. It is also the name of the Docker container.
ClientContainerName client_container_name
type: []string
The fully qualified resource names for the Nomad clients, this value can be used to address the client from the Docker network. It is also the name of the Docker container.
When client_nodes is set to 0
this property will have no value.
Name name
required
type: string
Name of the image to use when creating the container, can either be the full canonical name or short name for Docker official images. e.g. `consul:v1.6.1` or `docker.io/consul:v1.6.1`.
Username username
type: string
Username to use when connecting to a private image repository
Password password
type: string
Password to use when connecting to a private image repository, for both username and password interpolated environment variables can be used in place of static values.
ID id
type: string
ID is the unique identifier for the image, this is independent of tag and changes each time the image is built. An image that has been tagged multiple times also shares the same ID. ID string `hcl:"id,optional" json:"id,omitempty"`
ID id
required
type: string
ID of the network to attach the container to, specified in reference format. e.g. to attach to a network called `cloud`.
IPAddress ip_address
type: string
Static IP address to assign container for the network, the ip address must be within range defined by the network subnet. If this parameter is omitted an IP address will be automatically assigned.
Aliases aliases
type: []string
Aliases allow alternate names to specified for the container. Aliases can be used to reference a container across the network, the container will respond to ping and other network resolution using the primary assigned name `[name].container.shipyard.run` and the aliases.
Name name
type: string
Name will equal the name of the network as created by jumppad.
AssignedAddress assigned_address
type: string
`assigned_address` will equal the assigned IP address for the network. This will equal ip_address if set; otherwise, this is the automatically assigned IP address.
Local local
required
type: string
The local port in the container.
Host host
type: string
The host port to map the local port to.
Protocol protocol
type: string
The protocol to use when exposing the port, can be "tcp", or "udp".
Range range
required
type: string
The port range to expose, e.g, `8080-8082` would expose the ports `8080`, `8081`, `8082`.
EnableHost enable_host
type: bool
Expose the port range on the host.
Protocol protocol
type: string
The protocol to use when exposing the port, can be "tcp", or "udp".
Source source
required
type: string
The source volume to mount in the container, can be specified as a relative `./` or absolute path `/usr/local/bin`. Relative paths are relative to the file declaring the container.
Destination destination
required
type: string
The destination in the container to mount the volume to, must be an absolute path.
Type type
type: string
The type of the mount, can be one of the following values:
bind: bind the source path to the destination path in the container
volume: source is a Docker volume
tmpfs: create a temporary filesystem
ReadOnly read_only
type: bool
Whether or not the volume is read only.
BindPropagation bind_propagation
type: string
Configures bind propagation for Docker volume mounts, only applies to bind mounts, can be one of the following values:
shared
slave
private
rslave
rprivate
For more information please see the Docker documentation https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation
BindPropagationNonRecursive bind_propagation_non_recursive
type: bool
Configures recursiveness of the bind mount.
By default Docker mounts with the equivalent of mount --rbind
meaning that mounts below the the source directory are visible in the container.
or instance running docker run --rm --mount type=bind,src=/,target=/host,readonly
busybox will make /run
of the host available as/host/run
in the container. To make matters even worse it will be writable (since only the toplevel bind is set readonly, not the children).
If bind_propagation_non_recursive
is set to true then the container will only see an empty /host/run
, meaning thetmpfs
which is typically mounted to /run
on the host is not propagated into the container.
SelinuxRelabel selinux_relabel
type: string
Configures Selinux relabeling for the container (usually specified as :z or :Z) and can be one of the following values:
shared (Equivalent to :z)
private (Equivalent to :Z)
NoProxy no_proxy
type: []string
NoProxy is a list of docker registires that should be excluded from the image cache
InsecureRegistries insecure_registries
type: []string
InsecureRegistries is a list of docker registries that should be treated as insecure
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Name name
required
type: string
The username of the user.
Roles roles
type: []string
The roles that will be assigned to the user.
Email email
type: string
Output parameters
Password password
type: string
Name name
required
type: string
The name of the service account.
Roles roles
type: []string
The roles that will be assigned to the service account.
Email email
type: string
Output parameters
Key key
type: string
The reference to a cluster to apply the jobs to. Nomad jobs are only applied when the referenced cluster is created and healthy.
Paths paths
required
type: []string
Paths to the Nomad job files to apply to the cluster.
Optional health check to perform after the jobs have been applied, this resource will not complete until the health checks are passing.
Regions regions
type: []string
The regions infrastructure can be provisioned into.
Services services
type: []string
The services to allow access to.
Tags tags
type: map[string]string
Tags to add to the account.
Users that will be created within the account.
SCPPolicy scp_policy
type: string
The SCP policy to apply to the account.
AccountID account_id
type: string
Output parameters
AccountName account_name
type: string
Regions regions
type: []string
The regions infrastructure can be provisioned into.
Services services
type: []string
The services to allow access to.
Tags tags
type: map[string]string
Tags to add to the subscription.
Users that will be created within the subscription.
Service Principals that will be created within the subscription.
TenantID tenant_id
type: string
Output parameters
SubscriptionID subscription_id
type: string
Port port
required
type: int
If the application to be exposed exists on the target then this is the port that will be opened on the local machine that will direct traffic to the remote service.
If the application exists on the local machine then this is the port where the application is running.
The target for the ingress.
ExposeLocal expose_local
type: bool
If set to `true` a service running on the local machine will be exposed to the target cluster. If `false` then a service running on the target cluster will be exposed to the local machine.
A reference to the `nomad_cluster` or `kubernetes_cluster` resource.
Config config
required
type: map[string]string
The configuration parameters for the ingress, configuration parameters differ depending on the target type.
Port port
type: int
The numerical reference for the target service port.
Either port
or named_port
must be specified.
NamedPort named_port
type: string
The string reference for the target service port.
Either port
or named_port
must be specified.
Additional volume to mount to the server and client nodes.
Network attaches the container to an existing network defined in a separate stanza. This block can be specified multiple times to attach the container to multiple networks.
A `port_range` stanza allows you to expose a range of container ports on the local network or host. This stanza can be specified multiple times.
The following example would create 11 ports from 80
to 90
(inclusive) and expose them to the host machine.
A `port` stanza allows you to expose container ports on the local network or host. This stanza can be specified multiple times.
Docker image in the local Docker image cache to copy to the cluster on creation. This image is added to the Nomad clients docker cache enabling jobs to use images that may not be in the local registry.
Changes to copied images are automatically tracked. Should the image change running jumppad up would push any changes to the cluster automatically.
Datacenter datacenter
type: string
Nomad datacenter for the clients, defaults to `dc1`
Image defines a Docker image to use when creating the container. By default the nomad cluster resource will be created using the latest container image.
ClientConfig client_config
type: string
Path to a file containing custom Nomad client config to use when creating the server. Note: This file is added to both server and clients nodes.
This file extends the default client config and is mounted at the path /etc/nomad.d/client_user_config.hcl
ServerConfig server_config
type: string
Path to a file containing custom Nomad server config to use when creating the server. Note: This is only added to server nodes.
This file extends the default server configuration and is mounted at the path /etc/nomad.d/server_user_config.hcl
on server nodes.
Environment environment
type: map[string]string
An environment map allows you to set environment variables in the container.
ClientNodes client_nodes
type: int
Number of client nodes to create, if set to `0` a combined server and client will be created. If greater than `0`, the system will create a dedicated server with `n` clients. `client_nodes` can be updated, if the value changes and the configuration is applied again, it will attempt to nondestructively scale the cluster.
ConsulConfig consul_config
type: string
Path to a file containing custom Consul agent config to use when creating the client.
Specifies the configuration for the Nomad cluster.
APIPort api_port
type: int
Port to expose the Nomad API on the host. By default this uses the standard nomad port 4646; however, if you are running multiple nomad instances you will need to override this value.
ExternalIP external_ip
type: string
Local IP address of the Nomad server, this property can be used to set the NOAMD_ADDR on the Jumppad client.
Specifies configuration for the Docker driver.
Regions regions
type: []string
The regions infrastructure can be provisioned into.
Services services
type: []string
The services to allow access to.
Labels labels
type: map[string]string
Labels to add to the project.
Users that will be created within the project.
Service Accounts that will be created within the project.
ProjectID project_id
type: string
Output parameters
ProjectName project_name
type: string
The Template resource allows the processing of templates, outputing the result as a file.
The template resource provides custom functions that can be used inside your templates as shown in the example below.
quote [string]
Returns the original string wrapped in quotations, quote can be used with the Go template pipe modifier.
trim [string]
Removes whitespace such as carrige returns and spaces from the begining and the end of the string, can be used with the Go template pipe modifier.
Source source
required
type: string
Local path to the template source file
Destination destination
required
type: string
The destination to write the processed template to.
Variables variables
type: map[string]any
Variables to use with the template, variables are available to be used within the template using the `go template` syntax.
Given the above variables, these could be used within a template with the following convention.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
CertificateCA generates CA certificates.
Output output
required
type: string
Output directory to write the certificate and key to.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
PrivateKey private_key
type: File
The private key of the generated certificate.
PublicKeyPEM public_key_pem
type: File
The PEM key value of the generated certificate.
PublicKeySSH public_key_ssh
type: File
The SSH key value of the generated certificate.
Cert certificate
type: File
The generated certificate.
Filename filename
type: string
The name of the file.
Directory directory
type: string
The directory the file is written to.
Path path
type: string
The full path where the file is written to.
Contents contents
type: string
The contents of the file.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
CertificateLeaf generates leaf certificates
CAKey ca_key
required
type: string
Path to the primary key for the root CA
CACert ca_cert
required
type: string
Path to the root CA
Output output
required
type: string
Output directory to write the certificate and key to.
IPAddresses ip_addresses
type: []string
IP addresses to add to the cert.
DNSNames dns_names
type: []string
DNS names to add to the cert.
Cert certificate
type: File
The generated certificate.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
PrivateKey private_key
type: File
Key is the value related to the certificate key
PublicKeyPEM public_key_pem
type: File
The PEM key value of the generated certificate.
PublicKeySSH public_key_ssh
type: File
The SSH key value of the generated certificate.
Filename filename
type: string
The name of the file.
Directory directory
type: string
The directory the file is written to.
Path path
type: string
The full path where the file is written to.
Contents contents
type: string
The contents of the file.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
ExecRemote allows commands to be executed in remote containers
Source source
required
type: string
The source directory containing the Terraform config to provision.
Network attaches the container to an existing network defined in a separate stanza. This block can be specified multiple times to attach the container to multiple networks.
Version version
type: string
The version of Terraform to use.
WorkingDirectory working_directory
type: string
The working directory to run the Terraform commands.
Environment environment
type: map[string]string
Environment variables to set.
Variables variables
type: map[string]any
Terraform variables to pass to Terraform.
A volume allows you to specify a local volume which is mounted to the container when it is created. This stanza can be specified multiple times.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Output output
type: map[string]any
Any outputs defined in the Terraform configuration will be exposed as output values on the Terraform resource.
ApplyOutput apply_output
type: string
Console output from the Terraform apply.
Network attachment defines a network to which the container is attached.
ID id
required
type: string
ID of the network to attach the container to, specified in reference format. e.g. to attach to a network called `cloud`.
IPAddress ip_address
type: string
Static IP address to assign container for the network, the ip address must be within range defined by the network subnet. If this parameter is omitted an IP address will be automatically assigned.
Aliases aliases
type: []string
Aliases allow alternate names to specified for the container. Aliases can be used to reference a container across the network, the container will respond to ping and other network resolution using the primary assigned name `[name].container.shipyard.run` and the aliases.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Name name
type: string
Name will equal the name of the network as created by jumppad.
AssignedAddress assigned_address
type: string
`assigned_address` will equal the assigned IP address for the network. This will equal ip_address if set; otherwise, this is the automatically assigned IP address.
A volume type allows the specification of an attached volume.
Source source
required
type: string
The source volume to mount in the container, can be specified as a relative `./` or absolute path `/usr/local/bin`. Relative paths are relative to the file declaring the container.
Destination destination
required
type: string
The destination in the container to mount the volume to, must be an absolute path.
Type type
type: string
The type of the mount, can be one of the following values:
bind: bind the source path to the destination path in the container
volume: source is a Docker volume
tmpfs: create a temporary filesystem
ReadOnly read_only
type: bool
Whether or not the volume is read only.
BindPropagation bind_propagation
type: string
Configures bind propagation for Docker volume mounts, only applies to bind mounts, can be one of the following values:
shared
slave
private
rslave
rprivate
For more information please see the Docker documentation https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation
BindPropagationNonRecursive bind_propagation_non_recursive
type: bool
Configures recursiveness of the bind mount.
By default Docker mounts with the equivalent of mount --rbind
meaning that mounts below the the source directory are visible in the container.
or instance running docker run --rm --mount type=bind,src=/,target=/host,readonly
busybox will make /run
of the host available as/host/run
in the container. To make matters even worse it will be writable (since only the toplevel bind is set readonly, not the children).
If bind_propagation_non_recursive
is set to true then the container will only see an empty /host/run
, meaning thetmpfs
which is typically mounted to /run
on the host is not propagated into the container.
SelinuxRelabel selinux_relabel
type: string
Configures Selinux relabeling for the container (usually specified as :z or :Z) and can be one of the following values:
shared (Equivalent to :z)
private (Equivalent to :Z)
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
The exec resource allows the execution of arbitrary commands and scripts. Depending on the parameters specified, the commands are executed either on the local machine or inside of a container.
When either the image
or target
fields are specified, the command is executed inside of a container.
When neither of these fields are specified, the command is executed on the local machine.
When running on the local machine, the command runs in the local user space, and has access to all the environment variables that the user executing jumppad run has access too. Additional environment variables, and the working directory for the command can be specified as part of the resource.
Log files for an exec running on the local machine are written to $HOME/.jumppad/logs/exec_[name].log
and the rendered
script can be found in the jumppad temp directory $HOME/.jumppad/tmp/exec[name].sh
.
Execution can either be in a stand alone container or can target an existing and running container.
When targeting an existing container, the target
field must be specified.
When running in a stand alone container, the image
block must be specified.
Output variables for the exec resource can be set by echoing a key value pair to the output file inside the script.
An environment variable ${EXEC_OUTPUT}
is automatically added to the environment of the script and points to the output.
Any outputs set in the script are automatically parsed into a map and are available via the output parameter.
Script script
required
type: string
The script to execute.
WorkingDirectory working_directory
type: string
The working directory to execute the script in.
Daemon daemon
type: bool
The process will be run as a daemon if set to true.
Only valid for local execution.
Timeout timeout
type: string
The timeout for the script to execute as a duration e.g. 30s.
Environment environment
type: map[string]string
Environment variables to set for the script.
The image to use for the container.
Only valid for remote execution in a standalone container.
A reference to a target container resource to execute the script in.
Only valid for remote execution in an existing container.
The network to attach the container to.
Only valid for remote execution in an existing container.
The volumes to mount to the container.
Only valid for remote execution in an existing container.
The user to run the script as.
Only valid for remote execution in an existing container.
ExitCode exit_code
type: int
The exit code the script completed with.
Output output
type: map[string]string
Any console output that the script outputs.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
PID pid
type: int
This is the pid of the parent process.
Only valid for local execution.
Image defines a Docker image used when creating this container. An Image can be stored in a public or a private repository.
Name name
required
type: string
Name of the image to use when creating the container, can either be the full canonical name or short name for Docker official images. e.g. `consul:v1.6.1` or `docker.io/consul:v1.6.1`.
Username username
type: string
Username to use when connecting to a private image repository
Password password
type: string
Password to use when connecting to a private image repository, for both username and password interpolated environment variables can be used in place of static values.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
ID id
type: string
ID is the unique identifier for the image, this is independent of tag and changes each time the image is built. An image that has been tagged multiple times also shares the same ID. ID string `hcl:"id,optional" json:"id,omitempty"`
Network attachment defines a network to which the container is attached.
ID id
required
type: string
ID of the network to attach the container to, specified in reference format. e.g. to attach to a network called `cloud`.
IPAddress ip_address
type: string
Static IP address to assign container for the network, the ip address must be within range defined by the network subnet. If this parameter is omitted an IP address will be automatically assigned.
Aliases aliases
type: []string
Aliases allow alternate names to specified for the container. Aliases can be used to reference a container across the network, the container will respond to ping and other network resolution using the primary assigned name `[name].container.shipyard.run` and the aliases.
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Name name
type: string
Name will equal the name of the network as created by jumppad.
AssignedAddress assigned_address
type: string
`assigned_address` will equal the assigned IP address for the network. This will equal ip_address if set; otherwise, this is the automatically assigned IP address.
A volume type allows the specification of an attached volume.
Source source
required
type: string
The source volume to mount in the container, can be specified as a relative `./` or absolute path `/usr/local/bin`. Relative paths are relative to the file declaring the container.
Destination destination
required
type: string
The destination in the container to mount the volume to, must be an absolute path.
Type type
type: string
The type of the mount, can be one of the following values:
bind: bind the source path to the destination path in the container
volume: source is a Docker volume
tmpfs: create a temporary filesystem
ReadOnly read_only
type: bool
Whether or not the volume is read only.
BindPropagation bind_propagation
type: string
Configures bind propagation for Docker volume mounts, only applies to bind mounts, can be one of the following values:
shared
slave
private
rslave
rprivate
For more information please see the Docker documentation https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation
BindPropagationNonRecursive bind_propagation_non_recursive
type: bool
Configures recursiveness of the bind mount.
By default Docker mounts with the equivalent of mount --rbind
meaning that mounts below the the source directory are visible in the container.
or instance running docker run --rm --mount type=bind,src=/,target=/host,readonly
busybox will make /run
of the host available as/host/run
in the container. To make matters even worse it will be writable (since only the toplevel bind is set readonly, not the children).
If bind_propagation_non_recursive
is set to true then the container will only see an empty /host/run
, meaning thetmpfs
which is typically mounted to /run
on the host is not propagated into the container.
SelinuxRelabel selinux_relabel
type: string
Configures Selinux relabeling for the container (usually specified as :z or :Z) and can be one of the following values:
shared (Equivalent to :z)
private (Equivalent to :Z)
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
User and Group configuration to be used when running a container, by default Docker runs commands in the container as root id 0.
User user
required
type: string
Linux user ID or user name to run the container as, this overrides the default user configured in the container image.
Group group
required
type: string
Linux group ID or group name to run the container as, this overrides the default group configured in the container image.
group = "root"
These attributes are computed when the config is parsed and applied, and are therefore only known at parsetime or runtime.
Cluster cluster
required
type: Reference to
HealthCheck health_check
type: block
required type:
Users user
type: []block
Users user
type: []block
ServicePrincipals service_principal
type: []block
Target target
required
type: block
Resource resource
required
type: Reference to , ,
Volumes volume
required
type: block
Networks network
required
type: block
PortRanges port_range
required
type: block
Ports port
required
type: block
CopyImages copy_image
required
type: block
Image image
type: block
Config config
type: block
DockerConfig docker
type: block
Users user
type: []block
ServiceAccounts service_account
type: []block
Templating uses the Handlebars language which is Mustache template language can be found at the following location:.
Source source
required
type: string
Source file, folder, url, git repo, etc
Destination destination
required
type: string
Destination file or directory to write file or files to.
Permissions permissions
type: string
default: 0777
Unix file permissions to apply to coppied files and direcories.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
CopiedFiles copied_files
type: []string
List of the full paths of copied files.
Networks network
type:
Volumes volume
type: []block
Image image
type: block
Target target
type: Reference to
Networks network
type: []block
Volumes volume
type: []block
RunAs run_as
type: block
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Value value
type: string
The generated random UUID.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Value value
type: string
Output parameters
Length length
required
type: int64
The length of the string desired. The minimum value for length is 1 and, length must also be >= (`min_upper` + `min_lower` + `min_numeric` + `min_special`).
OverrideSpecial override_special
type: string
Supply your own list of special characters to use for string generation. This overrides the default character list in the special argument. The special argument must still be set to `true` for any overwritten characters to be used in generation.
Special special
type: bool
default: true
@#$%&*()-_=+[]{}<>:?`.
Numeric numeric
type: bool
default: true
Include numeric characters in the result.
Lower lower
type: bool
default: true
Include lowercase alphabet characters in the result.
Upper upper
type: bool
default: true
Include uppercase alphabet characters in the result.
MinSpecial min_special
type: int64
default: 0
Minimum number of special characters in the result.
MinNumeric min_numeric
type: int64
default: 0
Minimum number of numeric characters in the result.
MinLower min_lower
type: int64
default: 0
Minimum number of lowercase alphabet characters in the result.
MinUpper min_upper
type: int64
default: 0
Minimum number of uppercase alphabet characters in the result.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Value value
type: string
The generated random password.
Minimum minimum
required
type: int
The minimum number to generate.
Maximum maximum
required
type: int
The maximum number to generate.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Value value
type: int
The generated random number.
ByteLength byte_length
required
type: int64
The number of random bytes to produce. The minimum value is 1, which produces eight bits of randomness.
Meta ID meta.id
string
The full ID of the resource e.g. `resource.type.name`. This is computed from the full resource path:
Meta Type meta.type
string
The type of the resource. This taken from the type label of the resource definition.
Meta Name meta.name
string
The name of the resource. This taken from the name label of the resource definition.
Base64 base64
type: string
The generated ID presented in base64.
Hex hex
type: string
The generated ID presented in padded hexadecimal digits. This result will always be twice as long as the requested byte length.
Dec dec
type: string
The generated ID presented in non-padded decimal digits.
The Instruqt CLI helps you to create and manage labs.
The init
command will initialize a new lab. You can pick an example to start from. It will then download the example to you local system.
The validate
command can be used to check whether the lab configuration is valid. It will check for:
Valid configuration syntax
Required parameters
References to resources
The format
command can be used to apply standardized formatting to all lab configuration files.