)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b3403136fc99cb00585a92f8f4f3c94155f5a217","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f0f1350a_871da8e2","updated":"2022-06-30 13:59:53.000000000","message":"I can\u0027t into writing.","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6b3b610c_862abbda","updated":"2022-06-30 18:35:01.000000000","message":"Style nits.\n\nOtherwise, I think this should really be restructured as less of a reference and more of a tutorial/handbook which mostly shows example calls against a running cluster (eg. using grpcurl), while referring to the proto files for actual reference documentation.\n\nBut it\u0027s better than nothing.","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"}],"metropolis/handbook/src/ch03-05-cluster-api.md":[{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Cluster API"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"This chapter goes through all of the services and data types exposed through Cluster API. In most cases, it\u0027s easier to access the API through metroctl tool. However, it still can be used directly whenever custom implementation is needed."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"## Services"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"6a5abf95_ce7a48cb","line":3,"range":{"start_line":3,"start_character":98,"end_line":3,"end_character":103},"updated":"2022-06-30 18:35:01.000000000","message":"day-to-day operations","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Cluster API"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"This chapter goes through all of the services and data types exposed through Cluster API. In most cases, it\u0027s easier to access the API through metroctl tool. However, it still can be used directly whenever custom implementation is needed."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"## Services"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"ad306f82_9f03e6b8","line":3,"range":{"start_line":3,"start_character":167,"end_line":3,"end_character":182},"updated":"2022-06-30 18:35:01.000000000","message":"it is recommended to use it directly in other cases, eg. when writing automation","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Cluster API"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"This chapter goes through all of the services and data types exposed through Cluster API. In most cases, it\u0027s easier to access the API through metroctl tool. However, it still can be used directly whenever custom implementation is needed."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"## Services"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"130afdcd_dad1ce1f","line":3,"range":{"start_line":3,"start_character":98,"end_line":3,"end_character":103},"in_reply_to":"6a5abf95_ce7a48cb","updated":"2022-07-01 10:11:25.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Cluster API"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"This chapter goes through all of the services and data types exposed through Cluster API. In most cases, it\u0027s easier to access the API through metroctl tool. However, it still can be used directly whenever custom implementation is needed."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"## Services"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"92e630ce_d250c640","line":3,"range":{"start_line":3,"start_character":167,"end_line":3,"end_character":182},"in_reply_to":"ad306f82_9f03e6b8","updated":"2022-07-01 10:11:25.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"## Services"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Most cluster services require authenticated access, which can be obtained using cluster owner\u0027s credentials generated during cluster bootstrapping phase. Escrow service, which itself implements the Authentication, Authorization and Accounting flow for Metropolis, is the single exception to this rule."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"### Escrow"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"8260e4ad_db45070a","line":7,"range":{"start_line":7,"start_character":154,"end_line":7,"end_character":160},"updated":"2022-06-30 18:35:01.000000000","message":"The Escrow service","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"## Services"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Most cluster services require authenticated access, which can be obtained using cluster owner\u0027s credentials generated during cluster bootstrapping phase. Escrow service, which itself implements the Authentication, Authorization and Accounting flow for Metropolis, is the single exception to this rule."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"### Escrow"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"63c35be1_603dbb33","line":7,"range":{"start_line":7,"start_character":44,"end_line":7,"end_character":50},"updated":"2022-06-30 18:35:01.000000000","message":"access (in the form of a TLS keypair and certificate)","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"## Services"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Most cluster services require authenticated access, which can be obtained using cluster owner\u0027s credentials generated during cluster bootstrapping phase. Escrow service, which itself implements the Authentication, Authorization and Accounting flow for Metropolis, is the single exception to this rule."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"### Escrow"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"a471360d_69f4cea1","line":7,"range":{"start_line":7,"start_character":44,"end_line":7,"end_character":50},"in_reply_to":"63c35be1_603dbb33","updated":"2022-07-01 10:11:25.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"## Services"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Most cluster services require authenticated access, which can be obtained using cluster owner\u0027s credentials generated during cluster bootstrapping phase. Escrow service, which itself implements the Authentication, Authorization and Accounting flow for Metropolis, is the single exception to this rule."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"### Escrow"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"7f405be9_380353aa","line":7,"range":{"start_line":7,"start_character":154,"end_line":7,"end_character":160},"in_reply_to":"8260e4ad_db45070a","updated":"2022-07-01 10:11:25.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"### Escrow"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Escrow is extensively documented in its [protofile](/metropolis/proto/api/aaa.proto)."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"### Management"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"46224458_011e98cb","line":11,"updated":"2022-06-30 18:35:01.000000000","message":"... It\u0027s current usecase is exchanging the Initial Owner Credentials (generated before the installation of the first node) into long-term access credentials that are then used to perform further API accesses.","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"### Escrow"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Escrow is extensively documented in its [protofile](/metropolis/proto/api/aaa.proto)."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"### Management"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"646d98c8_d44c74d6","line":11,"in_reply_to":"46224458_011e98cb","updated":"2022-07-01 10:11:25.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"### Management"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The Management service facilitates cluster management, including tasks such as:"},{"line_number":16,"context_line":"- Addition and removal of cluster nodes"},{"line_number":17,"context_line":"- Querying of cluster and node status"},{"line_number":18,"context_line":"- Node configuration"}],"source_content_type":"text/x-markdown","patch_set":1,"id":"5057a14b_9430927f","line":15,"updated":"2022-06-30 18:35:01.000000000","message":"is the main cluster manager-facing cluster management API. Management tasks include:","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"### Management"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The Management service facilitates cluster management, including tasks such as:"},{"line_number":16,"context_line":"- Addition and removal of cluster nodes"},{"line_number":17,"context_line":"- Querying of cluster and node status"},{"line_number":18,"context_line":"- Node configuration"}],"source_content_type":"text/x-markdown","patch_set":1,"id":"0870d240_f2ee8862","line":15,"in_reply_to":"5057a14b_9430927f","updated":"2022-07-01 10:11:25.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"#### GetRegisterTicket"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"GetRegisterTicket appears in cluster nodes\u0027 register flow. An up-to-date register ticket has to be retrieved, and included in Node Parameters supplied to the bootstrapped node for it to be able to register and join the cluster. It\u0027s used to protect the API surface from potential denial of service attakc,s and can be regenerated at any time in case it leaks."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"f7c0b8d7_e391199a","line":25,"range":{"start_line":25,"start_character":44,"end_line":25,"end_character":52},"updated":"2022-06-30 18:35:01.000000000","message":"Register","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"#### GetRegisterTicket"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"GetRegisterTicket appears in cluster nodes\u0027 register flow. An up-to-date register ticket has to be retrieved, and included in Node Parameters supplied to the bootstrapped node for it to be able to register and join the cluster. It\u0027s used to protect the API surface from potential denial of service attakc,s and can be regenerated at any time in case it leaks."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"e93d6989_da9bfd9b","line":25,"range":{"start_line":25,"start_character":228,"end_line":25,"end_character":232},"updated":"2022-06-30 18:35:01.000000000","message":"The ticket","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"#### GetRegisterTicket"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"GetRegisterTicket appears in cluster nodes\u0027 register flow. An up-to-date register ticket has to be retrieved, and included in Node Parameters supplied to the bootstrapped node for it to be able to register and join the cluster. It\u0027s used to protect the API surface from potential denial of service attakc,s and can be regenerated at any time in case it leaks."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"e385d4fc_fda1e793","line":25,"range":{"start_line":25,"start_character":298,"end_line":25,"end_character":306},"updated":"2022-06-30 18:35:01.000000000","message":"attacks by limiting the amount of entities that can start a registration flow against the cluster. It can ...","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"#### GetRegisterTicket"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"GetRegisterTicket appears in cluster nodes\u0027 register flow. An up-to-date register ticket has to be retrieved, and included in Node Parameters supplied to the bootstrapped node for it to be able to register and join the cluster. It\u0027s used to protect the API surface from potential denial of service attakc,s and can be regenerated at any time in case it leaks."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"c90031b3_38ec6ff9","line":25,"range":{"start_line":25,"start_character":18,"end_line":25,"end_character":25},"updated":"2022-06-30 18:35:01.000000000","message":"is used","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"#### GetRegisterTicket"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"GetRegisterTicket appears in cluster nodes\u0027 register flow. An up-to-date register ticket has to be retrieved, and included in Node Parameters supplied to the bootstrapped node for it to be able to register and join the cluster. It\u0027s used to protect the API surface from potential denial of service attakc,s and can be regenerated at any time in case it leaks."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"bcb6568a_edaa242f","line":25,"range":{"start_line":25,"start_character":99,"end_line":25,"end_character":108},"updated":"2022-06-30 18:35:01.000000000","message":"retrieved ahead of time by a cluster manager","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"#### GetRegisterTicket"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"GetRegisterTicket appears in cluster nodes\u0027 register flow. An up-to-date register ticket has to be retrieved, and included in Node Parameters supplied to the bootstrapped node for it to be able to register and join the cluster. It\u0027s used to protect the API surface from potential denial of service attakc,s and can be regenerated at any time in case it leaks."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"859b0f9d_65fedcc0","line":25,"range":{"start_line":25,"start_character":99,"end_line":25,"end_character":108},"in_reply_to":"bcb6568a_edaa242f","updated":"2022-07-01 10:11:25.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"#### GetRegisterTicket"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"GetRegisterTicket appears in cluster nodes\u0027 register flow. An up-to-date register ticket has to be retrieved, and included in Node Parameters supplied to the bootstrapped node for it to be able to register and join the cluster. It\u0027s used to protect the API surface from potential denial of service attakc,s and can be regenerated at any time in case it leaks."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"4d67860b_995ad931","line":25,"range":{"start_line":25,"start_character":18,"end_line":25,"end_character":25},"in_reply_to":"c90031b3_38ec6ff9","updated":"2022-07-01 10:11:25.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"#### GetRegisterTicket"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"GetRegisterTicket appears in cluster nodes\u0027 register flow. An up-to-date register ticket has to be retrieved, and included in Node Parameters supplied to the bootstrapped node for it to be able to register and join the cluster. It\u0027s used to protect the API surface from potential denial of service attakc,s and can be regenerated at any time in case it leaks."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"83a83d8d_bbef13ea","line":25,"range":{"start_line":25,"start_character":298,"end_line":25,"end_character":306},"in_reply_to":"e385d4fc_fda1e793","updated":"2022-07-01 10:11:25.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"#### GetRegisterTicket"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"GetRegisterTicket appears in cluster nodes\u0027 register flow. An up-to-date register ticket has to be retrieved, and included in Node Parameters supplied to the bootstrapped node for it to be able to register and join the cluster. It\u0027s used to protect the API surface from potential denial of service attakc,s and can be regenerated at any time in case it leaks."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"a301d535_98ed9b95","line":25,"range":{"start_line":25,"start_character":228,"end_line":25,"end_character":232},"in_reply_to":"e93d6989_da9bfd9b","updated":"2022-07-01 10:11:25.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"#### GetRegisterTicket"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"GetRegisterTicket appears in cluster nodes\u0027 register flow. An up-to-date register ticket has to be retrieved, and included in Node Parameters supplied to the bootstrapped node for it to be able to register and join the cluster. It\u0027s used to protect the API surface from potential denial of service attakc,s and can be regenerated at any time in case it leaks."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"5f45b6a2_dd6c8cb8","line":25,"range":{"start_line":25,"start_character":44,"end_line":25,"end_character":52},"in_reply_to":"f7c0b8d7_e391199a","updated":"2022-07-01 10:11:25.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"GetClusterInfo returns summary information about the cluster, currently limited to Cluster Directory containing node network addresses bundled with node public keys, which can be used to uniquely identify particular nodes. It\u0027s used in the register flow to obtain initial network addresses the candidate node will use to contact the cluster."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"#### GetNodes"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"2090d705_7b0cf451","line":29,"range":{"start_line":29,"start_character":60,"end_line":29,"end_character":82},"updated":"2022-06-30 18:35:01.000000000","message":". This is information is currently made up of the Cluster Directory. The Cluster Directory contains...","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"GetClusterInfo returns summary information about the cluster, currently limited to Cluster Directory containing node network addresses bundled with node public keys, which can be used to uniquely identify particular nodes. It\u0027s used in the register flow to obtain initial network addresses the candidate node will use to contact the cluster."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"#### GetNodes"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"4a426c44_7b63d987","line":29,"range":{"start_line":29,"start_character":223,"end_line":29,"end_character":341},"updated":"2022-06-30 18:35:01.000000000","message":"I\u0027d skip this. It\u0027s a fairly generic API.","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":true,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"GetClusterInfo returns summary information about the cluster, currently limited to Cluster Directory containing node network addresses bundled with node public keys, which can be used to uniquely identify particular nodes. It\u0027s used in the register flow to obtain initial network addresses the candidate node will use to contact the cluster."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"#### GetNodes"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"4d9148b4_0225dee3","line":29,"range":{"start_line":29,"start_character":60,"end_line":29,"end_character":82},"in_reply_to":"2090d705_7b0cf451","updated":"2022-07-01 10:11:25.000000000","message":"I don\u0027t see the point of this","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"GetClusterInfo returns summary information about the cluster, currently limited to Cluster Directory containing node network addresses bundled with node public keys, which can be used to uniquely identify particular nodes. It\u0027s used in the register flow to obtain initial network addresses the candidate node will use to contact the cluster."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"#### GetNodes"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"3c3d3adf_815d3d24","line":29,"range":{"start_line":29,"start_character":223,"end_line":29,"end_character":341},"in_reply_to":"4a426c44_7b63d987","updated":"2022-07-01 10:11:25.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"fe9c8d01baca0c8b4dca777bd03d8b8c4a69c724","unresolved":true,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"GetClusterInfo returns summary information about the cluster, currently limited to Cluster Directory containing node network addresses bundled with node public keys, which can be used to uniquely identify particular nodes. It\u0027s used in the register flow to obtain initial network addresses the candidate node will use to contact the cluster."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"#### GetNodes"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"58bbc91a_9ac458f2","line":29,"range":{"start_line":29,"start_character":60,"end_line":29,"end_character":82},"in_reply_to":"4d9148b4_0225dee3","updated":"2022-07-01 10:29:35.000000000","message":"\u0027Limited\u0027 implies a limit, IMO.","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"53c99bce9cee3eb3f77854a024d00c655f6834e9","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"GetClusterInfo returns summary information about the cluster, currently limited to Cluster Directory containing node network addresses bundled with node public keys, which can be used to uniquely identify particular nodes. It\u0027s used in the register flow to obtain initial network addresses the candidate node will use to contact the cluster."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"#### GetNodes"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"de564bfd_23cceec0","line":29,"range":{"start_line":29,"start_character":60,"end_line":29,"end_character":82},"in_reply_to":"58bbc91a_9ac458f2","updated":"2022-07-01 11:42:19.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"#### GetNodes"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"GetNodes retrieves information about cluster member nodes, such as their active roles and health. The call\u0027s output can be limited to nodes of interest with a [CEL](opensource.google.com/projects/cel) expression."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The filter expressions operate on [Node protobuf messages](/metropolis/proto/api/management.proto). Here\u0027s a couple of examples:"},{"line_number":36,"context_line":"- node.state \u003d\u003d NODE_STATE_UP"}],"source_content_type":"text/x-markdown","patch_set":1,"id":"e1aea102_8271c408","line":33,"range":{"start_line":33,"start_character":19,"end_line":33,"end_character":30},"updated":"2022-06-30 18:35:01.000000000","message":"detailed information","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"#### GetNodes"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"GetNodes retrieves information about cluster member nodes, such as their active roles and health. The call\u0027s output can be limited to nodes of interest with a [CEL](opensource.google.com/projects/cel) expression."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The filter expressions operate on [Node protobuf messages](/metropolis/proto/api/management.proto). Here\u0027s a couple of examples:"},{"line_number":36,"context_line":"- node.state \u003d\u003d NODE_STATE_UP"}],"source_content_type":"text/x-markdown","patch_set":1,"id":"2ddb8e90_d9504ab8","line":33,"range":{"start_line":33,"start_character":19,"end_line":33,"end_character":30},"in_reply_to":"e1aea102_8271c408","updated":"2022-07-01 10:11:25.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"#### ApproveNode"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"ApproveNode takes part in the node\u0027s register flow. It\u0027s called to admit new nodes into the cluster. For the call to succeed, the target node must have already registered into the cluster using a valid Register Ticket."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"#### UpdateNodeRoles"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"3a6ba54d_f5deabaa","line":42,"range":{"start_line":42,"start_character":18,"end_line":42,"end_character":36},"updated":"2022-06-30 18:35:01.000000000","message":"is part of the Register flow","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"#### ApproveNode"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"ApproveNode takes part in the node\u0027s register flow. It\u0027s called to admit new nodes into the cluster. For the call to succeed, the target node must have already registered into the cluster using a valid Register Ticket."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"#### UpdateNodeRoles"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"40a1a7b1_7c31be9a","line":42,"range":{"start_line":42,"start_character":18,"end_line":42,"end_character":36},"in_reply_to":"3a6ba54d_f5deabaa","updated":"2022-07-01 10:11:25.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"795b1ece597e03d1a4311d6b6a29b09ca9804000","unresolved":true,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"#### UpdateNodeRoles"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"UpdateNodeRoles updates a single cluster member node\u0027s roles within the cluster. Currently it\u0027s possible to specialize a node into a cluster consensus member and/or a Kubernetes worker node."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"### Node debug"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"be06c5ec_b5a9ac1e","line":46,"range":{"start_line":46,"start_character":26,"end_line":46,"end_character":32},"updated":"2022-06-30 18:35:01.000000000","message":".. a cluster node\u0027s roles","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c0bc09a21834769b7fccba83cc78bc0b7d248ce4","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"#### UpdateNodeRoles"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"UpdateNodeRoles updates a single cluster member node\u0027s roles within the cluster. Currently it\u0027s possible to specialize a node into a cluster consensus member and/or a Kubernetes worker node."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"### Node debug"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"694a6556_8ec7f942","line":46,"range":{"start_line":46,"start_character":26,"end_line":46,"end_character":32},"in_reply_to":"be06c5ec_b5a9ac1e","updated":"2022-07-01 10:11:25.000000000","message":"Done","commit_id":"9b46b57f8ee3b1f9ae825999d1d5477e3375801d"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c490a8d73685cca2a013b28a3f0973a532eb44df","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Cluster API"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"This chapter goes through all of the services and data types exposed by Cluster API that\u0027s used in day-to-day operations. In most cases, it\u0027s easier to access the API with metroctl tool. However, it still can be used directly whenever custom implementation is needed, eg. when writing automation."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"## Services"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":4,"id":"4d767fd7_449fef8b","line":3,"range":{"start_line":3,"start_character":122,"end_line":3,"end_character":185},"updated":"2022-07-06 14:50:33.000000000","message":"metroctl should be for human interaction, the API for M2M","commit_id":"693edf5bf30597e92143942f63be3abf61e0d102"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"331b2a1e85bb7718bdae5586726652cc8c89739e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Cluster API"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"This chapter goes through all of the services and data types exposed by Cluster API that\u0027s used in day-to-day operations. In most cases, it\u0027s easier to access the API with metroctl tool. However, it still can be used directly whenever custom implementation is needed, eg. when writing automation."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"## Services"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":4,"id":"3aeaa2a5_85c50af6","line":3,"range":{"start_line":3,"start_character":122,"end_line":3,"end_character":185},"in_reply_to":"4d767fd7_449fef8b","updated":"2022-07-07 11:58:50.000000000","message":"Done","commit_id":"693edf5bf30597e92143942f63be3abf61e0d102"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c490a8d73685cca2a013b28a3f0973a532eb44df","unresolved":true,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"## Services"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Most cluster services require authenticated access (in the form of a TLS keypair and certificate), which can be obtained using cluster owner\u0027s credentials generated during cluster bootstrapping phase. The Escrow service, which itself implements the Authentication, Authorization and Accounting flow for Metropolis, is the single exception to this rule."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"### Escrow"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":4,"id":"b2b56f5d_59d2d19f","line":7,"range":{"start_line":7,"start_character":249,"end_line":7,"end_character":293},"updated":"2022-07-06 14:50:33.000000000","message":"It doesn\u0027t really implement anything other than issuing the initial owner certificate. And it won\u0027t because I\u0027ll drop it as soon as the new identity system comes around. So I\u0027d leave the documentation of that feature relatively minimal.","commit_id":"693edf5bf30597e92143942f63be3abf61e0d102"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"331b2a1e85bb7718bdae5586726652cc8c89739e","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"## Services"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Most cluster services require authenticated access (in the form of a TLS keypair and certificate), which can be obtained using cluster owner\u0027s credentials generated during cluster bootstrapping phase. The Escrow service, which itself implements the Authentication, Authorization and Accounting flow for Metropolis, is the single exception to this rule."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"### Escrow"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":4,"id":"7920ddba_c20f113e","line":7,"range":{"start_line":7,"start_character":249,"end_line":7,"end_character":293},"in_reply_to":"b2b56f5d_59d2d19f","updated":"2022-07-07 11:58:50.000000000","message":"Done","commit_id":"693edf5bf30597e92143942f63be3abf61e0d102"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c490a8d73685cca2a013b28a3f0973a532eb44df","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"#### GetRegisterTicket"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"GetRegisterTicket is used in cluster nodes\u0027 Register Flow. An up-to-date register ticket has to be retrieved ahead of time by a cluster manager, and included in Node Parameters supplied to the bootstrapped node for it to be able to register and join the cluster. The ticket is used to protect the API surface from potential denial of service attacks by limiting the amount of entities that can start the Register Flow against the cluster. It can be regenerated at any time in case it leaks."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":4,"id":"cf43cbd4_62798cc0","line":25,"range":{"start_line":25,"start_character":193,"end_line":25,"end_character":210},"updated":"2022-07-06 14:50:33.000000000","message":"Registering and bootstrapping are exclusive","commit_id":"693edf5bf30597e92143942f63be3abf61e0d102"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"331b2a1e85bb7718bdae5586726652cc8c89739e","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"#### GetRegisterTicket"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"GetRegisterTicket is used in cluster nodes\u0027 Register Flow. An up-to-date register ticket has to be retrieved ahead of time by a cluster manager, and included in Node Parameters supplied to the bootstrapped node for it to be able to register and join the cluster. The ticket is used to protect the API surface from potential denial of service attacks by limiting the amount of entities that can start the Register Flow against the cluster. It can be regenerated at any time in case it leaks."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#### GetClusterInfo"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":4,"id":"1b3ffa58_0e48e6e6","line":25,"range":{"start_line":25,"start_character":193,"end_line":25,"end_character":210},"in_reply_to":"cf43cbd4_62798cc0","updated":"2022-07-07 11:58:50.000000000","message":"Done","commit_id":"693edf5bf30597e92143942f63be3abf61e0d102"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c490a8d73685cca2a013b28a3f0973a532eb44df","unresolved":true,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"#### UpdateNodeRoles"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"UpdateNodeRoles updates a cluster node\u0027s roles within the cluster. Currently it\u0027s possible to specialize a node into a cluster consensus member and/or a Kubernetes worker node."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"### Node debug"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":4,"id":"43757a69_b240e7b8","line":46,"range":{"start_line":46,"start_character":164,"end_line":46,"end_character":170},"updated":"2022-07-06 14:50:33.000000000","message":"we do not have worker/control plane separation yet","commit_id":"693edf5bf30597e92143942f63be3abf61e0d102"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"331b2a1e85bb7718bdae5586726652cc8c89739e","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"#### UpdateNodeRoles"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"UpdateNodeRoles updates a cluster node\u0027s roles within the cluster. Currently it\u0027s possible to specialize a node into a cluster consensus member and/or a Kubernetes worker node."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"### Node debug"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":4,"id":"5ea6a286_cbebe32b","line":46,"range":{"start_line":46,"start_character":164,"end_line":46,"end_character":170},"in_reply_to":"43757a69_b240e7b8","updated":"2022-07-07 11:58:50.000000000","message":"Done","commit_id":"693edf5bf30597e92143942f63be3abf61e0d102"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c490a8d73685cca2a013b28a3f0973a532eb44df","unresolved":true,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"### Node debug"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"The purpose of this service is to ease the development process of Metropolis. It *should not* be enabled in production clusters."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"See also: [debug.proto](/metropolis/proto/api/debug.proto)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":4,"id":"b811acce_8b3c80eb","line":50,"range":{"start_line":50,"start_character":78,"end_line":50,"end_character":96},"updated":"2022-07-06 14:50:33.000000000","message":"This cannot be enabled or disabled by the administrator. It is never enabled on non-debug (-c dbg) builds.","commit_id":"693edf5bf30597e92143942f63be3abf61e0d102"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"331b2a1e85bb7718bdae5586726652cc8c89739e","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"### Node debug"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"The purpose of this service is to ease the development process of Metropolis. It *should not* be enabled in production clusters."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"See also: [debug.proto](/metropolis/proto/api/debug.proto)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":4,"id":"698e99c3_5fd22041","line":50,"range":{"start_line":50,"start_character":78,"end_line":50,"end_character":96},"in_reply_to":"b811acce_8b3c80eb","updated":"2022-07-07 11:58:50.000000000","message":"Done","commit_id":"693edf5bf30597e92143942f63be3abf61e0d102"}]}
