Giter Club home page Giter Club logo

tinkerbell.org's Introduction

Tinkerbell

For complete documentation visit tinkerbell.org

Tinkerbell is a bare metal provisioning engine. It’s built and maintained with love by the Tinkerbell Community.

This repository is Experimental meaning that it's based on untested ideas or techniques and not yet established or finalized or involves a radically new and innovative style! This means that support is best effort (at best!) and we strongly encourage you to NOT use this in production.

Contributing

This website uses Hugo to generate static HTML pages. It's hosted and automatically build by Netlify (see netlify.toml for more details).

Build the site locally

Make sure you have installed Hugo on your system. Follow the instructions to clone this repository and build the docs locally.

  • Clone the repository
git clone https://github.com/tinkerbell/tinkerbell.org
cd tinkerbell.org
  • Fetch the theme submodule
git submodule update --init --recursive
  • Start local server
hugo server -D

Site can be viewed at http://localhost:1313

Generate custom css files

  • Run npm insall
npm install
  • Development
npm run watch
  • Production
npm run production

Making changes

Adding a new documentation page

# example: adding new documentation page under section
hugo new section/name-of-new-page.md

Modifying an existing documentation page

Find the documentation page file (.md file) under content/ and edit it.

Publishing your changes

Create a Pull Request with your changes. When the PR is merged site will be updated automatically by Netlify.

Licensing

The code snippets and the documentation is licensed under Apache license. See LICENSE for the full license text.

tinkerbell.org's People

Contributors

aditsachde avatar andy-v-h avatar benr avatar chrisdoherty4 avatar dailyalice avatar displague avatar felixwidjaja avatar gauravgahlot avatar geriadam avatar gianarb avatar grahamc avatar invidian avatar jacobweinstock avatar jeremytanner avatar kqdeng avatar mergify[bot] avatar mmlb avatar mrmrcoleman avatar nathangoulding avatar ncopa avatar parauliya avatar rainleander avatar robinbb avatar ronggur avatar thomcrowe avatar tstromberg avatar weberc2-tempus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tinkerbell.org's Issues

Add requirements section to documentation

It would be great to have following requirements of Tinkerbell included in the documentation, perhaps new section called "Requirements".

  • OS for server:
    • As far as I know, currently Ubuntu 16.04/20.04 and some CentOS versions are supported by setup.sh script
  • CPU, RAM, disk:
    • I test on 2 vCPUs and 4 GB of RAM and that seems to be sufficient
    • 20 GB disk seems to be sufficient (including OS)
  • CPU architecture of workers and Tinkerbell server:
    • e.g. does it work on ARM?
  • Network:
    • As far as I know, L2 network is required with ability to run your own DHCP server
  • Workers:
    • workers must be able to boot from network using iPXE

Tinkerbell Uniform Standards: Maintained Repository

Our repositories should be the example from which adjacent, competing, projects look for inspiration.

Each repository should not look entirely different from other repositories in the ecosystem, having a different layout, a different testing model, or a different logging model, for example, without reason or recommendation from the subject matter experts from the community.

We should share our improvements with each ecosystem while seeking and respecting the feedback of these communities.

Whether or not strict guidelines have been provided for the project type, our repositories should ensure that the same components are offered across the board. How these components are provided may vary, based on the conventions of the project type. GitHub provides general guidance on this which they have integrated into their user experience.

Expected Behaviour

We believe this repository is Maintained and therefore needs the following files updated:

If you feel the repository should be experimental or end of life or that you'll need assistance to update these files, please let us know by filing an issue with https://github.com/packethost/standards.

Current Behaviour

n/a

Possible Solution

n/a

Context

Packet maintains a number of public repositories that help customers to run various workloads on Packet. These repositories are in various states of completeness and quality, and being public, developers often find them and start using them. This creates problems:

  • Developers using low-quality repositories may infer that Packet generally provides a low quality experience.
  • Many of our repositories are put online with no formal communication with, or training for, customer success. This leads to a below average support experience when things do go wrong.
  • We spend a huge amount of time supporting users through various channels when with better upfront planning, documentation and testing much of this support work could be eliminated.

To that end, we propose three tiers of repositories: Private, Experimental, and Maintained.

As a resource and example of a maintained repository, we've created https://github.com/packethost/standards. This is also where you can file any requests for assistance or modification of scope.

Your Environment

Batteries Included Experience

We should aim to reduce a user's "time to dopamine" by creating an unboxing experience that allows users to get Tinkerbell up and running and doing something useful or interesting, quickly. This is split into three sections:

Setup Experience

The docs should cover how to set up the provisioner in the following situations:

  • 1. On Packet, using Terraform
  • 2. Local with VMs (Vagrant/VirtualBox etc) (Ubuntu 18.04 provisioner)

Examples

  • Example 1: Install Ubuntu 18.04 on worker and add ssh key

Documentation

The documentation should introduce terminology inline so that users don't need to constantly click away breaking their flow.

Let's please have someone from outside of the core team (like Devrel) try out the docs before we push them out to make sure they are understandable to people without intimate knowledge of Tinkerbell.

As the unboxing experience can be degraded by out of date code examples, let's also set up CI to test each of the workflows, including a nightly build in case of Packet API changes.

To come back to:

  • 2. Local Ubuntu 18.04 & 20.04 , CentOS 7 & 8 (pre-amble including assumptions i.e. two machines in a flat layer 2 environment)
  • RPI4
  • Example 2: Spin up a k8s cluster on the worker(s) <-- We can reference Adam Otto's work for this
  • Example 3: Show how a user can bring their own ISO
  • Example 4: Flatcar Linux ← #28

Update docs to provide more information about what "hardware data" is

From @iaguis on the community slack.

"I'm following the setup tutorial on tinkerbell.org on Packet and got to the Hardware data section. It says: "Create a file containing the hardware data (say data.json)", but gives no information on what this "hardware data" is, I think it should have some information about that, maybe pointing to https://tinkerbell.org/cli-reference/hardware/ can be a first step."

@invidian kindly suggests the following:

{"id": "fd73de05-dc53-495d-90a1-4ab0aae73339", "arch": "x86_64", "allow_pxe": true, "ip_addresses": [{"address": "192.168.50.11", "gateway": "192.168.50.2", "netmask": "255.255.255.0", "address_family": 4}], "network_ports": [{"data": {"mac": "08:00:27:ea:b7:90"}, "name": "eth0", "type": "data"}], "allow_workflow": true}

The UUID you need to generate yourself
The mac address will be used for iPXE and address will be served by DHCP

Slack: More Guided

Community Slack

Tinkerbell leverages Packet's community Slack channel. Please join and look for the #tinkerbell channel to get involved!
[Join Packet Community on Slack]

Mockup:
image

Could we utilize this secondary nav to have a page with URL?
image

And, after this page has URL, we shall point the Landing's main nav "Slack Channel" to it also (instead of to https://slack.packet.net/)

Local setup docs fix

Currently the local setup section of the docs references cd /vagrant && source .env && cd deploy which according to the setup.sh should be cd /vagrant && source .envrc && cd deploy

Update Tinkerbell favicon

tinkerbell.org has a favicon. docs.tinkerbell.org does not have a favicon.

I would like docs.tinkerbell.org to have the same favicon as tinkerbell.org.

Expected Behaviour

See above

Current Behaviour

See above

Possible Solution

See above

Steps to Reproduce (for bugs)

  1. Open tinkerbell.org in a browser
  2. Open docs.tinkerbell.org in a browser

Context

See above

Your Environment

n/a

Add an FAQ to the website

When potential users are evaluating Tinkerbell they will naturally want to know how it is better or different than current solutions in the market. This is evidenced by the recent commentary on Reddit:
https://www.reddit.com/r/selfhosted/comments/gdyy9p/open_sourcing_tinkerbell_for_automated_baremetal/

We can build up the FAQ as we go but a good base line of questions from the link above are:

  • How does Tinkerbell compare to DigitalRebar?
  • How does Tinkerbell compare to Foreman discovery?
  • How does Tinkerbell compare to Canonical MAAS?

Proposed first list of questions:

  1. Does Tinkerbell work outside of Packet's hosting service, and has this been tested?

Yes, it will work outside of Packet. Our default setup script should work on any install of Ubuntu and CentOS.

  1. Does using Tinkerbell rely on having a Packet account?

No

  1. Can Tinkerbell be used to install OSes without Internet access (where both the Provider and Worker hosts are in an isolated network)?

Yes

  1. What operating systems is Tinkerbell able to install?

Any! Out of the box, we are endeavoring to provide installation workflows for deb and rpm-based systems, but it can be used for anything (as it includes a generic workflow engine).

  1. Can Tinkerbell install operating systems using their original, unmodified ISO images?

Yes

  1. Which server makes and models is Tinkerbell able to install operating systems on?

Currently works on any system with IPMI, with special support for Dells (racadm). Host-side, our installation has support for a lot of NICs, e.g. Broadcom, Intel, Netronome, Mellanox, and a few others out of the box.

  1. Does Tinkerbell have code to support (installing OSes on) specific server makes/models, or does it use standard interfaces only?

Our out of the box experience should allow you to install Ubuntu and CentOS easily.

  1. Is Tinkerbell able to operate remote server power settings (power on; power off)? How about resetting?

Yes, via the pbnj microservice (https://github.com/tinkerbell/pbnj)

  1. When using Tinkerbell to install an operating system, are there any operations that need manual intervention?

Nothing that we have created needs manual intervention

  1. Does Tinkerbell use each operating system's native network installer program, or does it install using a different method?

It depends on the operating system, the installation environment supports non-NM and NM for rpm-based systems, and the standard deb-based network interfaces.

Tinkerbell.org/docs is still accessible

Expected Behaviour

We moved our docs to docs.tinkerbell.org and the tinkerbell.org/docs need to be removed.

Current Behaviour

Possible Solution

Steps to Reproduce (for bugs)

Context

Your Environment

  • Operating System and version (e.g. Linux, Windows, MacOS):

  • How are you running Tinkerbell? Using Vagrant & VirtualBox, Vagrant & Libvirt, on Packet using Terraform, or give details:

  • Link to your project or a code example to reproduce issue:

Update Docs with re-boot details

Linked Issue: tinkerbell/tink#116

Problem:
Currently, when a workflow is done and the user reboots, workers PXE-boot again to OSIE unless you manually set boot to disk.

Solution:
With Issue tinkerbell/smee#35 a logic was implemented to have worker PXE boot only when there is an Active workflow created for the given worker. Worker will not PXE boot if there is ont active workflow or existing workflows defined for given worker are either completed or Failed.

Case-1:
On the first boot, worker is brought up with light weight Alpine OS and then subsequently workflows are executed onto the worker. If as a part of the workflow, such steps are executed which installs new OS on the worker and completes successfully, then the boot request (after reboot) would be handled by newly installed OS. Thus, the worker may request PXE boot.

Case-2:
If as a part of the workflow, OS is not installed then worker after reboot will request PXE-boot from the tink-server. With above mentioned issue boots#35, tink-server now need an active workflow defined to accept the request of the worker.
With above 2 cases, this issue (tink#116) is handled.

Uniform Standards Request: Experimental Repository

Hello!

We believe this repository is Experimental and therefore needs the following files updated:

If you feel the repository should be maintained or end of life or that you'll need assistance to create these files, please let us know by filing an issue with https://github.com/packethost/standards.

Packet maintains a number of public repositories that help customers to run various workloads on Packet. These repositories are in various states of completeness and quality, and being public, developers often find them and start using them. This creates problems:

  • Developers using low-quality repositories may infer that Packet generally provides a low quality experience.
  • Many of our repositories are put online with no formal communication with, or training for, customer success. This leads to a below average support experience when things do go wrong.
  • We spend a huge amount of time supporting users through various channels when with better upfront planning, documentation and testing much of this support work could be eliminated.

To that end, we propose three tiers of repositories: Private, Experimental, and Maintained.

As a resource and example of a maintained repository, we've created https://github.com/packethost/standards. This is also where you can file any requests for assistance or modification of scope.

The Goal

Our repositories should be the example from which adjacent, competing, projects look for inspiration.

Each repository should not look entirely different from other repositories in the ecosystem, having a different layout, a different testing model, or a different logging model, for example, without reason or recommendation from the subject matter experts from the community.

We should share our improvements with each ecosystem while seeking and respecting the feedback of these communities.

Whether or not strict guidelines have been provided for the project type, our repositories should ensure that the same components are offered across the board. How these components are provided may vary, based on the conventions of the project type. GitHub provides general guidance on this which they have integrated into their user experience.

Contributor documentation kick off

Expected Behaviour

IMHO this is a P2 because I feel blocked from writing documentation for contributors until we don't have a place for it.

As a potential contributor, I want to be able to get my own documentation, because maybe I am a user as well for Tinkerbell but I have different needs.

Recently worked with bird, and I know, the site has its style that comes directly from the 80s but I like how clearly it brings me to my journey as a user or as a contributor.

This is an example of this issue that I would like to see documented in the "contributor" section tinkerbell/tink#177 . A lot of the documentation as I wrote there needs to be in the code itself, but from the website, we should point the contributor in the right direction explaining more high level what the testing framework is designed for and what it provides.

@DailyAlice what do you think?

Document login credentials

It would be nice to have a note somewhere, that in order to debug the workflow, root user with no password can be used for loggin in into serial console

CLI Reference Docs Improvements

Building out the reference docs with some common information and formatting as well as examples for every command. Also serves as a useful template if/when the cli gets new functionality down the line.

Lightweight Portal

From notes from Nathan:

Build a lightweight portal that would say “here’s your hardware that’s in this facility, here are your templates, your workflows.” Also allow users to create new templates and workflows.

Not a recreation of the multi tenant staff portal.

Extra notes:

  1. Switch UI so Hardware shows a list and then you can edit, delete and upload within that page.
  2. System status: List running containers
  3. About page include running versions
  4. Doesn't need to be branded like Tinkerbell, think more like Google Console.
  5. Assuming PBNJ is running rebooting or kicking off a workflow through the UI
  6. Inspect container registry to see which containers are available.

Tinkerbell.org Hugo doesn't build locally

We have not been able to build the Tinkerbell Hugo site locally. We need to be able to build locally to test and iterate, especially on docs. There are errors are listed below:

Building sites … WARN 2020/06/29 15:03:12 Page.URL is deprecated and will be removed in a future release. Use .Permalink or .RelPermalink. If what you want is the front matter URL value, use .Params.url
ERROR 2020/06/29 15:03:12 render of "page" failed: execute of template failed: template: _default/single.html:1:3: executing "_default/single.html" at <partial "header.html" .>: error calling partial: execute of template failed: template: partials/header.html:28:7: executing "partials/header.html" at <partial "menu.html" .>: error calling partial: "/Users/thomcrowe/documents/packet/tinkerbell.org/layouts/partials/menu.html:99:23": execute of template failed: template: partials/menu.html:99:23: executing "section-tree-nav" at <(not .Params.hidden) or $.showhidden>: can't give argument to non-function not .Params.hidden
ERROR 2020/06/29 15:03:12 render of "page" failed: execute of template failed: template: _default/single.html:1:3: executing "_default/single.html" at <partial "header.html" .>: error calling partial: execute of template failed: template: partials/header.html:28:7: executing "partials/header.html" at <partial "menu.html" .>: error calling partial: "/Users/thomcrowe/documents/packet/tinkerbell.org/layouts/partials/menu.html:99:23": execute of template failed: template: partials/menu.html:99:23: executing "section-tree-nav" at <(not .Params.hidden) or $.showhidden>: can't give argument to non-function not .Params.hidden
ERROR 2020/06/29 15:03:12 render of "page" failed: execute of template failed: template: _default/single.html:1:3: executing "_default/single.html" at <partial "header.html" .>: error calling partial: execute of template failed: template: partials/header.html:28:7: executing "partials/header.html" at <partial "menu.html" .>: error calling partial: "/Users/thomcrowe/documents/packet/tinkerbell.org/layouts/partials/menu.html:99:23": execute of template failed: template: partials/menu.html:99:23: executing "section-tree-nav" at <(not .Params.hidden) or $.showhidden>: can't give argument to non-function not .Params.hidden
ERROR 2020/06/29 15:03:12 render of "page" failed: execute of template failed: template: _default/single.html:1:3: executing "_default/single.html" at <partial "header.html" .>: error calling partial: execute of template failed: template: partials/header.html:28:7: executing "partials/header.html" at <partial "menu.html" .>: error calling partial: "/Users/thomcrowe/documents/packet/tinkerbell.org/layouts/partials/menu.html:99:23": execute of template failed: template: partials/menu.html:99:23: executing "section-tree-nav" at <(not .Params.hidden) or $.showhidden>: can't give argument to non-function not .Params.hidden
Built in 71 ms
Error: Error building site: failed to render pages: render of "page" failed: execute of template failed: template: _default/single.html:1:3: executing "_default/single.html" at <partial "header.html" .>: error calling partial: execute of template failed: template: partials/header.html:28:7: executing "partials/header.html" at <partial "menu.html" .>: error calling partial: "/Users/thomcrowe/documents/packet/tinkerbell.org/layouts/partials/menu.html:99:23": execute of template failed: template: partials/menu.html:99:23: executing "section-tree-nav" at <(not .Params.hidden) or $.showhidden>: can't give argument to non-function not .Params.hidden

Adjust the capitalization

A request from @jacobsmith928

Adjust the capitalization on the website to match this:

  • boots — DHCP & iPXE Server
  • OSIE — In-Memory Environment
  • tink — Provisioning & Workflow Engine
  • hegel — Metadata Service

Code coloring and Firefox Dark Mode Conflicts

Expected Behaviour

Code coloring in the docs and on the website should look something like:
Screen Shot 2020-07-28 at 1 08 57 PM

Current Behaviour

But (in at least Firefox) with the "user prefers dark mode" option set it looks like:
image

Possible Solution

Might need to take a look at a few other browsers/dark mode options, as well as how our Hugo does colors

Prettier and/or Hugo not registering line breaks

There seems to be a line break conflict somewhere between running prettier and deploying to staging/live environment where a line break in markdown isn't registered as a line break in live. It looks like prettier is removing the extra white space and taking away the break. Hugo appears to need that double spaces and a carriage return to display the break.

Below are two screenshots, one showing the code for the new docs landing page and the landing page in staging. The contributor line, for example, is mashed into one paragraph instead of displaying the line break.

image

image

Missing steps during terraform provisioning

Expected Behaviour

The instructions at https://tinkerbell.org/setup/packet-with-terraform/provisioner/ should work.

$ wget https://raw.githubusercontent.com/tinkerbell/tink/master/setup.sh && chmod +x setup.sh
$ ./setup.sh

Current Behaviour

root@tink-provisioner:~# ./setup.sh
INFO: starting tinkerbell stack setup
INFO: verifying prerequisites for ubuntu (18.04)
ERROR: Prerequisite command not installed: docker
ERROR: Prerequisite command not installed: docker-compose

Possible Solution

Run the following before wget'ing setup.sh.

$ apt update
$ apt install -y docker.io docker-compose

Rather than having these steps performed manually, they could be performed by Terraform, through a null_resource provisioner, or through cloud-init.

Steps to Reproduce (for bugs)

  1. terraform init && terraform apply
  2. ssh root@$(terraform output provisioner_dns_name)
  3. wget https://raw.githubusercontent.com/tinkerbell/tink/master/setup.sh && chmod +x setup.sh
  4. ./setup.sh

Context

Your Environment

  • Operating System and version (e.g. Linux, Windows, MacOS):

  • How are you running Tinkerbell? Using Vagrant & VirtualBox, Vagrant & Libvirt, on Packet using Terraform, or give details:

  • Link to your project or a code example to reproduce issue:

Search border color

Now it looks pink.
image

Can you make it to #1d5086?
image

Active color glow is great already.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.