ISC Open Source Projects issueshttps://gitlab.isc.org/groups/isc-projects/-/issues2024-02-13T14:52:11Zhttps://gitlab.isc.org/isc-projects/stork/-/issues/1300Check the minimum Java version in build system and describe it in docs2024-02-13T14:52:11ZSlawek FigielCheck the minimum Java version in build system and describe it in docsThe issue was found by @marcin during 1.15 sanity checks: https://gitlab.isc.org/isc-projects/stork/-/issues/1296#note_434164
The current version of the OpenAPI generator requires at least OpenJRE 11. The build system checks only if the...The issue was found by @marcin during 1.15 sanity checks: https://gitlab.isc.org/isc-projects/stork/-/issues/1296#note_434164
The current version of the OpenAPI generator requires at least OpenJRE 11. The build system checks only if the `java` binary is present and the documentation specifies that Java is required without providing a minimum version.
We should somehow cover the java requirement checks in the rake files or/and the docs.backloghttps://gitlab.isc.org/isc-projects/stork/-/issues/1298Coherent color scheme2024-02-13T14:50:02ZAndrei Pavelandrei@isc.orgCoherent color schemeStork has a blue-centered color scheme, but occassionally you see a gray background color reminiscent of Windows 95. It looks out of place. The color scheme could be more coherent.Stork has a blue-centered color scheme, but occassionally you see a gray background color reminiscent of Windows 95. It looks out of place. The color scheme could be more coherent.backloghttps://gitlab.isc.org/isc-projects/stork/-/issues/1292Restore storybook plugins2024-02-13T14:37:10ZSlawek FigielRestore storybook pluginsDue to compatibility problems with the dynamic forms in Angular, we turned off some default Storybook plugins some time ago. We should restore them because they are pretty useful.
List of disabled plugins:
- `@storybook/addon-controls`...Due to compatibility problems with the dynamic forms in Angular, we turned off some default Storybook plugins some time ago. We should restore them because they are pretty useful.
List of disabled plugins:
- `@storybook/addon-controls`
- `@storybook/addon-actions`
This code was implemented originally in #800, but it is out-of-scope of that issue.backloghttps://gitlab.isc.org/isc-projects/stork/-/issues/1291QA: Consider secret scanning2024-02-07T11:24:58ZTomek MrugalskiQA: Consider secret scanningTo prevent token and other secrets leaking, we might consider deploying secret scanning tools. Here's two that we might consider:
- [trufflehog](https://github.com/trufflesecurity/trufflehog) -13.2k stars on github
- [gitleaks](https://...To prevent token and other secrets leaking, we might consider deploying secret scanning tools. Here's two that we might consider:
- [trufflehog](https://github.com/trufflesecurity/trufflehog) -13.2k stars on github
- [gitleaks](https://gitleaks.io/) - 14.6k stars on github
There are plenty others, too.backloghttps://gitlab.isc.org/isc-projects/stork/-/issues/1290Hook changelogs in release notes2024-02-06T14:58:17ZSlawek FigielHook changelogs in release notesCurrently, we describe the changes provided in the hooks in the changelog in the main repository. It is pretty convenient because, anyway, we need to update the hook submodule reference to the main repository if any changes were provided...Currently, we describe the changes provided in the hooks in the changelog in the main repository. It is pretty convenient because, anyway, we need to update the hook submodule reference to the main repository if any changes were provided there.
But the hooks contain their own changelogs but they are not used in the release process. In Kea, we present them together with release notes.
@andrei proposed to do the same in Stork in https://gitlab.isc.org/isc-projects/stork/-/merge_requests/716#note_432749 .
Kea has only one repository for all hooks. It means there is only one changelog for all hooks, so in total, there are two changelogs (main and hooks) to maintain. In Stork, we plan to store every hook in a separate repository. Finally, you will have multiple changelogs that need to be processed to prepare the release notes. As far as I know, it is mainly a manual job, right? So, realizing this idea may increase the complexity work of release engineers.
We can extend the release utilities in the main repository to automate including the hook changelogs in the release notes.backloghttps://gitlab.isc.org/isc-projects/stork/-/issues/1288404 if stork-server is installed in custom path2024-02-06T14:53:55ZAndrei Pavelandrei@isc.org404 if stork-server is installed in custom pathSteps
1. Install server in a custom location.
```sh
$ rake install:server DEST=/opt/stork-server
mkdir -p /opt/stork-server
cp -a -f dist/server/. /opt/stork-server
```
2. Start server.
```sh
$ stork-server
WARN[2024-01-30 15:16:24]...Steps
1. Install server in a custom location.
```sh
$ rake install:server DEST=/opt/stork-server
mkdir -p /opt/stork-server
cp -a -f dist/server/. /opt/stork-server
```
2. Start server.
```sh
$ stork-server
WARN[2024-01-30 15:16:24] restservice.go:354 Cannot read the base URL in the '/usr/share/stork/www/index.html' file because it is missing. If the files are located on separate machine, you need manually change the 'href' value of the <base> HTML tag to '/' error="open /usr/share/stork/www/index.html: no such file or directory"
```
3. Attempt to open the UI in browser.
> 404 page not found
Expectation was that I get served `/opt/stork-server/usr/share/stork/www/index.html` which exists.
---
Similarly, stork-server logs on startup:
```
WARN[2024-01-30 15:16:24] server.go:102 The hook directory: '/var/lib/stork-server/hooks' doesn't exist error="cannot find plugin paths in: /var/lib/stork-server/hooks: cannot list hook directory: /var/lib/stork-server/hooks: open /var/lib/stork-server/hooks: no such file or directory"
```
It would be nice if this was also looked up from the installation path and that the directory would be created on installation, so there would be no warnings by default.
This last one also happens with stork-agent.backloghttps://gitlab.isc.org/isc-projects/stork/-/issues/1287Deadlock during removing a machine2024-01-31T18:51:40ZSlawek FigielDeadlock during removing a machineThe database deadlock may occur if the machine is deleted during the config review.
```
problem deleting machine 1: ERROR #40P01 deadlock detected" file="machines.go:688"
```
It causes the `test_delete_machine_with_config_reports` syst...The database deadlock may occur if the machine is deleted during the config review.
```
problem deleting machine 1: ERROR #40P01 deadlock detected" file="machines.go:688"
```
It causes the `test_delete_machine_with_config_reports` system test to fail often.backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/3224CB commands should use processDhcp[4|6]Config to validate content of global p...2024-02-01T14:46:08ZRazvan BecheriuCB commands should use processDhcp[4|6]Config to validate content of global parameterssetting global parameters using CB commands does not check if values are valid. They are merged into the current config with no check. this could have an undesired effect on the running server.
global scalar parameters v4:
```plaintext...setting global parameters using CB commands does not check if values are valid. They are merged into the current config with no check. this could have an undesired effect on the running server.
global scalar parameters v4:
```plaintext
if ( (config_pair.first == "renew-timer") ||
(config_pair.first == "rebind-timer") ||
(config_pair.first == "valid-lifetime") ||
(config_pair.first == "min-valid-lifetime") ||
(config_pair.first == "max-valid-lifetime") ||
(config_pair.first == "decline-probation-period") ||
(config_pair.first == "dhcp4o6-port") ||
(config_pair.first == "echo-client-id") ||
(config_pair.first == "match-client-id") ||
(config_pair.first == "authoritative") ||
(config_pair.first == "next-server") ||
(config_pair.first == "server-hostname") ||
(config_pair.first == "boot-file-name") ||
(config_pair.first == "server-tag") ||
(config_pair.first == "reservation-mode") ||
(config_pair.first == "reservations-global") ||
(config_pair.first == "reservations-in-subnet") ||
(config_pair.first == "reservations-out-of-pool") ||
(config_pair.first == "calculate-tee-times") ||
(config_pair.first == "t1-percent") ||
(config_pair.first == "t2-percent") ||
(config_pair.first == "cache-threshold") ||
(config_pair.first == "cache-max-age") ||
(config_pair.first == "hostname-char-set") ||
(config_pair.first == "hostname-char-replacement") ||
(config_pair.first == "ddns-send-updates") ||
(config_pair.first == "ddns-override-no-update") ||
(config_pair.first == "ddns-override-client-update") ||
(config_pair.first == "ddns-replace-client-name") ||
(config_pair.first == "ddns-generated-prefix") ||
(config_pair.first == "ddns-qualifying-suffix") ||
(config_pair.first == "ddns-update-on-renew") ||
(config_pair.first == "ddns-use-conflict-resolution") ||
(config_pair.first == "ddns-conflict-resolution-mode") ||
(config_pair.first == "ddns-ttl-percent") ||
(config_pair.first == "store-extended-info") ||
(config_pair.first == "statistic-default-sample-count") ||
(config_pair.first == "statistic-default-sample-age") ||
(config_pair.first == "early-global-reservations-lookup") ||
(config_pair.first == "ip-reservations-unique") ||
(config_pair.first == "reservations-lookup-first") ||
(config_pair.first == "parked-packet-limit") ||
(config_pair.first == "allocator") ||
(config_pair.first == "offer-lifetime") ) {
CfgMgr::instance().getStagingCfg()->addConfiguredGlobal(config_pair.first,
config_pair.second);
continue;
}
```
global scalar parameters v6:
```plaintext
if ( (config_pair.first == "renew-timer") ||
(config_pair.first == "rebind-timer") ||
(config_pair.first == "preferred-lifetime") ||
(config_pair.first == "min-preferred-lifetime") ||
(config_pair.first == "max-preferred-lifetime") ||
(config_pair.first == "valid-lifetime") ||
(config_pair.first == "min-valid-lifetime") ||
(config_pair.first == "max-valid-lifetime") ||
(config_pair.first == "decline-probation-period") ||
(config_pair.first == "dhcp4o6-port") ||
(config_pair.first == "server-tag") ||
(config_pair.first == "reservation-mode") ||
(config_pair.first == "reservations-global") ||
(config_pair.first == "reservations-in-subnet") ||
(config_pair.first == "reservations-out-of-pool") ||
(config_pair.first == "calculate-tee-times") ||
(config_pair.first == "t1-percent") ||
(config_pair.first == "t2-percent") ||
(config_pair.first == "cache-threshold") ||
(config_pair.first == "cache-max-age") ||
(config_pair.first == "hostname-char-set") ||
(config_pair.first == "hostname-char-replacement") ||
(config_pair.first == "ddns-send-updates") ||
(config_pair.first == "ddns-override-no-update") ||
(config_pair.first == "ddns-override-client-update") ||
(config_pair.first == "ddns-replace-client-name") ||
(config_pair.first == "ddns-generated-prefix") ||
(config_pair.first == "ddns-qualifying-suffix") ||
(config_pair.first == "ddns-update-on-renew") ||
(config_pair.first == "ddns-use-conflict-resolution") ||
(config_pair.first == "ddns-conflict-resolution-mode") ||
(config_pair.first == "ddns-ttl-percent") ||
(config_pair.first == "store-extended-info") ||
(config_pair.first == "statistic-default-sample-count") ||
(config_pair.first == "statistic-default-sample-age") ||
(config_pair.first == "early-global-reservations-lookup") ||
(config_pair.first == "ip-reservations-unique") ||
(config_pair.first == "reservations-lookup-first") ||
(config_pair.first == "parked-packet-limit") ||
(config_pair.first == "allocator") ||
(config_pair.first == "pd-allocator") ) {
CfgMgr::instance().getStagingCfg()->addConfiguredGlobal(config_pair.first,
config_pair.second);
continue;
}
```
lists might not be complete. need to check.
only few parameters are checked - one is valid-lifetime:
```plaintext
void
sanityChecks(const SrvConfigPtr& cfg, const ConstElementPtr& global) {
/// Global lifetime sanity checks
cfg->sanityChecksLifetime("valid-lifetime");
/// Shared network sanity checks
const SharedNetwork4Collection* networks = cfg->getCfgSharedNetworks4()->getAll();
if (networks) {
sharedNetworksSanityChecks(*networks, global->get("shared-networks"));
}
}
```
some are not checked even by processDhcp\[4|6\]Config:
```plaintext
if (allow_packet_park) {
// Get the parking limit. Parsing should ensure the value is present.
uint32_t parked_packet_limit = 0;
data::ConstElementPtr ppl = CfgMgr::instance().getCurrentCfg()->
getConfiguredGlobal(CfgGlobals::PARKED_PACKET_LIMIT);
if (ppl) {
parked_packet_limit = ppl->intValue();
}
if (parked_packet_limit) {
auto const& parking_lot =
ServerHooks::getServerHooks().getParkingLotPtr(hook_label);
if (parking_lot && (parking_lot->size() >= parked_packet_limit)) {
// We can't park it so we're going to throw it on the floor.
LOG_DEBUG(packet4_logger, DBGLVL_PKT_HANDLING, parking_lot_full_msg)
.arg(parked_packet_limit)
.arg(query->getLabel());
isc::stats::StatsMgr::instance().addValue("pkt4-receive-drop",
static_cast<int64_t>(1));
rsp.reset();
return;
}
}
```backloghttps://gitlab.isc.org/isc-projects/stork/-/issues/1281Deserialize the Kea JSON config lazily2024-01-16T14:48:41ZSlawek FigielDeserialize the Kea JSON config lazilyDeserializing the big Kea config JSON is a very memory-consuming operation. It is stored in the `config` column in the `kea_daemon` table.
The entries of this table are used in many contexts in Stork. Whenever they are fetched, the JSON ...Deserializing the big Kea config JSON is a very memory-consuming operation. It is stored in the `config` column in the `kea_daemon` table.
The entries of this table are used in many contexts in Stork. Whenever they are fetched, the JSON content is deserialized into Go structures, even if all or significant parts of this data are unnecessary, which is quite a common situation.
My proposal is to deserialize this JSON lazily - only when the related data are needed. The solution may be based on the `RawMessage` feature of the `encoding/json` package.backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/3219Implement RFC9527: Homenet DHCPv6 options2024-01-25T14:54:51ZTomek MrugalskiImplement RFC9527: Homenet DHCPv6 optionsA new set of three DHCPv6 options are being published in [RFC9527](https://www.rfc-editor.org/authors/rfc9527.html). If this link no longer works, it means the RFC is published.
The options' formats are reasonably simple (a 16-bits long...A new set of three DHCPv6 options are being published in [RFC9527](https://www.rfc-editor.org/authors/rfc9527.html). If this link no longer works, it means the RFC is published.
The options' formats are reasonably simple (a 16-bits long bit field + fqdn) and are DHCPv6 only. There's no special processing - normal ORO stuff, although the server will likely keep some values user specific (so will be used mainly as host reservation options).backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/3217Neighbor discovery for dhcpv62024-02-19T21:40:42ZVaclav MichalekNeighbor discovery for dhcpv6This is a request to implement IPv6 neighbor discovery mechanism (rfc4861) in DHCPv6 server to obtain MAC hardware addresses.
The method is also suggested in [related issue](https://gitlab.isc.org/isc-projects/kea/-/issues/1729 "Feature...This is a request to implement IPv6 neighbor discovery mechanism (rfc4861) in DHCPv6 server to obtain MAC hardware addresses.
The method is also suggested in [related issue](https://gitlab.isc.org/isc-projects/kea/-/issues/1729 "Feature request: DHCPv6 - use real MAC address from dhcp6 request (mac-sources=raw)").
**Is your feature request related to a problem? Please describe.**
The feature is needed for reliable host-based reservations and identification of DHCPv6 clients.
**Describe the solution you'd like**
Two new mac-source methods (query OS neighbor cache, neighbor discovery) are to be implemented.
```plaintext
"mac-sources": [ "neigh-cache", "neigh-discovery" ]
```
**Describe alternatives you've considered** At this time, there is no practical alternative.
**Funding its development** No funding.
**Participating in development** I am planning to write the code (though with no experience with Kea developement).
**Contacting you** ... E-mail in my profile.backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/3197tftp-server-name (option 66) and boot-file-name (option 67)2024-01-11T14:56:42ZGavin McKeetftp-server-name (option 66) and boot-file-name (option 67)Hi,
Kea DHCPv4 server version 2.5.4
I am trying to provide a list of tftp servers and boot file names according to the ZTP requirements of MLXOS (Nvidia Infiniband switches)
https://docs.nvidia.com/networking/display/mlnxosv3111014/ge...Hi,
Kea DHCPv4 server version 2.5.4
I am trying to provide a list of tftp servers and boot file names according to the ZTP requirements of MLXOS (Nvidia Infiniband switches)
https://docs.nvidia.com/networking/display/mlnxosv3111014/getting+started#src-138809553_GettingStarted-RunningDHCP-ZTP
They state, that I must provide options in the following format.
```
option tftp-server-name "<image server url>, <config server url>, <docker container server url>";
option bootfile-name "<image file>, <config file>, <docker container file>";
```
When I define the Option config as follows
```
"option-data": [
{
// For each IPv4 subnet you most likely need to specify at
// least one router.
"name": "routers",
"data": "172.25.40.1"
},
{
"name": "domain-name-servers",
"data": "8.8.8.8"
},
{
"name": "cumulus-provision-url",
"data": "http://172.25.43.23:8080/scripts/nvue-ztp.py"
},
{
"name": "tftp-server-name",
"csv-format": true,
"data": "http://172.25.43.23:8080/mlxos,http://172.25.43.23:8080/configs/ib/,",
"space": "dhcp4"
},
{
"name": "boot-file-name",
"csv-format": true,
"data": "image-X86_64-3.11.1014.img,ib-config.conf,",
"space": "dhcp4"
}
]#
```
I only ever see the following offer on the wire, i.e the first URL and first file name.
![image](/uploads/1d85bf46828cc9fdcc58d3215ede969b/image.png)
I've exhasuitvely to override the Option definition, trying with type=record and record-types="string,string,string" nothing I do works.
Can someone advise if this is a bug? Or if there is a way to do this in Kea.backloghttps://gitlab.isc.org/isc-projects/stork/-/issues/1268Filter machines by port2024-01-02T14:23:35ZSlawek FigielFilter machines by portThe machine lists can be filtered by address but not by port.
![image](/uploads/f64b2c0b5572d22a2360d31236a8897c/image.png)
![image](/uploads/3ad9e1629d7ffec7db1e6a184a2a9637/image.png)The machine lists can be filtered by address but not by port.
![image](/uploads/f64b2c0b5572d22a2360d31236a8897c/image.png)
![image](/uploads/3ad9e1629d7ffec7db1e6a184a2a9637/image.png)backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/3192Allow `perfdhcp` to behave like an endpoint client2024-01-11T14:52:45ZChrisPortmanAllow `perfdhcp` to behave like an endpoint client---
name: perfdhcp DHCPv4 not as a relay
about: Support for perfdchp DHCPv4 Operation as a normal client (not relay)
---
**Is your feature request related to a problem? Please describe.**
I would like to be able to use perfdhcp to test...---
name: perfdhcp DHCPv4 not as a relay
about: Support for perfdchp DHCPv4 Operation as a normal client (not relay)
---
**Is your feature request related to a problem? Please describe.**
I would like to be able to use perfdhcp to test a dhcp implementation including the ability to process DORA over broadcast.
**Describe the solution you'd like**
An option that enabled perfdhcp to act as an end client as opposed to a relay, which means using broadcast traffic, not setting
giaddr and binding to port 68 and not 67.
**Additional context**
I'm specifically trying to tests a DHCP application on the same host. This means that the dhcp process binds on 67 and the current behaviour of perfdhcp is to also bind on 67 which fails. If perfdhcp can function as a normal client, it can use 68.
**Funding its development**
Unfortunately no, but see next section
**Participating in development**
I have a patch ready to submit via a MR once I can get permission to fork.
**Contacting you**
Please reach out via github. I can provide email via a direct message if required.backloghttps://gitlab.isc.org/isc-projects/stork/-/issues/1250Syncing a new hook directory fails when running from tarball2023-12-19T14:43:29ZSlawek FigielSyncing a new hook directory fails when running from tarballThe issue was found by @andrei during 1.14 sanity checks: https://gitlab.isc.org/isc-projects/stork/-/issues/1240#note_421415
* If I do `rake hook:init MODULE=stork-server-ldap`, it initializes the git module correctly relative to the t...The issue was found by @andrei during 1.14 sanity checks: https://gitlab.isc.org/isc-projects/stork/-/issues/1240#note_421415
* If I do `rake hook:init MODULE=stork-server-ldap`, it initializes the git module correctly relative to the tarball content. However, if I do `rake hook:sync`, because the tarball is not a git repo, it goes all the way to the nearest parent git repository, and does some syncing there. I happen to have my home directory set up as a git repo, so I ended up with having some of my modules there modified. The task could instead check if there is a `.git` directory created at the same level as `Rakefile` first to determine if it is a tarball or a git repo. I also understand that this is not a task that you usually run on a tarball.
```
modified: .config/awesome/lain (new commits, modified content)
modified: .zprezto (modified content)
```backloghttps://gitlab.isc.org/isc-projects/stork/-/issues/1249Problem installing danger on operating system with non-US locale2023-12-19T14:42:10ZSlawek FigielProblem installing danger on operating system with non-US localeThe issue was found by @andrei during 1.14 sanity checks: https://gitlab.isc.org/isc-projects/stork/-/issues/1240#note_421412
* I could not run system tests. I get this error on `rake systemtest`. Not sure what is wrong. Sounds like an ...The issue was found by @andrei during 1.14 sanity checks: https://gitlab.isc.org/isc-projects/stork/-/issues/1240#note_421412
* I could not run system tests. I get this error on `rake systemtest`. Not sure what is wrong. Sounds like an encoding could be enforced somewhere.
```
143.7 Bundler version 2.3.26
143.7 /app/tools/ruby/bin/bundle install --gemfile /app/rakelib/init_deps/danger/Gemfile --path /app/tools/ruby --binstubs /app/tools/ruby/bin_bundle
143.7 Preparing: /app/tools/ruby/bin_bundle/danger...
143.7 mkdir -p /app/tools/ruby/bin_bundle
143.9 /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/yaml_serializer.rb:54:in `split': invalid byte sequence in US-ASCII (ArgumentError)
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/yaml_serializer.rb:54:in `load'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/settings.rb:459:in `block in load_config'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/shared_helpers.rb:103:in `filesystem_access'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/settings.rb:455:in `load_config'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/settings.rb:91:in `initialize'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler.rb:342:in `new'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler.rb:342:in `settings'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/env.rb:20:in `report'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/friendly_errors.rb:74:in `request_issue_report_for'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/friendly_errors.rb:53:in `log_error'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/friendly_errors.rb:126:in `rescue in with_friendly_errors'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/friendly_errors.rb:118:in `with_friendly_errors'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/exe/bundle:36:in `<top (required)>'
143.9 from /app/tools/ruby/bin/bundle:25:in `load'
143.9 from /app/tools/ruby/bin/bundle:25:in `<main>'
143.9 /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/yaml_serializer.rb:54:in `split': invalid byte sequence in US-ASCII (ArgumentError)
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/yaml_serializer.rb:54:in `load'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/settings.rb:459:in `block in load_config'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/shared_helpers.rb:103:in `filesystem_access'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/settings.rb:455:in `load_config'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/settings.rb:91:in `initialize'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler.rb:342:in `new'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler.rb:342:in `settings'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/cli.rb:66:in `initialize'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/vendor/thor/lib/thor.rb:388:in `new'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/vendor/thor/lib/thor.rb:388:in `dispatch'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/cli.rb:31:in `dispatch'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/cli.rb:25:in `start'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/exe/bundle:48:in `block in <top (required)>'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/lib/bundler/friendly_errors.rb:120:in `with_friendly_errors'
143.9 from /app/tools/ruby/gems/bundler-2.3.26/exe/bundle:36:in `<top (required)>'
143.9 from /app/tools/ruby/bin/bundle:25:in `load'
143.9 from /app/tools/ruby/bin/bundle:25:in `<main>'
143.9 rake aborted!
143.9 Command failed with status (1): [/app/tools/ruby/bin/bundle install --gemfi...]
143.9 /app/rakelib/00_init.rake:795:in `block in <top (required)>'
143.9 /app/rakelib/00_init.rake:133:in `block in find_and_prepare_deps'
143.9 /app/rakelib/00_init.rake:115:in `each'
143.9 /app/rakelib/00_init.rake:115:in `find_and_prepare_deps'
143.9 /app/rakelib/00_init.rake:1113:in `block in <top (required)>'
143.9 Tasks: TOP => /app/tools/ruby/bin_bundle/danger
143.9 (See full trace by running task with --trace)
```backloghttps://gitlab.isc.org/isc-projects/stork/-/issues/1247DB password prompt hangs out on Ctrl-C2023-12-19T14:40:48ZSlawek FigielDB password prompt hangs out on Ctrl-CThe issue was found by @piotrek during [1.14 sanity checks](https://gitlab.isc.org/isc-projects/stork/-/issues/1240#note_421388).
Other thing observed is, interrupting `rake` task with `Ctrl+C` when it asks for some password, breaks the...The issue was found by @piotrek during [1.14 sanity checks](https://gitlab.isc.org/isc-projects/stork/-/issues/1240#note_421388).
Other thing observed is, interrupting `rake` task with `Ctrl+C` when it asks for some password, breaks the terminal behavior afterwards. Terminal still waits for password and you can't type nor use the terminal in a normal way. This is not the case when you use e.g. `psql` and use `Ctrl+C` when it asks for password. You get back to normal operation of your terminal afterwards, which is expected.backloghttps://gitlab.isc.org/isc-projects/stork/-/issues/1245Deprecation warning in mockery2023-12-19T14:37:31ZSlawek FigielDeprecation warning in mockeryThe issue was found by @piotrek during [1.14 sanity checks](https://gitlab.isc.org/isc-projects/stork/-/issues/1240#note_421364).
```shell
$ rake unittest:backend
WRN DEPRECATION: use of the packages config will be the only way to gener...The issue was found by @piotrek during [1.14 sanity checks](https://gitlab.isc.org/isc-projects/stork/-/issues/1240#note_421364).
```shell
$ rake unittest:backend
WRN DEPRECATION: use of the packages config will be the only way to generate mocks in v3. Please migrate your config to use the packages feature. dry-run=false migration=https://vektra.github.io/mockery/v2.34/migrating_to_packages/ url=https://vektra.github.io/mockery/v2.34/features/#packages-configuration version=v2.34.0
```backloghttps://gitlab.isc.org/isc-projects/stork/-/issues/1235Improve documentation of Stork API (SwaggerUI)2023-12-05T14:55:44ZDarren AnkneyImprove documentation of Stork API (SwaggerUI)There is documentation of the Stork API in the Stork UI under "Help -> Stork API Docs (SwaggerUI)". This documentation is really good, especially the "try it out" functionality. Unfortunately, the "try it out" seems to always work no m...There is documentation of the Stork API in the Stork UI under "Help -> Stork API Docs (SwaggerUI)". This documentation is really good, especially the "try it out" functionality. Unfortunately, the "try it out" seems to always work no matter if you have set things properly by clicking the Lock icon, or made a mistake there. Therefore, it is somewhat difficult to figure out the actual process to come up with the session key to use during the API calls. I propose to resolve this by adding a simple example with accompanying short instruction so that it is more obvious how to use the API. It is really easy once you understand this step!
<details><summary>Example</summary>
```
$ curl -v -X 'POST' 'http://192.168.20.10:8080/api/sessions' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{"authenticationMethodId": "internal", "identifier": "admin", "secret": "admin"}' | jq
Note: Unnecessary use of -X or --request, POST is already inferred.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 192.168.20.10:8080...
* Connected to 192.168.20.10 (192.168.20.10) port 8080 (#0)
> POST /api/sessions HTTP/1.1
> Host: 192.168.20.10:8080
> User-Agent: curl/7.88.1
> accept: application/json
> Content-Type: application/json
> Content-Length: 80
>
} [80 bytes data]
< HTTP/1.1 200 OK
< Cache-Control: no-cache="Set-Cookie"
< Content-Type: application/json
< Set-Cookie: session=L0cdSK9h6l_Cm4UY7D-Fsw_HWPmkYN0HwfnB5oNlI5U; Path=/; Expires=Thu, 30 Nov 2023 12:17:18 GMT; Max-Age=86400; HttpOnly; SameSite=Lax
< Vary: Cookie
< Date: Wed, 29 Nov 2023 12:17:17 GMT
< Content-Length: 108
<
{ [108 bytes data]
100 188 100 108 100 80 12253 9076 --:--:-- --:--:-- --:--:-- 23500
* Connection #0 to host 192.168.20.10 left intact
{
"authenticationMethodId": "internal",
"groups": [
1
],
"id": 1,
"lastname": "admin",
"login": "admin",
"name": "admin"
}
$ curl -v -X 'GET' 'http://192.168.20.10:8080/api/shared-networks' -H 'accept: application/json' -H 'Cookie: session=L0cdSK9h6l_Cm4UY7D-Fsw_HWPmkYN0HwfnB5oNlI5U' | jq
Note: Unnecessary use of -X or --request, GET is already inferred.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 192.168.20.10:8080...
* Connected to 192.168.20.10 (192.168.20.10) port 8080 (#0)
> GET /api/shared-networks HTTP/1.1
> Host: 192.168.20.10:8080
> User-Agent: curl/7.88.1
> accept: application/json
> Cookie: session=L0cdSK9h6l_Cm4UY7D-Fsw_HWPmkYN0HwfnB5oNlI5U
>
< HTTP/1.1 200 OK
< Content-Type: application/json
< Vary: Cookie
< Date: Wed, 29 Nov 2023 12:17:38 GMT
< Content-Length: 15
<
{ [15 bytes data]
100 15 100 15 0 0 6407 0 --:--:-- --:--:-- --:--:-- 7500
* Connection #0 to host 192.168.20.10 left intact
{
"items": null
}
```
</details>
<details><summary>Instructions based on the example</summary>
- First a login must be performed: `$ curl -v -X 'POST' 'http://192.168.20.10:8080/api/sessions' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{"authenticationMethodId": "internal", "identifier": "admin", "secret": "admin"}'` The `"identifier": "admin"` and `"secret": "admin"` should match a username and password that can log into the Stork UI.
- The return, if authentication is successful, will contain (in the header) something like this: `< Set-Cookie: session=L0cdSK9h6l_Cm4UY7D-Fsw_HWPmkYN0HwfnB5oNlI5U; Path=/; Expires=Thu, 30 Nov 2023 12:17:18 GMT; Max-Age=86400; HttpOnly; SameSite=Lax`
- Subsequent calls, for the next 24 hours, must include: `session=L0cdSK9h6l_Cm4UY7D-Fsw_HWPmkYN0HwfnB5oNlI5U` as shown here: `$ curl -v -X 'GET' 'http://192.168.20.10:8080/api/shared-networks' -H 'accept: application/json' -H 'Cookie: session=L0cdSK9h6l_Cm4UY7D-Fsw_HWPmkYN0HwfnB5oNlI5U'`
</details>
Of course, the above is only a suggestion. There may be better examples and subsequent instructions, and/or a more dynamic way that could include data from the local StorkUI the user is actually using, which would be even easier to understand.backloghttps://gitlab.isc.org/isc-projects/kea/-/issues/3164RFC3442 support case when client requests the Classless Static Routes option ...2023-11-23T15:00:13ZPiotrek ZadrogaRFC3442 support case when client requests the Classless Static Routes option and also requests either or both of the Router option and the Static Routes optionAs per RFC3442:
```
DHCP Server Administrator Responsibilities
Many clients may not implement the Classless Static Routes option.
DHCP server administrators should therefore configure their DHCP
servers to send both a Router o...As per RFC3442:
```
DHCP Server Administrator Responsibilities
Many clients may not implement the Classless Static Routes option.
DHCP server administrators should therefore configure their DHCP
servers to send both a Router option and a Classless Static Routes
option, and should specify the default router(s) both in the Router
option and in the Classless Static Routes option.
When a DHCP client requests the Classless Static Routes option and
also requests either or both of the Router option and the Static
Routes option, and the DHCP server is sending Classless Static Routes
options to that client, the server SHOULD NOT include the Router or
Static Routes options.
```
This should be discussed if Kea should follow this once support of Classless Static Routes is implemented.
Source: https://gitlab.isc.org/isc-projects/kea/-/merge_requests/2135#note_414489backlog