glpi icon indicating copy to clipboard operation
glpi copied to clipboard

Aggregated switch ports are not imported correctly

Open blackbasket opened this issue 1 year ago • 21 comments

Code of Conduct

  • [X] I agree to follow this project's Code of Conduct

Is there an existing issue for this?

  • [X] I have searched the existing issues

Version

10.0.14

Bug description

Hi...

I try to inventory HP switches using Network Inventory with GLPI agent 1.8. After the help of @g-bougard I was able to import the inventoried ports... But the aggregated ports are imported as "NetworkPortEthernet" an not as "aggregated ports"... therefore I cannot assign the physical ports to the aggregated one...

reference: https://github.com/glpi-project/glpi-agent/issues/683

xml sample:

          <AGGREGATE>
            <PORT>13</PORT>
            <PORT>14</PORT>
          </AGGREGATE>
          <IFDESCR>Trk2</IFDESCR>
          <IFINERRORS>11491</IFINERRORS>
          <IFINOCTETS>3470389977</IFINOCTETS>
          <IFINTERNALSTATUS>1</IFINTERNALSTATUS>
          <IFLASTCHANGE>231 days, 13:32:14.60</IFLASTCHANGE>
          <IFMTU>1500</IFMTU>
          <IFNAME>Trk2</IFNAME>
          <IFNUMBER>50</IFNUMBER>
          <IFOUTERRORS>0</IFOUTERRORS>
          <IFOUTOCTETS>2228991958</IFOUTOCTETS>
          <IFSPEED>20000000</IFSPEED>
          <IFSTATUS>1</IFSTATUS>
          <IFTYPE>161</IFTYPE>
          <MAC>b4:39:d6:8b:5c:00</MAC>
          <VLANS>
            <VLAN>
              <NAME>Server</NAME>
              <NUMBER>150</NUMBER>
              <TAGGED>0</TAGGED>
            </VLAN>
            <VLAN>
              <NAME>Lebensnah</NAME>
              <NUMBER>160</NUMBER>
              <TAGGED>1</TAGGED>
            </VLAN>
            <VLAN>
              <NAME>DMZ</NAME>
              <NUMBER>333</NUMBER>
              <TAGGED>1</TAGGED>
            </VLAN>
            <VLAN>
              <NAME>Videoueberwa</NAME>
              <NUMBER>777</NUMBER>
              <TAGGED>1</TAGGED>
            </VLAN>
          </VLANS>
        </PORT>

network port types: image

switch network ports: image

If I can provide any more helpful information, please let me know...

Regards, Marcel

Relevant log output

No response

Page URL

No response

Steps To reproduce

No response

Your GLPI setup information

Information about system installation & configuration
GLPI 10.0.14 ( => /var/www/glpi)
Installation mode: TARBALL
Current language:en_US

Server
 
Operating system: Linux glpi01 6.1.0-21-amd64 #​1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64
PHP 8.2.18 apache2handler (Core, FFI, PDO, Phar, Reflection, SPL, SimpleXML, Zend OPcache, apache2handler, bz2, calendar, ctype,
curl, date, dom, exif, fileinfo, filter, ftp, gd, gettext, hash, iconv, intl, json, ldap, libxml, mbstring, mysqli, mysqlnd,
openssl, pcre, pdo_mysql, posix, random, readline, session, shmop, soap, sockets, sodium, standard, sysvmsg, sysvsem, sysvshm,
tokenizer, xml, xmlreader, xmlwriter, xsl, zip, zlib)
Setup: max_execution_time="500" memory_limit="512M" post_max_size="8M" safe_mode="" session.save_handler="files"
upload_max_filesize="16M" disable_functions=""
Software: Apache/2.4.59 (Debian) (Apache/2.4.59 (Debian) Server at glpi01 Port 80
)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0
Server Software: Debian 12
Server Version: 10.11.6-MariaDB-0+deb12u1
Server SQL Mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Parameters: glpi@localhost/glpidb
Host info: Localhost via UNIX socket

PHP version (8.2.18) is supported. Sessions configuration is OK. Allocated memory is sufficient. mysqli extension is installed. Following extensions are installed: dom, fileinfo, filter, libxml, json, simplexml, xmlreader, xmlwriter. curl extension is installed. gd extension is installed. intl extension is installed. zlib extension is installed. The constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES is present. Database engine version (10.11.6) is supported. No files from previous GLPI version detected. The log file has been created successfully. Write access to /var/www/glpi/files/_cache has been validated. Write access to /var/www/glpi/files/_cron has been validated. Write access to /var/www/glpi/files has been validated. Write access to /var/www/glpi/files/_dumps has been validated. Write access to /var/www/glpi/files/_graphs has been validated. Write access to /var/www/glpi/files/_lock has been validated. Write access to /var/www/glpi/files/_pictures has been validated. Write access to /var/www/glpi/files/_plugins has been validated. Write access to /var/www/glpi/files/_rss has been validated. Write access to /var/www/glpi/files/_sessions has been validated. Write access to /var/www/glpi/files/_tmp has been validated. Write access to /var/www/glpi/files/_uploads has been validated.

Web server root directory configuration seems safe. Sessions configuration is secured. OS and PHP are relying on 64 bits integers. exif extension is installed. ldap extension is installed. openssl extension is installed. Following extensions are installed: bz2, Phar, zip. Zend OPcache extension is installed. Following extensions are installed: ctype, iconv, mbstring, sodium. Write access to /var/www/glpi/marketplace has been validated. Timezones seems loaded in database.

GLPI constants
 
GLPI_ROOT: "/var/www/glpi"
GLPI_CONFIG_DIR: "/var/www/glpi/config"
GLPI_VAR_DIR: "/var/www/glpi/files"
GLPI_MARKETPLACE_DIR: "/var/www/glpi/marketplace"
GLPI_USE_CSRF_CHECK: "1"
GLPI_CSRF_EXPIRES: "7200"
GLPI_CSRF_MAX_TOKENS: "100"
GLPI_USE_IDOR_CHECK: "1"
GLPI_IDOR_EXPIRES: "7200"
GLPI_ALLOW_IFRAME_IN_RICH_TEXT: false
GLPI_SERVERSIDE_URL_ALLOWLIST: ["/^(https?|feed):\/\/[^@:]+(\/.*)?$/"]
GLPI_TELEMETRY_URI: "https://telemetry.glpi-project.org"
GLPI_INSTALL_MODE: "TARBALL"
GLPI_NETWORK_MAIL: "[email protected]"
GLPI_NETWORK_SERVICES: "https://services.glpi-network.com"
GLPI_MARKETPLACE_ALLOW_OVERRIDE: true
GLPI_MARKETPLACE_MANUAL_DOWNLOADS: true
GLPI_USER_AGENT_EXTRA_COMMENTS: ""
GLPI_DISABLE_ONLY_FULL_GROUP_BY_SQL_MODE: "1"
GLPI_AJAX_DASHBOARD: "1"
GLPI_CALDAV_IMPORT_STATE: 0
GLPI_DEMO_MODE: "0"
GLPI_CENTRAL_WARNINGS: "1"
GLPI_TEXT_MAXSIZE: "4000"
GLPI_DOC_DIR: "/var/www/glpi/files"
GLPI_CACHE_DIR: "/var/www/glpi/files/_cache"
GLPI_CRON_DIR: "/var/www/glpi/files/_cron"
GLPI_DUMP_DIR: "/var/www/glpi/files/_dumps"
GLPI_GRAPH_DIR: "/var/www/glpi/files/_graphs"
GLPI_LOCAL_I18N_DIR: "/var/www/glpi/files/_locales"
GLPI_LOCK_DIR: "/var/www/glpi/files/_lock"
GLPI_LOG_DIR: "/var/www/glpi/files/_log"
GLPI_PICTURE_DIR: "/var/www/glpi/files/_pictures"
GLPI_PLUGIN_DOC_DIR: "/var/www/glpi/files/_plugins"
GLPI_RSS_DIR: "/var/www/glpi/files/_rss"
GLPI_SESSION_DIR: "/var/www/glpi/files/_sessions"
GLPI_TMP_DIR: "/var/www/glpi/files/_tmp"
GLPI_UPLOAD_DIR: "/var/www/glpi/files/_uploads"
GLPI_INVENTORY_DIR: "/var/www/glpi/files/_inventories"
GLPI_NETWORK_REGISTRATION_API_URL: "https://services.glpi-network.com/api/registration/"
GLPI_MARKETPLACE_PLUGINS_API_URI: "https://services.glpi-network.com/api/marketplace/"
GLPI_I18N_DIR: "/var/www/glpi/locales"
GLPI_VERSION: "10.0.14"
GLPI_SCHEMA_VERSION: "10.0.14@8f13530f7cf0fb07add30ae20013f0374956795b"
GLPI_MARKETPLACE_PRERELEASES: false
GLPI_MIN_PHP: "7.4.0"
GLPI_MAX_PHP: "8.4.0"
GLPI_YEAR: "2024"

Libraries
 
htmlawed/htmlawed version 1.2.14 in (/var/www/glpi/vendor/htmlawed/htmlawed)
phpmailer/phpmailer version 6.8.0 in (/var/www/glpi/vendor/phpmailer/phpmailer/src)
simplepie/simplepie version 1.5.8 in (/var/www/glpi/vendor/simplepie/simplepie/library)
tecnickcom/tcpdf version 6.4.4 in (/var/www/glpi/marketplace/pdf/vendor/tecnickcom/tcpdf)
michelf/php-markdown in (/var/www/glpi/vendor/michelf/php-markdown/Michelf)
true/punycode in (/var/www/glpi/vendor/true/punycode/src)
iamcal/lib_autolink in (/var/www/glpi/vendor/iamcal/lib_autolink)
sabre/dav in (/var/www/glpi/vendor/sabre/dav/lib/DAV)
sabre/http in (/var/www/glpi/vendor/sabre/http/lib)
sabre/uri in (/var/www/glpi/vendor/sabre/uri/lib)
sabre/vobject in (/var/www/glpi/vendor/sabre/vobject/lib)
laminas/laminas-i18n in (/var/www/glpi/vendor/laminas/laminas-i18n/src)
laminas/laminas-servicemanager in (/var/www/glpi/vendor/laminas/laminas-servicemanager/src)
monolog/monolog in (/var/www/glpi/vendor/monolog/monolog/src/Monolog)
sebastian/diff in (/var/www/glpi/vendor/sebastian/diff/src)
donatj/phpuseragentparser in (/var/www/glpi/vendor/donatj/phpuseragentparser/src/UserAgent)
elvanto/litemoji in (/var/www/glpi/vendor/elvanto/litemoji/src)
symfony/console in (/var/www/glpi/vendor/symfony/console)
scssphp/scssphp in (/var/www/glpi/vendor/scssphp/scssphp/src)
laminas/laminas-mail in (/var/www/glpi/vendor/laminas/laminas-mail/src/Protocol)
laminas/laminas-mime in (/var/www/glpi/vendor/laminas/laminas-mime/src)
rlanvin/php-rrule in (/var/www/glpi/vendor/rlanvin/php-rrule/src)
ramsey/uuid in (/var/www/glpi/vendor/ramsey/uuid/src)
psr/log in (/var/www/glpi/vendor/psr/log/Psr/Log)
psr/simple-cache in (/var/www/glpi/vendor/psr/simple-cache/src)
psr/cache in (/var/www/glpi/vendor/psr/cache/src)
league/csv in (/var/www/glpi/vendor/league/csv/src)
mexitek/phpcolors in (/var/www/glpi/vendor/mexitek/phpcolors/src/Mexitek/PHPColors)
guzzlehttp/guzzle in (/var/www/glpi/vendor/guzzlehttp/guzzle/src)
guzzlehttp/psr7 in (/var/www/glpi/vendor/guzzlehttp/psr7/src)
glpi-project/inventory_format in (/var/www/glpi/vendor/glpi-project/inventory_format/lib/php)
wapmorgan/unified-archive in (/var/www/glpi/vendor/wapmorgan/unified-archive/src)
paragonie/sodium_compat in (/var/www/glpi/vendor/paragonie/sodium_compat/src)
symfony/cache in (/var/www/glpi/vendor/symfony/cache)
html2text/html2text in (/var/www/glpi/vendor/html2text/html2text/src)
symfony/css-selector in (/var/www/glpi/vendor/symfony/css-selector)
symfony/dom-crawler in (/var/www/glpi/vendor/symfony/dom-crawler)
twig/twig in (/var/www/glpi/vendor/twig/twig/src)
twig/string-extra in (/var/www/glpi/vendor/twig/string-extra)
symfony/polyfill-ctype not found
symfony/polyfill-iconv not found
symfony/polyfill-mbstring not found
symfony/polyfill-php80 not found
symfony/polyfill-php81 not found
symfony/polyfill-php82 in (/var/www/glpi/vendor/symfony/polyfill-php82)
league/oauth2-client in (/var/www/glpi/vendor/league/oauth2-client/src/Provider)
league/oauth2-google in (/var/www/glpi/vendor/league/oauth2-google/src/Provider)
thenetworg/oauth2-azure in (/var/www/glpi/vendor/thenetworg/oauth2-azure/src/Provider)

SQL replicas
 
Not active

Notifications
 
Way of sending emails: PHP

Plugins list
 
archisw              Name: Apps structures                Version: 3.0.18     State: Enabled
Install Method: Marketplace barcode Name: Barcode Version: 2.7.1 State: Installed / not activated
Install Method: Marketplace archibp Name: Business Processes Version: 2.0.8 State: Installed / not activated
Install Method: Marketplace cmdb Name: CMDB Version: 3.0.3 State: Installed / not activated
Install Method: Marketplace connections Name: Connections Version: 10.0.0 State: Enabled
Install Method: Marketplace archidata Name: Data structures Version: 1.0.14 State: Enabled
Install Method: Marketplace databaseinventory Name: Database Inventory Version: 1.0.0 State: Installed / not activated
Install Method: Marketplace dataflows Name: Dataflows Version: 3.0.9 State: Installed / not activated
Install Method: Marketplace manageentities Name: Entities portal Version: 4.0.3 State: Not installed
Install Method: Marketplace glpiinventory Name: GLPI Inventory Version: 1.3.5 State: Enabled
Install Method: Marketplace geninventorynumber Name: Inventarnummern generieren Version: 2.8.4 State: To update
Install Method: Marketplace addressing Name: IP Adressierung Version: 3.0.2 State: Enabled
Install Method: Marketplace uninstall Name: Item's Lifecycle (uninstall) Version: 2.9.1 State: Enabled
Install Method: Marketplace accounts Name: Konten Version: 3.0.4 State: Enabled
Install Method: Marketplace pdf Name: PDF-Ausgabe Version: 3.0.0 State: Enabled
Install Method: Marketplace badges Name: Plaketten Version: 3.0.0 State: Enabled
Install Method: Marketplace statecheck Name: Statecheck Rules Version: 2.4.3 State: Enabled
Install Method: Marketplace treeview Name: Treeview Version: 1.10.2 State: Enabled
Install Method: Marketplace typology Name: Typologien Version: 3.0.0 State: Installed / not activated
Install Method: Marketplace webhook Name: Webhooks Version: 1.0.18 State: Enabled
Install Method: Marketplace

Anything else?

No response

blackbasket avatar May 29 '24 14:05 blackbasket

If I update the instantation_type in DB it looks good. Unfortunately only until the next inventory...

In some way it is recognized as aggregated port. In the DB the "source ports" are connected correctly. They are just not shown in WebUI because of the wrong overwritten instantation type...

blackbasket avatar Jun 03 '24 08:06 blackbasket

HI @blackbasket

improvements have been made to the management of instantiation types in the main branch.

https://github.com/glpi-project/glpi/pull/16563

I don't know if this will solve your problem, but can you test with this version (on a test environment)?

https://nightly.glpi-project.org/glpi/ (choose main version)

stonebuzz avatar Jun 06 '24 06:06 stonebuzz

@stonebuzz The PR your are mentioning seems to be already present in GLPI 10.0.13.

cedric-anne avatar Jun 06 '24 07:06 cedric-anne

yes, you're right (sorry) can you provide us with the inventory file for local testing?

stonebuzz avatar Jun 06 '24 08:06 stonebuzz

Hi @stonebuzz

I only have access through iOS app for now... you may find the xml here: https://github.com/glpi-project/glpi-agent/issues/683#issuecomment-2136700618

blackbasket avatar Jun 06 '24 09:06 blackbasket

After authorizing port import with iftype = 161 (1)

Have you defined the instantiation type? (2)

image

If I set it to NetworkPortAggregate

Import works correctly

image

stonebuzz avatar Jun 06 '24 11:06 stonebuzz

That's what I did... as said previously, I can find the ports in the DB as aggregated ports including the hardware ports... if I change the "Ethernet" port to aggregate in the DB, all is right until next inventory... it gets overwritten then...

image image

blackbasket avatar Jun 06 '24 13:06 blackbasket

jsut go here

image

then search network port type with decimal = 161

image

update it to set instantiation type to NetworkPortAggregate (be sure import is set to Yes)

image

Then run an inventory and network port will by updated

stonebuzz avatar Jun 06 '24 13:06 stonebuzz

But that is what I have done already... sorry, the screenshots came some minutes later...

blackbasket avatar Jun 06 '24 13:06 blackbasket

changes made in the database may have altered the data

NetworkPortaggregate INSTANTIATION type will fill another table

Can you delete / purge the equipment and then run inventory again?

stonebuzz avatar Jun 06 '24 13:06 stonebuzz

Can you delete / purge the equipment and then run inventory again?

I will try...

but the ports were not added before I activated the port type in discussion... and I set Aggregation Port the same time...

blackbasket avatar Jun 06 '24 13:06 blackbasket

We see the following in GLPI 10.0.15 (there is an LACP configured Linux machine connected on port-channel47 and an LACP configured Windows machine connected on port-channel46). The connections are split over two identical switches.

But we also appear to be missing a column or am I missing something?

Switch 1 Screenshot 2024-06-07 at 17 41 03

Switch 2 Screenshot 2024-06-07 at 18 11 06

GuidoWilden avatar Jun 07 '24 16:06 GuidoWilden

@stonebuzz

Deleting the device did not help... IDs of the Ports are new, but Port types remain wrong... image

@GuidoWilden

The column network port types is missing... you may add it using the tools icon next to network ports on the top of the list...

blackbasket avatar Jun 07 '24 17:06 blackbasket

Thank you @blackbasket, could add that column successfully.

@stonebuzz @cedric-anne let us know if there is anything else we can provide.

GuidoWilden avatar Jun 07 '24 18:06 GuidoWilden

hi @stonebuzz @cedric-anne

just to make it more clear... if I look into the database, the port is defined as instantation_type = NetworkPortEthernet but in the aggregates-table it is defnied as aggregate with the corresponding ports...

MariaDB [glpidb]> select * from glpi_networkports where id=1699;
+------+----------+------------------+-------------+--------------+----------------+------+---------------------+-------------------+---------+------------+------------+---------------------+---------------------+-------+------------+------------------+--------------------+-----------------------+------------+------------+------------+-------------+----------+---------+---------+------------+-------+--------+
| id   | items_id | itemtype         | entities_id | is_recursive | logical_number | name | instantiation_type  | mac               | comment | is_deleted | is_dynamic | date_mod            | date_creation       | ifmtu | ifspeed    | ifinternalstatus |
ifconnectionstatus | iflastchange          | ifinbytes  | ifinerrors | ifoutbytes | ifouterrors | ifstatus | ifdescr | ifalias | portduplex | trunk | lastup |
+------+----------+------------------+-------------+--------------+----------------+------+---------------------+-------------------+---------+------------+------------+---------------------+---------------------+-------+------------+------------------+--------------------+-----------------------+------------+------------+------------+-------------+----------+---------+---------+------------+-------+--------+
| 1699 |       46 | NetworkEquipment |           5 |            0 |             53 | Trk5 | NetworkPortEthernet | b4:39:d6:8b:5c:00 | NULL    |          0 |          1 | 2024-06-10 02:52:03 | 2024-06-06 16:58:22 |  1500 | 2000000000 | 1                |
                 0 | 266 days, 04:57:23.62 | 2274672300 |          2 | 2695243352 |           0 | 1        | Trk5    | NULL    | NULL       |     0 | NULL   |
+------+----------+------------------+-------------+--------------+----------------+------+---------------------+-------------------+---------+------------+------------+---------------------+---------------------+-------+------------+------------------+--------------------+-----------------------+------------+------------+------------+-------------+----------+---------+---------+------------+-------+--------+
1 row in set (0.000 sec)

MariaDB [glpidb]> select * from glpi_networkportaggregates;
+----+-----------------+----------------------+---------------------+---------------------+
| id | networkports_id | networkports_id_list | date_mod            | date_creation       |
+----+-----------------+----------------------+---------------------+---------------------+
| 13 |            1664 | [1651,1652]          | 2024-06-06 16:58:22 | 2024-06-06 16:58:22 |
| 14 |            1665 | [1649,1650]          | 2024-06-06 16:58:22 | 2024-06-06 16:58:22 |
| 15 |            1666 | [1653,1654]          | 2024-06-06 16:58:22 | 2024-06-06 16:58:22 |
| 16 |            1699 | [1646,1645]          | 2024-06-06 16:58:22 | 2024-06-06 16:58:22 |
+----+-----------------+----------------------+---------------------+---------------------+
4 rows in set (0.000 sec)

only trunk 4 is missing completly... because of this (I think) the ports 7 and 8 are not even marked as part of an aggregated port... grafik

blackbasket avatar Jun 10 '24 11:06 blackbasket

@stonebuzz @cedric-anne any news on this subject? Is there anything else we can provide to help narrow this down?

GuidoWilden avatar Jun 14 '24 11:06 GuidoWilden

I did the import using the xml file now. This worked also for me. So, it must have to do with the import function...

blackbasket avatar Jun 17 '24 10:06 blackbasket

Wait, so you generated the xml on command line and then imported via Inventory > Import from file?

GuidoWilden avatar Jun 17 '24 10:06 GuidoWilden

exactly... but I realize that something is wrong anyway... now all Ports are connected to the same "virtual hub"... that was right before... of course not all devices are connected to all trunks ;)

grafik

blackbasket avatar Jun 17 '24 10:06 blackbasket

well, everything it might be the result of the update to 10.0.15 thsi morning... if I run the tasks now, everything is correct... ports are shown as aggregates and "hubs" are correct as well... maybe @cedric-anne had a point and it just was not merged in 10.0.13 and 10.0.14...

remains the question, how to handle the hubs... maybe not a question for the ticket, but I just ask... for every port with mininum two connected item (i.e. MAC addresses or devices with management and ethernet port) a "hub" is created in unmanaged devices... furthermore a "hub link" without any information but the connected trunk itself is created as network port... how should I understand this and work with it? maybe I am just stupid, but I do not understand...

blackbasket avatar Jun 17 '24 12:06 blackbasket

I have very much the same issue. Everything that is not a standard network port gets thrown into a bit of a mess in the interface. Saying that, I would not know how to do this either but it seems to me that there need to be more varied definitions of possible network configurations (LACP etc.) that are then also being displayed as such in the GUI. I know this should be a feature request rather than an issue but I have never figured out how to set this in GitHub.

GuidoWilden avatar Jun 17 '24 12:06 GuidoWilden

@stonebuzz @cedric-anne @g-bougard I have played around with this for a while now and we have a fairly big problem with this.

The default outcome for us when running the Inventory task via toolbox is as seen below. I can clearly see which port on which switch said computer is plugged into.

Screenshot 2024-07-11 at 09 49 15

When we add the Network port type as described above here and run the Inventory task via toolbox again, the bonded ports make a little more sense but every single network port on our whole estate is displayed as a Hub now (see below)

Screenshot 2024-07-11 at 09 53 03

We then remove the Network port type from Dropdowns and things look normal again after the next Inventory task run (like in the first screenshot).

This just does not seem right or am I missing something?

GuidoWilden avatar Jul 11 '24 09:07 GuidoWilden

There has been no activity on this issue for some time and therefore it is considered stale and will be closed automatically in 10 days.

If this issue is related to a bug, please try to reproduce on latest release. If the problem persist, feel free to add a comment to revive this issue. If it is related to a new feature, please open a topic to discuss with community about this enhancement on suggestion website.

You may also consider taking a subscription to get professionnal support or contact GLPI editor team directly.

github-actions[bot] avatar Sep 10 '24 08:09 github-actions[bot]