@@ -5,28 +5,28 @@ import (
55 "github.com/microsoft/go-sqlcmd/internal/container"
66)
77
8- type bacpac struct {
8+ type dacfx struct {
99 controller * container.Controller
1010 containerId string
1111}
1212
13- func (m * bacpac ) Initialize (controller * container.Controller ) {
13+ func (m * dacfx ) Initialize (controller * container.Controller ) {
1414 m .controller = controller
1515}
1616
17- func (m * bacpac ) CopyToLocation () string {
17+ func (m * dacfx ) CopyToLocation () string {
1818 return "/var/opt/mssql/backup"
1919}
2020
21- func (m * bacpac ) Name () string {
21+ func (m * dacfx ) Name () string {
2222 return "dacfx"
2323}
2424
25- func (m * bacpac ) FileTypes () []string {
25+ func (m * dacfx ) FileTypes () []string {
2626 return []string {"bacpac" , "dacpac" }
2727}
2828
29- func (m * bacpac ) BringOnline (
29+ func (m * dacfx ) BringOnline (
3030 databaseName string ,
3131 containerId string ,
3232 query func (string ),
@@ -36,7 +36,7 @@ func (m *bacpac) BringOnline(
3636 m .installSqlPackage ()
3737 m .setDefaultDatabaseToMaster (options .Username , query )
3838
39- m .RunCommand ([]string {
39+ _ , stderr := m .RunCommand ([]string {
4040 "/home/mssql/.dotnet/tools/sqlpackage" ,
4141 "/Diagnostics:true" ,
4242 "/Action:import" ,
@@ -47,23 +47,40 @@ func (m *bacpac) BringOnline(
4747 "/TargetUser:" + options .Username ,
4848 "/TargetPassword:" + options .Password ,
4949 })
50+
51+ if len (stderr ) == 0 {
52+ // Remove the source bacpac file
53+ m .RunCommandAsRoot ([]string {"rm" , m .CopyToLocation () + "/" + options .Filename })
54+ }
5055}
5156
52- func (m * bacpac ) setDefaultDatabaseToMaster (username string , query func (string )) {
57+ func (m * dacfx ) setDefaultDatabaseToMaster (username string , query func (string )) {
5358 alterDefaultDb := fmt .Sprintf (
5459 "ALTER LOGIN [%s] WITH DEFAULT_DATABASE = [%s]" ,
5560 username ,
5661 "master" )
5762 query (alterDefaultDb )
5863}
5964
60- func (m * bacpac ) installSqlPackage () {
65+ func (m * dacfx ) installSqlPackage () {
6166 if m .controller == nil {
6267 panic ("controller is nil" )
6368 }
6469
70+ m .installDotNet ()
71+
72+ // Check if sqlpackage is installed, if not, install it
73+ _ , stderr := m .RunCommand ([]string {"/home/mssql/.dotnet/tools/sqlpackage" , "/version" })
74+ if len (stderr ) > 0 {
75+ m .RunCommand ([]string {"/opt/dotnet/dotnet" , "tool" , "install" , "-g" , "microsoft.sqlpackage" })
76+ }
77+ }
78+
79+ func (m * dacfx ) installDotNet () {
80+ // Check if dotnet is installed, if not, install it
6581 _ , stderr := m .RunCommand ([]string {"/opt/dotnet/dotnet" , "--version" })
6682 if len (stderr ) > 0 {
83+ // Download dotnet-install.sh and run it
6784 m .RunCommand ([]string {"wget" , "https://dot.net/v1/dotnet-install.sh" , "-O" , "/tmp/dotnet-install.sh" })
6885 m .RunCommand ([]string {"chmod" , "+x" , "/tmp/dotnet-install.sh" })
6986 m .RunCommand ([]string {"/tmp/dotnet-install.sh" , "--install-dir" , "/opt/dotnet" })
@@ -73,23 +90,29 @@ func (m *bacpac) installSqlPackage() {
7390 m .RunCommandAsRoot ([]string {"mkdir" , "-p" , "/home/mssql" })
7491 m .RunCommandAsRoot ([]string {"chown" , "mssql:root" , "/home/mssql" })
7592
76- m .RunCommand ([]string {"/bin/bash" , "-c" , "echo 'export DOTNET_ROOT=/opt/dotnet' > /home/mssql/.bashrc" })
77- m .RunCommand ([]string {"/bin/bash" , "-c" , "echo 'export PATH=$PATH:$DOTNET_ROOT:/home/mssql/.dotnet/tools' >> /home/mssql/.bashrc" })
93+ // Add dotnet to the path
94+ m .AddTextLineToFile (
95+ "export DOTNET_ROOT=/opt/dotnet" ,
96+ "/home/mssql/.bashrc" ,
97+ )
98+ m .AddTextLineToFile (
99+ "export PATH=$PATH:$DOTNET_ROOT:/home/mssql/.dotnet/tools" ,
100+ "/home/mssql/.bashrc" ,
101+ )
78102 }
103+ }
79104
80- _ , stderr = m .RunCommand ([]string {"/home/mssql/.dotnet/tools/sqlpackage" , "/version" })
81- if len (stderr ) > 0 {
82- m .RunCommand ([]string {"/opt/dotnet/dotnet" , "tool" , "install" , "-g" , "microsoft.sqlpackage" })
83- }
105+ func (m * dacfx ) AddTextLineToFile (text string , file string ) ([]byte , []byte ) {
106+ return m .RunCommand ([]string {"/bin/bash" , "-c" , fmt .Sprintf ("echo '%v' >> %v" , text , file )})
84107}
85108
86- func (m * bacpac ) RunCommand (s []string ) ([]byte , []byte ) {
109+ func (m * dacfx ) RunCommand (s []string ) ([]byte , []byte ) {
87110 return m .controller .RunCmdInContainer (m .containerId , s , container.ExecOptions {
88111 Env : []string {"DOTNET_ROOT=/opt/dotnet" },
89112 })
90113}
91114
92- func (m * bacpac ) RunCommandAsRoot (s []string ) ([]byte , []byte ) {
115+ func (m * dacfx ) RunCommandAsRoot (s []string ) ([]byte , []byte ) {
93116 return m .controller .RunCmdInContainer (m .containerId , s , container.ExecOptions {
94117 User : "root" ,
95118 })
0 commit comments