Skip to content

feat(rust): allow passing the API URL through the CLI#1495

Merged
mchf merged 36 commits intomasterfrom
api-option
Oct 16, 2024
Merged

feat(rust): allow passing the API URL through the CLI#1495
mchf merged 36 commits intomasterfrom
api-option

Conversation

@mchf
Copy link
Copy Markdown
Contributor

@mchf mchf commented Jul 24, 2024

Problem

We want to be able to use different remote installation servers

Solution

  • Introduced global option for user to provide remote api url
  • Used newly introduced BaseHTTPClient to handle urls.

Already done:

  • auth, network, localization, users, software, product, storage, questions

Testing

  • Tested manually

@mvidner
Copy link
Copy Markdown
Contributor

mvidner commented Jul 24, 2024

I have tried this out, with this testing setup:

  • Run agama in a container, with /testing_using_container.sh; this builds the Rust code in rust/target/debug, and exposes port 443 to 10443 on the host
  • (Now I wanted to simply run the agama binary on the host, but this fails for me because 15.4 is too old and misses the new glibc and openssl that the TW container is using)
  • Compile agama in release mode on the host, cargo build -r which puts the binaries to rust/target/release

Now I can try rust/target/release/agama --api https://localhost:10443/api auth login

But it does not work yet:

  1. there seems to be a funny bug: BaseHTTPClient always wants an authentication token from a file, or else it fails (NotAuthenticated is printed). I needed to mkdir -p $HOME/.local/agama; touch $HOME/.local/agama/token
  2. the --api option seems to be ignored:
$ ./target/release/agama --uri https://ohmu:10443/api auth login
> Please enter the root password: ********
Anyhow(error sending request for url (http://localhost/api/auth): error trying to connect: tcp connect error: Connection refused (os error 111)

@coveralls
Copy link
Copy Markdown

Coverage Status

coverage: 70.979%. remained the same
when pulling 1d7d84c on api-option
into ce0c770 on master.

mvidner added a commit that referenced this pull request Aug 1, 2024
to enable
- connecting to alternative servers, either production or test mocks
- unauthenticated calls, either for the initial auth or test mocks

This is needed for both #1438 and #1495

In the end, the API changes only by adding a `Default` trait
implementation which does no authentication.
Connecting to a mock server is achieved by assigning to the public
`base_url` field.
@mchf mchf force-pushed the api-option branch 2 times, most recently from 0980b33 to 43307ea Compare August 8, 2024 08:59
@mvidner
Copy link
Copy Markdown
Contributor

mvidner commented Aug 9, 2024

With #1438 being merged, this PR could be extended to work with agama config load, because this CLI command will ignore the parts of the API that are left unspecified in the JSON, and we can test only on the user, root and localization parts, that already have HTTP clients

@mvidner
Copy link
Copy Markdown
Contributor

mvidner commented Aug 9, 2024

Also note that in #1438 I needed to connect to a mock HTTP server and made client APIs for that, which should be pretty useful for your use case too :)

@mvidner
Copy link
Copy Markdown
Contributor

mvidner commented Aug 9, 2024

The current code looks good but the auth endpoint is special and IMHO we need to see how this works with a regular one too.

@mchf mchf force-pushed the api-option branch 4 times, most recently from f625b32 to 47e6dbf Compare August 29, 2024 07:24
@mvidner
Copy link
Copy Markdown
Contributor

mvidner commented Oct 1, 2024

Yay! It gets somewhere... and then it fails on a self-signed certificate:

$ ./rust/target/release/agama --api https://localhost:10443/api/ config show
Anyhow(Failed to communicate with the HTTP backend 'error sending request for url (https://localhost:10443/api/network/connections)'

Caused by:
    0: error sending request for url (https://localhost:10443/api/network/connections)
    1: client error (Connect)
    2: error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1890: (self-signed certificate)
    3: error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1890:)

@mchf
Copy link
Copy Markdown
Contributor Author

mchf commented Oct 2, 2024

I was having some troubles with dbus in storage but for now at least local calls seem to be working.
agama_config_show

@mchf mchf requested a review from mvidner October 7, 2024 10:17
@mchf mchf force-pushed the api-option branch 2 times, most recently from c02d644 to eca3c77 Compare October 16, 2024 08:23
@mchf mchf force-pushed the api-option branch 2 times, most recently from fa43349 to d634766 Compare October 16, 2024 08:32
Copy link
Copy Markdown
Contributor

@imobachgs imobachgs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is looking better now. Thanks!

@imobachgs imobachgs changed the title Agama cli to be able to use different api urls feat(rust): allow passing the API URL through the CLI Oct 16, 2024
@mchf mchf merged commit 4cefd9b into master Oct 16, 2024
@mchf mchf deleted the api-option branch October 16, 2024 11:32
@imobachgs imobachgs mentioned this pull request Jan 10, 2025
imobachgs added a commit that referenced this pull request Jan 13, 2025
Update to release version 11.

* #1495
* #1564
* #1617
* #1618
* #1625
* #1626
* #1627
* #1628
* #1630
* #1631
* #1632
* #1633
* #1634
* #1635
* #1636
* #1639
* #1640
* #1641
* #1642
* #1643
* #1644
* #1645
* #1646
* #1647
* #1648
* #1649
* #1650
* #1651
* #1652
* #1654
* #1655
* #1656
* #1657
* #1660
* #1663
* #1666
* #1667
* #1668
* #1670
* #1671
* #1673
* #1674
* #1675
* #1676
* #1677
* #1681
* #1682
* #1683
* #1684
* #1687
* #1688
* #1689
* #1690
* #1691
* #1692
* #1693
* #1694
* #1695
* #1696
* #1698
* #1699
* #1702
* #1703
* #1704
* #1705
* #1707
* #1708
* #1709
* #1710
* #1711
* #1712
* #1713
* #1714
* #1715
* #1716
* #1717
* #1718
* #1720
* #1721
* #1722
* #1723
* #1727
* #1728
* #1729
* #1731
* #1732
* #1733
* #1734
* #1735
* #1736
* #1737
* #1740
* #1741
* #1743
* #1744
* #1745
* #1746
* #1751
* #1753
* #1754
* #1755
* #1757
* #1762
* #1763
* #1764
* #1765
* #1766
* #1767
* #1769
* #1771
* #1772
* #1773
* #1774
* #1777
* #1778
* #1785
* #1786
* #1787
* #1788
* #1789
* #1790
* #1791
* #1792
* #1793
* #1794
* #1795
* #1796
* #1797
* #1798
* #1799
* #1800
* #1802
* #1803
* #1804
* #1805
* #1807
* #1808
* #1809
* #1810
* #1811
* #1812
* #1814
* #1815
* #1821
* #1822
* #1823
* #1824
* #1825
* #1826
* #1827
* #1828
* #1830
* #1831
* #1832
* #1833
* #1834
* #1835
* #1836
* #1837
* #1838
* #1839
* #1840
* #1841
* #1842
* #1843
* #1844
* #1845
* #1847
* #1848
* #1849
* #1850
* #1851
* #1854
* #1855
* #1856
* #1857
* #1860
* #1861
* #1863
* #1864
* #1865
* #1866
* #1867
* #1871
* #1872
* #1873
* #1875
* #1876
* #1877
* #1878
* #1880
* #1881
* #1882
* #1883
* #1884
* #1885
* #1886
* #1888
* #1889
* #1890
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants