mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-13 17:22:15 -05:00
enable Azure SQL DB Edge deployment in ADS (#10927)
* local deployment * eula update * remote deployment * fix wording * new extension * script * spacing * fix test * loc strings
This commit is contained in:
@@ -209,7 +209,8 @@ const externalExtensions = [
|
||||
'liveshare',
|
||||
'sql-database-projects',
|
||||
'machine-learning',
|
||||
'sql-assessment'
|
||||
'sql-assessment',
|
||||
'asde-deployment'
|
||||
];
|
||||
// extensions that require a rebuild since they have native parts
|
||||
const rebuildExtensions = [
|
||||
|
||||
@@ -244,7 +244,8 @@ const externalExtensions = [
|
||||
'liveshare',
|
||||
'sql-database-projects',
|
||||
'machine-learning',
|
||||
'sql-assessment'
|
||||
'sql-assessment',
|
||||
'asde-deployment'
|
||||
];
|
||||
|
||||
// extensions that require a rebuild since they have native parts
|
||||
|
||||
BIN
extensions/asde-deployment/images/extension.png
Normal file
BIN
extensions/asde-deployment/images/extension.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
80
extensions/asde-deployment/images/sqldb_edge.svg
Normal file
80
extensions/asde-deployment/images/sqldb_edge.svg
Normal file
@@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="50px" height="50px" viewBox="0 0 50 50" enable-background="new 0 0 50 50" xml:space="preserve">
|
||||
<g id="Layer_1_1_" display="none">
|
||||
<circle display="inline" fill="#7FBA00" cx="15" cy="5" r="3.279"/>
|
||||
<circle display="inline" fill="#7FBA00" cx="15" cy="44" r="3.279"/>
|
||||
<path display="inline" fill="#7FBA00" d="M26.56,30.882c0,4.797-4.758,8.279-11.314,8.279c-5.764,0-9.378-2.172-11.035-6.638
|
||||
l5.627-1.06c0.728,1.573,2.336,3.368,5.878,3.368c3.543,0,4.864-2.128,4.864-3.469c0-2.789-3.364-3.756-4.81-4.042
|
||||
c-6.143-1.219-10.491-2.624-10.491-9.658c0-5.775,5.37-7.825,9.968-7.825c5.03,0,8.301,1.663,9.993,5.082l-4.862,1.544
|
||||
c-1.02-1.739-2.761-2.658-5.045-2.658c-3.335,0-4.217,2.299-4.217,3.515c0,1.674,1.67,3.143,4.253,3.742
|
||||
c3.241,0.751,5.516,1.329,6.844,1.888C24.314,23.836,26.56,26.384,26.56,30.882"/>
|
||||
<path display="inline" fill="#7A7B7B" d="M43.893,48.9c-0.536,0-1.04-0.209-1.419-0.588l-7.813-7.81l2.842-2.843l7.812,7.813
|
||||
c0.377,0.381,0.586,0.886,0.586,1.421C45.9,48,45,48.9,43.893,48.9z"/>
|
||||
<path display="inline" opacity="0.4" fill="#1D1D1D" enable-background="new " d="M35.457,41.299l2.842-2.842l1.767,1.767
|
||||
c-0.766,1.12-1.721,2.075-2.842,2.842L35.457,41.299z"/>
|
||||
<circle display="inline" fill="#FFFFFF" cx="27.993" cy="30.993" r="10.418"/>
|
||||
<path display="inline" opacity="0.7" fill="#7FBA00" enable-background="new " d="M19.053,26.775
|
||||
c1.603,0.738,3.646,2.489,3.646,4.579c0,1.186-1.363,3.562-3.468,4.407c0.623,1.803,2.131,3.424,3.438,4.757
|
||||
c4.477-1.619,6.847-5.437,6.847-9.553c0-5.503-3.249-8.62-5.821-9.702C23.488,21.176,19.825,24.168,19.053,26.775z"/>
|
||||
<g display="inline" opacity="0.5">
|
||||
<path fill="#FFFFFF" d="M27.993,22.441c4.715,0,8.552,3.836,8.552,8.552s-3.836,8.552-8.552,8.552s-8.552-3.836-8.552-8.552
|
||||
S23.277,22.441,27.993,22.441 M27.993,21.441c-5.275,0-9.552,4.276-9.552,9.552s4.276,9.552,9.552,9.552s9.552-4.276,9.552-9.552
|
||||
S33.268,21.441,27.993,21.441L27.993,21.441z"/>
|
||||
</g>
|
||||
<path display="inline" fill="#7A7B7B" d="M15.1,31c0,7.125,5.775,12.9,12.9,12.9S40.9,38.125,40.9,31S35.125,18.1,28,18.1
|
||||
S15.1,23.875,15.1,31z M18.441,31c0-5.279,4.279-9.559,9.559-9.559S37.559,25.72,37.559,31S33.28,40.559,28,40.559
|
||||
S18.441,36.279,18.441,31z"/>
|
||||
</g>
|
||||
<path fill="#0072C6" d="M36.5,2.004c0,0-0.073,0-0.075,0c-0.147,0-5.425,0-5.425,0v10.659c0,1.097,2.422,1.988,5.425,2.003v0.001
|
||||
h0.059c0.005,0,0.011,0,0.016,0v0c3.037,0,5.5-0.897,5.5-2.004V2.004H36.5z"/>
|
||||
<path fill="#FFFFFF" d="M42.1,2.2c0,1.215-2.507,2.2-5.6,2.2s-5.6-0.985-5.6-2.2S33.407,0,36.5,0S42.1,0.985,42.1,2.2"/>
|
||||
<path fill="#7FBA00" d="M40.876,2.038c0,0.731-1.959,1.322-4.376,1.322s-4.376-0.592-4.376-1.322c0-0.73,1.959-1.322,4.376-1.322
|
||||
S40.876,1.308,40.876,2.038"/>
|
||||
<path fill="#B8D432" d="M39.959,2.846c0.573-0.223,0.917-0.503,0.917-0.807c0-0.731-1.959-1.322-4.376-1.322
|
||||
c-2.417,0-4.376,0.592-4.376,1.322c0,0.304,0.344,0.584,0.917,0.807c0.8-0.312,2.05-0.514,3.459-0.514
|
||||
C37.909,2.332,39.158,2.534,39.959,2.846"/>
|
||||
<path fill="#59B4D9" d="M42.27,20.488c0.032-0.334,0.052-0.671,0.052-1.012c0-5.985-4.955-10.837-11.067-10.837
|
||||
c-4.736,0-8.766,2.919-10.346,7.016c-1.234-0.441-2.56-0.694-3.949-0.694c-6.367,0-11.528,5.054-11.528,11.289
|
||||
s5.161,11.289,11.528,11.289h23.979c4.839,0,8.761-3.841,8.761-8.58C49.7,24.664,46.475,21.117,42.27,20.488z"/>
|
||||
<path opacity="0.4" fill="#FFFFFF" d="M47.287,23.065C47.287,23.065,47.287,23.065,47.287,23.065
|
||||
c-0.865-0.89-1.922-1.597-3.107-2.06c-0.024-0.009-0.048-0.019-0.072-0.028c-0.389-0.148-0.791-0.272-1.205-0.365
|
||||
c-1.932,3.069-4.847,6.571-8.904,10.161v-2.235h-0.001C33.987,26.54,31.303,24,23.5,24C15.68,24,13,26.552,13,28.552
|
||||
c0,0.212,0,4.79,0,8.288c1.237,0.444,2.567,0.698,3.96,0.698h16.711C39.62,32.934,44.298,27.85,47.287,23.065z"/>
|
||||
<path opacity="0.4" fill="#FFFFFF" d="M30.957,8.649c4.578,1.245,5.735,2.032,9.861,5.388c-0.031-0.053-0.065-0.104-0.097-0.157
|
||||
c-0.192-0.308-0.396-0.603-0.609-0.885c-0.079-0.104-0.155-0.211-0.238-0.311c-0.186-0.229-0.386-0.439-0.586-0.65
|
||||
c-0.312-0.322-0.636-0.633-0.985-0.916c-0.003-0.003-0.007-0.006-0.01-0.008c-1.07-0.864-2.309-1.531-3.66-1.955
|
||||
c-0.058-0.018-0.115-0.036-0.173-0.053c-0.282-0.083-0.569-0.155-0.86-0.217c-0.228-0.046-0.46-0.082-0.694-0.115
|
||||
c-0.179-0.026-0.356-0.061-0.537-0.078c-0.42-0.039-0.848-0.053-1.281-0.049C31.043,8.645,31,8.648,30.957,8.649z"/>
|
||||
<path fill="#0072C6" d="M48.73,8.327c-2.676-3.508-9.064-3.51-16.635-0.647c1.805,0.133,3.485,0.69,4.945,1.569
|
||||
c4.684-1.143,8.087-0.712,9.318,0.902c2.529,3.315-2.066,14.184-15.294,24.355C17.837,44.677,6.188,46.298,3.66,42.983
|
||||
c-1.453-1.906-0.523-6.317,3.019-11.648c-0.567-1.097-0.954-2.296-1.129-3.563c-5.138,6.866-7.037,13.395-4.262,17.035
|
||||
c4.347,5.7,18.492,2.155,31.593-7.919C45.981,26.814,53.077,14.027,48.73,8.327z"/>
|
||||
<path fill="#0072C6" d="M23.5,27.552c0,0,0.127,0,0.13,0c0.253,0,9.37,0,9.37,0v18.896c0,1.945-4.184,3.524-9.37,3.55v0.002h-0.102
|
||||
C23.519,49.999,23.509,50,23.5,50v-0.001c-5.246,0-9.5-1.59-9.5-3.552V27.552H23.5z"/>
|
||||
<path opacity="0.15" fill="#FFFFFF" enable-background="new " d="M23.63,49.999H23.5c-5.246,0-9.5-1.59-9.5-3.552V27.552h9.63
|
||||
V49.999z"/>
|
||||
<path fill="#FFFFFF" d="M33,27.552c0,1.962-4.268,3.552-9.533,3.552s-9.533-1.59-9.533-3.552S18.202,24,23.467,24
|
||||
S33,25.59,33,27.552"/>
|
||||
<path fill="#7FBA00" d="M31.058,27.347c0,1.295-3.384,2.344-7.558,2.344s-7.558-1.049-7.558-2.344c0-1.295,3.384-2.344,7.558-2.344
|
||||
S31.058,26.053,31.058,27.347"/>
|
||||
<path fill="#B8D432" d="M29.474,28.78c0.989-0.396,1.584-0.892,1.584-1.431c0-1.295-3.384-2.344-7.558-2.344
|
||||
c-4.174,0-7.558,1.049-7.558,2.344c0,0.539,0.595,1.035,1.584,1.431c1.382-0.554,3.541-0.911,5.974-0.911
|
||||
C25.933,27.868,28.092,28.226,29.474,28.78"/>
|
||||
<path fill="#FFFFFF" d="M20.439,40.668c0,0.587-0.207,1.042-0.621,1.364c-0.414,0.322-0.986,0.483-1.716,0.483
|
||||
c-0.621,0-1.14-0.115-1.557-0.345v-1.381c0.481,0.42,1.011,0.631,1.59,0.631c0.28,0,0.496-0.058,0.649-0.173
|
||||
s0.229-0.267,0.229-0.458c0-0.187-0.073-0.35-0.22-0.488c-0.147-0.138-0.446-0.317-0.896-0.535
|
||||
c-0.918-0.443-1.376-1.048-1.376-1.813c0-0.555,0.2-1,0.6-1.336c0.4-0.335,0.931-0.503,1.594-0.503c0.587,0,1.074,0.08,1.46,0.238
|
||||
v1.29c-0.405-0.288-0.867-0.432-1.385-0.432c-0.26,0-0.465,0.057-0.616,0.17c-0.151,0.114-0.226,0.266-0.226,0.455
|
||||
c0,0.196,0.061,0.356,0.183,0.481c0.122,0.125,0.371,0.28,0.749,0.464c0.563,0.274,0.963,0.551,1.202,0.833
|
||||
C20.319,39.897,20.439,40.248,20.439,40.668z"/>
|
||||
<path fill="#FFFFFF" d="M26.912,39.703c0,0.728-0.161,1.36-0.483,1.895c-0.322,0.535-0.775,0.91-1.359,1.127l1.745,1.662h-1.762
|
||||
l-1.246-1.437c-0.534-0.02-1.016-0.165-1.446-0.436c-0.429-0.27-0.761-0.641-0.994-1.111s-0.35-0.995-0.35-1.573
|
||||
c0-0.642,0.127-1.213,0.379-1.716c0.253-0.502,0.609-0.889,1.068-1.159c0.459-0.27,0.984-0.406,1.578-0.406
|
||||
c0.553,0,1.049,0.131,1.487,0.393c0.437,0.262,0.777,0.634,1.019,1.118C26.791,38.542,26.912,39.091,26.912,39.703z M25.486,39.781
|
||||
c0-0.627-0.133-1.123-0.399-1.487s-0.629-0.546-1.091-0.546c-0.47,0-0.846,0.183-1.129,0.548c-0.282,0.366-0.424,0.852-0.424,1.459
|
||||
c0,0.604,0.138,1.087,0.415,1.448c0.277,0.361,0.644,0.542,1.103,0.542c0.467,0,0.838-0.175,1.112-0.524
|
||||
C25.349,40.871,25.486,40.391,25.486,39.781z"/>
|
||||
<polygon fill="#FFFFFF" points="31.489,42.408 27.907,42.408 27.907,36.219 29.262,36.219 29.262,41.277 31.489,41.277 "/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.2 KiB |
80
extensions/asde-deployment/images/sqldb_edge_inverse.svg
Normal file
80
extensions/asde-deployment/images/sqldb_edge_inverse.svg
Normal file
@@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="50px" height="50px" viewBox="0 0 50 50" enable-background="new 0 0 50 50" xml:space="preserve">
|
||||
<g id="Layer_1_1_" display="none">
|
||||
<circle display="inline" fill="#7FBA00" cx="15" cy="5" r="3.279"/>
|
||||
<circle display="inline" fill="#7FBA00" cx="15" cy="44" r="3.279"/>
|
||||
<path display="inline" fill="#7FBA00" d="M26.56,30.882c0,4.797-4.758,8.279-11.314,8.279c-5.764,0-9.378-2.172-11.035-6.638
|
||||
l5.627-1.06c0.728,1.573,2.336,3.368,5.878,3.368c3.543,0,4.864-2.128,4.864-3.469c0-2.789-3.364-3.756-4.81-4.042
|
||||
c-6.143-1.219-10.491-2.624-10.491-9.658c0-5.775,5.37-7.825,9.968-7.825c5.03,0,8.301,1.663,9.993,5.082l-4.862,1.544
|
||||
c-1.02-1.739-2.761-2.658-5.045-2.658c-3.335,0-4.217,2.299-4.217,3.515c0,1.674,1.67,3.143,4.253,3.742
|
||||
c3.241,0.751,5.516,1.329,6.844,1.888C24.314,23.836,26.56,26.384,26.56,30.882"/>
|
||||
<path display="inline" fill="#7A7B7B" d="M43.893,48.9c-0.536,0-1.04-0.209-1.419-0.588l-7.813-7.81l2.842-2.843l7.812,7.813
|
||||
c0.377,0.381,0.586,0.886,0.586,1.421C45.9,48,45,48.9,43.893,48.9z"/>
|
||||
<path display="inline" opacity="0.4" fill="#1D1D1D" enable-background="new " d="M35.457,41.299l2.842-2.842l1.767,1.767
|
||||
c-0.766,1.12-1.721,2.075-2.842,2.842L35.457,41.299z"/>
|
||||
<circle display="inline" fill="#FFFFFF" cx="27.993" cy="30.993" r="10.418"/>
|
||||
<path display="inline" opacity="0.7" fill="#7FBA00" enable-background="new " d="M19.053,26.775
|
||||
c1.603,0.738,3.646,2.489,3.646,4.579c0,1.186-1.363,3.562-3.468,4.407c0.623,1.803,2.131,3.424,3.438,4.757
|
||||
c4.477-1.619,6.847-5.437,6.847-9.553c0-5.503-3.249-8.62-5.821-9.702C23.488,21.176,19.825,24.168,19.053,26.775z"/>
|
||||
<g display="inline" opacity="0.5">
|
||||
<path fill="#FFFFFF" d="M27.993,22.441c4.715,0,8.552,3.836,8.552,8.552s-3.836,8.552-8.552,8.552s-8.552-3.836-8.552-8.552
|
||||
S23.277,22.441,27.993,22.441 M27.993,21.441c-5.275,0-9.552,4.276-9.552,9.552s4.276,9.552,9.552,9.552s9.552-4.276,9.552-9.552
|
||||
S33.268,21.441,27.993,21.441L27.993,21.441z"/>
|
||||
</g>
|
||||
<path display="inline" fill="#7A7B7B" d="M15.1,31c0,7.125,5.775,12.9,12.9,12.9S40.9,38.125,40.9,31S35.125,18.1,28,18.1
|
||||
S15.1,23.875,15.1,31z M18.441,31c0-5.279,4.279-9.559,9.559-9.559S37.559,25.72,37.559,31S33.28,40.559,28,40.559
|
||||
S18.441,36.279,18.441,31z"/>
|
||||
</g>
|
||||
<path fill="#0072C6" d="M36.5,2.004c0,0-0.073,0-0.075,0c-0.147,0-5.425,0-5.425,0v10.659c0,1.097,2.422,1.988,5.425,2.003v0.001
|
||||
h0.059c0.005,0,0.011,0,0.016,0v0c3.037,0,5.5-0.897,5.5-2.004V2.004H36.5z"/>
|
||||
<path fill="#FFFFFF" d="M42.1,2.2c0,1.215-2.507,2.2-5.6,2.2s-5.6-0.985-5.6-2.2S33.407,0,36.5,0S42.1,0.985,42.1,2.2"/>
|
||||
<path fill="#7FBA00" d="M40.876,2.038c0,0.731-1.959,1.322-4.376,1.322s-4.376-0.592-4.376-1.322c0-0.73,1.959-1.322,4.376-1.322
|
||||
S40.876,1.308,40.876,2.038"/>
|
||||
<path fill="#B8D432" d="M39.959,2.846c0.573-0.223,0.917-0.503,0.917-0.807c0-0.731-1.959-1.322-4.376-1.322
|
||||
c-2.417,0-4.376,0.592-4.376,1.322c0,0.304,0.344,0.584,0.917,0.807c0.8-0.312,2.05-0.514,3.459-0.514
|
||||
C37.909,2.332,39.158,2.534,39.959,2.846"/>
|
||||
<path fill="#59B4D9" d="M42.27,20.488c0.032-0.334,0.052-0.671,0.052-1.012c0-5.985-4.955-10.837-11.067-10.837
|
||||
c-4.736,0-8.766,2.919-10.346,7.016c-1.234-0.441-2.56-0.694-3.949-0.694c-6.367,0-11.528,5.054-11.528,11.289
|
||||
s5.161,11.289,11.528,11.289h23.979c4.839,0,8.761-3.841,8.761-8.58C49.7,24.664,46.475,21.117,42.27,20.488z"/>
|
||||
<path opacity="0.4" fill="#FFFFFF" d="M47.287,23.065C47.287,23.065,47.287,23.065,47.287,23.065
|
||||
c-0.865-0.89-1.922-1.597-3.107-2.06c-0.024-0.009-0.048-0.019-0.072-0.028c-0.389-0.148-0.791-0.272-1.205-0.365
|
||||
c-1.932,3.069-4.847,6.571-8.904,10.161v-2.235h-0.001C33.987,26.54,31.303,24,23.5,24C15.68,24,13,26.552,13,28.552
|
||||
c0,0.212,0,4.79,0,8.288c1.237,0.444,2.567,0.698,3.96,0.698h16.711C39.62,32.934,44.298,27.85,47.287,23.065z"/>
|
||||
<path opacity="0.4" fill="#FFFFFF" d="M30.957,8.649c4.578,1.245,5.735,2.032,9.861,5.388c-0.031-0.053-0.065-0.104-0.097-0.157
|
||||
c-0.192-0.308-0.396-0.603-0.609-0.885c-0.079-0.104-0.155-0.211-0.238-0.311c-0.186-0.229-0.386-0.439-0.586-0.65
|
||||
c-0.312-0.322-0.636-0.633-0.985-0.916c-0.003-0.003-0.007-0.006-0.01-0.008c-1.07-0.864-2.309-1.531-3.66-1.955
|
||||
c-0.058-0.018-0.115-0.036-0.173-0.053c-0.282-0.083-0.569-0.155-0.86-0.217c-0.228-0.046-0.46-0.082-0.694-0.115
|
||||
c-0.179-0.026-0.356-0.061-0.537-0.078c-0.42-0.039-0.848-0.053-1.281-0.049C31.043,8.645,31,8.648,30.957,8.649z"/>
|
||||
<path fill="#0072C6" d="M48.73,8.327c-2.676-3.508-9.064-3.51-16.635-0.647c1.805,0.133,3.485,0.69,4.945,1.569
|
||||
c4.684-1.143,8.087-0.712,9.318,0.902c2.529,3.315-2.066,14.184-15.294,24.355C17.837,44.677,6.188,46.298,3.66,42.983
|
||||
c-1.453-1.906-0.523-6.317,3.019-11.648c-0.567-1.097-0.954-2.296-1.129-3.563c-5.138,6.866-7.037,13.395-4.262,17.035
|
||||
c4.347,5.7,18.492,2.155,31.593-7.919C45.981,26.814,53.077,14.027,48.73,8.327z"/>
|
||||
<path fill="#0072C6" d="M23.5,27.552c0,0,0.127,0,0.13,0c0.253,0,9.37,0,9.37,0v18.896c0,1.945-4.184,3.524-9.37,3.55v0.002h-0.102
|
||||
C23.519,49.999,23.509,50,23.5,50v-0.001c-5.246,0-9.5-1.59-9.5-3.552V27.552H23.5z"/>
|
||||
<path opacity="0.15" fill="#FFFFFF" enable-background="new " d="M23.63,49.999H23.5c-5.246,0-9.5-1.59-9.5-3.552V27.552h9.63
|
||||
V49.999z"/>
|
||||
<path fill="#FFFFFF" d="M33,27.552c0,1.962-4.268,3.552-9.533,3.552s-9.533-1.59-9.533-3.552S18.202,24,23.467,24
|
||||
S33,25.59,33,27.552"/>
|
||||
<path fill="#7FBA00" d="M31.058,27.347c0,1.295-3.384,2.344-7.558,2.344s-7.558-1.049-7.558-2.344c0-1.295,3.384-2.344,7.558-2.344
|
||||
S31.058,26.053,31.058,27.347"/>
|
||||
<path fill="#B8D432" d="M29.474,28.78c0.989-0.396,1.584-0.892,1.584-1.431c0-1.295-3.384-2.344-7.558-2.344
|
||||
c-4.174,0-7.558,1.049-7.558,2.344c0,0.539,0.595,1.035,1.584,1.431c1.382-0.554,3.541-0.911,5.974-0.911
|
||||
C25.933,27.868,28.092,28.226,29.474,28.78"/>
|
||||
<path fill="#FFFFFF" d="M20.439,40.668c0,0.587-0.207,1.042-0.621,1.364c-0.414,0.322-0.986,0.483-1.716,0.483
|
||||
c-0.621,0-1.14-0.115-1.557-0.345v-1.381c0.481,0.42,1.011,0.631,1.59,0.631c0.28,0,0.496-0.058,0.649-0.173
|
||||
s0.229-0.267,0.229-0.458c0-0.187-0.073-0.35-0.22-0.488c-0.147-0.138-0.446-0.317-0.896-0.535
|
||||
c-0.918-0.443-1.376-1.048-1.376-1.813c0-0.555,0.2-1,0.6-1.336c0.4-0.335,0.931-0.503,1.594-0.503c0.587,0,1.074,0.08,1.46,0.238
|
||||
v1.29c-0.405-0.288-0.867-0.432-1.385-0.432c-0.26,0-0.465,0.057-0.616,0.17c-0.151,0.114-0.226,0.266-0.226,0.455
|
||||
c0,0.196,0.061,0.356,0.183,0.481c0.122,0.125,0.371,0.28,0.749,0.464c0.563,0.274,0.963,0.551,1.202,0.833
|
||||
C20.319,39.897,20.439,40.248,20.439,40.668z"/>
|
||||
<path fill="#FFFFFF" d="M26.912,39.703c0,0.728-0.161,1.36-0.483,1.895c-0.322,0.535-0.775,0.91-1.359,1.127l1.745,1.662h-1.762
|
||||
l-1.246-1.437c-0.534-0.02-1.016-0.165-1.446-0.436c-0.429-0.27-0.761-0.641-0.994-1.111s-0.35-0.995-0.35-1.573
|
||||
c0-0.642,0.127-1.213,0.379-1.716c0.253-0.502,0.609-0.889,1.068-1.159c0.459-0.27,0.984-0.406,1.578-0.406
|
||||
c0.553,0,1.049,0.131,1.487,0.393c0.437,0.262,0.777,0.634,1.019,1.118C26.791,38.542,26.912,39.091,26.912,39.703z M25.486,39.781
|
||||
c0-0.627-0.133-1.123-0.399-1.487s-0.629-0.546-1.091-0.546c-0.47,0-0.846,0.183-1.129,0.548c-0.282,0.366-0.424,0.852-0.424,1.459
|
||||
c0,0.604,0.138,1.087,0.415,1.448c0.277,0.361,0.644,0.542,1.103,0.542c0.467,0,0.838-0.175,1.112-0.524
|
||||
C25.349,40.871,25.486,40.391,25.486,39.781z"/>
|
||||
<polygon fill="#FFFFFF" points="31.489,42.408 27.907,42.408 27.907,36.219 29.262,36.219 29.262,41.277 31.489,41.277 "/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.2 KiB |
@@ -0,0 +1,261 @@
|
||||
{
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"name": "python3",
|
||||
"display_name": "Python 3"
|
||||
},
|
||||
"language_info": {
|
||||
"name": "python",
|
||||
"version": "3.6.6",
|
||||
"mimetype": "text/x-python",
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"pygments_lexer": "ipython3",
|
||||
"nbconvert_exporter": "python",
|
||||
"file_extension": ".py"
|
||||
}
|
||||
},
|
||||
"nbformat_minor": 2,
|
||||
"nbformat": 4,
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"\n",
|
||||
"## Run Azure SQL Edge image locally with Docker\n",
|
||||
"This notebook will use Docker to pull and run the Azure SQL Edge image and connect to it in Azure Data Studio\n",
|
||||
"\n",
|
||||
"### Dependencies\n",
|
||||
"- Docker Engine. For more information, see [Install Docker](https://docs.docker.com/engine/installation/).\n",
|
||||
"\n",
|
||||
"<span style=\"color:red\"><font size=\"3\">Please press the \"Run all\" button to run the notebook</font></span>"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "565693e5-39d7-46cf-b0a1-3aa9945c3eed"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### Check dependencies"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "b9e09157-54b4-4358-90a2-1a54419bd2cc"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"import pandas,sys,getpass,os,json,html,time\n",
|
||||
"pandas_version = pandas.__version__.split('.')\n",
|
||||
"pandas_major = int(pandas_version[0])\n",
|
||||
"pandas_minor = int(pandas_version[1])\n",
|
||||
"pandas_patch = int(pandas_version[2])\n",
|
||||
"if not (pandas_major > 0 or (pandas_major == 0 and pandas_minor > 24) or (pandas_major == 0 and pandas_minor == 24 and pandas_patch >= 2)):\n",
|
||||
" sys.exit('Please upgrade the Notebook dependency before you can proceed, you can do it by running the \"Reinstall Notebook dependencies\" command in command palette (View menu -> Command Palette…).')\n",
|
||||
"\n",
|
||||
"def run_command():\n",
|
||||
" print(\"Executing: \" + cmd)\n",
|
||||
" !{cmd}\n",
|
||||
" if _exit_code != 0:\n",
|
||||
" sys.exit(f'Command execution failed with exit code: {str(_exit_code)}.\\n\\t{cmd}\\n')\n",
|
||||
" print(f'Successfully executed: {cmd}')\n",
|
||||
"\n",
|
||||
"cmd = 'docker version'\n",
|
||||
"run_command()"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "a0a8cd9b-ab0f-4ba2-b568-0c68d950c8bf"
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": 1
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### List existing containers\n",
|
||||
"You can view the ports that have been used by existing containers"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "b5a3c41c-a2c3-44a7-94cc-9f1f61d0151d"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"cmd = f'docker ps -a'\n",
|
||||
"run_command()"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "5a253372-1a98-4b07-a3e0-9ae5f47cb0a5"
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": 2
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### Setting variables"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "7c476b13-05f7-4975-bcb0-8c596bc01e6c"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"env_var_flag = \"AZDATA_NB_VAR_SA_PASSWORD\" in os.environ\n",
|
||||
"password_name = 'SQL Server sa account password'\n",
|
||||
"if env_var_flag:\n",
|
||||
" container_name = os.environ[\"AZDATA_NB_VAR_DOCKER_CONTAINER_NAME\"]\n",
|
||||
" sql_password = os.environ[\"AZDATA_NB_VAR_SA_PASSWORD\"]\n",
|
||||
" sql_port = os.environ[\"AZDATA_NB_VAR_DOCKER_PORT\"]\n",
|
||||
" docker_registry = os.environ[\"AZDATA_NB_VAR_DOCKER_REGISTRY\"]\n",
|
||||
" docker_repository = os.environ[\"AZDATA_NB_VAR_DOCKER_REPOSITORY\"]\n",
|
||||
" docker_imagetag = os.environ[\"AZDATA_NB_VAR_DOCKER_IMAGETAG\"]\n",
|
||||
" docker_username = os.environ[\"AZDATA_NB_VAR_DOCKER_USERNAME\"]\n",
|
||||
" docker_password = os.environ[\"AZDATA_NB_VAR_DOCKER_PASSWORD\"]\n",
|
||||
"else:\n",
|
||||
" container_name = 'SQLEDGE-' + time.strftime(\"%Y%m%d%H%M%S\", time.localtime())\n",
|
||||
" docker_registry = 'mcr.microsoft.com'\n",
|
||||
" docker_repository = 'azure-sql-edge-developer'\n",
|
||||
" docker_imagetag = 'latest'\n",
|
||||
" docker_username = ''\n",
|
||||
" docker_password = ''\n",
|
||||
" sql_password = getpass.getpass(prompt = password_name)\n",
|
||||
" password_confirm = getpass.getpass(prompt = f'Confirm {password_name}')\n",
|
||||
" if sql_password != password_confirm:\n",
|
||||
" sys.exit(f'{password_name} does not match the confirmation password.')\n",
|
||||
" sql_port = input('SQL Server port, default value is 1433')\n",
|
||||
" if len(sql_port) == 0:\n",
|
||||
" sql_port = '1433'\n",
|
||||
"print(f'{password_name}: ******')\n",
|
||||
"print(f'Container name: {container_name}')\n",
|
||||
"print(f'Port: {sql_port}')\n",
|
||||
"print(f'Docker registry: {docker_registry}')\n",
|
||||
"print(f'Docker repository: {docker_repository}')\n",
|
||||
"print(f'Image tag: {docker_imagetag}')"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "c0af4e4e-4232-4a67-9a21-05a4d54fd0f4"
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": 3
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### Pull the container image"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "92acb1bf-590d-426e-a9ee-2643c56dcdbe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"if docker_username != '':\n",
|
||||
" cmd = f'docker login {docker_registry} -u {docker_username} -p {docker_password}'\n",
|
||||
" run_command()\n",
|
||||
"cmd = f'docker pull {docker_registry}/{docker_repository}:{docker_imagetag}'\n",
|
||||
"run_command()"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "58b2156b-da0c-47d5-9706-4bd9f630d28b"
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": 4
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### Start a new container"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "442e71cd-551b-4b37-8b5a-b814efd27908"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"cmd = f'docker run -e ACCEPT_EULA=Y -e \"SA_PASSWORD={sql_password}\" -p {sql_port}:1433 --name {container_name} -d {docker_registry}/{docker_repository}:{docker_imagetag}'\n",
|
||||
"run_command()"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "4cdcf011-06fd-4df4-bd20-3024d0a5ab9d"
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": 5
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### List all the containers"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "072a9d13-4fb1-4114-9637-5255be9fcc81"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"cmd = f'docker ps -a'\n",
|
||||
"run_command()"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "345dc24f-0028-47b4-b35b-aaac047b7a62"
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": 6
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### Connect to SQL Server in Azure Data Studio\n",
|
||||
"It might take a couple minutes for SQL Server to launch"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "c84bc075-f8b2-48a3-bfc7-f07a5b8be7a0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"from IPython.display import *\n",
|
||||
"connectionParameter = '{\"serverName\":\"localhost,' + sql_port + '\",\"providerName\":\"MSSQL\",\"authenticationType\":\"SqlLogin\",\"userName\":\"sa\",\"password\":' + json.dumps(sql_password) + '}'\n",
|
||||
"display(HTML('<br/><a href=\"command:azdata.connect?' + html.escape(connectionParameter)+'\"><font size=\"3\">Click here to connect to SQL Server</font></a><br/>'))"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "187a0067-a04c-4afb-a684-3103bb4522ae"
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": 7
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### Stop and remove the container"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "94322968-02f5-49e5-8ff1-47a9af3c5e83"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"stop_container_command = f'docker stop {container_name}'\n",
|
||||
"remove_container_command = f'docker rm {container_name}'\n",
|
||||
"display(HTML(\"Use this link to: <a href=\\\"command:workbench.action.terminal.focus\\\">open the terminal window in Azure Data Studio</a> and use the links below to paste the command to the terminal.\"))\n",
|
||||
"display(HTML(\"Stop the container: <a href=\\\"command:workbench.action.terminal.sendSequence?%7B%22text%22%3A%22\"+stop_container_command.replace(\" \",\"%20\")+\"%22%7D\\\">\" + stop_container_command + \"</a>\"))\n",
|
||||
"display(HTML(\"Remove the container: <a href=\\\"command:workbench.action.terminal.sendSequence?%7B%22text%22%3A%22\"+remove_container_command.replace(\" \",\"%20\")+\"%22%7D\\\">\" + remove_container_command + \"</a>\"))"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "9b6c34c2-7a47-43f5-971d-ce9768fec587"
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": 8
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,366 @@
|
||||
{
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"name": "python3",
|
||||
"display_name": "Python 3"
|
||||
},
|
||||
"language_info": {
|
||||
"name": "python",
|
||||
"version": "3.6.6",
|
||||
"mimetype": "text/x-python",
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"pygments_lexer": "ipython3",
|
||||
"nbconvert_exporter": "python",
|
||||
"file_extension": ".py"
|
||||
}
|
||||
},
|
||||
"nbformat_minor": 2,
|
||||
"nbformat": 4,
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"\n",
|
||||
"## Run Azure SQL DB Edge image on a remote machine with Docker\n",
|
||||
"This notebook will use SSH to connect to the remote machine, use Docker to pull and run the Azure SQL Edge image and connect to it in Azure Data Studio\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"<span style=\"color:red\"><font size=\"3\">Please press the \"Run all\" button to run the notebook</font></span>"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "565693e5-39d7-46cf-b0a1-3aa9945c3eed"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### Install dependencies"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "b9e09157-54b4-4358-90a2-1a54419bd2cc"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"import pandas,sys,getpass,os,json,html,time\n",
|
||||
"pandas_version = pandas.__version__.split('.')\n",
|
||||
"pandas_major = int(pandas_version[0])\n",
|
||||
"pandas_minor = int(pandas_version[1])\n",
|
||||
"pandas_patch = int(pandas_version[2])\n",
|
||||
"if not (pandas_major > 0 or (pandas_major == 0 and pandas_minor > 24) or (pandas_major == 0 and pandas_minor == 24 and pandas_patch >= 2)):\n",
|
||||
" sys.exit('Please upgrade the Notebook dependency before you can proceed, you can do it by running the \"Reinstall Notebook dependencies\" command in command palette (View menu -> Command Palette…).')\n",
|
||||
"\n",
|
||||
"def run_command():\n",
|
||||
" print(\"Executing: \" + cmd)\n",
|
||||
" !{cmd}\n",
|
||||
" if _exit_code != 0:\n",
|
||||
" sys.exit(f'Command execution failed with exit code: {str(_exit_code)}.\\n\\t{cmd}\\n')\n",
|
||||
" print(f'Successfully executed: {cmd}')\n",
|
||||
"\n",
|
||||
"cmd = 'pip install paramiko'\n",
|
||||
"run_command()"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "a0a8cd9b-ab0f-4ba2-b568-0c68d950c8bf",
|
||||
"tags": [
|
||||
"hide_input"
|
||||
]
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": null
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### Setting variables"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "7c476b13-05f7-4975-bcb0-8c596bc01e6c"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"env_var_flag = \"AZDATA_NB_VAR_SA_PASSWORD\" in os.environ\n",
|
||||
"password_name = 'SQL Server sa account password'\n",
|
||||
"if env_var_flag:\n",
|
||||
" container_name = os.environ[\"AZDATA_NB_VAR_DOCKER_CONTAINER_NAME\"]\n",
|
||||
" sql_password = os.environ[\"AZDATA_NB_VAR_SA_PASSWORD\"]\n",
|
||||
" sql_port = os.environ[\"AZDATA_NB_VAR_DOCKER_PORT\"]\n",
|
||||
" docker_registry = os.environ[\"AZDATA_NB_VAR_DOCKER_REGISTRY\"]\n",
|
||||
" docker_repository = os.environ[\"AZDATA_NB_VAR_DOCKER_REPOSITORY\"]\n",
|
||||
" docker_imagetag = os.environ[\"AZDATA_NB_VAR_DOCKER_IMAGETAG\"]\n",
|
||||
" docker_username = os.environ[\"AZDATA_NB_VAR_DOCKER_USERNAME\"]\n",
|
||||
" docker_password = os.environ[\"AZDATA_NB_VAR_DOCKER_PASSWORD\"]\n",
|
||||
" ssh_target = os.environ[\"AZDATA_NB_VAR_SSH_TARGET\"]\n",
|
||||
" ssh_username = os.environ[\"AZDATA_NB_VAR_SSH_USERNAME\"]\n",
|
||||
" ssh_password = os.environ[\"AZDATA_NB_VAR_SSH_PASSWORD\"]\n",
|
||||
"else:\n",
|
||||
" container_name = 'SQLEDGE-' + time.strftime(\"%Y%m%d%H%M%S\", time.localtime())\n",
|
||||
" docker_registry = 'mcr.microsoft.com'\n",
|
||||
" docker_repository = 'azure-sql-edge-developer'\n",
|
||||
" docker_imagetag = 'latest'\n",
|
||||
" docker_username = ''\n",
|
||||
" docker_password = ''\n",
|
||||
" sql_password = getpass.getpass(prompt = password_name)\n",
|
||||
" password_confirm = getpass.getpass(prompt = f'Confirm {password_name}')\n",
|
||||
" if sql_password != password_confirm:\n",
|
||||
" sys.exit(f'{password_name} does not match the confirmation password.')\n",
|
||||
" sql_port = input('SQL Server port, default value is 1433')\n",
|
||||
" if len(sql_port) == 0:\n",
|
||||
" sql_port = '1433'\n",
|
||||
" ssh_target = input('Remote machine name or address')\n",
|
||||
" ssh_username = input('Username for remote machine')\n",
|
||||
" ssh_password = input('Password for remote machine')\n",
|
||||
"\n",
|
||||
"print(f'{password_name}: ******')\n",
|
||||
"print(f'Remote machine: {ssh_target}')\n",
|
||||
"print(f'Remote machine username: {ssh_username}')\n",
|
||||
"print(f'Container name: {container_name}')\n",
|
||||
"print(f'Port: {sql_port}')\n",
|
||||
"print(f'Docker registry: {docker_registry}')\n",
|
||||
"print(f'Docker repository: {docker_repository}')\n",
|
||||
"print(f'Image tag: {docker_imagetag}')"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "c0af4e4e-4232-4a67-9a21-05a4d54fd0f4",
|
||||
"tags": [
|
||||
"hide_input"
|
||||
]
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": null
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### Log in to remote machine"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "28593625-0d7a-4dd0-b3bc-fdc3a5500d55"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"import paramiko\n",
|
||||
"client = paramiko.SSHClient()\n",
|
||||
"client.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n",
|
||||
"client.connect(ssh_target,username=ssh_username, password=ssh_password)\n",
|
||||
"\n",
|
||||
"def run_command_remote():\n",
|
||||
" stdin, stdout, stderr = client.exec_command(f'bash --login -c \"{cmd}\"')\n",
|
||||
" for line in stdout:\n",
|
||||
" print(line.strip('\\n'))\n",
|
||||
" stderr = stderr.readlines()\n",
|
||||
" if len(stderr) != 0:\n",
|
||||
" for line in stderr:\n",
|
||||
" print(line.strip('\\n'))\n",
|
||||
" sys.exit(f'Command execution failed')\n",
|
||||
" else:\n",
|
||||
" print(f'Command executed successfully')"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "aadaa458-8c23-4b7a-a87e-cb2ee82046cf",
|
||||
"tags": [
|
||||
"hide_input"
|
||||
]
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": null
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### Check dependencies on remote machine"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "20d6ec5d-b706-4086-b583-6175c44740f2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"cmd = 'docker version'\n",
|
||||
"run_command_remote()\n",
|
||||
""
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "f3f3946b-d950-477d-83d6-8bae320f619f",
|
||||
"tags": [
|
||||
"hide_input"
|
||||
]
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": null
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### List all the containers"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "85a12b48-3f7b-4181-bf91-90d3069bd0d8"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"cmd = 'docker ps -a'\n",
|
||||
"run_command_remote()"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "8b2874af-de7e-4a0a-9cad-3be397eaa3e9",
|
||||
"tags": [
|
||||
"hide_input"
|
||||
]
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": null
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### Pull the container image"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "92acb1bf-590d-426e-a9ee-2643c56dcdbe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"if docker_username != '':\n",
|
||||
" cmd = f'docker login {docker_registry} -u {docker_username} -p {docker_password}'\n",
|
||||
" run_command_remote()\n",
|
||||
"cmd = f'docker pull {docker_registry}/{docker_repository}:{docker_imagetag}'\n",
|
||||
"run_command_remote()"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "58b2156b-da0c-47d5-9706-4bd9f630d28b",
|
||||
"tags": [
|
||||
"hide_input"
|
||||
]
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": null
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### Start a new container"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "442e71cd-551b-4b37-8b5a-b814efd27908"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"cmd = f'docker run -e ACCEPT_EULA=Y -e \"SA_PASSWORD={sql_password}\" -p {sql_port}:1433 --name {container_name} -d {docker_registry}/{docker_repository}:{docker_imagetag}'\n",
|
||||
"run_command_remote()"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "4cdcf011-06fd-4df4-bd20-3024d0a5ab9d",
|
||||
"tags": [
|
||||
"hide_input"
|
||||
]
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": null
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### List all the containers"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "072a9d13-4fb1-4114-9637-5255be9fcc81"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"cmd = f'docker ps -a'\n",
|
||||
"run_command_remote()"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "345dc24f-0028-47b4-b35b-aaac047b7a62",
|
||||
"tags": [
|
||||
"hide_input"
|
||||
]
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": null
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### Connect to SQL Server in Azure Data Studio\n",
|
||||
"It might take a couple minutes for SQL Server to launch"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "c84bc075-f8b2-48a3-bfc7-f07a5b8be7a0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"from IPython.display import *\n",
|
||||
"connectionParameter = '{\"serverName\":\"' + ssh_target + ',' + sql_port + '\",\"providerName\":\"MSSQL\",\"authenticationType\":\"SqlLogin\",\"userName\":\"sa\",\"password\":' + json.dumps(sql_password) + '}'\n",
|
||||
"display(HTML('<br/><a href=\"command:azdata.connect?' + html.escape(connectionParameter)+'\"><font size=\"3\">Click here to connect to SQL Server</font></a><br/>'))"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "187a0067-a04c-4afb-a684-3103bb4522ae",
|
||||
"tags": [
|
||||
"hide_input"
|
||||
]
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": null
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"### Stop and remove the container\n",
|
||||
"Please copy the output of this cell into the next empty code cell and run the cell to stop and remove the container"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "94322968-02f5-49e5-8ff1-47a9af3c5e83"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"remove_container_command = f'cmd = f\\'docker rm {container_name}\\'\\nrun_command_remote()'\n",
|
||||
"stop_container_command = f'cmd = f\\'docker stop {container_name}\\'\\nrun_command_remote()'\n",
|
||||
"print(stop_container_command)\n",
|
||||
"print(remove_container_command)"
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "9b6c34c2-7a47-43f5-971d-ce9768fec587",
|
||||
"tags": [
|
||||
"hide_input"
|
||||
]
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": null
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
""
|
||||
],
|
||||
"metadata": {
|
||||
"azdata_cell_guid": "9f2c9d3a-b996-4977-81f5-05a79a2e0e12",
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [],
|
||||
"execution_count": null
|
||||
}
|
||||
]
|
||||
}
|
||||
276
extensions/asde-deployment/package.json
Normal file
276
extensions/asde-deployment/package.json
Normal file
@@ -0,0 +1,276 @@
|
||||
{
|
||||
"name": "asde-deployment",
|
||||
"displayName": "%extension-displayName%",
|
||||
"description": "%extension-description%",
|
||||
"version": "0.1.0",
|
||||
"publisher": "Microsoft",
|
||||
"preview": true,
|
||||
"license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/main/LICENSE.txt",
|
||||
"icon": "images/extension.png",
|
||||
"aiKey": "AIF-444c3af9-8e69-4462-ab49-4191e6ad1916",
|
||||
"engines": {
|
||||
"vscode": "*",
|
||||
"azdata": "*"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Microsoft/azuredatastudio.git"
|
||||
},
|
||||
"forceReload": true,
|
||||
"contributes": {
|
||||
"resourceDeploymentTypes": [
|
||||
{
|
||||
"name": "sql-edge",
|
||||
"enabled": false,
|
||||
"displayName": "%resource-type-sql-edge-display-name%",
|
||||
"description": "%resource-type-sql-edge-description%",
|
||||
"platforms": "*",
|
||||
"icon": {
|
||||
"light": "./images/sqldb_edge.svg",
|
||||
"dark": "./images/sqldb_edge_inverse.svg"
|
||||
},
|
||||
"options": [
|
||||
{
|
||||
"name": "type",
|
||||
"displayName": "%sql-edge-type-display-name%",
|
||||
"values": [
|
||||
{
|
||||
"name": "local",
|
||||
"displayName": "%sql-edge-local-display-name%"
|
||||
},
|
||||
{
|
||||
"name": "remote",
|
||||
"displayName": "%sql-edge-remote-display-name%"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"providers": [
|
||||
{
|
||||
"dialog": {
|
||||
"notebook": "%sql-edge-local-notebook%",
|
||||
"title": "%sql-edge-local-title%",
|
||||
"name": "sql-edge-local-dialog",
|
||||
"tabs": [
|
||||
{
|
||||
"title": "",
|
||||
"sections": [
|
||||
{
|
||||
"title": "",
|
||||
"fields": [
|
||||
{
|
||||
"label": "%docker-container-name-field%",
|
||||
"variableName": "AZDATA_NB_VAR_DOCKER_CONTAINER_NAME",
|
||||
"type": "datetime_text",
|
||||
"defaultValue": "SQLEDGE-",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"label": "%docker-sql-password-field%",
|
||||
"variableName": "AZDATA_NB_VAR_SA_PASSWORD",
|
||||
"type": "sql_password",
|
||||
"userName": "sa",
|
||||
"confirmationRequired": true,
|
||||
"confirmationLabel": "%docker-confirm-sql-password-field%",
|
||||
"defaultValue": "",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"label": "%docker-sql-port-field%",
|
||||
"variableName": "AZDATA_NB_VAR_DOCKER_PORT",
|
||||
"type": "number",
|
||||
"defaultValue": "1433",
|
||||
"required": true,
|
||||
"min": 1,
|
||||
"max": 65535
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "%docker-settings-section-title%",
|
||||
"collapsible": true,
|
||||
"collapsed": true,
|
||||
"fields": [
|
||||
{
|
||||
"label": "%docker-registry-field%",
|
||||
"variableName": "AZDATA_NB_VAR_DOCKER_REGISTRY",
|
||||
"type": "text",
|
||||
"defaultValue": "mcr.microsoft.com",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"label": "%docker-repository-field%",
|
||||
"variableName": "AZDATA_NB_VAR_DOCKER_REPOSITORY",
|
||||
"type": "text",
|
||||
"defaultValue": "azure-sql-edge-developer",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"label": "%docker-imagetag-field%",
|
||||
"variableName": "AZDATA_NB_VAR_DOCKER_IMAGETAG",
|
||||
"type": "text",
|
||||
"defaultValue": "latest",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"label": "%docker-username-field%",
|
||||
"variableName": "AZDATA_NB_VAR_DOCKER_USERNAME",
|
||||
"type": "text",
|
||||
"defaultValue": "",
|
||||
"required": false
|
||||
},
|
||||
{
|
||||
"label": "%docker-password-field%",
|
||||
"variableName": "AZDATA_NB_VAR_DOCKER_PASSWORD",
|
||||
"type": "password",
|
||||
"defaultValue": "",
|
||||
"required": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"requiredTools": [
|
||||
{
|
||||
"name": "docker"
|
||||
}
|
||||
],
|
||||
"when": "type=local"
|
||||
},
|
||||
{
|
||||
"dialog": {
|
||||
"notebook": "%sql-edge-remote-notebook%",
|
||||
"title": "%sql-edge-remote-title%",
|
||||
"name": "sql-edge-remote-dialog",
|
||||
"tabs": [
|
||||
{
|
||||
"title": "",
|
||||
"sections": [
|
||||
{
|
||||
"title": "",
|
||||
"fields": [
|
||||
{
|
||||
"label": "%docker-container-name-field%",
|
||||
"variableName": "AZDATA_NB_VAR_DOCKER_CONTAINER_NAME",
|
||||
"type": "datetime_text",
|
||||
"defaultValue": "SQLEDGE-",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"label": "%docker-sql-password-field%",
|
||||
"variableName": "AZDATA_NB_VAR_SA_PASSWORD",
|
||||
"type": "sql_password",
|
||||
"userName": "sa",
|
||||
"confirmationRequired": true,
|
||||
"confirmationLabel": "%docker-confirm-sql-password-field%",
|
||||
"defaultValue": "",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"label": "%docker-sql-port-field%",
|
||||
"variableName": "AZDATA_NB_VAR_DOCKER_PORT",
|
||||
"type": "number",
|
||||
"defaultValue": "1433",
|
||||
"required": true,
|
||||
"min": 1,
|
||||
"max": 65535
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "%remote-info-section-title%",
|
||||
"collapsible": true,
|
||||
"collapsed": false,
|
||||
"fields": [
|
||||
{
|
||||
"label": "%edge-remote-target-field%",
|
||||
"variableName": "AZDATA_NB_VAR_SSH_TARGET",
|
||||
"type": "text",
|
||||
"defaultValue": "",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"label": "%edge-remote-username-field%",
|
||||
"variableName": "AZDATA_NB_VAR_SSH_USERNAME",
|
||||
"type": "text",
|
||||
"defaultValue": "",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"label": "%edge-remote-password-field%",
|
||||
"variableName": "AZDATA_NB_VAR_SSH_PASSWORD",
|
||||
"type": "password",
|
||||
"defaultValue": "",
|
||||
"required": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "%docker-settings-section-title%",
|
||||
"collapsible": true,
|
||||
"collapsed": true,
|
||||
"fields": [
|
||||
{
|
||||
"label": "%docker-registry-field%",
|
||||
"variableName": "AZDATA_NB_VAR_DOCKER_REGISTRY",
|
||||
"type": "text",
|
||||
"defaultValue": "mcr.microsoft.com",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"label": "%docker-repository-field%",
|
||||
"variableName": "AZDATA_NB_VAR_DOCKER_REPOSITORY",
|
||||
"type": "text",
|
||||
"defaultValue": "azure-sql-edge-developer",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"label": "%docker-imagetag-field%",
|
||||
"variableName": "AZDATA_NB_VAR_DOCKER_IMAGETAG",
|
||||
"type": "text",
|
||||
"defaultValue": "latest",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"label": "%docker-username-field%",
|
||||
"variableName": "AZDATA_NB_VAR_DOCKER_USERNAME",
|
||||
"type": "text",
|
||||
"defaultValue": "",
|
||||
"required": false
|
||||
},
|
||||
{
|
||||
"label": "%docker-password-field%",
|
||||
"variableName": "AZDATA_NB_VAR_DOCKER_PASSWORD",
|
||||
"type": "password",
|
||||
"defaultValue": "",
|
||||
"required": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"requiredTools": [],
|
||||
"when": "type=remote"
|
||||
}
|
||||
],
|
||||
"agreement": {
|
||||
"template": "%edge-agreement%",
|
||||
"links": [
|
||||
{
|
||||
"text": "%microsoft-privacy-statement%",
|
||||
"url": "https://go.microsoft.com/fwlink/?LinkId=853010"
|
||||
},
|
||||
{
|
||||
"text": "%edge-eula%",
|
||||
"url": "https://go.microsoft.com/fwlink/?LinkId=746388"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
30
extensions/asde-deployment/package.nls.json
Normal file
30
extensions/asde-deployment/package.nls.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"extension-displayName": "Azure SQL DB Edge Deployment Extension",
|
||||
"extension-description": "Provides a notebook-based experience to deploy Azure SQL DB Edge",
|
||||
"docker-container-name-field": "Container name",
|
||||
"docker-sql-password-field": "SQL Server password",
|
||||
"docker-confirm-sql-password-field": "Confirm password",
|
||||
"docker-sql-port-field": "Port",
|
||||
"microsoft-privacy-statement": "Microsoft Privacy Statement",
|
||||
"resource-type-sql-edge-display-name": "Azure SQL DB Edge",
|
||||
"resource-type-sql-edge-description": "Deploy Azure SQL DB Edge (Preview)",
|
||||
"sql-edge-type-display-name": "Type",
|
||||
"sql-edge-local-display-name": "Local",
|
||||
"sql-edge-remote-display-name": "Remote",
|
||||
"sql-edge-local-notebook": "./notebooks/edge/deploy-sql-edge-local.ipynb",
|
||||
"sql-edge-local-title": "Deploy Azure SQL DB Edge locally",
|
||||
"docker-settings-section-title": "Docker settings",
|
||||
"docker-registry-field": "Registry",
|
||||
"docker-repository-field": "Repository",
|
||||
"docker-imagetag-field": "Image tag",
|
||||
"docker-username-field": "Username",
|
||||
"docker-password-field": "Password",
|
||||
"edge-agreement": "I accept {0} and {1}.",
|
||||
"edge-eula": "Microsoft SQL Server License Agreement",
|
||||
"sql-edge-remote-notebook": "./notebooks/edge/deploy-sql-edge-remote.ipynb",
|
||||
"sql-edge-remote-title": "Deploy Azure SQL DB Edge on a remote machine",
|
||||
"remote-info-section-title": "Target machine information",
|
||||
"edge-remote-target-field": "Name or IP address",
|
||||
"edge-remote-username-field": "Username",
|
||||
"edge-remote-password-field": "Password"
|
||||
}
|
||||
@@ -291,7 +291,7 @@
|
||||
"template": "%bdc-agreement%",
|
||||
"links": [
|
||||
{
|
||||
"text": "%bdc-agreement-privacy-statement%",
|
||||
"text": "%microsoft-privacy-statement%",
|
||||
"url": "https://go.microsoft.com/fwlink/?LinkId=853010"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
"resource-type-sql-windows-setup-display-name": "SQL Server on Windows",
|
||||
"resource-type-sql-windows-setup-description": "Run SQL Server on Windows, select a version to get started.",
|
||||
"bdc-agreement": "I accept {0}, {1} and {2}.",
|
||||
"bdc-agreement-privacy-statement": "Microsoft Privacy Statement",
|
||||
"microsoft-privacy-statement": "Microsoft Privacy Statement",
|
||||
"bdc-agreement-azdata-eula": "azdata License Terms",
|
||||
"bdc-agreement-bdc-eula": "SQL Server License Terms",
|
||||
"deployment.configuration.title": "Deployment configuration",
|
||||
|
||||
@@ -19,23 +19,29 @@ suite('Resource Type Service Tests', function (): void {
|
||||
const toolsService = new ToolsService(mockPlatformService.object);
|
||||
const notebookService = new NotebookService(mockPlatformService.object, '');
|
||||
const resourceTypeService = new ResourceTypeService(mockPlatformService.object, toolsService, notebookService);
|
||||
// index 0: platform name, index 1: number of expected resource types
|
||||
const platforms: { platform: string; resourceTypeCount: number }[] = [
|
||||
{ platform: 'win32', resourceTypeCount: 3 },
|
||||
{ platform: 'darwin', resourceTypeCount: 2 },
|
||||
{ platform: 'linux', resourceTypeCount: 2 }];
|
||||
const totalResourceTypeCount = 3;
|
||||
// index 0: platform name, index 1: expected resource types
|
||||
const platforms: { platform: string; resourceTypes: string[] }[] = [
|
||||
{
|
||||
platform: 'win32', resourceTypes: ['sql-image', 'sql-bdc', 'sql-windows-setup']
|
||||
},
|
||||
{
|
||||
platform: 'darwin', resourceTypes: ['sql-image', 'sql-bdc']
|
||||
},
|
||||
{
|
||||
platform: 'linux', resourceTypes: ['sql-image', 'sql-bdc']
|
||||
}
|
||||
];
|
||||
platforms.forEach(platformInfo => {
|
||||
mockPlatformService.reset();
|
||||
mockPlatformService.setup(service => service.platform()).returns(() => platformInfo.platform);
|
||||
mockPlatformService.setup(service => service.showErrorMessage(TypeMoq.It.isAnyString()));
|
||||
const resourceTypes = resourceTypeService.getResourceTypes(true);
|
||||
assert.equal(resourceTypes.length, platformInfo.resourceTypeCount, `number of resource types for platform:${platformInfo.resourceTypeCount} does not meet expected value:${resourceTypes.length}.`);
|
||||
const resourceTypes = resourceTypeService.getResourceTypes(true).map(rt => rt.name);
|
||||
for (let i = 0; i < platformInfo.resourceTypes.length; i++) {
|
||||
assert(resourceTypes.indexOf(platformInfo.resourceTypes[i]) !== -1, `resource type '${platformInfo.resourceTypes[i]}' should be available for platform: ${platformInfo.platform}.`);
|
||||
}
|
||||
});
|
||||
|
||||
const allResourceTypes = resourceTypeService.getResourceTypes(false);
|
||||
assert.equal(allResourceTypes.length, totalResourceTypeCount, `number of resource types:${allResourceTypes.length} does not meet expected value:${totalResourceTypeCount}.`);
|
||||
|
||||
const validationErrors = resourceTypeService.validateResourceTypes(allResourceTypes);
|
||||
assert(validationErrors.length === 0, `Validation errors detected in the package.json: ${validationErrors.join(EOL)}.`);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user