Skip to content

Commit fff9742

Browse files
feat: Add Ollama module (#1099)
Co-authored-by: Andre Hofmeister <[email protected]>
1 parent 1986704 commit fff9742

File tree

13 files changed

+259
-16
lines changed

13 files changed

+259
-16
lines changed

.github/workflows/cicd.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ jobs:
7373
{ name: "Testcontainers.MySql", runs-on: "ubuntu-22.04" },
7474
{ name: "Testcontainers.Nats", runs-on: "ubuntu-22.04" },
7575
{ name: "Testcontainers.Neo4j", runs-on: "ubuntu-22.04" },
76+
{ name: "Testcontainers.Ollama", runs-on: "ubuntu-22.04" },
7677
{ name: "Testcontainers.Oracle", runs-on: "ubuntu-22.04" },
7778
{ name: "Testcontainers.Oracle11", runs-on: "ubuntu-22.04" },
7879
{ name: "Testcontainers.Oracle18", runs-on: "ubuntu-22.04" },

Directory.Packages.props

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,11 @@
3434
<PackageVersion Include="AWSSDK.SimpleNotificationService" Version="3.7.101.7"/>
3535
<PackageVersion Include="AWSSDK.SQS" Version="3.7.100.71"/>
3636
<PackageVersion Include="Azure.Data.Tables" Version="12.8.0"/>
37+
<PackageVersion Include="Azure.Identity" Version="1.13.2"/>
3738
<PackageVersion Include="Azure.Messaging.EventHubs" Version="5.11.3"/>
3839
<PackageVersion Include="Azure.Messaging.ServiceBus" Version="7.18.2"/>
40+
<PackageVersion Include="Azure.Security.KeyVault.Certificates" Version="4.7.0"/>
41+
<PackageVersion Include="Azure.Security.KeyVault.Secrets" Version="4.7.0"/>
3942
<PackageVersion Include="Azure.Storage.Blobs" Version="12.17.0"/>
4043
<PackageVersion Include="Azure.Storage.Queues" Version="12.15.0"/>
4144
<PackageVersion Include="CassandraCSharpDriver" Version="3.22.0"/>
@@ -45,9 +48,6 @@
4548
<PackageVersion Include="Confluent.SchemaRegistry" Version="2.8.0"/>
4649
<PackageVersion Include="Consul" Version="1.6.10.9"/>
4750
<PackageVersion Include="CouchbaseNetClient" Version="3.6.4"/>
48-
<PackageVersion Include="Net.IBM.Data.Db2-lnx" Version="9.0.0.100"/>
49-
<PackageVersion Include="Net.IBM.Data.Db2-osx" Version="9.0.0.100"/>
50-
<PackageVersion Include="Net.IBM.Data.Db2" Version="9.0.0.100"/>
5151
<PackageVersion Include="DotPulsar" Version="3.6.0"/>
5252
<PackageVersion Include="Elastic.Clients.Elasticsearch" Version="8.16.3"/>
5353
<PackageVersion Include="EventStore.Client.Grpc.Streams" Version="22.0.0"/>
@@ -70,15 +70,16 @@
7070
<PackageVersion Include="MySqlConnector" Version="2.2.5"/>
7171
<PackageVersion Include="NATS.Client" Version="1.0.8"/>
7272
<PackageVersion Include="Neo4j.Driver" Version="5.5.0"/>
73+
<PackageVersion Include="Net.IBM.Data.Db2-lnx" Version="9.0.0.100"/>
74+
<PackageVersion Include="Net.IBM.Data.Db2-osx" Version="9.0.0.100"/>
75+
<PackageVersion Include="Net.IBM.Data.Db2" Version="9.0.0.100"/>
7376
<PackageVersion Include="Npgsql" Version="6.0.11"/>
77+
<PackageVersion Include="OllamaSharp" Version="5.1.13"/>
7478
<PackageVersion Include="Oracle.ManagedDataAccess.Core" Version="23.7.0"/>
7579
<PackageVersion Include="Qdrant.Client" Version="1.13.0"/>
7680
<PackageVersion Include="RabbitMQ.Client" Version="6.4.0"/>
7781
<PackageVersion Include="RavenDB.Client" Version="5.4.100"/>
7882
<PackageVersion Include="Selenium.WebDriver" Version="4.8.1"/>
7983
<PackageVersion Include="StackExchange.Redis" Version="2.6.90"/>
80-
<PackageVersion Include="Azure.Identity" Version="1.13.2" />
81-
<PackageVersion Include="Azure.Security.KeyVault.Certificates" Version="4.7.0" />
82-
<PackageVersion Include="Azure.Security.KeyVault.Secrets" Version="4.7.0" />
8384
</ItemGroup>
8485
</Project>

Testcontainers.sln

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Nats", "src\
8787
EndProject
8888
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Neo4j", "src\Testcontainers.Neo4j\Testcontainers.Neo4j.csproj", "{ADC2372B-6FE0-421D-8277-BB628E8EFC22}"
8989
EndProject
90+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Ollama", "src\Testcontainers.Ollama\Testcontainers.Ollama.csproj", "{0DB0075D-42EC-4438-93F7-630CF5BCCAF0}"
91+
EndProject
9092
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Oracle", "src\Testcontainers.Oracle\Testcontainers.Oracle.csproj", "{596EAFC1-0496-495C-B382-D57415FA456A}"
9193
EndProject
9294
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Papercut", "src\Testcontainers.Papercut\Testcontainers.Papercut.csproj", "{B2608563-8EE4-49AA-A9A0-B1614486AEEF}"
@@ -197,6 +199,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Nats.Tests",
197199
EndProject
198200
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Neo4j.Tests", "tests\Testcontainers.Neo4j.Tests\Testcontainers.Neo4j.Tests.csproj", "{D3F63405-C0FA-4F83-8B79-E30BFF5FF5BF}"
199201
EndProject
202+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Ollama.Tests", "tests\Testcontainers.Ollama.Tests\Testcontainers.Ollama.Tests.csproj", "{D3AD7D72-510C-43A4-A401-DB3C2594508E}"
203+
EndProject
200204
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Oracle.Tests", "tests\Testcontainers.Oracle.Tests\Testcontainers.Oracle.Tests.csproj", "{4AC1088B-9965-4497-AC8E-570F1AD5631F}"
201205
EndProject
202206
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Oracle11.Tests", "tests\Testcontainers.Oracle11.Tests\Testcontainers.Oracle11.Tests.csproj", "{0A0AC20D-226B-46F9-B267-0D00964A7601}"
@@ -363,6 +367,10 @@ Global
363367
{3792268A-EF08-4569-8118-991E08FD61C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
364368
{3792268A-EF08-4569-8118-991E08FD61C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
365369
{3792268A-EF08-4569-8118-991E08FD61C4}.Release|Any CPU.Build.0 = Release|Any CPU
370+
{436486CE-E855-43DA-A2C7-9832E98BD86E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
371+
{436486CE-E855-43DA-A2C7-9832E98BD86E}.Debug|Any CPU.Build.0 = Debug|Any CPU
372+
{436486CE-E855-43DA-A2C7-9832E98BD86E}.Release|Any CPU.ActiveCfg = Release|Any CPU
373+
{436486CE-E855-43DA-A2C7-9832E98BD86E}.Release|Any CPU.Build.0 = Release|Any CPU
366374
{4B204EB3-C478-422E-9B6F-62DF3871291A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
367375
{4B204EB3-C478-422E-9B6F-62DF3871291A}.Debug|Any CPU.Build.0 = Debug|Any CPU
368376
{4B204EB3-C478-422E-9B6F-62DF3871291A}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -395,6 +403,10 @@ Global
395403
{ADC2372B-6FE0-421D-8277-BB628E8EFC22}.Debug|Any CPU.Build.0 = Debug|Any CPU
396404
{ADC2372B-6FE0-421D-8277-BB628E8EFC22}.Release|Any CPU.ActiveCfg = Release|Any CPU
397405
{ADC2372B-6FE0-421D-8277-BB628E8EFC22}.Release|Any CPU.Build.0 = Release|Any CPU
406+
{0DB0075D-42EC-4438-93F7-630CF5BCCAF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
407+
{0DB0075D-42EC-4438-93F7-630CF5BCCAF0}.Debug|Any CPU.Build.0 = Debug|Any CPU
408+
{0DB0075D-42EC-4438-93F7-630CF5BCCAF0}.Release|Any CPU.ActiveCfg = Release|Any CPU
409+
{0DB0075D-42EC-4438-93F7-630CF5BCCAF0}.Release|Any CPU.Build.0 = Release|Any CPU
398410
{596EAFC1-0496-495C-B382-D57415FA456A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
399411
{596EAFC1-0496-495C-B382-D57415FA456A}.Debug|Any CPU.Build.0 = Debug|Any CPU
400412
{596EAFC1-0496-495C-B382-D57415FA456A}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -451,10 +463,6 @@ Global
451463
{64A87DE5-29B0-4A54-9E74-560484D8C7C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
452464
{64A87DE5-29B0-4A54-9E74-560484D8C7C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
453465
{64A87DE5-29B0-4A54-9E74-560484D8C7C0}.Release|Any CPU.Build.0 = Release|Any CPU
454-
{436486CE-E855-43DA-A2C7-9832E98BD86E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
455-
{436486CE-E855-43DA-A2C7-9832E98BD86E}.Debug|Any CPU.Build.0 = Debug|Any CPU
456-
{436486CE-E855-43DA-A2C7-9832E98BD86E}.Release|Any CPU.ActiveCfg = Release|Any CPU
457-
{436486CE-E855-43DA-A2C7-9832E98BD86E}.Release|Any CPU.Build.0 = Release|Any CPU
458466
{380BB29B-F556-404D-B13B-CA250599C565}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
459467
{380BB29B-F556-404D-B13B-CA250599C565}.Debug|Any CPU.Build.0 = Debug|Any CPU
460468
{380BB29B-F556-404D-B13B-CA250599C565}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -583,6 +591,10 @@ Global
583591
{728CBE16-1D52-4F84-AF01-7229E6013512}.Debug|Any CPU.Build.0 = Debug|Any CPU
584592
{728CBE16-1D52-4F84-AF01-7229E6013512}.Release|Any CPU.ActiveCfg = Release|Any CPU
585593
{728CBE16-1D52-4F84-AF01-7229E6013512}.Release|Any CPU.Build.0 = Release|Any CPU
594+
{CB4F241B-EB79-49D5-A45F-050BEE2191B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
595+
{CB4F241B-EB79-49D5-A45F-050BEE2191B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
596+
{CB4F241B-EB79-49D5-A45F-050BEE2191B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
597+
{CB4F241B-EB79-49D5-A45F-050BEE2191B8}.Release|Any CPU.Build.0 = Release|Any CPU
586598
{7F0AE083-9DB8-4BD4-91F7-C199DCC7301D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
587599
{7F0AE083-9DB8-4BD4-91F7-C199DCC7301D}.Debug|Any CPU.Build.0 = Debug|Any CPU
588600
{7F0AE083-9DB8-4BD4-91F7-C199DCC7301D}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -615,6 +627,10 @@ Global
615627
{D3F63405-C0FA-4F83-8B79-E30BFF5FF5BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
616628
{D3F63405-C0FA-4F83-8B79-E30BFF5FF5BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
617629
{D3F63405-C0FA-4F83-8B79-E30BFF5FF5BF}.Release|Any CPU.Build.0 = Release|Any CPU
630+
{D3AD7D72-510C-43A4-A401-DB3C2594508E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
631+
{D3AD7D72-510C-43A4-A401-DB3C2594508E}.Debug|Any CPU.Build.0 = Debug|Any CPU
632+
{D3AD7D72-510C-43A4-A401-DB3C2594508E}.Release|Any CPU.ActiveCfg = Release|Any CPU
633+
{D3AD7D72-510C-43A4-A401-DB3C2594508E}.Release|Any CPU.Build.0 = Release|Any CPU
618634
{4AC1088B-9965-4497-AC8E-570F1AD5631F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
619635
{4AC1088B-9965-4497-AC8E-570F1AD5631F}.Debug|Any CPU.Build.0 = Debug|Any CPU
620636
{4AC1088B-9965-4497-AC8E-570F1AD5631F}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -703,10 +719,6 @@ Global
703719
{EBA72C3B-57D5-43FF-A5B4-3D55B3B6D4C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
704720
{EBA72C3B-57D5-43FF-A5B4-3D55B3B6D4C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
705721
{EBA72C3B-57D5-43FF-A5B4-3D55B3B6D4C2}.Release|Any CPU.Build.0 = Release|Any CPU
706-
{CB4F241B-EB79-49D5-A45F-050BEE2191B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
707-
{CB4F241B-EB79-49D5-A45F-050BEE2191B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
708-
{CB4F241B-EB79-49D5-A45F-050BEE2191B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
709-
{CB4F241B-EB79-49D5-A45F-050BEE2191B8}.Release|Any CPU.Build.0 = Release|Any CPU
710722
{E901DF14-6F05-4FC2-825A-3055FAD33561}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
711723
{E901DF14-6F05-4FC2-825A-3055FAD33561}.Debug|Any CPU.Build.0 = Debug|Any CPU
712724
{E901DF14-6F05-4FC2-825A-3055FAD33561}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -748,6 +760,7 @@ Global
748760
{AA8834A3-82A7-4E83-8E4C-88D37F74056A} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
749761
{FCF59758-2403-4EC9-9EAE-4EC69A3F27AF} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
750762
{3792268A-EF08-4569-8118-991E08FD61C4} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
763+
{436486CE-E855-43DA-A2C7-9832E98BD86E} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
751764
{4B204EB3-C478-422E-9B6F-62DF3871291A} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
752765
{B024E315-831F-429D-92AA-44B839AC10F4} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
753766
{1266E1E6-5CEF-4161-8B45-83282455746E} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
@@ -756,6 +769,7 @@ Global
756769
{9FDCFAEA-AE42-4C69-89EF-F1FF75E88CCC} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
757770
{BF37BEA1-0816-4326-B1E0-E82290F8FCE0} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
758771
{ADC2372B-6FE0-421D-8277-BB628E8EFC22} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
772+
{0DB0075D-42EC-4438-93F7-630CF5BCCAF0} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
759773
{596EAFC1-0496-495C-B382-D57415FA456A} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
760774
{B2608563-8EE4-49AA-A9A0-B1614486AEEF} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
761775
{8AB91636-9055-4900-A72A-7CFFACDFDBF0} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
@@ -770,7 +784,6 @@ Global
770784
{7D5C6816-0DD2-4E13-A585-033B5D3C80D5} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
771785
{68F8600D-24E9-4E03-9E25-5F6EB338EAC1} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
772786
{64A87DE5-29B0-4A54-9E74-560484D8C7C0} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
773-
{436486CE-E855-43DA-A2C7-9832E98BD86E} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
774787
{380BB29B-F556-404D-B13B-CA250599C565} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
775788
{84911C93-C2A9-46E9-AE5E-D567306589E5} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
776789
{EC76857B-A3B8-4B7A-A1B0-8D867A4D1733} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
@@ -803,6 +816,7 @@ Global
803816
{4827D606-89D5-4E00-8341-47A6E95817BA} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
804817
{FA59D75A-8D3A-412C-92E6-4A56033162DD} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
805818
{728CBE16-1D52-4F84-AF01-7229E6013512} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
819+
{CB4F241B-EB79-49D5-A45F-050BEE2191B8} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
806820
{7F0AE083-9DB8-4BD4-91F7-C199DCC7301D} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
807821
{5247DF94-32F3-4ED6-AE71-6AB4F4078E6D} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
808822
{5DB1F35F-B714-4B62-84BE-16A33084D3E1} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
@@ -811,6 +825,7 @@ Global
811825
{E42DA1CE-698F-4E45-8D1F-5D5895893840} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
812826
{87A3F137-6DC3-4CE5-91E6-01797D076086} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
813827
{D3F63405-C0FA-4F83-8B79-E30BFF5FF5BF} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
828+
{D3AD7D72-510C-43A4-A401-DB3C2594508E} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
814829
{4AC1088B-9965-4497-AC8E-570F1AD5631F} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
815830
{0A0AC20D-226B-46F9-B267-0D00964A7601} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
816831
{E4C887A9-A44A-4641-BB9B-0664CC4C362F} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
@@ -833,7 +848,6 @@ Global
833848
{27CDB869-A150-4593-958F-6F26E5391E7C} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
834849
{DDB41BC8-5826-4D97-9C5F-001151E3FFD6} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
835850
{EBA72C3B-57D5-43FF-A5B4-3D55B3B6D4C2} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
836-
{CB4F241B-EB79-49D5-A45F-050BEE2191B8} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
837851
{E901DF14-6F05-4FC2-825A-3055FAD33561} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
838852
{B2E8B7FB-7D1E-4DD3-A25E-34DE4386B1EB} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
839853
EndGlobalSection
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
root = true
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
namespace Testcontainers.Ollama;
2+
3+
/// <inheritdoc cref="ContainerBuilder{TBuilderEntity, TContainerEntity, TConfigurationEntity}" />
4+
[PublicAPI]
5+
public sealed class OllamaBuilder : ContainerBuilder<OllamaBuilder, OllamaContainer, OllamaConfiguration>
6+
{
7+
public const string OllamaImage = "ollama/ollama:0.6.6";
8+
9+
public const ushort OllamaPort = 11434;
10+
11+
/// <summary>
12+
/// Initializes a new instance of the <see cref="OllamaBuilder" /> class.
13+
/// </summary>
14+
public OllamaBuilder()
15+
: this(new OllamaConfiguration())
16+
{
17+
DockerResourceConfiguration = Init().DockerResourceConfiguration;
18+
}
19+
20+
/// <summary>
21+
/// Initializes a new instance of the <see cref="OllamaBuilder" /> class.
22+
/// </summary>
23+
/// <param name="resourceConfiguration">The Docker resource configuration.</param>
24+
private OllamaBuilder(OllamaConfiguration resourceConfiguration)
25+
: base(resourceConfiguration)
26+
{
27+
DockerResourceConfiguration = resourceConfiguration;
28+
}
29+
30+
/// <inheritdoc />
31+
protected override OllamaConfiguration DockerResourceConfiguration { get; }
32+
33+
/// <inheritdoc />
34+
public override OllamaContainer Build()
35+
{
36+
Validate();
37+
return new OllamaContainer(DockerResourceConfiguration);
38+
}
39+
40+
/// <inheritdoc />
41+
protected override OllamaBuilder Init()
42+
{
43+
return base.Init()
44+
.WithImage(OllamaImage)
45+
.WithPortBinding(OllamaPort, true)
46+
.WithWaitStrategy(Wait.ForUnixContainer().UntilHttpRequestIsSucceeded(request =>
47+
request.ForPath("/api/version").ForPort(OllamaPort)));
48+
}
49+
50+
/// <inheritdoc />
51+
protected override OllamaBuilder Clone(IResourceConfiguration<CreateContainerParameters> resourceConfiguration)
52+
{
53+
return Merge(DockerResourceConfiguration, new OllamaConfiguration(resourceConfiguration));
54+
}
55+
56+
/// <inheritdoc />
57+
protected override OllamaBuilder Clone(IContainerConfiguration resourceConfiguration)
58+
{
59+
return Merge(DockerResourceConfiguration, new OllamaConfiguration(resourceConfiguration));
60+
}
61+
62+
/// <inheritdoc />
63+
protected override OllamaBuilder Merge(OllamaConfiguration oldValue, OllamaConfiguration newValue)
64+
{
65+
return new OllamaBuilder(new OllamaConfiguration(oldValue, newValue));
66+
}
67+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
namespace Testcontainers.Ollama;
2+
3+
/// <inheritdoc cref="ContainerConfiguration" />
4+
[PublicAPI]
5+
public sealed class OllamaConfiguration : ContainerConfiguration
6+
{
7+
/// <summary>
8+
/// Initializes a new instance of the <see cref="OllamaConfiguration" /> class.
9+
/// </summary>
10+
public OllamaConfiguration()
11+
{
12+
}
13+
14+
/// <summary>
15+
/// Initializes a new instance of the <see cref="OllamaConfiguration" /> class.
16+
/// </summary>
17+
/// <param name="resourceConfiguration">The Docker resource configuration.</param>
18+
public OllamaConfiguration(IResourceConfiguration<CreateContainerParameters> resourceConfiguration)
19+
: base(resourceConfiguration)
20+
{
21+
// Passes the configuration upwards to the base implementations to create an updated immutable copy.
22+
}
23+
24+
/// <summary>
25+
/// Initializes a new instance of the <see cref="OllamaConfiguration" /> class.
26+
/// </summary>
27+
/// <param name="resourceConfiguration">The Docker resource configuration.</param>
28+
public OllamaConfiguration(IContainerConfiguration resourceConfiguration)
29+
: base(resourceConfiguration)
30+
{
31+
// Passes the configuration upwards to the base implementations to create an updated immutable copy.
32+
}
33+
34+
/// <summary>
35+
/// Initializes a new instance of the <see cref="OllamaConfiguration" /> class.
36+
/// </summary>
37+
/// <param name="resourceConfiguration">The Docker resource configuration.</param>
38+
public OllamaConfiguration(OllamaConfiguration resourceConfiguration)
39+
: this(new OllamaConfiguration(), resourceConfiguration)
40+
{
41+
// Passes the configuration upwards to the base implementations to create an updated immutable copy.
42+
}
43+
44+
/// <summary>
45+
/// Initializes a new instance of the <see cref="OllamaConfiguration" /> class.
46+
/// </summary>
47+
/// <param name="oldValue">The old Docker resource configuration.</param>
48+
/// <param name="newValue">The new Docker resource configuration.</param>
49+
public OllamaConfiguration(OllamaConfiguration oldValue, OllamaConfiguration newValue)
50+
: base(oldValue, newValue)
51+
{
52+
}
53+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
namespace Testcontainers.Ollama;
2+
3+
/// <inheritdoc cref="DockerContainer" />
4+
[PublicAPI]
5+
public sealed class OllamaContainer : DockerContainer
6+
{
7+
/// <summary>
8+
/// Initializes a new instance of the <see cref="OllamaContainer" /> class.
9+
/// </summary>
10+
/// <param name="configuration">The container configuration.</param>
11+
public OllamaContainer(OllamaConfiguration configuration)
12+
: base(configuration)
13+
{
14+
}
15+
16+
/// <summary>
17+
/// Gets the Ollama base address.
18+
/// </summary>
19+
/// <returns>The Ollama base address.</returns>
20+
public string GetBaseAddress()
21+
{
22+
return new UriBuilder(Uri.UriSchemeHttp, Hostname, GetMappedPublicPort(OllamaBuilder.OllamaPort)).ToString();
23+
}
24+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<PropertyGroup>
3+
<TargetFrameworks>net8.0;net9.0;netstandard2.0;netstandard2.1</TargetFrameworks>
4+
<LangVersion>latest</LangVersion>
5+
</PropertyGroup>
6+
<ItemGroup>
7+
<PackageReference Include="JetBrains.Annotations" VersionOverride="2023.3.0" PrivateAssets="All"/>
8+
</ItemGroup>
9+
<ItemGroup>
10+
<ProjectReference Include="../Testcontainers/Testcontainers.csproj"/>
11+
</ItemGroup>
12+
</Project>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
global using System;
2+
global using Docker.DotNet.Models;
3+
global using DotNet.Testcontainers.Builders;
4+
global using DotNet.Testcontainers.Configurations;
5+
global using DotNet.Testcontainers.Containers;
6+
global using JetBrains.Annotations;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
root = true

0 commit comments

Comments
 (0)