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:
Alan Ren
2020-06-16 20:00:46 -07:00
committed by GitHub
parent 21fd8b22e7
commit c390d62675
12 changed files with 1115 additions and 14 deletions

View File

@@ -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 = [

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View 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

View 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

View File

@@ -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": [
"![Microsoft](https://raw.githubusercontent.com/microsoft/azuredatastudio/master/extensions/resource-deployment/images/microsoft-small-logo.png)\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
}
]
}

View File

@@ -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": [
"![Microsoft](https://raw.githubusercontent.com/microsoft/azuredatastudio/master/extensions/resource-deployment/images/microsoft-small-logo.png)\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
}
]
}

View 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"
}
]
}
}
]
}
}

View 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"
}

View File

@@ -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"
},
{

View File

@@ -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",

View File

@@ -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)}.`);
});