diff --git a/2024-rework/.buildinfo b/2024-rework/.buildinfo index 5a9e349a..60007a79 100644 --- a/2024-rework/.buildinfo +++ b/2024-rework/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 07aaa1f0e41316308fb93f61d119227d +config: 4681bd9d90ab476868a6e8ad213328db tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/2024-rework/.doctrees/environment.pickle b/2024-rework/.doctrees/environment.pickle index f557b5e6..2041ae8a 100644 Binary files a/2024-rework/.doctrees/environment.pickle and b/2024-rework/.doctrees/environment.pickle differ diff --git a/2024-rework/.doctrees/user/tutorials/generic_ioc.doctree b/2024-rework/.doctrees/user/tutorials/generic_ioc.doctree index f652927a..d2dcad5d 100644 Binary files a/2024-rework/.doctrees/user/tutorials/generic_ioc.doctree and b/2024-rework/.doctrees/user/tutorials/generic_ioc.doctree differ diff --git a/2024-rework/_sources/user/tutorials/generic_ioc.rst.txt b/2024-rework/_sources/user/tutorials/generic_ioc.rst.txt index 586c9ee7..002b6b35 100644 --- a/2024-rework/_sources/user/tutorials/generic_ioc.rst.txt +++ b/2024-rework/_sources/user/tutorials/generic_ioc.rst.txt @@ -2,7 +2,7 @@ Create a Generic IOC ==================== In this tutorial you will learn how to take an existing support module and -create a Generic IOC builds it. You will also learn how to embed an +create a Generic IOC that builds it. You will also learn how to embed an example IOC instance into the Generic IOC for testing and demonstration. This is a type 2. change from the list at `ioc_change_types`. @@ -20,19 +20,19 @@ See details of the device: .. note:: DLS has an existing IOC building tool ``XML Builder`` for traditional - IOCs. It has allowed DLS to have concise way of describing a beamline for many + IOCs. It has allowed DLS to a have concise way of describing a beamline for many years. However, it requires some changes to the support modules and for this reason DLS maintain's a fork of all upstream support modules it uses. epics-containers is intended to remove this barrier to collaboration and use support modules from public repositories wherever appropriate. This includes external publishing of previously internal support modules. -The first step was to publish the support module to a public repository. The -support module now lives at: +The first step was to publish the support module to a public repository, +it now lives at: https://github.com/DiamondLightSource/lakeshore340 -The project requires a little genericizing as follows: +The project required a little genericizing as follows: - add an Apache V2 LICENCE file in the root - Make sure that configure/RELEASE has an include of RELEASE.local at the end @@ -117,7 +117,7 @@ Initial Changes to the Dockerfile --------------------------------- The Dockerfile is the recipe for building the container image. It is a set -of steps that get run inside a container, the starting container filesystem +of steps that get run inside a container. The starting container filesystem state is determined by a ``FROM`` line at the top of the Dockerfile. In the Generic IOC template the ``FROM`` line gets a version of the @@ -147,7 +147,8 @@ first install those inside our devcontainer as follows: .. code-block:: bash - cd /workspaces/ibek-support + # open a new terminal in VSCode (Terminal -> New Terminal) + cd /workspaces/ioc-lakeshore340/ibek-support asyn/install.sh R4-42 StreamDevice/install.sh 2.8.24 @@ -158,17 +159,6 @@ modules. Next, make sure that the next build of our ``ioc-lakeshore340`` container image will have the same support built in by updating the Dockerfile as follows: -.. note:: - - You may think that there is a lot of duplication here e.g. ``asyn`` appears - 3 times. However, this is explicitly - done to make the build cache more efficient and speed up development. - For example we could copy everything out of the ibek-support directory - in a single command but then if I changed a StreamDevice ibek-support file the - build would have to re-fetch and re-make all the support modules. By, - only copying the files we are about to use in the next step we can, - massively increase the build cache hit rate. - .. code-block:: dockerfile COPY ibek-support/asyn/ asyn/ @@ -177,13 +167,23 @@ image will have the same support built in by updating the Dockerfile as follows: COPY ibek-support/StreamDevice/ StreamDevice/ RUN StreamDevice/install.sh 2.8.24 -The above adds ``StreamDevice`` and its dependency ``asyn``. For each support module +The above commands added ``StreamDevice`` and its dependency ``asyn``. +For each support module we copy it's ``ibek-support`` folder and then run the ``install.sh`` script. The only argument to ``install.sh`` is the git tag for the version of the support module required. ``ibek-support`` is a submodule used by all the Generic IOC projects that contains recipes for building support modules, it will be covered in more detail as we learn to add our own recipe for lakeshore340 below. +You may think that there is a lot of duplication here e.g. ``asyn`` appears +3 times. However, this is explicitly +done to make the build cache more efficient and speed up development. +For example we could copy everything out of the ibek-support directory +in a single command but then if I changed a StreamDevice ibek-support file the +build would have to re-fetch and re-make all the support modules. By +only copying the files we are about to use in the next step we can, +massively increase the build cache hit rate. + .. note:: These changes to the Dockerfile mean that if we were to exit the devcontainer, @@ -196,21 +196,28 @@ in more detail as we learn to add our own recipe for lakeshore340 below. commands to the Dockerfile, so that these changes become permanent. -Configure the ibek-support Submodule ------------------------------------- +Prepare The ibek-support Submodule +---------------------------------- + +Now we are ready to add the lakeshore340 support module to our project. In +order to do so we must first add a recipe for it to ``ibek-support``. The ``ibek-support`` submodule is used to share information about how to build -and use support modules. It contains two kinds of files: +and use support modules. It contains three kinds of files: #. install.sh - These are used to fetch and build support modules. They are run from the Dockerfile as described above. -#. IBEK support module definitions: These are used to help IOCs build their +#. IBEK support module ``definitions``: These are used to help IOCs build their iocShell boot scripts and EPICS Database from YAML descriptions. -ibek-support is curated for security reasons, therefore we need to work with +#. PVI definitions: These are used to add structure to the set of PV's a + device exposes. This structure allows us to auto-generate engineering + screens for the device. See https://github.com/epics-containers/pvi. + +``ibek-support`` is curated for security reasons, therefore we need to work with a fork of it so we can add our own recipe for lakeshore340. If you make changes -to ibek-support that are generally useful you can use a pull request to get them +to ``ibek-support`` that are generally useful you can use a pull request to get them merged into the main repo. Perform the following steps to create a fork and update the submodule: @@ -218,190 +225,289 @@ Perform the following steps to create a fork and update the submodule: - goto https://github.com/epics-containers/ibek-support/fork - uncheck ``Copy the main branch only`` - click ``Create Fork`` -- click on ``<> Code`` and COPY the *HTTPS* URL +- click on ``<> Code`` and copy the *HTTPS* URL - cd to the ioc-lakeshore340 directory -- - .. code-block:: bash - git submodule set-url ibek-support - git submodule init - git submodule update - cd ibek-support - git checkout tutorial-KEEP # see note below - cd .. +.. code-block:: bash + + git submodule set-url ibek-support + git submodule init + git submodule update + cd ibek-support + git fetch + git checkout tutorial-KEEP # see note below + cd .. -We are using the ``tutorial-KEEP`` branch which is a snapshot of the ibek-support state +We are using the ``tutorial-KEEP`` branch which is a snapshot of the ``ibek-support`` state appropriate for this tutorial. Normally you would use the ``main`` branch and then create your own branch off of that to work in. -.. warning:: +.. note:: - IMPORTANT: we used an *HTTPS* URL for the ibek-support submodule, not + IMPORTANT: we used an *HTTPS* URL for the ``ibek-support`` submodule, not a *SSH* URL. This is because other clones of ``ioc-lakeshore340`` will not be guaranteed to have the required SSH keys. HTTPS is fine for reading, but to write you need SSH. Therefore add the following to your ``~/.gitconfig``: .. code-block:: - [url "ssh://git@github.com/"] - insteadOf = https://github.com/ + [url "ssh://git@github.com/"] + insteadOf = https://github.com/ This tells git to use SSH for all GitHub URLs, when it sees an HTTP URL. -The git submodule allows us to share the ibek-support definitions between all +The git submodule allows us to share the ``ibek-support`` definitions between all ioc-XXX projects but also allows each project to have its copy fixed to a particular commit (until updated with ``git pull``) see https://git-scm.com/book/en/v2/Git-Tools-Submodules for more information. -Add a new support module -~~~~~~~~~~~~~~~~~~~~~~~~ +Create install.sh For The lakeshore340 +-------------------------------------- +The first file we will create is the ``install.sh`` script for lakeshore340. +This is a simple script that fetches the support module from GitHub and +builds it. -Add System Dependencies -~~~~~~~~~~~~~~~~~~~~~~~ +These scripts draw heavily on the ``ibek`` tool to do tasks that most support +modules require. They are also as close to identical as possible for simple +support modules. -If you tried to build the container image at this point you would find that -it is missing the boost libraries which are required by areaDetector. You -can use ``apt`` to install anything you need inside the container. Replace -the commented out ``apt-get`` lines with: +IMPORTANT points to note are: -.. code-block:: dockerfile +- Although we are using ``ibek`` we are really just automating what an EPICS + engineer would do manually. This is very much using the vanilla EPICS build + system that comes with EPICS base, along with the vanilla Make and Config files + that come with each support module. These steps are:- - RUN apt-get update && apt-get upgrade -y && \ - apt-get install -y --no-install-recommends \ - libboost-all-dev + - make sure we have the necessary system dependencies installed + - fetch a version of the support module from GitHub + - add a RELEASE.local to enable dependency resolution + - optionally add CONFIG_SITE.local to apply settings for the build environment + - run make to build the support module + - take a note of the dbds and libs that we build so that we can use them + to make our IOC instance later +- This is a bash script so although we encourage a very standard structure, + you can do anything you like. For example this support module has to + compile a 3rd party library before it can build the support module itself. + `ADAravis install.sh `_ + +To make your lakeshore340 install.sh script: + +.. code-block:: bash -Add ibek-support Patch file for ADURL -------------------------------------- + cd ibek-support + mkdir lakeshore340 + cp devIocStats/install.sh lakeshore340/install.sh + code install.sh -In the above we referred to a patch file for ADURL. Add this in the ``ibek-support`` -folder by creating directory called ``ibek-support/adurl`` and adding a file called -``adurl.sh`` with the following contents: +Now edit the install.sh script to look like the following code block. + +The changes required for any support module you care to build would be: + +- change the NAME variable to match the name of the support module +- add in ``ibek support apt-install`` lines for any system dependencies. + These can be for the developer stage or the runtime stage or both. +- change the ``ibek support add-*`` lines to declare the libs and DBDs + that this module will publish. +- add extra release macros for RELEASE.local (the RELEASE macro for + the current support module is added automatically). Or add + CONFIG entries for CONFIG_SITE.local as required. + None were required for lakeshore340. To see how to use these + functions see: + - ibek support add-release-macro --help + - ibek support add-to-config-site --help .. code-block:: bash #!/bin/bash - echo ' - CROSS_COMPILER_TARGET_ARCHS = - - # Enable file plugins and source them all from ADSupport - - WITH_GRAPHICSMAGICK = YES - GRAPHICSMAGICK_EXTERNAL = NO - - WITH_JPEG = YES - JPEG_EXTERNAL = NO - - WITH_PVA = YES - WITH_BOOST = YES - ' > configure/CONFIG_SITE.linux-x86_64.Common - - echo ' - # Generic RELEASE.local file that should work for all Support modules and IOCs - - SUPPORT=NotYetSet - AREA_DETECTOR=$(SUPPORT) - include $(SUPPORT)/configure/RELEASE - ' > configure/RELEASE.local - -This is a pretty standard patch file and most support modules will need -something similar. -It creates two files in the ADURL support module's configure folder as -follows: - -- ``CONFIG_SITE.linux-x86_64.Common`` - This tells the ADURL build - to use the GraphicsMagick and JPEG libraries that are built by ADSUPPORT. - For details of what to put in CONFIG_SITE for AreaDetector modules see - `CONFIG_SITE.local`_. -- ``RELEASE.local`` - This tells the ADURL build where to find - the support modules that it depends on. epics-containers maintains a - global release file that is used by all support modules and IOCs. It - located at ``/workspaces/epics/support/configure/RELEASE``. Therefore we - place a reference to this file in the RELEASE.local file. Whenever - ``python3 modules.py install`` is run it will update the global release - file and also fixup any ``SUPPORT=`` lines in all ``configure/RELEASE*`` - files. - -ADCore and ADSupport already have ibek-support files as they were previously created -when making ``ioc-adsimdetector``. - - -.. _CONFIG_SITE.local: https://areadetector.github.io/areaDetector/install_guide.html#edit-config-site-local-and-optionally-config-site-local-epics-host-arch - -Update the IOC Makefile ------------------------ - -The IOC Makefile tells the IOC which modules to link against. We need to update -it to pull in ADUrl and dependencies. Replace the file ``ioc/iocApp/src/Makefile`` -with the following: - -.. code-block:: makefile - - TOP = ../.. - include $(TOP)/configure/CONFIG - - PROD_IOC = ioc - DBD += ioc.dbd - ioc_DBD += base.dbd - ioc_DBD += devIocStats.dbd - ioc_DBD += asyn.dbd - ioc_DBD += busySupport.dbd - ioc_DBD += ADSupport.dbd - ioc_DBD += NDPluginSupport.dbd - ioc_DBD += NDFileHDF5.dbd - ioc_DBD += NDFileJPEG.dbd - ioc_DBD += NDFileTIFF.dbd - ioc_DBD += NDFileNull.dbd - ioc_DBD += NDPosPlugin.dbd - ioc_DBD += URLDriverSupport.dbd - ioc_DBD += PVAServerRegister.dbd - ioc_DBD += NDPluginPva.dbd - - ioc_SRCS += ioc_registerRecordDeviceDriver.cpp - - ioc_LIBS += ntndArrayConverter - ioc_LIBS += nt - ioc_LIBS += pvData - ioc_LIBS += pvDatabase - ioc_LIBS += pvAccessCA - ioc_LIBS += pvAccessIOC - ioc_LIBS += pvAccess - ioc_LIBS += URLDriver - ioc_LIBS += NDPlugin - ioc_LIBS += ADBase - ioc_LIBS += cbfad - ioc_LIBS += busy - ioc_LIBS += asyn - ioc_LIBS += devIocStats - ioc_LIBS += $(EPICS_BASE_IOC_LIBS) - ioc_SRCS += iocMain.cpp - - include $(TOP)/configure/RULES - -TODO: in future the IBEK tool will generate the Makefile for you based on the -ibek support YAML supplied with each module in ibek-support. - - -Build the Generic IOC ---------------------- - -Now we can build the IOC. Run the following command from the ioc-adurl -directory: + # ARGUMENTS: + # $1 VERSION to install (must match repo tag) + VERSION=${1} + NAME=lakeshore340 + FOLDER=$(dirname $(readlink -f $0)) + + # log output and abort on failure + set -xe + + # doxygen is used in documentation build for the developer stage + ibek support apt-install --only=dev doxygen + + # get the source and fix up the configure/RELEASE files + ibek support git-clone ${NAME} ${VERSION} --org https://github.com/DiamondLightSource/ + + ibek support register ${NAME} + + # declare the libs and DBDs that are required in ioc/iocApp/src/Makefile + # None required for a stream device ------------------------------------ + #ibek support add-libs + #ibek support add-dbds + + # compile the support module + ibek support compile ${NAME} + # prepare *.bob, *.pvi, *.ibek.support.yaml for access outside the container. + ibek support generate-links ${FOLDER} + +Having made these changes you can now test the script by running it: .. code-block:: bash - ec dev build + cd /workspaces/ioc-lakeshore340/ibek-support + chmod +x lakeshore340/install.sh + lakeshore340/install.sh 2-6-1 + +You now have lakeshore340 support in your developer container. Let's go ahead +and add that into the Dockerfile: -.. warning:: +.. code-block:: dockerfile + + COPY ibek-support/lakeshore340/ lakeshore340/ + RUN lakeshore340/install.sh 2-6-1 + +This means you can compile an IOC with lakeshore340 support in this container +but we don't yet have a way to generate startup scripts and EPICS Databases +for the instances. We will do that next. + +Create Support YAML for the lakeshore340 +---------------------------------------- + +When making an IOC instance from a Generic IOC, the instance needs to supply +an iocShell startup script and an EPICS Database. You can supply hand +crafted ``st.cmd`` and ``ioc.subst`` files for this purpose. The Generic IOC +we have made above is already capable of using such files. + +For this exercise we will use the full capabilities of ``ibek`` to generate +these files from a YAML description of the IOC instance. To do this we need +to create a YAML file that describes what the instance YAML is allowed to +make. + +TODO: a detailed description of the YAML files' structure and purpose should +be included in the ``ibek`` documentation and linked here. +The current version of this is here +https://epics-containers.github.io/ibek/main/developer/explanations/entities.html +but it is rather out of date. + +To create a ibek support YAML file we need to provide a list of ``definitions`` . +Each ``definition`` gives: + +- a name and description for the ``definitions``- a list of arguments that an + instance of this ``definitions`` may supply with each having: + + - a type (string, integer, float, boolean, enum) + - a name + - a description + - optionally a default value + +- A list of database templates to instantiate for each instance of this ``definitions`` + - including values for the Macros in the template + +- A list of iocShell command line entries to add before or after ``iocInit`` + +In all of the fields Jinja templating can be used to combine the values of +arguments into the final output. At its simplest this is just the name of +an argument in double curly braces e.g. ``{{argument_name}}``. But, it can +also be used to do more complex things as a Python interpreter is evaluating +the text inside the curly braces and that interpreter has the values of +all the ``definitions`` arguments available in its context. +See https://jinja.palletsprojects.com/en/3.0.x/templates/ + +To make a lakeshore340 YAML file, put the following contents in a file called +``/workspaces/ioc-lakeshore340/ibek-support/lakeshore340/lakeshore340.yaml``: + +.. code-block:: yaml + + # yaml-language-server: $schema=https://github.com/epics-containers/ibek/releases/download/1.6.2/ibek.support.schema.json + + module: lakeshore340 + + defs: + - name: lakeshore340 + description: |- + Lakeshore 340 Temperature Controller + Notes: The temperatures in Kelvin are archived once every 10 secs. + args: + - type: str + name: P + description: |- + Prefix for PV name + + - type: str + name: PORT + description: |- + Bus/Port Address (eg. ASYN Port). + + - type: int + name: ADDR + description: |- + Address on the bus + default: 0 + + - type: int + name: SCAN + description: |- + SCAN rate for non-temperature/voltage parameters. + default: 5 + + - type: int + name: TEMPSCAN + description: |- + SCAN rate for the temperature/voltage readings + default: 5 + + - type: id + name: name + description: |- + Object and gui association name + + - type: int + name: LOOP + description: |- + Which heater PID loop to control (Default = 1) + default: 1 + + databases: + - file: $(LAKESHORE340)/db/lakeshore340.template + args: + name: + SCAN: + P: + TEMPSCAN: + PORT: + LOOP: + ADDR: + + pre_init: + - value: | + epicsEnvSet "STREAM_PROTOCOL_PATH", "$(LAKESHORE340)/lakeshore340App/protocol/" + +This file declares a list of arguments, one for each of the database template +macros that it needs to substitute. It then declares that we need to instantiate +the ``lakeshore340.template`` database template and passes all of the arguments +verbatim to the template. + +Finally it declares that we need to add a line to the iocShell startup script +that allows the IOC to find the modules StreamDevice protocol files. + +Note that in the list of DB args or in the startup lines we can use combinations +of arguments to make the final output. + +e.g. to make a more descriptive PV prefix we could use: + +.. code-block:: yaml + + databases: + - file: $(LAKESHORE340)/db/lakeshore340.template + args: + P: "{{P + ':' + name + ':'}}" - This will FAIL. There is a deliberate error which we will fix in the next - Tutorial. +.. note:: - You should see this error:: + Because this is a DLS module originally, it has an ``etc/builder.py`` file + that is used by the ``XML Builder`` tool. ``ibek`` has a converter tool + that will translate this file into an ``ibek`` YAML file. Only DLS users + can take advantage of this because it needs access to all the dependent + DLS support module forks to work. See `../how-to/builder2ibek.support` - ../URLDriver.cpp:22:10: fatal error: Magick++.h: No such file or directory -In the next tutorial we will look at how to fix build errors like this. diff --git a/2024-rework/_static/documentation_options.js b/2024-rework/_static/documentation_options.js index bd3a6b92..1a569fbd 100644 --- a/2024-rework/_static/documentation_options.js +++ b/2024-rework/_static/documentation_options.js @@ -1,5 +1,5 @@ const DOCUMENTATION_OPTIONS = { - VERSION: '2023.11.2.dev34+gcb003f2', + VERSION: '2023.11.2.dev35+gee5adfe', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/2024-rework/developer/explanations/decisions.html b/2024-rework/developer/explanations/decisions.html index 3bebaf8a..59c70f3c 100644 --- a/2024-rework/developer/explanations/decisions.html +++ b/2024-rework/developer/explanations/decisions.html @@ -8,7 +8,7 @@ - Architectural Decision Records — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Architectural Decision Records — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/developer/explanations/decisions/0001-record-architecture-decisions.html b/2024-rework/developer/explanations/decisions/0001-record-architecture-decisions.html index 4c6cbd53..269136ad 100644 --- a/2024-rework/developer/explanations/decisions/0001-record-architecture-decisions.html +++ b/2024-rework/developer/explanations/decisions/0001-record-architecture-decisions.html @@ -8,7 +8,7 @@ - 1. Record architecture decisions — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + 1. Record architecture decisions — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/developer/explanations/decisions/0002-switched-to-pip-skeleton.html b/2024-rework/developer/explanations/decisions/0002-switched-to-pip-skeleton.html index 75ac6ace..7036de62 100644 --- a/2024-rework/developer/explanations/decisions/0002-switched-to-pip-skeleton.html +++ b/2024-rework/developer/explanations/decisions/0002-switched-to-pip-skeleton.html @@ -8,7 +8,7 @@ - 2. Adopt python3-pip-skeleton for project structure — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + 2. Adopt python3-pip-skeleton for project structure — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/developer/explanations/decisions/0003-use-substitution-files.html b/2024-rework/developer/explanations/decisions/0003-use-substitution-files.html index f1d3b16f..d46c0577 100644 --- a/2024-rework/developer/explanations/decisions/0003-use-substitution-files.html +++ b/2024-rework/developer/explanations/decisions/0003-use-substitution-files.html @@ -8,7 +8,7 @@ - 3. Use of substitution files to generate EPICS Databases — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + 3. Use of substitution files to generate EPICS Databases — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/developer/explanations/decisions/0004-autosave-req-files.html b/2024-rework/developer/explanations/decisions/0004-autosave-req-files.html index 481507ec..36d85376 100644 --- a/2024-rework/developer/explanations/decisions/0004-autosave-req-files.html +++ b/2024-rework/developer/explanations/decisions/0004-autosave-req-files.html @@ -8,7 +8,7 @@ - 4. How to configure autosave for IOCs — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + 4. How to configure autosave for IOCs — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/developer/explanations/decisions/0005-python-scripting.html b/2024-rework/developer/explanations/decisions/0005-python-scripting.html index f53bc2b4..1ffcbe63 100644 --- a/2024-rework/developer/explanations/decisions/0005-python-scripting.html +++ b/2024-rework/developer/explanations/decisions/0005-python-scripting.html @@ -8,7 +8,7 @@ - 5. Use Python for scripting inside and outside containers — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + 5. Use Python for scripting inside and outside containers — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/developer/how-to/build-docs.html b/2024-rework/developer/how-to/build-docs.html index f804a0d3..e7a9a655 100644 --- a/2024-rework/developer/how-to/build-docs.html +++ b/2024-rework/developer/how-to/build-docs.html @@ -8,7 +8,7 @@ - Build the docs using sphinx — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Build the docs using sphinx — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/developer/how-to/contribute.html b/2024-rework/developer/how-to/contribute.html index ce9d05d4..e675b70a 100644 --- a/2024-rework/developer/how-to/contribute.html +++ b/2024-rework/developer/how-to/contribute.html @@ -8,7 +8,7 @@ - Contributing to the project — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Contributing to the project — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/developer/how-to/make-release.html b/2024-rework/developer/how-to/make-release.html index 582c95af..6d708d38 100644 --- a/2024-rework/developer/how-to/make-release.html +++ b/2024-rework/developer/how-to/make-release.html @@ -8,7 +8,7 @@ - Make a release — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Make a release — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/developer/how-to/update-tools.html b/2024-rework/developer/how-to/update-tools.html index 8df764e0..188c649e 100644 --- a/2024-rework/developer/how-to/update-tools.html +++ b/2024-rework/developer/how-to/update-tools.html @@ -8,7 +8,7 @@ - Update the tools — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Update the tools — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/developer/index.html b/2024-rework/developer/index.html index 20f2a251..7706859a 100644 --- a/2024-rework/developer/index.html +++ b/2024-rework/developer/index.html @@ -8,7 +8,7 @@ - Developer Guide — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Developer Guide — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/developer/reference/standards.html b/2024-rework/developer/reference/standards.html index 371fc076..f85f2753 100644 --- a/2024-rework/developer/reference/standards.html +++ b/2024-rework/developer/reference/standards.html @@ -8,7 +8,7 @@ - Standards — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Standards — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/developer/tutorials/dev-install.html b/2024-rework/developer/tutorials/dev-install.html index 93ed6bdd..706cc36b 100644 --- a/2024-rework/developer/tutorials/dev-install.html +++ b/2024-rework/developer/tutorials/dev-install.html @@ -8,7 +8,7 @@ - Developer Contributing — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Developer Contributing — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/genindex.html b/2024-rework/genindex.html index 78af724e..109c4103 100644 --- a/2024-rework/genindex.html +++ b/2024-rework/genindex.html @@ -7,7 +7,7 @@ - Index — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Index — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -37,7 +37,7 @@ - + diff --git a/2024-rework/index.html b/2024-rework/index.html index c8377d68..d96f7f51 100644 --- a/2024-rework/index.html +++ b/2024-rework/index.html @@ -8,7 +8,7 @@ - epics-containers — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + epics-containers — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/search.html b/2024-rework/search.html index c5366d6a..dfbe5003 100644 --- a/2024-rework/search.html +++ b/2024-rework/search.html @@ -6,7 +6,7 @@ - Search - epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Search - epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -36,7 +36,7 @@ - + diff --git a/2024-rework/searchindex.js b/2024-rework/searchindex.js index 39fe3a44..36dde37e 100644 --- a/2024-rework/searchindex.js +++ b/2024-rework/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["developer/explanations/decisions", "developer/explanations/decisions/0001-record-architecture-decisions", "developer/explanations/decisions/0002-switched-to-pip-skeleton", "developer/explanations/decisions/0003-use-substitution-files", "developer/explanations/decisions/0004-autosave-req-files", "developer/explanations/decisions/0005-python-scripting", "developer/how-to/build-docs", "developer/how-to/contribute", "developer/how-to/make-release", "developer/how-to/update-tools", "developer/index", "developer/reference/standards", "developer/tutorials/dev-install", "index", "user/explanations/docs-structure", "user/explanations/introduction", "user/explanations/ioc-source", "user/explanations/kubernetes_cluster", "user/explanations/net_protocols", "user/explanations/repositories", "user/how-to/builder2ibek", "user/how-to/builder2ibek.support", "user/how-to/contributing", "user/how-to/debug", "user/how-to/ibek-support", "user/how-to/own_tools", "user/how-to/phoebus", "user/how-to/useful_k8s", "user/index", "user/overview", "user/reference/cli", "user/reference/configuration", "user/reference/environment", "user/reference/faq", "user/reference/ioc_helm_chart", "user/reference/k8s_resources", "user/reference/vscode_settings", "user/tutorials/create_beamline", "user/tutorials/create_ioc", "user/tutorials/debug_generic_ioc", "user/tutorials/deploy_example", "user/tutorials/dev_container", "user/tutorials/generic_ioc", "user/tutorials/ibek", "user/tutorials/intro", "user/tutorials/ioc_changes1", "user/tutorials/ioc_changes2", "user/tutorials/ioc_changes3", "user/tutorials/rtems_ioc", "user/tutorials/rtems_setup", "user/tutorials/setup_k8s", "user/tutorials/setup_k8s_new_beamline", "user/tutorials/setup_workstation", "user/tutorials/support_module", "user/tutorials/test_generic_ioc"], "filenames": ["developer/explanations/decisions.rst", "developer/explanations/decisions/0001-record-architecture-decisions.rst", "developer/explanations/decisions/0002-switched-to-pip-skeleton.rst", "developer/explanations/decisions/0003-use-substitution-files.rst", "developer/explanations/decisions/0004-autosave-req-files.rst", "developer/explanations/decisions/0005-python-scripting.rst", "developer/how-to/build-docs.rst", "developer/how-to/contribute.rst", "developer/how-to/make-release.rst", "developer/how-to/update-tools.rst", "developer/index.rst", "developer/reference/standards.rst", "developer/tutorials/dev-install.rst", "index.rst", "user/explanations/docs-structure.rst", "user/explanations/introduction.rst", "user/explanations/ioc-source.rst", "user/explanations/kubernetes_cluster.rst", "user/explanations/net_protocols.rst", "user/explanations/repositories.rst", "user/how-to/builder2ibek.rst", "user/how-to/builder2ibek.support.rst", "user/how-to/contributing.rst", "user/how-to/debug.rst", "user/how-to/ibek-support.rst", "user/how-to/own_tools.rst", "user/how-to/phoebus.rst", "user/how-to/useful_k8s.rst", "user/index.rst", "user/overview.rst", "user/reference/cli.rst", "user/reference/configuration.rst", "user/reference/environment.rst", "user/reference/faq.rst", "user/reference/ioc_helm_chart.rst", "user/reference/k8s_resources.rst", "user/reference/vscode_settings.rst", "user/tutorials/create_beamline.rst", "user/tutorials/create_ioc.rst", "user/tutorials/debug_generic_ioc.rst", "user/tutorials/deploy_example.rst", "user/tutorials/dev_container.rst", "user/tutorials/generic_ioc.rst", "user/tutorials/ibek.rst", "user/tutorials/intro.rst", "user/tutorials/ioc_changes1.rst", "user/tutorials/ioc_changes2.rst", "user/tutorials/ioc_changes3.rst", "user/tutorials/rtems_ioc.rst", "user/tutorials/rtems_setup.rst", "user/tutorials/setup_k8s.rst", "user/tutorials/setup_k8s_new_beamline.rst", "user/tutorials/setup_workstation.rst", "user/tutorials/support_module.rst", "user/tutorials/test_generic_ioc.rst"], "titles": ["Architectural Decision Records", "1. Record architecture decisions", "2. Adopt python3-pip-skeleton for project structure", "3. Use of substitution files to generate EPICS Databases", "4. How to configure autosave for IOCs", "5. Use Python for scripting inside and outside containers", "Build the docs using sphinx", "Contributing to the project", "Make a release", "Update the tools", "Developer Guide", "Standards", "Developer Contributing", "epics-containers", "About the documentation", "Essential Concepts", "Dev Container vs Runtime Container", "Kubernetes Cluster Config", "Channel Access and Other Protocols", "Source and Registry Locations", "Builder2ibek Conversion Tool", "Builder2ibek.support Conversion Tool", "Contributing to the project", "Debug an IOC instance locally", "Updating and Testing ibek-support", "Choose Your Developer Environment", "Viewing Operator Interfaces with Phoebus", "Kubernetes Additional How To\u2019s", "User Guide", "<no title>", "Command Line Interface for IOC Management", "Configuration for epics-containers", "The Environment Configuration File", "Frequently Asked Questions", "IOC Helm Chart Details", "Kubernetes Resources in an IOC Instance", "Recommended VSCode Settings", "Create a Beamline Repository", "Create an IOC Instance", "Debugging Generic IOC Builds", "Deploying and Managing IOC Instances", "Developer Containers", "Create a Generic IOC", "Defining IOC Instances using IBEK", "Tutorials Introduction", "Changing the IOC Instance", "Changing a Generic IOC Part 1", "Changing a Generic IOC Part 2", "RTEMS - Deploying an Example IOC", "RTEMS - Creating a File Server", "Setup a Kubernetes Server", "Create a New Kubernetes Beamline", "Set up a Developer Workstation", "Working with Support Modules", "Testing and Deploying a Generic IOC"], "terms": {"we": [0, 1, 2, 4, 5, 7, 15, 17, 18, 19, 22, 25, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54], "major": 0, "adr": [0, 1], "describ": [0, 1, 3, 15, 17, 27, 34, 37, 38, 42, 48, 49, 51, 54], "michael": [0, 1], "nygard": [0, 1], "below": [0, 12, 15, 17, 18, 34, 39, 41, 42, 48, 49, 51, 52], "i": [0, 3, 4, 5, 7, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 47, 48, 49, 50, 51, 52, 53, 54], "list": [0, 4, 15, 17, 25, 34, 38, 39, 40, 41, 42, 48, 49, 51, 52, 53], "our": [0, 15, 18, 19, 34, 38, 39, 41, 42, 46, 48, 50, 51], "current": [0, 9, 15, 19, 24, 25, 37, 38, 40, 43, 48, 53], "1": [0, 3, 11, 17, 21, 27, 28, 33, 37, 38, 39, 40, 41, 45, 48, 50, 52, 54], "2": [0, 11, 13, 15, 21, 27, 28, 37, 38, 39, 41, 42, 45, 46, 48, 54], "adopt": [0, 42], "python3": [0, 9, 12, 20, 42, 52], "pip": [0, 5, 9, 12, 24, 32, 38, 52], "skeleton": [0, 9], "project": [0, 1, 6, 9, 10, 12, 13, 15, 17, 20, 27, 28, 30, 32, 37, 41, 46, 49, 51, 53, 54], "structur": [0, 9, 15], "3": [0, 11, 12, 17, 32, 37, 38, 41, 42, 45, 52, 53], "us": [0, 1, 2, 4, 10, 11, 12, 15, 18, 19, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "substitut": [0, 15, 24, 34, 37, 38, 43, 51, 52], "file": [0, 4, 7, 15, 19, 21, 22, 24, 26, 28, 29, 30, 34, 35, 36, 37, 38, 39, 40, 41, 43, 45, 46, 48, 50, 51, 54], "gener": [0, 4, 8, 9, 12, 17, 21, 24, 25, 26, 28, 30, 32, 33, 34, 35, 37, 38, 40, 41, 43, 45, 48, 50, 51, 52, 53], "epic": [0, 2, 4, 5, 12, 17, 18, 19, 20, 21, 24, 25, 26, 28, 29, 30, 32, 34, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 51, 53, 54], "databas": [0, 4, 21, 24, 34, 42, 48, 51, 54], "4": [0, 17, 40, 45, 48, 52, 54], "how": [0, 3, 11, 12, 14, 15, 16, 17, 19, 30, 32, 34, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 54], "configur": [0, 15, 17, 18, 27, 28, 30, 37, 38, 39, 40, 41, 46, 48, 49, 51], "autosav": [0, 46, 51], "ioc": [0, 3, 13, 16, 17, 18, 20, 21, 24, 25, 27, 28, 29, 32, 44, 49, 52, 53], "5": [0, 15, 21, 29, 40, 48, 49, 52], "python": [0, 8, 9, 12, 15, 20, 30, 37, 38, 41, 43, 51], "script": [0, 3, 15, 24, 30, 34, 37, 39, 40, 41, 42, 43, 45, 46, 48, 49, 51], "insid": [0, 15, 24, 34, 35, 38, 40, 41, 42, 43, 45, 46, 50, 53], "outsid": [0, 15, 18, 38, 39, 41, 45, 50, 52], "contain": [0, 2, 7, 11, 12, 17, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 42, 43, 44, 45, 46, 48, 49, 50, 51, 53], "date": [1, 2, 3, 4, 5, 13, 24, 34, 37, 39, 40, 48, 49, 50, 53, 54], "2022": [1, 2, 5], "02": [1, 2, 30, 38, 41, 45, 46, 48], "18": [1, 2], "accept": [1, 2, 3, 4, 5], "need": [1, 3, 14, 15, 17, 18, 27, 31, 32, 33, 34, 37, 38, 39, 40, 42, 43, 44, 46, 48, 49, 50, 51, 52, 53, 54], "made": [1, 38, 40, 41, 42, 46, 49, 54], "thi": [1, 2, 3, 5, 6, 8, 9, 11, 12, 14, 15, 17, 18, 19, 20, 21, 24, 26, 27, 29, 30, 31, 32, 34, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "see": [1, 6, 8, 13, 15, 17, 18, 27, 30, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 54], "": [1, 4, 13, 15, 18, 19, 28, 30, 32, 33, 34, 37, 40, 41, 42, 46, 48, 49, 50, 51, 52, 53], "articl": [1, 15], "link": [1, 10, 27, 28, 32, 34, 41, 42, 45, 46, 48, 52, 54], "abov": [1, 15, 18, 27, 29, 34, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52], "To": [1, 8, 9, 12, 17, 18, 28, 30, 34, 35, 38, 40, 41, 42, 43, 44, 45, 46, 48, 50, 51, 53, 54], "creat": [1, 8, 13, 17, 27, 28, 32, 33, 34, 35, 39, 40, 41, 43, 44, 45, 46, 52, 53], "new": [1, 7, 8, 12, 18, 20, 22, 27, 28, 32, 33, 34, 39, 40, 41, 43, 45, 46, 48, 49, 50, 52, 53, 54], "copi": [1, 5, 27, 34, 37, 38, 41, 42, 46, 48, 49, 50], "past": [1, 27, 41, 42, 51], "from": [1, 2, 3, 4, 5, 6, 10, 11, 15, 17, 18, 19, 27, 28, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "exist": [1, 4, 7, 19, 22, 37, 42, 43, 45, 46, 48, 49, 50, 51], "ones": [1, 40], "should": [2, 3, 7, 17, 19, 22, 27, 32, 34, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 54], "follow": [2, 3, 4, 5, 7, 8, 11, 15, 17, 18, 20, 22, 27, 32, 35, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 54], "The": [2, 3, 4, 6, 7, 13, 14, 15, 17, 18, 19, 21, 22, 24, 25, 27, 28, 30, 33, 34, 35, 37, 39, 40, 41, 42, 45, 46, 48, 49, 50, 52, 54], "ensur": [2, 17, 39, 41, 43, 51], "consist": [2, 30, 43], "develop": [2, 3, 13, 15, 19, 27, 28, 30, 37, 38, 39, 43, 45, 46, 48, 54], "environ": [2, 7, 12, 15, 22, 27, 28, 29, 30, 34, 38, 41, 42, 46, 52], "packag": [2, 5, 12, 15, 19, 29, 30, 32, 37, 39, 44, 54], "manag": [2, 5, 13, 15, 17, 19, 27, 28, 29, 38, 39, 44, 46, 48, 51, 52], "have": [2, 4, 5, 7, 12, 15, 17, 18, 19, 20, 21, 22, 25, 27, 32, 34, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "switch": [2, 17], "modul": [2, 3, 4, 9, 15, 17, 19, 21, 28, 32, 33, 34, 37, 38, 39, 40, 41, 43, 45, 46, 48, 51, 52], "fix": [2, 41, 42], "set": [2, 7, 12, 15, 17, 18, 22, 25, 27, 28, 30, 31, 32, 34, 35, 37, 38, 39, 41, 42, 43, 45, 48, 49, 50, 53], "tool": [2, 5, 10, 12, 13, 17, 25, 27, 28, 30, 32, 36, 37, 38, 39, 40, 41, 42, 45, 50, 51, 52], "github": [2, 7, 8, 9, 12, 13, 15, 19, 21, 22, 24, 25, 27, 31, 32, 34, 36, 37, 38, 39, 40, 41, 42, 44, 46, 48, 51, 54], "io": [2, 12, 13, 15, 19, 27, 32, 33, 35, 37, 38, 40, 44, 48, 50, 51, 54], "can": [2, 3, 4, 5, 6, 7, 12, 15, 17, 18, 19, 22, 25, 26, 27, 30, 32, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 54], "pull": [2, 6, 7, 9, 22, 31, 32, 33, 34, 42, 46, 54], "updat": [2, 10, 15, 20, 21, 26, 27, 28, 32, 33, 34, 37, 39, 41, 43, 46, 48, 49, 51, 53, 54], "latest": [2, 9, 24, 27, 40, 44, 54], "techniqu": [2, 9], "As": [2, 11, 17, 42], "mai": [2, 4, 15, 17, 19, 26, 30, 33, 37, 38, 39, 40, 41, 42, 45, 46, 50, 51, 54], "chang": [2, 4, 6, 7, 9, 13, 22, 24, 28, 33, 34, 38, 40, 48, 49, 51, 53, 54], "could": [2, 4, 15, 17, 19, 25, 32, 34, 37, 38, 39, 40, 41, 42, 45, 49, 50, 51, 52, 53, 54], "differ": [2, 14, 15, 17, 32, 33, 37, 39, 41, 48], "lint": 2, "format": [2, 26], "venv": [2, 12, 20, 38, 40, 52], "setup": [2, 9, 12, 17, 27, 28, 30, 37], "ci": [2, 5, 15, 19, 37, 40, 41, 42, 46, 54], "cd": [2, 12, 24, 27, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 51, 54], "2023": [3, 4, 15, 30, 40, 45, 48, 49], "11": [3, 4, 5, 27, 45, 52], "30": [3, 4, 5], "There": [3, 4, 14, 15, 17, 19, 27, 29, 32, 33, 37, 38, 39, 40, 41, 42, 49, 51, 52], "ar": [3, 4, 5, 6, 7, 11, 13, 14, 15, 17, 18, 19, 20, 21, 22, 25, 27, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "two": [3, 15, 18, 19, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 51, 53], "propos": 3, "At": [3, 15, 18, 19, 20, 27, 33, 34, 37, 38, 40, 46, 49, 51], "startup": [3, 15, 24, 34, 40, 43, 46, 48, 49, 51], "ibek": [3, 5, 20, 21, 28, 39, 41, 46, 54], "requir": [3, 4, 5, 12, 14, 15, 17, 18, 27, 29, 30, 33, 37, 39, 41, 42, 43, 44, 45, 46, 48, 50, 51, 52, 54], "instanc": [3, 4, 18, 20, 27, 28, 30, 32, 33, 37, 42, 49, 51, 52], "yaml": [3, 15, 20, 21, 24, 27, 34, 35, 36, 37, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 51], "combin": [3, 15, 17, 43, 46, 50], "definit": [3, 15, 24, 30, 34, 38, 41, 42, 43, 45, 46, 53], "support": [3, 4, 15, 17, 18, 19, 25, 26, 27, 28, 30, 32, 33, 34, 37, 38, 39, 40, 41, 45, 46, 47, 48, 49, 50, 51, 54], "control": [3, 13, 15, 17, 19, 21, 24, 27, 30, 35, 38, 44, 48, 49, 51, 52], "what": [3, 5, 7, 16, 17, 22, 27, 34, 35, 37, 38, 40, 42, 44, 45, 46, 51], "look": [3, 17, 18, 34, 38, 39, 40, 41, 42, 45, 46, 48, 50, 51, 53, 54], "like": [3, 5, 15, 18, 37, 38, 39, 40, 42, 45, 46, 48, 49, 51, 54], "execut": [3, 15, 27, 29, 30, 38, 40, 41, 45, 48, 50], "msi": [3, 24], "dbloadrecord": [3, 45, 48, 54], "call": [3, 5, 14, 15, 30, 34, 38, 42, 43, 45, 46, 48, 49, 54], "pass": [3, 15, 17, 27, 30, 34, 38, 40], "all": [3, 7, 15, 17, 18, 22, 24, 29, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 52, 53], "macro": 3, "line": [3, 5, 11, 15, 27, 28, 32, 37, 38, 39, 40, 42, 45, 48, 50, 51, 52], "remov": [3, 15, 39, 41, 42, 43, 45, 46, 50, 51, 54], "some": [3, 15, 17, 18, 27, 37, 38, 40, 41, 42, 43, 44, 45, 46, 48, 50, 51, 53], "templat": [3, 4, 15, 21, 32, 34, 35, 37, 38, 39, 40, 41, 42, 43, 46, 48, 49, 51, 53, 54], "those": [3, 15, 20, 34, 37, 38, 39, 42, 43], "pmac": 3, "pattern": [3, 17, 42], "p": [3, 12, 21, 30, 38, 40, 45, 52, 54], "m": [3, 12, 27, 36, 37, 45, 52, 54], "c": [3, 37, 40, 41, 48], "m1": 3, "addr": [3, 21, 27, 38, 48, 54], "desc": [3, 45, 48], "motor": 3, "A": [3, 17, 18, 31, 33, 34, 38, 39, 41, 48, 50, 51, 54], "includ": [3, 6, 15, 28, 38, 39, 40, 41, 42, 46, 48, 50, 51], "pmacdirectmotor": 3, "command": [3, 5, 15, 27, 28, 32, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 54], "which": [3, 4, 5, 6, 9, 12, 15, 17, 18, 21, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 48, 50, 51, 52], "doe": [3, 4, 15, 17, 37, 39, 41, 46, 48, 52], "recognis": 3, "an": [3, 6, 9, 15, 17, 18, 20, 21, 24, 27, 28, 30, 32, 33, 34, 37, 41, 42, 43, 44, 45, 46, 49, 51, 52, 54], "extra": [3, 27, 45, 48, 51], "subst": [3, 15, 38], "seen": [3, 15, 41], "runtim": [3, 15, 28, 30, 34, 38, 39, 40, 41, 46, 48, 51], "directori": [3, 6, 11, 15, 30, 37, 41, 42, 48, 51, 54], "In": [3, 15, 17, 18, 34, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 54], "realiti": 3, "easier": [3, 5, 38, 41], "read": [3, 5, 21, 42, 44], "than": [3, 17, 19, 33, 37, 46, 54], "full": [3, 30, 39], "so": [3, 12, 27, 32, 33, 37, 38, 39, 40, 41, 42, 43, 45, 48, 49, 50, 51, 52, 54], "debug": [3, 15, 28, 30, 32, 38, 40, 41, 48, 52, 53], "final": [3, 27, 35, 38, 39, 48, 54], "who": [3, 17, 20, 21], "unabl": 3, "reason": [3, 4, 5, 18, 19, 30, 39, 41, 42, 46, 50, 51], "suppli": [3, 4, 8, 34, 38, 39, 41, 42, 43, 49, 51, 54], "own": [3, 4, 12, 15, 17, 32, 34, 37, 38, 40, 41, 42, 45, 46, 51, 52, 54], "expand": [3, 35], "much": [3, 5, 15, 19, 30, 37, 39, 42, 45], "more": [3, 5, 9, 14, 15, 27, 28, 30, 32, 33, 37, 40, 42, 46, 52, 54], "compact": 3, "import": [3, 15, 32, 41, 42, 48, 50, 51, 54], "due": [3, 39], "1mb": 3, "limit": [3, 25, 46, 49], "k8": [3, 17, 18, 27, 50, 51], "configmap": 3, "choic": [4, 15, 52], "pv": [4, 21, 27, 34, 38, 45, 54], "ad": [4, 15, 32, 33, 38, 39, 40, 42, 43, 45, 48, 54], "info": 4, "tag": [4, 8, 15, 30, 37, 40, 42, 45, 48, 54], "raw": [4, 27, 40], "req": 4, "go": [4, 8, 34, 37, 38, 39, 40, 41, 42, 45, 46, 48, 50, 51, 52, 54], "http": [4, 6, 8, 9, 13, 15, 17, 19, 21, 25, 27, 31, 32, 33, 35, 37, 38, 40, 42, 44, 50, 51, 52, 54], "anl": 4, "gov": 4, "tech": 4, "talk": [4, 13, 15, 17, 51], "2019": 4, "msg01600": 4, "php": 4, "would": [4, 15, 17, 18, 27, 32, 33, 34, 37, 38, 39, 41, 42, 43, 44, 45, 48, 51, 52], "upstream": [4, 15, 17, 42], "most": [4, 7, 14, 15, 17, 22, 31, 34, 36, 39, 40, 41, 42, 44, 48, 51, 52], "default": [4, 15, 21, 30, 33, 34, 35, 38, 39, 41, 42, 43, 45, 50, 52, 54], "alreadi": [4, 37, 38, 39, 40, 41, 42, 43, 46, 48, 49, 50, 51, 52], "mani": [4, 15, 17, 38, 42, 52], "common": [4, 5, 17, 32, 39, 42], "facil": [4, 15, 17, 19, 29, 32, 37, 42, 51], "expect": [4, 38, 40, 51], "autogener": 4, "therefor": [4, 19, 38, 39, 40, 41, 42, 46, 48, 49], "overrid": [4, 15, 30, 38, 41, 43, 51], "add": [4, 13, 15, 17, 25, 32, 33, 37, 38, 39, 41, 43, 45, 46, 48, 54], "But": [4, 34, 37, 38, 42], "simpler": 4, "just": [4, 30, 34, 39, 40, 41, 42, 43, 48, 49, 50, 51, 52, 54], "mechan": [4, 20, 41, 49], "come": [4, 15, 27, 31, 32, 37, 38, 39, 41, 43, 45, 46, 52], "Then": [4, 27, 32, 37, 39, 40, 42, 48, 52, 54], "beamlin": [4, 15, 18, 19, 20, 28, 30, 32, 33, 34, 35, 38, 42, 45, 46, 48, 49, 50, 52], "level": [4, 41, 43, 51], "These": [4, 5, 12, 15, 17, 19, 27, 32, 35, 37, 38, 41, 42, 43, 44, 45, 50, 51, 54], "simpli": [4, 38, 40, 41, 50, 52], "take": [4, 12, 13, 34, 38, 41, 42, 52, 54], "form": [4, 18, 38], "same": [4, 8, 15, 17, 38, 39, 40, 41, 42, 45, 46, 48, 49, 51], "name": [4, 17, 21, 27, 30, 32, 34, 38, 40, 42, 43, 45, 46, 48, 49, 50, 51, 52], "one": [4, 7, 14, 15, 17, 22, 31, 32, 33, 35, 37, 38, 39, 40, 41, 45, 46, 48, 50, 51, 54], "everyth": [4, 17, 37, 42, 50, 52], "nice": [4, 15, 27, 41], "simpl": [4, 15, 17, 39, 45, 46, 48, 53, 54], "ec": [5, 15, 19, 20, 30, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 51, 52], "cli": [5, 25, 30, 32, 37, 38, 40, 41, 50, 51], "do": [5, 12, 15, 17, 18, 24, 27, 30, 32, 34, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 50, 51, 52, 54], "docker": [5, 15, 27, 30, 32, 37, 38, 40, 41, 44, 45, 51, 54], "helm": [5, 19, 28, 29, 30, 32, 33, 41, 44, 48, 49], "kubectl": [5, 15, 27, 30, 32, 35, 49, 51], "compil": [5, 15, 27, 34, 38, 41, 43, 45], "etc": [5, 17, 21, 27, 37, 41, 42, 43, 50], "seem": 5, "natur": 5, "fit": [5, 7, 22, 37, 42], "bash": [5, 15, 30, 34, 37, 40, 42], "featur": [5, 15, 17, 39, 41, 43, 49, 54], "were": [5, 17, 18, 33, 40, 41, 42, 45, 54], "origin": [5, 17, 31, 37, 41, 42, 45, 46, 54], "implement": [5, 15, 18, 38, 50], "convert": [5, 20, 21], "provid": [5, 9, 15, 17, 18, 27, 30, 32, 33, 34, 38, 39, 41, 43, 46, 49, 50, 51, 54], "richer": 5, "argument": [5, 30, 38, 42], "also": [5, 6, 7, 10, 15, 17, 18, 19, 22, 27, 28, 33, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 48, 49, 50, 51, 52, 54], "rich": 5, "help": [5, 14, 15, 17, 30, 40, 42, 52], "error": [5, 39, 40, 41, 42, 46, 51], "vastli": 5, "improv": [5, 13, 14], "except": [5, 8, 17, 45, 51], "handl": [5, 7, 22], "unit": 5, "test": [5, 12, 15, 17, 19, 25, 28, 30, 37, 39, 40, 42, 43, 46, 48, 49, 50, 52], "framework": [5, 13, 15, 38], "allow": [5, 15, 17, 18, 19, 41, 42, 45, 46, 50, 51], "good": [5, 14, 15, 38, 39, 41, 42, 46, 50, 52, 54], "coverag": [5, 36], "continu": [5, 17, 19, 27, 29, 37, 39, 41, 48, 52], "integr": [5, 19, 29, 36, 37, 45, 52], "complex": [5, 41, 45], "string": [5, 45], "clear": [5, 37, 41], "version": [5, 9, 15, 21, 29, 30, 32, 33, 34, 37, 39, 40, 41, 42, 45, 46, 48, 52, 54], "strategi": [5, 15, 29], "instal": [5, 15, 17, 20, 24, 28, 30, 37, 38, 39, 41, 42, 43, 45, 48, 49, 51, 54], "mean": [5, 9, 15, 18, 32, 38, 39, 40, 41, 42, 43, 48, 50, 54], "you": [5, 6, 7, 8, 12, 13, 15, 18, 19, 22, 24, 25, 27, 30, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "check": [5, 7, 9, 22, 37, 38, 40, 41, 54], "run": [5, 6, 9, 10, 12, 15, 17, 18, 27, 30, 32, 34, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 51, 54], "report": 5, "bug": [5, 39, 41], "against": [5, 15, 37, 40, 41, 42, 51], "specif": [5, 15, 19, 37, 38, 39, 40, 42, 51], "code": [5, 6, 7, 11, 12, 15, 21, 22, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 52, 54], "maintain": [5, 15, 17, 42], "becaus": [5, 15, 17, 18, 19, 30, 33, 37, 38, 39, 40, 41, 42, 45, 46, 50, 51, 52, 54], "thei": [5, 14, 15, 17, 19, 30, 33, 37, 38, 40, 41, 42, 43, 44, 45, 46, 48, 49, 51, 52, 54], "multipl": [5, 9, 15, 17, 18, 19, 30, 32, 41, 43, 45, 46, 48, 51], "without": [5, 15, 38, 41, 44, 45], "around": [5, 15, 17, 30, 41], "alwai": [5, 15, 17, 19, 33, 40, 42, 48, 52], "prefer": [5, 17, 25, 38, 46, 50, 52], "keep": [5, 9, 17, 33, 39, 41, 42, 46, 54], "minimum": [5, 17], "reliabl": 5, "base": [6, 15, 17, 40, 41, 42, 43, 50, 53, 54], "tox": [6, 12], "e": [6, 12, 15, 19, 20, 21, 27, 30, 32, 38, 41, 42, 45, 48, 51], "static": [6, 49], "api": [6, 11, 15, 17, 28, 30, 37, 50], "docstr": [6, 11], "document": [6, 7, 10, 12, 15, 17, 22, 27, 28, 31, 38, 39, 48, 50], "standard": [6, 7, 10, 15, 17, 22, 25, 40, 42], "built": [6, 15, 17, 34, 38, 39, 41, 42, 46, 54], "html": [6, 36, 38, 44], "open": [6, 7, 12, 15, 17, 18, 22, 36, 37, 38, 39, 41, 42, 44, 45, 46, 51, 52], "local": [6, 12, 15, 24, 27, 28, 30, 32, 33, 35, 37, 38, 39, 41, 42, 46, 48, 51, 52], "web": [6, 15, 32, 51], "brows": [6, 27, 41], "firefox": 6, "index": [6, 38], "process": [6, 11, 15, 17, 18, 41, 45, 53], "watch": [6, 42], "your": [6, 7, 13, 15, 22, 27, 28, 34, 35, 37, 38, 40, 41, 42, 43, 46, 49, 51, 52, 54], "rebuild": [6, 39, 41, 43, 54], "whenev": [6, 42], "reload": 6, "ani": [6, 7, 9, 15, 22, 33, 34, 37, 38, 39, 40, 41, 42, 43, 44, 45, 50, 51, 52, 54], "browser": [6, 36], "page": [6, 8, 11, 13, 15, 20, 21, 26, 34, 37, 38, 40, 43, 51, 52, 54], "view": [6, 15, 28], "localhost": 6, "8000": 6, "If": [6, 7, 13, 15, 22, 25, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 50, 51, 52, 53, 54], "make": [6, 7, 10, 15, 17, 19, 22, 27, 33, 34, 37, 38, 40, 41, 42, 43, 45, 46, 48, 49, 51, 52, 53], "sourc": [6, 12, 13, 15, 24, 28, 29, 32, 33, 37, 38, 40, 41, 42, 43, 44, 46, 51, 52], "too": [6, 41, 45, 54], "tell": [6, 34, 35, 38, 39, 42, 46, 48, 50, 51], "src": [6, 41, 42], "welcom": [7, 22, 44], "request": [7, 9, 15, 17, 18, 22, 27, 38, 42, 46, 51], "through": [7, 12, 15, 17, 22, 25, 30, 37, 41, 43, 44, 48, 50, 52, 53], "pleas": [7, 8, 11, 13, 22, 49], "befor": [7, 22, 38, 40, 41, 45, 46, 48, 49, 51, 52, 54], "great": [7, 22], "idea": [7, 15, 22, 39, 46], "involv": [7, 22, 32, 38, 45], "big": [7, 22], "ticket": [7, 22], "want": [7, 22, 32, 34, 37, 38, 39, 41, 45, 46, 48, 51], "sure": [7, 17, 22, 27, 37, 40, 41, 42, 45, 51, 52], "don": [7, 15, 22, 40, 41, 48, 52, 54], "t": [7, 14, 15, 22, 40, 41, 48, 52, 54], "spend": [7, 22], "time": [7, 15, 17, 22, 30, 32, 37, 38, 39, 41, 42, 43, 45, 52, 54], "someth": [7, 9, 22, 40, 41, 42, 43, 54], "might": [7, 22, 41, 42, 52], "scope": [7, 22], "offer": [7, 22, 27, 50], "place": [7, 20, 22, 31, 34, 37, 38, 39, 40, 41, 42, 43, 45, 49, 51, 52], "ask": [7, 22, 28, 32, 35, 51], "question": [7, 22, 28], "share": [7, 15, 17, 19, 22, 29, 38, 41, 42, 46, 49], "end": [7, 22, 32, 40, 42, 45, 46], "obviou": [7, 22], "when": [7, 12, 15, 18, 22, 26, 27, 30, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 46, 48, 49, 50, 51, 52], "close": [7, 9, 22, 40], "rais": [7, 22], "instead": [7, 15, 22, 24, 25, 33, 37, 40, 41, 46, 48, 49, 52], "inform": [7, 14, 15, 22, 32, 42, 52], "up": [7, 10, 12, 15, 17, 22, 27, 28, 30, 31, 32, 33, 36, 38, 42, 43, 45, 48, 49, 50, 54], "build": [7, 10, 11, 13, 15, 22, 24, 27, 28, 29, 30, 38, 41, 43, 44, 45, 46, 48, 53, 54], "doc": [7, 10, 11, 12, 13, 15, 17, 22, 35, 44, 50, 52], "checklist": 8, "choos": [8, 12, 15, 27, 28, 30, 37, 42, 43, 45, 46, 51, 52, 53], "pep440": 8, "compliant": 8, "number": [8, 15, 18, 32, 33, 37, 38, 39, 40, 48, 49], "pep": 8, "org": [8, 19, 37, 38, 44, 52], "0440": 8, "draft": [8, 24, 51], "click": [8, 12, 37, 40, 41, 42, 46, 51, 52, 54], "chose": 8, "note": [8, 13, 21, 24, 27, 28, 33, 37, 38, 39, 40, 41, 42, 43, 48, 49, 50, 52], "review": [8, 40, 51], "edit": [8, 27, 32, 37, 38, 39, 41, 42, 43, 48, 50, 51, 54], "titl": [8, 11, 43, 54], "publish": [8, 15, 38, 39, 41, 42, 46], "push": [8, 15, 32, 37, 39, 40, 41, 45, 46, 48, 54], "main": [8, 17, 19, 27, 40, 42, 54], "branch": [8, 15, 40, 42, 43, 51], "ha": [8, 9, 15, 17, 18, 25, 27, 33, 34, 38, 39, 40, 41, 42, 43, 45, 46, 50, 51, 52, 54], "effect": [8, 51], "get": [8, 10, 12, 13, 15, 17, 18, 24, 30, 37, 39, 40, 41, 42, 44, 48, 49, 50, 51, 52, 54], "option": [8, 15, 27, 30, 38, 41, 50], "merg": [9, 42], "sync": 9, "between": [9, 15, 18, 27, 32, 33, 39, 42, 45, 46, 51], "git": [9, 12, 15, 19, 24, 30, 32, 36, 37, 41, 42, 43, 45, 46, 51, 54], "rebas": 9, "fals": [9, 41], "com": [9, 12, 15, 17, 19, 21, 24, 27, 31, 32, 37, 38, 40, 41, 42, 44, 46, 51, 52, 54], "diamondlightsourc": [9, 42], "conflict": 9, "indic": [9, 37, 40], "area": [9, 34], "where": [9, 15, 32, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 51], "detail": [9, 12, 15, 17, 18, 28, 30, 33, 37, 38, 40, 41, 42, 46, 48, 51, 52], "split": [10, 13, 28, 37], "four": [10, 14, 28], "categori": [10, 28, 39], "access": [10, 15, 17, 27, 28, 40, 41, 43, 48, 49, 50, 51, 52], "side": [10, 17, 24, 28, 41], "bar": [10, 28], "contribut": [10, 13, 19, 28, 38, 45], "sphinx": [10, 11, 12, 15], "releas": [10, 21, 27, 28, 37, 38, 39, 40, 41, 42], "practic": [10, 15, 28, 29, 41], "step": [10, 12, 15, 27, 28, 40, 41, 42, 43, 45, 46, 48, 53], "dai": 10, "dev": [10, 12, 24, 25, 27, 28, 30, 36, 39, 41, 42, 43, 46, 48], "task": 10, "architectur": [10, 15, 17, 27, 44, 48], "decis": 10, "record": [10, 15, 34, 45, 48, 54], "why": [10, 16, 18, 28, 36, 46], "technic": [10, 14, 28], "materi": [10, 28], "defin": [11, 15, 28, 32, 34, 35, 37, 38, 45, 49, 54], "repositori": [11, 21, 24, 28, 29, 32, 34, 35, 36, 38, 39, 40, 41, 42, 46, 48, 49], "pre": [11, 38], "napoleon": 11, "extens": [11, 38, 41, 52], "googl": [11, 15], "style": 11, "consid": [11, 17, 41, 46, 51], "type": [11, 12, 15, 21, 30, 38, 39, 40, 42, 43, 45, 46, 47, 48, 49, 50, 53], "hint": 11, "function": [11, 14, 15, 30, 32, 37, 38, 40, 43, 46, 52], "signatur": 11, "For": [11, 15, 18, 19, 27, 30, 32, 35, 37, 38, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 54], "exampl": [11, 15, 17, 18, 19, 24, 27, 28, 30, 32, 33, 35, 37, 38, 39, 41, 42, 43, 45, 49, 51, 52, 54], "def": [11, 21, 24, 38, 39, 41, 43, 45, 54], "func": 11, "arg1": 11, "str": [11, 21, 38, 45], "arg2": 11, "int": [11, 21, 38], "bool": 11, "summari": [11, 41], "extend": 11, "descript": [11, 13, 15, 21, 24, 34, 35, 36, 38, 40, 41, 42, 45, 48, 51], "arg": [11, 21, 30, 38, 45], "return": [11, 27], "valu": [11, 15, 21, 32, 34, 35, 37, 41, 45, 48, 49, 51, 54], "true": [11, 17, 18, 30, 36, 41, 48, 51], "extract": [11, 15, 38, 40, 41], "underlin": 11, "convent": [11, 37, 42, 51], "headl": 11, "head": [11, 35, 39, 40], "guid": [11, 13, 14, 38, 44, 52], "onli": [12, 15, 17, 18, 20, 21, 24, 32, 33, 34, 35, 37, 38, 40, 41, 42, 48, 50, 54], "howev": [12, 17, 18, 33, 37, 38, 39, 40, 41, 42, 44, 45, 49, 51, 52], "virtual": [12, 15, 17, 18, 29, 37, 40, 50, 52], "other": [12, 15, 17, 19, 25, 26, 28, 32, 34, 38, 39, 40, 41, 42, 45, 49, 50, 51, 54], "them": [12, 15, 17, 19, 29, 32, 33, 37, 38, 39, 41, 42, 43, 46, 51, 54], "instruct": [12, 15, 25, 27, 30, 35, 37, 40, 42, 45, 50, 51, 52], "minim": [12, 25], "onc": [12, 21, 38, 40, 41, 42, 48, 49, 51, 52, 53, 54], "complet": [12, 15, 31, 32, 34, 37, 38, 41, 46, 48, 51, 54], "first": [12, 13, 27, 32, 37, 38, 39, 40, 41, 42, 46, 48, 50, 51, 52, 54], "either": [12, 52], "host": [12, 15, 18, 38, 41, 45, 50, 51, 52], "machin": [12, 17, 38, 40, 41, 50, 51], "8": [12, 42, 52], "later": [12, 27, 38, 40, 41, 45, 52], "under": [12, 15, 18, 37, 38, 39, 41, 46], "vscode": [12, 25, 28, 37, 38, 39, 40, 41, 42, 45, 46], "virtualenv": 12, "bin": [12, 20, 27, 32, 38, 40, 42, 48, 52], "activ": [12, 38, 40, 52, 54], "devcontain": [12, 24, 25, 30, 39, 41, 42, 45, 50, 52], "reopen": [12, 41, 42, 46], "prompt": [12, 39, 40, 41, 45, 46, 48, 50], "termin": [12, 36, 39, 40, 41, 45, 48], "graph": [12, 36], "tree": [12, 36, 41], "pipdeptre": 12, "now": [12, 13, 37, 38, 39, 40, 41, 42, 46, 48, 49, 50, 51, 52, 54], "organ": [13, 15, 37], "hold": [13, 15, 39, 54], "collect": [13, 17, 31], "deploi": [13, 15, 17, 27, 28, 29, 30, 32, 33, 35, 37, 38, 44, 45, 46, 49, 52], "container": [13, 19, 41, 44], "essenti": [13, 27, 28, 41, 44], "concept": [13, 28, 35, 44, 51], "comment": [13, 42], "suggest": [13, 18, 24, 32, 53], "wiki": 13, "issu": [13, 17, 18, 39, 40, 54], "tutori": [13, 14, 25, 30, 32, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "being": [13, 30, 51, 54], "work": [13, 17, 19, 20, 26, 28, 30, 33, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 48, 50, 51, 52, 54], "few": [13, 17, 34, 37, 39, 41, 48], "avail": [13, 15, 17, 24, 30, 33, 37, 38, 39, 40, 41, 42, 44, 45, 49, 51, 52, 54], "warn": [13, 45, 51], "about": [13, 28, 34, 37, 41, 42, 46], "out": [13, 24, 27, 32, 34, 39, 40, 41, 42, 43, 44, 48, 49, 50, 53], "interest": [13, 17, 40, 50, 52], "discuss": [13, 18, 31, 32, 39, 43], "system": [13, 15, 17, 19, 29, 30, 32, 37, 39, 41, 43, 50, 51, 52], "brief": 13, "statu": [13, 15, 18, 27, 30, 40], "join": 13, "oxfordshir": 13, "meet": 13, "nov": 13, "icalepc": 13, "2021": [13, 50], "paper": 13, "kubernet": [13, 18, 28, 29, 30, 33, 34, 37, 38, 39, 40, 41, 42, 43, 44, 46, 48, 49], "section": [13, 17, 30, 32, 33, 37, 38, 39, 40, 41, 43, 50, 54], "user": [13, 15, 17, 19, 20, 21, 27, 32, 33, 36, 37, 40, 41, 42, 48, 49, 50, 51, 52, 54], "back": [13, 32, 33, 39, 40, 41, 46, 50, 52], "grand": 14, "unifi": 14, "theori": 14, "david": 14, "la": 14, "secret": [14, 50], "understood": 14, "order": [14, 17, 18, 34, 37, 41, 48, 51], "write": [14, 36, 38, 41, 42], "softwar": [14, 15, 29, 44, 50], "isn": 14, "thing": [14, 15, 32, 41, 46, 51, 54], "refer": [14, 15, 32, 38, 42, 43, 45], "explan": [14, 18, 37, 43, 46, 51], "repres": [14, 15, 34, 37, 38, 48, 49], "purpos": [14, 37, 40, 41, 48, 49, 51, 54], "approach": [14, 15, 18, 37, 39, 41, 48], "creation": 14, "understand": [14, 27, 30, 41], "implic": 14, "often": [14, 33, 39], "immens": 14, "topic": [14, 38, 44], "appli": [15, 27, 29, 35, 50], "modern": [15, 29, 50], "industri": [15, 29], "best": [15, 29, 32, 42, 44, 51], "deliveri": [15, 29], "theme": [15, 29], "lightweight": [15, 29, 48], "central": [15, 17, 29, 32], "orchestr": [15, 17, 29, 44, 51], "chart": [15, 19, 28, 29, 33, 35, 41, 48, 49], "asset": [15, 19, 29, 37, 38, 41, 46], "No": [15, 29, 42], "automat": [15, 29], "deliv": [15, 29], "oci": [15, 29], "registri": [15, 28, 29, 33, 39, 51, 54], "each": [15, 17, 32, 33, 37, 38, 40, 41, 42, 43, 45, 48, 49, 50, 51, 52], "save": [15, 30, 33, 38, 39, 42, 43], "public": [15, 19, 42, 54], "privat": [15, 19], "dockerhub": 15, "initi": [15, 18, 26, 30, 46, 51], "servic": [15, 17, 18, 27, 32, 46, 48, 51], "interchang": 15, "thu": [15, 42, 48, 49], "podman": [15, 30, 32, 38, 40, 41, 44, 45, 51, 54], "job": [15, 40], "explain": [15, 16, 27], "relationship": [15, 33], "semaphoreci": 15, "blog": 15, "v": [15, 28, 30, 38, 46], "outcom": 15, "alter": [15, 41], "suit": [15, 32, 51], "infrastructur": 15, "dl": [15, 18, 19, 20, 21, 32, 33, 37, 40, 41, 42, 48, 49, 50, 52, 54], "abl": [15, 17, 33, 40, 41, 42, 45, 48, 50], "vanilla": 15, "longer": [15, 38], "fork": [15, 42, 46], "princip": 15, "present": [15, 20, 24, 37, 48, 49], "here": [15, 24, 25, 28, 32, 34, 37, 38, 39, 41, 42, 44, 50, 51, 52, 53], "connect": [15, 17, 18, 33, 48, 49, 50], "given": [15, 18, 30, 34, 38, 40, 49], "class": [15, 24, 34, 37, 38], "devic": [15, 17, 34, 37, 38, 42, 46, 48, 53], "ghcr": [15, 19, 32, 37, 38, 40, 48, 51], "adaravi": 15, "linux": [15, 21, 38, 39, 40, 42, 44, 48, 49, 50, 52], "10": [15, 21, 27, 30, 33, 36, 40, 42, 49, 50, 52, 54], "areadetector": [15, 38, 39, 41, 42, 54], "driver": [15, 38], "gige": [15, 18], "camera": [15, 38], "load": [15, 17, 18, 37, 40, 45, 48, 49, 51, 52, 54], "map": [15, 32], "mount": [15, 16, 34, 39, 41, 43, 48], "filesystem": [15, 38, 40, 41, 42, 48, 49, 51], "point": [15, 17, 27, 31, 32, 39, 40, 42, 49, 51, 52], "config": [15, 24, 27, 28, 34, 37, 40, 41, 42, 43, 45, 46, 48, 50, 51, 54], "bootstrap": 15, "uniqu": [15, 34, 38], "properti": 15, "content": [15, 42, 45, 54], "st": [15, 34, 38, 43, 45, 48, 54], "cmd": [15, 34, 38, 43, 45, 48, 54], "shell": [15, 38, 39, 41, 45, 48, 51, 52, 54], "start": [15, 17, 27, 28, 30, 34, 38, 39, 42, 43, 44, 45, 48, 50, 51, 52, 53, 54], "sh": [15, 27, 30, 32, 34, 38, 39, 40, 41, 42, 43, 44, 45, 50, 51, 54], "fulli": [15, 54], "reduc": [15, 17, 33], "disk": [15, 50, 51], "It": [15, 17, 18, 20, 24, 27, 30, 32, 33, 34, 35, 37, 38, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52], "throughout": 15, "term": 15, "word": [15, 17], "context": 15, "ambigu": 15, "easili": [15, 41], "effici": [15, 42], "across": [15, 17, 38, 51], "cluster": [15, 18, 27, 28, 33, 34, 35, 40, 44, 48, 49, 52], "resourc": [15, 28, 34, 37, 44, 49, 50], "schedul": [15, 17, 51], "onto": [15, 41], "suitabl": [15, 18], "upon": [15, 39, 40, 54], "15": [15, 48], "year": [15, 37, 42], "experi": [15, 38, 50], "product": [15, 17, 33, 37, 50, 51, 52], "workload": [15, 35], "breed": 15, "commun": [15, 18, 19, 50], "sinc": [15, 17, 18, 38, 39, 52], "wa": [15, 18, 37, 38, 39, 41, 42, 48], "2014": 15, "todai": 15, "far": 15, "domin": 15, "technologi": 15, "wai": [15, 18, 28, 30, 32, 39, 40, 41, 42, 43, 49, 51], "auto": [15, 26, 33, 36, 38, 48, 51, 54], "server": [15, 17, 18, 21, 28, 32, 38, 40, 41, 45, 48, 52, 53], "manual": [15, 41, 46], "stop": [15, 41, 45, 48, 51], "monitor": [15, 17, 42, 48, 49, 51], "rollback": 15, "previou": [15, 33, 39, 40, 41, 45, 46, 48, 51, 54], "alloc": [15, 17, 38], "adequ": [15, 41], "failov": 15, "anoth": [15, 39, 45], "soft": [15, 41, 45, 48], "ti": [15, 33], "hardwar": [15, 37, 40], "log": [15, 17, 32, 37, 38, 48, 49, 51], "histor": [15, 42], "via": [15, 17, 41, 46, 48, 51], "graylog": [15, 17], "interact": [15, 32, 33, 38, 48, 50], "its": [15, 17, 18, 27, 35, 37, 38, 42, 43, 46, 51, 52], "directli": [15, 17, 40, 48], "distribut": [15, 17, 20, 27, 50, 52], "replac": [15, 17, 37, 38, 41, 42, 43, 50, 52, 54], "stack": [15, 17], "find": [15, 30, 37, 39, 40, 42, 51], "variou": 15, "solut": [15, 39, 45], "been": [15, 17, 25, 39, 40, 41, 42, 45, 50, 51, 52], "portain": [15, 52], "www": [15, 44], "paid": [15, 52], "excel": [15, 41, 52], "visibl": [15, 36, 41], "interfac": [15, 17, 21, 28, 40, 52], "veri": [15, 19, 27, 39, 41, 45, 48, 50, 53, 54], "easi": [15, 17, 38, 42, 50], "downsid": [15, 18], "decid": [15, 50], "popular": 15, "applic": [15, 17, 18, 26, 32], "within": [15, 17, 18, 27, 43, 50, 52], "store": [15, 19, 33, 37, 49, 51], "histori": [15, 32], "acceler": [15, 17, 19, 24, 32, 37, 48, 50, 51], "domain": [15, 17, 24, 30, 32, 34, 37, 40, 41, 48, 49, 50, 51], "folder": [15, 16, 24, 30, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 51, 52, 54], "Such": [15, 52], "zip": 15, "redund": 15, "perform": [15, 17, 27, 37, 42, 45, 46], "clone": [15, 24, 37, 39, 41, 42, 46, 51, 54], "temporari": [15, 40, 41], "addition": 15, "result": [15, 38, 39, 42, 48], "itself": [15, 17, 18, 33, 37, 39, 41, 49], "re": [15, 38, 40, 42, 46], "held": [15, 48, 51], "done": [15, 17, 37, 38, 39, 40, 41, 42, 45, 46, 48, 51], "special": [15, 17], "locat": [15, 17, 20, 28, 38, 39, 41, 42, 51], "legaci": [15, 27], "reli": [15, 19], "heavili": 15, "know": [15, 18, 38, 40, 51], "credenti": [15, 51], "both": [15, 17, 19, 32, 37, 40, 48, 49, 50], "cloud": [15, 17, 33, 50, 51], "premis": [15, 33], "dure": [15, 41, 43, 45], "poc": 15, "action": [15, 19, 40, 42, 54], "gitlab": [15, 17, 19, 24, 51, 54], "typic": [15, 17, 18, 28, 37], "boilerpl": [15, 34, 41, 42, 48], "custom": [15, 30, 34, 51], "boot": [15, 24, 27, 41, 42, 49], "depend": [15, 34, 37, 38, 39, 41, 43, 51], "element": [15, 41], "u": [15, 17, 32, 38, 39, 41, 42, 43, 50, 54], "clean": [15, 50], "direct": [15, 17, 18, 40], "eventu": [15, 17, 37, 48], "simul": [15, 34, 37, 38, 40], "commit": [15, 37, 41, 42, 45, 54], "prepar": 15, "deploy": [15, 17, 35, 37, 40, 48, 50, 51, 52], "launch": [15, 27, 30, 37, 39, 42, 43, 45, 52, 54], "verifi": [15, 37, 38, 40, 45, 48, 49, 51, 54], "valid": [15, 37, 38, 54], "real": [15, 30, 37, 40], "target": [15, 17, 26, 30, 32, 38, 40, 41, 48], "x86_64": [15, 21, 39, 42], "rtem": [15, 28, 39], "mvme5500": [15, 48], "g": [15, 19, 27, 30, 32, 41, 42, 48, 51], "usb": 15, "pcie": 15, "theses": 15, "arm64": [15, 27], "nativ": 15, "futur": [15, 18, 24, 26, 40, 42, 48, 49], "gui": [15, 21, 26], "engin": [15, 17, 26, 30, 33], "screen": [15, 26, 27, 33, 51, 54], "helper": [15, 52], "entri": [15, 38, 40, 45, 51, 52], "wrapper": [15, 30], "teach": [15, 37], "show": [15, 18, 30, 32, 38, 39, 40, 41, 45, 46, 48, 49, 51], "builder": [15, 20, 21, 42, 43], "fetch": [15, 32, 38, 41, 42, 46], "artifact": 15, "variabl": [15, 18, 27, 34, 39, 45, 51], "give": [15, 17, 18, 27, 37, 41, 43, 54], "metadata": [15, 27, 30, 34, 50], "db": [15, 21, 27, 38, 41, 45, 46, 48, 54], "blueski": 15, "ophyd": 15, "bob": 15, "adl": 15, "edm": [15, 27, 54], "todo": [16, 20, 21, 23, 25, 27, 31, 33, 35, 36, 37, 41, 42, 43, 45, 46, 47, 51, 53, 54], "xxxx": 16, "happen": [16, 39], "three": [17, 42], "topologi": 17, "per": [17, 18, 41, 48, 51], "singl": [17, 18, 27, 37, 38, 42, 43, 46, 49, 50, 54], "k3": 17, "suffici": [17, 39], "rancher": [17, 27, 50], "high": [17, 38], "quit": 17, "straightforward": 17, "cost": 17, "separ": [17, 27, 32, 33, 41, 50, 51], "plane": 17, "everi": [17, 21, 38, 41, 43, 46, 51], "wherea": [17, 43], "hand": [17, 36, 38, 44, 45, 46, 48, 54], "entir": [17, 39, 41, 45], "economi": 17, "scale": 17, "signific": [17, 38], "rout": [17, 18, 50], "channel": [17, 28, 38, 45, 50, 51], "pva": [17, 38, 54], "protocol": [17, 28, 51], "subnet": [17, 18, 45, 51], "spent": 17, "abandon": 17, "worker": [17, 18, 33, 51], "remot": [17, 18, 41, 52], "benefit": [17, 19], "overcom": 17, "problem": [17, 41, 45], "achiev": [17, 32, 37], "addit": [17, 28, 30, 39, 41, 42, 46, 48], "failur": 17, "secur": [17, 18, 42], "administr": [17, 51], "down": [17, 39], "lot": [17, 42], "multi": [17, 45], "investig": [17, 37, 41, 50], "enabl": [17, 38, 40, 41, 42, 48, 54], "compris": 17, "22": [17, 42, 52], "bare": 17, "metal": 17, "vm": 17, "master": [17, 34, 38, 50], "etcd": 17, "backend": 17, "balanc": [17, 18, 49], "haproxi": 17, "dn": 17, "endpoint": 17, "diamond": [17, 19, 24, 32, 42, 48, 51], "ac": [17, 19, 24, 32, 48, 51], "uk": [17, 19, 24, 32, 48, 51], "ip": [17, 18, 27, 48, 49, 50], "virtu": 17, "pair": [17, 38], "bind": [17, 41], "vrrp": 17, "keepaliv": 17, "kubeadm": 17, "similar": [17, 41, 42, 48, 53], "rke": 17, "upgrad": [17, 39, 42, 49, 52], "downgrad": 17, "provis": 17, "weav": 17, "cni": 17, "broadcast": [17, 18, 27, 51], "unicast": 17, "multicast": 17, "bum": 17, "traffic": [17, 18, 33, 50], "iptabl": [17, 27], "pod": [17, 18, 27, 30, 48, 49, 50, 51], "compon": [17, 19, 21], "loadbalanc": [17, 49], "object": [17, 21], "ingress": 17, "nginx": [17, 51], "nginxinc": 17, "stdout": [17, 48], "fluentd": 17, "daemonset": 17, "ship": 17, "authent": [17, 37], "keycloak": 17, "sit": [17, 18, 48], "rack": 17, "top": [17, 38, 39, 42, 45, 46, 48, 54], "tor": 17, "router": 17, "rest": [17, 31, 42, 48, 51], "routabl": 17, "ospf": 17, "global": [17, 32, 33, 37, 41, 42, 45, 48], "speaker": 17, "respond": 17, "arp": 17, "One": [17, 32], "ansibl": 17, "heavi": 17, "prometheus_oper": 17, "tenant": 17, "namespac": [17, 27, 30, 49, 51], "enforc": [17, 37], "tenanc": 17, "demand": 17, "act": 17, "sandbox": 17, "familiar": [17, 38], "associ": [17, 21, 46], "polici": [17, 37], "determin": [17, 32, 37, 41, 42], "data": [17, 51], "elev": [17, 18], "privileg": [17, 18], "rbac": [17, 27], "psp": 17, "latter": [17, 48], "deprec": 17, "21": [17, 27], "soon": [17, 24, 34, 39, 40, 42, 53, 54], "agent": 17, "part": [17, 28, 30, 32, 38, 39, 41, 54], "physic": [17, 49], "henc": [17, 49], "model": [17, 49], "assum": [17, 38, 43, 48, 51], "centralis": [17, 51], "subhead": 17, "cannot": [17, 18], "case": [17, 18, 19, 34, 37, 39, 40, 45, 46, 51], "brought": 17, "send": 17, "messag": [17, 30, 32, 40, 46], "address": [17, 18, 21, 27, 38, 48, 49, 50], "pend": 17, "relev": [17, 20, 21, 37], "must": [17, 18, 30, 32, 40, 52, 54], "toler": [17, 51], "select": [17, 38, 41, 42, 46, 51], "certain": 17, "util": [17, 38, 48], "aggreg": 17, "prometheu": 17, "kube": [17, 27, 50, 51], "proxi": [17, 18, 27], "noschedul": [17, 51], "udp": [17, 49], "discoveri": [17, 36, 48], "quirk": 17, "exhibit": 17, "overlai": 17, "unsuit": 17, "underli": [17, 30], "rather": [17, 37], "intern": [17, 19, 39, 42, 48, 51, 54], "normal": [17, 18, 42], "hostnetwork": [17, 51], "spec": [17, 38], "whilst": 17, "attribut": 17, "drop": [17, 43], "capabl": [17, 39, 50], "attack": 17, "surfac": 17, "somewhat": 17, "net_admin": 17, "net_broadcast": 17, "potenti": [17, 25, 39], "kafka": 17, "spark": 17, "jenkin": 17, "sonarqub": 17, "zocalo": 17, "jupyterhub": 17, "busi": [17, 42], "app": [17, 20, 27, 30], "confluenc": 17, "jira": [17, 51], "elasticsearch": 17, "graphit": 17, "nagdash": 17, "core": 17, "ldap": 17, "kerbero": 17, "netbox": 17, "mariadb": 17, "ht": 17, "condor": 17, "learn": [17, 41, 42, 46], "toolkit": 17, "kubeflow": 17, "kubevirt": 17, "virtlet": 17, "relion": 17, "storag": [17, 51], "ceph": 17, "rook": 17, "portworkx": 17, "xchem": 17, "fragalysi": 17, "challeng": 18, "subject": [18, 27], "extern": [18, 42, 43, 49], "port": [18, 21, 38, 48, 49, 54], "client": [18, 27, 30, 48, 50, 51, 52], "still": [18, 33, 38, 39, 46, 48, 51, 54], "translat": 18, "packet": 18, "lan": 18, "behaviour": [18, 34, 38, 42], "negoti": 18, "ephemer": 18, "layer": 18, "nat": 18, "prototyp": 18, "found": [18, 34, 39, 41, 43], "had": [18, 33, 46, 52, 54], "gvsp": 18, "vision": 18, "stream": [18, 42, 53, 54], "workaround": [18, 41], "diagram": 18, "ca": [18, 46], "forward": [18, 27], "2nd": [18, 48, 51], "fail": [18, 33, 39, 41, 42, 48, 51], "conclus": 18, "studi": 18, "fiddli": 18, "basi": [18, 41], "plu": [18, 30, 35, 38, 40], "guarante": [18, 38, 40, 42], "round": 18, "possibl": [18, 19, 33, 41, 44, 46], "node": [18, 33, 50, 51], "bypass": [18, 48], "perspect": 18, "ident": [18, 37, 45], "tradit": [18, 42, 53], "listen": 18, "receiv": 18, "team": [18, 48, 51], "restrict": [18, 19, 37], "mitig": 18, "argu": 18, "repo_nam": 19, "kind": [19, 27, 39, 42, 50], "recommend": [19, 25, 27, 28, 33, 37, 39, 41, 42, 44, 52], "intent": [19, 37], "reusabl": 19, "anywher": 19, "sens": 19, "proprietari": 19, "licens": 19, "adapt": 19, "altern": [19, 27, 37, 38, 44, 46, 52], "particular": [19, 41, 42, 50], "strong": 19, "kept": 19, "live": [19, 42, 48], "usual": [19, 32, 48, 51], "nexu": 19, "xml": [20, 21, 42], "whose": [20, 32], "blxxy": 20, "wip": [20, 21, 47, 51], "feb": [20, 21, 26], "2024": [20, 21, 26, 37, 38, 40], "until": [20, 37, 39, 40, 41, 42, 43, 51], "dls_sw": [20, 21, 52], "py": [21, 39, 42], "prod": 21, "r3": 21, "14": 21, "12": [21, 48], "7": [21, 48, 52], "lakeshore340": [21, 42], "6": [21, 30, 39, 40], "0": [21, 27, 30, 36, 38, 48, 50, 52, 54], "arch": 21, "deviocstat": [21, 34, 42, 48], "deviocstatshelp": 21, "bl16i": 21, "ea": [21, 30, 34, 35, 37, 38, 40, 41, 45, 46, 48, 51], "07": [21, 30, 50], "stat": 21, "asyn": [21, 38, 42], "asynip": 21, "p1": 21, "127": [21, 50], "5400": 21, "loop": [21, 41, 43], "ls340": 21, "01": [21, 24, 34, 35, 37, 40, 48, 51], "scan": [21, 45, 48], "tempscan": 21, "gda_desc": 21, "lakeshor": 21, "340": 21, "temperatur": 21, "gda_nam": 21, "ls340b": 21, "epics_bas": 21, "dbpf": [21, 54], "d1": 21, "disabl": [21, 27, 41], "languag": [21, 38], "schema": [21, 38, 45], "download": [21, 27, 38, 44, 52], "json": [21, 38, 45], "kelvin": 21, "archiv": [21, 41], "sec": 21, "prefix": [21, 34, 38], "bu": 21, "eg": 21, "rate": [21, 38, 42], "non": [21, 37, 41, 50], "voltag": [21, 48], "paramet": [21, 38, 48], "id": [21, 30, 38, 41], "gda": 21, "heater": 21, "pid": 21, "procedur": [24, 53], "along": [24, 41, 48], "e7": [24, 39, 50], "workspac": [24, 31, 34, 39, 42, 43, 45], "my": [24, 36, 43], "repo": [24, 30, 32, 33, 36, 37, 38, 39, 40, 41, 43, 45, 48, 51], "acc": 24, "psc": 24, "sr25a": 24, "entiti": [24, 38, 43, 45], "instanti": [24, 38, 43, 54], "timingtempl": 24, "invoc": [24, 39], "walk": [25, 43, 48], "wish": 25, "codespac": 25, "enhanc": 25, "effort": 25, "java": 26, "pvi": [26, 33, 41], "opi": [26, 27, 41, 45, 51, 54], "progress": [26, 35, 43, 46], "readi": [26, 27, 37, 38, 41, 45, 48, 50, 51, 52], "est": 26, "explor": [27, 39], "after": [27, 37, 45, 54], "workstat": [27, 28, 30, 32, 40, 41, 44, 50, 51], "github_url": 27, "version_kube_dashboard": 27, "curl": [27, 40, 50], "w": [27, 41], "url_effect": 27, "l": [27, 30, 41], "o": [27, 30, 40, 49, 50], "null": 27, "sed": [27, 41, 51], "f": [27, 40, 48, 50, 52], "githubusercont": [27, 40], "aio": 27, "admin": [27, 32], "role": 27, "eof": [27, 50], "apivers": [27, 48, 50], "v1": [27, 50], "serviceaccount": [27, 50], "author": [27, 38, 46], "clusterrolebind": 27, "roleref": 27, "apigroup": 27, "clusterrol": 27, "token": [27, 40, 50], "clipboard": 27, "On": 27, "24": [27, 30, 42, 52], "newer": 27, "n": [27, 30, 41, 49], "url": [27, 31, 32, 40, 42, 51, 54], "pi3": 27, "pi4": 27, "memori": [27, 38, 51], "better": [27, 36, 39, 43, 51], "yet": [27, 38, 40, 42, 46, 52], "coupl": [27, 48], "sudo": [27, 50], "usr": [27, 39], "sbin": 27, "cmdline": 27, "cgroup_memori": 27, "cgroup_en": 27, "reboot": [27, 48], "wsl2": [27, 50, 52], "platform": [27, 41], "20262": 27, "higher": 27, "ubuntu": [27, 39, 50, 52], "bring": 27, "wget": 27, "2bk3s1": 27, "root": [27, 40, 41, 42, 48, 50, 52], "0755": 27, "foreground": 27, "second": [27, 32, 39, 40, 41, 46, 48], "wl": 27, "mkdir": [27, 38, 40, 50, 52], "cp": [27, 38, 48, 50], "chown": [27, 50], "gile": 27, "box": [27, 43], "network": [27, 45, 48, 50, 51], "epics_ca_addr_list": 27, "discov": 27, "restart": [27, 30, 40, 41, 48, 49, 51], "ag": [27, 49], "6779d4dcf": 27, "g2cpm": 27, "19h": 27, "exec": [27, 38, 40], "busybox": [27, 39], "ifconfig": 27, "eth0": 27, "encap": 27, "ethernet": [27, 48], "hwaddr": 27, "70": 27, "85": 27, "c2": 27, "96": 27, "inet": 27, "192": 27, "168": [27, 48, 49], "86": 27, "33": 27, "bcast": 27, "255": [27, 48], "mask": [27, 48], "export": [27, 32, 37, 40, 51], "displai": [27, 32], "awk": 27, "nameserv": 27, "print": [27, 40], "exit": [27, 30, 40, 41, 42, 45, 48, 51], "resolv": [27, 40], "conf": [27, 41], "libgl_always_indirect": 27, "stexampl": 27, "introduct": [28, 33], "usag": [28, 30], "oper": [28, 51, 52], "phoebu": [28, 38, 51], "builder2ibek": 28, "convers": 28, "experienc": [28, 41], "librari": [28, 39, 42, 52], "frequent": 28, "thin": 30, "subcommand": 30, "ioc_inst": 30, "Or": [30, 38, 40, 52], "imag": [30, 32, 33, 34, 37, 38, 39, 40, 41, 42, 46, 51, 54], "conveni": [30, 39, 41, 45, 46], "none": 30, "text": [30, 38, 45], "apo": 30, "quot": 30, "p38": [30, 50], "is_ioc": 30, "column": 30, "ioc_nam": [30, 32, 38], "label": [30, 41, 51], "ioc_vers": 30, "state": [30, 40, 41, 42, 48], "phase": 30, "containerstatus": 30, "restartcount": 30, "managedfield": 30, "bl38p": [30, 32, 51], "03": 30, "25t14": 30, "44z": 30, "panda": 30, "25": 30, "b16": 30, "25t15": 30, "41z": 30, "mention": 31, "ssh": [31, 37, 42], "insteadof": [31, 42], "correct": [32, 48], "adjust": [32, 41], "ec_registry_map": [32, 37, 51], "organis": 32, "my_generic_ioc": 32, "space": [32, 38, 42, 50], "ec_k8s_namespac": [32, 37, 51], "leav": [32, 34, 37, 45, 49, 51, 54], "ec_domain_repo": [32, 37, 40, 51], "ec_log_url": 32, "ui": 32, "placehold": 32, "graylog2": 32, "search": [32, 39], "rangetyp": 32, "rel": 32, "field": [32, 34, 45, 48], "2csourc": 32, "width": [32, 38], "1489": 32, "highlightmessag": 32, "172800": 32, "q": [32, 40], "pod_nam": 32, "3a": 32, "ec_container_cli": 32, "try": [32, 39, 40, 41, 42, 48, 50], "over": [32, 38, 39, 48, 49, 50], "singular": 32, "compat": [32, 39, 43], "least": 32, "ec_debug": 32, "caus": 32, "output": [32, 39, 41, 45, 48, 49], "d": [32, 40, 41, 45, 48], "blxxi": [32, 34, 37, 51], "probabl": [32, 43], "omit": [32, 38], "perhap": 32, "simplest": [32, 39, 40, 50, 51], "bashrc": 32, "path": [32, 39, 40, 41, 52], "home": [32, 38, 40, 50, 52], "third": 32, "kubeconfig": 32, "put": [33, 38, 42], "dockerfil": [33, 39, 46], "answer": 33, "free": [33, 37, 38, 41, 44, 48, 49, 51, 52], "lifecycl": 33, "Not": 33, "counter": 33, "roll": [33, 40, 50], "That": [33, 38, 50], "track": 33, "sever": 33, "replicaset": 33, "By": [33, 42, 51], "last": [33, 37, 38, 39, 40, 41, 54], "necessari": [33, 34, 37, 39, 40, 41, 49, 50], "cach": [33, 39, 41, 42, 54], "anywai": 33, "harbour": 33, "goharbor": 33, "spin": 33, "turn": [34, 39, 45], "manifest": 34, "renam": 34, "left": [34, 41, 45, 46, 50], "short": 34, "drawn": 34, "base_imag": [34, 48], "binari": [34, 38, 40, 41, 48, 49], "possibli": 34, "detector": [34, 38, 54], "ioc_prefix": 34, "declar": [34, 38], "uppercas": 34, "appear": [34, 38, 41, 42, 48], "inspect": [35, 40], "bl01t": [35, 37, 38, 41, 45, 46, 48, 49, 52], "lib": [35, 38, 39, 41, 50], "kei": [35, 37, 38, 42, 51], "next": [35, 37, 39, 40, 41, 42, 49, 50, 51, 52, 54], "ve": 36, "pick": [36, 40, 52], "think": [36, 42], "peopl": 36, "particularli": [36, 52], "regard": [36, 40, 41], "scm": [36, 42, 52], "repositoryscanmaxdepth": 36, "openrepositoryinparentfold": 36, "never": 36, "trimtrailingwhitespac": 36, "scrollback": 36, "20000": 36, "defaultextens": 36, "samuelcolvin": 36, "jinjahtml": 36, "moshfeu": 36, "compar": 36, "copilot": 36, "charliermarsh": 36, "ruff": 36, "gruntfuggli": 36, "streetsidesoftwar": 36, "spell": 36, "checker": 36, "eamodio": 36, "gitlen": 36, "tamasf": 36, "even": [36, 41, 45, 46], "toml": 36, "redhat": [36, 38, 41, 52], "ryanluk": 36, "gutter": 36, "mhutchi": 36, "makefil": [36, 41], "peakchen90": 36, "editor": [36, 38, 39, 41, 52], "defaultformatt": 36, "group": 37, "blxxc": 37, "xx": 37, "lower": 37, "letter": 37, "hyphen": 37, "introduc": [37, 44], "basic": [37, 48], "tickit": 37, "ideal": 37, "taken": 37, "further": [37, 42, 48], "exercis": [37, 46], "account": [37, 40, 41, 42, 44, 46, 51, 54], "login": [37, 50], "person": [37, 42], "workspacesitori": 37, "green": [37, 41, 46, 51], "button": [37, 42, 46, 51, 54], "cover": [37, 38, 42, 45, 48, 53], "remain": [37, 52], "readm": [37, 42, 51], "md": [37, 42, 51], "meaning": [37, 38], "xxi": 37, "01t": 37, "goe": [37, 51], "insert": [37, 40], "fine": [37, 42], "blank": [37, 51], "mv": 37, "wide": 37, "calver": [37, 40], "scheme": 37, "digit": 37, "month": 37, "semant": 37, "appropri": [37, 41, 42, 50, 51, 52], "mix": 37, "came": [38, 39, 40, 41], "item": 38, "specifi": [38, 45, 48, 51], "adsimdetector": [38, 40, 41, 42, 45, 46], "dbd": [38, 41, 42, 48, 54], "bake": 38, "reus": 38, "recap": 38, "sequenc": [38, 40], "respons": 38, "simdetector": 38, "r": [38, 41, 48, 51, 54], "suffix": 38, "timeout": [38, 54], "1280": 38, "height": 38, "1024": 38, "datatyp": 38, "buffer": 38, "maximum": 38, "ndarrai": 38, "plugin": [38, 39, 42], "callback": 38, "50": 38, "max": 38, "maxw": 38, "maxh": 38, "nbuffer": 38, "attach": [38, 40, 48, 54], "pre_init": [38, 45], "simdetectorconfig": 38, "portnam": [38, 54], "maxsizex": 38, "maxsizei": 38, "maxbuff": 38, "maxmemori": [38, 54], "iocinit": [38, 45, 48, 54], "det": 38, "tst": 38, "unfamiliar": 38, "id2759963": 38, "Be": [38, 40], "awar": [38, 40, 52], "white": 38, "indent": [38, 45], "nest": [38, 45], "denot": 38, "dictionari": 38, "let": [38, 40, 41, 51, 54], "wire": 38, "adcor": [38, 42], "ndpvaplugin": 38, "pvname": [38, 54], "ndarray_port": [38, 54], "pvaccess": [38, 42], "snippet": 38, "togeth": 38, "remind": 38, "nearli": 38, "caput": [38, 40, 48], "caget": [38, 40, 45, 48], "c2dv": 38, "c2dataview": [38, 54], "enablecallback": 38, "acquir": [38, 43], "move": 38, "window": [38, 40, 41, 42, 44, 45, 50, 52], "smoothest": 38, "hit": [38, 40, 41, 42, 45, 48], "zoom": 38, "frame": 38, "notic": [38, 40, 54], "did": [38, 39, 51], "enter": 38, "viewer": [38, 54], "marketplac": 38, "visualstudio": 38, "itemnam": 38, "advantag": [38, 51], "long": [38, 41, 50], "demonstr": [38, 41, 42, 46], "cat": 38, "persist": [38, 48, 49, 51], "volum": [38, 41, 48, 49, 51], "rm": [38, 39, 41, 48, 51], "behav": 38, "exactli": [38, 46, 48], "hood": 38, "saw": 39, "succe": [39, 54], "design": 39, "maxim": 39, "partial": 39, "fundament": 39, "trigger": 39, "knowledg": [39, 43, 44], "success": 39, "retri": 39, "adurl": [39, 43, 54], "again": [39, 40, 42, 49, 52, 54], "realli": [39, 54], "apt": [39, 42], "debian": [39, 52], "magick": [39, 42], "h": [39, 42], "graphicsmagick": [39, 42, 54], "libmagick": 39, "libgraphicsmagick": 39, "header": 39, "imagemagick": 39, "middl": 39, "promis": 39, "y": [39, 42], "config_sit": [39, 42], "sai": [39, 40, 51], "graphicsmagick_includ": 39, "rudimentari": 39, "vi": 39, "synchron": 39, "xxx": [39, 41, 42, 43], "navig": [39, 41], "pictur": 39, "with_graphicsmagick": [39, 42], "ye": [39, 42], "graphicsmagick_extern": [39, 42], "invok": 39, "tip": 39, "NOT": 39, "patch": [39, 43], "avoid": [39, 41, 43], "occasion": [39, 46], "variat": 39, "whatev": 39, "although": [39, 41, 50], "graphic": 39, "prove": 39, "curat": [39, 41, 42], "NO": [39, 42], "skip": [39, 40, 42, 50, 51], "quickli": 39, "libxext": 39, "libboost": [39, 42], "libxext6": 39, "rf": [39, 41], "var": [39, 50], "size": 39, "unfortun": [39, 54], "scratch": 39, "earli": 40, "shall": 40, "pretend": 40, "fictiti": 40, "anyth": [40, 42], "recent": [40, 42, 52], "drill": 40, "ci_verifi": 40, "sophist": [40, 54], "moment": 40, "correctli": 40, "bash_profil": 40, "profil": 40, "empti": 40, "unless": [40, 41, 50, 51], "ahead": [40, 51, 52], "ever": 40, "lost": [40, 41], "beta": [40, 48], "perman": [40, 42, 52], "19": 40, "b11": 40, "53": 40, "minut": [40, 41, 54], "incorrectli": 40, "bdbd155d437361fe88bce0faa0ddd3cd225a9026287ac5e73545aeb4ab3a67e9": 40, "distinct": [40, 41], "known": 40, "recov": 40, "strive": 40, "noth": 40, "iocshel": [40, 42, 45, 46], "ctrl": [40, 41, 45, 48], "detach": 40, "captur": 40, "Being": 40, "modifi": 41, "decreas": 41, "frequenc": 41, "increas": [41, 42], "affect": 41, "cycl": 41, "fast": 41, "inner": [41, 43], "earlier": [41, 46], "firmli": 41, "realm": 41, "tradition": 41, "fact": 41, "stage": [41, 52], "becom": [41, 42, 43], "perfect": 41, "candid": 41, "mode": 41, "incompat": 41, "selinux": 41, "tmp": [41, 54], "permiss": [41, 50, 51], "right": [41, 42, 46], "recurs": [41, 46], "sub": 41, "philosophi": 41, "problemat": 41, "almost": 41, "instant": 41, "rebuilt": 41, "awai": [41, 42], "encompass": 41, "session": 41, "icon": 41, "bottom": [41, 46], "caveat": 41, "destroi": 41, "delet": 41, "troubleshoot": 41, "reset": [41, 48], "recompil": [41, 46], "carefulli": 41, "preserv": 41, "bed": 41, "iocapp": [41, 42], "lib_list": 41, "dbd_list": 41, "deriv": 41, "meaningfulli": 41, "parent": 41, "peer": 41, "menu": [41, 45], "cancel": 41, "opportun": 41, "owner": 41, "complain": 41, "ownership": 41, "immut": 41, "feel": 41, "rememb": [41, 51], "explicitli": [41, 42, 43], "pc": 41, "complac": 41, "ln": [41, 52], "shown": [41, 42, 49], "tidi": 41, "emb": 42, "light": 42, "concis": 42, "intend": [42, 44], "barrier": 42, "collabor": 42, "wherev": 42, "previous": 42, "littl": 42, "generic": 42, "apach": 42, "v2": [42, 48, 49, 52], "licenc": 42, "0ff410a3e1131": 42, "primari": 42, "tab": [42, 54], "wast": 42, "cpu": [42, 51], "faster": 42, "recip": 42, "ignor": 42, "iocstat": [42, 46], "health": [42, 51], "streamdevic": 42, "r4": 42, "42": 42, "duplic": [42, 43], "speed": [42, 54], "massiv": 42, "happi": 42, "goto": 42, "uncheck": 42, "init": 42, "checkout": [42, 43], "snapshot": 42, "off": [42, 43], "gitconfig": 42, "book": [42, 52], "en": [42, 44, 52], "tri": 42, "miss": 42, "boost": 42, "echo": [42, 51, 53], "cross_compiler_target_arch": 42, "adsupport": 42, "with_jpeg": 42, "jpeg_extern": 42, "with_pva": 42, "with_boost": 42, "notyetset": 42, "area_detector": 42, "pretti": 42, "jpeg": 42, "fixup": 42, "prod_ioc": 42, "ioc_dbd": 42, "busysupport": 42, "ndpluginsupport": 42, "ndfilehdf5": 42, "ndfilejpeg": 42, "ndfiletiff": 42, "ndfilenul": 42, "ndposplugin": 42, "urldriversupport": 42, "pvaserverregist": 42, "ndpluginpva": 42, "ioc_src": 42, "ioc_registerrecorddevicedriv": [42, 48, 54], "cpp": 42, "ioc_lib": 42, "ntndarrayconvert": 42, "nt": 42, "pvdata": 42, "pvdatabas": 42, "pvaccessca": 42, "pvaccessioc": 42, "urldriv": [42, 54], "ndplugin": 42, "adbas": 42, "cbfad": 42, "epics_base_ioc_lib": 42, "iocmain": 42, "rule": [42, 51], "deliber": 42, "fatal": 42, "loos": 43, "belong": [43, 51], "verif": 43, "encapsul": 43, "while": 43, "kick": 43, "submodul": [43, 46, 54], "ioc_templ": 43, "concret": 43, "break": 43, "accordingli": [43, 51], "coher": 43, "b": [43, 48], "tight": 43, "mayb": 43, "confus": 43, "seri": 44, "self": 44, "prior": 44, "background": 44, "overview": 44, "intro": 44, "quickstart": 44, "epics_intro": 44, "With": 44, "mac": 44, "strictli": 45, "speak": 45, "craft": [45, 48], "queri": 45, "ai": 45, "dtyp": 45, "passiv": 45, "val": [45, 48], "match": [45, 48, 51], "statement": 45, "startupcommand": 45, "immedi": 45, "well": [45, 54], "isol": [45, 46, 50], "net": [45, 48], "symlink": [45, 46], "press": [45, 48], "shift": 45, "commnd": 45, "plan": [45, 52], "arbitrari": 45, "poststartupcommand": 45, "post_init": 45, "syntax": 45, "sting": 45, "extra2": 45, "verbatim": 45, "whitespac": 45, "strip": 45, "focus": 46, "smaller": 46, "less": 46, "small": 46, "cleaner": 46, "monolith": 46, "adsampl": 46, "simplifi": 46, "tailor": 46, "corner": 46, "equival": 46, "flag": 46, "ie": 46, "ioc_exampl": 46, "chosen": 46, "though": 46, "decemb": [48, 49], "mvvme5500": [48, 49], "serv": [48, 49, 51, 54], "proceed": [48, 52], "vme": 48, "crate": [48, 49], "processor": [48, 49], "card": [48, 49], "serial": 48, "consol": [48, 49], "ts0001": 48, "7007": 48, "7008": 48, "telnet": 48, "motload": 48, "esc": 48, "spc": 48, "tftp": [48, 49], "nf": [48, 49], "gevshow": 48, "mot": 48, "enet0": 48, "cipa": 48, "172": [48, 49], "23": [48, 49, 54], "250": 48, "snma": 48, "240": 48, "gipa": 48, "254": 48, "em1": 48, "203": [48, 49], "dla": 48, "malloc": 48, "0x230000": 48, "tftpget": 48, "enet1": 48, "fbl01t": 48, "beatnik": 48, "m255": 48, "g172": 48, "s172": 48, "c172": 48, "adla": 48, "a0095f000": 48, "total": 48, "ge": 48, "byte": 48, "427": 48, "3165": 48, "gevedit": 48, "site": 48, "respect": 48, "gatewai": 48, "modif": 48, "matrix": 48, "dimens": 48, "env": 48, "epics_ioc_addr_list": 48, "probe": 48, "k8s_ioc_address": 48, "rtems_vme_console_addr": 48, "rtems_vme_console_port": 48, "rtems_vme_auto_reboot": 48, "rtems_vme_auto_paus": 48, "hard": [48, 49], "paus": [48, 49], "unpaus": [48, 49], "1st": 48, "calc": 48, "sum": 48, "inpa": 48, "inpb": 48, "ao": 48, "egu": 48, "volt": 48, "dbloaddatabas": [48, 54], "pdbbase": [48, 54], "epicsenvset": 48, "epics_db_include_path": 48, "iocadminsoft": 48, "iocadminscanmon": 48, "recal": 48, "liter": 48, "claim": [48, 51], "pvc": [48, 51], "nfsv2tftpclaim": 48, "local_deploy_ioc": 48, "quicker": 48, "stdin": 48, "13": 48, "individu": 49, "crash": 49, "bootload": 49, "nfsv2": 49, "loadbalancerip": 49, "rang": 49, "pollux": [49, 50, 51], "201": 49, "222": 49, "reserv": 49, "train": [49, 50, 51], "108": 49, "219": 49, "193": 49, "111": 49, "31491": 49, "2049": 49, "30944": 49, "20048": 49, "32277": 49, "69": 49, "32740": 49, "32d": 49, "alon": 49, "p45": 50, "p46": [50, 51], "p49": 50, "i20": 50, "i22": [50, 51], "c01": 50, "spare": 50, "experiment": 50, "straight": 50, "20": [50, 52], "distro": 50, "raspberri": 50, "pi": 50, "05": 50, "subsystem": [50, 52], "uninstal": 50, "harm": 50, "sig": 50, "quick": 50, "microk8": 50, "minikub": 50, "aka": 50, "sfl": 50, "scp": 50, "your_account": 50, "your_workst": 50, "bl46p": [50, 51, 52], "priv": 50, "annot": 50, "grade": 51, "servicedesk": 51, "portal": 51, "92": 51, "your_github_account": 51, "customis": 51, "cut": 51, "sampl": 51, "closest": 51, "facilit": 51, "affin": 51, "taint": 51, "nodetyp": 51, "rig": 51, "contact": 51, "iocnam": 51, "opisclaim": 51, "runtimeclaim": 51, "autosaveclaim": 51, "datavolum": 51, "hostpath": 51, "mybeamlin": 51, "equal": 51, "chunk": 51, "relat": 51, "subdirectori": 51, "retriev": 51, "dashboard": 51, "land": 51, "bl22i": 51, "b01": 51, "bl01b": 51, "visual": 52, "studio": 52, "maco": 52, "huge": 52, "rhel": 52, "04": 52, "encourag": 52, "desktop": 52, "highest": 52, "simplic": 52, "jump": 52, "visualis": 52, "stub": 53, "pointer": 53, "preced": 53, "skill": 53, "mynewdevicesupport": 53, "genericioc": 54, "took": 54, "anyon": 54, "urldriverconfig": 54, "cam": 54, "ndpvaconfigur": 54, "queuesiz": 54, "blockingcallback": 54, "ndarrayport": 54, "ndarrayaddr": 54, "prioriti": 54, "stacksiz": 54, "startpvaserv": 54, "ndpva": 54, "ndarray_adr": 54, "poke": 54, "acquireperiod": 54, "run_test": 54, "block": 54, "fi": 54, "ioc_arg": 54, "check_pv": 54, "enough": 54, "video": 54, "di": 54, "feed": 54, "demo": 54, "milli": 54, "labradoodl": 54, "got": 54}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"architectur": [0, 1], "decis": [0, 1, 2, 3, 4, 5], "record": [0, 1], "1": [1, 46, 51], "statu": [1, 2, 3, 4, 5], "context": [1, 2, 3, 4, 5, 50], "consequ": [1, 2, 3, 4, 5], "2": [2, 47, 51], "adopt": 2, "python3": 2, "pip": 2, "skeleton": 2, "project": [2, 7, 22, 42], "structur": [2, 13], "3": [3, 51], "us": [3, 5, 6, 13, 17, 39, 43], "substitut": 3, "file": [3, 32, 42, 49], "gener": [3, 15, 19, 39, 42, 46, 47, 54], "epic": [3, 13, 15, 31, 50, 52], "databas": [3, 38], "4": 4, "how": [4, 10, 13, 27, 28, 33, 43], "configur": [4, 31, 32, 42, 50], "autosav": 4, "ioc": [4, 15, 19, 23, 30, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 50, 51, 54], "5": 5, "python": [5, 52], "script": [5, 38], "insid": [5, 39], "outsid": 5, "contain": [5, 13, 15, 16, 18, 19, 31, 39, 41, 52, 54], "build": [6, 12, 39, 42], "doc": 6, "sphinx": 6, "autobuild": 6, "contribut": [7, 12, 22], "issu": [7, 22], "discuss": [7, 22], "develop": [7, 10, 12, 22, 25, 41, 42, 52], "guid": [7, 10, 22, 28], "make": [8, 39, 54], "releas": 8, "updat": [9, 13, 24, 42], "tool": [9, 15, 20, 21], "tutori": [10, 28, 44], "explan": [10, 28, 38], "refer": [10, 28], "standard": 11, "document": [11, 13, 14], "clone": 12, "repositori": [12, 15, 19, 33, 37, 51], "instal": [12, 27, 32, 50, 52], "depend": [12, 42], "see": 12, "what": [12, 43], "wa": 12, "check": [12, 48], "quick": 13, "start": [13, 37, 40, 41], "link": 13, "octob": 13, "2023": 13, "commun": 13, "materi": 13, "i": [13, 33, 43, 46], "about": [14, 35, 45], "essenti": 15, "concept": 15, "overview": [15, 17], "imag": [15, 19], "instanc": [15, 19, 23, 34, 35, 38, 40, 41, 43, 45, 46, 48], "kubernet": [15, 17, 23, 27, 32, 35, 50, 51, 52], "altern": [15, 43], "helm": [15, 34, 35, 37, 51], "continu": [15, 40, 54], "integr": [15, 40, 54], "scope": 15, "addit": [15, 27], "cli": [15, 52], "ibek": [15, 24, 38, 42, 43, 45], "pvi": 15, "dev": 16, "v": [16, 40], "runtim": [16, 45], "cluster": [17, 32, 50, 51], "config": [17, 38], "option": [17, 32, 52], "current": 17, "approach": 17, "dl": [17, 51], "argu": 17, "beamlin": [17, 37, 40, 41, 51], "local": [17, 23, 40, 45], "node": 17, "metallb": 17, "pool": 17, "label": 17, "taint": 17, "host": 17, "network": [17, 18], "channel": 18, "access": 18, "other": 18, "protocol": 18, "interfac": [18, 26, 30, 33, 38], "problem": 18, "cni": 18, "solut": 18, "hostnetwork": 18, "sourc": 19, "registri": 19, "locat": 19, "where": 19, "keep": 19, "code": [19, 25], "domain": 19, "bl45p": 19, "put": 19, "repo": [19, 42], "builder2ibek": [20, 21], "convers": [20, 21], "support": [21, 24, 42, 43, 52, 53], "exampl": [21, 34, 40, 46, 48], "debug": [23, 39], "an": [23, 35, 38, 39, 40, 48, 50], "test": [24, 41, 45, 51, 54], "choos": [25, 41], "your": [25, 32, 45, 48, 50], "environ": [25, 32, 37, 40, 48, 51], "work": [25, 27, 43, 46, 53], "own": [25, 50], "editor": 25, "view": [26, 38], "oper": [26, 33, 38], "phoebu": 26, "To": [27, 37], "": 27, "dashboard": 27, "raspberri": 27, "pi": 27, "window": 27, "subsystem": 27, "linux": 27, "k3": [27, 50, 51], "server": [27, 49, 50, 51], "get": 27, "x11": 27, "gui": [27, 54], "wsl": 27, "user": 28, "command": 30, "line": 30, "manag": [30, 40], "git": [31, 52], "The": [32, 38, 51], "variabl": [32, 48], "setup": [32, 50, 51, 52], "requir": 32, "ec": 32, "connect": 32, "namespac": [32, 50], "frequent": 33, "ask": 33, "question": 33, "why": [33, 43], "mention": 33, "have": 33, "xxx": 33, "can": 33, "do": 33, "rollback": 33, "internet": 33, "down": 33, "chart": [34, 37, 51], "detail": 34, "examin": 34, "resourc": [35, 51], "learn": 35, "manifest": 35, "recommend": 36, "vscode": [36, 52], "set": [36, 40, 51, 52], "creat": [37, 38, 42, 48, 49, 50, 51], "new": [37, 38, 42, 51], "step": [37, 50, 52], "sh": 37, "chang": [37, 39, 41, 42, 45, 46, 47], "name": 37, "servic": [37, 49, 50], "wrap": [37, 39, 41], "up": [37, 39, 40, 41, 51, 52], "introduct": [38, 40, 44, 49, 50], "valu": 38, "yaml": 38, "try": [38, 54], "out": [38, 54], "launch": [38, 41], "output": 38, "raw": [38, 45], "startup": [38, 45], "investig": 39, "failur": 39, "appli": 39, "made": 39, "easier": 39, "fix": 39, "adsupport": 39, "deploi": [40, 48, 51, 54], "bl01t": 40, "import": 40, "stop": 40, "monitor": 40, "interact": 40, "shell": 40, "log": 40, "type": [41, 51], "need": 41, "prepar": [41, 42, 46, 48], "ad": 41, "workspac": 41, "layout": 41, "lakeshor": 42, "340": 42, "temperatur": 42, "control": 42, "initi": 42, "dockerfil": 42, "submodul": 42, "add": 42, "modul": [42, 53], "system": 42, "patch": 42, "adurl": 42, "makefil": 42, "defin": 43, "asset": 45, "more": 45, "creation": 45, "part": [46, 47], "verifi": 46, "rtem": [48, 49], "boot": 48, "loader": 48, "bring": 50, "platform": [50, 52], "choic": 50, "lightweight": 50, "kubectl": 50, "account": 50, "run": 50, "complet": 50, "topologi": 51, "share": 51, "dedic": 51, "section": 51, "default": 51, "all": 51, "singl": 51, "real": 51, "One": 51, "time": 51, "onli": 51, "workstat": 52, "docker": 52, "podman": 52, "publish": 54, "ghcr": 54, "relev": 54, "our": 54, "some": 54}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"Architectural Decision Records": [[0, "architectural-decision-records"]], "1. Record architecture decisions": [[1, "record-architecture-decisions"]], "Status": [[1, "status"], [2, "status"], [3, "status"], [4, "status"], [5, "status"]], "Context": [[1, "context"], [2, "context"], [3, "context"], [4, "context"], [5, "context"]], "Decision": [[1, "decision"], [2, "decision"], [3, "decision"], [4, "decision"], [5, "decision"]], "Consequences": [[1, "consequences"], [2, "consequences"], [3, "consequences"], [4, "consequences"], [5, "consequences"]], "2. Adopt python3-pip-skeleton for project structure": [[2, "adopt-python3-pip-skeleton-for-project-structure"]], "3. Use of substitution files to generate EPICS Databases": [[3, "use-of-substitution-files-to-generate-epics-databases"]], "4. How to configure autosave for IOCs": [[4, "how-to-configure-autosave-for-iocs"]], "5. Use Python for scripting inside and outside containers": [[5, "use-python-for-scripting-inside-and-outside-containers"]], "Build the docs using sphinx": [[6, "build-the-docs-using-sphinx"]], "Autobuild": [[6, "autobuild"]], "Contributing to the project": [[7, "contributing-to-the-project"], [22, "contributing-to-the-project"]], "Issue or Discussion?": [[7, "issue-or-discussion"], [22, "issue-or-discussion"]], "Developer guide": [[7, "developer-guide"], [22, "developer-guide"]], "Make a release": [[8, "make-a-release"]], "Update the tools": [[9, "update-the-tools"]], "Developer Guide": [[10, "developer-guide"]], "Tutorials": [[10, null], [28, null]], "How-to Guides": [[10, null], [28, null]], "Explanations": [[10, null], [28, null]], "Reference": [[10, null], [28, null]], "Standards": [[11, "standards"]], "Documentation Standards": [[11, "documentation-standards"]], "Developer Contributing": [[12, "developer-contributing"]], "Clone the repository": [[12, "clone-the-repository"]], "Install dependencies": [[12, "install-dependencies"]], "See what was installed": [[12, "see-what-was-installed"]], "Build and check": [[12, "build-and-check"]], "epics-containers": [[13, "epics-containers"]], "Quick Start": [[13, "quick-start"]], "Useful Links": [[13, "useful-links"]], "Update for October 2023": [[13, "update-for-october-2023"]], "Communication": [[13, "communication"]], "Materials": [[13, "materials"]], "How the documentation is structured": [[13, "how-the-documentation-is-structured"]], "About the documentation": [[14, "about-the-documentation"]], "Essential Concepts": [[15, "essential-concepts"]], "Overview": [[15, "overview"], [17, "overview"]], "Concepts": [[15, "concepts"]], "Images and Containers": [[15, "images-and-containers"]], "Generic IOCs and instances": [[15, "generic-iocs-and-instances"]], "Kubernetes": [[15, "kubernetes"], [52, "id1"]], "Kubernetes Alternative": [[15, "kubernetes-alternative"]], "Helm": [[15, "helm"]], "Repositories": [[15, "repositories"]], "Continuous Integration": [[15, "continuous-integration"], [40, "continuous-integration"], [54, "continuous-integration"]], "Scope": [[15, "scope"]], "Additional Tools": [[15, "additional-tools"]], "epics-containers-cli": [[15, "epics-containers-cli"], [52, "epics-containers-cli"]], "ibek": [[15, "ibek"]], "PVI": [[15, "pvi"]], "Dev Container vs Runtime Container": [[16, "dev-container-vs-runtime-container"]], "Kubernetes Cluster Config": [[17, "kubernetes-cluster-config"]], "Cluster Options": [[17, "cluster-options"]], "Current Approach": [[17, "current-approach"]], "DLS Argus Cluster": [[17, "dls-argus-cluster"]], "Beamline Local Cluster Nodes": [[17, "beamline-local-cluster-nodes"]], "Metallb Pools": [[17, "metallb-pools"]], "Node Labelling and Taints": [[17, "node-labelling-and-taints"]], "Host Network": [[17, "host-network"]], "Uses for Argus": [[17, "uses-for-argus"]], "Channel Access and Other Protocols": [[18, "channel-access-and-other-protocols"]], "Container Network Interface": [[18, "container-network-interface"]], "Problems with CNI": [[18, "problems-with-cni"]], "Solution - hostNetwork": [[18, "solution-hostnetwork"]], "Source and Registry Locations": [[19, "source-and-registry-locations"]], "Where to Keep Source Code": [[19, "where-to-keep-source-code"]], "Generic IOC Source Repositories": [[19, "generic-ioc-source-repositories"]], "IOC Instance Domain Repositories": [[19, "ioc-instance-domain-repositories"]], "BL45P": [[19, "bl45p"]], "Where to put Registries": [[19, "where-to-put-registries"]], "Generic IOC Container Images and Source Repos": [[19, "generic-ioc-container-images-and-source-repos"]], "IOC Instance Domain Repos": [[19, "ioc-instance-domain-repos"]], "Builder2ibek Conversion Tool": [[20, "builder2ibek-conversion-tool"]], "Builder2ibek.support Conversion Tool": [[21, "builder2ibek-support-conversion-tool"]], "builder2ibek.support example": [[21, "builder2ibek-support-example"]], "Debug an IOC instance locally": [[23, "debug-an-ioc-instance-locally"]], "Debug an IOC instance in Kubernetes": [[23, "debug-an-ioc-instance-in-kubernetes"]], "Updating and Testing ibek-support": [[24, "updating-and-testing-ibek-support"]], "Choose Your Developer Environment": [[25, "choose-your-developer-environment"]], "Working with your own code editor": [[25, "working-with-your-own-code-editor"]], "Viewing Operator Interfaces with Phoebus": [[26, "viewing-operator-interfaces-with-phoebus"]], "Kubernetes Additional How To\u2019s": [[27, "kubernetes-additional-how-to-s"]], "Install the Kubernetes Dashboard": [[27, "install-the-kubernetes-dashboard"]], "Installing on a Raspberry Pi": [[27, "installing-on-a-raspberry-pi"]], "Installing on Windows Subsystem for Linux": [[27, "installing-on-windows-subsystem-for-linux"]], "Install k3s server": [[27, "install-k3s-server"]], "Get X11 GUI to Work with WSL": [[27, "get-x11-gui-to-work-with-wsl"]], "User Guide": [[28, "user-guide"]], "Command Line Interface for IOC Management": [[30, "command-line-interface-for-ioc-management"]], "Configuration for epics-containers": [[31, "configuration-for-epics-containers"]], "Git Configuration": [[31, "git-configuration"]], "The Environment Configuration File": [[32, "the-environment-configuration-file"]], "Environment Variables Setup": [[32, "environment-variables-setup"]], "Required Variables": [[32, "required-variables"]], "Optional Variables": [[32, "optional-variables"]], "Installation of ec": [[32, "installation-of-ec"]], "Connecting to a Namespace on your Kubernetes Cluster": [[32, "connecting-to-a-namespace-on-your-kubernetes-cluster"]], "Frequently Asked Questions": [[33, "frequently-asked-questions"]], "Why no mention of Operator Interfaces?": [[33, "why-no-mention-of-operator-interfaces"]], "Why have ioc-XXX repositories?": [[33, "why-have-ioc-xxx-repositories"]], "How can I do IOC rollback if the internet is down?": [[33, "how-can-i-do-ioc-rollback-if-the-internet-is-down"]], "IOC Helm Chart Details": [[34, "ioc-helm-chart-details"]], "Examine the Example IOC Instance": [[34, "examine-the-example-ioc-instance"]], "Kubernetes Resources in an IOC Instance": [[35, "kubernetes-resources-in-an-ioc-instance"], [35, "id1"]], "Learning about Helm and Kubernetes Manifests": [[35, "learning-about-helm-and-kubernetes-manifests"]], "Recommended VSCode Settings": [[36, "recommended-vscode-settings"]], "Create a Beamline Repository": [[37, "create-a-beamline-repository"]], "To Start": [[37, "to-start"]], "Create a New Repository": [[37, "create-a-new-repository"]], "Steps": [[37, "steps"]], "Environment.sh": [[37, "environment-sh"]], "Change the IOC Name": [[37, "change-the-ioc-name"]], "Change the Beamline Name in Services": [[37, "change-the-beamline-name-in-services"]], "Change the Beamline Name in the Helm Chart": [[37, "change-the-beamline-name-in-the-helm-chart"]], "Wrapping Up": [[37, "wrapping-up"], [39, "wrapping-up"], [41, "wrapping-up"]], "Create an IOC Instance": [[38, "create-an-ioc-instance"]], "Introduction": [[38, "introduction"], [40, "introduction"], [49, "introduction"], [50, "introduction"]], "Create a New IOC Instance": [[38, "create-a-new-ioc-instance"]], "values.yaml": [[38, "values-yaml"]], "config": [[38, "config"]], "Trying Out The IOC Instance": [[38, "trying-out-the-ioc-instance"]], "Launch the IOC Instance": [[38, "launch-the-ioc-instance"]], "Operator Interface": [[38, "operator-interface"]], "Viewing IOC output": [[38, "viewing-ioc-output"]], "ibek Explanation": [[38, "ibek-explanation"]], "Raw Startup Script and Database": [[38, "raw-startup-script-and-database"]], "Debugging Generic IOC Builds": [[39, "debugging-generic-ioc-builds"]], "Investigate the Build Failure": [[39, "investigate-the-build-failure"]], "Making Changes Inside the Container": [[39, "making-changes-inside-the-container"]], "Applying Changes Made Inside the Container": [[39, "applying-changes-made-inside-the-container"]], "An Easier Fix Using ADSupport": [[39, "an-easier-fix-using-adsupport"]], "Deploying and Managing IOC Instances": [[40, "deploying-and-managing-ioc-instances"]], "Set up Environment for BL01T Beamline": [[40, "set-up-environment-for-bl01t-beamline"]], "Deploy the Example IOC Instance": [[40, "deploy-the-example-ioc-instance"]], "IMPORTANT: deploy-local vs deploy": [[40, "important-deploy-local-vs-deploy"]], "Managing the Example IOC Instance": [[40, "managing-the-example-ioc-instance"]], "Starting and Stopping IOCs": [[40, "starting-and-stopping-iocs"]], "Monitoring and interacting with an IOC shell": [[40, "monitoring-and-interacting-with-an-ioc-shell"]], "Logging": [[40, "logging"]], "Developer Containers": [[41, "developer-containers"]], "Types of Changes": [[41, "types-of-changes"]], "Need for a Developer Container": [[41, "need-for-a-developer-container"]], "Starting a Developer Container": [[41, "starting-a-developer-container"]], "Preparation": [[41, "preparation"], [46, "preparation"]], "Launching the Developer Container": [[41, "launching-the-developer-container"]], "Preparing the IOC for Testing": [[41, "preparing-the-ioc-for-testing"]], "Adding the Beamline to the Workspace": [[41, "adding-the-beamline-to-the-workspace"]], "Developer Container Layout": [[41, "id1"]], "Choose the IOC Instance to Test": [[41, "choose-the-ioc-instance-to-test"]], "Create a Generic IOC": [[42, "create-a-generic-ioc"]], "Lakeshore 340 Temperature Controller": [[42, "lakeshore-340-temperature-controller"]], "Create a New Generic IOC project": [[42, "create-a-new-generic-ioc-project"]], "Prepare the New Repo for Development": [[42, "prepare-the-new-repo-for-development"]], "Initial Changes to the Dockerfile": [[42, "initial-changes-to-the-dockerfile"]], "Configure the ibek-support Submodule": [[42, "configure-the-ibek-support-submodule"]], "Add a new support module": [[42, "add-a-new-support-module"]], "Add System Dependencies": [[42, "add-system-dependencies"]], "Add ibek-support Patch file for ADURL": [[42, "add-ibek-support-patch-file-for-adurl"]], "Update the IOC Makefile": [[42, "update-the-ioc-makefile"]], "Build the Generic IOC": [[42, "build-the-generic-ioc"]], "Defining IOC Instances using IBEK": [[43, "defining-ioc-instances-using-ibek"]], "What is IBEK": [[43, "what-is-ibek"]], "Why Use IBEK": [[43, "why-use-ibek"]], "Alternatives": [[43, "alternatives"]], "ibek-support": [[43, "ibek-support"]], "How to work on ibek-support": [[43, "how-to-work-on-ibek-support"]], "Tutorials Introduction": [[44, "tutorials-introduction"]], "Changing the IOC Instance": [[45, "changing-the-ioc-instance"]], "Locally Testing Your changes": [[45, "locally-testing-your-changes"]], "Raw Startup Assets": [[45, "raw-startup-assets"]], "More about ibek Runtime Asset Creation": [[45, "more-about-ibek-runtime-asset-creation"]], "Changing a Generic IOC Part 1": [[46, "changing-a-generic-ioc-part-1"]], "Verify the Example IOC Instance is working": [[46, "verify-the-example-ioc-instance-is-working"]], "Changing a Generic IOC Part 2": [[47, "changing-a-generic-ioc-part-2"]], "RTEMS - Deploying an Example IOC": [[48, "rtems-deploying-an-example-ioc"]], "Preparing the RTEMS Boot loader": [[48, "preparing-the-rtems-boot-loader"]], "Creating an RTEMS IOC Instance": [[48, "creating-an-rtems-ioc-instance"]], "RTEMS Environment Variables": [[48, "id1"]], "Deploying an RTEMS IOC Instance": [[48, "deploying-an-rtems-ioc-instance"]], "Checking your RTEMS IOC": [[48, "checking-your-rtems-ioc"]], "RTEMS - Creating a File Server": [[49, "rtems-creating-a-file-server"]], "Create a File Server Service": [[49, "create-a-file-server-service"]], "Setup a Kubernetes Server": [[50, "setup-a-kubernetes-server"]], "Bring Your Own Cluster": [[50, "bring-your-own-cluster"]], "Platform Choice": [[50, "platform-choice"]], "Installation Steps": [[50, "installation-steps"], [52, "installation-steps"]], "Install K3S lightweight Kubernetes": [[50, "install-k3s-lightweight-kubernetes"]], "Configure kubectl": [[50, "configure-kubectl"]], "Create an epics IOCs namespace and context": [[50, "create-an-epics-iocs-namespace-and-context"]], "Create a service account to run the IOCs": [[50, "create-a-service-account-to-run-the-iocs"]], "Completed": [[50, "completed"]], "Create a New Kubernetes Beamline": [[51, "create-a-new-kubernetes-beamline"]], "Create a new beamline repository": [[51, "create-a-new-beamline-repository"]], "Cluster Topologies": [[51, "cluster-topologies"]], "Shared Clusters": [[51, "shared-clusters"]], "Dedicated Clusters": [[51, "dedicated-clusters"]], "Environment Setup": [[51, "environment-setup"]], "Section 1": [[51, "section-1"]], "Section 2": [[51, "section-2"]], "Section 3": [[51, "section-3"]], "Setting up the Beamline Helm Chart Defaults": [[51, "setting-up-the-beamline-helm-chart-defaults"]], "All cluster types": [[51, "all-cluster-types"]], "k3s single server cluster": [[51, "k3s-single-server-cluster"]], "DLS test beamlines": [[51, "dls-test-beamlines"]], "DLS real beamlines": [[51, "dls-real-beamlines"]], "Set Up The One Time Only Beamline Resources": [[51, "set-up-the-one-time-only-beamline-resources"]], "Create a Test IOC to Deploy": [[51, "create-a-test-ioc-to-deploy"]], "Set up a Developer Workstation": [[52, "set-up-a-developer-workstation"]], "Options": [[52, "options"]], "Platform Support": [[52, "platform-support"]], "Setup VSCode": [[52, "setup-vscode"]], "Setup Docker or Podman": [[52, "setup-docker-or-podman"]], "Install Python": [[52, "install-python"]], "Git": [[52, "git"]], "Working with Support Modules": [[53, "working-with-support-modules"]], "Testing and Deploying a Generic IOC": [[54, "testing-and-deploying-a-generic-ioc"]], "Publishing the Generic IOC Container to GHCR": [[54, "publishing-the-generic-ioc-container-to-ghcr"]], "Making the Tests Relevant to our Generic IOC": [[54, "making-the-tests-relevant-to-our-generic-ioc"]], "Try out some GUI": [[54, "try-out-some-gui"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"docnames": ["developer/explanations/decisions", "developer/explanations/decisions/0001-record-architecture-decisions", "developer/explanations/decisions/0002-switched-to-pip-skeleton", "developer/explanations/decisions/0003-use-substitution-files", "developer/explanations/decisions/0004-autosave-req-files", "developer/explanations/decisions/0005-python-scripting", "developer/how-to/build-docs", "developer/how-to/contribute", "developer/how-to/make-release", "developer/how-to/update-tools", "developer/index", "developer/reference/standards", "developer/tutorials/dev-install", "index", "user/explanations/docs-structure", "user/explanations/introduction", "user/explanations/ioc-source", "user/explanations/kubernetes_cluster", "user/explanations/net_protocols", "user/explanations/repositories", "user/how-to/builder2ibek", "user/how-to/builder2ibek.support", "user/how-to/contributing", "user/how-to/debug", "user/how-to/ibek-support", "user/how-to/own_tools", "user/how-to/phoebus", "user/how-to/useful_k8s", "user/index", "user/overview", "user/reference/cli", "user/reference/configuration", "user/reference/environment", "user/reference/faq", "user/reference/ioc_helm_chart", "user/reference/k8s_resources", "user/reference/vscode_settings", "user/tutorials/create_beamline", "user/tutorials/create_ioc", "user/tutorials/debug_generic_ioc", "user/tutorials/deploy_example", "user/tutorials/dev_container", "user/tutorials/generic_ioc", "user/tutorials/ibek", "user/tutorials/intro", "user/tutorials/ioc_changes1", "user/tutorials/ioc_changes2", "user/tutorials/ioc_changes3", "user/tutorials/rtems_ioc", "user/tutorials/rtems_setup", "user/tutorials/setup_k8s", "user/tutorials/setup_k8s_new_beamline", "user/tutorials/setup_workstation", "user/tutorials/support_module", "user/tutorials/test_generic_ioc"], "filenames": ["developer/explanations/decisions.rst", "developer/explanations/decisions/0001-record-architecture-decisions.rst", "developer/explanations/decisions/0002-switched-to-pip-skeleton.rst", "developer/explanations/decisions/0003-use-substitution-files.rst", "developer/explanations/decisions/0004-autosave-req-files.rst", "developer/explanations/decisions/0005-python-scripting.rst", "developer/how-to/build-docs.rst", "developer/how-to/contribute.rst", "developer/how-to/make-release.rst", "developer/how-to/update-tools.rst", "developer/index.rst", "developer/reference/standards.rst", "developer/tutorials/dev-install.rst", "index.rst", "user/explanations/docs-structure.rst", "user/explanations/introduction.rst", "user/explanations/ioc-source.rst", "user/explanations/kubernetes_cluster.rst", "user/explanations/net_protocols.rst", "user/explanations/repositories.rst", "user/how-to/builder2ibek.rst", "user/how-to/builder2ibek.support.rst", "user/how-to/contributing.rst", "user/how-to/debug.rst", "user/how-to/ibek-support.rst", "user/how-to/own_tools.rst", "user/how-to/phoebus.rst", "user/how-to/useful_k8s.rst", "user/index.rst", "user/overview.rst", "user/reference/cli.rst", "user/reference/configuration.rst", "user/reference/environment.rst", "user/reference/faq.rst", "user/reference/ioc_helm_chart.rst", "user/reference/k8s_resources.rst", "user/reference/vscode_settings.rst", "user/tutorials/create_beamline.rst", "user/tutorials/create_ioc.rst", "user/tutorials/debug_generic_ioc.rst", "user/tutorials/deploy_example.rst", "user/tutorials/dev_container.rst", "user/tutorials/generic_ioc.rst", "user/tutorials/ibek.rst", "user/tutorials/intro.rst", "user/tutorials/ioc_changes1.rst", "user/tutorials/ioc_changes2.rst", "user/tutorials/ioc_changes3.rst", "user/tutorials/rtems_ioc.rst", "user/tutorials/rtems_setup.rst", "user/tutorials/setup_k8s.rst", "user/tutorials/setup_k8s_new_beamline.rst", "user/tutorials/setup_workstation.rst", "user/tutorials/support_module.rst", "user/tutorials/test_generic_ioc.rst"], "titles": ["Architectural Decision Records", "1. Record architecture decisions", "2. Adopt python3-pip-skeleton for project structure", "3. Use of substitution files to generate EPICS Databases", "4. How to configure autosave for IOCs", "5. Use Python for scripting inside and outside containers", "Build the docs using sphinx", "Contributing to the project", "Make a release", "Update the tools", "Developer Guide", "Standards", "Developer Contributing", "epics-containers", "About the documentation", "Essential Concepts", "Dev Container vs Runtime Container", "Kubernetes Cluster Config", "Channel Access and Other Protocols", "Source and Registry Locations", "Builder2ibek Conversion Tool", "Builder2ibek.support Conversion Tool", "Contributing to the project", "Debug an IOC instance locally", "Updating and Testing ibek-support", "Choose Your Developer Environment", "Viewing Operator Interfaces with Phoebus", "Kubernetes Additional How To\u2019s", "User Guide", "<no title>", "Command Line Interface for IOC Management", "Configuration for epics-containers", "The Environment Configuration File", "Frequently Asked Questions", "IOC Helm Chart Details", "Kubernetes Resources in an IOC Instance", "Recommended VSCode Settings", "Create a Beamline Repository", "Create an IOC Instance", "Debugging Generic IOC Builds", "Deploying and Managing IOC Instances", "Developer Containers", "Create a Generic IOC", "Defining IOC Instances using IBEK", "Tutorials Introduction", "Changing the IOC Instance", "Changing a Generic IOC Part 1", "Changing a Generic IOC Part 2", "RTEMS - Deploying an Example IOC", "RTEMS - Creating a File Server", "Setup a Kubernetes Server", "Create a New Kubernetes Beamline", "Set up a Developer Workstation", "Working with Support Modules", "Testing and Deploying a Generic IOC"], "terms": {"we": [0, 1, 2, 4, 5, 7, 15, 17, 18, 19, 22, 25, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54], "major": 0, "adr": [0, 1], "describ": [0, 1, 3, 15, 17, 27, 34, 37, 38, 42, 48, 49, 51, 54], "michael": [0, 1], "nygard": [0, 1], "below": [0, 12, 15, 17, 18, 34, 39, 41, 42, 48, 49, 51, 52], "i": [0, 3, 4, 5, 7, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 47, 48, 49, 50, 51, 52, 53, 54], "list": [0, 4, 15, 17, 25, 34, 38, 39, 40, 41, 42, 48, 49, 51, 52, 53], "our": [0, 15, 18, 19, 34, 38, 39, 41, 42, 46, 48, 50, 51], "current": [0, 9, 15, 19, 24, 25, 37, 38, 40, 42, 43, 48, 53], "1": [0, 3, 11, 17, 21, 27, 28, 33, 37, 38, 39, 40, 41, 42, 45, 48, 50, 52, 54], "2": [0, 11, 13, 15, 21, 27, 28, 37, 38, 39, 41, 42, 45, 46, 48, 54], "adopt": [0, 42], "python3": [0, 9, 12, 20, 52], "pip": [0, 5, 9, 12, 24, 32, 38, 52], "skeleton": [0, 9], "project": [0, 1, 6, 9, 10, 12, 13, 15, 17, 20, 27, 28, 30, 32, 37, 41, 46, 49, 51, 53, 54], "structur": [0, 9, 15, 42], "3": [0, 11, 12, 17, 32, 37, 38, 41, 42, 45, 52, 53], "us": [0, 1, 2, 4, 10, 11, 12, 15, 18, 19, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "substitut": [0, 15, 24, 34, 37, 38, 42, 43, 51, 52], "file": [0, 4, 7, 15, 19, 21, 22, 24, 26, 28, 29, 30, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 50, 51, 54], "gener": [0, 4, 8, 9, 12, 17, 21, 24, 25, 26, 28, 30, 32, 33, 34, 35, 37, 38, 40, 41, 43, 45, 48, 50, 51, 52, 53], "epic": [0, 2, 4, 5, 12, 17, 18, 19, 20, 21, 24, 25, 26, 28, 29, 30, 32, 34, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 51, 53, 54], "databas": [0, 4, 21, 24, 34, 42, 48, 51, 54], "4": [0, 17, 40, 45, 48, 52, 54], "how": [0, 3, 11, 12, 14, 15, 16, 17, 19, 30, 32, 34, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 54], "configur": [0, 15, 17, 18, 27, 28, 30, 37, 38, 39, 40, 41, 42, 46, 48, 49, 51], "autosav": [0, 46, 51], "ioc": [0, 3, 13, 16, 17, 18, 20, 21, 24, 25, 27, 28, 29, 32, 44, 49, 52, 53], "5": [0, 15, 21, 29, 40, 42, 48, 49, 52], "python": [0, 8, 9, 12, 15, 20, 30, 37, 38, 41, 42, 43, 51], "script": [0, 3, 15, 24, 30, 34, 37, 39, 40, 41, 42, 43, 45, 46, 48, 49, 51], "insid": [0, 15, 24, 34, 35, 38, 40, 41, 42, 43, 45, 46, 50, 53], "outsid": [0, 15, 18, 38, 39, 41, 42, 45, 50, 52], "contain": [0, 2, 7, 11, 12, 17, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 42, 43, 44, 45, 46, 48, 49, 50, 51, 53], "date": [1, 2, 3, 4, 5, 13, 24, 34, 37, 39, 40, 42, 48, 49, 50, 53, 54], "2022": [1, 2, 5], "02": [1, 2, 30, 38, 41, 45, 46, 48], "18": [1, 2], "accept": [1, 2, 3, 4, 5], "need": [1, 3, 14, 15, 17, 18, 27, 31, 32, 33, 34, 37, 38, 39, 40, 42, 43, 44, 46, 48, 49, 50, 51, 52, 53, 54], "made": [1, 38, 40, 41, 42, 46, 49, 54], "thi": [1, 2, 3, 5, 6, 8, 9, 11, 12, 14, 15, 17, 18, 19, 20, 21, 24, 26, 27, 29, 30, 31, 32, 34, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "see": [1, 6, 8, 13, 15, 17, 18, 27, 30, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 54], "": [1, 4, 13, 15, 18, 19, 28, 30, 32, 33, 34, 37, 40, 41, 42, 46, 48, 49, 50, 51, 52, 53], "articl": [1, 15], "link": [1, 10, 27, 28, 32, 34, 41, 42, 45, 46, 48, 52, 54], "abov": [1, 15, 18, 27, 29, 34, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52], "To": [1, 8, 9, 12, 17, 18, 28, 30, 34, 35, 38, 40, 41, 42, 43, 44, 45, 46, 48, 50, 51, 53, 54], "creat": [1, 8, 13, 17, 27, 28, 32, 33, 34, 35, 39, 40, 41, 43, 44, 45, 46, 52, 53], "new": [1, 7, 8, 12, 18, 20, 22, 27, 28, 32, 33, 34, 39, 40, 41, 43, 45, 46, 48, 49, 50, 52, 53, 54], "copi": [1, 5, 27, 34, 37, 38, 41, 42, 46, 48, 49, 50], "past": [1, 27, 41, 42, 51], "from": [1, 2, 3, 4, 5, 6, 10, 11, 15, 17, 18, 19, 27, 28, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "exist": [1, 4, 7, 19, 22, 37, 42, 43, 45, 46, 48, 49, 50, 51], "ones": [1, 40], "should": [2, 3, 7, 17, 19, 22, 27, 32, 34, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 54], "follow": [2, 3, 4, 5, 7, 8, 11, 15, 17, 18, 20, 22, 27, 32, 35, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 54], "The": [2, 3, 4, 6, 7, 13, 14, 15, 17, 18, 19, 21, 22, 24, 25, 27, 28, 30, 33, 34, 35, 37, 39, 40, 41, 45, 46, 48, 49, 50, 52, 54], "ensur": [2, 17, 39, 41, 43, 51], "consist": [2, 30, 43], "develop": [2, 3, 13, 15, 19, 27, 28, 30, 37, 38, 39, 43, 45, 46, 48, 54], "environ": [2, 7, 12, 15, 22, 27, 28, 29, 30, 34, 38, 41, 42, 46, 52], "packag": [2, 5, 12, 15, 19, 29, 30, 32, 37, 39, 44, 54], "manag": [2, 5, 13, 15, 17, 19, 27, 28, 29, 38, 39, 44, 46, 48, 51, 52], "have": [2, 4, 5, 7, 12, 15, 17, 18, 19, 20, 21, 22, 25, 27, 32, 34, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "switch": [2, 17], "modul": [2, 3, 4, 9, 15, 17, 19, 21, 28, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 51, 52], "fix": [2, 41, 42], "set": [2, 7, 12, 15, 17, 18, 22, 25, 27, 28, 30, 31, 32, 34, 35, 37, 38, 39, 41, 42, 43, 45, 48, 49, 50, 53], "tool": [2, 5, 10, 12, 13, 17, 25, 27, 28, 30, 32, 36, 37, 38, 39, 40, 41, 42, 45, 50, 51, 52], "github": [2, 7, 8, 9, 12, 13, 15, 19, 21, 22, 24, 25, 27, 31, 32, 34, 36, 37, 38, 39, 40, 41, 42, 44, 46, 48, 51, 54], "io": [2, 12, 13, 15, 19, 27, 32, 33, 35, 37, 38, 40, 42, 44, 48, 50, 51, 54], "can": [2, 3, 4, 5, 6, 7, 12, 15, 17, 18, 19, 22, 25, 26, 27, 30, 32, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 54], "pull": [2, 6, 7, 9, 22, 31, 32, 33, 34, 42, 46, 54], "updat": [2, 10, 15, 20, 21, 26, 27, 28, 32, 33, 34, 37, 39, 41, 42, 43, 46, 48, 49, 51, 53, 54], "latest": [2, 9, 24, 27, 40, 44, 54], "techniqu": [2, 9], "As": [2, 11, 17, 42], "mai": [2, 4, 15, 17, 19, 26, 30, 33, 37, 38, 39, 40, 41, 42, 45, 46, 50, 51, 54], "chang": [2, 4, 6, 7, 9, 13, 22, 24, 28, 33, 34, 38, 40, 48, 49, 51, 53, 54], "could": [2, 4, 15, 17, 19, 25, 32, 34, 37, 38, 39, 40, 41, 42, 45, 49, 50, 51, 52, 53, 54], "differ": [2, 14, 15, 17, 32, 33, 37, 39, 41, 48], "lint": 2, "format": [2, 26], "venv": [2, 12, 20, 38, 40, 52], "setup": [2, 9, 12, 17, 27, 28, 30, 37], "ci": [2, 5, 15, 19, 37, 40, 41, 42, 46, 54], "cd": [2, 12, 24, 27, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 51, 54], "2023": [3, 4, 15, 30, 40, 45, 48, 49], "11": [3, 4, 5, 27, 45, 52], "30": [3, 4, 5], "There": [3, 4, 14, 15, 17, 19, 27, 29, 32, 33, 37, 38, 39, 40, 41, 42, 49, 51, 52], "ar": [3, 4, 5, 6, 7, 11, 13, 14, 15, 17, 18, 19, 20, 21, 22, 25, 27, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "two": [3, 15, 18, 19, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 51, 53], "propos": 3, "At": [3, 15, 18, 19, 20, 27, 33, 34, 37, 38, 40, 42, 46, 49, 51], "startup": [3, 15, 24, 34, 40, 42, 43, 46, 48, 49, 51], "ibek": [3, 5, 20, 21, 28, 39, 41, 46, 54], "requir": [3, 4, 5, 12, 14, 15, 17, 18, 27, 29, 30, 33, 37, 39, 41, 42, 43, 44, 45, 46, 48, 50, 51, 52, 54], "instanc": [3, 4, 18, 20, 27, 28, 30, 32, 33, 37, 42, 49, 51, 52], "yaml": [3, 15, 20, 21, 24, 27, 34, 35, 36, 37, 40, 41, 43, 45, 46, 47, 48, 49, 50, 51], "combin": [3, 15, 17, 42, 43, 46, 50], "definit": [3, 15, 24, 30, 34, 38, 41, 42, 43, 45, 46, 53], "support": [3, 4, 15, 17, 18, 19, 25, 26, 27, 28, 30, 32, 33, 34, 37, 38, 39, 40, 41, 45, 46, 47, 48, 49, 50, 51, 54], "control": [3, 13, 15, 17, 19, 21, 24, 27, 30, 35, 38, 44, 48, 49, 51, 52], "what": [3, 5, 7, 16, 17, 22, 27, 34, 35, 37, 38, 40, 42, 44, 45, 46, 51], "look": [3, 17, 18, 34, 38, 39, 40, 41, 42, 45, 46, 48, 50, 51, 53, 54], "like": [3, 5, 15, 18, 37, 38, 39, 40, 42, 45, 46, 48, 49, 51, 54], "execut": [3, 15, 27, 29, 30, 38, 40, 41, 45, 48, 50], "msi": [3, 24], "dbloadrecord": [3, 45, 48, 54], "call": [3, 5, 14, 15, 30, 34, 38, 42, 43, 45, 46, 48, 49, 54], "pass": [3, 15, 17, 27, 30, 34, 38, 40, 42], "all": [3, 7, 15, 17, 18, 22, 24, 29, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 52, 53], "macro": [3, 42], "line": [3, 5, 11, 15, 27, 28, 32, 37, 38, 39, 40, 42, 45, 48, 50, 51, 52], "remov": [3, 15, 39, 41, 42, 43, 45, 46, 50, 51, 54], "some": [3, 15, 17, 18, 27, 37, 38, 40, 41, 42, 43, 44, 45, 46, 48, 50, 51, 53], "templat": [3, 4, 15, 21, 32, 34, 35, 37, 38, 39, 40, 41, 42, 43, 46, 48, 49, 51, 53, 54], "those": [3, 15, 20, 34, 37, 38, 39, 42, 43], "pmac": 3, "pattern": [3, 17, 42], "p": [3, 12, 21, 30, 38, 40, 42, 45, 52, 54], "m": [3, 12, 27, 36, 37, 45, 52, 54], "c": [3, 37, 40, 41, 48], "m1": 3, "addr": [3, 21, 27, 38, 42, 48, 54], "desc": [3, 45, 48], "motor": 3, "A": [3, 17, 18, 31, 33, 34, 38, 39, 41, 42, 48, 50, 51, 54], "includ": [3, 6, 15, 28, 38, 39, 40, 41, 42, 46, 48, 50, 51], "pmacdirectmotor": 3, "command": [3, 5, 15, 27, 28, 32, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 54], "which": [3, 4, 5, 6, 9, 12, 15, 17, 18, 21, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 48, 50, 51, 52], "doe": [3, 4, 15, 17, 37, 39, 41, 46, 48, 52], "recognis": 3, "an": [3, 6, 9, 15, 17, 18, 20, 21, 24, 27, 28, 30, 32, 33, 34, 37, 41, 42, 43, 44, 45, 46, 49, 51, 52, 54], "extra": [3, 27, 42, 45, 48, 51], "subst": [3, 15, 38, 42], "seen": [3, 15, 41], "runtim": [3, 15, 28, 30, 34, 38, 39, 40, 41, 42, 46, 48, 51], "directori": [3, 6, 11, 15, 30, 37, 41, 42, 48, 51, 54], "In": [3, 15, 17, 18, 34, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 54], "realiti": 3, "easier": [3, 5, 38, 41], "read": [3, 5, 21, 42, 44], "than": [3, 17, 19, 33, 37, 46, 54], "full": [3, 30, 39, 42], "so": [3, 12, 27, 32, 33, 37, 38, 39, 40, 41, 42, 43, 45, 48, 49, 50, 51, 52, 54], "debug": [3, 15, 28, 30, 32, 38, 40, 41, 48, 52, 53], "final": [3, 27, 35, 38, 39, 42, 48, 54], "who": [3, 17, 20, 21], "unabl": 3, "reason": [3, 4, 5, 18, 19, 30, 39, 41, 42, 46, 50, 51], "suppli": [3, 4, 8, 34, 38, 39, 41, 42, 43, 49, 51, 54], "own": [3, 4, 12, 15, 17, 32, 34, 37, 38, 40, 41, 42, 45, 46, 51, 52, 54], "expand": [3, 35], "much": [3, 5, 15, 19, 30, 37, 39, 42, 45], "more": [3, 5, 9, 14, 15, 27, 28, 30, 32, 33, 37, 40, 42, 46, 52, 54], "compact": 3, "import": [3, 15, 32, 41, 42, 48, 50, 51, 54], "due": [3, 39], "1mb": 3, "limit": [3, 25, 46, 49], "k8": [3, 17, 18, 27, 50, 51], "configmap": 3, "choic": [4, 15, 52], "pv": [4, 21, 27, 34, 38, 42, 45, 54], "ad": [4, 15, 32, 33, 38, 39, 40, 42, 43, 45, 48, 54], "info": 4, "tag": [4, 8, 15, 30, 37, 40, 42, 45, 48, 54], "raw": [4, 27, 40], "req": 4, "go": [4, 8, 34, 37, 38, 39, 40, 41, 42, 45, 46, 48, 50, 51, 52, 54], "http": [4, 6, 8, 9, 13, 15, 17, 19, 21, 25, 27, 31, 32, 33, 35, 37, 38, 40, 42, 44, 50, 51, 52, 54], "anl": 4, "gov": 4, "tech": 4, "talk": [4, 13, 15, 17, 51], "2019": 4, "msg01600": 4, "php": 4, "would": [4, 15, 17, 18, 27, 32, 33, 34, 37, 38, 39, 41, 42, 43, 44, 45, 48, 51, 52], "upstream": [4, 15, 17, 42], "most": [4, 7, 14, 15, 17, 22, 31, 34, 36, 39, 40, 41, 42, 44, 48, 51, 52], "default": [4, 15, 21, 30, 33, 34, 35, 38, 39, 41, 42, 43, 45, 50, 52, 54], "alreadi": [4, 37, 38, 39, 40, 41, 42, 43, 46, 48, 49, 50, 51, 52], "mani": [4, 15, 17, 38, 42, 52], "common": [4, 5, 17, 32, 39, 42], "facil": [4, 15, 17, 19, 29, 32, 37, 42, 51], "expect": [4, 38, 40, 51], "autogener": 4, "therefor": [4, 19, 38, 39, 40, 41, 42, 46, 48, 49], "overrid": [4, 15, 30, 38, 41, 43, 51], "add": [4, 13, 15, 17, 25, 32, 33, 37, 38, 39, 41, 42, 43, 45, 46, 48, 54], "But": [4, 34, 37, 38, 42], "simpler": 4, "just": [4, 30, 34, 39, 40, 41, 42, 43, 48, 49, 50, 51, 52, 54], "mechan": [4, 20, 41, 49], "come": [4, 15, 27, 31, 32, 37, 38, 39, 41, 42, 43, 45, 46, 52], "Then": [4, 27, 32, 37, 39, 40, 42, 48, 52, 54], "beamlin": [4, 15, 18, 19, 20, 28, 30, 32, 33, 34, 35, 38, 42, 45, 46, 48, 49, 50, 52], "level": [4, 41, 43, 51], "These": [4, 5, 12, 15, 17, 19, 27, 32, 35, 37, 38, 41, 42, 43, 44, 45, 50, 51, 54], "simpli": [4, 38, 40, 41, 50, 52], "take": [4, 12, 13, 34, 38, 41, 42, 52, 54], "form": [4, 18, 38], "same": [4, 8, 15, 17, 38, 39, 40, 41, 42, 45, 46, 48, 49, 51], "name": [4, 17, 21, 27, 30, 32, 34, 38, 40, 42, 43, 45, 46, 48, 49, 50, 51, 52], "one": [4, 7, 14, 15, 17, 22, 31, 32, 33, 35, 37, 38, 39, 40, 41, 42, 45, 46, 48, 50, 51, 54], "everyth": [4, 17, 37, 42, 50, 52], "nice": [4, 15, 27, 41], "simpl": [4, 15, 17, 39, 42, 45, 46, 48, 53, 54], "ec": [5, 15, 19, 20, 30, 35, 37, 38, 39, 40, 41, 43, 45, 46, 48, 51, 52], "cli": [5, 25, 30, 32, 37, 38, 40, 41, 50, 51], "do": [5, 12, 15, 17, 18, 24, 27, 30, 32, 34, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 50, 51, 52, 54], "docker": [5, 15, 27, 30, 32, 37, 38, 40, 41, 44, 45, 51, 54], "helm": [5, 19, 28, 29, 30, 32, 33, 41, 44, 48, 49], "kubectl": [5, 15, 27, 30, 32, 35, 49, 51], "compil": [5, 15, 27, 34, 38, 41, 42, 43, 45], "etc": [5, 17, 21, 27, 37, 41, 42, 43, 50], "seem": 5, "natur": 5, "fit": [5, 7, 22, 37, 42], "bash": [5, 15, 30, 34, 37, 40, 42], "featur": [5, 15, 17, 39, 41, 43, 49, 54], "were": [5, 17, 18, 33, 40, 41, 42, 45, 54], "origin": [5, 17, 31, 37, 41, 42, 45, 46, 54], "implement": [5, 15, 18, 38, 50], "convert": [5, 20, 21, 42], "provid": [5, 9, 15, 17, 18, 27, 30, 32, 33, 34, 38, 39, 41, 42, 43, 46, 49, 50, 51, 54], "richer": 5, "argument": [5, 30, 38, 42], "also": [5, 6, 7, 10, 15, 17, 18, 19, 22, 27, 28, 33, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 48, 49, 50, 51, 52, 54], "rich": 5, "help": [5, 14, 15, 17, 30, 40, 42, 52], "error": [5, 39, 40, 41, 42, 46, 51], "vastli": 5, "improv": [5, 13, 14], "except": [5, 8, 17, 45, 51], "handl": [5, 7, 22], "unit": 5, "test": [5, 12, 15, 17, 19, 25, 28, 30, 37, 39, 40, 42, 43, 46, 48, 49, 50, 52], "framework": [5, 13, 15, 38], "allow": [5, 15, 17, 18, 19, 41, 42, 45, 46, 50, 51], "good": [5, 14, 15, 38, 39, 41, 42, 46, 50, 52, 54], "coverag": [5, 36], "continu": [5, 17, 19, 27, 29, 37, 39, 41, 48, 52], "integr": [5, 19, 29, 36, 37, 45, 52], "complex": [5, 41, 42, 45], "string": [5, 42, 45], "clear": [5, 37, 41], "version": [5, 9, 15, 21, 29, 30, 32, 33, 34, 37, 39, 40, 41, 42, 45, 46, 48, 52, 54], "strategi": [5, 15, 29], "instal": [5, 15, 17, 20, 24, 28, 30, 37, 38, 39, 41, 43, 45, 48, 49, 51, 54], "mean": [5, 9, 15, 18, 32, 38, 39, 40, 41, 42, 43, 48, 50, 54], "you": [5, 6, 7, 8, 12, 13, 15, 18, 19, 22, 24, 25, 27, 30, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "check": [5, 7, 9, 22, 37, 38, 40, 41, 54], "run": [5, 6, 9, 10, 12, 15, 17, 18, 27, 30, 32, 34, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 51, 54], "report": 5, "bug": [5, 39, 41], "against": [5, 15, 37, 40, 41, 51], "specif": [5, 15, 19, 37, 38, 39, 40, 42, 51], "code": [5, 6, 7, 11, 12, 15, 21, 22, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 52, 54], "maintain": [5, 15, 17, 42], "becaus": [5, 15, 17, 18, 19, 30, 33, 37, 38, 39, 40, 41, 42, 45, 46, 50, 51, 52, 54], "thei": [5, 14, 15, 17, 19, 30, 33, 37, 38, 40, 41, 42, 43, 44, 45, 46, 48, 49, 51, 52, 54], "multipl": [5, 9, 15, 17, 18, 19, 30, 32, 41, 43, 45, 46, 48, 51], "without": [5, 15, 38, 41, 44, 45], "around": [5, 15, 17, 30, 41], "alwai": [5, 15, 17, 19, 33, 40, 42, 48, 52], "prefer": [5, 17, 25, 38, 46, 50, 52], "keep": [5, 9, 17, 33, 39, 41, 42, 46, 54], "minimum": [5, 17], "reliabl": 5, "base": [6, 15, 17, 40, 41, 42, 43, 50, 53, 54], "tox": [6, 12], "e": [6, 12, 15, 19, 20, 21, 27, 30, 32, 38, 41, 42, 45, 48, 51], "static": [6, 49], "api": [6, 11, 15, 17, 28, 30, 37, 50], "docstr": [6, 11], "document": [6, 7, 10, 12, 15, 17, 22, 27, 28, 31, 38, 39, 42, 48, 50], "standard": [6, 7, 10, 15, 17, 22, 25, 40, 42], "built": [6, 15, 17, 34, 38, 39, 41, 42, 46, 54], "html": [6, 36, 38, 42, 44], "open": [6, 7, 12, 15, 17, 18, 22, 36, 37, 38, 39, 41, 42, 44, 45, 46, 51, 52], "local": [6, 12, 15, 24, 27, 28, 30, 32, 33, 35, 37, 38, 39, 41, 42, 46, 48, 51, 52], "web": [6, 15, 32, 51], "brows": [6, 27, 41], "firefox": 6, "index": [6, 38], "process": [6, 11, 15, 17, 18, 41, 45, 53], "watch": [6, 42], "your": [6, 7, 13, 15, 22, 27, 28, 34, 35, 37, 38, 40, 41, 42, 43, 46, 49, 51, 52, 54], "rebuild": [6, 39, 41, 43, 54], "whenev": 6, "reload": 6, "ani": [6, 7, 9, 15, 22, 33, 34, 37, 38, 39, 40, 41, 42, 43, 44, 45, 50, 51, 52, 54], "browser": [6, 36], "page": [6, 8, 11, 13, 15, 20, 21, 26, 34, 37, 38, 40, 43, 51, 52, 54], "view": [6, 15, 28], "localhost": 6, "8000": 6, "If": [6, 7, 13, 15, 22, 25, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 50, 51, 52, 53, 54], "make": [6, 7, 10, 15, 17, 19, 22, 27, 33, 34, 37, 38, 40, 41, 42, 43, 45, 46, 48, 49, 51, 52, 53], "sourc": [6, 12, 13, 15, 24, 28, 29, 32, 33, 37, 38, 40, 41, 42, 43, 44, 46, 51, 52], "too": [6, 41, 45, 54], "tell": [6, 34, 35, 38, 39, 42, 46, 48, 50, 51], "src": [6, 41, 42], "welcom": [7, 22, 44], "request": [7, 9, 15, 17, 18, 22, 27, 38, 42, 46, 51], "through": [7, 12, 15, 17, 22, 25, 30, 37, 41, 43, 44, 48, 50, 52, 53], "pleas": [7, 8, 11, 13, 22, 49], "befor": [7, 22, 38, 40, 41, 42, 45, 46, 48, 49, 51, 52, 54], "great": [7, 22], "idea": [7, 15, 22, 39, 46], "involv": [7, 22, 32, 38, 45], "big": [7, 22], "ticket": [7, 22], "want": [7, 22, 32, 34, 37, 38, 39, 41, 45, 46, 48, 51], "sure": [7, 17, 22, 27, 37, 40, 41, 42, 45, 51, 52], "don": [7, 15, 22, 40, 41, 42, 48, 52, 54], "t": [7, 14, 15, 22, 40, 41, 42, 48, 52, 54], "spend": [7, 22], "time": [7, 15, 17, 22, 30, 32, 37, 38, 39, 41, 42, 43, 45, 52, 54], "someth": [7, 9, 22, 40, 41, 42, 43, 54], "might": [7, 22, 41, 42, 52], "scope": [7, 22], "offer": [7, 22, 27, 50], "place": [7, 20, 22, 31, 34, 37, 38, 39, 40, 41, 42, 43, 45, 49, 51, 52], "ask": [7, 22, 28, 32, 35, 51], "question": [7, 22, 28], "share": [7, 15, 17, 19, 22, 29, 38, 41, 42, 46, 49], "end": [7, 22, 32, 40, 42, 45, 46], "obviou": [7, 22], "when": [7, 12, 15, 18, 22, 26, 27, 30, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 46, 48, 49, 50, 51, 52], "close": [7, 9, 22, 40, 42], "rais": [7, 22], "instead": [7, 15, 22, 24, 25, 33, 37, 40, 41, 46, 48, 49, 52], "inform": [7, 14, 15, 22, 32, 42, 52], "up": [7, 10, 12, 15, 17, 22, 27, 28, 30, 31, 32, 33, 36, 38, 42, 43, 45, 48, 49, 50, 54], "build": [7, 10, 11, 13, 15, 22, 24, 27, 28, 29, 30, 38, 41, 42, 43, 44, 45, 46, 48, 53, 54], "doc": [7, 10, 11, 12, 13, 15, 17, 22, 35, 44, 50, 52], "checklist": 8, "choos": [8, 12, 15, 27, 28, 30, 37, 42, 43, 45, 46, 51, 52, 53], "pep440": 8, "compliant": 8, "number": [8, 15, 18, 32, 33, 37, 38, 39, 40, 48, 49], "pep": 8, "org": [8, 19, 37, 38, 42, 44, 52], "0440": 8, "draft": [8, 24, 51], "click": [8, 12, 37, 40, 41, 42, 46, 51, 52, 54], "chose": 8, "note": [8, 13, 21, 24, 27, 28, 33, 37, 38, 39, 40, 41, 42, 43, 48, 49, 50, 52], "review": [8, 40, 51], "edit": [8, 27, 32, 37, 38, 39, 41, 42, 43, 48, 50, 51, 54], "titl": [8, 11, 43, 54], "publish": [8, 15, 38, 39, 41, 42, 46], "push": [8, 15, 32, 37, 39, 40, 41, 45, 46, 48, 54], "main": [8, 17, 19, 27, 40, 42, 54], "branch": [8, 15, 40, 42, 43, 51], "ha": [8, 9, 15, 17, 18, 25, 27, 33, 34, 38, 39, 40, 41, 42, 43, 45, 46, 50, 51, 52, 54], "effect": [8, 51], "get": [8, 10, 12, 13, 15, 17, 18, 24, 30, 37, 39, 40, 41, 42, 44, 48, 49, 50, 51, 52, 54], "option": [8, 15, 27, 30, 38, 41, 42, 50], "merg": [9, 42], "sync": 9, "between": [9, 15, 18, 27, 32, 33, 39, 42, 45, 46, 51], "git": [9, 12, 15, 19, 24, 30, 32, 36, 37, 41, 42, 43, 45, 46, 51, 54], "rebas": 9, "fals": [9, 41], "com": [9, 12, 15, 17, 19, 21, 24, 27, 31, 32, 37, 38, 40, 41, 42, 44, 46, 51, 52, 54], "diamondlightsourc": [9, 42], "conflict": 9, "indic": [9, 37, 40], "area": [9, 34], "where": [9, 15, 32, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 51], "detail": [9, 12, 15, 17, 18, 28, 30, 33, 37, 38, 40, 41, 42, 46, 48, 51, 52], "split": [10, 13, 28, 37], "four": [10, 14, 28], "categori": [10, 28, 39], "access": [10, 15, 17, 27, 28, 40, 41, 42, 43, 48, 49, 50, 51, 52], "side": [10, 17, 24, 28, 41], "bar": [10, 28], "contribut": [10, 13, 19, 28, 38, 45], "sphinx": [10, 11, 12, 15], "releas": [10, 21, 27, 28, 37, 38, 39, 40, 41, 42], "practic": [10, 15, 28, 29, 41], "step": [10, 12, 15, 27, 28, 40, 41, 42, 43, 45, 46, 48, 53], "dai": 10, "dev": [10, 12, 24, 25, 27, 28, 30, 36, 39, 41, 42, 43, 46, 48], "task": [10, 42], "architectur": [10, 15, 17, 27, 44, 48], "decis": 10, "record": [10, 15, 34, 45, 48, 54], "why": [10, 16, 18, 28, 36, 46], "technic": [10, 14, 28], "materi": [10, 28], "defin": [11, 15, 28, 32, 34, 35, 37, 38, 45, 49, 54], "repositori": [11, 21, 24, 28, 29, 32, 34, 35, 36, 38, 39, 40, 41, 42, 46, 48, 49], "pre": [11, 38], "napoleon": 11, "extens": [11, 38, 41, 52], "googl": [11, 15], "style": 11, "consid": [11, 17, 41, 46, 51], "type": [11, 12, 15, 21, 30, 38, 39, 40, 42, 43, 45, 46, 47, 48, 49, 50, 53], "hint": 11, "function": [11, 14, 15, 30, 32, 37, 38, 40, 42, 43, 46, 52], "signatur": 11, "For": [11, 15, 18, 19, 27, 30, 32, 35, 37, 38, 40, 41, 45, 46, 48, 49, 50, 51, 52, 54], "exampl": [11, 15, 17, 18, 19, 24, 27, 28, 30, 32, 33, 35, 37, 38, 39, 41, 42, 43, 45, 49, 51, 52, 54], "def": [11, 21, 24, 38, 39, 41, 42, 43, 45, 54], "func": 11, "arg1": 11, "str": [11, 21, 38, 42, 45], "arg2": 11, "int": [11, 21, 38, 42], "bool": 11, "summari": [11, 41], "extend": 11, "descript": [11, 13, 15, 21, 24, 34, 35, 36, 38, 40, 41, 42, 45, 48, 51], "arg": [11, 21, 30, 38, 42, 45], "return": [11, 27], "valu": [11, 15, 21, 32, 34, 35, 37, 41, 42, 45, 48, 49, 51, 54], "true": [11, 17, 18, 30, 36, 41, 48, 51], "extract": [11, 15, 38, 40, 41], "underlin": 11, "convent": [11, 37, 42, 51], "headl": 11, "head": [11, 35, 39, 40], "guid": [11, 13, 14, 38, 44, 52], "onli": [12, 15, 17, 18, 20, 21, 24, 32, 33, 34, 35, 37, 38, 40, 41, 42, 48, 50, 54], "howev": [12, 17, 18, 33, 37, 38, 39, 40, 41, 42, 44, 45, 49, 51, 52], "virtual": [12, 15, 17, 18, 29, 37, 40, 50, 52], "other": [12, 15, 17, 19, 25, 26, 28, 32, 34, 38, 39, 40, 41, 42, 45, 49, 50, 51, 54], "them": [12, 15, 17, 19, 29, 32, 33, 37, 38, 39, 41, 42, 43, 46, 51, 54], "instruct": [12, 15, 25, 27, 30, 35, 37, 40, 42, 45, 50, 51, 52], "minim": [12, 25], "onc": [12, 21, 38, 40, 41, 42, 48, 49, 51, 52, 53, 54], "complet": [12, 15, 31, 32, 34, 37, 38, 41, 46, 48, 51, 54], "first": [12, 13, 27, 32, 37, 38, 39, 40, 41, 42, 46, 48, 50, 51, 52, 54], "either": [12, 52], "host": [12, 15, 18, 38, 41, 45, 50, 51, 52], "machin": [12, 17, 38, 40, 41, 50, 51], "8": [12, 42, 52], "later": [12, 27, 38, 40, 41, 42, 45, 52], "under": [12, 15, 18, 37, 38, 39, 41, 46], "vscode": [12, 25, 28, 37, 38, 39, 40, 41, 42, 45, 46], "virtualenv": 12, "bin": [12, 20, 27, 32, 38, 40, 42, 48, 52], "activ": [12, 38, 40, 52, 54], "devcontain": [12, 24, 25, 30, 39, 41, 42, 45, 50, 52], "reopen": [12, 41, 42, 46], "prompt": [12, 39, 40, 41, 45, 46, 48, 50], "termin": [12, 36, 39, 40, 41, 42, 45, 48], "graph": [12, 36], "tree": [12, 36, 41], "pipdeptre": 12, "now": [12, 13, 37, 38, 39, 40, 41, 42, 46, 48, 49, 50, 51, 52, 54], "organ": [13, 15, 37], "hold": [13, 15, 39, 54], "collect": [13, 17, 31], "deploi": [13, 15, 17, 27, 28, 29, 30, 32, 33, 35, 37, 38, 44, 45, 46, 49, 52], "container": [13, 19, 41, 44], "essenti": [13, 27, 28, 41, 44], "concept": [13, 28, 35, 44, 51], "comment": [13, 42], "suggest": [13, 18, 24, 32, 53], "wiki": 13, "issu": [13, 17, 18, 39, 40, 54], "tutori": [13, 14, 25, 30, 32, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "being": [13, 30, 51, 54], "work": [13, 17, 19, 20, 26, 28, 30, 33, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 48, 50, 51, 52, 54], "few": [13, 17, 34, 37, 39, 41, 48], "avail": [13, 15, 17, 24, 30, 33, 37, 38, 39, 40, 41, 42, 44, 45, 49, 51, 52, 54], "warn": [13, 45, 51], "about": [13, 28, 34, 37, 41, 42, 46], "out": [13, 24, 27, 32, 34, 39, 40, 41, 42, 43, 44, 48, 49, 50, 53], "interest": [13, 17, 40, 50, 52], "discuss": [13, 18, 31, 32, 39, 43], "system": [13, 15, 17, 19, 29, 30, 32, 37, 39, 41, 42, 43, 50, 51, 52], "brief": 13, "statu": [13, 15, 18, 27, 30, 40], "join": 13, "oxfordshir": 13, "meet": 13, "nov": 13, "icalepc": 13, "2021": [13, 50], "paper": 13, "kubernet": [13, 18, 28, 29, 30, 33, 34, 37, 38, 39, 40, 41, 42, 43, 44, 46, 48, 49], "section": [13, 17, 30, 32, 33, 37, 38, 39, 40, 41, 43, 50, 54], "user": [13, 15, 17, 19, 20, 21, 27, 32, 33, 36, 37, 40, 41, 42, 48, 49, 50, 51, 52, 54], "back": [13, 32, 33, 39, 40, 41, 46, 50, 52], "grand": 14, "unifi": 14, "theori": 14, "david": 14, "la": 14, "secret": [14, 50], "understood": 14, "order": [14, 17, 18, 34, 37, 41, 42, 48, 51], "write": [14, 36, 38, 41, 42], "softwar": [14, 15, 29, 44, 50], "isn": 14, "thing": [14, 15, 32, 41, 42, 46, 51, 54], "refer": [14, 15, 32, 38, 43, 45], "explan": [14, 18, 37, 42, 43, 46, 51], "repres": [14, 15, 34, 37, 38, 48, 49], "purpos": [14, 37, 40, 41, 42, 48, 49, 51, 54], "approach": [14, 15, 18, 37, 39, 41, 48], "creation": 14, "understand": [14, 27, 30, 41], "implic": 14, "often": [14, 33, 39], "immens": 14, "topic": [14, 38, 44], "appli": [15, 27, 29, 35, 42, 50], "modern": [15, 29, 50], "industri": [15, 29], "best": [15, 29, 32, 42, 44, 51], "deliveri": [15, 29], "theme": [15, 29], "lightweight": [15, 29, 48], "central": [15, 17, 29, 32], "orchestr": [15, 17, 29, 44, 51], "chart": [15, 19, 28, 29, 33, 35, 41, 48, 49], "asset": [15, 19, 29, 37, 38, 41, 46], "No": [15, 29], "automat": [15, 29, 42], "deliv": [15, 29], "oci": [15, 29], "registri": [15, 28, 29, 33, 39, 51, 54], "each": [15, 17, 32, 33, 37, 38, 40, 41, 42, 43, 45, 48, 49, 50, 51, 52], "save": [15, 30, 33, 38, 39, 42, 43], "public": [15, 19, 42, 54], "privat": [15, 19], "dockerhub": 15, "initi": [15, 18, 26, 30, 46, 51], "servic": [15, 17, 18, 27, 32, 46, 48, 51], "interchang": 15, "thu": [15, 42, 48, 49], "podman": [15, 30, 32, 38, 40, 41, 44, 45, 51, 54], "job": [15, 40], "explain": [15, 16, 27], "relationship": [15, 33], "semaphoreci": 15, "blog": 15, "v": [15, 28, 30, 38, 46], "outcom": 15, "alter": [15, 41], "suit": [15, 32, 51], "infrastructur": 15, "dl": [15, 18, 19, 20, 21, 32, 33, 37, 40, 41, 42, 48, 49, 50, 52, 54], "abl": [15, 17, 33, 40, 41, 42, 45, 48, 50], "vanilla": [15, 42], "longer": [15, 38], "fork": [15, 42, 46], "princip": 15, "present": [15, 20, 24, 37, 48, 49], "here": [15, 24, 25, 28, 32, 34, 37, 38, 39, 41, 42, 44, 50, 51, 52, 53], "connect": [15, 17, 18, 33, 48, 49, 50], "given": [15, 18, 30, 34, 38, 40, 49], "class": [15, 24, 34, 37, 38], "devic": [15, 17, 34, 37, 38, 42, 46, 48, 53], "ghcr": [15, 19, 32, 37, 38, 40, 48, 51], "adaravi": [15, 42], "linux": [15, 21, 38, 39, 40, 44, 48, 49, 50, 52], "10": [15, 21, 27, 30, 33, 36, 40, 42, 49, 50, 52, 54], "areadetector": [15, 38, 39, 41, 54], "driver": [15, 38], "gige": [15, 18], "camera": [15, 38], "load": [15, 17, 18, 37, 40, 45, 48, 49, 51, 52, 54], "map": [15, 32], "mount": [15, 16, 34, 39, 41, 43, 48], "filesystem": [15, 38, 40, 41, 42, 48, 49, 51], "point": [15, 17, 27, 31, 32, 39, 40, 42, 49, 51, 52], "config": [15, 24, 27, 28, 34, 37, 40, 41, 42, 43, 45, 46, 48, 50, 51, 54], "bootstrap": 15, "uniqu": [15, 34, 38], "properti": 15, "content": [15, 42, 45, 54], "st": [15, 34, 38, 42, 43, 45, 48, 54], "cmd": [15, 34, 38, 42, 43, 45, 48, 54], "shell": [15, 38, 39, 41, 45, 48, 51, 52, 54], "start": [15, 17, 27, 28, 30, 34, 38, 39, 42, 43, 44, 45, 48, 50, 51, 52, 53, 54], "sh": [15, 27, 30, 32, 34, 38, 39, 40, 41, 43, 44, 45, 50, 51, 54], "fulli": [15, 54], "reduc": [15, 17, 33], "disk": [15, 50, 51], "It": [15, 17, 18, 20, 24, 27, 30, 32, 33, 34, 35, 37, 38, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52], "throughout": 15, "term": 15, "word": [15, 17], "context": [15, 42], "ambigu": 15, "easili": [15, 41], "effici": [15, 42], "across": [15, 17, 38, 51], "cluster": [15, 18, 27, 28, 33, 34, 35, 40, 44, 48, 49, 52], "resourc": [15, 28, 34, 37, 44, 49, 50], "schedul": [15, 17, 51], "onto": [15, 41], "suitabl": [15, 18], "upon": [15, 39, 40, 54], "15": [15, 48], "year": [15, 37, 42], "experi": [15, 38, 50], "product": [15, 17, 33, 37, 50, 51, 52], "workload": [15, 35], "breed": 15, "commun": [15, 18, 19, 50], "sinc": [15, 17, 18, 38, 39, 52], "wa": [15, 18, 37, 38, 39, 41, 42, 48], "2014": 15, "todai": 15, "far": 15, "domin": 15, "technologi": 15, "wai": [15, 18, 28, 30, 32, 39, 40, 41, 42, 43, 49, 51], "auto": [15, 26, 33, 36, 38, 42, 48, 51, 54], "server": [15, 17, 18, 21, 28, 32, 38, 40, 41, 42, 45, 48, 52, 53], "manual": [15, 41, 42, 46], "stop": [15, 41, 45, 48, 51], "monitor": [15, 17, 42, 48, 49, 51], "rollback": 15, "previou": [15, 33, 39, 40, 41, 45, 46, 48, 51, 54], "alloc": [15, 17, 38], "adequ": [15, 41], "failov": 15, "anoth": [15, 39, 45], "soft": [15, 41, 45, 48], "ti": [15, 33], "hardwar": [15, 37, 40], "log": [15, 17, 32, 37, 38, 42, 48, 49, 51], "histor": [15, 42], "via": [15, 17, 41, 46, 48, 51], "graylog": [15, 17], "interact": [15, 32, 33, 38, 48, 50], "its": [15, 17, 18, 27, 35, 37, 38, 42, 43, 46, 51, 52], "directli": [15, 17, 40, 48], "distribut": [15, 17, 20, 27, 50, 52], "replac": [15, 17, 37, 38, 41, 42, 43, 50, 52, 54], "stack": [15, 17], "find": [15, 30, 37, 39, 40, 42, 51], "variou": 15, "solut": [15, 39, 45], "been": [15, 17, 25, 39, 40, 41, 42, 45, 50, 51, 52], "portain": [15, 52], "www": [15, 44], "paid": [15, 52], "excel": [15, 41, 52], "visibl": [15, 36, 41], "interfac": [15, 17, 21, 28, 40, 52], "veri": [15, 19, 27, 39, 41, 42, 45, 48, 50, 53, 54], "easi": [15, 17, 38, 42, 50], "downsid": [15, 18], "decid": [15, 50], "popular": 15, "applic": [15, 17, 18, 26, 32], "within": [15, 17, 18, 27, 43, 50, 52], "store": [15, 19, 33, 37, 49, 51], "histori": [15, 32], "acceler": [15, 17, 19, 24, 32, 37, 48, 50, 51], "domain": [15, 17, 24, 30, 32, 34, 37, 40, 41, 48, 49, 50, 51], "folder": [15, 16, 24, 30, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 51, 52, 54], "Such": [15, 52], "zip": 15, "redund": 15, "perform": [15, 17, 27, 37, 42, 45, 46], "clone": [15, 24, 37, 39, 41, 42, 46, 51, 54], "temporari": [15, 40, 41], "addition": 15, "result": [15, 38, 39, 42, 48], "itself": [15, 17, 18, 33, 37, 39, 41, 42, 49], "re": [15, 38, 40, 42, 46], "held": [15, 48, 51], "done": [15, 17, 37, 38, 39, 40, 41, 42, 45, 46, 48, 51], "special": [15, 17], "locat": [15, 17, 20, 28, 38, 39, 41, 51], "legaci": [15, 27], "reli": [15, 19], "heavili": [15, 42], "know": [15, 18, 38, 40, 51], "credenti": [15, 51], "both": [15, 17, 19, 32, 37, 40, 42, 48, 49, 50], "cloud": [15, 17, 33, 50, 51], "premis": [15, 33], "dure": [15, 41, 43, 45], "poc": 15, "action": [15, 19, 40, 42, 54], "gitlab": [15, 17, 19, 24, 51, 54], "typic": [15, 17, 18, 28, 37], "boilerpl": [15, 34, 41, 42, 48], "custom": [15, 30, 34, 51], "boot": [15, 24, 27, 41, 42, 49], "depend": [15, 34, 37, 38, 39, 41, 42, 43, 51], "element": [15, 41], "u": [15, 17, 32, 38, 39, 41, 42, 43, 50, 54], "clean": [15, 50], "direct": [15, 17, 18, 40], "eventu": [15, 17, 37, 48], "simul": [15, 34, 37, 38, 40], "commit": [15, 37, 41, 42, 45, 54], "prepar": 15, "deploy": [15, 17, 35, 37, 40, 48, 50, 51, 52], "launch": [15, 27, 30, 37, 39, 42, 43, 45, 52, 54], "verifi": [15, 37, 38, 40, 45, 48, 49, 51, 54], "valid": [15, 37, 38, 54], "real": [15, 30, 37, 40], "target": [15, 17, 26, 30, 32, 38, 40, 41, 48], "x86_64": [15, 21, 39], "rtem": [15, 28, 39], "mvme5500": [15, 48], "g": [15, 19, 27, 30, 32, 41, 42, 48, 51], "usb": 15, "pcie": 15, "theses": 15, "arm64": [15, 27], "nativ": 15, "futur": [15, 18, 24, 26, 40, 42, 48, 49], "gui": [15, 21, 26, 42], "engin": [15, 17, 26, 30, 33, 42], "screen": [15, 26, 27, 33, 42, 51, 54], "helper": [15, 52], "entri": [15, 38, 40, 42, 45, 51, 52], "wrapper": [15, 30], "teach": [15, 37], "show": [15, 18, 30, 32, 38, 39, 40, 41, 45, 46, 48, 49, 51], "builder": [15, 20, 21, 42, 43], "fetch": [15, 32, 38, 41, 42, 46], "artifact": 15, "variabl": [15, 18, 27, 34, 39, 42, 45, 51], "give": [15, 17, 18, 27, 37, 41, 42, 43, 54], "metadata": [15, 27, 30, 34, 50], "db": [15, 21, 27, 38, 41, 42, 45, 46, 48, 54], "blueski": 15, "ophyd": 15, "bob": [15, 42], "adl": 15, "edm": [15, 27, 54], "todo": [16, 20, 21, 23, 25, 27, 31, 33, 35, 36, 37, 41, 42, 43, 45, 46, 47, 51, 53, 54], "xxxx": 16, "happen": [16, 39], "three": [17, 42], "topologi": 17, "per": [17, 18, 41, 48, 51], "singl": [17, 18, 27, 37, 38, 42, 43, 46, 49, 50, 54], "k3": 17, "suffici": [17, 39], "rancher": [17, 27, 50], "high": [17, 38], "quit": 17, "straightforward": 17, "cost": 17, "separ": [17, 27, 32, 33, 41, 50, 51], "plane": 17, "everi": [17, 21, 38, 41, 42, 43, 46, 51], "wherea": [17, 43], "hand": [17, 36, 38, 42, 44, 45, 46, 48, 54], "entir": [17, 39, 41, 45], "economi": 17, "scale": 17, "signific": [17, 38], "rout": [17, 18, 50], "channel": [17, 28, 38, 45, 50, 51], "pva": [17, 38, 54], "protocol": [17, 28, 42, 51], "subnet": [17, 18, 45, 51], "spent": 17, "abandon": 17, "worker": [17, 18, 33, 51], "remot": [17, 18, 41, 52], "benefit": [17, 19], "overcom": 17, "problem": [17, 41, 45], "achiev": [17, 32, 37], "addit": [17, 28, 30, 39, 41, 42, 46, 48], "failur": [17, 42], "secur": [17, 18, 42], "administr": [17, 51], "down": [17, 39], "lot": [17, 42], "multi": [17, 45], "investig": [17, 37, 41, 50], "enabl": [17, 38, 40, 41, 42, 48, 54], "compris": 17, "22": [17, 52], "bare": 17, "metal": 17, "vm": 17, "master": [17, 34, 38, 50], "etcd": 17, "backend": 17, "balanc": [17, 18, 49], "haproxi": 17, "dn": 17, "endpoint": 17, "diamond": [17, 19, 24, 32, 42, 48, 51], "ac": [17, 19, 24, 32, 48, 51], "uk": [17, 19, 24, 32, 48, 51], "ip": [17, 18, 27, 48, 49, 50], "virtu": 17, "pair": [17, 38], "bind": [17, 41], "vrrp": 17, "keepaliv": 17, "kubeadm": 17, "similar": [17, 41, 48, 53], "rke": 17, "upgrad": [17, 39, 49, 52], "downgrad": 17, "provis": 17, "weav": 17, "cni": 17, "broadcast": [17, 18, 27, 51], "unicast": 17, "multicast": 17, "bum": 17, "traffic": [17, 18, 33, 50], "iptabl": [17, 27], "pod": [17, 18, 27, 30, 48, 49, 50, 51], "compon": [17, 19, 21], "loadbalanc": [17, 49], "object": [17, 21, 42], "ingress": 17, "nginx": [17, 51], "nginxinc": 17, "stdout": [17, 48], "fluentd": 17, "daemonset": 17, "ship": 17, "authent": [17, 37], "keycloak": 17, "sit": [17, 18, 48], "rack": 17, "top": [17, 38, 39, 42, 45, 46, 48, 54], "tor": 17, "router": 17, "rest": [17, 31, 42, 48, 51], "routabl": 17, "ospf": 17, "global": [17, 32, 33, 37, 41, 45, 48], "speaker": 17, "respond": 17, "arp": 17, "One": [17, 32], "ansibl": 17, "heavi": 17, "prometheus_oper": 17, "tenant": 17, "namespac": [17, 27, 30, 49, 51], "enforc": [17, 37], "tenanc": 17, "demand": 17, "act": 17, "sandbox": 17, "familiar": [17, 38], "associ": [17, 21, 42, 46], "polici": [17, 37], "determin": [17, 32, 37, 41, 42], "data": [17, 51], "elev": [17, 18], "privileg": [17, 18], "rbac": [17, 27], "psp": 17, "latter": [17, 48], "deprec": 17, "21": [17, 27], "soon": [17, 24, 34, 39, 40, 42, 53, 54], "agent": 17, "part": [17, 28, 30, 32, 38, 39, 41, 54], "physic": [17, 49], "henc": [17, 49], "model": [17, 49], "assum": [17, 38, 43, 48, 51], "centralis": [17, 51], "subhead": 17, "cannot": [17, 18], "case": [17, 18, 19, 34, 37, 39, 40, 45, 46, 51], "brought": 17, "send": 17, "messag": [17, 30, 32, 40, 46], "address": [17, 18, 21, 27, 38, 42, 48, 49, 50], "pend": 17, "relev": [17, 20, 21, 37], "must": [17, 18, 30, 32, 40, 42, 52, 54], "toler": [17, 51], "select": [17, 38, 41, 42, 46, 51], "certain": 17, "util": [17, 38, 48], "aggreg": 17, "prometheu": 17, "kube": [17, 27, 50, 51], "proxi": [17, 18, 27], "noschedul": [17, 51], "udp": [17, 49], "discoveri": [17, 36, 48], "quirk": 17, "exhibit": 17, "overlai": 17, "unsuit": 17, "underli": [17, 30], "rather": [17, 37, 42], "intern": [17, 19, 39, 42, 48, 51, 54], "normal": [17, 18, 42], "hostnetwork": [17, 51], "spec": [17, 38], "whilst": 17, "attribut": 17, "drop": [17, 43], "capabl": [17, 39, 42, 50], "attack": 17, "surfac": 17, "somewhat": 17, "net_admin": 17, "net_broadcast": 17, "potenti": [17, 25, 39], "kafka": 17, "spark": 17, "jenkin": 17, "sonarqub": 17, "zocalo": 17, "jupyterhub": 17, "busi": 17, "app": [17, 20, 27, 30], "confluenc": 17, "jira": [17, 51], "elasticsearch": 17, "graphit": 17, "nagdash": 17, "core": 17, "ldap": 17, "kerbero": 17, "netbox": 17, "mariadb": 17, "ht": 17, "condor": 17, "learn": [17, 41, 42, 46], "toolkit": 17, "kubeflow": 17, "kubevirt": 17, "virtlet": 17, "relion": 17, "storag": [17, 51], "ceph": 17, "rook": 17, "portworkx": 17, "xchem": 17, "fragalysi": 17, "challeng": 18, "subject": [18, 27], "extern": [18, 42, 43, 49], "port": [18, 21, 38, 42, 48, 49, 54], "client": [18, 27, 30, 48, 50, 51, 52], "still": [18, 33, 38, 39, 46, 48, 51, 54], "translat": [18, 42], "packet": 18, "lan": 18, "behaviour": [18, 34, 38, 42], "negoti": 18, "ephemer": 18, "layer": 18, "nat": 18, "prototyp": 18, "found": [18, 34, 39, 41, 43], "had": [18, 33, 46, 52, 54], "gvsp": 18, "vision": 18, "stream": [18, 42, 53, 54], "workaround": [18, 41], "diagram": 18, "ca": [18, 46], "forward": [18, 27], "2nd": [18, 48, 51], "fail": [18, 33, 39, 41, 48, 51], "conclus": 18, "studi": 18, "fiddli": 18, "basi": [18, 41], "plu": [18, 30, 35, 38, 40], "guarante": [18, 38, 40, 42], "round": 18, "possibl": [18, 19, 33, 41, 42, 44, 46], "node": [18, 33, 50, 51], "bypass": [18, 48], "perspect": 18, "ident": [18, 37, 42, 45], "tradit": [18, 42, 53], "listen": 18, "receiv": 18, "team": [18, 48, 51], "restrict": [18, 19, 37], "mitig": 18, "argu": 18, "repo_nam": 19, "kind": [19, 27, 39, 42, 50], "recommend": [19, 25, 27, 28, 33, 37, 39, 41, 42, 44, 52], "intent": [19, 37], "reusabl": 19, "anywher": 19, "sens": 19, "proprietari": 19, "licens": 19, "adapt": 19, "altern": [19, 27, 37, 38, 44, 46, 52], "particular": [19, 41, 42, 50], "strong": 19, "kept": 19, "live": [19, 42, 48], "usual": [19, 32, 48, 51], "nexu": 19, "xml": [20, 21, 42], "whose": [20, 32], "blxxy": 20, "wip": [20, 21, 47, 51], "feb": [20, 21, 26], "2024": [20, 21, 26, 37, 38, 40], "until": [20, 37, 39, 40, 41, 42, 43, 51], "dls_sw": [20, 21, 52], "py": [21, 39, 42], "prod": 21, "r3": 21, "14": 21, "12": [21, 48], "7": [21, 48, 52], "lakeshore340": 21, "6": [21, 30, 39, 40, 42], "0": [21, 27, 30, 36, 38, 42, 48, 50, 52, 54], "arch": 21, "deviocstat": [21, 34, 42, 48], "deviocstatshelp": 21, "bl16i": 21, "ea": [21, 30, 34, 35, 37, 38, 40, 41, 45, 46, 48, 51], "07": [21, 30, 50], "stat": 21, "asyn": [21, 38, 42], "asynip": 21, "p1": 21, "127": [21, 50], "5400": 21, "loop": [21, 41, 42, 43], "ls340": 21, "01": [21, 24, 34, 35, 37, 40, 48, 51], "scan": [21, 42, 45, 48], "tempscan": [21, 42], "gda_desc": 21, "lakeshor": 21, "340": 21, "temperatur": 21, "gda_nam": 21, "ls340b": 21, "epics_bas": 21, "dbpf": [21, 54], "d1": 21, "disabl": [21, 27, 41], "languag": [21, 38, 42], "schema": [21, 38, 42, 45], "download": [21, 27, 38, 42, 44, 52], "json": [21, 38, 42, 45], "kelvin": [21, 42], "archiv": [21, 41, 42], "sec": [21, 42], "prefix": [21, 34, 38, 42], "bu": [21, 42], "eg": [21, 42], "rate": [21, 38, 42], "non": [21, 37, 41, 42, 50], "voltag": [21, 42, 48], "paramet": [21, 38, 42, 48], "id": [21, 30, 38, 41, 42], "gda": 21, "heater": [21, 42], "pid": [21, 42], "procedur": [24, 53], "along": [24, 41, 42, 48], "e7": [24, 39, 50], "workspac": [24, 31, 34, 39, 42, 43, 45], "my": [24, 36, 43], "repo": [24, 30, 32, 33, 36, 37, 38, 39, 40, 41, 43, 45, 48, 51], "acc": 24, "psc": 24, "sr25a": 24, "entiti": [24, 38, 42, 43, 45], "instanti": [24, 38, 42, 43, 54], "timingtempl": 24, "invoc": [24, 39], "walk": [25, 43, 48], "wish": 25, "codespac": 25, "enhanc": 25, "effort": 25, "java": 26, "pvi": [26, 33, 41, 42], "opi": [26, 27, 41, 45, 51, 54], "progress": [26, 35, 43, 46], "readi": [26, 27, 37, 38, 41, 42, 45, 48, 50, 51, 52], "est": 26, "explor": [27, 39], "after": [27, 37, 42, 45, 54], "workstat": [27, 28, 30, 32, 40, 41, 44, 50, 51], "github_url": 27, "version_kube_dashboard": 27, "curl": [27, 40, 50], "w": [27, 41], "url_effect": 27, "l": [27, 30, 41], "o": [27, 30, 40, 49, 50], "null": 27, "sed": [27, 41, 51], "f": [27, 40, 42, 48, 50, 52], "githubusercont": [27, 40], "aio": 27, "admin": [27, 32], "role": 27, "eof": [27, 50], "apivers": [27, 48, 50], "v1": [27, 50], "serviceaccount": [27, 50], "author": [27, 38, 46], "clusterrolebind": 27, "roleref": 27, "apigroup": 27, "clusterrol": 27, "token": [27, 40, 50], "clipboard": 27, "On": 27, "24": [27, 30, 42, 52], "newer": 27, "n": [27, 30, 41, 49], "url": [27, 31, 32, 40, 42, 51, 54], "pi3": 27, "pi4": 27, "memori": [27, 38, 51], "better": [27, 36, 39, 43, 51], "yet": [27, 38, 40, 42, 46, 52], "coupl": [27, 48], "sudo": [27, 50], "usr": [27, 39], "sbin": 27, "cmdline": 27, "cgroup_memori": 27, "cgroup_en": 27, "reboot": [27, 48], "wsl2": [27, 50, 52], "platform": [27, 41], "20262": 27, "higher": 27, "ubuntu": [27, 39, 50, 52], "bring": 27, "wget": 27, "2bk3s1": 27, "root": [27, 40, 41, 42, 48, 50, 52], "0755": 27, "foreground": 27, "second": [27, 32, 39, 40, 41, 46, 48], "wl": 27, "mkdir": [27, 38, 40, 42, 50, 52], "cp": [27, 38, 42, 48, 50], "chown": [27, 50], "gile": 27, "box": [27, 43], "network": [27, 45, 48, 50, 51], "epics_ca_addr_list": 27, "discov": 27, "restart": [27, 30, 40, 41, 48, 49, 51], "ag": [27, 49], "6779d4dcf": 27, "g2cpm": 27, "19h": 27, "exec": [27, 38, 40], "busybox": [27, 39], "ifconfig": 27, "eth0": 27, "encap": 27, "ethernet": [27, 48], "hwaddr": 27, "70": 27, "85": 27, "c2": 27, "96": 27, "inet": 27, "192": 27, "168": [27, 48, 49], "86": 27, "33": 27, "bcast": 27, "255": [27, 48], "mask": [27, 48], "export": [27, 32, 37, 40, 51], "displai": [27, 32], "awk": 27, "nameserv": 27, "print": [27, 40], "exit": [27, 30, 40, 41, 42, 45, 48, 51], "resolv": [27, 40], "conf": [27, 41], "libgl_always_indirect": 27, "stexampl": 27, "introduct": [28, 33], "usag": [28, 30], "oper": [28, 51, 52], "phoebu": [28, 38, 51], "builder2ibek": [28, 42], "convers": [28, 42], "experienc": [28, 41], "librari": [28, 39, 42, 52], "frequent": 28, "thin": 30, "subcommand": 30, "ioc_inst": 30, "Or": [30, 38, 40, 42, 52], "imag": [30, 32, 33, 34, 37, 38, 39, 40, 41, 42, 46, 51, 54], "conveni": [30, 39, 41, 45, 46], "none": [30, 42], "text": [30, 38, 42, 45], "apo": 30, "quot": 30, "p38": [30, 50], "is_ioc": 30, "column": 30, "ioc_nam": [30, 32, 38], "label": [30, 41, 51], "ioc_vers": 30, "state": [30, 40, 41, 42, 48], "phase": 30, "containerstatus": 30, "restartcount": 30, "managedfield": 30, "bl38p": [30, 32, 51], "03": 30, "25t14": 30, "44z": 30, "panda": 30, "25": 30, "b16": 30, "25t15": 30, "41z": 30, "mention": 31, "ssh": [31, 37, 42], "insteadof": [31, 42], "correct": [32, 48], "adjust": [32, 41], "ec_registry_map": [32, 37, 51], "organis": 32, "my_generic_ioc": 32, "space": [32, 38, 42, 50], "ec_k8s_namespac": [32, 37, 51], "leav": [32, 34, 37, 45, 49, 51, 54], "ec_domain_repo": [32, 37, 40, 51], "ec_log_url": 32, "ui": 32, "placehold": 32, "graylog2": 32, "search": [32, 39], "rangetyp": 32, "rel": 32, "field": [32, 34, 42, 45, 48], "2csourc": 32, "width": [32, 38], "1489": 32, "highlightmessag": 32, "172800": 32, "q": [32, 40], "pod_nam": 32, "3a": 32, "ec_container_cli": 32, "try": [32, 39, 40, 41, 42, 48, 50], "over": [32, 38, 39, 48, 49, 50], "singular": 32, "compat": [32, 39, 43], "least": 32, "ec_debug": 32, "caus": 32, "output": [32, 39, 41, 42, 45, 48, 49], "d": [32, 40, 41, 45, 48], "blxxi": [32, 34, 37, 51], "probabl": [32, 43], "omit": [32, 38], "perhap": 32, "simplest": [32, 39, 40, 42, 50, 51], "bashrc": 32, "path": [32, 39, 40, 41, 52], "home": [32, 38, 40, 50, 52], "third": 32, "kubeconfig": 32, "put": [33, 38, 42], "dockerfil": [33, 39, 46], "answer": 33, "free": [33, 37, 38, 41, 44, 48, 49, 51, 52], "lifecycl": 33, "Not": 33, "counter": 33, "roll": [33, 40, 50], "That": [33, 38, 50], "track": 33, "sever": 33, "replicaset": 33, "By": [33, 42, 51], "last": [33, 37, 38, 39, 40, 41, 54], "necessari": [33, 34, 37, 39, 40, 41, 42, 49, 50], "cach": [33, 39, 41, 42, 54], "anywai": 33, "harbour": 33, "goharbor": 33, "spin": 33, "turn": [34, 39, 45], "manifest": 34, "renam": 34, "left": [34, 41, 45, 46, 50], "short": 34, "drawn": 34, "base_imag": [34, 48], "binari": [34, 38, 40, 41, 48, 49], "possibli": 34, "detector": [34, 38, 54], "ioc_prefix": 34, "declar": [34, 38, 42], "uppercas": 34, "appear": [34, 38, 41, 42, 48], "inspect": [35, 40], "bl01t": [35, 37, 38, 41, 45, 46, 48, 49, 52], "lib": [35, 38, 39, 41, 42, 50], "kei": [35, 37, 38, 42, 51], "next": [35, 37, 39, 40, 41, 42, 49, 50, 51, 52, 54], "ve": 36, "pick": [36, 40, 52], "think": [36, 42], "peopl": 36, "particularli": [36, 52], "regard": [36, 40, 41], "scm": [36, 42, 52], "repositoryscanmaxdepth": 36, "openrepositoryinparentfold": 36, "never": 36, "trimtrailingwhitespac": 36, "scrollback": 36, "20000": 36, "defaultextens": 36, "samuelcolvin": 36, "jinjahtml": 36, "moshfeu": 36, "compar": 36, "copilot": 36, "charliermarsh": 36, "ruff": 36, "gruntfuggli": 36, "streetsidesoftwar": 36, "spell": 36, "checker": 36, "eamodio": 36, "gitlen": 36, "tamasf": 36, "even": [36, 41, 45, 46], "toml": 36, "redhat": [36, 38, 41, 52], "ryanluk": 36, "gutter": 36, "mhutchi": 36, "makefil": [36, 41, 42], "peakchen90": 36, "editor": [36, 38, 39, 41, 52], "defaultformatt": 36, "group": 37, "blxxc": 37, "xx": 37, "lower": 37, "letter": 37, "hyphen": 37, "introduc": [37, 44], "basic": [37, 48], "tickit": 37, "ideal": 37, "taken": 37, "further": [37, 42, 48], "exercis": [37, 42, 46], "account": [37, 40, 41, 42, 44, 46, 51, 54], "login": [37, 50], "person": [37, 42], "workspacesitori": 37, "green": [37, 41, 46, 51], "button": [37, 42, 46, 51, 54], "cover": [37, 38, 42, 45, 48, 53], "remain": [37, 52], "readm": [37, 42, 51], "md": [37, 42, 51], "meaning": [37, 38], "xxi": 37, "01t": 37, "goe": [37, 51], "insert": [37, 40], "fine": [37, 42], "blank": [37, 51], "mv": 37, "wide": 37, "calver": [37, 40], "scheme": 37, "digit": 37, "month": 37, "semant": 37, "appropri": [37, 41, 42, 50, 51, 52], "mix": 37, "came": [38, 39, 40, 41], "item": 38, "specifi": [38, 45, 48, 51], "adsimdetector": [38, 40, 41, 45, 46], "dbd": [38, 41, 42, 48, 54], "bake": 38, "reus": 38, "recap": 38, "sequenc": [38, 40], "respons": 38, "simdetector": 38, "r": [38, 41, 48, 51, 54], "suffix": 38, "timeout": [38, 54], "1280": 38, "height": 38, "1024": 38, "datatyp": 38, "buffer": 38, "maximum": 38, "ndarrai": 38, "plugin": [38, 39], "callback": 38, "50": 38, "max": 38, "maxw": 38, "maxh": 38, "nbuffer": 38, "attach": [38, 40, 48, 54], "pre_init": [38, 42, 45], "simdetectorconfig": 38, "portnam": [38, 54], "maxsizex": 38, "maxsizei": 38, "maxbuff": 38, "maxmemori": [38, 54], "iocinit": [38, 42, 45, 48, 54], "det": 38, "tst": 38, "unfamiliar": 38, "id2759963": 38, "Be": [38, 40], "awar": [38, 40, 52], "white": 38, "indent": [38, 45], "nest": [38, 45], "denot": 38, "dictionari": 38, "let": [38, 40, 41, 42, 51, 54], "wire": 38, "adcor": 38, "ndpvaplugin": 38, "pvname": [38, 54], "ndarray_port": [38, 54], "pvaccess": 38, "snippet": 38, "togeth": 38, "remind": 38, "nearli": 38, "caput": [38, 40, 48], "caget": [38, 40, 45, 48], "c2dv": 38, "c2dataview": [38, 54], "enablecallback": 38, "acquir": [38, 43], "move": 38, "window": [38, 40, 41, 42, 44, 45, 50, 52], "smoothest": 38, "hit": [38, 40, 41, 42, 45, 48], "zoom": 38, "frame": 38, "notic": [38, 40, 54], "did": [38, 39, 51], "enter": 38, "viewer": [38, 54], "marketplac": 38, "visualstudio": 38, "itemnam": 38, "advantag": [38, 42, 51], "long": [38, 41, 50], "demonstr": [38, 41, 42, 46], "cat": 38, "persist": [38, 48, 49, 51], "volum": [38, 41, 48, 49, 51], "rm": [38, 39, 41, 48, 51], "behav": 38, "exactli": [38, 46, 48], "hood": 38, "saw": 39, "succe": [39, 54], "design": 39, "maxim": 39, "partial": 39, "fundament": 39, "trigger": 39, "knowledg": [39, 43, 44], "success": 39, "retri": 39, "adurl": [39, 43, 54], "again": [39, 40, 42, 49, 52, 54], "realli": [39, 42, 54], "apt": [39, 42], "debian": [39, 52], "magick": 39, "h": 39, "graphicsmagick": [39, 54], "libmagick": 39, "libgraphicsmagick": 39, "header": 39, "imagemagick": 39, "middl": 39, "promis": 39, "y": 39, "config_sit": [39, 42], "sai": [39, 40, 51], "graphicsmagick_includ": 39, "rudimentari": 39, "vi": 39, "synchron": 39, "xxx": [39, 41, 42, 43], "navig": [39, 41], "pictur": 39, "with_graphicsmagick": 39, "ye": 39, "graphicsmagick_extern": 39, "invok": 39, "tip": 39, "NOT": 39, "patch": [39, 43], "avoid": [39, 41, 43], "occasion": [39, 46], "variat": 39, "whatev": 39, "although": [39, 41, 42, 50], "graphic": 39, "prove": 39, "curat": [39, 41, 42], "NO": 39, "skip": [39, 40, 42, 50, 51], "quickli": 39, "libxext": 39, "libboost": 39, "libxext6": 39, "rf": [39, 41], "var": [39, 50], "size": 39, "unfortun": [39, 54], "scratch": 39, "earli": 40, "shall": 40, "pretend": 40, "fictiti": 40, "anyth": [40, 42], "recent": [40, 42, 52], "drill": 40, "ci_verifi": 40, "sophist": [40, 54], "moment": 40, "correctli": 40, "bash_profil": 40, "profil": 40, "empti": 40, "unless": [40, 41, 50, 51], "ahead": [40, 42, 51, 52], "ever": 40, "lost": [40, 41], "beta": [40, 48], "perman": [40, 42, 52], "19": 40, "b11": 40, "53": 40, "minut": [40, 41, 54], "incorrectli": 40, "bdbd155d437361fe88bce0faa0ddd3cd225a9026287ac5e73545aeb4ab3a67e9": 40, "distinct": [40, 41], "known": 40, "recov": 40, "strive": 40, "noth": 40, "iocshel": [40, 42, 45, 46], "ctrl": [40, 41, 45, 48], "detach": 40, "captur": 40, "Being": 40, "modifi": 41, "decreas": 41, "frequenc": 41, "increas": [41, 42], "affect": 41, "cycl": 41, "fast": 41, "inner": [41, 43], "earlier": [41, 46], "firmli": 41, "realm": 41, "tradition": 41, "fact": 41, "stage": [41, 42, 52], "becom": [41, 42, 43], "perfect": 41, "candid": 41, "mode": 41, "incompat": 41, "selinux": 41, "tmp": [41, 54], "permiss": [41, 50, 51], "right": [41, 42, 46], "recurs": [41, 46], "sub": 41, "philosophi": 41, "problemat": 41, "almost": 41, "instant": 41, "rebuilt": 41, "awai": [41, 42], "encompass": 41, "session": 41, "icon": 41, "bottom": [41, 46], "caveat": 41, "destroi": 41, "delet": 41, "troubleshoot": 41, "reset": [41, 48], "recompil": [41, 46], "carefulli": 41, "preserv": 41, "bed": 41, "iocapp": [41, 42], "lib_list": 41, "dbd_list": 41, "deriv": 41, "meaningfulli": 41, "parent": 41, "peer": 41, "menu": [41, 45], "cancel": 41, "opportun": 41, "owner": 41, "complain": 41, "ownership": 41, "immut": 41, "feel": 41, "rememb": [41, 51], "explicitli": [41, 42, 43], "pc": 41, "complac": 41, "ln": [41, 52], "shown": [41, 42, 49], "tidi": 41, "emb": 42, "light": 42, "concis": 42, "intend": [42, 44], "barrier": 42, "collabor": 42, "wherev": 42, "previous": 42, "littl": 42, "generic": 42, "apach": 42, "v2": [42, 48, 49, 52], "licenc": 42, "0ff410a3e1131": 42, "primari": 42, "tab": [42, 54], "wast": 42, "cpu": [42, 51], "faster": 42, "recip": 42, "ignor": 42, "iocstat": [42, 46], "health": [42, 51], "streamdevic": 42, "r4": 42, "42": 42, "duplic": [42, 43], "speed": [42, 54], "massiv": 42, "happi": 42, "expos": 42, "goto": 42, "uncheck": 42, "init": 42, "checkout": [42, 43], "snapshot": 42, "off": [42, 43], "gitconfig": 42, "book": [42, 52], "en": [42, 44, 52], "draw": 42, "autom": 42, "resolut": 42, "encourag": [42, 52], "3rd": 42, "parti": 42, "block": [42, 54], "care": 42, "match": [42, 45, 48, 51], "site": [42, 48], "dirnam": 42, "readlink": 42, "abort": 42, "xe": 42, "doxygen": 42, "regist": 42, "chmod": 42, "x": 42, "craft": [42, 45, 48], "integ": 42, "float": 42, "boolean": 42, "enum": 42, "jinja": 42, "doubl": 42, "curli": 42, "brace": 42, "argument_nam": 42, "interpret": 42, "evalu": 42, "palletsproject": 42, "epicsenvset": [42, 48], "stream_protocol_path": 42, "lakeshore340app": 42, "verbatim": [42, 45], "loos": 43, "belong": [43, 51], "verif": 43, "encapsul": 43, "while": 43, "kick": 43, "submodul": [43, 46, 54], "ioc_templ": 43, "concret": 43, "break": 43, "accordingli": [43, 51], "coher": 43, "b": [43, 48], "tight": 43, "mayb": 43, "confus": 43, "seri": 44, "self": 44, "prior": 44, "background": 44, "overview": 44, "intro": 44, "quickstart": 44, "epics_intro": 44, "With": 44, "mac": 44, "strictli": 45, "speak": 45, "queri": 45, "ai": 45, "dtyp": 45, "passiv": 45, "val": [45, 48], "statement": 45, "startupcommand": 45, "immedi": 45, "well": [45, 54], "isol": [45, 46, 50], "net": [45, 48], "symlink": [45, 46], "press": [45, 48], "shift": 45, "commnd": 45, "plan": [45, 52], "arbitrari": 45, "poststartupcommand": 45, "post_init": 45, "syntax": 45, "sting": 45, "extra2": 45, "whitespac": 45, "strip": 45, "focus": 46, "smaller": 46, "less": 46, "small": 46, "cleaner": 46, "monolith": 46, "adsampl": 46, "simplifi": 46, "tailor": 46, "corner": 46, "equival": 46, "flag": 46, "ie": 46, "ioc_exampl": 46, "chosen": 46, "though": 46, "decemb": [48, 49], "mvvme5500": [48, 49], "serv": [48, 49, 51, 54], "proceed": [48, 52], "vme": 48, "crate": [48, 49], "processor": [48, 49], "card": [48, 49], "serial": 48, "consol": [48, 49], "ts0001": 48, "7007": 48, "7008": 48, "telnet": 48, "motload": 48, "esc": 48, "spc": 48, "tftp": [48, 49], "nf": [48, 49], "gevshow": 48, "mot": 48, "enet0": 48, "cipa": 48, "172": [48, 49], "23": [48, 49, 54], "250": 48, "snma": 48, "240": 48, "gipa": 48, "254": 48, "em1": 48, "203": [48, 49], "dla": 48, "malloc": 48, "0x230000": 48, "tftpget": 48, "enet1": 48, "fbl01t": 48, "beatnik": 48, "m255": 48, "g172": 48, "s172": 48, "c172": 48, "adla": 48, "a0095f000": 48, "total": 48, "ge": 48, "byte": 48, "427": 48, "3165": 48, "gevedit": 48, "respect": 48, "gatewai": 48, "modif": 48, "matrix": 48, "dimens": 48, "env": 48, "epics_ioc_addr_list": 48, "probe": 48, "k8s_ioc_address": 48, "rtems_vme_console_addr": 48, "rtems_vme_console_port": 48, "rtems_vme_auto_reboot": 48, "rtems_vme_auto_paus": 48, "hard": [48, 49], "paus": [48, 49], "unpaus": [48, 49], "1st": 48, "calc": 48, "sum": 48, "inpa": 48, "inpb": 48, "ao": 48, "egu": 48, "volt": 48, "dbloaddatabas": [48, 54], "ioc_registerrecorddevicedriv": [48, 54], "pdbbase": [48, 54], "epics_db_include_path": 48, "iocadminsoft": 48, "iocadminscanmon": 48, "recal": 48, "liter": 48, "claim": [48, 51], "pvc": [48, 51], "nfsv2tftpclaim": 48, "local_deploy_ioc": 48, "quicker": 48, "stdin": 48, "13": 48, "individu": 49, "crash": 49, "bootload": 49, "nfsv2": 49, "loadbalancerip": 49, "rang": 49, "pollux": [49, 50, 51], "201": 49, "222": 49, "reserv": 49, "train": [49, 50, 51], "108": 49, "219": 49, "193": 49, "111": 49, "31491": 49, "2049": 49, "30944": 49, "20048": 49, "32277": 49, "69": 49, "32740": 49, "32d": 49, "alon": 49, "p45": 50, "p46": [50, 51], "p49": 50, "i20": 50, "i22": [50, 51], "c01": 50, "spare": 50, "experiment": 50, "straight": 50, "20": [50, 52], "distro": 50, "raspberri": 50, "pi": 50, "05": 50, "subsystem": [50, 52], "uninstal": 50, "harm": 50, "sig": 50, "quick": 50, "microk8": 50, "minikub": 50, "aka": 50, "sfl": 50, "scp": 50, "your_account": 50, "your_workst": 50, "bl46p": [50, 51, 52], "priv": 50, "annot": 50, "grade": 51, "servicedesk": 51, "portal": 51, "92": 51, "your_github_account": 51, "customis": 51, "cut": 51, "echo": [51, 53], "sampl": 51, "closest": 51, "facilit": 51, "affin": 51, "rule": 51, "taint": 51, "nodetyp": 51, "rig": 51, "contact": 51, "iocnam": 51, "opisclaim": 51, "runtimeclaim": 51, "autosaveclaim": 51, "datavolum": 51, "hostpath": 51, "mybeamlin": 51, "equal": 51, "chunk": 51, "relat": 51, "subdirectori": 51, "retriev": 51, "dashboard": 51, "land": 51, "bl22i": 51, "b01": 51, "bl01b": 51, "visual": 52, "studio": 52, "maco": 52, "huge": 52, "rhel": 52, "04": 52, "desktop": 52, "highest": 52, "simplic": 52, "jump": 52, "visualis": 52, "stub": 53, "pointer": 53, "preced": 53, "skill": 53, "mynewdevicesupport": 53, "genericioc": 54, "took": 54, "anyon": 54, "urldriverconfig": 54, "cam": 54, "ndpvaconfigur": 54, "queuesiz": 54, "blockingcallback": 54, "ndarrayport": 54, "ndarrayaddr": 54, "prioriti": 54, "stacksiz": 54, "startpvaserv": 54, "urldriv": 54, "ndpva": 54, "ndarray_adr": 54, "poke": 54, "acquireperiod": 54, "run_test": 54, "fi": 54, "ioc_arg": 54, "check_pv": 54, "enough": 54, "video": 54, "di": 54, "feed": 54, "demo": 54, "milli": 54, "labradoodl": 54, "got": 54}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"architectur": [0, 1], "decis": [0, 1, 2, 3, 4, 5], "record": [0, 1], "1": [1, 46, 51], "statu": [1, 2, 3, 4, 5], "context": [1, 2, 3, 4, 5, 50], "consequ": [1, 2, 3, 4, 5], "2": [2, 47, 51], "adopt": 2, "python3": 2, "pip": 2, "skeleton": 2, "project": [2, 7, 22, 42], "structur": [2, 13], "3": [3, 51], "us": [3, 5, 6, 13, 17, 39, 43], "substitut": 3, "file": [3, 32, 49], "gener": [3, 15, 19, 39, 42, 46, 47, 54], "epic": [3, 13, 15, 31, 50, 52], "databas": [3, 38], "4": 4, "how": [4, 10, 13, 27, 28, 33, 43], "configur": [4, 31, 32, 50], "autosav": 4, "ioc": [4, 15, 19, 23, 30, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 50, 51, 54], "5": 5, "python": [5, 52], "script": [5, 38], "insid": [5, 39], "outsid": 5, "contain": [5, 13, 15, 16, 18, 19, 31, 39, 41, 52, 54], "build": [6, 12, 39], "doc": 6, "sphinx": 6, "autobuild": 6, "contribut": [7, 12, 22], "issu": [7, 22], "discuss": [7, 22], "develop": [7, 10, 12, 22, 25, 41, 42, 52], "guid": [7, 10, 22, 28], "make": [8, 39, 54], "releas": 8, "updat": [9, 13, 24], "tool": [9, 15, 20, 21], "tutori": [10, 28, 44], "explan": [10, 28, 38], "refer": [10, 28], "standard": 11, "document": [11, 13, 14], "clone": 12, "repositori": [12, 15, 19, 33, 37, 51], "instal": [12, 27, 32, 42, 50, 52], "depend": 12, "see": 12, "what": [12, 43], "wa": 12, "check": [12, 48], "quick": 13, "start": [13, 37, 40, 41], "link": 13, "octob": 13, "2023": 13, "commun": 13, "materi": 13, "i": [13, 33, 43, 46], "about": [14, 35, 45], "essenti": 15, "concept": 15, "overview": [15, 17], "imag": [15, 19], "instanc": [15, 19, 23, 34, 35, 38, 40, 41, 43, 45, 46, 48], "kubernet": [15, 17, 23, 27, 32, 35, 50, 51, 52], "altern": [15, 43], "helm": [15, 34, 35, 37, 51], "continu": [15, 40, 54], "integr": [15, 40, 54], "scope": 15, "addit": [15, 27], "cli": [15, 52], "ibek": [15, 24, 38, 42, 43, 45], "pvi": 15, "dev": 16, "v": [16, 40], "runtim": [16, 45], "cluster": [17, 32, 50, 51], "config": [17, 38], "option": [17, 32, 52], "current": 17, "approach": 17, "dl": [17, 51], "argu": 17, "beamlin": [17, 37, 40, 41, 51], "local": [17, 23, 40, 45], "node": 17, "metallb": 17, "pool": 17, "label": 17, "taint": 17, "host": 17, "network": [17, 18], "channel": 18, "access": 18, "other": 18, "protocol": 18, "interfac": [18, 26, 30, 33, 38], "problem": 18, "cni": 18, "solut": 18, "hostnetwork": 18, "sourc": 19, "registri": 19, "locat": 19, "where": 19, "keep": 19, "code": [19, 25], "domain": 19, "bl45p": 19, "put": 19, "repo": [19, 42], "builder2ibek": [20, 21], "convers": [20, 21], "support": [21, 24, 42, 43, 52, 53], "exampl": [21, 34, 40, 46, 48], "debug": [23, 39], "an": [23, 35, 38, 39, 40, 48, 50], "test": [24, 41, 45, 51, 54], "choos": [25, 41], "your": [25, 32, 45, 48, 50], "environ": [25, 32, 37, 40, 48, 51], "work": [25, 27, 43, 46, 53], "own": [25, 50], "editor": 25, "view": [26, 38], "oper": [26, 33, 38], "phoebu": 26, "To": [27, 37], "": 27, "dashboard": 27, "raspberri": 27, "pi": 27, "window": 27, "subsystem": 27, "linux": 27, "k3": [27, 50, 51], "server": [27, 49, 50, 51], "get": 27, "x11": 27, "gui": [27, 54], "wsl": 27, "user": 28, "command": 30, "line": 30, "manag": [30, 40], "git": [31, 52], "The": [32, 38, 42, 51], "variabl": [32, 48], "setup": [32, 50, 51, 52], "requir": 32, "ec": 32, "connect": 32, "namespac": [32, 50], "frequent": 33, "ask": 33, "question": 33, "why": [33, 43], "mention": 33, "have": 33, "xxx": 33, "can": 33, "do": 33, "rollback": 33, "internet": 33, "down": 33, "chart": [34, 37, 51], "detail": 34, "examin": 34, "resourc": [35, 51], "learn": 35, "manifest": 35, "recommend": 36, "vscode": [36, 52], "set": [36, 40, 51, 52], "creat": [37, 38, 42, 48, 49, 50, 51], "new": [37, 38, 42, 51], "step": [37, 50, 52], "sh": [37, 42], "chang": [37, 39, 41, 42, 45, 46, 47], "name": 37, "servic": [37, 49, 50], "wrap": [37, 39, 41], "up": [37, 39, 40, 41, 51, 52], "introduct": [38, 40, 44, 49, 50], "valu": 38, "yaml": [38, 42], "try": [38, 54], "out": [38, 54], "launch": [38, 41], "output": 38, "raw": [38, 45], "startup": [38, 45], "investig": 39, "failur": 39, "appli": 39, "made": 39, "easier": 39, "fix": 39, "adsupport": 39, "deploi": [40, 48, 51, 54], "bl01t": 40, "import": 40, "stop": 40, "monitor": 40, "interact": 40, "shell": 40, "log": 40, "type": [41, 51], "need": 41, "prepar": [41, 42, 46, 48], "ad": 41, "workspac": 41, "layout": 41, "lakeshor": 42, "340": 42, "temperatur": 42, "control": 42, "initi": 42, "dockerfil": 42, "submodul": 42, "For": 42, "lakeshore340": 42, "defin": 43, "asset": 45, "more": 45, "creation": 45, "part": [46, 47], "verifi": 46, "rtem": [48, 49], "boot": 48, "loader": 48, "bring": 50, "platform": [50, 52], "choic": 50, "lightweight": 50, "kubectl": 50, "account": 50, "run": 50, "complet": 50, "topologi": 51, "share": 51, "dedic": 51, "section": 51, "default": 51, "all": 51, "singl": 51, "real": 51, "One": 51, "time": 51, "onli": 51, "workstat": 52, "docker": 52, "podman": 52, "modul": 53, "publish": 54, "ghcr": 54, "relev": 54, "our": 54, "some": 54}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"Architectural Decision Records": [[0, "architectural-decision-records"]], "1. Record architecture decisions": [[1, "record-architecture-decisions"]], "Status": [[1, "status"], [2, "status"], [3, "status"], [4, "status"], [5, "status"]], "Context": [[1, "context"], [2, "context"], [3, "context"], [4, "context"], [5, "context"]], "Decision": [[1, "decision"], [2, "decision"], [3, "decision"], [4, "decision"], [5, "decision"]], "Consequences": [[1, "consequences"], [2, "consequences"], [3, "consequences"], [4, "consequences"], [5, "consequences"]], "2. Adopt python3-pip-skeleton for project structure": [[2, "adopt-python3-pip-skeleton-for-project-structure"]], "3. Use of substitution files to generate EPICS Databases": [[3, "use-of-substitution-files-to-generate-epics-databases"]], "4. How to configure autosave for IOCs": [[4, "how-to-configure-autosave-for-iocs"]], "5. Use Python for scripting inside and outside containers": [[5, "use-python-for-scripting-inside-and-outside-containers"]], "Build the docs using sphinx": [[6, "build-the-docs-using-sphinx"]], "Autobuild": [[6, "autobuild"]], "Contributing to the project": [[7, "contributing-to-the-project"], [22, "contributing-to-the-project"]], "Issue or Discussion?": [[7, "issue-or-discussion"], [22, "issue-or-discussion"]], "Developer guide": [[7, "developer-guide"], [22, "developer-guide"]], "Make a release": [[8, "make-a-release"]], "Update the tools": [[9, "update-the-tools"]], "Developer Guide": [[10, "developer-guide"]], "Tutorials": [[10, null], [28, null]], "How-to Guides": [[10, null], [28, null]], "Explanations": [[10, null], [28, null]], "Reference": [[10, null], [28, null]], "Standards": [[11, "standards"]], "Documentation Standards": [[11, "documentation-standards"]], "Developer Contributing": [[12, "developer-contributing"]], "Clone the repository": [[12, "clone-the-repository"]], "Install dependencies": [[12, "install-dependencies"]], "See what was installed": [[12, "see-what-was-installed"]], "Build and check": [[12, "build-and-check"]], "epics-containers": [[13, "epics-containers"]], "Quick Start": [[13, "quick-start"]], "Useful Links": [[13, "useful-links"]], "Update for October 2023": [[13, "update-for-october-2023"]], "Communication": [[13, "communication"]], "Materials": [[13, "materials"]], "How the documentation is structured": [[13, "how-the-documentation-is-structured"]], "About the documentation": [[14, "about-the-documentation"]], "Essential Concepts": [[15, "essential-concepts"]], "Overview": [[15, "overview"], [17, "overview"]], "Concepts": [[15, "concepts"]], "Images and Containers": [[15, "images-and-containers"]], "Generic IOCs and instances": [[15, "generic-iocs-and-instances"]], "Kubernetes": [[15, "kubernetes"], [52, "id1"]], "Kubernetes Alternative": [[15, "kubernetes-alternative"]], "Helm": [[15, "helm"]], "Repositories": [[15, "repositories"]], "Continuous Integration": [[15, "continuous-integration"], [40, "continuous-integration"], [54, "continuous-integration"]], "Scope": [[15, "scope"]], "Additional Tools": [[15, "additional-tools"]], "epics-containers-cli": [[15, "epics-containers-cli"], [52, "epics-containers-cli"]], "ibek": [[15, "ibek"]], "PVI": [[15, "pvi"]], "Dev Container vs Runtime Container": [[16, "dev-container-vs-runtime-container"]], "Kubernetes Cluster Config": [[17, "kubernetes-cluster-config"]], "Cluster Options": [[17, "cluster-options"]], "Current Approach": [[17, "current-approach"]], "DLS Argus Cluster": [[17, "dls-argus-cluster"]], "Beamline Local Cluster Nodes": [[17, "beamline-local-cluster-nodes"]], "Metallb Pools": [[17, "metallb-pools"]], "Node Labelling and Taints": [[17, "node-labelling-and-taints"]], "Host Network": [[17, "host-network"]], "Uses for Argus": [[17, "uses-for-argus"]], "Channel Access and Other Protocols": [[18, "channel-access-and-other-protocols"]], "Container Network Interface": [[18, "container-network-interface"]], "Problems with CNI": [[18, "problems-with-cni"]], "Solution - hostNetwork": [[18, "solution-hostnetwork"]], "Source and Registry Locations": [[19, "source-and-registry-locations"]], "Where to Keep Source Code": [[19, "where-to-keep-source-code"]], "Generic IOC Source Repositories": [[19, "generic-ioc-source-repositories"]], "IOC Instance Domain Repositories": [[19, "ioc-instance-domain-repositories"]], "BL45P": [[19, "bl45p"]], "Where to put Registries": [[19, "where-to-put-registries"]], "Generic IOC Container Images and Source Repos": [[19, "generic-ioc-container-images-and-source-repos"]], "IOC Instance Domain Repos": [[19, "ioc-instance-domain-repos"]], "Builder2ibek Conversion Tool": [[20, "builder2ibek-conversion-tool"]], "Builder2ibek.support Conversion Tool": [[21, "builder2ibek-support-conversion-tool"]], "builder2ibek.support example": [[21, "builder2ibek-support-example"]], "Debug an IOC instance locally": [[23, "debug-an-ioc-instance-locally"]], "Debug an IOC instance in Kubernetes": [[23, "debug-an-ioc-instance-in-kubernetes"]], "Updating and Testing ibek-support": [[24, "updating-and-testing-ibek-support"]], "Choose Your Developer Environment": [[25, "choose-your-developer-environment"]], "Working with your own code editor": [[25, "working-with-your-own-code-editor"]], "Viewing Operator Interfaces with Phoebus": [[26, "viewing-operator-interfaces-with-phoebus"]], "Kubernetes Additional How To\u2019s": [[27, "kubernetes-additional-how-to-s"]], "Install the Kubernetes Dashboard": [[27, "install-the-kubernetes-dashboard"]], "Installing on a Raspberry Pi": [[27, "installing-on-a-raspberry-pi"]], "Installing on Windows Subsystem for Linux": [[27, "installing-on-windows-subsystem-for-linux"]], "Install k3s server": [[27, "install-k3s-server"]], "Get X11 GUI to Work with WSL": [[27, "get-x11-gui-to-work-with-wsl"]], "User Guide": [[28, "user-guide"]], "Command Line Interface for IOC Management": [[30, "command-line-interface-for-ioc-management"]], "Configuration for epics-containers": [[31, "configuration-for-epics-containers"]], "Git Configuration": [[31, "git-configuration"]], "The Environment Configuration File": [[32, "the-environment-configuration-file"]], "Environment Variables Setup": [[32, "environment-variables-setup"]], "Required Variables": [[32, "required-variables"]], "Optional Variables": [[32, "optional-variables"]], "Installation of ec": [[32, "installation-of-ec"]], "Connecting to a Namespace on your Kubernetes Cluster": [[32, "connecting-to-a-namespace-on-your-kubernetes-cluster"]], "Frequently Asked Questions": [[33, "frequently-asked-questions"]], "Why no mention of Operator Interfaces?": [[33, "why-no-mention-of-operator-interfaces"]], "Why have ioc-XXX repositories?": [[33, "why-have-ioc-xxx-repositories"]], "How can I do IOC rollback if the internet is down?": [[33, "how-can-i-do-ioc-rollback-if-the-internet-is-down"]], "IOC Helm Chart Details": [[34, "ioc-helm-chart-details"]], "Examine the Example IOC Instance": [[34, "examine-the-example-ioc-instance"]], "Kubernetes Resources in an IOC Instance": [[35, "kubernetes-resources-in-an-ioc-instance"], [35, "id1"]], "Learning about Helm and Kubernetes Manifests": [[35, "learning-about-helm-and-kubernetes-manifests"]], "Recommended VSCode Settings": [[36, "recommended-vscode-settings"]], "Create a Beamline Repository": [[37, "create-a-beamline-repository"]], "To Start": [[37, "to-start"]], "Create a New Repository": [[37, "create-a-new-repository"]], "Steps": [[37, "steps"]], "Environment.sh": [[37, "environment-sh"]], "Change the IOC Name": [[37, "change-the-ioc-name"]], "Change the Beamline Name in Services": [[37, "change-the-beamline-name-in-services"]], "Change the Beamline Name in the Helm Chart": [[37, "change-the-beamline-name-in-the-helm-chart"]], "Wrapping Up": [[37, "wrapping-up"], [39, "wrapping-up"], [41, "wrapping-up"]], "Create an IOC Instance": [[38, "create-an-ioc-instance"]], "Introduction": [[38, "introduction"], [40, "introduction"], [49, "introduction"], [50, "introduction"]], "Create a New IOC Instance": [[38, "create-a-new-ioc-instance"]], "values.yaml": [[38, "values-yaml"]], "config": [[38, "config"]], "Trying Out The IOC Instance": [[38, "trying-out-the-ioc-instance"]], "Launch the IOC Instance": [[38, "launch-the-ioc-instance"]], "Operator Interface": [[38, "operator-interface"]], "Viewing IOC output": [[38, "viewing-ioc-output"]], "ibek Explanation": [[38, "ibek-explanation"]], "Raw Startup Script and Database": [[38, "raw-startup-script-and-database"]], "Debugging Generic IOC Builds": [[39, "debugging-generic-ioc-builds"]], "Investigate the Build Failure": [[39, "investigate-the-build-failure"]], "Making Changes Inside the Container": [[39, "making-changes-inside-the-container"]], "Applying Changes Made Inside the Container": [[39, "applying-changes-made-inside-the-container"]], "An Easier Fix Using ADSupport": [[39, "an-easier-fix-using-adsupport"]], "Deploying and Managing IOC Instances": [[40, "deploying-and-managing-ioc-instances"]], "Set up Environment for BL01T Beamline": [[40, "set-up-environment-for-bl01t-beamline"]], "Deploy the Example IOC Instance": [[40, "deploy-the-example-ioc-instance"]], "IMPORTANT: deploy-local vs deploy": [[40, "important-deploy-local-vs-deploy"]], "Managing the Example IOC Instance": [[40, "managing-the-example-ioc-instance"]], "Starting and Stopping IOCs": [[40, "starting-and-stopping-iocs"]], "Monitoring and interacting with an IOC shell": [[40, "monitoring-and-interacting-with-an-ioc-shell"]], "Logging": [[40, "logging"]], "Developer Containers": [[41, "developer-containers"]], "Types of Changes": [[41, "types-of-changes"]], "Need for a Developer Container": [[41, "need-for-a-developer-container"]], "Starting a Developer Container": [[41, "starting-a-developer-container"]], "Preparation": [[41, "preparation"], [46, "preparation"]], "Launching the Developer Container": [[41, "launching-the-developer-container"]], "Preparing the IOC for Testing": [[41, "preparing-the-ioc-for-testing"]], "Adding the Beamline to the Workspace": [[41, "adding-the-beamline-to-the-workspace"]], "Developer Container Layout": [[41, "id1"]], "Choose the IOC Instance to Test": [[41, "choose-the-ioc-instance-to-test"]], "Create a Generic IOC": [[42, "create-a-generic-ioc"]], "Lakeshore 340 Temperature Controller": [[42, "lakeshore-340-temperature-controller"]], "Create a New Generic IOC project": [[42, "create-a-new-generic-ioc-project"]], "Prepare the New Repo for Development": [[42, "prepare-the-new-repo-for-development"]], "Initial Changes to the Dockerfile": [[42, "initial-changes-to-the-dockerfile"]], "Prepare The ibek-support Submodule": [[42, "prepare-the-ibek-support-submodule"]], "Create install.sh For The lakeshore340": [[42, "create-install-sh-for-the-lakeshore340"]], "Create Support YAML for the lakeshore340": [[42, "create-support-yaml-for-the-lakeshore340"]], "Defining IOC Instances using IBEK": [[43, "defining-ioc-instances-using-ibek"]], "What is IBEK": [[43, "what-is-ibek"]], "Why Use IBEK": [[43, "why-use-ibek"]], "Alternatives": [[43, "alternatives"]], "ibek-support": [[43, "ibek-support"]], "How to work on ibek-support": [[43, "how-to-work-on-ibek-support"]], "Tutorials Introduction": [[44, "tutorials-introduction"]], "Changing the IOC Instance": [[45, "changing-the-ioc-instance"]], "Locally Testing Your changes": [[45, "locally-testing-your-changes"]], "Raw Startup Assets": [[45, "raw-startup-assets"]], "More about ibek Runtime Asset Creation": [[45, "more-about-ibek-runtime-asset-creation"]], "Changing a Generic IOC Part 1": [[46, "changing-a-generic-ioc-part-1"]], "Verify the Example IOC Instance is working": [[46, "verify-the-example-ioc-instance-is-working"]], "Changing a Generic IOC Part 2": [[47, "changing-a-generic-ioc-part-2"]], "RTEMS - Deploying an Example IOC": [[48, "rtems-deploying-an-example-ioc"]], "Preparing the RTEMS Boot loader": [[48, "preparing-the-rtems-boot-loader"]], "Creating an RTEMS IOC Instance": [[48, "creating-an-rtems-ioc-instance"]], "RTEMS Environment Variables": [[48, "id1"]], "Deploying an RTEMS IOC Instance": [[48, "deploying-an-rtems-ioc-instance"]], "Checking your RTEMS IOC": [[48, "checking-your-rtems-ioc"]], "RTEMS - Creating a File Server": [[49, "rtems-creating-a-file-server"]], "Create a File Server Service": [[49, "create-a-file-server-service"]], "Setup a Kubernetes Server": [[50, "setup-a-kubernetes-server"]], "Bring Your Own Cluster": [[50, "bring-your-own-cluster"]], "Platform Choice": [[50, "platform-choice"]], "Installation Steps": [[50, "installation-steps"], [52, "installation-steps"]], "Install K3S lightweight Kubernetes": [[50, "install-k3s-lightweight-kubernetes"]], "Configure kubectl": [[50, "configure-kubectl"]], "Create an epics IOCs namespace and context": [[50, "create-an-epics-iocs-namespace-and-context"]], "Create a service account to run the IOCs": [[50, "create-a-service-account-to-run-the-iocs"]], "Completed": [[50, "completed"]], "Create a New Kubernetes Beamline": [[51, "create-a-new-kubernetes-beamline"]], "Create a new beamline repository": [[51, "create-a-new-beamline-repository"]], "Cluster Topologies": [[51, "cluster-topologies"]], "Shared Clusters": [[51, "shared-clusters"]], "Dedicated Clusters": [[51, "dedicated-clusters"]], "Environment Setup": [[51, "environment-setup"]], "Section 1": [[51, "section-1"]], "Section 2": [[51, "section-2"]], "Section 3": [[51, "section-3"]], "Setting up the Beamline Helm Chart Defaults": [[51, "setting-up-the-beamline-helm-chart-defaults"]], "All cluster types": [[51, "all-cluster-types"]], "k3s single server cluster": [[51, "k3s-single-server-cluster"]], "DLS test beamlines": [[51, "dls-test-beamlines"]], "DLS real beamlines": [[51, "dls-real-beamlines"]], "Set Up The One Time Only Beamline Resources": [[51, "set-up-the-one-time-only-beamline-resources"]], "Create a Test IOC to Deploy": [[51, "create-a-test-ioc-to-deploy"]], "Set up a Developer Workstation": [[52, "set-up-a-developer-workstation"]], "Options": [[52, "options"]], "Platform Support": [[52, "platform-support"]], "Setup VSCode": [[52, "setup-vscode"]], "Setup Docker or Podman": [[52, "setup-docker-or-podman"]], "Install Python": [[52, "install-python"]], "Git": [[52, "git"]], "Working with Support Modules": [[53, "working-with-support-modules"]], "Testing and Deploying a Generic IOC": [[54, "testing-and-deploying-a-generic-ioc"]], "Publishing the Generic IOC Container to GHCR": [[54, "publishing-the-generic-ioc-container-to-ghcr"]], "Making the Tests Relevant to our Generic IOC": [[54, "making-the-tests-relevant-to-our-generic-ioc"]], "Try out some GUI": [[54, "try-out-some-gui"]]}, "indexentries": {}}) \ No newline at end of file diff --git a/2024-rework/user/explanations/docs-structure.html b/2024-rework/user/explanations/docs-structure.html index a33f853a..ea3ba590 100644 --- a/2024-rework/user/explanations/docs-structure.html +++ b/2024-rework/user/explanations/docs-structure.html @@ -8,7 +8,7 @@ - About the documentation — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + About the documentation — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/explanations/introduction.html b/2024-rework/user/explanations/introduction.html index 7fe600e8..0e92390d 100644 --- a/2024-rework/user/explanations/introduction.html +++ b/2024-rework/user/explanations/introduction.html @@ -8,7 +8,7 @@ - Essential Concepts — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Essential Concepts — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/explanations/ioc-source.html b/2024-rework/user/explanations/ioc-source.html index c75eaf73..4cf03641 100644 --- a/2024-rework/user/explanations/ioc-source.html +++ b/2024-rework/user/explanations/ioc-source.html @@ -8,7 +8,7 @@ - Dev Container vs Runtime Container — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Dev Container vs Runtime Container — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/explanations/kubernetes_cluster.html b/2024-rework/user/explanations/kubernetes_cluster.html index db2632d8..0a1e86bb 100644 --- a/2024-rework/user/explanations/kubernetes_cluster.html +++ b/2024-rework/user/explanations/kubernetes_cluster.html @@ -8,7 +8,7 @@ - Kubernetes Cluster Config — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Kubernetes Cluster Config — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/explanations/net_protocols.html b/2024-rework/user/explanations/net_protocols.html index a20fa18b..7a84f2e6 100644 --- a/2024-rework/user/explanations/net_protocols.html +++ b/2024-rework/user/explanations/net_protocols.html @@ -8,7 +8,7 @@ - Channel Access and Other Protocols — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Channel Access and Other Protocols — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/explanations/repositories.html b/2024-rework/user/explanations/repositories.html index d4cddcef..bf3e0aa7 100644 --- a/2024-rework/user/explanations/repositories.html +++ b/2024-rework/user/explanations/repositories.html @@ -8,7 +8,7 @@ - Source and Registry Locations — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Source and Registry Locations — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/how-to/builder2ibek.html b/2024-rework/user/how-to/builder2ibek.html index 71ef0bad..42bd2374 100644 --- a/2024-rework/user/how-to/builder2ibek.html +++ b/2024-rework/user/how-to/builder2ibek.html @@ -8,7 +8,7 @@ - Builder2ibek Conversion Tool — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Builder2ibek Conversion Tool — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/how-to/builder2ibek.support.html b/2024-rework/user/how-to/builder2ibek.support.html index 3153e6a2..7cea4497 100644 --- a/2024-rework/user/how-to/builder2ibek.support.html +++ b/2024-rework/user/how-to/builder2ibek.support.html @@ -8,7 +8,7 @@ - Builder2ibek.support Conversion Tool — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Builder2ibek.support Conversion Tool — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/how-to/contributing.html b/2024-rework/user/how-to/contributing.html index dda1c948..cb3b7b4e 100644 --- a/2024-rework/user/how-to/contributing.html +++ b/2024-rework/user/how-to/contributing.html @@ -8,7 +8,7 @@ - Contributing to the project — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Contributing to the project — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/how-to/debug.html b/2024-rework/user/how-to/debug.html index cbeed70c..6d747fcf 100644 --- a/2024-rework/user/how-to/debug.html +++ b/2024-rework/user/how-to/debug.html @@ -8,7 +8,7 @@ - Debug an IOC instance locally — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Debug an IOC instance locally — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/how-to/ibek-support.html b/2024-rework/user/how-to/ibek-support.html index 87f52110..ccb6a9cc 100644 --- a/2024-rework/user/how-to/ibek-support.html +++ b/2024-rework/user/how-to/ibek-support.html @@ -8,7 +8,7 @@ - Updating and Testing ibek-support — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Updating and Testing ibek-support — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/how-to/own_tools.html b/2024-rework/user/how-to/own_tools.html index 76b53b87..902be98e 100644 --- a/2024-rework/user/how-to/own_tools.html +++ b/2024-rework/user/how-to/own_tools.html @@ -8,7 +8,7 @@ - Choose Your Developer Environment — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Choose Your Developer Environment — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/how-to/phoebus.html b/2024-rework/user/how-to/phoebus.html index 084aa947..9262e307 100644 --- a/2024-rework/user/how-to/phoebus.html +++ b/2024-rework/user/how-to/phoebus.html @@ -8,7 +8,7 @@ - Viewing Operator Interfaces with Phoebus — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Viewing Operator Interfaces with Phoebus — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/how-to/useful_k8s.html b/2024-rework/user/how-to/useful_k8s.html index 146a81a4..494a1f7f 100644 --- a/2024-rework/user/how-to/useful_k8s.html +++ b/2024-rework/user/how-to/useful_k8s.html @@ -8,7 +8,7 @@ - Kubernetes Additional How To’s — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Kubernetes Additional How To’s — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/index.html b/2024-rework/user/index.html index 762ff44f..33f21a55 100644 --- a/2024-rework/user/index.html +++ b/2024-rework/user/index.html @@ -8,7 +8,7 @@ - User Guide — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + User Guide — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/overview.html b/2024-rework/user/overview.html index a609bf2c..3f907139 100644 --- a/2024-rework/user/overview.html +++ b/2024-rework/user/overview.html @@ -8,7 +8,7 @@ - <no title> — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + <no title> — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/reference/cli.html b/2024-rework/user/reference/cli.html index 7ac4d149..9eee0236 100644 --- a/2024-rework/user/reference/cli.html +++ b/2024-rework/user/reference/cli.html @@ -8,7 +8,7 @@ - Command Line Interface for IOC Management — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Command Line Interface for IOC Management — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/reference/configuration.html b/2024-rework/user/reference/configuration.html index 411c924b..344e1d20 100644 --- a/2024-rework/user/reference/configuration.html +++ b/2024-rework/user/reference/configuration.html @@ -8,7 +8,7 @@ - Configuration for epics-containers — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Configuration for epics-containers — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/reference/environment.html b/2024-rework/user/reference/environment.html index 9fa3c86d..709e2964 100644 --- a/2024-rework/user/reference/environment.html +++ b/2024-rework/user/reference/environment.html @@ -8,7 +8,7 @@ - The Environment Configuration File — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + The Environment Configuration File — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/reference/faq.html b/2024-rework/user/reference/faq.html index 10f11a09..684fd87a 100644 --- a/2024-rework/user/reference/faq.html +++ b/2024-rework/user/reference/faq.html @@ -8,7 +8,7 @@ - Frequently Asked Questions — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Frequently Asked Questions — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/reference/ioc_helm_chart.html b/2024-rework/user/reference/ioc_helm_chart.html index dbbe6205..82352a95 100644 --- a/2024-rework/user/reference/ioc_helm_chart.html +++ b/2024-rework/user/reference/ioc_helm_chart.html @@ -8,7 +8,7 @@ - IOC Helm Chart Details — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + IOC Helm Chart Details — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/reference/k8s_resources.html b/2024-rework/user/reference/k8s_resources.html index 610af415..bdfb8fc3 100644 --- a/2024-rework/user/reference/k8s_resources.html +++ b/2024-rework/user/reference/k8s_resources.html @@ -8,7 +8,7 @@ - Kubernetes Resources in an IOC Instance — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Kubernetes Resources in an IOC Instance — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/reference/vscode_settings.html b/2024-rework/user/reference/vscode_settings.html index 69213a8d..8605db16 100644 --- a/2024-rework/user/reference/vscode_settings.html +++ b/2024-rework/user/reference/vscode_settings.html @@ -8,7 +8,7 @@ - Recommended VSCode Settings — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Recommended VSCode Settings — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/create_beamline.html b/2024-rework/user/tutorials/create_beamline.html index 02daa873..ade2f082 100644 --- a/2024-rework/user/tutorials/create_beamline.html +++ b/2024-rework/user/tutorials/create_beamline.html @@ -8,7 +8,7 @@ - Create a Beamline Repository — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Create a Beamline Repository — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/create_ioc.html b/2024-rework/user/tutorials/create_ioc.html index 4d8e02f9..0506446a 100644 --- a/2024-rework/user/tutorials/create_ioc.html +++ b/2024-rework/user/tutorials/create_ioc.html @@ -8,7 +8,7 @@ - Create an IOC Instance — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Create an IOC Instance — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/debug_generic_ioc.html b/2024-rework/user/tutorials/debug_generic_ioc.html index 28604367..83ae180b 100644 --- a/2024-rework/user/tutorials/debug_generic_ioc.html +++ b/2024-rework/user/tutorials/debug_generic_ioc.html @@ -8,7 +8,7 @@ - Debugging Generic IOC Builds — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Debugging Generic IOC Builds — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/deploy_example.html b/2024-rework/user/tutorials/deploy_example.html index b3221446..f074c4f7 100644 --- a/2024-rework/user/tutorials/deploy_example.html +++ b/2024-rework/user/tutorials/deploy_example.html @@ -8,7 +8,7 @@ - Deploying and Managing IOC Instances — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Deploying and Managing IOC Instances — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/dev_container.html b/2024-rework/user/tutorials/dev_container.html index 1eb23590..ee802979 100644 --- a/2024-rework/user/tutorials/dev_container.html +++ b/2024-rework/user/tutorials/dev_container.html @@ -8,7 +8,7 @@ - Developer Containers — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Developer Containers — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/generic_ioc.html b/2024-rework/user/tutorials/generic_ioc.html index 42ab088d..827d25b9 100644 --- a/2024-rework/user/tutorials/generic_ioc.html +++ b/2024-rework/user/tutorials/generic_ioc.html @@ -8,7 +8,7 @@ - Create a Generic IOC — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Create a Generic IOC — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + @@ -517,7 +517,7 @@

Create a Generic IOC#

In this tutorial you will learn how to take an existing support module and -create a Generic IOC builds it. You will also learn how to embed an +create a Generic IOC that builds it. You will also learn how to embed an example IOC instance into the Generic IOC for testing and demonstration.

This is a type 2. change from the list at Types of Changes.

@@ -530,17 +530,17 @@

Lakeshore 340 Temperature Controller

Note

DLS has an existing IOC building tool XML Builder for traditional -IOCs. It has allowed DLS to have concise way of describing a beamline for many +IOCs. It has allowed DLS to a have concise way of describing a beamline for many years. However, it requires some changes to the support modules and for this reason DLS maintain’s a fork of all upstream support modules it uses. epics-containers is intended to remove this barrier to collaboration and use support modules from public repositories wherever appropriate. This includes external publishing of previously internal support modules.

-

The first step was to publish the support module to a public repository. The -support module now lives at:

+

The first step was to publish the support module to a public repository, +it now lives at:

DiamondLightSource/lakeshore340

-

The project requires a little genericizing as follows:

+

The project required a little genericizing as follows:

  • add an Apache V2 LICENCE file in the root

  • Make sure that configure/RELEASE has an include of RELEASE.local at the end

  • @@ -610,7 +610,7 @@

    Prepare the New Repo for Development

    Initial Changes to the Dockerfile#

    The Dockerfile is the recipe for building the container image. It is a set -of steps that get run inside a container, the starting container filesystem +of steps that get run inside a container. The starting container filesystem state is determined by a FROM line at the top of the Dockerfile.

    In the Generic IOC template the FROM line gets a version of the epics-containers base image. It then demonstrates how to add a support module @@ -632,7 +632,8 @@

    Initial Changes to the Dockerfileasyn and StreamDevice. We will first install those inside our devcontainer as follows:

    -
    cd /workspaces/ibek-support
    +
    # open a new terminal in VSCode (Terminal -> New Terminal)
    +cd /workspaces/ioc-lakeshore340/ibek-support
     asyn/install.sh R4-42
     StreamDevice/install.sh 2.8.24
     
    @@ -642,17 +643,6 @@

    Initial Changes to the Dockerfileioc-lakeshore340 container image will have the same support built in by updating the Dockerfile as follows:

    -
    -

    Note

    -

    You may think that there is a lot of duplication here e.g. asyn appears -3 times. However, this is explicitly -done to make the build cache more efficient and speed up development. -For example we could copy everything out of the ibek-support directory -in a single command but then if I changed a StreamDevice ibek-support file the -build would have to re-fetch and re-make all the support modules. By, -only copying the files we are about to use in the next step we can, -massively increase the build cache hit rate.

    -
    -

    The above adds StreamDevice and its dependency asyn. For each support module +

    The above commands added StreamDevice and its dependency asyn. +For each support module we copy it’s ibek-support folder and then run the install.sh script. The only argument to install.sh is the git tag for the version of the support module required. ibek-support is a submodule used by all the Generic IOC projects that contains recipes for building support modules, it will be covered in more detail as we learn to add our own recipe for lakeshore340 below.

    +

    You may think that there is a lot of duplication here e.g. asyn appears +3 times. However, this is explicitly +done to make the build cache more efficient and speed up development. +For example we could copy everything out of the ibek-support directory +in a single command but then if I changed a StreamDevice ibek-support file the +build would have to re-fetch and re-make all the support modules. By +only copying the files we are about to use in the next step we can, +massively increase the build cache hit rate.

    Note

    These changes to the Dockerfile mean that if we were to exit the devcontainer, @@ -677,194 +676,288 @@

    Initial Changes to the Dockerfile -

    Configure the ibek-support Submodule#

    +
    +

    Prepare The ibek-support Submodule#

    +

    Now we are ready to add the lakeshore340 support module to our project. In +order to do so we must first add a recipe for it to ibek-support.

    The ibek-support submodule is used to share information about how to build -and use support modules. It contains two kinds of files:

    +and use support modules. It contains three kinds of files:

    1. install.sh - These are used to fetch and build support modules. They are run from the Dockerfile as described above.

    2. -
    3. IBEK support module definitions: These are used to help IOCs build their +

    4. IBEK support module definitions: These are used to help IOCs build their iocShell boot scripts and EPICS Database from YAML descriptions.

    5. +
    6. PVI definitions: These are used to add structure to the set of PV’s a +device exposes. This structure allows us to auto-generate engineering +screens for the device. See epics-containers/pvi.

    -

    ibek-support is curated for security reasons, therefore we need to work with +

    ibek-support is curated for security reasons, therefore we need to work with a fork of it so we can add our own recipe for lakeshore340. If you make changes -to ibek-support that are generally useful you can use a pull request to get them +to ibek-support that are generally useful you can use a pull request to get them merged into the main repo.

    Perform the following steps to create a fork and update the submodule:

    -
      +
      • goto epics-containers/ibek-support

      • uncheck Copy the main branch only

      • click Create Fork

      • -
      • click on <> Code and COPY the HTTPS URL

      • +
      • click on <> Code and copy the HTTPS URL

      • cd to the ioc-lakeshore340 directory

      • -
      • git submodule set-url ibek-support <PASTE *HTTPS* URL HERE>
        +
      +
      git submodule set-url ibek-support <PASTE *HTTPS* URL HERE>
       git submodule init
       git submodule update
       cd ibek-support
      +git fetch
       git checkout tutorial-KEEP # see note below
       cd ..
       
      - -
    -

    We are using the tutorial-KEEP branch which is a snapshot of the ibek-support state +

    We are using the tutorial-KEEP branch which is a snapshot of the ibek-support state appropriate for this tutorial. Normally you would use the main branch and then create your own branch off of that to work in.

    -
    -

    Warning

    -

    IMPORTANT: we used an HTTPS URL for the ibek-support submodule, not +

    +

    Note

    +

    IMPORTANT: we used an HTTPS URL for the ibek-support submodule, not a SSH URL. This is because other clones of ioc-lakeshore340 will not be guaranteed to have the required SSH keys. HTTPS is fine for reading, but to write you need SSH. Therefore add the following to your ~/.gitconfig:

    -
    
    +
    [url "ssh://git@github.com/"]
    +        insteadOf = https://github.com/
     
    -
    -
    [url “ssh://git@github.com/”]

    insteadOf =

    -
    -

    This tells git to use SSH for all GitHub URLs, when it sees an HTTP URL.

    -

    The git submodule allows us to share the ibek-support definitions between all +

    The git submodule allows us to share the ibek-support definitions between all ioc-XXX projects but also allows each project to have its copy fixed to a particular commit (until updated with git pull) see https://git-scm.com/book/en/v2/Git-Tools-Submodules for more information.

    -
    -

    Add a new support module#

    -
    -

    Add System Dependencies#

    -

    If you tried to build the container image at this point you would find that -it is missing the boost libraries which are required by areaDetector. You -can use apt to install anything you need inside the container. Replace -the commented out apt-get lines with:

    -
    RUN apt-get update && apt-get upgrade -y && \
    - apt-get install -y --no-install-recommends \
    - libboost-all-dev
    +
    +

    Create install.sh For The lakeshore340#

    +

    The first file we will create is the install.sh script for lakeshore340. +This is a simple script that fetches the support module from GitHub and +builds it.

    +

    These scripts draw heavily on the ibek tool to do tasks that most support +modules require. They are also as close to identical as possible for simple +support modules.

    +

    IMPORTANT points to note are:

    +
      +
    • Although we are using ibek we are really just automating what an EPICS +engineer would do manually. This is very much using the vanilla EPICS build +system that comes with EPICS base, along with the vanilla Make and Config files +that come with each support module. These steps are:-

      +
        +
      • make sure we have the necessary system dependencies installed

      • +
      • fetch a version of the support module from GitHub

      • +
      • add a RELEASE.local to enable dependency resolution

      • +
      • optionally add CONFIG_SITE.local to apply settings for the build environment

      • +
      • run make to build the support module

      • +
      • take a note of the dbds and libs that we build so that we can use them +to make our IOC instance later

      • +
      +
    • +
    • This is a bash script so although we encourage a very standard structure, +you can do anything you like. For example this support module has to +compile a 3rd party library before it can build the support module itself. +ADAravis install.sh

    • +
    +

    To make your lakeshore340 install.sh script:

    +
    cd ibek-support
    +mkdir lakeshore340
    +cp devIocStats/install.sh lakeshore340/install.sh
    +code install.sh
     
    -
    -
    -
    -

    Add ibek-support Patch file for ADURL#

    -

    In the above we referred to a patch file for ADURL. Add this in the ibek-support -folder by creating directory called ibek-support/adurl and adding a file called -adurl.sh with the following contents:

    +

    Now edit the install.sh script to look like the following code block.

    +

    The changes required for any support module you care to build would be:

    +
      +
    • change the NAME variable to match the name of the support module

    • +
    • add in ibek support apt-install lines for any system dependencies. +These can be for the developer stage or the runtime stage or both.

    • +
    • change the ibek support add-* lines to declare the libs and DBDs +that this module will publish.

    • +
    • add extra release macros for RELEASE.local (the RELEASE macro for +the current support module is added automatically). Or add +CONFIG entries for CONFIG_SITE.local as required. +None were required for lakeshore340. To see how to use these +functions see: +- ibek support add-release-macro –help +- ibek support add-to-config-site –help

    • +
    #!/bin/bash
     
    -echo '
    -CROSS_COMPILER_TARGET_ARCHS =
    +# ARGUMENTS:
    +#  $1 VERSION to install (must match repo tag)
    +VERSION=${1}
    +NAME=lakeshore340
    +FOLDER=$(dirname $(readlink -f $0))
     
    -# Enable file plugins and source them all from ADSupport
    +# log output and abort on failure
    +set -xe
     
    -WITH_GRAPHICSMAGICK = YES
    -GRAPHICSMAGICK_EXTERNAL = NO
    +# doxygen is used in documentation build for the developer stage
    +ibek support apt-install --only=dev doxygen
     
    -WITH_JPEG     = YES
    -JPEG_EXTERNAL = NO
    +# get the source and fix up the configure/RELEASE files
    +ibek support git-clone ${NAME} ${VERSION} --org https://github.com/DiamondLightSource/
     
    -WITH_PVA      = YES
    -WITH_BOOST    = YES
    -' > configure/CONFIG_SITE.linux-x86_64.Common
    +ibek support register ${NAME}
     
    -echo '
    -# Generic RELEASE.local file that should work for all Support modules and IOCs
    +# declare the libs and DBDs that are required in ioc/iocApp/src/Makefile
    +# None required for a stream device ------------------------------------
    +#ibek support add-libs
    +#ibek support add-dbds
     
    -SUPPORT=NotYetSet
    -AREA_DETECTOR=$(SUPPORT)
    -include $(SUPPORT)/configure/RELEASE
    -' > configure/RELEASE.local
    +# compile the support module
    +ibek support compile ${NAME}
    +# prepare *.bob, *.pvi, *.ibek.support.yaml for access outside the container.
    +ibek support generate-links ${FOLDER}
     
    -

    This is a pretty standard patch file and most support modules will need -something similar. -It creates two files in the ADURL support module’s configure folder as -follows:

    -
      -
    • CONFIG_SITE.linux-x86_64.Common - This tells the ADURL build -to use the GraphicsMagick and JPEG libraries that are built by ADSUPPORT. -For details of what to put in CONFIG_SITE for AreaDetector modules see -CONFIG_SITE.local.

    • -
    • RELEASE.local - This tells the ADURL build where to find -the support modules that it depends on. epics-containers maintains a -global release file that is used by all support modules and IOCs. It -located at /workspaces/epics/support/configure/RELEASE. Therefore we -place a reference to this file in the RELEASE.local file. Whenever -python3 modules.py install is run it will update the global release -file and also fixup any SUPPORT= lines in all configure/RELEASE* -files.

    • -
    -

    ADCore and ADSupport already have ibek-support files as they were previously created -when making ioc-adsimdetector.

    -
    -
    -

    Update the IOC Makefile#

    -

    The IOC Makefile tells the IOC which modules to link against. We need to update -it to pull in ADUrl and dependencies. Replace the file ioc/iocApp/src/Makefile -with the following:

    -
    TOP = ../..
    -include $(TOP)/configure/CONFIG
    -
    -PROD_IOC = ioc
    -DBD += ioc.dbd
    -ioc_DBD += base.dbd
    -ioc_DBD += devIocStats.dbd
    -ioc_DBD += asyn.dbd
    -ioc_DBD += busySupport.dbd
    -ioc_DBD += ADSupport.dbd
    -ioc_DBD += NDPluginSupport.dbd
    -ioc_DBD += NDFileHDF5.dbd
    -ioc_DBD += NDFileJPEG.dbd
    -ioc_DBD += NDFileTIFF.dbd
    -ioc_DBD += NDFileNull.dbd
    -ioc_DBD += NDPosPlugin.dbd
    -ioc_DBD += URLDriverSupport.dbd
    -ioc_DBD += PVAServerRegister.dbd
    -ioc_DBD += NDPluginPva.dbd
    -
    -ioc_SRCS += ioc_registerRecordDeviceDriver.cpp
    -
    -ioc_LIBS += ntndArrayConverter
    -ioc_LIBS += nt
    -ioc_LIBS += pvData
    -ioc_LIBS += pvDatabase
    -ioc_LIBS += pvAccessCA
    -ioc_LIBS += pvAccessIOC
    -ioc_LIBS += pvAccess
    -ioc_LIBS += URLDriver
    -ioc_LIBS += NDPlugin
    -ioc_LIBS += ADBase
    -ioc_LIBS += cbfad
    -ioc_LIBS += busy
    -ioc_LIBS += asyn
    -ioc_LIBS += devIocStats
    -ioc_LIBS += $(EPICS_BASE_IOC_LIBS)
    -ioc_SRCS += iocMain.cpp
    -
    -include $(TOP)/configure/RULES
    +

    Having made these changes you can now test the script by running it:

    +
    cd /workspaces/ioc-lakeshore340/ibek-support
    +chmod +x lakeshore340/install.sh
    +lakeshore340/install.sh 2-6-1
     
    -

    TODO: in future the IBEK tool will generate the Makefile for you based on the -ibek support YAML supplied with each module in ibek-support.

    +

    You now have lakeshore340 support in your developer container. Let’s go ahead +and add that into the Dockerfile:

    +
    COPY ibek-support/lakeshore340/ lakeshore340/
    +RUN lakeshore340/install.sh 2-6-1
    +
    +
    +

    This means you can compile an IOC with lakeshore340 support in this container +but we don’t yet have a way to generate startup scripts and EPICS Databases +for the instances. We will do that next.

    -
    -

    Build the Generic IOC#

    -

    Now we can build the IOC. Run the following command from the ioc-adurl -directory:

    -
    ec dev build
    +
    +

    Create Support YAML for the lakeshore340#

    +

    When making an IOC instance from a Generic IOC, the instance needs to supply +an iocShell startup script and an EPICS Database. You can supply hand +crafted st.cmd and ioc.subst files for this purpose. The Generic IOC +we have made above is already capable of using such files.

    +

    For this exercise we will use the full capabilities of ibek to generate +these files from a YAML description of the IOC instance. To do this we need +to create a YAML file that describes what the instance YAML is allowed to +make.

    +

    TODO: a detailed description of the YAML files’ structure and purpose should +be included in the ibek documentation and linked here. +The current version of this is here +https://epics-containers.github.io/ibek/main/developer/explanations/entities.html +but it is rather out of date.

    +

    To create a ibek support YAML file we need to provide a list of definitions . +Each definition gives:

    +
      +
    • a name and description for the definitions- a list of arguments that an +instance of this definitions may supply with each having:

      +
        +
      • a type (string, integer, float, boolean, enum)

      • +
      • a name

      • +
      • a description

      • +
      • optionally a default value

      • +
      +
    • +
    • A list of database templates to instantiate for each instance of this definitions +- including values for the Macros in the template

    • +
    • A list of iocShell command line entries to add before or after iocInit

    • +
    +

    In all of the fields Jinja templating can be used to combine the values of +arguments into the final output. At its simplest this is just the name of +an argument in double curly braces e.g. {{argument_name}}. But, it can +also be used to do more complex things as a Python interpreter is evaluating +the text inside the curly braces and that interpreter has the values of +all the definitions arguments available in its context. +See https://jinja.palletsprojects.com/en/3.0.x/templates/

    +

    To make a lakeshore340 YAML file, put the following contents in a file called +/workspaces/ioc-lakeshore340/ibek-support/lakeshore340/lakeshore340.yaml:

    +
    # yaml-language-server: $schema=https://github.com/epics-containers/ibek/releases/download/1.6.2/ibek.support.schema.json
    +
    +module: lakeshore340
    +
    +defs:
    +  - name: lakeshore340
    +    description: |-
    +      Lakeshore 340 Temperature Controller
    +      Notes: The temperatures in Kelvin are archived once every 10 secs.
    +    args:
    +      - type: str
    +        name: P
    +        description: |-
    +          Prefix for PV name
    +
    +      - type: str
    +        name: PORT
    +        description: |-
    +          Bus/Port Address (eg. ASYN Port).
    +
    +      - type: int
    +        name: ADDR
    +        description: |-
    +          Address on the bus
    +        default: 0
    +
    +      - type: int
    +        name: SCAN
    +        description: |-
    +          SCAN rate for non-temperature/voltage parameters.
    +        default: 5
    +
    +      - type: int
    +        name: TEMPSCAN
    +        description: |-
    +          SCAN rate for the temperature/voltage readings
    +        default: 5
    +
    +      - type: id
    +        name: name
    +        description: |-
    +          Object and gui association name
    +
    +      - type: int
    +        name: LOOP
    +        description: |-
    +          Which heater PID loop to control (Default = 1)
    +        default: 1
    +
    +    databases:
    +      - file: $(LAKESHORE340)/db/lakeshore340.template
    +        args:
    +          name:
    +          SCAN:
    +          P:
    +          TEMPSCAN:
    +          PORT:
    +          LOOP:
    +          ADDR:
    +
    +    pre_init:
    +      - value: |
    +          epicsEnvSet "STREAM_PROTOCOL_PATH", "$(LAKESHORE340)/lakeshore340App/protocol/"
     
    -
    -

    Warning

    -

    This will FAIL. There is a deliberate error which we will fix in the next -Tutorial.

    -

    You should see this error:

    -
    ../URLDriver.cpp:22:10: fatal error: Magick++.h: No such file or directory
    +

    This file declares a list of arguments, one for each of the database template +macros that it needs to substitute. It then declares that we need to instantiate +the lakeshore340.template database template and passes all of the arguments +verbatim to the template.

    +

    Finally it declares that we need to add a line to the iocShell startup script +that allows the IOC to find the modules StreamDevice protocol files.

    +

    Note that in the list of DB args or in the startup lines we can use combinations +of arguments to make the final output.

    +

    e.g. to make a more descriptive PV prefix we could use:

    +
    databases:
    +  - file: $(LAKESHORE340)/db/lakeshore340.template
    +    args:
    +      P: "{{P + ':' + name + ':'}}"
     
    +
    +

    Note

    +

    Because this is a DLS module originally, it has an etc/builder.py file +that is used by the XML Builder tool. ibek has a converter tool +that will translate this file into an ibek YAML file. Only DLS users +can take advantage of this because it needs access to all the dependent +DLS support module forks to work. See Builder2ibek.support Conversion Tool

    -

    In the next tutorial we will look at how to fix build errors like this.

    @@ -918,14 +1011,9 @@

    Build the Generic IOCCreate a New Generic IOC project
  • Prepare the New Repo for Development
  • Initial Changes to the Dockerfile
  • -
  • Configure the ibek-support Submodule -
  • -
  • Add ibek-support Patch file for ADURL
  • -
  • Update the IOC Makefile
  • -
  • Build the Generic IOC
  • +
  • Prepare The ibek-support Submodule
  • +
  • Create install.sh For The lakeshore340
  • +
  • Create Support YAML for the lakeshore340
diff --git a/2024-rework/user/tutorials/ibek.html b/2024-rework/user/tutorials/ibek.html index e426e47c..33e44d58 100644 --- a/2024-rework/user/tutorials/ibek.html +++ b/2024-rework/user/tutorials/ibek.html @@ -8,7 +8,7 @@ - Defining IOC Instances using IBEK — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Defining IOC Instances using IBEK — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/intro.html b/2024-rework/user/tutorials/intro.html index 0f897a6b..c35956a5 100644 --- a/2024-rework/user/tutorials/intro.html +++ b/2024-rework/user/tutorials/intro.html @@ -8,7 +8,7 @@ - Tutorials Introduction — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Tutorials Introduction — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/ioc_changes1.html b/2024-rework/user/tutorials/ioc_changes1.html index a2f36aff..15d380b4 100644 --- a/2024-rework/user/tutorials/ioc_changes1.html +++ b/2024-rework/user/tutorials/ioc_changes1.html @@ -8,7 +8,7 @@ - Changing the IOC Instance — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Changing the IOC Instance — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/ioc_changes2.html b/2024-rework/user/tutorials/ioc_changes2.html index 8c12f871..26046fb2 100644 --- a/2024-rework/user/tutorials/ioc_changes2.html +++ b/2024-rework/user/tutorials/ioc_changes2.html @@ -8,7 +8,7 @@ - Changing a Generic IOC Part 1 — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Changing a Generic IOC Part 1 — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/ioc_changes3.html b/2024-rework/user/tutorials/ioc_changes3.html index f4c52835..10c27bdf 100644 --- a/2024-rework/user/tutorials/ioc_changes3.html +++ b/2024-rework/user/tutorials/ioc_changes3.html @@ -8,7 +8,7 @@ - Changing a Generic IOC Part 2 — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Changing a Generic IOC Part 2 — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/rtems_ioc.html b/2024-rework/user/tutorials/rtems_ioc.html index 140fb6e4..1560b7a2 100644 --- a/2024-rework/user/tutorials/rtems_ioc.html +++ b/2024-rework/user/tutorials/rtems_ioc.html @@ -8,7 +8,7 @@ - RTEMS - Deploying an Example IOC — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + RTEMS - Deploying an Example IOC — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/rtems_setup.html b/2024-rework/user/tutorials/rtems_setup.html index b95f9167..82c2d469 100644 --- a/2024-rework/user/tutorials/rtems_setup.html +++ b/2024-rework/user/tutorials/rtems_setup.html @@ -8,7 +8,7 @@ - RTEMS - Creating a File Server — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + RTEMS - Creating a File Server — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/setup_k8s.html b/2024-rework/user/tutorials/setup_k8s.html index 25c797b9..a32a025d 100644 --- a/2024-rework/user/tutorials/setup_k8s.html +++ b/2024-rework/user/tutorials/setup_k8s.html @@ -8,7 +8,7 @@ - Setup a Kubernetes Server — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Setup a Kubernetes Server — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/setup_k8s_new_beamline.html b/2024-rework/user/tutorials/setup_k8s_new_beamline.html index 7f5281c4..83d44184 100644 --- a/2024-rework/user/tutorials/setup_k8s_new_beamline.html +++ b/2024-rework/user/tutorials/setup_k8s_new_beamline.html @@ -8,7 +8,7 @@ - Create a New Kubernetes Beamline — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Create a New Kubernetes Beamline — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/setup_workstation.html b/2024-rework/user/tutorials/setup_workstation.html index b0214122..547f3310 100644 --- a/2024-rework/user/tutorials/setup_workstation.html +++ b/2024-rework/user/tutorials/setup_workstation.html @@ -8,7 +8,7 @@ - Set up a Developer Workstation — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Set up a Developer Workstation — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/support_module.html b/2024-rework/user/tutorials/support_module.html index 468b4ce3..7c4d8db5 100644 --- a/2024-rework/user/tutorials/support_module.html +++ b/2024-rework/user/tutorials/support_module.html @@ -8,7 +8,7 @@ - Working with Support Modules — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Working with Support Modules — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - + diff --git a/2024-rework/user/tutorials/test_generic_ioc.html b/2024-rework/user/tutorials/test_generic_ioc.html index c7206468..74df44d8 100644 --- a/2024-rework/user/tutorials/test_generic_ioc.html +++ b/2024-rework/user/tutorials/test_generic_ioc.html @@ -8,7 +8,7 @@ - Testing and Deploying a Generic IOC — epics-containers.github.io 2023.11.2.dev34+gcb003f2 documentation + Testing and Deploying a Generic IOC — epics-containers.github.io 2023.11.2.dev35+gee5adfe documentation @@ -38,7 +38,7 @@ - +