diff --git a/docs/.pages.yml b/docs/.pages.yml index 6cca8cbda..67bface41 100644 --- a/docs/.pages.yml +++ b/docs/.pages.yml @@ -1,6 +1,11 @@ nav: + - Researcher Support: + - index.md - Getting_Started - General - Scientific_Computing - Storage - NeSI_Service_Subscriptions + - Research Developer Cloud: + - research_developer_cloud + diff --git a/docs/research_developer_cloud/assets/css/footer.css b/docs/research_developer_cloud/assets/css/footer.css new file mode 100644 index 000000000..14dc199dc --- /dev/null +++ b/docs/research_developer_cloud/assets/css/footer.css @@ -0,0 +1,31 @@ +#new-footer { + font-family: Lato; + font-size: 12px; + font-weight: 400; + background-color: #101010; +} + +#partners { + height: auto; + background-color: #101010; +} + +#partners #logos img { + height: 40px; + margin: 10px; +} + +#partners #logos { + padding: 10px; + text-align: center; +} + +#partners #logos .nesi-footer-logo img { + margin-right: 100px; + height: 60px; +} + +#partners #logos img { + height: 40px; + margin: 10px; +} \ No newline at end of file diff --git a/docs/research_developer_cloud/assets/css/my.css b/docs/research_developer_cloud/assets/css/my.css new file mode 100644 index 000000000..8a0092f21 --- /dev/null +++ b/docs/research_developer_cloud/assets/css/my.css @@ -0,0 +1,42 @@ +/*start Pillar style*/ +.pillarwrapper { + display: flex; + padding: 20px 20px 0px 20px; + } + + .pillarwrapper > div { + flex-grow: 1; + padding: 20px 20px 0px 20px; + height:auto; + overflow:hidden; + transition: ease-in-out 200ms; + /*box-shadow: 0.05rem 0.05rem 0.075rem 0.075rem gainsboro; */ + box-shadow: 0px 10px 10px rgba(30, 30, 30, 0.08); + /*background: linear-gradient(to right bottom, #f7fafc, #fff);*/ + /* background-color: #ffffff; */ + border-collapse: collapse; + cursor: default; /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ + } + + .pillarwrapper > div:first-of-type { margin-right:10px } + .pillarwrapper > div:nth-of-type(2) { margin-right:10px } + .pillarwrapper > div:nth-of-type(3) { } + + .pillarwrapper > h2 { margin-top:0 margin-bottom:0 } + + .pillarwrapper > div:hover { + box-shadow: 0px 10px 20px rgba(30, 30, 30, 0.16); + } + + .pillarcard { + padding-bottom:0px; + width:33vw; + } + .pillarcard img { + opacity: 0.8; + transition: ease-in-out 200ms; + } + .pillarcard:hover img { + opacity: 1.0; + } + /*end Pillar style*/ \ No newline at end of file diff --git a/docs/research_developer_cloud/assets/css/neoteroi-cards.css b/docs/research_developer_cloud/assets/css/neoteroi-cards.css new file mode 100644 index 000000000..5a5152f58 --- /dev/null +++ b/docs/research_developer_cloud/assets/css/neoteroi-cards.css @@ -0,0 +1,102 @@ +.nt-cards.nt-grid { + display: grid; + grid-auto-columns: 1fr; + gap: 0.5rem; + max-width: 100vw; + overflow-x: auto; + padding: 1px; +} +.nt-cards.nt-grid.cols-1 { + grid-template-columns: repeat(1, 1fr); +} +.nt-cards.nt-grid.cols-2 { + grid-template-columns: repeat(2, 1fr); +} +.nt-cards.nt-grid.cols-3 { + grid-template-columns: repeat(3, 1fr); +} +.nt-cards.nt-grid.cols-4 { + grid-template-columns: repeat(4, 1fr); +} +.nt-cards.nt-grid.cols-5 { + grid-template-columns: repeat(5, 1fr); +} +.nt-cards.nt-grid.cols-6 { + grid-template-columns: repeat(6, 1fr); +} + +@media only screen and (max-width: 400px) { + .nt-cards.nt-grid { + grid-template-columns: repeat(1, 1fr) !important; + } +} +.nt-card { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); +} +.nt-card:hover { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.24), 0 3px 1px -2px rgba(0, 0, 0, 0.3), 0 1px 5px 0 rgba(0, 0, 0, 0.22); +} + +[data-md-color-scheme=slate] .nt-card { + box-shadow: 0 2px 2px 0 rgba(4, 40, 33, 0.14), 0 3px 1px -2px rgba(40, 86, 94, 0.47), 0 1px 5px 0 rgba(139, 252, 255, 0.64); +} +[data-md-color-scheme=slate] .nt-card:hover { + box-shadow: 0 2px 2px 0 rgba(0, 255, 206, 0.14), 0 3px 1px -2px rgba(33, 156, 177, 0.47), 0 1px 5px 0 rgba(96, 251, 255, 0.64); +} + +.nt-card > a { + color: var(--md-default-fg-color); +} + +.nt-card > a > div { + cursor: pointer; +} + +.nt-card { + padding: 5px; + margin-bottom: 0.5rem; +} + +.nt-card-title { + font-size: 1rem; + font-weight: bold; + margin: 4px 0 8px 0; + line-height: 22px; +} + +.nt-card-content { + padding: 0.4rem 0.8rem 0.8rem 0.8rem; +} + +.nt-card-text { + font-size: 14px; + padding: 0; + margin: 0; +} + +.nt-card .nt-card-image { + text-align: center; + border-radius: 2px; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; + min-height: 120px; +} + +.nt-card .nt-card-image.tags img { + margin-top: 12px; +} + +.nt-card .nt-card-image img { + height: 105px; + margin-top: 5px; +} + +.nt-card a:hover, +.nt-card a:focus { + color: var(--md-accent-fg-color); +} + +.nt-card h2 { + margin: 0; +} diff --git a/docs/research_developer_cloud/assets/css/neoteroi-gantt.css b/docs/research_developer_cloud/assets/css/neoteroi-gantt.css new file mode 100644 index 000000000..f93f202e1 --- /dev/null +++ b/docs/research_developer_cloud/assets/css/neoteroi-gantt.css @@ -0,0 +1,328 @@ +/** + * Extra CSS for the neoteroi.projects.gantt extension. + * + * https://github.com/Neoteroi/mkdocs-plugins +**/ +:root { + --nt-scrollbar-color: #2751b0; + --nt-plan-actions-height: 24px; + --nt-units-background: #ff9800; + --nt-months-background: #2751b0; + --nt-plan-vertical-line-color: #a3a3a3ad; +} + +.nt-pastello { + --nt-scrollbar-color: #9fb8f4; + --nt-units-background: #f5dc82; + --nt-months-background: #5b7fd1; +} + +[data-md-color-scheme=slate] { + --nt-units-background: #003773; +} +[data-md-color-scheme=slate] .nt-pastello { + --nt-units-background: #3f4997; +} + +.nt-plan-root { + min-height: 200px; + scrollbar-width: 20px; + scrollbar-color: var(--nt-scrollbar-color); + display: flex; +} +.nt-plan-root ::-webkit-scrollbar { + width: 20px; +} +.nt-plan-root ::-webkit-scrollbar-track { + box-shadow: inset 0 0 5px grey; + border-radius: 10px; +} +.nt-plan-root ::-webkit-scrollbar-thumb { + background: var(--nt-scrollbar-color); + border-radius: 10px; +} +.nt-plan-root .nt-plan { + flex: 80%; +} +.nt-plan-root.no-groups .nt-plan-periods { + padding-left: 0; +} +.nt-plan-root.no-groups .nt-plan-group-summary { + display: none; +} +.nt-plan-root .nt-timeline-dot.bigger { + top: -10px; +} +.nt-plan-root .nt-timeline-dot.bigger[title] { + cursor: help; +} + +.nt-plan { + white-space: nowrap; + overflow-x: auto; + display: flex; +} +.nt-plan .ug-timeline-dot { + left: 368px; + top: -8px; + cursor: help; +} + +.months { + display: flex; +} + +.month { + flex: auto; + display: inline-block; + box-shadow: rgba(0, 0, 0, 0.2) 0px 3px 1px -2px, rgba(0, 0, 0, 0.14) 0px 2px 2px 0px, rgba(0, 0, 0, 0.12) 0px 1px 5px 0px inset; + background-color: var(--nt-months-background); + color: white; + text-transform: uppercase; + font-family: Roboto, Helvetica, Arial, sans-serif; + padding: 2px 5px; + font-size: 12px; + border: 1px solid #000; + width: 150px; + border-radius: 8px; +} + +.nt-plan-group-activities { + flex: auto; + position: relative; +} + +.nt-vline { + border-left: 1px dashed var(--nt-plan-vertical-line-color); + height: 100%; + left: 0; + position: absolute; + margin-left: -0.5px; + top: 0; + -webkit-transition: all 0.5s linear !important; + -moz-transition: all 0.5s linear !important; + -ms-transition: all 0.5s linear !important; + -o-transition: all 0.5s linear !important; + transition: all 0.5s linear !important; + z-index: -2; +} + +.nt-plan-activity { + display: flex; + margin: 2px 0; + background-color: rgba(187, 187, 187, 0.2509803922); +} + +.actions { + height: var(--nt-plan-actions-height); +} + +.actions { + position: relative; +} + +.period { + display: inline-block; + height: var(--nt-plan-actions-height); + width: 120px; + position: absolute; + left: 0px; + background: #1da1f2; + border-radius: 5px; + transition: all 0.5s; + cursor: help; + -webkit-transition: width 1s ease-in-out; + -moz-transition: width 1s ease-in-out; + -o-transition: width 1s ease-in-out; + transition: width 1s ease-in-out; +} +.period .nt-tooltip { + display: none; + top: 30px; + position: relative; + padding: 1rem; + text-align: center; + font-size: 12px; +} +.period:hover .nt-tooltip { + display: inline-block; +} + +.period-0 { + left: 340px; + visibility: visible; + background-color: rgb(69, 97, 101); +} + +.period-1 { + left: 40px; + visibility: visible; + background-color: green; +} + +.period-2 { + left: 120px; + visibility: visible; + background-color: pink; + width: 80px; +} + +.period-3 { + left: 190px; + visibility: visible; + background-color: darkred; + width: 150px; +} + +.weeks > span, +.days > span { + height: 25px; +} + +.weeks > span { + display: inline-block; + margin: 0; + padding: 0; + font-weight: bold; +} +.weeks > span .week-text { + font-size: 10px; + position: absolute; + display: inline-block; + padding: 3px 4px; +} + +.days { + z-index: -2; + position: relative; +} + +.day-text { + font-size: 10px; + position: absolute; + display: inline-block; + padding: 3px 4px; +} + +.period span { + font-size: 12px; + vertical-align: top; + margin-left: 4px; + color: black; + background: rgba(255, 255, 255, 0.6588235294); + border-radius: 6px; + padding: 0 4px; +} + +.weeks, +.days { + height: 20px; + display: flex; + box-sizing: content-box; +} + +.months { + display: flex; +} + +.week, +.day { + height: 20px; + position: relative; + border: 1; + flex: auto; + border: 2px solid white; + border-radius: 4px; + background-color: var(--nt-units-background); + cursor: help; +} + +.years { + display: flex; +} + +.year { + text-align: center; + border-right: 1px solid var(--nt-plan-vertical-line-color); + font-weight: bold; +} +.year:first-child { + border-left: 1px solid var(--nt-plan-vertical-line-color); +} +.year:first-child:last-child { + width: 100%; +} + +.quarters { + display: flex; +} + +.quarter { + width: 12.5%; + text-align: center; + border-right: 1px solid var(--nt-plan-vertical-line-color); + font-weight: bold; +} +.quarter:first-child { + border-left: 1px solid var(--nt-plan-vertical-line-color); +} + +.nt-plan-group { + margin: 20px 0; + position: relative; +} + +.nt-plan-group { + display: flex; +} + +.nt-plan-group-summary { + background: #2751b0; + width: 150px; + white-space: normal; + padding: 0.1rem 0.5rem; + border-radius: 5px; + color: #fff; + z-index: 3; +} +.nt-plan-group-summary p { + margin: 0; + padding: 0; + font-size: 0.6rem; + color: #fff; +} + +.nt-plan-group-summary, +.month, +.period, +.week, +.day, +.nt-tooltip { + border: 3px solid white; + box-shadow: 0 2px 3px -1px rgba(0, 0, 0, 0.2), 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); +} + +.nt-plan-periods { + padding-left: 150px; +} + +.months { + z-index: 2; + position: relative; +} + +.weeks { + position: relative; + top: -2px; + z-index: 0; +} + +.month, +.quarter, +.year, +.week, +.day, +.nt-tooltip { + font-family: Roboto, Helvetica, Arial, sans-serif; + box-sizing: border-box; +} diff --git a/docs/research_developer_cloud/assets/css/neoteroi-mkdocs.css b/docs/research_developer_cloud/assets/css/neoteroi-mkdocs.css new file mode 100644 index 000000000..ee7d53a55 --- /dev/null +++ b/docs/research_developer_cloud/assets/css/neoteroi-mkdocs.css @@ -0,0 +1,1399 @@ +/** + * All CSS for the neoteroi.projects.gantt extension. + * + * https://github.com/Neoteroi/mkdocs-plugins +**/ +:root { + --nt-color-0: #CD853F; + --nt-color-1: #B22222; + --nt-color-2: #000080; + --nt-color-3: #4B0082; + --nt-color-4: #3CB371; + --nt-color-5: #D2B48C; + --nt-color-6: #FF00FF; + --nt-color-7: #98FB98; + --nt-color-8: #FFEBCD; + --nt-color-9: #2E8B57; + --nt-color-10: #6A5ACD; + --nt-color-11: #48D1CC; + --nt-color-12: #FFA500; + --nt-color-13: #F4A460; + --nt-color-14: #A52A2A; + --nt-color-15: #FFE4C4; + --nt-color-16: #FF4500; + --nt-color-17: #AFEEEE; + --nt-color-18: #FA8072; + --nt-color-19: #2F4F4F; + --nt-color-20: #FFDAB9; + --nt-color-21: #BC8F8F; + --nt-color-22: #FFC0CB; + --nt-color-23: #00FA9A; + --nt-color-24: #F0FFF0; + --nt-color-25: #FFFACD; + --nt-color-26: #F5F5F5; + --nt-color-27: #FF6347; + --nt-color-28: #FFFFF0; + --nt-color-29: #7FFFD4; + --nt-color-30: #E9967A; + --nt-color-31: #7B68EE; + --nt-color-32: #FFF8DC; + --nt-color-33: #0000CD; + --nt-color-34: #D2691E; + --nt-color-35: #708090; + --nt-color-36: #5F9EA0; + --nt-color-37: #008080; + --nt-color-38: #008000; + --nt-color-39: #FFE4E1; + --nt-color-40: #FFFF00; + --nt-color-41: #FFFAF0; + --nt-color-42: #DCDCDC; + --nt-color-43: #ADFF2F; + --nt-color-44: #ADD8E6; + --nt-color-45: #8B008B; + --nt-color-46: #7FFF00; + --nt-color-47: #800000; + --nt-color-48: #20B2AA; + --nt-color-49: #556B2F; + --nt-color-50: #778899; + --nt-color-51: #E6E6FA; + --nt-color-52: #FFFAFA; + --nt-color-53: #FF7F50; + --nt-color-54: #FF0000; + --nt-color-55: #F5DEB3; + --nt-color-56: #008B8B; + --nt-color-57: #66CDAA; + --nt-color-58: #808000; + --nt-color-59: #FAF0E6; + --nt-color-60: #00BFFF; + --nt-color-61: #C71585; + --nt-color-62: #00FFFF; + --nt-color-63: #8B4513; + --nt-color-64: #F0F8FF; + --nt-color-65: #FAEBD7; + --nt-color-66: #8B0000; + --nt-color-67: #4682B4; + --nt-color-68: #F0E68C; + --nt-color-69: #BDB76B; + --nt-color-70: #A0522D; + --nt-color-71: #FAFAD2; + --nt-color-72: #FFD700; + --nt-color-73: #DEB887; + --nt-color-74: #E0FFFF; + --nt-color-75: #8A2BE2; + --nt-color-76: #32CD32; + --nt-color-77: #87CEFA; + --nt-color-78: #00CED1; + --nt-color-79: #696969; + --nt-color-80: #DDA0DD; + --nt-color-81: #EE82EE; + --nt-color-82: #FFB6C1; + --nt-color-83: #8FBC8F; + --nt-color-84: #D8BFD8; + --nt-color-85: #9400D3; + --nt-color-86: #A9A9A9; + --nt-color-87: #FFFFE0; + --nt-color-88: #FFF5EE; + --nt-color-89: #FFF0F5; + --nt-color-90: #FFDEAD; + --nt-color-91: #800080; + --nt-color-92: #B0E0E6; + --nt-color-93: #9932CC; + --nt-color-94: #DAA520; + --nt-color-95: #F0FFFF; + --nt-color-96: #40E0D0; + --nt-color-97: #00FF7F; + --nt-color-98: #006400; + --nt-color-99: #808080; + --nt-color-100: #87CEEB; + --nt-color-101: #0000FF; + --nt-color-102: #6495ED; + --nt-color-103: #FDF5E6; + --nt-color-104: #B8860B; + --nt-color-105: #BA55D3; + --nt-color-106: #C0C0C0; + --nt-color-107: #000000; + --nt-color-108: #F08080; + --nt-color-109: #B0C4DE; + --nt-color-110: #00008B; + --nt-color-111: #6B8E23; + --nt-color-112: #FFE4B5; + --nt-color-113: #FFA07A; + --nt-color-114: #9ACD32; + --nt-color-115: #FFFFFF; + --nt-color-116: #F5F5DC; + --nt-color-117: #90EE90; + --nt-color-118: #1E90FF; + --nt-color-119: #7CFC00; + --nt-color-120: #FF69B4; + --nt-color-121: #F8F8FF; + --nt-color-122: #F5FFFA; + --nt-color-123: #00FF00; + --nt-color-124: #D3D3D3; + --nt-color-125: #DB7093; + --nt-color-126: #DA70D6; + --nt-color-127: #FF1493; + --nt-color-128: #228B22; + --nt-color-129: #FFEFD5; + --nt-color-130: #4169E1; + --nt-color-131: #191970; + --nt-color-132: #9370DB; + --nt-color-133: #483D8B; + --nt-color-134: #FF8C00; + --nt-color-135: #EEE8AA; + --nt-color-136: #CD5C5C; + --nt-color-137: #DC143C; +} + +:root { + --nt-group-0-main: #000000; + --nt-group-0-dark: #FFFFFF; + --nt-group-0-light: #000000; + --nt-group-0-main-bg: #F44336; + --nt-group-0-dark-bg: #BA000D; + --nt-group-0-light-bg: #FF7961; + --nt-group-1-main: #000000; + --nt-group-1-dark: #FFFFFF; + --nt-group-1-light: #000000; + --nt-group-1-main-bg: #E91E63; + --nt-group-1-dark-bg: #B0003A; + --nt-group-1-light-bg: #FF6090; + --nt-group-2-main: #FFFFFF; + --nt-group-2-dark: #FFFFFF; + --nt-group-2-light: #000000; + --nt-group-2-main-bg: #9C27B0; + --nt-group-2-dark-bg: #6A0080; + --nt-group-2-light-bg: #D05CE3; + --nt-group-3-main: #FFFFFF; + --nt-group-3-dark: #FFFFFF; + --nt-group-3-light: #000000; + --nt-group-3-main-bg: #673AB7; + --nt-group-3-dark-bg: #320B86; + --nt-group-3-light-bg: #9A67EA; + --nt-group-4-main: #FFFFFF; + --nt-group-4-dark: #FFFFFF; + --nt-group-4-light: #000000; + --nt-group-4-main-bg: #3F51B5; + --nt-group-4-dark-bg: #002984; + --nt-group-4-light-bg: #757DE8; + --nt-group-5-main: #000000; + --nt-group-5-dark: #FFFFFF; + --nt-group-5-light: #000000; + --nt-group-5-main-bg: #2196F3; + --nt-group-5-dark-bg: #0069C0; + --nt-group-5-light-bg: #6EC6FF; + --nt-group-6-main: #000000; + --nt-group-6-dark: #FFFFFF; + --nt-group-6-light: #000000; + --nt-group-6-main-bg: #03A9F4; + --nt-group-6-dark-bg: #007AC1; + --nt-group-6-light-bg: #67DAFF; + --nt-group-7-main: #000000; + --nt-group-7-dark: #000000; + --nt-group-7-light: #000000; + --nt-group-7-main-bg: #00BCD4; + --nt-group-7-dark-bg: #008BA3; + --nt-group-7-light-bg: #62EFFF; + --nt-group-8-main: #000000; + --nt-group-8-dark: #FFFFFF; + --nt-group-8-light: #000000; + --nt-group-8-main-bg: #009688; + --nt-group-8-dark-bg: #00675B; + --nt-group-8-light-bg: #52C7B8; + --nt-group-9-main: #000000; + --nt-group-9-dark: #FFFFFF; + --nt-group-9-light: #000000; + --nt-group-9-main-bg: #4CAF50; + --nt-group-9-dark-bg: #087F23; + --nt-group-9-light-bg: #80E27E; + --nt-group-10-main: #000000; + --nt-group-10-dark: #000000; + --nt-group-10-light: #000000; + --nt-group-10-main-bg: #8BC34A; + --nt-group-10-dark-bg: #5A9216; + --nt-group-10-light-bg: #BEF67A; + --nt-group-11-main: #000000; + --nt-group-11-dark: #000000; + --nt-group-11-light: #000000; + --nt-group-11-main-bg: #CDDC39; + --nt-group-11-dark-bg: #99AA00; + --nt-group-11-light-bg: #FFFF6E; + --nt-group-12-main: #000000; + --nt-group-12-dark: #000000; + --nt-group-12-light: #000000; + --nt-group-12-main-bg: #FFEB3B; + --nt-group-12-dark-bg: #C8B900; + --nt-group-12-light-bg: #FFFF72; + --nt-group-13-main: #000000; + --nt-group-13-dark: #000000; + --nt-group-13-light: #000000; + --nt-group-13-main-bg: #FFC107; + --nt-group-13-dark-bg: #C79100; + --nt-group-13-light-bg: #FFF350; + --nt-group-14-main: #000000; + --nt-group-14-dark: #000000; + --nt-group-14-light: #000000; + --nt-group-14-main-bg: #FF9800; + --nt-group-14-dark-bg: #C66900; + --nt-group-14-light-bg: #FFC947; + --nt-group-15-main: #000000; + --nt-group-15-dark: #FFFFFF; + --nt-group-15-light: #000000; + --nt-group-15-main-bg: #FF5722; + --nt-group-15-dark-bg: #C41C00; + --nt-group-15-light-bg: #FF8A50; + --nt-group-16-main: #FFFFFF; + --nt-group-16-dark: #FFFFFF; + --nt-group-16-light: #000000; + --nt-group-16-main-bg: #795548; + --nt-group-16-dark-bg: #4B2C20; + --nt-group-16-light-bg: #A98274; + --nt-group-17-main: #000000; + --nt-group-17-dark: #FFFFFF; + --nt-group-17-light: #000000; + --nt-group-17-main-bg: #9E9E9E; + --nt-group-17-dark-bg: #707070; + --nt-group-17-light-bg: #CFCFCF; + --nt-group-18-main: #000000; + --nt-group-18-dark: #FFFFFF; + --nt-group-18-light: #000000; + --nt-group-18-main-bg: #607D8B; + --nt-group-18-dark-bg: #34515E; + --nt-group-18-light-bg: #8EACBB; +} + +.nt-pastello { + --nt-group-0-main: #000000; + --nt-group-0-dark: #000000; + --nt-group-0-light: #000000; + --nt-group-0-main-bg: #EF9A9A; + --nt-group-0-dark-bg: #BA6B6C; + --nt-group-0-light-bg: #FFCCCB; + --nt-group-1-main: #000000; + --nt-group-1-dark: #000000; + --nt-group-1-light: #000000; + --nt-group-1-main-bg: #F48FB1; + --nt-group-1-dark-bg: #BF5F82; + --nt-group-1-light-bg: #FFC1E3; + --nt-group-2-main: #000000; + --nt-group-2-dark: #000000; + --nt-group-2-light: #000000; + --nt-group-2-main-bg: #CE93D8; + --nt-group-2-dark-bg: #9C64A6; + --nt-group-2-light-bg: #FFC4FF; + --nt-group-3-main: #000000; + --nt-group-3-dark: #000000; + --nt-group-3-light: #000000; + --nt-group-3-main-bg: #B39DDB; + --nt-group-3-dark-bg: #836FA9; + --nt-group-3-light-bg: #E6CEFF; + --nt-group-4-main: #000000; + --nt-group-4-dark: #000000; + --nt-group-4-light: #000000; + --nt-group-4-main-bg: #9FA8DA; + --nt-group-4-dark-bg: #6F79A8; + --nt-group-4-light-bg: #D1D9FF; + --nt-group-5-main: #000000; + --nt-group-5-dark: #000000; + --nt-group-5-light: #000000; + --nt-group-5-main-bg: #90CAF9; + --nt-group-5-dark-bg: #5D99C6; + --nt-group-5-light-bg: #C3FDFF; + --nt-group-6-main: #000000; + --nt-group-6-dark: #000000; + --nt-group-6-light: #000000; + --nt-group-6-main-bg: #81D4FA; + --nt-group-6-dark-bg: #4BA3C7; + --nt-group-6-light-bg: #B6FFFF; + --nt-group-7-main: #000000; + --nt-group-7-dark: #000000; + --nt-group-7-light: #000000; + --nt-group-7-main-bg: #80DEEA; + --nt-group-7-dark-bg: #4BACB8; + --nt-group-7-light-bg: #B4FFFF; + --nt-group-8-main: #000000; + --nt-group-8-dark: #000000; + --nt-group-8-light: #000000; + --nt-group-8-main-bg: #80CBC4; + --nt-group-8-dark-bg: #4F9A94; + --nt-group-8-light-bg: #B2FEF7; + --nt-group-9-main: #000000; + --nt-group-9-dark: #000000; + --nt-group-9-light: #000000; + --nt-group-9-main-bg: #A5D6A7; + --nt-group-9-dark-bg: #75A478; + --nt-group-9-light-bg: #D7FFD9; + --nt-group-10-main: #000000; + --nt-group-10-dark: #000000; + --nt-group-10-light: #000000; + --nt-group-10-main-bg: #C5E1A5; + --nt-group-10-dark-bg: #94AF76; + --nt-group-10-light-bg: #F8FFD7; + --nt-group-11-main: #000000; + --nt-group-11-dark: #000000; + --nt-group-11-light: #000000; + --nt-group-11-main-bg: #E6EE9C; + --nt-group-11-dark-bg: #B3BC6D; + --nt-group-11-light-bg: #FFFFCE; + --nt-group-12-main: #000000; + --nt-group-12-dark: #000000; + --nt-group-12-light: #000000; + --nt-group-12-main-bg: #FFF59D; + --nt-group-12-dark-bg: #CBC26D; + --nt-group-12-light-bg: #FFFFCF; + --nt-group-13-main: #000000; + --nt-group-13-dark: #000000; + --nt-group-13-light: #000000; + --nt-group-13-main-bg: #FFE082; + --nt-group-13-dark-bg: #CAAE53; + --nt-group-13-light-bg: #FFFFB3; + --nt-group-14-main: #000000; + --nt-group-14-dark: #000000; + --nt-group-14-light: #000000; + --nt-group-14-main-bg: #FFCC80; + --nt-group-14-dark-bg: #CA9B52; + --nt-group-14-light-bg: #FFFFB0; + --nt-group-15-main: #000000; + --nt-group-15-dark: #000000; + --nt-group-15-light: #000000; + --nt-group-15-main-bg: #FFAB91; + --nt-group-15-dark-bg: #C97B63; + --nt-group-15-light-bg: #FFDDC1; + --nt-group-16-main: #000000; + --nt-group-16-dark: #000000; + --nt-group-16-light: #000000; + --nt-group-16-main-bg: #BCAAA4; + --nt-group-16-dark-bg: #8C7B75; + --nt-group-16-light-bg: #EFDCD5; + --nt-group-17-main: #000000; + --nt-group-17-dark: #000000; + --nt-group-17-light: #000000; + --nt-group-17-main-bg: #EEEEEE; + --nt-group-17-dark-bg: #BCBCBC; + --nt-group-17-light-bg: #FFFFFF; + --nt-group-18-main: #000000; + --nt-group-18-dark: #000000; + --nt-group-18-light: #000000; + --nt-group-18-main-bg: #B0BEC5; + --nt-group-18-dark-bg: #808E95; + --nt-group-18-light-bg: #E2F1F8; +} + +.nt-group-0 .nt-plan-group-summary, +.nt-group-0 .nt-timeline-dot { + color: var(--nt-group-0-dark); + background-color: var(--nt-group-0-dark-bg); +} +.nt-group-0 .period { + color: var(--nt-group-0-main); + background-color: var(--nt-group-0-main-bg); +} + +.nt-group-1 .nt-plan-group-summary, +.nt-group-1 .nt-timeline-dot { + color: var(--nt-group-1-dark); + background-color: var(--nt-group-1-dark-bg); +} +.nt-group-1 .period { + color: var(--nt-group-1-main); + background-color: var(--nt-group-1-main-bg); +} + +.nt-group-2 .nt-plan-group-summary, +.nt-group-2 .nt-timeline-dot { + color: var(--nt-group-2-dark); + background-color: var(--nt-group-2-dark-bg); +} +.nt-group-2 .period { + color: var(--nt-group-2-main); + background-color: var(--nt-group-2-main-bg); +} + +.nt-group-3 .nt-plan-group-summary, +.nt-group-3 .nt-timeline-dot { + color: var(--nt-group-3-dark); + background-color: var(--nt-group-3-dark-bg); +} +.nt-group-3 .period { + color: var(--nt-group-3-main); + background-color: var(--nt-group-3-main-bg); +} + +.nt-group-4 .nt-plan-group-summary, +.nt-group-4 .nt-timeline-dot { + color: var(--nt-group-4-dark); + background-color: var(--nt-group-4-dark-bg); +} +.nt-group-4 .period { + color: var(--nt-group-4-main); + background-color: var(--nt-group-4-main-bg); +} + +.nt-group-5 .nt-plan-group-summary, +.nt-group-5 .nt-timeline-dot { + color: var(--nt-group-5-dark); + background-color: var(--nt-group-5-dark-bg); +} +.nt-group-5 .period { + color: var(--nt-group-5-main); + background-color: var(--nt-group-5-main-bg); +} + +.nt-group-6 .nt-plan-group-summary, +.nt-group-6 .nt-timeline-dot { + color: var(--nt-group-6-dark); + background-color: var(--nt-group-6-dark-bg); +} +.nt-group-6 .period { + color: var(--nt-group-6-main); + background-color: var(--nt-group-6-main-bg); +} + +.nt-group-7 .nt-plan-group-summary, +.nt-group-7 .nt-timeline-dot { + color: var(--nt-group-7-dark); + background-color: var(--nt-group-7-dark-bg); +} +.nt-group-7 .period { + color: var(--nt-group-7-main); + background-color: var(--nt-group-7-main-bg); +} + +.nt-group-8 .nt-plan-group-summary, +.nt-group-8 .nt-timeline-dot { + color: var(--nt-group-8-dark); + background-color: var(--nt-group-8-dark-bg); +} +.nt-group-8 .period { + color: var(--nt-group-8-main); + background-color: var(--nt-group-8-main-bg); +} + +.nt-group-9 .nt-plan-group-summary, +.nt-group-9 .nt-timeline-dot { + color: var(--nt-group-9-dark); + background-color: var(--nt-group-9-dark-bg); +} +.nt-group-9 .period { + color: var(--nt-group-9-main); + background-color: var(--nt-group-9-main-bg); +} + +.nt-group-10 .nt-plan-group-summary, +.nt-group-10 .nt-timeline-dot { + color: var(--nt-group-10-dark); + background-color: var(--nt-group-10-dark-bg); +} +.nt-group-10 .period { + color: var(--nt-group-10-main); + background-color: var(--nt-group-10-main-bg); +} + +.nt-group-11 .nt-plan-group-summary, +.nt-group-11 .nt-timeline-dot { + color: var(--nt-group-11-dark); + background-color: var(--nt-group-11-dark-bg); +} +.nt-group-11 .period { + color: var(--nt-group-11-main); + background-color: var(--nt-group-11-main-bg); +} + +.nt-group-12 .nt-plan-group-summary, +.nt-group-12 .nt-timeline-dot { + color: var(--nt-group-12-dark); + background-color: var(--nt-group-12-dark-bg); +} +.nt-group-12 .period { + color: var(--nt-group-12-main); + background-color: var(--nt-group-12-main-bg); +} + +.nt-group-13 .nt-plan-group-summary, +.nt-group-13 .nt-timeline-dot { + color: var(--nt-group-13-dark); + background-color: var(--nt-group-13-dark-bg); +} +.nt-group-13 .period { + color: var(--nt-group-13-main); + background-color: var(--nt-group-13-main-bg); +} + +.nt-group-14 .nt-plan-group-summary, +.nt-group-14 .nt-timeline-dot { + color: var(--nt-group-14-dark); + background-color: var(--nt-group-14-dark-bg); +} +.nt-group-14 .period { + color: var(--nt-group-14-main); + background-color: var(--nt-group-14-main-bg); +} + +.nt-group-15 .nt-plan-group-summary, +.nt-group-15 .nt-timeline-dot { + color: var(--nt-group-15-dark); + background-color: var(--nt-group-15-dark-bg); +} +.nt-group-15 .period { + color: var(--nt-group-15-main); + background-color: var(--nt-group-15-main-bg); +} + +.nt-group-16 .nt-plan-group-summary, +.nt-group-16 .nt-timeline-dot { + color: var(--nt-group-16-dark); + background-color: var(--nt-group-16-dark-bg); +} +.nt-group-16 .period { + color: var(--nt-group-16-main); + background-color: var(--nt-group-16-main-bg); +} + +.nt-group-17 .nt-plan-group-summary, +.nt-group-17 .nt-timeline-dot { + color: var(--nt-group-17-dark); + background-color: var(--nt-group-17-dark-bg); +} +.nt-group-17 .period { + color: var(--nt-group-17-main); + background-color: var(--nt-group-17-main-bg); +} + +.nt-group-18 .nt-plan-group-summary, +.nt-group-18 .nt-timeline-dot { + color: var(--nt-group-18-dark); + background-color: var(--nt-group-18-dark-bg); +} +.nt-group-18 .period { + color: var(--nt-group-18-main); + background-color: var(--nt-group-18-main-bg); +} + +/** + * Extra CSS file for MkDocs and the neoteroi.timeline extension. + * + * https://github.com/Neoteroi/mkdocs-plugins +**/ +.nt-error { + border: 2px dashed darkred; + padding: 0 1rem; + background: #faf9ba; + color: darkred; +} + +.nt-timeline { + margin-top: 30px; +} +.nt-timeline .nt-timeline-title { + font-size: 1.1rem; + margin-top: 0; +} +.nt-timeline .nt-timeline-sub-title { + margin-top: 0; +} +.nt-timeline .nt-timeline-content { + font-size: 0.8rem; + border-bottom: 2px dashed #ccc; + padding-bottom: 1.2rem; +} +.nt-timeline.horizontal .nt-timeline-items { + flex-direction: row; + overflow-x: scroll; +} +.nt-timeline.horizontal .nt-timeline-items > div { + min-width: 400px; + margin-right: 50px; +} +.nt-timeline.horizontal.reverse .nt-timeline-items { + flex-direction: row-reverse; +} +.nt-timeline.horizontal.center .nt-timeline-before { + background-image: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%); + background-repeat: no-repeat; + background-size: 100% 2px; + background-position: 0 center; +} +.nt-timeline.horizontal.center .nt-timeline-after { + background-image: linear-gradient(180deg, rgb(252, 70, 107) 0%, rgba(252, 70, 107, 0) 100%); + background-repeat: no-repeat; + background-size: 100% 2px; + background-position: 0 center; +} +.nt-timeline.horizontal.center .nt-timeline-items { + background-image: radial-gradient(circle, rgb(63, 94, 251) 0%, rgb(252, 70, 107) 100%); + background-repeat: no-repeat; + background-size: 100% 2px; + background-position: 0 center; +} +.nt-timeline.horizontal .nt-timeline-dot { + left: 50%; +} +.nt-timeline.horizontal .nt-timeline-dot:not(.bigger) { + top: calc(50% - 4px); +} +.nt-timeline.horizontal .nt-timeline-dot.bigger { + top: calc(50% - 15px); +} +.nt-timeline.vertical .nt-timeline-items { + flex-direction: column; +} +.nt-timeline.vertical.reverse .nt-timeline-items { + flex-direction: column-reverse; +} +.nt-timeline.vertical.center .nt-timeline-before { + background: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%) no-repeat center/2px 100%; +} +.nt-timeline.vertical.center .nt-timeline-after { + background: linear-gradient(rgb(252, 70, 107) 0%, rgba(252, 70, 107, 0) 100%) no-repeat center/2px 100%; +} +.nt-timeline.vertical.center .nt-timeline-items { + background: radial-gradient(circle, rgb(63, 94, 251) 0%, rgb(252, 70, 107) 100%) no-repeat center/2px 100%; +} +.nt-timeline.vertical.center .nt-timeline-dot { + left: calc(50% - 10px); +} +.nt-timeline.vertical.center .nt-timeline-dot:not(.bigger) { + top: 10px; +} +.nt-timeline.vertical.center .nt-timeline-dot.bigger { + left: calc(50% - 20px); +} +.nt-timeline.vertical.left { + padding-left: 100px; +} +.nt-timeline.vertical.left .nt-timeline-item { + padding-left: 70px; +} +.nt-timeline.vertical.left .nt-timeline-sub-title { + left: -100px; + width: 100px; +} +.nt-timeline.vertical.left .nt-timeline-before { + background: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%) no-repeat 30px/2px 100%; +} +.nt-timeline.vertical.left .nt-timeline-after { + background: linear-gradient(rgb(252, 70, 107) 0%, rgba(252, 70, 107, 0) 100%) no-repeat 30px/2px 100%; +} +.nt-timeline.vertical.left .nt-timeline-items { + background: radial-gradient(circle, rgb(63, 94, 251) 0%, rgb(252, 70, 107) 100%) no-repeat 30px/2px 100%; +} +.nt-timeline.vertical.left .nt-timeline-dot { + left: 21px; + top: 8px; +} +.nt-timeline.vertical.left .nt-timeline-dot.bigger { + top: 0px; + left: 10px; +} +.nt-timeline.vertical.right { + padding-right: 100px; +} +.nt-timeline.vertical.right .nt-timeline-sub-title { + right: -100px; + text-align: left; + width: 100px; +} +.nt-timeline.vertical.right .nt-timeline-item { + padding-right: 70px; +} +.nt-timeline.vertical.right .nt-timeline-before { + background: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%) no-repeat calc(100% - 30px)/2px 100%; +} +.nt-timeline.vertical.right .nt-timeline-after { + background: linear-gradient(rgb(252, 70, 107) 0%, rgba(252, 70, 107, 0) 100%) no-repeat calc(100% - 30px)/2px 100%; +} +.nt-timeline.vertical.right .nt-timeline-items { + background: radial-gradient(circle, rgb(63, 94, 251) 0%, rgb(252, 70, 107) 100%) no-repeat calc(100% - 30px)/2px 100%; +} +.nt-timeline.vertical.right .nt-timeline-dot { + right: 21px; + top: 8px; +} +.nt-timeline.vertical.right .nt-timeline-dot.bigger { + top: 10px; + right: 10px; +} + +.nt-timeline-items { + display: flex; + position: relative; +} +.nt-timeline-items > div { + min-height: 100px; + padding-top: 2px; + padding-bottom: 20px; +} + +.nt-timeline-before { + content: ""; + height: 15px; +} + +.nt-timeline-after { + content: ""; + height: 60px; + margin-bottom: 20px; +} + +.nt-timeline-sub-title { + position: absolute; + width: 50%; + top: 4px; + font-size: 18px; + color: var(--nt-color-50); +} + +[data-md-color-scheme=slate] .nt-timeline-sub-title { + color: var(--nt-color-51); +} + +.nt-timeline-item { + position: relative; +} + +.nt-timeline.vertical.center:not(.alternate) .nt-timeline-item { + padding-left: calc(50% + 40px); +} +.nt-timeline.vertical.center:not(.alternate) .nt-timeline-item .nt-timeline-sub-title { + left: 0; + padding-right: 40px; + text-align: right; +} +.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(odd) { + padding-left: calc(50% + 40px); +} +.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(odd) .nt-timeline-sub-title { + left: 0; + padding-right: 40px; + text-align: right; +} +.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(even) { + text-align: right; + padding-right: calc(50% + 40px); +} +.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(even) .nt-timeline-sub-title { + right: 0; + padding-left: 40px; + text-align: left; +} + +.nt-timeline-dot { + position: relative; + width: 20px; + height: 20px; + border-radius: 100%; + background-color: #fc5b5b; + position: absolute; + top: 0px; + z-index: 2; + display: flex; + justify-content: center; + align-items: center; + box-shadow: 0 2px 1px -1px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 1px 3px 0 rgba(0, 0, 0, 0.12); + border: 3px solid white; +} +.nt-timeline-dot:not(.bigger) .icon { + font-size: 10px; +} +.nt-timeline-dot.bigger { + width: 40px; + height: 40px; + padding: 3px; +} +.nt-timeline-dot .icon { + color: white; +} + +/* Fix for webkit (Chrome, Safari) */ +@supports not (-moz-appearance: none) { + /* + This fix is necessary, for some reason, to render the timeline properly + inside `details` elements used by pymdownx. Firefox doesn't need this fix, + it renders elements properly. + */ + details .nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(odd) .nt-timeline-sub-title, +details .nt-timeline.vertical.center:not(.alternate) .nt-timeline-item .nt-timeline-sub-title { + left: -40px; + } + details .nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(even) .nt-timeline-sub-title { + right: -40px; + } + details .nt-timeline.vertical.center .nt-timeline-dot { + left: calc(50% - 12px); + } + details .nt-timeline-dot.bigger { + font-size: 1rem !important; + } +} +/* default colors */ +.nt-timeline-item:nth-child(0) .nt-timeline-dot { + background-color: var(--nt-color-0); +} + +.nt-timeline-item:nth-child(1) .nt-timeline-dot { + background-color: var(--nt-color-1); +} + +.nt-timeline-item:nth-child(2) .nt-timeline-dot { + background-color: var(--nt-color-2); +} + +.nt-timeline-item:nth-child(3) .nt-timeline-dot { + background-color: var(--nt-color-3); +} + +.nt-timeline-item:nth-child(4) .nt-timeline-dot { + background-color: var(--nt-color-4); +} + +.nt-timeline-item:nth-child(5) .nt-timeline-dot { + background-color: var(--nt-color-5); +} + +.nt-timeline-item:nth-child(6) .nt-timeline-dot { + background-color: var(--nt-color-6); +} + +.nt-timeline-item:nth-child(7) .nt-timeline-dot { + background-color: var(--nt-color-7); +} + +.nt-timeline-item:nth-child(8) .nt-timeline-dot { + background-color: var(--nt-color-8); +} + +.nt-timeline-item:nth-child(9) .nt-timeline-dot { + background-color: var(--nt-color-9); +} + +.nt-timeline-item:nth-child(10) .nt-timeline-dot { + background-color: var(--nt-color-10); +} + +.nt-timeline-item:nth-child(11) .nt-timeline-dot { + background-color: var(--nt-color-11); +} + +.nt-timeline-item:nth-child(12) .nt-timeline-dot { + background-color: var(--nt-color-12); +} + +.nt-timeline-item:nth-child(13) .nt-timeline-dot { + background-color: var(--nt-color-13); +} + +.nt-timeline-item:nth-child(14) .nt-timeline-dot { + background-color: var(--nt-color-14); +} + +.nt-timeline-item:nth-child(15) .nt-timeline-dot { + background-color: var(--nt-color-15); +} + +.nt-timeline-item:nth-child(16) .nt-timeline-dot { + background-color: var(--nt-color-16); +} + +.nt-timeline-item:nth-child(17) .nt-timeline-dot { + background-color: var(--nt-color-17); +} + +.nt-timeline-item:nth-child(18) .nt-timeline-dot { + background-color: var(--nt-color-18); +} + +.nt-timeline-item:nth-child(19) .nt-timeline-dot { + background-color: var(--nt-color-19); +} + +.nt-timeline-item:nth-child(20) .nt-timeline-dot { + background-color: var(--nt-color-20); +} + +/** + * Extra CSS for the neoteroi.projects.gantt extension. + * + * https://github.com/Neoteroi/mkdocs-plugins +**/ +:root { + --nt-scrollbar-color: #2751b0; + --nt-plan-actions-height: 24px; + --nt-units-background: #ff9800; + --nt-months-background: #2751b0; + --nt-plan-vertical-line-color: #a3a3a3ad; +} + +.nt-pastello { + --nt-scrollbar-color: #9fb8f4; + --nt-units-background: #f5dc82; + --nt-months-background: #5b7fd1; +} + +[data-md-color-scheme=slate] { + --nt-units-background: #003773; +} +[data-md-color-scheme=slate] .nt-pastello { + --nt-units-background: #3f4997; +} + +.nt-plan-root { + min-height: 200px; + scrollbar-width: 20px; + scrollbar-color: var(--nt-scrollbar-color); + display: flex; +} +.nt-plan-root ::-webkit-scrollbar { + width: 20px; +} +.nt-plan-root ::-webkit-scrollbar-track { + box-shadow: inset 0 0 5px grey; + border-radius: 10px; +} +.nt-plan-root ::-webkit-scrollbar-thumb { + background: var(--nt-scrollbar-color); + border-radius: 10px; +} +.nt-plan-root .nt-plan { + flex: 80%; +} +.nt-plan-root.no-groups .nt-plan-periods { + padding-left: 0; +} +.nt-plan-root.no-groups .nt-plan-group-summary { + display: none; +} +.nt-plan-root .nt-timeline-dot.bigger { + top: -10px; +} +.nt-plan-root .nt-timeline-dot.bigger[title] { + cursor: help; +} + +.nt-plan { + white-space: nowrap; + overflow-x: auto; + display: flex; +} +.nt-plan .ug-timeline-dot { + left: 368px; + top: -8px; + cursor: help; +} + +.months { + display: flex; +} + +.month { + flex: auto; + display: inline-block; + box-shadow: rgba(0, 0, 0, 0.2) 0px 3px 1px -2px, rgba(0, 0, 0, 0.14) 0px 2px 2px 0px, rgba(0, 0, 0, 0.12) 0px 1px 5px 0px inset; + background-color: var(--nt-months-background); + color: white; + text-transform: uppercase; + font-family: Roboto, Helvetica, Arial, sans-serif; + padding: 2px 5px; + font-size: 12px; + border: 1px solid #000; + width: 150px; + border-radius: 8px; +} + +.nt-plan-group-activities { + flex: auto; + position: relative; +} + +.nt-vline { + border-left: 1px dashed var(--nt-plan-vertical-line-color); + height: 100%; + left: 0; + position: absolute; + margin-left: -0.5px; + top: 0; + -webkit-transition: all 0.5s linear !important; + -moz-transition: all 0.5s linear !important; + -ms-transition: all 0.5s linear !important; + -o-transition: all 0.5s linear !important; + transition: all 0.5s linear !important; + z-index: -2; +} + +.nt-plan-activity { + display: flex; + margin: 2px 0; + background-color: rgba(187, 187, 187, 0.2509803922); +} + +.actions { + height: var(--nt-plan-actions-height); +} + +.actions { + position: relative; +} + +.period { + display: inline-block; + height: var(--nt-plan-actions-height); + width: 120px; + position: absolute; + left: 0px; + background: #1da1f2; + border-radius: 5px; + transition: all 0.5s; + cursor: help; + -webkit-transition: width 1s ease-in-out; + -moz-transition: width 1s ease-in-out; + -o-transition: width 1s ease-in-out; + transition: width 1s ease-in-out; +} +.period .nt-tooltip { + display: none; + top: 30px; + position: relative; + padding: 1rem; + text-align: center; + font-size: 12px; +} +.period:hover .nt-tooltip { + display: inline-block; +} + +.period-0 { + left: 340px; + visibility: visible; + background-color: rgb(69, 97, 101); +} + +.period-1 { + left: 40px; + visibility: visible; + background-color: green; +} + +.period-2 { + left: 120px; + visibility: visible; + background-color: pink; + width: 80px; +} + +.period-3 { + left: 190px; + visibility: visible; + background-color: darkred; + width: 150px; +} + +.weeks > span, +.days > span { + height: 25px; +} + +.weeks > span { + display: inline-block; + margin: 0; + padding: 0; + font-weight: bold; +} +.weeks > span .week-text { + font-size: 10px; + position: absolute; + display: inline-block; + padding: 3px 4px; +} + +.days { + z-index: -2; + position: relative; +} + +.day-text { + font-size: 10px; + position: absolute; + display: inline-block; + padding: 3px 4px; +} + +.period span { + font-size: 12px; + vertical-align: top; + margin-left: 4px; + color: black; + background: rgba(255, 255, 255, 0.6588235294); + border-radius: 6px; + padding: 0 4px; +} + +.weeks, +.days { + height: 20px; + display: flex; + box-sizing: content-box; +} + +.months { + display: flex; +} + +.week, +.day { + height: 20px; + position: relative; + border: 1; + flex: auto; + border: 2px solid white; + border-radius: 4px; + background-color: var(--nt-units-background); + cursor: help; +} + +.years { + display: flex; +} + +.year { + text-align: center; + border-right: 1px solid var(--nt-plan-vertical-line-color); + font-weight: bold; +} +.year:first-child { + border-left: 1px solid var(--nt-plan-vertical-line-color); +} +.year:first-child:last-child { + width: 100%; +} + +.quarters { + display: flex; +} + +.quarter { + width: 12.5%; + text-align: center; + border-right: 1px solid var(--nt-plan-vertical-line-color); + font-weight: bold; +} +.quarter:first-child { + border-left: 1px solid var(--nt-plan-vertical-line-color); +} + +.nt-plan-group { + margin: 20px 0; + position: relative; +} + +.nt-plan-group { + display: flex; +} + +.nt-plan-group-summary { + background: #2751b0; + width: 150px; + white-space: normal; + padding: 0.1rem 0.5rem; + border-radius: 5px; + color: #fff; + z-index: 3; +} +.nt-plan-group-summary p { + margin: 0; + padding: 0; + font-size: 0.6rem; + color: #fff; +} + +.nt-plan-group-summary, +.month, +.period, +.week, +.day, +.nt-tooltip { + border: 3px solid white; + box-shadow: 0 2px 3px -1px rgba(0, 0, 0, 0.2), 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); +} + +.nt-plan-periods { + padding-left: 150px; +} + +.months { + z-index: 2; + position: relative; +} + +.weeks { + position: relative; + top: -2px; + z-index: 0; +} + +.month, +.quarter, +.year, +.week, +.day, +.nt-tooltip { + font-family: Roboto, Helvetica, Arial, sans-serif; + box-sizing: border-box; +} + +.nt-cards.nt-grid { + display: grid; + grid-auto-columns: 1fr; + gap: 0.5rem; + max-width: 100vw; + overflow-x: auto; + padding: 1px; +} +.nt-cards.nt-grid.cols-1 { + grid-template-columns: repeat(1, 1fr); +} +.nt-cards.nt-grid.cols-2 { + grid-template-columns: repeat(2, 1fr); +} +.nt-cards.nt-grid.cols-3 { + grid-template-columns: repeat(3, 1fr); +} +.nt-cards.nt-grid.cols-4 { + grid-template-columns: repeat(4, 1fr); +} +.nt-cards.nt-grid.cols-5 { + grid-template-columns: repeat(5, 1fr); +} +.nt-cards.nt-grid.cols-6 { + grid-template-columns: repeat(6, 1fr); +} + +@media only screen and (max-width: 400px) { + .nt-cards.nt-grid { + grid-template-columns: repeat(1, 1fr) !important; + } +} +.nt-card { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); +} +.nt-card:hover { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.24), 0 3px 1px -2px rgba(0, 0, 0, 0.3), 0 1px 5px 0 rgba(0, 0, 0, 0.22); +} + +[data-md-color-scheme=slate] .nt-card { + box-shadow: 0 2px 2px 0 rgba(4, 40, 33, 0.14), 0 3px 1px -2px rgba(40, 86, 94, 0.47), 0 1px 5px 0 rgba(139, 252, 255, 0.64); +} +[data-md-color-scheme=slate] .nt-card:hover { + box-shadow: 0 2px 2px 0 rgba(0, 255, 206, 0.14), 0 3px 1px -2px rgba(33, 156, 177, 0.47), 0 1px 5px 0 rgba(96, 251, 255, 0.64); +} + +.nt-card > a { + color: var(--md-default-fg-color); +} + +.nt-card > a > div { + cursor: pointer; +} + +.nt-card { + padding: 5px; + margin-bottom: 0.5rem; +} + +.nt-card-title { + font-size: 1rem; + font-weight: bold; + margin: 4px 0 8px 0; + line-height: 22px; +} + +.nt-card-content { + padding: 0.4rem 0.8rem 0.8rem 0.8rem; +} + +.nt-card-text { + font-size: 14px; + padding: 0; + margin: 0; +} + +.nt-card .nt-card-image { + text-align: center; + border-radius: 2px; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; + min-height: 120px; +} + +.nt-card .nt-card-image.tags img { + margin-top: 12px; +} + +.nt-card .nt-card-image img { + height: 105px; + margin-top: 5px; +} + +.nt-card a:hover, +.nt-card a:focus { + color: var(--md-accent-fg-color); +} + +.nt-card h2 { + margin: 0; +} + +/** + * Extra CSS file recommended for MkDocs and neoteroi.spantable extension. + * + * https://github.com/Neoteroi/mkdocs-plugins +**/ +.span-table-wrapper table { + border-collapse: collapse; + margin-bottom: 2rem; + border-radius: 0.1rem; +} + +.span-table td, +.span-table th { + padding: 0.2rem; + background-color: var(--md-default-bg-color); + font-size: 0.64rem; + max-width: 100%; + overflow: auto; + touch-action: auto; + border-top: 0.05rem solid var(--md-typeset-table-color); + padding: 0.9375em 1.25em; + vertical-align: top; +} + +.span-table tr:first-child td { + font-weight: 700; + min-width: 5rem; + padding: 0.9375em 1.25em; + vertical-align: top; +} + +.span-table td:first-child { + border-left: 0.05rem solid var(--md-typeset-table-color); +} + +.span-table td:last-child { + border-right: 0.05rem solid var(--md-typeset-table-color); +} + +.span-table tr:last-child { + border-bottom: 0.05rem solid var(--md-typeset-table-color); +} + +.span-table [colspan], +.span-table [rowspan] { + font-weight: bold; + border: 0.05rem solid var(--md-typeset-table-color); +} + +.span-table tr:not(:first-child):hover td:not([colspan]):not([rowspan]), +.span-table td[colspan]:hover, +.span-table td[rowspan]:hover { + background-color: rgba(0, 0, 0, 0.035); + box-shadow: 0 0.05rem 0 var(--md-default-bg-color) inset; + transition: background-color 125ms; +} diff --git a/docs/research_developer_cloud/assets/css/neoteroi-spantable.css b/docs/research_developer_cloud/assets/css/neoteroi-spantable.css new file mode 100644 index 000000000..be069a853 --- /dev/null +++ b/docs/research_developer_cloud/assets/css/neoteroi-spantable.css @@ -0,0 +1,56 @@ +/** + * Extra CSS file recommended for MkDocs and neoteroi.spantable extension. + * + * https://github.com/Neoteroi/mkdocs-plugins +**/ +.span-table-wrapper table { + border-collapse: collapse; + margin-bottom: 2rem; + border-radius: 0.1rem; +} + +.span-table td, +.span-table th { + padding: 0.2rem; + background-color: var(--md-default-bg-color); + font-size: 0.64rem; + max-width: 100%; + overflow: auto; + touch-action: auto; + border-top: 0.05rem solid var(--md-typeset-table-color); + padding: 0.9375em 1.25em; + vertical-align: top; +} + +.span-table tr:first-child td { + font-weight: 700; + min-width: 5rem; + padding: 0.9375em 1.25em; + vertical-align: top; +} + +.span-table td:first-child { + border-left: 0.05rem solid var(--md-typeset-table-color); +} + +.span-table td:last-child { + border-right: 0.05rem solid var(--md-typeset-table-color); +} + +.span-table tr:last-child { + border-bottom: 0.05rem solid var(--md-typeset-table-color); +} + +.span-table [colspan], +.span-table [rowspan] { + font-weight: bold; + border: 0.05rem solid var(--md-typeset-table-color); +} + +.span-table tr:not(:first-child):hover td:not([colspan]):not([rowspan]), +.span-table td[colspan]:hover, +.span-table td[rowspan]:hover { + background-color: rgba(0, 0, 0, 0.035); + box-shadow: 0 0.05rem 0 var(--md-default-bg-color) inset; + transition: background-color 125ms; +} diff --git a/docs/research_developer_cloud/assets/css/neoteroi-timeline.css b/docs/research_developer_cloud/assets/css/neoteroi-timeline.css new file mode 100644 index 000000000..68220895f --- /dev/null +++ b/docs/research_developer_cloud/assets/css/neoteroi-timeline.css @@ -0,0 +1,340 @@ +/** + * Extra CSS file for MkDocs and the neoteroi.timeline extension. + * + * https://github.com/Neoteroi/mkdocs-plugins +**/ +.nt-error { + border: 2px dashed darkred; + padding: 0 1rem; + background: #faf9ba; + color: darkred; +} + +.nt-timeline { + margin-top: 30px; +} +.nt-timeline .nt-timeline-title { + font-size: 1.1rem; + margin-top: 0; +} +.nt-timeline .nt-timeline-sub-title { + margin-top: 0; +} +.nt-timeline .nt-timeline-content { + font-size: 0.8rem; + border-bottom: 2px dashed #ccc; + padding-bottom: 1.2rem; +} +.nt-timeline.horizontal .nt-timeline-items { + flex-direction: row; + overflow-x: scroll; +} +.nt-timeline.horizontal .nt-timeline-items > div { + min-width: 400px; + margin-right: 50px; +} +.nt-timeline.horizontal.reverse .nt-timeline-items { + flex-direction: row-reverse; +} +.nt-timeline.horizontal.center .nt-timeline-before { + background-image: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%); + background-repeat: no-repeat; + background-size: 100% 2px; + background-position: 0 center; +} +.nt-timeline.horizontal.center .nt-timeline-after { + background-image: linear-gradient(180deg, rgb(252, 70, 107) 0%, rgba(252, 70, 107, 0) 100%); + background-repeat: no-repeat; + background-size: 100% 2px; + background-position: 0 center; +} +.nt-timeline.horizontal.center .nt-timeline-items { + background-image: radial-gradient(circle, rgb(63, 94, 251) 0%, rgb(252, 70, 107) 100%); + background-repeat: no-repeat; + background-size: 100% 2px; + background-position: 0 center; +} +.nt-timeline.horizontal .nt-timeline-dot { + left: 50%; +} +.nt-timeline.horizontal .nt-timeline-dot:not(.bigger) { + top: calc(50% - 4px); +} +.nt-timeline.horizontal .nt-timeline-dot.bigger { + top: calc(50% - 15px); +} +.nt-timeline.vertical .nt-timeline-items { + flex-direction: column; +} +.nt-timeline.vertical.reverse .nt-timeline-items { + flex-direction: column-reverse; +} +.nt-timeline.vertical.center .nt-timeline-before { + background: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%) no-repeat center/2px 100%; +} +.nt-timeline.vertical.center .nt-timeline-after { + background: linear-gradient(rgb(252, 70, 107) 0%, rgba(252, 70, 107, 0) 100%) no-repeat center/2px 100%; +} +.nt-timeline.vertical.center .nt-timeline-items { + background: radial-gradient(circle, rgb(63, 94, 251) 0%, rgb(252, 70, 107) 100%) no-repeat center/2px 100%; +} +.nt-timeline.vertical.center .nt-timeline-dot { + left: calc(50% - 10px); +} +.nt-timeline.vertical.center .nt-timeline-dot:not(.bigger) { + top: 10px; +} +.nt-timeline.vertical.center .nt-timeline-dot.bigger { + left: calc(50% - 20px); +} +.nt-timeline.vertical.left { + padding-left: 100px; +} +.nt-timeline.vertical.left .nt-timeline-item { + padding-left: 70px; +} +.nt-timeline.vertical.left .nt-timeline-sub-title { + left: -100px; + width: 100px; +} +.nt-timeline.vertical.left .nt-timeline-before { + background: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%) no-repeat 30px/2px 100%; +} +.nt-timeline.vertical.left .nt-timeline-after { + background: linear-gradient(rgb(252, 70, 107) 0%, rgba(252, 70, 107, 0) 100%) no-repeat 30px/2px 100%; +} +.nt-timeline.vertical.left .nt-timeline-items { + background: radial-gradient(circle, rgb(63, 94, 251) 0%, rgb(252, 70, 107) 100%) no-repeat 30px/2px 100%; +} +.nt-timeline.vertical.left .nt-timeline-dot { + left: 21px; + top: 8px; +} +.nt-timeline.vertical.left .nt-timeline-dot.bigger { + top: 0px; + left: 10px; +} +.nt-timeline.vertical.right { + padding-right: 100px; +} +.nt-timeline.vertical.right .nt-timeline-sub-title { + right: -100px; + text-align: left; + width: 100px; +} +.nt-timeline.vertical.right .nt-timeline-item { + padding-right: 70px; +} +.nt-timeline.vertical.right .nt-timeline-before { + background: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%) no-repeat calc(100% - 30px)/2px 100%; +} +.nt-timeline.vertical.right .nt-timeline-after { + background: linear-gradient(rgb(252, 70, 107) 0%, rgba(252, 70, 107, 0) 100%) no-repeat calc(100% - 30px)/2px 100%; +} +.nt-timeline.vertical.right .nt-timeline-items { + background: radial-gradient(circle, rgb(63, 94, 251) 0%, rgb(252, 70, 107) 100%) no-repeat calc(100% - 30px)/2px 100%; +} +.nt-timeline.vertical.right .nt-timeline-dot { + right: 21px; + top: 8px; +} +.nt-timeline.vertical.right .nt-timeline-dot.bigger { + top: 10px; + right: 10px; +} + +.nt-timeline-items { + display: flex; + position: relative; +} +.nt-timeline-items > div { + min-height: 100px; + padding-top: 2px; + padding-bottom: 20px; +} + +.nt-timeline-before { + content: ""; + height: 15px; +} + +.nt-timeline-after { + content: ""; + height: 60px; + margin-bottom: 20px; +} + +.nt-timeline-sub-title { + position: absolute; + width: 50%; + top: 4px; + font-size: 18px; + color: var(--nt-color-50); +} + +[data-md-color-scheme=slate] .nt-timeline-sub-title { + color: var(--nt-color-51); +} + +.nt-timeline-item { + position: relative; +} + +.nt-timeline.vertical.center:not(.alternate) .nt-timeline-item { + padding-left: calc(50% + 40px); +} +.nt-timeline.vertical.center:not(.alternate) .nt-timeline-item .nt-timeline-sub-title { + left: 0; + padding-right: 40px; + text-align: right; +} +.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(odd) { + padding-left: calc(50% + 40px); +} +.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(odd) .nt-timeline-sub-title { + left: 0; + padding-right: 40px; + text-align: right; +} +.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(even) { + text-align: right; + padding-right: calc(50% + 40px); +} +.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(even) .nt-timeline-sub-title { + right: 0; + padding-left: 40px; + text-align: left; +} + +.nt-timeline-dot { + position: relative; + width: 20px; + height: 20px; + border-radius: 100%; + background-color: #fc5b5b; + position: absolute; + top: 0px; + z-index: 2; + display: flex; + justify-content: center; + align-items: center; + box-shadow: 0 2px 1px -1px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 1px 3px 0 rgba(0, 0, 0, 0.12); + border: 3px solid white; +} +.nt-timeline-dot:not(.bigger) .icon { + font-size: 10px; +} +.nt-timeline-dot.bigger { + width: 40px; + height: 40px; + padding: 3px; +} +.nt-timeline-dot .icon { + color: white; +} + +/* Fix for webkit (Chrome, Safari) */ +@supports not (-moz-appearance: none) { + /* + This fix is necessary, for some reason, to render the timeline properly + inside `details` elements used by pymdownx. Firefox doesn't need this fix, + it renders elements properly. + */ + details .nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(odd) .nt-timeline-sub-title, +details .nt-timeline.vertical.center:not(.alternate) .nt-timeline-item .nt-timeline-sub-title { + left: -40px; + } + details .nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(even) .nt-timeline-sub-title { + right: -40px; + } + details .nt-timeline.vertical.center .nt-timeline-dot { + left: calc(50% - 12px); + } + details .nt-timeline-dot.bigger { + font-size: 1rem !important; + } +} +/* default colors */ +.nt-timeline-item:nth-child(0) .nt-timeline-dot { + background-color: var(--nt-color-0); +} + +.nt-timeline-item:nth-child(1) .nt-timeline-dot { + background-color: var(--nt-color-1); +} + +.nt-timeline-item:nth-child(2) .nt-timeline-dot { + background-color: var(--nt-color-2); +} + +.nt-timeline-item:nth-child(3) .nt-timeline-dot { + background-color: var(--nt-color-3); +} + +.nt-timeline-item:nth-child(4) .nt-timeline-dot { + background-color: var(--nt-color-4); +} + +.nt-timeline-item:nth-child(5) .nt-timeline-dot { + background-color: var(--nt-color-5); +} + +.nt-timeline-item:nth-child(6) .nt-timeline-dot { + background-color: var(--nt-color-6); +} + +.nt-timeline-item:nth-child(7) .nt-timeline-dot { + background-color: var(--nt-color-7); +} + +.nt-timeline-item:nth-child(8) .nt-timeline-dot { + background-color: var(--nt-color-8); +} + +.nt-timeline-item:nth-child(9) .nt-timeline-dot { + background-color: var(--nt-color-9); +} + +.nt-timeline-item:nth-child(10) .nt-timeline-dot { + background-color: var(--nt-color-10); +} + +.nt-timeline-item:nth-child(11) .nt-timeline-dot { + background-color: var(--nt-color-11); +} + +.nt-timeline-item:nth-child(12) .nt-timeline-dot { + background-color: var(--nt-color-12); +} + +.nt-timeline-item:nth-child(13) .nt-timeline-dot { + background-color: var(--nt-color-13); +} + +.nt-timeline-item:nth-child(14) .nt-timeline-dot { + background-color: var(--nt-color-14); +} + +.nt-timeline-item:nth-child(15) .nt-timeline-dot { + background-color: var(--nt-color-15); +} + +.nt-timeline-item:nth-child(16) .nt-timeline-dot { + background-color: var(--nt-color-16); +} + +.nt-timeline-item:nth-child(17) .nt-timeline-dot { + background-color: var(--nt-color-17); +} + +.nt-timeline-item:nth-child(18) .nt-timeline-dot { + background-color: var(--nt-color-18); +} + +.nt-timeline-item:nth-child(19) .nt-timeline-dot { + background-color: var(--nt-color-19); +} + +.nt-timeline-item:nth-child(20) .nt-timeline-dot { + background-color: var(--nt-color-20); +} diff --git a/docs/research_developer_cloud/assets/icons/cloud-arrow-up-solid.svg b/docs/research_developer_cloud/assets/icons/cloud-arrow-up-solid.svg new file mode 100644 index 000000000..ad6ef291c --- /dev/null +++ b/docs/research_developer_cloud/assets/icons/cloud-arrow-up-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/research_developer_cloud/assets/icons/code-pull-request-solid.svg b/docs/research_developer_cloud/assets/icons/code-pull-request-solid.svg new file mode 100644 index 000000000..1a3008473 --- /dev/null +++ b/docs/research_developer_cloud/assets/icons/code-pull-request-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/research_developer_cloud/assets/icons/handshake-solid.svg b/docs/research_developer_cloud/assets/icons/handshake-solid.svg new file mode 100644 index 000000000..fd7180cb5 --- /dev/null +++ b/docs/research_developer_cloud/assets/icons/handshake-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/research_developer_cloud/assets/icons/iconmonstr-cloud-14.svg b/docs/research_developer_cloud/assets/icons/iconmonstr-cloud-14.svg new file mode 100644 index 000000000..45c83a823 --- /dev/null +++ b/docs/research_developer_cloud/assets/icons/iconmonstr-cloud-14.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/research_developer_cloud/assets/icons/iconmonstr-cloud-15.svg b/docs/research_developer_cloud/assets/icons/iconmonstr-cloud-15.svg new file mode 100644 index 000000000..ab66bc181 --- /dev/null +++ b/docs/research_developer_cloud/assets/icons/iconmonstr-cloud-15.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/research_developer_cloud/assets/icons/iconmonstr-git-4.svg b/docs/research_developer_cloud/assets/icons/iconmonstr-git-4.svg new file mode 100644 index 000000000..9fc19ce1d --- /dev/null +++ b/docs/research_developer_cloud/assets/icons/iconmonstr-git-4.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/research_developer_cloud/assets/icons/iconmonstr-git-5.svg b/docs/research_developer_cloud/assets/icons/iconmonstr-git-5.svg new file mode 100644 index 000000000..f87e14cdc --- /dev/null +++ b/docs/research_developer_cloud/assets/icons/iconmonstr-git-5.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/research_developer_cloud/assets/icons/iconmonstr-handshake-4.svg b/docs/research_developer_cloud/assets/icons/iconmonstr-handshake-4.svg new file mode 100644 index 000000000..1509094eb --- /dev/null +++ b/docs/research_developer_cloud/assets/icons/iconmonstr-handshake-4.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/research_developer_cloud/assets/icons/iconmonstr-handshake-5.svg b/docs/research_developer_cloud/assets/icons/iconmonstr-handshake-5.svg new file mode 100644 index 000000000..624439350 --- /dev/null +++ b/docs/research_developer_cloud/assets/icons/iconmonstr-handshake-5.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/research_developer_cloud/assets/images/commit-changes-github.png b/docs/research_developer_cloud/assets/images/commit-changes-github.png new file mode 100644 index 000000000..08bd5f168 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/commit-changes-github.png differ diff --git a/docs/research_developer_cloud/assets/images/edit-on-github.png b/docs/research_developer_cloud/assets/images/edit-on-github.png new file mode 100644 index 000000000..ade379eaf Binary files /dev/null and b/docs/research_developer_cloud/assets/images/edit-on-github.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/app-cred-selected.png b/docs/research_developer_cloud/assets/images/flexi/app-cred-selected.png new file mode 100644 index 000000000..a319085e3 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/app-cred-selected.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/app-creds-overview.png b/docs/research_developer_cloud/assets/images/flexi/app-creds-overview.png new file mode 100644 index 000000000..cdfa05dbe Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/app-creds-overview.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/compute-network-port-attached.png b/docs/research_developer_cloud/assets/images/flexi/compute-network-port-attached.png new file mode 100644 index 000000000..46062f154 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/compute-network-port-attached.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/compute-network-port-removed.png b/docs/research_developer_cloud/assets/images/flexi/compute-network-port-removed.png new file mode 100644 index 000000000..2a3717102 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/compute-network-port-removed.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/compute-overview.png b/docs/research_developer_cloud/assets/images/flexi/compute-overview.png new file mode 100644 index 000000000..203fe0d91 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/compute-overview.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/confirm-resize.png b/docs/research_developer_cloud/assets/images/flexi/confirm-resize.png new file mode 100644 index 000000000..787c603d8 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/confirm-resize.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/cyberduck-connection-dialog-rdc.png b/docs/research_developer_cloud/assets/images/flexi/cyberduck-connection-dialog-rdc.png new file mode 100644 index 000000000..40ee57bc8 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/cyberduck-connection-dialog-rdc.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/cyberduck-connection-dialog.png b/docs/research_developer_cloud/assets/images/flexi/cyberduck-connection-dialog.png new file mode 100644 index 000000000..965009d9d Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/cyberduck-connection-dialog.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/cyberduck-container-view.png b/docs/research_developer_cloud/assets/images/flexi/cyberduck-container-view.png new file mode 100644 index 000000000..65a3cdff4 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/cyberduck-container-view.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/cyberduck-overview.png b/docs/research_developer_cloud/assets/images/flexi/cyberduck-overview.png new file mode 100644 index 000000000..c3c48fe3c Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/cyberduck-overview.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/default-security-group-rules.png b/docs/research_developer_cloud/assets/images/flexi/default-security-group-rules.png new file mode 100644 index 000000000..17b80861d Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/default-security-group-rules.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/floating-ips.png b/docs/research_developer_cloud/assets/images/flexi/floating-ips.png new file mode 100644 index 000000000..b180e2b3c Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/floating-ips.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/instance-action-menu.png b/docs/research_developer_cloud/assets/images/flexi/instance-action-menu.png new file mode 100644 index 000000000..361a411d6 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/instance-action-menu.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/instance-overview.png b/docs/research_developer_cloud/assets/images/flexi/instance-overview.png new file mode 100644 index 000000000..e737d58ba Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/instance-overview.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/manage-security-groups-add-dialog.png b/docs/research_developer_cloud/assets/images/flexi/manage-security-groups-add-dialog.png new file mode 100644 index 000000000..19b623bd5 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/manage-security-groups-add-dialog.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/manage-security-groups-dialog.png b/docs/research_developer_cloud/assets/images/flexi/manage-security-groups-dialog.png new file mode 100644 index 000000000..193b3b217 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/manage-security-groups-dialog.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/network-ports-added.png b/docs/research_developer_cloud/assets/images/flexi/network-ports-added.png new file mode 100644 index 000000000..4936bdfbb Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/network-ports-added.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/network-ports-create-dialog.png b/docs/research_developer_cloud/assets/images/flexi/network-ports-create-dialog.png new file mode 100644 index 000000000..b1aedb17c Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/network-ports-create-dialog.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/network-ports-overview-selected.png b/docs/research_developer_cloud/assets/images/flexi/network-ports-overview-selected.png new file mode 100644 index 000000000..35061e7a7 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/network-ports-overview-selected.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/network-ports-overview.png b/docs/research_developer_cloud/assets/images/flexi/network-ports-overview.png new file mode 100644 index 000000000..45badc3a5 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/network-ports-overview.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/networks-overview-selected.png b/docs/research_developer_cloud/assets/images/flexi/networks-overview-selected.png new file mode 100644 index 000000000..fa5a35a7a Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/networks-overview-selected.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/networks-overview.png b/docs/research_developer_cloud/assets/images/flexi/networks-overview.png new file mode 100644 index 000000000..f4a4ebcf5 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/networks-overview.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/new-key-pair-download.png b/docs/research_developer_cloud/assets/images/flexi/new-key-pair-download.png new file mode 100644 index 000000000..de7ada25e Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/new-key-pair-download.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/new-key-pair-filled.png b/docs/research_developer_cloud/assets/images/flexi/new-key-pair-filled.png new file mode 100644 index 000000000..1d46edf80 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/new-key-pair-filled.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/new-key-pair.png b/docs/research_developer_cloud/assets/images/flexi/new-key-pair.png new file mode 100644 index 000000000..1981869cf Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/new-key-pair.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/new-security-group-rules.png b/docs/research_developer_cloud/assets/images/flexi/new-security-group-rules.png new file mode 100644 index 000000000..7c340dd1c Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/new-security-group-rules.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/object-storage-container-overview.png b/docs/research_developer_cloud/assets/images/flexi/object-storage-container-overview.png new file mode 100644 index 000000000..bdcf2acb5 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/object-storage-container-overview.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/object-storage-overview.png b/docs/research_developer_cloud/assets/images/flexi/object-storage-overview.png new file mode 100644 index 000000000..5c83f1309 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/object-storage-overview.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/object-storage-upload-dialog.png b/docs/research_developer_cloud/assets/images/flexi/object-storage-upload-dialog.png new file mode 100644 index 000000000..83627866e Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/object-storage-upload-dialog.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/project-selector.png b/docs/research_developer_cloud/assets/images/flexi/project-selector.png new file mode 100644 index 000000000..8da991a5b Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/project-selector.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/resize-instance-dialog.png b/docs/research_developer_cloud/assets/images/flexi/resize-instance-dialog.png new file mode 100644 index 000000000..813417cec Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/resize-instance-dialog.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/security-group-add-custom-rule-new.png b/docs/research_developer_cloud/assets/images/flexi/security-group-add-custom-rule-new.png new file mode 100644 index 000000000..b93e304e6 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/security-group-add-custom-rule-new.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/security-group-add-rule-custom-example.png b/docs/research_developer_cloud/assets/images/flexi/security-group-add-rule-custom-example.png new file mode 100644 index 000000000..bf1638e1c Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/security-group-add-rule-custom-example.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/security-group-add-rule-dialog.png b/docs/research_developer_cloud/assets/images/flexi/security-group-add-rule-dialog.png new file mode 100644 index 000000000..013b25ce2 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/security-group-add-rule-dialog.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/security-group-add-rule-new.png b/docs/research_developer_cloud/assets/images/flexi/security-group-add-rule-new.png new file mode 100644 index 000000000..723667cbd Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/security-group-add-rule-new.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/security-group-add-rule.png b/docs/research_developer_cloud/assets/images/flexi/security-group-add-rule.png new file mode 100644 index 000000000..9d825d6aa Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/security-group-add-rule.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/security-group-manage-rules.png b/docs/research_developer_cloud/assets/images/flexi/security-group-manage-rules.png new file mode 100644 index 000000000..56d918f9a Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/security-group-manage-rules.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/security-group-predefined-rule-example.png b/docs/research_developer_cloud/assets/images/flexi/security-group-predefined-rule-example.png new file mode 100644 index 000000000..0e3ba96a9 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/security-group-predefined-rule-example.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/security-group-predefined-rules.png b/docs/research_developer_cloud/assets/images/flexi/security-group-predefined-rules.png new file mode 100644 index 000000000..8aa042a04 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/security-group-predefined-rules.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/security-groups-overview.png b/docs/research_developer_cloud/assets/images/flexi/security-groups-overview.png new file mode 100644 index 000000000..747f10d58 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/security-groups-overview.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/specific-network-view.png b/docs/research_developer_cloud/assets/images/flexi/specific-network-view.png new file mode 100644 index 000000000..acd90111f Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/specific-network-view.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/user-menu.png b/docs/research_developer_cloud/assets/images/flexi/user-menu.png new file mode 100644 index 000000000..4b3d020db Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/user-menu.png differ diff --git a/docs/research_developer_cloud/assets/images/flexi/volume-attached.png b/docs/research_developer_cloud/assets/images/flexi/volume-attached.png new file mode 100644 index 000000000..2e40083d9 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/flexi/volume-attached.png differ diff --git a/docs/research_developer_cloud/assets/images/nesi-logo.png b/docs/research_developer_cloud/assets/images/nesi-logo.png new file mode 100644 index 000000000..81c1a8945 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/nesi-logo.png differ diff --git a/docs/research_developer_cloud/assets/images/propose-change-github.png b/docs/research_developer_cloud/assets/images/propose-change-github.png new file mode 100644 index 000000000..6366c018b Binary files /dev/null and b/docs/research_developer_cloud/assets/images/propose-change-github.png differ diff --git a/docs/research_developer_cloud/assets/images/security/5w-and-1h.png b/docs/research_developer_cloud/assets/images/security/5w-and-1h.png new file mode 100644 index 000000000..7a3ed579a Binary files /dev/null and b/docs/research_developer_cloud/assets/images/security/5w-and-1h.png differ diff --git a/docs/research_developer_cloud/assets/images/security/ee-supporting-evidence.png b/docs/research_developer_cloud/assets/images/security/ee-supporting-evidence.png new file mode 100644 index 000000000..767a26ca0 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/security/ee-supporting-evidence.png differ diff --git a/docs/research_developer_cloud/assets/images/security/topic-maze-solved.png b/docs/research_developer_cloud/assets/images/security/topic-maze-solved.png new file mode 100644 index 000000000..8fc7422ba Binary files /dev/null and b/docs/research_developer_cloud/assets/images/security/topic-maze-solved.png differ diff --git a/docs/research_developer_cloud/assets/images/security/topic-maze.png b/docs/research_developer_cloud/assets/images/security/topic-maze.png new file mode 100644 index 000000000..1670bb8c7 Binary files /dev/null and b/docs/research_developer_cloud/assets/images/security/topic-maze.png differ diff --git a/docs/research_developer_cloud/cards-home.yaml b/docs/research_developer_cloud/cards-home.yaml new file mode 100644 index 000000000..8bde3100c --- /dev/null +++ b/docs/research_developer_cloud/cards-home.yaml @@ -0,0 +1,9 @@ +- title: Get started + content: | + Scroll down to see how to apply for early access + url: index.md#get-started + +- title: Talk to us + content: | + If you want to chat with us about how our platform can support your research + url: mailto:support@cloud.nesi.org.nz?subject=NeSI's%20Research%20Developer%20Cloud \ No newline at end of file diff --git a/docs/research_developer_cloud/cards-services.yaml b/docs/research_developer_cloud/cards-services.yaml new file mode 100644 index 000000000..3bbab3cde --- /dev/null +++ b/docs/research_developer_cloud/cards-services.yaml @@ -0,0 +1,16 @@ +- title: Cloud-native services + content: | + Use NeSI's cloud infrastructure and on-demand services to develop and manage custom, + interactive solutions. + image: ./assets/icons/iconmonstr-cloud-15.svg + +- title: Programmable infrastructure + content: | + Apply DevOps practices enabled by Infrastructure as Code (IaC) to automate, measure, + collaborate, and learn. + image: ./assets/icons/iconmonstr-git-5.svg + +- title: Partnership-led approaches + content: | + Partner with NeSI's DevOps specialists to build a platform or tools that can benefit your research community. + image: ./assets/icons/iconmonstr-handshake-4.svg \ No newline at end of file diff --git a/docs/research_developer_cloud/index.md b/docs/research_developer_cloud/index.md new file mode 100644 index 000000000..5c65c0e02 --- /dev/null +++ b/docs/research_developer_cloud/index.md @@ -0,0 +1,21 @@ +# Research Developer Cloud + +[cards cols=3 (./docs/research_developer_cloud/cards-services.yaml)] + +NeSI is building a research cloud computing platform for easier and more adaptable collaboration around research data. + +Research teams can use our Research Developer Cloud to develop novel solutions that enable research. + +[cards cols=2 (./docs/research_developer_cloud/cards-home.yaml)] + +## Get started + +We invite you to apply for early access if you are: + +- Developing complex research software and data solutions that support custom workflows and a range of user experiences + +- Seeking a locally owned and sovereign cloud computing platform to build and develop tools that can support research data collaborations + +- Interested in partnering with NeSI to apply DevOps approaches and best practice to your research activities + +[Apply for early access](https://docs.google.com/forms/d/e/1FAIpQLScYsLxe1HswOW9DFUNuhyTcYhdWY7-SZqTF3RpeBpFcyNdhUA/viewform){ .md-button .md-button--primary } diff --git a/docs/research_developer_cloud/release-notes/20230918-essential-building-blocks-v0.9.md b/docs/research_developer_cloud/release-notes/20230918-essential-building-blocks-v0.9.md new file mode 100644 index 000000000..5f4006304 --- /dev/null +++ b/docs/research_developer_cloud/release-notes/20230918-essential-building-blocks-v0.9.md @@ -0,0 +1,58 @@ +--- +hidden: false +label_names: +- release-note +position: 3 +title: Essential building blocks v0.9 - 20230918 NZRSE23 +--- + + +##Overview + +This is our first release of essential building blocks for cloud native services. Please see [The Research Developer Cloud page](https://www.nesi.org.nz/developercloud) for more information on how to gain access. + +##Services and features + +####Compute + +On-demand instances available for computational needs + +* Launch and manage compute instances +* Wide range of scale and three different flavours avaialble for tailored needs + +####Volume storage + +Highly scalable persistant storage options + +* Mount volume storage to any compute instance +* Option to encrypt the volume for added security + +####Network + +Network management for your solution, built on high speed REANNZ network + +* Set up and manage network configurations +* Pool of public IP addresses available for use + +####Images + +Image repository for managing images that can be used with compute + +* Common operating systems are available and maintained by NeSI +* Upload and manage custom images for your project or wider community + +####Identity + +Identity management service + +* Create and manage application credentials + +####Other + +* Programmable environment with API based access to all of the above features +* Dashboard for user friendly GUI based interactions +* Utilising OpenStack technology to provide interoperability + +##Known issues + +* Custom image upload feature is currently not working on the dashboard diff --git a/docs/research_developer_cloud/release-notes/20231205-research-developer-cloud-updates-and-fixes-v0.10.md b/docs/research_developer_cloud/release-notes/20231205-research-developer-cloud-updates-and-fixes-v0.10.md new file mode 100644 index 000000000..c71be9147 --- /dev/null +++ b/docs/research_developer_cloud/release-notes/20231205-research-developer-cloud-updates-and-fixes-v0.10.md @@ -0,0 +1,32 @@ +--- +hidden: false +label_names: +- release-note +position: 2 +title: Research Developer Cloud updates and fixes v0.10 - 20231205 +--- + +##Cloud services + +####Images +* UPDATE: Standard images provided are now regularly patched and updated via behind the scenes automated build process +* FIX: Uploading custom images via the dashboard is now fixed + +####Block storage +* FIX: Issues with detaching volumes has now been fixed + +##Infrastructure + +* [Yoga1](https://docs.openstack.org/yoga/index.html) containers have been updated to the latest patched versions within the release, which fixed bugs and patched security vulnerabilities +* Significant improvements have been made on our infrastructure testing mechanism to enable more automated processes of testing and improved resilience and visibility to incidents + +##Other updates +* Our security documentations have been updated. See here for more details +* Proof of concept usage of GPU accelerated compute flavors. We’ve worked with partners at AgResearch to test a Windows server instance supporting a GPU accelerated Proteomics workload, using the [flavor name], which includes passthrough of 2x NVIDIA A40 GPUs into the instance +* Prototyped a managed identity solution with KeyCloak + +We will continue to improve our services and we are currently testing object storage functionalities before releasing. The Research Developer Cloud has SLA of 9-5 weekdays, with best effort response time. Our team will be away during the Christmas and New Years holidays, so we may not respond to your requests on the last week of December and the first week of January. Have a wonderful holiday! + +

+ +1 Yoga is the version of OpenStack our services are on. OpenStack is an open source cloud computing infrastructure software project adopted by many different research institutions and public cloud providers. \ No newline at end of file diff --git a/docs/research_developer_cloud/release-notes/20240205-research-developer-cloud-updates-v0.11.md b/docs/research_developer_cloud/release-notes/20240205-research-developer-cloud-updates-v0.11.md new file mode 100644 index 000000000..b129fdf16 --- /dev/null +++ b/docs/research_developer_cloud/release-notes/20240205-research-developer-cloud-updates-v0.11.md @@ -0,0 +1,46 @@ +--- +hidden: false +label_names: +- release-note +position: 3 +title: Research Developer Cloud updates v0.11 - 20240205 +--- + +##Cloud services + +####Images +* UPDATE: [Rocky1](https://rockylinux.org/) images are now available for tenants to use on VMs + +####Object Storage +* UPDATE: Now operational and is in a user-testing phase. Please reach out if you would like some quota and help getting started! Early documentation can be found here: [Create and Manage Object Storage - Research Developer Cloud](/user-guides/create-and-manage-object-storage/) + +##Blueprints + +On top of ongoing development of our Cloud Services, we are now working towards building Blueprints for useful patterns that can support your research applications and pipelines. If you’ve a specific use case in mind, let us know. + +####Kubernetes + +We are starting out with K8s (Kubernetes, a container orchestration system). Deploying your applications on top of K8s can support gains in scalability, robustness, portability, and more. Starting with the basics, the following blueprint GitHub repositories support setting up a K8s management cluster and a workload cluster. + +* Management Cluster: [GitHub - nesi/nesi.rdc.kind-bootstrap-capi](https://github.com/nesi/nesi.rdc.kind-bootstrap-capi) +* Workload Cluster: [GitHub - nesi/nesi.rdc.capi.workload](https://github.com/nesi/nesi.rdc.capi.workload) + +More guides around when and how to use K8s with your application are under development. Watch this space! + +##Infrastructure + +####Platform testing + +A full suite of CI/CD functional testing is now running hourly 24 x 7 against our core Research Developer Cloud infrastructure, supporting early identification of any emerging problems or incidents. + +####Infrastructure observability + +There is a common need to understand utilisation of resources for any cloud use case. We are in the process of creating a per tenant view of utilisation, which will be delivered via dashboards (using Grafana). We are prototyping this through our collaboration with AgResearch, to inform options towards more visibility for regular research developer cloud tenants in the future. Let us know of your needs for infrastructure observability. + +####Platform maintenance + +We are almost finished upgrading the operating systems of all hosts in our Ceph-based storage and OpenStack-based hosting platform (in both data centers) to Rocky Linux 9.2 from CentOS Stream 8. This upgrade improves maintainability, supportability, security, performance, and hardware compatibility. This is a significant upgrade and is in preparation for our next regular update to the newest versions of core OpenStack services, tentatively scheduled before mid-year. + +

+ +1 Rocky Linux is an open-source enterprise operating system designed to be 100% bug-for-bug compatible with Red Hat Enterprise Linux. diff --git a/docs/research_developer_cloud/release-notes/summary.md b/docs/research_developer_cloud/release-notes/summary.md new file mode 100644 index 000000000..55f08e728 --- /dev/null +++ b/docs/research_developer_cloud/release-notes/summary.md @@ -0,0 +1,4 @@ +* [Research Developer Cloud updates v0.11 - 20240205](20240205-research-developer-cloud-updates-v0.11.md) +* [Research Developer Cloud updates and fixes v0.10 - 20231205](20231205-research-developer-cloud-updates-and-fixes-v0.10.md) +* [Essential building blocks v0.9 - 20230918 NZRSE23](20230918-essential-building-blocks-v0.9.md) +* */ diff --git a/docs/research_developer_cloud/security/index.md b/docs/research_developer_cloud/security/index.md new file mode 100644 index 000000000..2a85e796e --- /dev/null +++ b/docs/research_developer_cloud/security/index.md @@ -0,0 +1,17 @@ +--- +hidden: false +label_names: +- security +position: 1 +title: Protect and Manage Security +vote_count: 1 +vote_sum: 1 +--- + +NeSI is striving to foster security capability within the research community through increased visibility and collaboration. We will be sharing our efforts and collecting your feedback here. + +- [NeSI's Security Policy](security-policy.md) + +- [Security Practices at NeSI](security-practices/index.md) + +- [Shared Responsibility Model](shared-responsibility.md) diff --git a/docs/research_developer_cloud/security/security-policy.md b/docs/research_developer_cloud/security/security-policy.md new file mode 100644 index 000000000..2fed48f68 --- /dev/null +++ b/docs/research_developer_cloud/security/security-policy.md @@ -0,0 +1,15 @@ +--- +hidden: false +label_names: +- security +position: 1 +title: Security Policy +--- + +## NeSI Security Policy + +!!! note + NeSI has published a new security policy [NeSI Security Policy](https://www.nesi.org.nz/about-us/security-privacy/security-policy) + + +## \ No newline at end of file diff --git a/docs/research_developer_cloud/security/security-practices/building-eff-rsp.md b/docs/research_developer_cloud/security/security-practices/building-eff-rsp.md new file mode 100644 index 000000000..118e823b2 --- /dev/null +++ b/docs/research_developer_cloud/security/security-practices/building-eff-rsp.md @@ -0,0 +1,59 @@ +--- +hidden: false +label_names: +- security +- practices +position: 1 +title: Building Effective and Efficient Research Security Programs +--- + +## Geting Started + +A broad approach to building effective and research security programs + +`5 Ws and an H` +Identifing the answers to 5 simple questions helps scope the engagement and resourcing + +When - Timing and length +Where - Where will you make impact (indivduals, teams, services) +Who - The audiance (researchers, staff, students) +What - What you intend to impact with the engagement (capability, simplification, culture, policy) +Why - Is there an external driver or internal improvement? +How - The plan: getting executive support, marketing, training, consulting, measurement, reporting, closure. + +
+ ![Alt text](../../../assets/images/security/5w-and-1h.png) +
+ +`Think Like a Researcher` +We must find the balance between compulsory and optional. Researchers don't like being told that they must do something, so we need to build the story of why they are being asked to do this and then make it as easy as possible for them to comply. + +Understand the challenges they face on a day to day basis. Take the questions they ask as they begin and execute a project then create the map to the answers. It is very likely they are spread across teams, services, platforms, or even specific individuals. That is a massive barrier to a someone solving their own problems, which researchers are very good at! They aren't good at intuiting the solution you think they should choose unless they know it's an option. + +
+ ![Alt text](../../../assets/images/security/topic-maze.png) +
+ +Align services as answers to questions in single platform, service, or space. Map activities to the research lifecycle and how each one can be accessed, leveraged, or simply requested to help them achieve and maintain compliance + +
+ ![Alt text](../../../assets/images/security/topic-maze-solved.png) +
+ +`Telling the Story` + +You need executive buy in and support prior to rolling these programs out to researchers. Researchers will ask their deans, department heads, and DVCRs directly `Why?`, and they need to be able to answer it concisely and completely. Provide metrics, statistics, and easy to share material to make those discussions easier. Here are some examples + +
+ ![Alt text](../../../assets/images/security/ee-supporting-evidence.png) +
+ +`Resources` + +[2018 IT Risk Report, Netwrix](https://www.netwrix.com/2018itrisksreport.html) +[Backblaze Hard Drive Stats Q3 2023](https://www.backblaze.com/blog/backblaze-drive-stats-for-q3-2022/) +[Gov UK Education Cybersecurity breaches](https://www.gov.uk/government/statistics/cyber-security-breaches-survey-2023/cyber-security-breaches-survey-2023-education-institutions-annex) +[Data Breach Numbers](https://www.govtech.com/blogs/lohrmann-on-cybersecurity/data-breach-numbers-costs-and-impacts-all-rise-in-2021) + + +## \ No newline at end of file diff --git a/docs/research_developer_cloud/security/security-practices/index.md b/docs/research_developer_cloud/security/security-practices/index.md new file mode 100644 index 000000000..0fac38254 --- /dev/null +++ b/docs/research_developer_cloud/security/security-practices/index.md @@ -0,0 +1,14 @@ +--- +hidden: false +label_names: +- security +position: 1 +title: Security Practices +vote_count: 1 +vote_sum: 1 +--- + +We are sharing what NeSI and our community members have learned and want to make available. + +- [Building Effective and Efficient Research Security Programs](building-eff-rsp.md) + diff --git a/docs/research_developer_cloud/security/security-practices/summary.md b/docs/research_developer_cloud/security/security-practices/summary.md new file mode 100644 index 000000000..77953cda1 --- /dev/null +++ b/docs/research_developer_cloud/security/security-practices/summary.md @@ -0,0 +1,3 @@ +* [Security Practices](index.md) +* [Building Effective and Efficient Research Security Programs](building-eff-rsp.md) +* */ \ No newline at end of file diff --git a/docs/research_developer_cloud/security/shared-responsibility.md b/docs/research_developer_cloud/security/shared-responsibility.md new file mode 100644 index 000000000..319a7f977 --- /dev/null +++ b/docs/research_developer_cloud/security/shared-responsibility.md @@ -0,0 +1,16 @@ +--- +hidden: false +label_names: +- security +title: Shared Responsibility Model +--- + +# Shared Responsibility - What is it? + +## Establishing a Shared Responsibility Model + +The way we work together on this platform is captured within a Shared Responsibility model. Shared Responsibility emphasises the kaitiakitanga, the collaboration, and the coordination essential to its maintenance and to protect the research communities it enables. + +This shared way of working is becoming more common, yet there is plenty to learn. NeSI is openly exploring how we can bring greater value to, or reduce the risk of your research efforts, and of how best to refine the attributes of this sovereign platform and how we carry our shared responsibilities. We’ll share our experiences and insights, and welcome you to share yours. + +## \ No newline at end of file diff --git a/docs/research_developer_cloud/security/summary.md b/docs/research_developer_cloud/security/summary.md new file mode 100644 index 000000000..2471e7ffa --- /dev/null +++ b/docs/research_developer_cloud/security/summary.md @@ -0,0 +1,6 @@ +* [Security: Protect and Manage](index.md) +* [Security Policy](security-policy.md) +* [Security Practices](security-practices/) +* [Shared Responsibility](shared-responsibility.md) +* [General Terms](terms.md) +* */ diff --git a/docs/research_developer_cloud/security/terms.md b/docs/research_developer_cloud/security/terms.md new file mode 100644 index 000000000..6b81bcf2d --- /dev/null +++ b/docs/research_developer_cloud/security/terms.md @@ -0,0 +1,12 @@ +--- +hidden: false +label_names: +- security +- terms +position: 1 +title: Terms +--- + +## Terms + +Adding Terms Soon! \ No newline at end of file diff --git a/docs/research_developer_cloud/summary.md b/docs/research_developer_cloud/summary.md new file mode 100644 index 000000000..450336d89 --- /dev/null +++ b/docs/research_developer_cloud/summary.md @@ -0,0 +1,4 @@ +* [Home](index.md) +* [User Guides](user-guides/) +* [Security](security/) +* */ \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-identity/creating-and-managing-application-credentials-via-cli.md b/docs/research_developer_cloud/user-guides/create-and-manage-identity/creating-and-managing-application-credentials-via-cli.md new file mode 100644 index 000000000..56e698026 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-identity/creating-and-managing-application-credentials-via-cli.md @@ -0,0 +1,133 @@ +--- +hidden: false +label_names: +- identity +- create +- manage +- cli +title: Creating and Managing Application Credentials via CLI +--- + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + +## Create Application Credential + +Running the below command will generate a new `Application Credential` + +``` +openstack application credential create + [--secret ] + [--role ] + [--expiration ] + [--description ] + [--unrestricted] + [--restricted] + [--access-rules ] + +``` + +`--secret ` +: Secret to use for authentication. If not provided, one will be generated + +`--role ` +: Roles to authorize (name or ID) (repeat option to set multiple values), if not provided this will default to same roles as the user that creates it + +`--expiration ` +: Sets an expiration date for the application credential, format of YYYY-mm-ddTHH:MM:SS, if not provided, the application credential will not expire. + +`--description ` +: Application credential description + +`--unrestricted` +: Enable application credential to create and delete other application credentials and trusts + +!!! warning + This is potentially dangerous behavior and is disabled by default + +`--restricted` +: Prohibit application credential from creating and deleting other application credentials and trusts, this is enabled by default. + +`--access-rules ` +: Either a string or file path containing a JSON-formatted list of access rules, each containing a request method, path, and service, for example ‘[{“method”: “GET”, “path”: “/v2.1/servers”, “service”: “compute”}]’ + +`name` +: Name of the application credential + +Command example below with only a name supplied + +``` +openstack application credential create wiki-test-app-creds +``` + +``` { .sh .no-copy } ++--------------+----------------------------------------------------------------------------------------+ +| Field | Value | ++--------------+----------------------------------------------------------------------------------------+ +| description | None | +| expires_at | None | +| id | 0f81c516aa6e443dba0aec93b0bbd87e | +| name | wiki-test-app-creds | +| project_id | 4f07cc254d6c4471805d49bae1f739b9 | +| roles | heat_stack_owner reader _member_ load-balancer_member member | +| secret | | +| system | None | +| unrestricted | False | +| user_id | fb9a3d02c89e4cfdbe64658ad43ece97 | ++--------------+----------------------------------------------------------------------------------------+ +``` + +!!! note + Once the `Application Credentails` are created the secret will be displayed. You need to take note of this now as there is no way to get that secret again and a new `Application Credential` will need to be created should you misplace it. + +## List Application Credentials + +Running the below command will list all `Application Credentials` in your project + +``` +openstack application credential list +``` + +``` { .sh .no-copy } ++----------------------------------+---------------------+----------------------------------+-------------+------------+ +| ID | Name | Project ID | Description | Expires At | ++----------------------------------+---------------------+----------------------------------+-------------+------------+ +| 0f81c516aa6e443dba0aec93b0bbd87e | wiki-test-app-creds | 4f07cc254d6c4471805d49bae1f739b9 | None | None | ++----------------------------------+---------------------+----------------------------------+-------------+------------+ +``` + +## Show Application Credentials details + +Running the below command will present additional details about the Application Credentials + +``` +openstack application credential show APPLICATION_CRED_ID +``` + +``` { .sh .no-copy } ++--------------+--------------------------------------------------------------+ +| Field | Value | ++--------------+--------------------------------------------------------------+ +| description | None | +| expires_at | None | +| id | 0f81c516aa6e443dba0aec93b0bbd87e | +| name | wiki-test-app-creds | +| project_id | 4f07cc254d6c4471805d49bae1f739b9 | +| roles | reader load-balancer_member _member_ member heat_stack_owner | +| system | None | +| unrestricted | False | +| user_id | fb9a3d02c89e4cfdbe64658ad43ece97 | ++--------------+--------------------------------------------------------------+ +``` + +## Deleting Application Credentials + +Run the command `openstack application credential list` to get the `ID` of the `Application Credentials` you would like to delete + +Then with the `ID` run the below command to delete it + +``` +openstack application credential delete APPLICATION_CRED_ID +``` + +There will be no response, so you can run the list command again to confirm deletion \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-identity/creating-and-managing-application-credentials-with-the-dashboard.md b/docs/research_developer_cloud/user-guides/create-and-manage-identity/creating-and-managing-application-credentials-with-the-dashboard.md new file mode 100644 index 000000000..6e3661fff --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-identity/creating-and-managing-application-credentials-with-the-dashboard.md @@ -0,0 +1,101 @@ +--- +hidden: false +label_names: +- networks +- create +- manage +- dashboard +position: 1 +title: Create and manage networks via the dashboard +--- + +## Create a Network + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Identity` tab and click `Application Credentials` category + +
+ ![Alt text](../../assets/images/flexi/app-creds-overview.png) +
+ +Click `Create Application Credentials` + +Within the `Create Application Credentials` dialog we have the following options + +`Name` +: This is a required field. A name for your Application Credentials, an example could be terraform-deployment + +`Description` +: A friendly description for the Application Credentials + +`Secret` +: If this field is left blank then one will be automatically generated for you, however you have the ability to provide one yourself should you choose. + +`Expiration Date` +: The day that you wish for this Application Credentials to expire, example is you may only want these to last 1 month and as part of maintenance each month you roll new credentials. If left blank it will default to never expire + +`Expiration Time` +: The time you wish for this Application Credentials to expire, example could be 23:59 on the first Monday of each month so it gives you the Monday morning to roll new credentials. If left blank and `Expiration Date` is set it will default to 00:00:00 + +!!! note + Expiration Date and Time will be in UTC format. + +`Roles` +: You may select one or more roles for this application credential. If you do not select any, all of the roles you have assigned on the current project will be applied to the application credential. Example here is my user has `[admin, member, reader]` associated with it so if I don't pick any roles the `Application Credentials` will be given the same permissions. + +`Access Rules` +: If you want more fine-grained access control delegation, you can create one or more access rules for this application credential. The list of access rules must be a JSON- or YAML-formatted list of rules each containing a service type, an HTTP method, and a URL path, for example: + ``` json title="JSON example" + [ +   { + "service": "compute", +    "method": "POST", +    "path": "/v2.1/servers" + } + ] + ``` + + ``` yaml title="YAML example" + - service: compute + method: POST + path: /v2.1/servers + ``` + +`Unrestricted (Dangerous)` +: By default, for security reasons, application credentials are forbidden from being used for creating additional application credentials or keystone trusts. If your application credential needs to be able to perform these actions, check "unrestricted". + + !!! warning + This is potentially dangerous behavior and is disabled by default + +Once all the required fields are completed click on `Create Application Credential` + +Another dialog will appear that has your newly created `Application Credential` secret. The application credential secret will not be available after closing this page, so you must capture it now or download it. If you lose this secret, you must generate a new application credential. + +## Deleting Application Credentials + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Identity` tab and click `Application Credentials` category + +Using the check box select the `Application Credentials` you would like to delete and the `Delete Application Credentials` should become clickable in the top right + +
+ ![Alt text](../../assets/images/flexi/app-cred-selected.png) +
+ +Click `Delete Application Credentials` and a confirmation dialog will appear + +Confirm the deletion by clicking `Delete Application Credentials` \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-identity/index.md b/docs/research_developer_cloud/user-guides/create-and-manage-identity/index.md new file mode 100644 index 000000000..77610cb98 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-identity/index.md @@ -0,0 +1,24 @@ +--- +hidden: false +label_names: +- identity +- create +- manage +position: 1 +title: Create and Manage identity +vote_count: 1 +vote_sum: 1 +--- + +`Application Credentials` help you to avoid the practice of embedding user account credentials in configuration files. Instead, the user creates an Application Credential that receives delegated access to a single project and has its own distinct secret. The user can also limit the delegated privileges to a single role in that project. This allows you to adopt the principle of least privilege, where the authenticated service only gains access to the one project and role that it needs to function, rather than all of them. + +This approach allows you to consume an API with revealing your user credentials, and lets applications authenticate to Keystone without requiring embedded user credentials. + +Within FlexiHPC you are able to mange `Application Credentials` from the dashboard and/or the CLI. + +- [Creating and Managing Application Credentials from the dashboard](creating-and-managing-application-credentials-with-the-dashboard.md) + +- [Creating and Managing Application Credentials via CLI](creating-and-managing-application-credentials-via-cli.md) + +!!! note + The Application Credential is dependent on the user account that created it, so it will terminate if that account is ever deleted, or loses access to the relevant role. \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-identity/summary.md b/docs/research_developer_cloud/user-guides/create-and-manage-identity/summary.md new file mode 100644 index 000000000..9b905be2a --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-identity/summary.md @@ -0,0 +1,6 @@ +* [Identity: Create and Manage](index.md) +* With the Dashboard + * [Create and Manage](creating-and-managing-application-credentials-with-the-dashboard.md) +* With the CLI + * [Create and Manage](creating-and-managing-application-credentials-via-cli.md) +* * \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-keypairs/create-and-manage-keypairs-via-cli.md b/docs/research_developer_cloud/user-guides/create-and-manage-keypairs/create-and-manage-keypairs-via-cli.md new file mode 100644 index 000000000..4a6326b8d --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-keypairs/create-and-manage-keypairs-via-cli.md @@ -0,0 +1,121 @@ +--- +hidden: false +label_names: +- keypairs +- create +- manage +- cli +position: 1 +title: Create and manage keypairs via CLI +--- + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + +## Create a new Keypair + +Running the following command will generate a new SSH keypair for use on the RDC + +``` { .sh } +openstack keypair create KEY_PAIR_NAME +``` + +You will get a response from the server that contains your private key + + +``` { .sh .no-copy } +-----BEGIN OPENSSH PRIVATE KEY----- +A BIG STRING OF NUMBERS AND LETTERS +-----END OPENSSH PRIVATE KEY----- +``` + +You will need to take that output and save it to a file. An example below on how to do that: + +``` +nano ~/.ssh/id_rdc_key +``` + +That will open up and empty file in `nano` called `~/.ssh/id_rdc_key` + +You will then want to take the `private key` response and paste that into the file within your text editor and save it. + +You should now have a file under `~/.ssh` called `idc_rdc_key` + +We will need to change its permissions so that only you can read and write to the file, run the following command: + +``` +chmod 0600 ~/.ssh/id_rdc_key +``` + +## Import a Keypair + +To import a keypair that you have for use on the RDC the command is the same as the create expect with a new parameter + +``` +openstack keypair create --public-key PUBLIC_KEY_FILE KEY_PAIR_NAME +``` + +You will need to replace `PUBLIC_KEY_FILE` with the Public Key file location on your machine, running the above command will give no response so you will need to list the key pairs to see if its been successfuly created + +## List your Keypairs + +Running the below command will list all your keypairs that are on the RDC + +``` +openstack keypair list +``` + +``` { .sh .no-copy } +$ openstack keypair list ++------------+-------------------------------------------------+------+ +| Name | Fingerprint | Type | ++------------+-------------------------------------------------+------+ +| wiki-test | d5:0a:41:68:e0:84:fc:08:b6:cc:34:23:d8:9a:b4:c3 | ssh | ++------------+-------------------------------------------------+------+ +``` + +## Details of a Keypair + +Running the below command will show details about the key pair + +``` +openstack keypair show KEY_PAIR_NAME +``` + +``` { .sh .no-copy } +$ openstack keypair show wiki-test ++-------------+-------------------------------------------------+ +| Field | Value | ++-------------+-------------------------------------------------+ +| created_at | 2023-11-02T20:28:15.000000 | +| fingerprint | d5:0a:41:68:e0:84:fc:08:b6:cc:34:23:d8:9a:b4:c3 | +| id | wiki-test | +| is_deleted | False | +| name | wiki-test | +| private_key | None | +| type | ssh | +| user_id | fb9a3d02c89e4cfdbe64658ad43ece97 | ++-------------+-------------------------------------------------+ +``` + +Adding the paramter `--public_key` will output the public key for that key pair + +``` +openstack keypair show --public-key KEY_PAIR_NAME +``` + +``` { .sh .no-copy } +$ openstack keypair show --public-key wiki-test +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILW2gFl/ax1FW1y5u2ihfJfPow7fFbX/aFsZ4Wv49yY4 +``` + +## Delete a Keypair + +To delete a keypair from the RDC run the below command + +``` +openstack keypair delete KEY_PAIR_NAME +``` + +Their will be no response from the server so running the list command will confirm that the keypair has been removed. + \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-keypairs/create-and-manage-keypairs-with-the-dashboard.md b/docs/research_developer_cloud/user-guides/create-and-manage-keypairs/create-and-manage-keypairs-with-the-dashboard.md new file mode 100644 index 000000000..80a950658 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-keypairs/create-and-manage-keypairs-with-the-dashboard.md @@ -0,0 +1,86 @@ +--- +hidden: false +label_names: +- keypairs +- create +- manage +- dashboard +position: 1 +title: Create and manage keypairs via the dashboard +--- + +## Create a Keypair + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Compute` tab and select the `Key Pairs` category + +Click `Create Key Pair`. + +
+ ![Alt text](../../assets/images/flexi/new-key-pair.png) +
+ +In the `Create Key Pair` dialog box, enter a name for your `key pair,` and select a `Key Type` + +`Key Type` +: Select one of the following options + + - `SSH Key` + : This will be the common picked `Key Type` as we will use this to SSH to most compute instances. + + - `X509 Certificate` + : This will be used to generate an Certificate based key. + +
+ ![Alt text](../../assets/images/flexi/new-key-pair-filled.png) +
+ +Once all fields are supplied click `Create Key Pair` + +The private key will be downloaded automatically + +
+ ![Alt text](../../assets/images/flexi/new-key-pair-download.png) +
+ +To change its permissions so that only you can read and write to the file, run the following command: + +``` +chmod 0600 yourPrivateKey.pem +``` + +!!! note + If you are using the Dashboard from a Windows computer, use PuTTYgen to load the `*.pem` file and convert and save it as `*.ppk`. For more information see the [WinSCP web page for PuTTYgen](https://winscp.net/eng/docs/ui_puttygen). + +To make the key pair known to SSH, run the ssh-add command. + +``` +ssh-add yourPrivateKey.pem +``` + +## Import a Key Pair + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Compute` tab and select the `Key Pairs` category + +Click `Import Key Pair`. + +In the `Import Key Pair` dialog box, enter the name of your key pair, copy the public key into the `Public Key` box, and then click `Import Key Pair`. + +The Compute database registers the public key of the key pair. + +The Dashboard lists the key pair on the `Key Pairs` tab. \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-keypairs/index.md b/docs/research_developer_cloud/user-guides/create-and-manage-keypairs/index.md new file mode 100644 index 000000000..552d74cb0 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-keypairs/index.md @@ -0,0 +1,22 @@ +--- +hidden: false +label_names: +- identity +- create +- manage +position: 1 +title: Create and Manage Keypairs +vote_count: 1 +vote_sum: 1 +--- + +Key pairs are SSH credentials that are injected into a FlexiHPC instance when it is launched. These are used to access and manage your instances. + +You are able to create a new SSH Key pair on the RDC or import one of your own. + + +Key pairs can be managed a few ways + +- [Create and manage key pairs via the dashboard](create-and-manage-keypairs-with-the-dashboard.md) + +- [Create and manage key pairs via CLI](create-and-manage-keypairs-via-cli.md) \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-keypairs/summary.md b/docs/research_developer_cloud/user-guides/create-and-manage-keypairs/summary.md new file mode 100644 index 000000000..bd790bfee --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-keypairs/summary.md @@ -0,0 +1,6 @@ +* [Keypairs: Create and Manage](index.md) +* With the Dashboard + * [Create and Manage](create-and-manage-keypairs-with-the-dashboard.md) +* With the CLI + * [Create and Manage](create-and-manage-keypairs-via-cli.md) +* * \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-networks/create-and-manage-network-ports-via-cli.md b/docs/research_developer_cloud/user-guides/create-and-manage-networks/create-and-manage-network-ports-via-cli.md new file mode 100644 index 000000000..676ac2517 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-networks/create-and-manage-network-ports-via-cli.md @@ -0,0 +1,382 @@ +--- +hidden: false +label_names: +- instance +- launch +position: 2 +title: Create and manage network ports via CLI +vote_count: 1 +vote_sum: 1 +--- + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + +First we need to get a few details, `Network ID` we want to connect to the network port to, `the Subnet ID` we want to connect the IP to and the `IP Address` we want to assign to the network port unless you want it to be assigned an IP from the DHCP + +Run the following command to get the `Network ID` + +``` +openstack network list +``` + +``` { .sh .no-copy } ++--------------------------------------+--------------------------------+--------------------------------------+ +| ID | Name | Subnets | ++--------------------------------------+--------------------------------+--------------------------------------+ +| 33d0c11b-b659-4b77-9afc-5676fe965839 | external | 5c2644ad-7253-42f5-ad69-40970b84dea6 | +| 79029286-80ad-4923-a2e6-7d1216a9f2be | rally_verify_88403f86_qmojdKSJ | | +| bcfd4714-ef9c-4c0b-aa58-ad8bcc1a999e | rally_verify_51cf3f2d_mQ0taHVb | | +| d3a7ddb5-6582-42cf-978a-c99b4ed25ad4 | NeSI-Training-Test | f5715775-270c-4230-bfa7-fdbdf51352dc | +| d780f680-9640-430f-813f-dbf2128b445c | azimuth-demo | 70dc21e9-d8f4-4232-bda9-2f0a0d508105 | ++--------------------------------------+--------------------------------+--------------------------------------+ +``` + +Take note of the `Network ID` and the `Subnet ID` + +!!! note + For this example we will use the `azimuth-demo` network so the `Network ID: d780f680-9640-430f-813f-dbf2128b445c` and the `Subnet ID: 70dc21e9-d8f4-4232-bda9-2f0a0d508105` + +Should you not know the IP range of the subnet run the following command to get the IP address range from that chosen subnet + +``` +openstack subnet show SUBNET_ID +``` + +Example response below using the `Subnet ID: 70dc21e9-d8f4-4232-bda9-2f0a0d508105` + +``` +openstack subnet show 70dc21e9-d8f4-4232-bda9-2f0a0d508105 +``` + +``` { .sh .no-copy } ++----------------------+--------------------------------------+ +| Field | Value | ++----------------------+--------------------------------------+ +| allocation_pools | 192.168.100.2-192.168.100.254 | +| cidr | 192.168.100.0/24 | +| created_at | 2023-08-11T02:47:17Z | +| description | | +| dns_nameservers | | +| dns_publish_fixed_ip | False | +| enable_dhcp | True | +| gateway_ip | 192.168.100.1 | +| host_routes | | +| id | 70dc21e9-d8f4-4232-bda9-2f0a0d508105 | +| ip_version | 4 | +| ipv6_address_mode | None | +| ipv6_ra_mode | None | +| name | azimuth-demo | +| network_id | d780f680-9640-430f-813f-dbf2128b445c | +| project_id | 4f07cc254d6c4471805d49bae1f739b9 | +| revision_number | 0 | +| segment_id | None | +| service_types | | +| subnetpool_id | None | +| tags | | +| updated_at | 2023-08-11T02:47:17Z | ++----------------------+--------------------------------------+ +``` + +Take note of the `allocation_pools` as that will specify the pool of IP addresses + +## Create a network port + +Run the following command to create a network port + +``` +openstack port create --network NETWORK_ID --description PORT_DESCRIPTION --fixed-ip subnet=SUBNET_ID,ip-address=IP_ADDRESS --enable PORT_NAME +``` + +Using the example IDs we prepared earlier it will look like this + +``` +openstack port create --network d780f680-9640-430f-813f-dbf2128b445c --description wiki-network-port --fixed-ip subnet=70dc21e9-d8f4-4232-bda9-2f0a0d508105,ip-address=192.168.100.60 --enable Wiki-Network-Port-CLI +``` + +We have specified the `Network ID` as the `azimuth-demo` network, with the `Subnet ID` within that network and assigning that network port an IP address of `192.168.100.60`, we also gave it a description and a friendly name. + +The response from the command + +``` { .sh .no-copy } ++-------------------------+---------------------------------------------------------------------------------------------------------+ +| Field | Value | ++-------------------------+---------------------------------------------------------------------------------------------------------+ +| admin_state_up | UP | +| allowed_address_pairs | | +| binding_host_id | None | +| binding_profile | None | +| binding_vif_details | None | +| binding_vif_type | None | +| binding_vnic_type | normal | +| created_at | 2023-08-29T01:29:45Z | +| data_plane_status | None | +| description | wiki-network-port | +| device_id | | +| device_owner | | +| device_profile | None | +| dns_assignment | fqdn='host-192-168-100-60.openstacklocal.', hostname='host-192-168-100-60', ip_address='192.168.100.60' | +| dns_domain | | +| dns_name | | +| extra_dhcp_opts | | +| fixed_ips | ip_address='192.168.100.60', subnet_id='70dc21e9-d8f4-4232-bda9-2f0a0d508105' | +| id | 09e94e3f-ee9e-42f5-851e-a9b4d957b563 | +| ip_allocation | None | +| mac_address | fa:16:3e:05:c9:dd | +| name | Wiki-Network-Port-CLI | +| network_id | d780f680-9640-430f-813f-dbf2128b445c | +| numa_affinity_policy | None | +| port_security_enabled | True | +| project_id | 4f07cc254d6c4471805d49bae1f739b9 | +| propagate_uplink_status | None | +| qos_network_policy_id | None | +| qos_policy_id | None | +| resource_request | None | +| revision_number | 1 | +| security_group_ids | f2f15d6f-2a04-4196-8102-a058042694b3 | +| status | DOWN | +| tags | | +| trunk_details | None | +| updated_at | 2023-08-29T01:29:45Z | ++-------------------------+---------------------------------------------------------------------------------------------------------+ +``` + +Should you not want to assign an IP yourself and allow the DHCP to assign it then run the command without the `ip-address `parameter like below + +``` +openstack port create --network NETWORK_ID --description PORT_DESCRIPTION --fixed-ip subnet=SUBNET_ID --enable PORT_NAME +``` + +Command with response + +``` +openstack port create --network d780f680-9640-430f-813f-dbf2128b445c --description wiki-network-port --fixed-ip subnet=70dc21e9-d8f4-4232-bda9-2f0a0d508105 --enable Wiki-Network-Port-CLI +``` + +``` { .sh .no-copy } ++-------------------------+------------------------------------------------------------------------------------------------------------+ +| Field | Value | ++-------------------------+------------------------------------------------------------------------------------------------------------+ +| admin_state_up | UP | +| allowed_address_pairs | | +| binding_host_id | None | +| binding_profile | None | +| binding_vif_details | None | +| binding_vif_type | None | +| binding_vnic_type | normal | +| created_at | 2023-08-29T01:38:28Z | +| data_plane_status | None | +| description | wiki-network-port | +| device_id | | +| device_owner | | +| device_profile | None | +| dns_assignment | fqdn='host-192-168-100-182.openstacklocal.', hostname='host-192-168-100-182', ip_address='192.168.100.182' | +| dns_domain | | +| dns_name | | +| extra_dhcp_opts | | +| fixed_ips | ip_address='192.168.100.182', subnet_id='70dc21e9-d8f4-4232-bda9-2f0a0d508105' | +| id | d91d923e-a91f-4e00-baa9-eda3ba842dd5 | +| ip_allocation | None | +| mac_address | fa:16:3e:35:5a:e1 | +| name | Wiki-Network-Port-CLI | +| network_id | d780f680-9640-430f-813f-dbf2128b445c | +| numa_affinity_policy | None | +| port_security_enabled | True | +| project_id | 4f07cc254d6c4471805d49bae1f739b9 | +| propagate_uplink_status | None | +| qos_network_policy_id | None | +| qos_policy_id | None | +| resource_request | None | +| revision_number | 1 | +| security_group_ids | f2f15d6f-2a04-4196-8102-a058042694b3 | +| status | DOWN | +| tags | | +| trunk_details | None | +| updated_at | 2023-08-29T01:38:28Z | ++-------------------------+------------------------------------------------------------------------------------------------------------+ +``` + +Running the below command will list the network ports within the project and we should be able to see our newly created one + +``` +openstack port list +``` + +``` { .sh .no-copy } ++--------------------------------------+-----------------------+-------------------+--------------------------------------------------------------------------------+--------+ +| ID | Name | MAC Address | Fixed IP Addresses | Status | ++--------------------------------------+-----------------------+-------------------+--------------------------------------------------------------------------------+--------+ +| 09e94e3f-ee9e-42f5-851e-a9b4d957b563 | Wiki-Network-Port-CLI | fa:16:3e:05:c9:dd | ip_address='192.168.100.60', subnet_id='70dc21e9-d8f4-4232-bda9-2f0a0d508105' | DOWN | +| 0e1dc631-2c63-43b4-9bd2-fcdfbedb854c | | fa:16:3e:77:0d:c0 | ip_address='10.1.0.5', subnet_id='f5715775-270c-4230-bfa7-fdbdf51352dc' | ACTIVE | +| 19737c3e-5717-4d19-8717-d362c53f552a | | fa:16:3e:21:99:fa | ip_address='10.1.0.2', subnet_id='f5715775-270c-4230-bfa7-fdbdf51352dc' | ACTIVE | ++--------------------------------------+-----------------------+-------------------+--------------------------------------------------------------------------------+--------+ +``` + +!!! note + The full openstack documentation is [here](https://docs.openstack.org/python-openstackclient/pike/cli/command-objects/port.html#port-create) should you need more advanced parameters + +## List network ports + +Run the below command to list all network ports within your project + +``` +openstack port list +``` + +``` { .sh .no-copy } ++--------------------------------------+-----------------------+-------------------+--------------------------------------------------------------------------------+--------+ +| ID | Name | MAC Address | Fixed IP Addresses | Status | ++--------------------------------------+-----------------------+-------------------+--------------------------------------------------------------------------------+--------+ +| 09e94e3f-ee9e-42f5-851e-a9b4d957b563 | Wiki-Network-Port-CLI | fa:16:3e:05:c9:dd | ip_address='192.168.100.60', subnet_id='70dc21e9-d8f4-4232-bda9-2f0a0d508105' | DOWN | +| 0e1dc631-2c63-43b4-9bd2-fcdfbedb854c | | fa:16:3e:77:0d:c0 | ip_address='10.1.0.5', subnet_id='f5715775-270c-4230-bfa7-fdbdf51352dc' | ACTIVE | +| 19737c3e-5717-4d19-8717-d362c53f552a | | fa:16:3e:21:99:fa | ip_address='10.1.0.2', subnet_id='f5715775-270c-4230-bfa7-fdbdf51352dc' | ACTIVE | ++--------------------------------------+-----------------------+-------------------+--------------------------------------------------------------------------------+--------+ +``` + +## Attach network port to an Instance + +If you also wish to attach the newly created `Network Port` to an instance then you will also need the `Instance ID` + +Running the below will return a list of all instances within your project + +``` +openstack server list +``` + +``` { .sh .no-copy } ++--------------------------------------+---------------------+--------+----------------------------------------------+------------------------------+--------------------+ +| ID | Name | Status | Networks | Image | Flavor | ++--------------------------------------+---------------------+--------+----------------------------------------------+------------------------------+--------------------+ +| 610ee950-cdf8-425d-a3f3-52de500522ee | k8s-worker-node-1 | ACTIVE | NeSI-Training-Test=10.1.0.101, FLEXIHPC_IP | Ubuntu-Focal-20.04 | balanced1.2cpu4ram | +| 10389ba9-15a9-48b0-91f3-b7cbccdce72b | k8s-worker-node-0 | ACTIVE | NeSI-Training-Test=10.1.0.81, FLEXIHPC_IP | Ubuntu-Focal-20.04 | balanced1.2cpu4ram | +| af6fb776-b80e-49b9-a8d4-a1d88b272b63 | k8s-control-plane-0 | ACTIVE | NeSI-Training-Test=10.1.0.176, FLEXIHPC_IP | Ubuntu-Focal-20.04 | balanced1.2cpu4ram | +| 6d1d5418-a70e-4996-a0f5-4f4c03cfd138 | ood-cluster-admin | ACTIVE | NeSI-Training-Test=10.1.0.69, FLEXIHPC_IP | N/A (booted from volume) | devtest1.4cpu4ram | ++--------------------------------------+---------------------+--------+----------------------------------------------+------------------------------+--------------------+ +``` + +Take note of the `Instance ID` + +!!! note + For this example we will use `Instance ID: 6d1d5418-a70e-4996-a0f5-4f4c03cfd138` + +We then want to list our network ports + +``` +openstack port list +``` + +``` { .sh .no-copy } ++--------------------------------------+-----------------------+-------------------+--------------------------------------------------------------------------------+--------+ +| ID | Name | MAC Address | Fixed IP Addresses | Status | ++--------------------------------------+-----------------------+-------------------+--------------------------------------------------------------------------------+--------+ +| d91d923e-a91f-4e00-baa9-eda3ba842dd5 | Wiki-Network-Port-CLI | fa:16:3e:35:5a:e1 | ip_address='192.168.100.182', subnet_id='70dc21e9-d8f4-4232-bda9-2f0a0d508105' | DOWN | +| f1c54ee3-80c5-468d-a1cb-2828c1fee5cc | | fa:16:3e:ad:6b:06 | ip_address='10.1.0.1', subnet_id='f5715775-270c-4230-bfa7-fdbdf51352dc' | ACTIVE | ++--------------------------------------+-----------------------+-------------------+--------------------------------------------------------------------------------+--------+ +``` + +Take note of the `Network Port ID` + +!!! note + For this example we will use `d91d923e-a91f-4e00-baa9-eda3ba842dd5` + +We then run the following command + +``` +openstack server add port INSTANCE_ID NETWORK_PORT_ID +``` + +Command with our example ID’s + +``` +openstack server add port 6d1d5418-a70e-4996-a0f5-4f4c03cfd138 d91d923e-a91f-4e00-baa9-eda3ba842dd5 +``` + +There will be no response from the server so running the below command will display the new network port added to the instance + +``` +openstack server show 6d1d5418-a70e-4996-a0f5-4f4c03cfd138 +``` + +``` { .sh .no-copy } ++-------------------------------------+----------------------------------------------------------------------------+ +| Field | Value | ++-------------------------------------+----------------------------------------------------------------------------+ +| accessIPv4 | | +| accessIPv6 | | +| access_ipv4 | | +| access_ipv6 | | +| addresses | NeSI-Training-Test=10.1.0.69, 163.7.177.243; azimuth-demo=192.168.100.182 | +| adminPass | None | +| admin_password | None | +| availability_zone | nova | +| block_device_mapping | None | +| block_device_mapping_v2 | None | +| compute_host | None | +| config_drive | True | +| created | 2023-07-19T03:45:21Z | +| created_at | 2023-07-19T03:45:21Z | +| description | None | +| disk_config | AUTO | +| fault | None | +| flavor | devtest1.4cpu4ram (devtest1.4cpu4ram) | +| flavorRef | None | +| flavor_id | None | +| has_config_drive | True | +| hostId | f40676c3043f50b6efeeefb163a9d9f7a0994b288b09dfddcdccac9b | +| host_id | f40676c3043f50b6efeeefb163a9d9f7a0994b288b09dfddcdccac9b | +| host_status | None | +| hostname | ood-cluster-admin | + +| launched_at | 2023-07-19T03:45:28.000000 | ++-------------------------------------+----------------------------------------------------------------------------+ +``` + +You should see the additional network port under `addresses` for your instance + +## Delete a network port + +Run the command `openstack port list` and take note of the `Network Port ID` + +``` +openstack port list +``` + +``` { .sh .no-copy } ++--------------------------------------+-----------------------+-------------------+--------------------------------------------------------------------------------+--------+ +| ID | Name | MAC Address | Fixed IP Addresses | Status | ++--------------------------------------+-----------------------+-------------------+--------------------------------------------------------------------------------+--------+ +| d91d923e-a91f-4e00-baa9-eda3ba842dd5 | Wiki-Network-Port-CLI | fa:16:3e:35:5a:e1 | ip_address='192.168.100.182', subnet_id='70dc21e9-d8f4-4232-bda9-2f0a0d508105' | DOWN | +| f1c54ee3-80c5-468d-a1cb-2828c1fee5cc | | fa:16:3e:ad:6b:06 | ip_address='10.1.0.1', subnet_id='f5715775-270c-4230-bfa7-fdbdf51352dc' | ACTIVE | ++--------------------------------------+-----------------------+-------------------+--------------------------------------------------------------------------------+--------+ +``` + +Take note of the ID for that network port + +!!! note + For this example we will use `d91d923e-a91f-4e00-baa9-eda3ba842dd5` + +Then run the below command, supplying the `Network Port ID` you want to delete + +``` +openstack port delete NETWORK_PORT_ID +``` + +Command with our example ID + +``` +openstack port delete d91d923e-a91f-4e00-baa9-eda3ba842dd5 +``` + +There is no response from the server so run `openstack port list` to see the network port has been removed + +``` +openstack port list +``` + +``` { .sh .no-copy } ++--------------------------------------+-----------------------+-------------------+--------------------------------------------------------------------------------+--------+ +| ID | Name | MAC Address | Fixed IP Addresses | Status | ++--------------------------------------+-----------------------+-------------------+--------------------------------------------------------------------------------+--------+ +| f1c54ee3-80c5-468d-a1cb-2828c1fee5cc | | fa:16:3e:ad:6b:06 | ip_address='10.1.0.1', subnet_id='f5715775-270c-4230-bfa7-fdbdf51352dc' | ACTIVE | ++--------------------------------------+-----------------------+-------------------+--------------------------------------------------------------------------------+--------+ +``` \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-networks/create-and-manage-network-ports-with-the-dashboard.md b/docs/research_developer_cloud/user-guides/create-and-manage-networks/create-and-manage-network-ports-with-the-dashboard.md new file mode 100644 index 000000000..5310571ca --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-networks/create-and-manage-network-ports-with-the-dashboard.md @@ -0,0 +1,197 @@ +--- +hidden: false +label_names: +- networks +- create +- manage +- dashboard +position: 1 +title: Create and manage network ports with the dashboard +--- + +## Create a Network port + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Network` tab, select the `Networks` category and then select the network you want to assign the network port to. + +Click on the `Ports` tab + +
+ ![Alt text](../../assets/images/flexi/network-ports-overview.png) +
+ +Then click `Create Port` + +Within the `Create Port` dialog fill in the options + +`Name` +: A friendly name for your network port + +`Device ID` +: The ID of the instance you want to attach this too, this can be done later should you not know the ID of the instance. + +`Device Owner` +: The owner of the device, this can be added later if you don't know the device owner. + +`Specify IP address or subnet` +: You have 3 options to chose from + + `Unspecified` + : This option will assign a DHCP IP to the network port + + `Subnet` + : This option will allow you to pick the subnet within the network to attach the port too and assign a DHCP IP to it. + + `Fixed IP Address` + : This option will allow you to specify the IP address that will be assigned to the network port + +Depending on the option chosen above there will be additional settings to chose below + +`Unspecified` +: `Mac Address` + : The MAC address of the NIC you want to assign, you can leave this blank should you not know the MAC address and it will be assigned later + +`Subnet` +: `Subnet` + : This is a required field, pick the subnet that you wish the network port to be associated with + + `Mac Address` + : The MAC address of the NIC you want to assign, you can leave this blank should you not know the MAC address and it will be assigned later + +`Fixed IP Address` +: `Fixed IP Address` + : This is a required field, specify the network port IP that you want to use + + `Mac Address` + : The MAC address of the NIC you want to assign, you can leave this blank should you not know the MAC address and it will be assigned later + +After the above we have the last 2 options within the `Create Port` dialog + +`Port Security` +: This is checked by default, it enables anti-spoofing rules for the network port + +`VNIC Type` +: This is the type of Virtual Network Interface Card that is bound to the port. The default of Normal should be enough for most cases. + +There is also the option to assign security groups to this network port as well. The user guide [Manage Security Groups](manage-security-groups-with-the-dashboard.md) will provide more information about them. + +We then click on `Create` + +
+ ![Alt text](../../assets/images/flexi/network-ports-create-dialog.png) +
+ +This will then create the network port so that we can assign it to a instance later on + +
+ ![Alt text](../../assets/images/flexi/network-ports-added.png) +
+ +!!! note + If you provided a Device ID during the creation of the network port then it will be assigned to the instance you provided + +## Assigning a network port to an instance + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Compute` tab and select `Instances` + +
+ ![Alt text](../../assets/images/flexi/compute-overview.png) +
+ +Under the `Actions` dropdown select `Attach Interface` + +
+ ![Alt text](../../assets/images/flexi/instance-action-menu.png) +
+ +Within the `Attach Interface` dialog we have a few options to attach the network port. We can create a new one here or attach a previously created one. + +The first option is to create a new one from within the dialog, so we pick the option `by Network (and IP Address)` within `The way to specify an Interface` + +`Network` +: This is a required field, pick the network you wish for this port to be assigned too + +`IP Address` +: Leaving this blank will assign an IP address from the DHCP, you can also specify the IP Address you wish for this network port to use + +The second option is to assign a previously created network port, so we pick the option `by Port` within `The way to specify an Interface` + +`Port` +: This is a required field, pick the previously created network port from the options provided. + +Click `Attach Interface` + +The instance should now have the new network port attached + +
+ ![Alt text](../../assets/images/flexi/compute-network-port-attached.png) +
+ +## Detach a network port from an instance + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Compute` tab and select `Instances` + +
+ ![Alt text](../../assets/images/flexi/compute-overview.png) +
+ +Under the `Actions` dropdown select `Detach Interface` + +
+ ![Alt text](../../assets/images/flexi/instance-action-menu.png) +
+ +Within the `Detach Interface` dialog select the IP address for the Network port you wish to detach + +Click `Detach Interface` + +
+ ![Alt text](../../assets/images/flexi/compute-network-port-removed.png) +
+ +## Delete a network port + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Network` tab, select the `Networks` category and then select the network you want to assign the network port to. + +Click on the `Ports` tab + +
+ ![Alt text](../../assets/images/flexi/network-ports-overview-selected.png) +
+ +Select the port you wish to delete with the check box and the `Delete Port` option so become solid. + +Within the `Delete Port` dialog ensure you are deleting the correct one + +Click `Delete Ports` \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-networks/create-and-manage-networks-via-cli.md b/docs/research_developer_cloud/user-guides/create-and-manage-networks/create-and-manage-networks-via-cli.md new file mode 100644 index 000000000..a13b512fe --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-networks/create-and-manage-networks-via-cli.md @@ -0,0 +1,256 @@ +--- +hidden: false +label_names: +- instance +- launch +position: 2 +title: Create and manage network via CLI +vote_count: 1 +vote_sum: 1 +--- + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + +## Create a network + +Running the below command will generate a network without a subnet + +``` +openstack network create NETWORK_NAME +``` + +Our example command with response + +``` +openstack network create wiki-net +``` + +``` { .sh .no-copy } ++---------------------------+--------------------------------------+ +| Field | Value | ++---------------------------+--------------------------------------+ +| admin_state_up | UP | +| availability_zone_hints | | +| availability_zones | | +| created_at | 2023-09-10T21:10:02Z | +| description | | +| dns_domain | | +| id | 15274353-ceae-476c-a374-dc7142a676f4 | +| ipv4_address_scope | None | +| ipv6_address_scope | None | +| is_default | False | +| is_vlan_transparent | None | +| mtu | 8942 | +| name | wiki-net | +| port_security_enabled | True | +| project_id | 4f07cc254d6c4471805d49bae1f739b9 | +| provider:network_type | None | +| provider:physical_network | None | +| provider:segmentation_id | None | +| qos_policy_id | None | +| revision_number | 1 | +| router:external | Internal | +| segments | None | +| shared | False | +| status | ACTIVE | +| subnets | | +| tags | | +| tenant_id | 4f07cc254d6c4471805d49bae1f739b9 | +| updated_at | 2023-09-10T21:10:02Z | ++---------------------------+--------------------------------------+ +``` + +Take note of the `id` that is returned for the new network + +!!! note + Our `id` from above is `15274353-ceae-476c-a374-dc7142a676f4` + +## Create a network subnet + +Running the below command will generate a subnet for the network that you supply the id from + +``` +openstack subnet create SUBNET_NAME --network NETWORK_ID --subnet-range IP_RANGE_CIDR +``` + +Our example command using the id from above will look like the following + +``` +openstack subnet create wiki-subnet --network 15274353-ceae-476c-a374-dc7142a676f4 --subnet-range 192.0.2.0/24 +``` + +``` { .sh .no-copy } ++----------------------+--------------------------------------+ +| Field | Value | ++----------------------+--------------------------------------+ +| allocation_pools | 192.0.2.2-192.0.2.254 | +| cidr | 192.0.2.0/24 | +| created_at | 2023-09-10T21:11:13Z | +| description | | +| dns_nameservers | | +| dns_publish_fixed_ip | False | +| enable_dhcp | True | +| gateway_ip | 192.0.2.1 | +| host_routes | | +| id | ae9277e7-0a2c-4325-8eb1-33ad86eec974 | +| ip_version | 4 | +| ipv6_address_mode | None | +| ipv6_ra_mode | None | +| name | wiki-subnet | +| network_id | 15274353-ceae-476c-a374-dc7142a676f4 | +| project_id | 4f07cc254d6c4471805d49bae1f739b9 | +| revision_number | 0 | +| segment_id | None | +| service_types | | +| subnetpool_id | None | +| tags | | +| updated_at | 2023-09-10T21:11:13Z | ++----------------------+--------------------------------------+ +``` + +## List all networks and subnets + +Running the below command will list all networks within your project + +``` +openstack network list +``` + +``` { .sh .no-copy } ++--------------------------------------+--------------------------------+--------------------------------------+ +| ID | Name | Subnets | ++--------------------------------------+--------------------------------+--------------------------------------+ +| 15274353-ceae-476c-a374-dc7142a676f4 | wiki-net | ae9277e7-0a2c-4325-8eb1-33ad86eec974 | +| 33d0c11b-b659-4b77-9afc-5676fe965839 | external | 5c2644ad-7253-42f5-ad69-40970b84dea6 | +| 79029286-80ad-4923-a2e6-7d1216a9f2be | rally_verify_88403f86_qmojdKSJ | | +| bcfd4714-ef9c-4c0b-aa58-ad8bcc1a999e | rally_verify_51cf3f2d_mQ0taHVb | | +| d3a7ddb5-6582-42cf-978a-c99b4ed25ad4 | NeSI-Training-Test | f5715775-270c-4230-bfa7-fdbdf51352dc | +| d780f680-9640-430f-813f-dbf2128b445c | azimuth-demo | 70dc21e9-d8f4-4232-bda9-2f0a0d508105 | ++--------------------------------------+--------------------------------+--------------------------------------+ +``` + +Running the below will list all subnets within your project + +``` +openstack subnet list +``` + +``` { .sh .no-copy } ++--------------------------------------+--------------------+--------------------------------------+------------------+ +| ID | Name | Network | Subnet | ++--------------------------------------+--------------------+--------------------------------------+------------------+ +| 5c2644ad-7253-42f5-ad69-40970b84dea6 | external | 33d0c11b-b659-4b77-9afc-5676fe965839 | 163.7.177.0/24 | +| 70dc21e9-d8f4-4232-bda9-2f0a0d508105 | azimuth-demo | d780f680-9640-430f-813f-dbf2128b445c | 192.168.100.0/24 | +| ae9277e7-0a2c-4325-8eb1-33ad86eec974 | wiki-subnet | 15274353-ceae-476c-a374-dc7142a676f4 | 192.0.2.0/24 | +| f5715775-270c-4230-bfa7-fdbdf51352dc | NeSI-Training-Test | d3a7ddb5-6582-42cf-978a-c99b4ed25ad4 | 10.1.0.0/24 | ++--------------------------------------+--------------------+--------------------------------------+------------------+ +``` + +## Delete a subnet + +Run the below command to list out all subnets + +``` +openstack subnet list +``` + +``` { .sh .no-copy } ++--------------------------------------+--------------------+--------------------------------------+------------------+ +| ID | Name | Network | Subnet | ++--------------------------------------+--------------------+--------------------------------------+------------------+ +| 5c2644ad-7253-42f5-ad69-40970b84dea6 | external | 33d0c11b-b659-4b77-9afc-5676fe965839 | 163.7.177.0/24 | +| 70dc21e9-d8f4-4232-bda9-2f0a0d508105 | azimuth-demo | d780f680-9640-430f-813f-dbf2128b445c | 192.168.100.0/24 | +| ae9277e7-0a2c-4325-8eb1-33ad86eec974 | wiki-subnet | 15274353-ceae-476c-a374-dc7142a676f4 | 192.0.2.0/24 | +| f5715775-270c-4230-bfa7-fdbdf51352dc | NeSI-Training-Test | d3a7ddb5-6582-42cf-978a-c99b4ed25ad4 | 10.1.0.0/24 | ++--------------------------------------+--------------------+--------------------------------------+------------------+ +``` + +Take note of the subnet id that you wish to delete + +!!! note + For our example we will use `ae9277e7-0a2c-4325-8eb1-33ad86eec974` + +We then run the following command while supplying it with the id we have chosen to delete + +``` +openstack subnet delete SUBNET_ID +``` + +The server will not give a response if successful so you will need to run `openstack subnet list` to confirm its removal + +``` +openstack subnet list +``` + +Using our example id our command and list looks like the following + +``` +openstack subnet delete ae9277e7-0a2c-4325-8eb1-33ad86eec974 +``` + +``` { .sh .no-copy } ++--------------------------------------+--------------------+--------------------------------------+------------------+ +| ID | Name | Network | Subnet | ++--------------------------------------+--------------------+--------------------------------------+------------------+ +| 5c2644ad-7253-42f5-ad69-40970b84dea6 | external | 33d0c11b-b659-4b77-9afc-5676fe965839 | 163.7.177.0/24 | +| 70dc21e9-d8f4-4232-bda9-2f0a0d508105 | azimuth-demo | d780f680-9640-430f-813f-dbf2128b445c | 192.168.100.0/24 | +| f5715775-270c-4230-bfa7-fdbdf51352dc | NeSI-Training-Test | d3a7ddb5-6582-42cf-978a-c99b4ed25ad4 | 10.1.0.0/24 | ++--------------------------------------+--------------------+--------------------------------------+------------------+ +``` + +## Delete a network + +Run the below command to list all networks + +``` +openstack network list +``` + +``` { .sh .no-copy } ++--------------------------------------+--------------------------------+--------------------------------------+ +| ID | Name | Subnets | ++--------------------------------------+--------------------------------+--------------------------------------+ +| 15274353-ceae-476c-a374-dc7142a676f4 | wiki-net | ae9277e7-0a2c-4325-8eb1-33ad86eec974 | +| 33d0c11b-b659-4b77-9afc-5676fe965839 | external | 5c2644ad-7253-42f5-ad69-40970b84dea6 | +| 79029286-80ad-4923-a2e6-7d1216a9f2be | rally_verify_88403f86_qmojdKSJ | | +| bcfd4714-ef9c-4c0b-aa58-ad8bcc1a999e | rally_verify_51cf3f2d_mQ0taHVb | | +| d3a7ddb5-6582-42cf-978a-c99b4ed25ad4 | NeSI-Training-Test | f5715775-270c-4230-bfa7-fdbdf51352dc | +| d780f680-9640-430f-813f-dbf2128b445c | azimuth-demo | 70dc21e9-d8f4-4232-bda9-2f0a0d508105 | ++--------------------------------------+--------------------------------+--------------------------------------+ +``` + +Take note of the network id we want to remove + +!!! note + For our example we will use `15274353-ceae-476c-a374-dc7142a676f4` + +Then run the below command while supplying the id for the network you wish to remove + +``` +openstack network delete NETWORK_ID +``` + +There will be no response from the server when you send the command so will need to list the networks to confirm removal. + +Example command and list response + +``` +openstack network delete 15274353-ceae-476c-a374-dc7142a676f4 +``` + +``` +openstack network list +``` + +``` { .sh .no-copy } ++--------------------------------------+--------------------------------+--------------------------------------+ +| ID | Name | Subnets | ++--------------------------------------+--------------------------------+--------------------------------------+ +| 33d0c11b-b659-4b77-9afc-5676fe965839 | external | 5c2644ad-7253-42f5-ad69-40970b84dea6 | +| 79029286-80ad-4923-a2e6-7d1216a9f2be | rally_verify_88403f86_qmojdKSJ | | +| bcfd4714-ef9c-4c0b-aa58-ad8bcc1a999e | rally_verify_51cf3f2d_mQ0taHVb | | +| d3a7ddb5-6582-42cf-978a-c99b4ed25ad4 | NeSI-Training-Test | f5715775-270c-4230-bfa7-fdbdf51352dc | +| d780f680-9640-430f-813f-dbf2128b445c | azimuth-demo | 70dc21e9-d8f4-4232-bda9-2f0a0d508105 | ++--------------------------------------+--------------------------------+--------------------------------------+ +``` \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-networks/create-and-manage-networks-with-the-dashboard.md b/docs/research_developer_cloud/user-guides/create-and-manage-networks/create-and-manage-networks-with-the-dashboard.md new file mode 100644 index 000000000..4ceba2c98 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-networks/create-and-manage-networks-with-the-dashboard.md @@ -0,0 +1,114 @@ +--- +hidden: false +label_names: +- networks +- create +- manage +- dashboard +position: 1 +title: Create and manage networks via the dashboard +--- + +## Create a Network + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Network` tab and select the `Networks` category + +
+ ![Alt text](../../assets/images/flexi/networks-overview.png) +
+ +Click `Create Network` on the right hand side + +Within the `Create Network > Network` dialog you have the following options. + +`Network Name` +: A friendly name for your network + +`Enable Admin State` +: If checked this will enable the network, by default leave this set to true + +`Create Subnet` +: If checked this will enable the creation of a subnet, by default leave this set to true + +`Availability Zone Hints` +: Availability zones where the DHCP agents can be scheduled. Leaving this unset is the same as selecting all Availability zones. As FlexiHPC only has 1 zone nova this value can be left unset + +`MTU` +: Maximum Transmission Unit. An MTU is the largest size frame or packet -- in bytes or octets (eight-bit bytes) -- that can be transmitted across a data link. Leaving this unset is the default unless you know what you are doing here. + +Click `Next` + +Within the `Create Network > Subnet dialog` you have the following options + +`Subnet Name` +: A friendly name for your subnet + +`Network Address` +: The network address in CIDR format e.g. 192.168.0.0/24 if its IPv4 + +`IP Version` +: If your Network Address is an IPv4 then pick that otherwise pick IPv6. IPv4 is generally the default + +`Gateway IP` +: IP address of the gateway is generally the first IP of the network address, from our Network Address example above it would be 192.168.0.1. To use the default leave this blank. + +`Disable Gateway` +: Should you not want a gateway then check this. By default you will want your network to have a gateway. + +Click `Next` + +Within the `Create Network > Subnet Details` dialog you have the following options + +`Enable DHCP` +: This allows the network to auto assign an IP when a compute instance is attached to it + +`Allocation Pools` +: The IP’s you would like to allocate to compute instances when they are attached. The format should be start_ip_address,end_ip_address using our Network Address example it would be 192.168.0.20,192.168.0.50. Leave blank if you want to use any IP addresses from the specified Network Address + +`DNS Name Servers` +: Should you wish to use different name servers then the ones FlexiHPC uses please enter then here, one per line. + +`Host Routes` +: Additional Routes announced to the hosts. The format should be destination_cidr,nexthop. This is used should you wish to have separate networks that want to communicate with each other. + +Click `Create` and it should start to create your new network + +
+ ![Alt text](../../assets/images/flexi/specific-network-view.png) +
+ +## Delete a network + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Network` tab and select the `Networks` category + +Select the network you wish to delete with the check box + +
+ ![Alt text](../../assets/images/flexi/networks-overview-selected.png) +
+ +The `Delete Network` button should become a solid red + +Click `Delete Network` + +Within the `Confirm Delete Network` dialog ensure you have selected the correct network that is displayed. + +Click `Delete Networks` + +The network should now be deleted \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-networks/index.md b/docs/research_developer_cloud/user-guides/create-and-manage-networks/index.md new file mode 100644 index 000000000..5489608f6 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-networks/index.md @@ -0,0 +1,55 @@ +--- +hidden: false +label_names: +- networks +- create +- manage +position: 1 +title: Create and Manage networks +vote_count: 1 +vote_sum: 1 +--- + +Within FlexiHPC you are able to use the default network that comes with the FlexiHPC Project or you are able to create your own with a specific IP range. + +The networks within FlexiHPC are all `Software Defined Networks` so can overlap each other in different projects. + +Networks can be created and managed in 2 ways + +- [Create and Manage networks with the Dashboard](create-and-manage-networks-with-the-dashboard.md) + +- [Create and Manage networks via CLI](create-and-manage-networks-via-cli.md) + +Within the network tab you also have the following that you are able to manage + +## Security Groups + +A security group acts as a virtual firewall for servers and other resources on a network. It is a container for security group rules which specify the network access rules. + +Security Groups can be created and managed within the FlexiHPC dashboard. However, advanced users can take advantage of the OpenStack CLI to manage Security Groups. + +- [Create and Manage Security groups with the Dashboard](manage-security-groups-with-the-dashboard.md) + +- [Manage Security groups via CLI](manage-security-groups-via-cli.md) + +## Floating IPs + +When an instance is created in FlexiHPC, it is automatically assigned a fixed IP address in the network to which the instance is assigned. This IP address is permanently associated with the instance until the instance is terminated. + +However, in addition to the fixed IP address, a floating IP address can also be attached to an instance. Unlike fixed IP addresses, floating IP addresses can have their associations modified at any time, regardless of the state of the instances involved. This procedure details the reservation of a floating IP address from an existing pool of addresses and the association of that address with a specific instance. + +If you wish to connect to an instance within the FlexiHPC platform from outside then these are required. + +- [Manage Floating IPs with the Dashboard](manage-floating-ips-via-the-dashboard.md) + +- [Manage Floating IPs with the CLI](manage-floating-ips-via-cli.md) + +## Static IPs + +If you wanted to create an instance with a fixed static IP address this can be achieved by using network ports. A port is a connection point for attaching a single device, such as the NIC of a server, to an OpenStack network. A network port also describes the associated network configuration, such as the MAC and IP addresses to be used on that port. + +These network ports can be managed 2 ways + +- [Create and Manage network ports with the Dashboard](create-and-manage-network-ports-with-the-dashboard.md) + +- [Create and manage network ports via CLI](create-and-manage-network-ports-via-cli.md) \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-networks/manage-floating-ips-via-cli.md b/docs/research_developer_cloud/user-guides/create-and-manage-networks/manage-floating-ips-via-cli.md new file mode 100644 index 000000000..3f7625e99 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-networks/manage-floating-ips-via-cli.md @@ -0,0 +1,144 @@ +--- +hidden: false +label_names: +- instance +- launch +position: 2 +title: Manage Floating IPs via CLI +vote_count: 1 +vote_sum: 1 +--- + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + + +Use the `openstack` commands to manage floating IP addresses. + +## List floating IP address information + +To list all floating IP addresses that are allocated to the current project, run: + +``` +openstack floating ip list +``` + +``` { .sh .no-copy } ++--------------------------------------+---------------------+------------------+--------------------------------------+--------------------------------------+----------------------------------+ +| ID | Floating IP Address | Fixed IP Address | Port | Floating Network | Project | ++--------------------------------------+---------------------+------------------+--------------------------------------+--------------------------------------+----------------------------------+ +| 1c59da88-9b5c-4214-930e-8447cebd3980 | | None | None | 33d0c11b-b659-4b77-9afc-5676fe965839 | 4f07cc254d6c4471805d49bae1f739b9 | ++--------------------------------------+---------------------+------------------+--------------------------------------+--------------------------------------+----------------------------------+ +``` + +## Associate floating IP addresses + +You can assign a floating IP address to a project and to an instance. + +Run the following command to allocate a floating IP address to the current project. By default, the floating IP address is allocated from the `external` pool. The command outputs the allocated IP address: + +``` +openstack floating ip create external +``` + +``` { .sh .no-copy } ++---------------------+--------------------------------------+ +| Field | Value | ++---------------------+--------------------------------------+ +| created_at | 2023-07-27T01:29:31Z | +| description | | +| dns_domain | | +| dns_name | | +| fixed_ip_address | None | +| floating_ip_address | | +| floating_network_id | 33d0c11b-b659-4b77-9afc-5676fe965839 | +| id | 5c8781cd-399b-4b37-8ced-41ca4a38c128 | +| name | | +| port_details | None | +| port_id | None | +| project_id | 4f07cc254d6c4471805d49bae1f739b9 | +| qos_policy_id | None | +| revision_number | 0 | +| router_id | None | +| status | DOWN | +| subnet_id | None | +| tags | [] | +| updated_at | 2023-07-27T01:29:31Z | ++---------------------+--------------------------------------+ +``` + +List all project instances with which a floating IP address could be associated. + +``` +openstack server list +``` + +``` { .sh .no-copy } ++--------------------------------------+---------------------------------------+--------+----------------------------------------------+--------------------------+--------------------+ +| ID | Name | Status | Networks | Image | Flavor | ++--------------------------------------+---------------------------------------+--------+----------------------------------------------+--------------------------+--------------------+ +| 8b08a4fb-7372-4269-a583-9dbc91779ffe | test-instance-wiki | ACTIVE | NeSI-Training-Test=10.1.0.134 | Ubuntu-Jammy-22.04 | devtest1.2cpu2ram | ++--------------------------------------+---------------------------------------+--------+----------------------------------------------+--------------------------+--------------------+ +``` + +Note the server ID to use. + +List ports associated with the selected server. + +``` +openstack port list --device-id SERVER_ID +``` + +``` { .sh .no-copy } ++--------------------------------------+------+-------------------+---------------------------------------------------------------------------+--------+ +| ID | Name | MAC Address | Fixed IP Addresses | Status | ++--------------------------------------+------+-------------------+---------------------------------------------------------------------------+--------+ +| 09c1ebd1-0fa0-40ec-98ef-bae2417f33ef | | fa:16:3e:14:0c:32 | ip_address='10.1.0.134', subnet_id='f5715775-270c-4230-bfa7-fdbdf51352dc' | ACTIVE | ++--------------------------------------+------+-------------------+---------------------------------------------------------------------------+--------+ +``` + +Note the port ID to use. + +Associate an IP address with an instance in the project, as follows: + +``` +openstack floating ip set --port PORT_ID FLOATING_IP_ADDRESS +``` + +For example: + +``` +openstack floating ip set --port 09c1ebd1-0fa0-40ec-98ef-bae2417f33ef +``` + +The instance is now associated with two IP addresses: + +``` +openstack server list +``` + +``` { .sh .no-copy } ++--------------------------------------+---------------------------------------+--------+----------------------------------------------+--------------------------+--------------------+ +| ID | Name | Status | Networks | Image | Flavor | ++--------------------------------------+---------------------------------------+--------+----------------------------------------------+--------------------------+--------------------+ +| 8b08a4fb-7372-4269-a583-9dbc91779ffe | test-instance-wiki | ACTIVE | NeSI-Training-Test=10.1.0.134, | Ubuntu-Jammy-22.04 | devtest1.2cpu2ram | ++--------------------------------------+---------------------------------------+--------+----------------------------------------------+--------------------------+--------------------+ +``` + +After you associate the IP address and configure security group rules for the instance, the instance is publicly available at the floating IP address. + +## Disassociate floating IP addresses + +To disassociate a floating IP address from an instance: + +``` +openstack floating ip unset --port PORT_ID FLOATING_IP_ADDRESS +``` + +To remove the floating IP address from a project: + +``` +openstack floating ip delete FLOATING_IP_ADDRESS +``` + +The IP address is returned to the pool of IP addresses that is available for all projects. If the IP address is still associated with a running instance, it is automatically disassociated from that instance. \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-networks/manage-floating-ips-via-the-dashboard.md b/docs/research_developer_cloud/user-guides/create-and-manage-networks/manage-floating-ips-via-the-dashboard.md new file mode 100644 index 000000000..7fcc4b8c6 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-networks/manage-floating-ips-via-the-dashboard.md @@ -0,0 +1,71 @@ +--- +hidden: false +label_names: +- instance +- launch +position: 2 +title: Manage Floating IPs via the Dashboard +vote_count: 1 +vote_sum: 1 +--- + +## Assign Floating IP address + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Network` tab and select `Floating IPs` + +Click `Allocate IP to Project` + +Within the `Allocate Floating IP` dialog you have the following options + +`Pool` +: The pool that the floating ip should be allocated from. There is only external currently so is set as the default. + +`Description` +: A friendly description for what this IP is used for + +`DNS Domain` +: TODO: Confirm with Sean what this means + +`DNS Name` +: TODO: Confirm with Sean what this means + +!!! note + The default settings are fine should you not wish to configure anything further. + +Click `Allocate IP` + +
+ ![Alt text](../../assets/images/flexi/floating-ips.png) +
+ +Under `Actions` click `Associate` + +Within the `Managing Floating IP Associations` dialog you want to ensure the `IP Address` is the one you wish to assign, and under the `Ports to be assocaited` select the compute instance you wish to assign the IP too. + +Click `Associate` + +## Un-assign Floating IP address + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Network` tab and select `Floating IPs` + +Under `Actions` click `Disassociate` + +Within the `Confrim Disassociate` dialog confirm the IP you are disassociating + +Click `Disassociate` \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-networks/manage-security-groups-via-cli.md b/docs/research_developer_cloud/user-guides/create-and-manage-networks/manage-security-groups-via-cli.md new file mode 100644 index 000000000..168856569 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-networks/manage-security-groups-via-cli.md @@ -0,0 +1,184 @@ +--- +hidden: false +label_names: +- security-groups +- launch +- cli +position: 2 +title: Manage Security groups via CLI +vote_count: 1 +vote_sum: 1 +--- + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + +## Creating a Security Group + +Run the following command to create a Security Group with a specified name and description. + +``` +openstack security group create --description FRIENDLY_DESCRIPTION NAME_FOR_GROUP +``` + +An example command to create a security group called `My_Wiki_SG` + +``` +openstack security group create --description "A testing group for wiki" My_Wiki_SG +``` + +We can check the security group is created by running + +``` +openstack security group list +``` + +``` { .sh .no-copy } ++--------------------------------------+--------------------------+---------------------------------------------------------+----------------------------------+------+ +| ID | Name | Description | Project | Tags | ++--------------------------------------+--------------------------+---------------------------------------------------------+----------------------------------+------+ +| 339bd140-e6a0-4afd-9b24-029c3243e779 | My_Wiki_SG | A testing group for wiki | 4f07cc254d6c4471805d49bae1f739b9 | [] | +| 7200b28f-9089-4797-a094-39f1995e6f0c | SSH Allow All | This is an open SSH that allows anyone to connect to 22 | 4f07cc254d6c4471805d49bae1f739b9 | [] | +| b5d30ed4-13b3-4f7a-bc5a-c48175566ea3 | My-Security-Group | This is my security group | 4f07cc254d6c4471805d49bae1f739b9 | [] | +| f2f15d6f-2a04-4196-8102-a058042694b3 | default | Default security group | 4f07cc254d6c4471805d49bae1f739b9 | [] | ++--------------------------------------+--------------------------+---------------------------------------------------------+----------------------------------+------+ +``` + +## Create and manage Security Group rules + +You can modify Security Group rules with the `openstack security group rule` command. + +### Create new rules for a group + +Allow access from all IP addresses (specified as IP subnet `0.0.0.0/0` in CIDR notation) for the port `8080` + +``` +openstack security group rule create --proto tcp --dst-port 8080 SECURITY_GROUP_ID +``` + +The command and response looks like the following + +``` +openstack security group rule create --proto tcp --dst-port 8080 339bd140-e6a0-4afd-9b24-029c3243e779 +``` + +``` { .sh .no-copy } ++-------------------------+--------------------------------------+ +| Field | Value | ++-------------------------+--------------------------------------+ +| created_at | 2023-08-10T00:59:36Z | +| description | | +| direction | ingress | +| ether_type | IPv4 | +| id | f0bce470-8d94-453f-9dfa-3e3e34b0c80e | +| name | None | +| normalized_cidr | 0.0.0.0/0 | +| port_range_max | 8080 | +| port_range_min | 8080 | +| project_id | 4f07cc254d6c4471805d49bae1f739b9 | +| protocol | tcp | +| remote_address_group_id | None | +| remote_group_id | None | +| remote_ip_prefix | 0.0.0.0/0 | +| revision_number | 0 | +| security_group_id | 339bd140-e6a0-4afd-9b24-029c3243e779 | +| tags | [] | +| updated_at | 2023-08-10T00:59:36Z | ++-------------------------+--------------------------------------+ +``` + +If you check the rules again, you'll see the new one has been added + +``` +openstack security group rule list 339bd140-e6a0-4afd-9b24-029c3243e779 +``` + +``` { .sh .no-copy } ++--------------------------------------+-------------+-----------+-----------+------------+-----------+-----------------------+----------------------+ +| ID | IP Protocol | Ethertype | IP Range | Port Range | Direction | Remote Security Group | Remote Address Group | ++--------------------------------------+-------------+-----------+-----------+------------+-----------+-----------------------+----------------------+ +| b0f0edd2-7a55-44b4-84a8-9650de36a7ec | None | IPv6 | ::/0 | | egress | None | None | +| f0bce470-8d94-453f-9dfa-3e3e34b0c80e | tcp | IPv4 | 0.0.0.0/0 | 8080:8080 | ingress | None | None | +| f3925a01-5d47-4c55-ac73-1647cca5b739 | None | IPv4 | 0.0.0.0/0 | | egress | None | None | ++--------------------------------------+-------------+-----------+-----------+------------+-----------+-----------------------+----------------------+ +``` + +### Delete a Security Group rule + +First, run the following command to view all Security Groups. + +``` +openstack security group list +``` + +``` { .sh .no-copy } ++--------------------------------------+--------------------------+---------------------------------------------------------+----------------------------------+------+ +| ID | Name | Description | Project | Tags | ++--------------------------------------+--------------------------+---------------------------------------------------------+----------------------------------+------+ +| 339bd140-e6a0-4afd-9b24-029c3243e779 | My_Wiki_SG | A testing group for wiki | 4f07cc254d6c4471805d49bae1f739b9 | [] | +| 5150840c-9c27-45a9-91a1-61c5978de8ff | https | | 4f07cc254d6c4471805d49bae1f739b9 | [] | +| 7200b28f-9089-4797-a094-39f1995e6f0c | SSH Allow All | This is an open SSH that allows anyone to connect to 22 | 4f07cc254d6c4471805d49bae1f739b9 | [] | +| 8873336a-02e6-4f84-8fd8-5aa3b929f955 | hpc-toolset-docker-ports | Docker Ports used for the HPC Toolset | 4f07cc254d6c4471805d49bae1f739b9 | [] | +| b24e8bef-969a-4938-8b18-0a33769b181d | kubeapi_whitelist | | 4f07cc254d6c4471805d49bae1f739b9 | [] | +| b5d30ed4-13b3-4f7a-bc5a-c48175566ea3 | My-Security-Group | This is my security group | 4f07cc254d6c4471805d49bae1f739b9 | [] | +| f2f15d6f-2a04-4196-8102-a058042694b3 | default | Default security group | 4f07cc254d6c4471805d49bae1f739b9 | [] | ++--------------------------------------+--------------------------+---------------------------------------------------------+----------------------------------+------+ +``` + +Locate the Security Group that you wish to remove a rule from and take note of its ID + +!!! note + For this example we are using `339bd140-e6a0-4afd-9b24-029c3243e779` + +Running the following command will return all rules associated with that security group. + +``` +openstack security group rule list 339bd140-e6a0-4afd-9b24-029c3243e779 +``` + +``` { .sh .no-copy } ++--------------------------------------+-------------+-----------+-----------+------------+-----------+-----------------------+----------------------+ +| ID | IP Protocol | Ethertype | IP Range | Port Range | Direction | Remote Security Group | Remote Address Group | ++--------------------------------------+-------------+-----------+-----------+------------+-----------+-----------------------+----------------------+ +| b0f0edd2-7a55-44b4-84a8-9650de36a7ec | None | IPv6 | ::/0 | | egress | None | None | +| f0bce470-8d94-453f-9dfa-3e3e34b0c80e | tcp | IPv4 | 0.0.0.0/0 | 8080:8080 | ingress | None | None | +| f3925a01-5d47-4c55-ac73-1647cca5b739 | None | IPv4 | 0.0.0.0/0 | | egress | None | None | ++--------------------------------------+-------------+-----------+-----------+------------+-----------+-----------------------+----------------------+ +``` + +Take note of the Security Group Rule ID + +!!! note + For this example we will use f0bce470-8d94-453f-9dfa-3e3e34b0c80e + +To delete a rule, run the following command with the correct rule ID. + +``` +openstack security group rule delete f0bce470-8d94-453f-9dfa-3e3e34b0c80e +``` + +Re-run the list command to confirm the rule has been deleted + +``` +openstack security group rule list 339bd140-e6a0-4afd-9b24-029c3243e779 +``` + +``` { .sh .no-copy } ++--------------------------------------+-------------+-----------+-----------+------------+-----------+-----------------------+----------------------+ +| ID | IP Protocol | Ethertype | IP Range | Port Range | Direction | Remote Security Group | Remote Address Group | ++--------------------------------------+-------------+-----------+-----------+------------+-----------+-----------------------+----------------------+ +| b0f0edd2-7a55-44b4-84a8-9650de36a7ec | None | IPv6 | ::/0 | | egress | None | None | +| f3925a01-5d47-4c55-ac73-1647cca5b739 | None | IPv4 | 0.0.0.0/0 | | egress | None | None | ++--------------------------------------+-------------+-----------+-----------+------------+-----------+-----------------------+----------------------+ +``` + +## Deleting a Security Group + +Run the following to delete a Security Group + +``` +openstack security group delete SECURITY_GROUP_ID +``` + +!!! warning + You cannot delete the `default` Security Group from your project. It's also not possible to delete a Security Group that is assigned to an instance. \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-networks/manage-security-groups-with-the-dashboard.md b/docs/research_developer_cloud/user-guides/create-and-manage-networks/manage-security-groups-with-the-dashboard.md new file mode 100644 index 000000000..4b775419e --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-networks/manage-security-groups-with-the-dashboard.md @@ -0,0 +1,144 @@ +--- +hidden: false +label_names: +- security-groups +- create +- manage +- dashboard +position: 1 +title: Create and manage Security groups with the dashboard +--- + +## The Default secuirty group + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Network` tab and select the `Security Groups` category + +!!! note + We recommend that no new rules are added to the `deafult` security group to keep things clean and tidy. We also recommend that no rules be removed from this group. + +
+ ![Alt text](../../assets/images/flexi/default-security-group-rules.png) +
+ +There are 2 Egress and 2 Ingress rules, each one is associated with either IPv4 or IPv6. + +The 2 Egress rules allow the resources within the FlexiHPC project to communicate with the outside world. + +The 2 Ingress rules allow any other resource within the FlexiHPC project that has this security group associated to it is allowed to communicate with each other. + +## Creating a new Security Group + +First start by clicking on `Create Security Group` + +
+ ![Alt text](../../assets/images/flexi/security-groups-overview.png) +
+ +Within the `Create Security Group` dialog you have the following options. + +`Name` +: A friendly name for your network, this field is requried. + +`Description` +: A friendly description to identify what this is used for + +Once those have been filled out hit the `Create Security Group` button and that will take you to the newly created security group + +
+ ![Alt text](../../assets/images/flexi/new-security-group-rules.png) +
+ +## Updating a Security Groups Rules + +We have a few ways of adding new rules to the security groups, either with predefined rules or customs rules. + +### Using Predefined Rules + +Find the security group that you would like to update the rules for and click `Manage Rules` under the `Action` column + +
+ ![Alt text](../../assets/images/flexi/security-group-manage-rules.png) +
+ +Once in the security group we want to click on `Add Rule` on the top right + +
+ ![Alt text](../../assets/images/flexi/security-group-add-rule.png) +
+ +We are presented with the following dialog that allows us to add new rules based on the direction(Ingress/Egress) that we want to apply the rule. Think of these as Firewall Rules + +
+ ![Alt text](../../assets/images/flexi/security-group-add-rule-dialog.png) +
+ +There are all ready a few predefined rules that are ready to use if you so chose + +
+ ![Alt text](../../assets/images/flexi/security-group-predefined-rules.png) +
+ +For this example we will create an `SSH` rule + +
+ ![Alt text](../../assets/images/flexi/security-group-predefined-rule-example.png) +
+ +We have specified the `SSH` Rule, given it a description so it explains what it is for other users, we have chosen `CIDR` as the remote and left the `CIDR` as `Allow All`. + +!!! info + If we changed that CIDR to 192.168.0.0/16 then only machines that reside within that IP Range will be able to pass through this Rule. + + For the above example we want to be able to SSH to a Compute Service within the FlexiHPC space however the IP that we would be connecting from would be our Public IP, therefore using the above CIDR would actually block our attempts to SSH to the compute service that has this rule applied. + + If you wish to restrict the Rule to only your Public IP then google whats my ip and use the IP that is provided prefixed with /32 + +Clicking `Add` will update the Security group with the newly created rule + +
+ ![Alt text](../../assets/images/flexi/security-group-add-rule-new.png) +
+ +### Using Custom Rules + +Find the security group that you would like to update the rules for and click `Manage Rules` under the `Action` column + +
+ ![Alt text](../../assets/images/flexi/security-group-manage-rules.png) +
+ +Once in the security group we want to click on `Add Rule` on the top right + +
+ ![Alt text](../../assets/images/flexi/security-group-add-rule.png) +
+ +We are presented with the following dialog that allows us to add new rules based on the direction(Ingress/Egress) that we want to apply the rule. Think of these as Firewall Rules + +
+ ![Alt text](../../assets/images/flexi/security-group-add-rule-dialog.png) +
+ +For this Example rule we will allow port `6443`. + +So the things we need to ensure are Rule has been set to `Custom TCP Rule`, The Direction is `Ingress` as we are allowing the port into the FlexiHPC space and the Port we would like to allow, in this case `6443`. + +We will also leave Remote as `CIDR` and the `CIDR` as allow all, as denoted by `0.0.0.0/0` + +
+ ![Alt text](../../assets/images/flexi/security-group-add-rule-custom-example.png) +
+ +We click `Add` and our rule is now added to the security group + +
+ ![Alt text](../../assets/images/flexi/security-group-add-custom-rule-new.png) +
diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-networks/summary.md b/docs/research_developer_cloud/user-guides/create-and-manage-networks/summary.md new file mode 100644 index 000000000..c0a0cd2bf --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-networks/summary.md @@ -0,0 +1,12 @@ +* [Networks: Create and Manage](index.md) +* With the Dashboard + * [Networks](create-and-manage-networks-with-the-dashboard.md) + * [Security Groups](manage-security-groups-with-the-dashboard.md) + * [Network Ports](create-and-manage-network-ports-with-the-dashboard.md) + * [Floating IPs](manage-floating-ips-via-the-dashboard.md) +* With the CLI + * [Networks](create-and-manage-networks-via-cli.md) + * [Security Groups](manage-security-groups-via-cli.md) + * [Network Ports](create-and-manage-network-ports-via-cli.md) + * [Floating IPs](manage-floating-ips-via-cli.md) +* * \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/create-and-manage-object-storage-via-cli.md b/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/create-and-manage-object-storage-via-cli.md new file mode 100644 index 000000000..c01764e63 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/create-and-manage-object-storage-via-cli.md @@ -0,0 +1,134 @@ +--- +hidden: false +label_names: +- object storage +- create +- manage +- cli +position: 1 +title: Create and manage object storage via CLI +--- + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + +## Create new container + +Running the below command will generate a new container within the projects object storage + +``` { .sh } +openstack container create +``` + +You will get a response from the server that looks like the following + + +``` { .sh .no-copy } ++-------------+------------------+-----------------------------+ +| account | container | x-trans-id | ++-------------+------------------+-----------------------------+ +| AUTH_ | | tx00000-akl-1 | ++-------------+------------------+-----------------------------+ +``` + +## List containers + +Running the below command will list all containers within the projects object storage + +``` { .sh } +openstack container list +``` +``` { .sh .no-copy } ++------------------+ +| Name | ++------------------+ +| a-test-container | +| boto3-test | +| cli-container | +| terraform-state | ++------------------+ +``` + +The command `openstack container list` also has some additional parameters + +`--prefix ` +: Filter the list using a prefix, example if we use the prefix `a` then the only container returned would the `a-test-container` + +`--marker ` +: Start anchor for paging is used when you wish to return a specified list of containers should you have a lot of them + +`--end-marker ` +: End anchor for paging + +`--limit ` +: Limit the number of containers returned + +`--long` +: List additional fields in output that contain the amount of space used and number of files inside the container + +`--all` +: List all containers (default is 10000) + +## Display container details + +Running the below command will display additional details about the container specified + +``` { .sh } +openstack container show CONTAINER_NAME +``` +``` { .sh .no-copy } ++----------------+---------------------------------------+ +| Field | Value | ++----------------+---------------------------------------+ +| account | AUTH_ | +| bytes_used | 0 | +| container | | +| object_count | 0 | +| storage_policy | default-placement | ++----------------+---------------------------------------+ +``` + +## Save container contents local + +Running the below command will save all the container contents to your local directory where you run the command + +``` { .sh } +openstack container save CONTAINER_NAME +``` + +## Delete container + +Run the `openstack container list` command first to get the name of the container you wish to delete + +``` { .sh } +openstack container list +``` +``` { .sh .no-copy } ++------------------+ +| Name | ++------------------+ +| a-test-container | +| boto3-test | +| cli-container | +| terraform-state | ++------------------+ +``` + +Then run the below command to delete the container you wish to remove + +``` { .sh } +openstack container delete CONTAINER_NAME +``` + +Your container should then be removed, however should you container contain any files you will get the following error + +``` { .sh .no-copy} +openstack container delete a-test-container +Conflict (HTTP 409) (Request-ID: tx00000a9dff65235cbe523-0064dadec9-a09387f-akl-1) +``` + +Supplying the `--recursive, -r` parameter will delete all files within that container before deleting it + +``` { .sh } +openstack container delete --recursive +``` \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/create-and-manage-object-storage-with-the-dashboard.md b/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/create-and-manage-object-storage-with-the-dashboard.md new file mode 100644 index 000000000..4ab2598a9 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/create-and-manage-object-storage-with-the-dashboard.md @@ -0,0 +1,129 @@ +--- +hidden: false +label_names: +- object storage +- create +- manage +- dashboard +position: 1 +title: Create and manage object storage via the dashboard +--- + +## Creating an object storage container + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Object Storage` tab and select the `Containers` category + +Click `+ Container`. + +
+ ![Alt text](../../assets/images/flexi/object-storage-overview.png) +
+ +Within the `Create Container` dialog you have a few options + +`Container Name` +: A friendly name for your container. It must not contain “/” in its name. + +`Storage Policy` +: This defaults to default-placement and is the only option available at this time. + +`Container Access` +: You have a choice between `public` or `not-public` + + A `Public` container will allow anyone with the public URL to gain access to your objects in the container + +Once you have given the container a name and decided if its public or private click `Submit` to create the container. + +## Deleting an object storage container + +!!! note + You are not able to delete a container if there are items present within it. Please delete all items before attempting to delete the container. + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Object Storage` tab and select the `Containers` category + +Select the container you would like to delete and it should highlight with blue + +
+ ![Alt text](../../assets/images/flexi/object-storage-container-overview.png) +
+ +Hovering over the `Trashcan Icon` should show a tooltip that says *Delete Container* and clicking it should present a `Confirm Delete` dialog. + +If you are certain that you wish to delete the container click `Delete` and the container should be removed + +## Upload a file to a storage object container + +!!! note + Files uploaded into a FlexiHPC storage via the dashboard are saved as a binary/octet-stream which means they are only downloaded when they are requested via the URL. + + There is also an issue where the public URL provided via the dashboard doesn't auth correctly so you are unable to view/download files. + + The URL that currently works should you wish to view/download a file from object storage looks like the following https://object.akl-1.cloud.nesi.org.nz/*CONTAINER_NAME*/*FILE_NAME* + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Object Storage` tab and select the `Containers` category + +Select the container you would like to delete and it should highlight with blue + +
+ ![Alt text](../../assets/images/flexi/object-storage-container-overview.png) +
+ +On the far right there should be 3 icons, `Upload File` `+ Folder` and `Delete Item` + +Click the `Upload File` icon and within the `Upload File` dialog clicking `Choose File` should allow you to browse to the file on your local machine. You are also able to give it a different name should you so choose. + +
+ ![Alt text](../../assets/images/flexi/object-storage-upload-dialog.png) +
+ +Clicking `Upload File` will now begin to upload that file to the object storage container. The time it takes to complete the upload will depend on the file size and the network upload speed. + +## Create a folder like structure in an object storage container + +We say folder like structure as that is what it looks like from the dashboards perspective, however under lying this the structure is flat. + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Object Storage` tab and select the `Containers` category + +Select the container you would like to delete and it should highlight with blue + +
+ ![Alt text](../../assets/images/flexi/object-storage-container-overview.png) +
+ +On the far right there should be 3 icons, `Upload File` `+ Folder` and `Delete Item` + +Clicking `+ Folder` will present you with the `Create Folder` dialog. + +Fill in the *Folder Name* and click `Create Folder` \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/creating-and-managing-ec2-credentials-via-cli.md b/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/creating-and-managing-ec2-credentials-via-cli.md new file mode 100644 index 000000000..c3128af78 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/creating-and-managing-ec2-credentials-via-cli.md @@ -0,0 +1,63 @@ +--- +hidden: false +label_names: +- identity +- create +- manage +- cli +title: Creating and Managing EC2 Credentials via CLI +--- + +## Overview + +For using the OpenStack S3 API:s you need to generate an additional set of credentials. These can then be used to store data in the Swift Object store for applications that don’t have native Swift support but do support the S3 interfaces. + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + +## Create and fetch credentials using the CLI + +Running the below command will generate EC2 credentials + +``` { .sh } +openstack ec2 credentials create +``` + +With the following ouput + +``` { .sh .no-copy } ++------------+----------------------------------------------------------------------------------------------------------------+ +| Field | Value | ++------------+----------------------------------------------------------------------------------------------------------------+ +| access | | +| links | {'self': 'https://keystone.akl-1.cloud.nesi.org.nz/v3/users//credentials/OS-EC2/'} | +| project_id | | +| secret | | +| trust_id | None | +| user_id | | ++------------+----------------------------------------------------------------------------------------------------------------+ +``` + +Note the `access` field and the `secret` field. These are the 2 fields required to interact with the s3 protocol. + +The below command will fetch all EC2 credentails associated with the user + +``` { .sh } +openstack ec2 credentials list +``` + +``` { .sh .no-copy } ++---------------------+----------------------+--------------+-----------+ +| Access | Secret | Project ID | User ID | ++---------------------+----------------------+--------------+-----------+ +| | | | | ++---------------------+----------------------+--------------+-----------+ +``` + +## Delete credentials using the CLI + +Use the access key to refer to the credentials you wish to delete: + +``` { .sh } +openstack ec2 credentials delete USER_ACCESS_TOKEN +``` diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/index.md b/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/index.md new file mode 100644 index 000000000..01019d4c0 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/index.md @@ -0,0 +1,35 @@ +--- +hidden: false +label_names: +- Object Storage +- create +- manage +position: 1 +title: Create and Manage Object Storage +vote_count: 1 +vote_sum: 1 +--- + +Object Storage within FlexiHPC is a file system storage that is primarily used for storing static data. Unlike other storage systems, object storage is independent of virtual machines and operating system type. + +You are able to upload and download files from anywhere with network access using a few methods. + +The general use case for object storage is storing data that you upload once and read or download many times. Its not the best for files that are being modified consistently. + +There are a few ways to create and mange object storage within FlexiHPC + +- [Creating and Managing object storage via the Dashboard](create-and-manage-object-storage-with-the-dashboard.md) + +- [Creating and Managing object storage via CLI](create-and-manage-object-storage-via-cli.md) + +If you are looking to interact with the s3 Protocol then you need to also generate yourself some EC2 credentials + +- [Creating and Managing EC2 credentials](creating-and-managing-ec2-credentials-via-cli.md) + +Interacting with the FlexiHPC Object storage can be done a few ways outside of the dashboard. + +- [Interacting with the S3 protocol with Boto3](using-boto3-to-interact-with-object-storage.md) + +- [Using FlexiHPC object storage for Terraform state file](../launch-and-mange-instances/deployment-of-an-instance-with-terraform.md#using-flexihpc-object-storage-to-store-the-terraform-state-file) + +- [Accessing object storage with Cyberduck](using-cyberduck-to-interact-with-object-storage.md) diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/summary.md b/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/summary.md new file mode 100644 index 000000000..691c19421 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/summary.md @@ -0,0 +1,9 @@ +* [Object Storage: Create and Manage](index.md) +* With the Dashboard + * [Create and Manage](create-and-manage-object-storage-with-the-dashboard.md) +* With the CLI + * [Create and Manage](create-and-manage-object-storage-via-cli.md) +* [Creating and Managing EC2 credentials](creating-and-managing-ec2-credentials-via-cli.md) +* [Interacting with the S3 protocol with Boto3](using-boto3-to-interact-with-object-storage.md) +* [Accessing object storage with Cyberduck](using-cyberduck-to-interact-with-object-storage.md) +* * \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/using-boto3-to-interact-with-object-storage.md b/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/using-boto3-to-interact-with-object-storage.md new file mode 100644 index 000000000..b2bae3349 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/using-boto3-to-interact-with-object-storage.md @@ -0,0 +1,111 @@ +## Interacting with the S3 protocol with Boto3 + +!!! note + Prior to starting this you will need to have read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) and ran the commands to generate [EC2 Credentials](creating-and-managing-ec2-credentials-via-cli.md) + + Boto3 documentation can be found [here](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) + +Since FlexiHPC object storage has the S3 protocol built on top of it you are able to use the python boto3 client to interact with it. + +When doing python development it is recommend that you do so within a python venv. As this article wont be covering what a python venv is please have a read of the the following [documentation](https://docs.python.org/3/library/venv.html#) on the python website + +Ensure your in a clean folder, for this example we will be in a new folder called `FLEXIHPC.Boto3.Example` + +Once inside that folder we will make a python venv by ruining the below command + +``` { .sh } +python3 -m venv boto3-dev +``` + +Once that has completed setting up the venv we want to activate that + +``` { .sh } +. boto3-dev/bin/activate +``` + +We then need to bring in the boto3 module for python + +``` { .sh } +pip3 install boto3 +``` + +This will also bring in any other required modules. + +Create a file called `main.py` and add the following to that file + +``` { .py } +import boto3 +import botocore + +#boto3.set_stream_logger(name='botocore') # this enables debug tracing +session = boto3.session.Session() +s3_client = session.client( + service_name='s3', + aws_access_key_id='EC2_ACCESS_TOKEN', + aws_secret_access_key='EC2_SECRET_TOKEN', + endpoint_url='https://object.akl-1.cloud.nesi.org.nz/', + config=botocore.client.Config(signature_version='s3v4') +) + +#List all buckets in the project +bucketsResponse = s3_client.list_buckets() + +print('Buckets:') +for bucket in bucketsResponse['Buckets']: + print(f' {bucket["Name"]}') +``` + +You will need to change `EC2_ACCESS_TOKEN` and `EC2_SECRET_TOKEN` to the ones that were generated when you ran the commands to generate [EC2 Credentials](../create-and-manage-identity/index.md) + +Save the file and call it using the python command + +``` { .sh } +python3 main.py +``` + +The output should look similar to the below + +``` { .sh .no-copy} +Buckets: + boto3-test + terraform-state +``` + +## Uploading a file to object storage + +You will need to know the name of the container you wish to upload the file too. You can either get this from the [dashboard](create-and-manage-object-storage-with-the-dashboard.md) or [CLI](create-and-manage-object-storage-via-cli.md) + +We then use the below code to upload a file to the container we specify + +``` +s3_client.upload_file(, , ) +``` + +`` +: The local location of the file you wish to upload to FlexiHPC object storage + +`` +: The container name within FlexiHPC, example would be boto3-test + +`` +: The name of the file as it would be presented on the FlexiHPC object storage + +## Downloading a file from object storage + +You will need to know the name of the container you wish to download the file from. You can either get this from the [dashboard](create-and-manage-object-storage-with-the-dashboard.md) or [CLI](create-and-manage-object-storage-via-cli.md) + +We use the below code to download a file from the container we specify + +``` +with open('', 'wb') as data: + s3_client.download_fileobj('', '', data) +``` + +`` +: The name of the file as it would be presented on the FlexiHPC object storage + +`` +: The container name within FlexiHPC, example would be boto3-test + +`` +: This is generally the `` however if its inside a folder then it might have that appended to the file name \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/using-cyberduck-to-interact-with-object-storage.md b/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/using-cyberduck-to-interact-with-object-storage.md new file mode 100644 index 000000000..6b1c300ac --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-object-storage/using-cyberduck-to-interact-with-object-storage.md @@ -0,0 +1,45 @@ +## Accessing object storage with Cyberduck + +!!! note + You will need [EC2 credentials](creating-and-managing-ec2-credentials-via-cli.md) to use Cyberduck + +Cyberduck is a libre server and cloud storage browser for Mac and Windows with support for FTP, SFTP, WebDAV, Amazon S3, OpenStack Swift, Backblaze B2, Microsoft Azure & OneDrive, Google Drive and Dropbox. + +## Installation + +Cyberduck can be downloaded and installed from the [Cyberduck website](https://cyberduck.io/). You can also get it from the Windows Store or the Apple Mac App Store. Instructions for installing can be found at the respective locations. + +## Connecting using Cyberduck + +Once Cyberduck is installed you will want to start it and click on `Open Connection` + +
+ ![Alt text](../../assets/images/flexi/cyberduck-overview.png) +
+ +Within the `Open Connection` dialog you will want to ensure that the dropdown has selected `Amazon S3` + +
+ ![Alt text](../../assets/images/flexi/cyberduck-connection-dialog.png) +
+ +We then need to update the details to interact and auth with FlexiHPC + +`Server` +: Server should be updated to `object.akl-1.cloud.nesi.org.nz` and the port should be 443 + +`Access Key ID` +: This should be the EC2 Credentials Access key token + +`Secret Access Key` +: This should be the EC2 Credentials Secret key token + +
+ ![Alt text](../../assets/images/flexi/cyberduck-connection-dialog-rdc.png) +
+ +Click on `Connect` to open the connection + +
+ ![Alt text](../../assets/images/flexi/cyberduck-container-view.png) +
diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-volumes/create-and-manage-volumes-via-cli.md b/docs/research_developer_cloud/user-guides/create-and-manage-volumes/create-and-manage-volumes-via-cli.md new file mode 100644 index 000000000..eef08ab6e --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-volumes/create-and-manage-volumes-via-cli.md @@ -0,0 +1,218 @@ +--- +hidden: false +label_names: +- volumes +- create +- manage +- cli +position: 1 +title: Create and manage volumes via CLI +--- + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + +## Create an empty volume + +Running the following command will create a volume with 8 gibibytes (GiB) of space, and specify the availability zone. This is creates an empty volume that does not contain a file system or a partition table: + +``` +openstack volume create --size 8 --availability-zone nova my-new-volume +``` + +``` { .sh .no-copy } ++---------------------+--------------------------------------+ +| Field | Value | ++---------------------+--------------------------------------+ +| attachments | [] | +| availability_zone | nova | +| bootable | false | +| consistencygroup_id | None | +| created_at | 2023-08-04T03:40:29.634209 | +| description | None | +| encrypted | False | +| id | f297c807-1eb3-4b48-8438-04d995ca498a | +| multiattach | False | +| name | my-new-volume | +| properties | | +| replication_status | None | +| size | 8 | +| snapshot_id | None | +| source_volid | None | +| status | creating | +| type | ceph-ssd | +| updated_at | None | +| user_id | fb9a3d02c89e4cfdbe64658ad43ece97 | ++---------------------+--------------------------------------+ +``` + +To verify that your volume was created successfully, list the available volumes: + +``` +openstack volume list +``` + +``` { .sh .no-copy } ++--------------------------------------+---------------+-----------+------+-------------+ +| ID | Name | Status | Size | Attached to | ++--------------------------------------+---------------+-----------+------+-------------+ +| f297c807-1eb3-4b48-8438-04d995ca498a | my-new-volume | available | 8 | | ++--------------------------------------+---------------+-----------+------+-------------+ +``` + +If your volume was created successfully, its status is `available`. If its status is `error`, you might have exceeded your quota. + +## Attach a volume to an instance + +Attach your volume to a server, specifying the server ID and the volume ID: + +``` +openstack server add volume --device /dev/vdb +``` + +Show information for your volume: + +``` +openstack volume show f297c807-1eb3-4b48-8438-04d995ca498a +``` + +The output shows that the volume is attached to the server with ID `84c6e57d-a6b1-44b6-81eb-fcb36afd31b5`, is in the nova availability zone, and is bootable. + +``` { .sh .no-copy } ++------------------------------+--------------------------------------+ +| Field | Value | ++------------------------------+--------------------------------------+ +| attachments | [{u'device': u'/dev/vdb', | +| | u'server_id': u'84c6e57d-a | +| | u'id': u'573e024d-... | +| | u'volume_id': u'573e024d... | +| availability_zone | nova | +| bootable | false | +| consistencygroup_id | None | +| created_at | 2023-08-04T03:40:29.000000 | +| description | None | +| encrypted | False | +| id | f297c807-1eb3-4b48-8438-04d995ca498a | +| multiattach | False | +| name | my-new-volume | +| os-vol-tenant-attr:tenant_id | 4f07cc254d6c4471805d49bae1f739b9 | +| properties | | +| replication_status | None | +| size | 8 | +| snapshot_id | None | +| source_volid | None | +| status | available | +| type | ceph-ssd | +| updated_at | 2023-08-04T03:40:29.000000 | +| user_id | fb9a3d02c89e4cfdbe64658ad43ece97 | ++------------------------------+--------------------------------------+ +``` + +## Detach a volume from an instance + +Detach your volume from a server, specifying the server ID and the volume ID: + +``` +openstack server remove volume +``` + +Show information for your volume: + +``` +openstack volume show f297c807-1eb3-4b48-8438-04d995ca498a +``` + +The output shows that the volume is no longer attached to the server: + +``` { .sh .no-copy } ++------------------------------+--------------------------------------+ +| Field | Value | ++------------------------------+--------------------------------------+ +| attachments | [] | +| availability_zone | nova | +| bootable | false | +| consistencygroup_id | None | +| created_at | 2023-08-04T03:40:29.000000 | +| description | None | +| encrypted | False | +| id | f297c807-1eb3-4b48-8438-04d995ca498a | +| multiattach | False | +| name | my-new-volume | +| os-vol-tenant-attr:tenant_id | 4f07cc254d6c4471805d49bae1f739b9 | +| properties | | +| replication_status | None | +| size | 8 | +| snapshot_id | None | +| source_volid | None | +| status | available | +| type | ceph-ssd | +| updated_at | 2023-08-04T03:40:29.000000 | +| user_id | fb9a3d02c89e4cfdbe64658ad43ece97 | ++------------------------------+--------------------------------------+ +``` + +## Resize a volume + +To resize your volume, you must first detach it from the server if it is current. To detach the volume from your server, pass the server ID and volume ID to the following command: + +``` +openstack server remove volume +``` + +This command does not provide any output. + +``` +openstack volume list +``` + +``` { .sh .no-copy } ++--------------------------------------+---------------+-----------+------+-------------+ +| ID | Name | Status | Size | Attached to | ++--------------------------------------+---------------+-----------+------+-------------+ +| f297c807-1eb3-4b48-8438-04d995ca498a | my-new-volume | available | 8 | | ++--------------------------------------+---------------+-----------+------+-------------+ +``` + +Note that the volume is now available. + +Resize the volume by passing the volume ID and the new size (a value greater than the old one) as parameters: + +``` +openstack volume set f297c807-1eb3-4b48-8438-04d995ca498a --size 10 +``` + +This command does not provide any output. + +## Delete a volume + +To delete your volume, you must first detach it from the server. Delete the volume the volume ID: + +``` +openstack volume delete f297c807-1eb3-4b48-8438-04d995ca498a +``` + +This command does not provide any output. + +List the volumes again, and note that the status of your volume is `deleting`: + +``` +openstack volume list +``` + +``` { .sh .no-copy } ++----------------+-----------------+-----------+------+-------------+ +| ID | Display Name | Status | Size | Attached to | ++----------------+-----------------+-----------+------+-------------+ +| f297c807-1e... | my-new-volume | deleting | 8 | | ++----------------+-----------------+-----------+------+-------------+ +``` + +When the volume is fully deleted, it disappears from the list of volumes: + +``` { .sh .no-copy } ++--------------------------------------+------+-----------+------+-------------+ +| ID | Name | Status | Size | Attached to | ++--------------------------------------+------+-----------+------+-------------+ +| d0d686e9-bcfe-499b-850d-50f4a998ad81 | | available | 30 | | ++--------------------------------------+------+-----------+------+-------------+ +``` \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-volumes/create-and-manage-volumes-with-the-dashboard.md b/docs/research_developer_cloud/user-guides/create-and-manage-volumes/create-and-manage-volumes-with-the-dashboard.md new file mode 100644 index 000000000..c128bdd61 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-volumes/create-and-manage-volumes-with-the-dashboard.md @@ -0,0 +1,175 @@ +--- +hidden: false +label_names: +- volumes +- create +- manage +- dashboard +position: 1 +title: Create and manage volumes via the dashboard +--- + +## Create a volume + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Volume` tab and select the `Volumes` category + +Click `Create Volume`. + +In the dialog box that opens, enter or select the following values. + +`Volume Name` +: Specify a name for the volume. + +`Description` +: Optionally, provide a brief description for the volume. + +`Volume Source` +: Select one of the following options + + - `No source, empty volume` + : Creates an empty volume. An empty volume does not contain a file system or a partition table. + + - `Image` + : If you choose this option, a new field for Use image as a source displays. You can select the image from the list. + + - `Volume` + : If you choose this option, a new field for Use volume as a source displays. You can select the volume from the list. Options to use a snapshot or a volume as the source for a volume are displayed only if there are existing snapshots or volumes. + +`Type` +: Select one of the following options: + + - `ceph-ssd` + : Flash based storage, this has the fastest read and write speeds however is generally priced higher + + - `ceph-hdd` + : Spinning disk based storage, this has the slow read and write speeds compared to flash based however it is generally priced lower then flash based storage + + - `ceph-ssd-encrypted` + : Flash based storage that is further encrypted + + - `ceph-hdd-encrypted` + : Spinning disk based storage that is further encrypted + +!!! note + All storage types are encrypted on the FlexiHPC based systems, the encrypted drives are an option to further encrypt the volume + +`Size (GB)` +: The size of the volume in gibibytes (GiB). + +`Availability Zone` +: By default this will be nova. This specifies which zone it will be deployed too if there were multiple zones. The current default and only zone is nova at this point in time. + +Click `Create Volume` + +The dashboard shows the volume on the `Volumes` tab. + +## Attach a volume to an instance + +After you create one or more volumes, you can attach them to instances. You can attach a volume to one instance at a time. + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Volume` tab and select the `Volumes` category + +Select the volume to add to an instance, expand the `Actions` column and click `Manage Attachments`. + +In the `Manage Volume Attachments` dialog box, select an instance. + +Click `Attach Volume` + +The dashboard shows the instance to which the volume is now attached and the device name. + +You can view the status of a volume in the Volumes tab of the dashboard. The volume is either Available or In-Use. + +Now you can log in to the instance and mount, format, and use the disk. + +## Detach a volume from an instance + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Volume` tab and select the `Volumes` category + +Select the volume to add to an instance, expand the `Actions` column and click `Manage Attachments`. + +Click `Detach Volume` and confirm your changes. + +A message indicates whether the action was successful. + +## Create a snapshot from a volume + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Volume` tab and select the `Volumes` category + +Select the volume, expand the `Actions` column and click `Create Snapshot`. + +In the dialog box that opens, enter a snapshot name and a brief description. + +Confirm your changes. + +The dashboard shows the new volume snapshot in Volume Snapshots tab. + +## Edit a volume + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Volume` tab and select the `Volumes` category + +Select the volume, expand the `Actions` column and click `Edit Volume`. + +In the `Edit Volume` dialog box, update the name and description of the volume. + +Click `Edit Volume`. + +!!! note + You can extend a volume by using the Extend Volume option available in the Actions dropdown list and entering the new value for volume size. + +## Delete a volume + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Volume` tab and select the `Volumes` category + +Select the check boxes for the volumes that you want to delete. + +Click `Delete Volumes` and confirm your choice. + +A message indicates whether the action was successful. \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-volumes/format-and-mount-volumes.md b/docs/research_developer_cloud/user-guides/create-and-manage-volumes/format-and-mount-volumes.md new file mode 100644 index 000000000..4d14a1bf2 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-volumes/format-and-mount-volumes.md @@ -0,0 +1,158 @@ +--- +hidden: false +label_names: +- volumes +- create +- manage +- dashboard +position: 1 +title: Format and Mount volumes +--- + +# Format and Mount a Volume + +!!! warning + Formatting a device/volume erases all existing data on a device, if a file system already exists on the target device/volume. If you need to retain the data on your volume, you should skip to the mount section below. + +!!! note + This guide is based on a linux and is using Ubuntu as the Linux distro, however these commands are generic for most linux distros + +You can verify that the volume is attached to your instance via the NeSI RDC dashboard under `Project` > `Volumes` > `Volumes` + +
+ ![Alt text](../../assets/images/flexi/volume-attached.png) +
+ +Connect to the instance with the attached Volume and using the command `lsblk` it should have an output similar to the following + +``` { .sh .no-copy } +$ lsblk +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS +loop0 7:0 0 40.8M 1 loop /snap/snapd/20092 +loop1 7:1 0 111.9M 1 loop /snap/lxd/24322 +loop2 7:2 0 63.5M 1 loop /snap/core20/2015 +loop3 7:3 0 0B 0 loop +loop4 7:4 0 0B 0 loop +loop5 7:5 0 0B 0 loop +loop6 7:6 0 0B 0 loop +loop7 7:7 0 0B 0 loop +sr0 11:0 1 482K 0 rom +vda 252:0 0 80G 0 disk +└─vda1 252:1 0 80G 0 part / +vdb 252:16 0 10G 0 disk +``` + +If we reference that output with the dashboard we can see the following drives: + +``` { .sh .no-copy } +vda = my_ubuntu_volume +vdb = test-volume +``` + +## Format a volume + +Depending on how you created your volume, it may not have a file system and you need to create one before mounting, i.e. format the device. The exact format command syntax is dependent on the virtual machine’s operating system and the type of file system you need. The example below formats the volume attached as `/dev/vdb` in the Ubuntu-based instance using the `ext4` filesystem. + +``` +sudo mkfs -t ext4 /dev/vdb +``` + +!!! warning + Ensure that your drive path is the drive that you wish to format, picking the wrong one my result in data loss + +To make your volume/device available to the operating system you need to mount it on a directory called a mount point. You can mount your device using an in-memory-only mount, but the mount will be lost upon rebooting your instance. We recommend you configure the mounting of your device/volume filesystem persistently using the configuration file `/etc/fstab`. In both examples we will create a mount point called `/mnt-vol`. + +## In memory only mount + +You can use below commands to create a mount point called `/mnt-vol` and to mount the device `/dev/vdb` at that mount point. + +``` +sudo mkdir /mnt-vol +sudo mount /dev/vdb /mnt-vol -t auto +``` + +!!! note + On reboot this mount will be lost and the `mount` command will need to be run again + +## Using /etc/fstab + +To ensure that your Volume is remounted after a reboot of your instance, you should configure it in the file `/etc/fstab`. + +First create the mount point `/mnt-vol` using: + +``` { .sh } +sudo mkdir /mnt-vol +``` + +When we mount drives in the `fstab` file its higly recommended that we do so using the drives UUID, we can find the UUID of the drive a few ways. We will use the command `blkid` + +``` { .sh } +sudo blkid /dev/vdb +``` + +Sample output: + +``` { .sh .no-copy } +$ sudo blkid /dev/vdb +/dev/vdb: UUID="238c1032-4fcb-4dd7-86a2-957d3fc10201" BLOCK_SIZE="4096" TYPE="ext4" +``` + +Then use a text editor to open the `/etc/fstab `file. You can do this with the command below. We are using the nano text editor in this example but you can use whichever text editor your prefer, just replace nano with the name of the text editor (Vim etc). + +``` { .sh } +sudo nano /etc/fstab +``` + +You can then add the following line to `/etc/fstab`. The `/dev/vdb` is the device you’re mounting and `/mnt-vol` is the its target mount point. + +The syntax that we want to use looks like the following + +``` +UUID={YOUR-UID} {/path/to/mount/point} {file-system-type} defaults,nofail 0 2 +``` + +Using our example UUID from the ouput of the command `blkid` it should look like this + +``` +UUID=238c1032-4fcb-4dd7-86a2-957d3fc10201 /mnt-vol ext4 defaults,nofail 0 2 +``` + +This is appended to the `/etc/fstab` file. + +The example `fstab` file looks like this + +``` { .sh .no-copy } +LABEL=cloudimg-rootfs / ext4 defaults 0 1 +UUID=238c1032-4fcb-4dd7-86a2-957d3fc10201 /mnt-vol ext4 defaults,nofail 0 2 +``` + +Save that file and after adjusting the `/etc/fstab` file you need to initiate any changes. + +Use the mount all command: + +``` { .sh } +sudo mount --all +``` + +We can verify the mounted volume by running the command `lsblk` again + +``` { .sh .no-copy } +$ lsblk +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS +loop0 7:0 0 40.8M 1 loop /snap/snapd/20092 +loop1 7:1 0 111.9M 1 loop /snap/lxd/24322 +loop2 7:2 0 63.5M 1 loop /snap/core20/2015 +sr0 11:0 1 482K 0 rom +vda 252:0 0 80G 0 disk +└─vda1 252:1 0 80G 0 part / +vdb 252:16 0 10G 0 disk /mnt-vol +``` + +We can see that the volume `vdb` is mounted at the path `/mnt-vol` + +You may have to change ownership or write privileges to enable writing to the ephemeral storage, using chown, chgrp or chmod, e.g. + +``` +sudo chown ubuntu:ubuntu /mnt-vol +``` + diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-volumes/index.md b/docs/research_developer_cloud/user-guides/create-and-manage-volumes/index.md new file mode 100644 index 000000000..611b2a3e2 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-volumes/index.md @@ -0,0 +1,19 @@ +--- +hidden: false +label_names: +- volumes +- create +- manage +position: 1 +title: Create and manage volumes +vote_count: 1 +vote_sum: 1 +--- + +Volumes are block storage devices that you attach to instances to enable persistent storage. You can attach a volume to a running instance or detach a volume and attach it to another instance at any time. You can also create a snapshot from or delete a volume. + +Volumes can be created a few ways + +- Create and manage volumes via the dashboard + +- Create and manage volumes via CLI \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/create-and-manage-volumes/summary.md b/docs/research_developer_cloud/user-guides/create-and-manage-volumes/summary.md new file mode 100644 index 000000000..fc803811e --- /dev/null +++ b/docs/research_developer_cloud/user-guides/create-and-manage-volumes/summary.md @@ -0,0 +1,7 @@ +* [Volumes: Create and Manage](index.md) +* With the Dashboard + * [Create and Manage](create-and-manage-volumes-with-the-dashboard.md) +* With the CLI + * [Create and Manage](create-and-manage-volumes-via-cli.md) +* [Format and Mount Volume](format-and-mount-volumes.md) +* */ \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/index.md b/docs/research_developer_cloud/user-guides/index.md new file mode 100644 index 000000000..ad3ba65a7 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/index.md @@ -0,0 +1,40 @@ +# Features + +We want to partner with early access users to explore and build scalable approaches for harnessing cloud technologies and DevOps practices in computational research. + +Our platform's building blocks include: + +`Compute` +: Virtual machines optimised for high-performance computational needs. Multiple flavours of CPU and GPU resources to support a range of compute and memory requirements. + + → Get started with our [Compute User Guides](launch-and-mange-instances/index.md) + +`Images` +: Tailored operating systems to meet your research computing and data needs. Ready-to-use options available, as well as capability to create custom images and contribute to a pool of community-developed images. + + → Get started with our [Images User Guides](uploading-and-managing-Images/index.md) + +`Storage` +: Scalable storage space that can be dynamically mounted to your Compute instances. Options to encrypt storage volumes for added security. + + → Get started with our [Storage User Guides](create-and-manage-volumes/index.md) + +`Networks` +: Fast, reliable, and secure connectivity built on the REANNZ national network. Options for network customisation and security groups. + + → Get started with our [Networks User Guides](create-and-manage-networks/index.md) + +`Identity` +: Identity management services to create application credentials and control access to projects. + + → Get started with our [Identity User Guides](create-and-manage-identity/index.md) + +`Object Storage` +: Openstack S3 compatiable object storage. + + → Get started with our [Object Storage User Guides](create-and-manage-object-storage/index.md) + +`Application Programming Interface (API)` +: All services are programmable via a public API to enable repeatable definition of infrastructure through software code. + + diff --git a/docs/research_developer_cloud/user-guides/launch-and-mange-instances/connect-to-instance-ssh.md b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/connect-to-instance-ssh.md new file mode 100644 index 000000000..101c0dc02 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/connect-to-instance-ssh.md @@ -0,0 +1,24 @@ +# Connect to your instance by using SSH + +To use SSH to connect to your instance, use the downloaded keypair file. You will also need to ensure you have created and assigned a `Security group` to your instance that allows connections on port 22. + +Read Create and Manage Security Groups via [Dashboard](../create-and-manage-networks/manage-security-groups-with-the-dashboard.md) or [CLI](../create-and-manage-networks/manage-security-groups-via-cli.md) to create one that allows port 22 if you have not done so already. You will then need to add that to the Instance if you havent already via the [Dashboard](manage-security-groups-of-an-Instance-via-the-dashboard.md#attach-a-security-group) or [CLI](manage-security-groups-of-an-Instance-via-the-cli.md#adding-a-security-group-to-an-instance) + +!!! note + The user name is `ubuntu` for the Ubuntu cloud images on FlexiHPC. We have a list of default users for the most common cloud images in [Default user for images](default-user-nesi-images.md) + +Insure your instance has a `floating ip` associated with it. If you need to assign one then check the following Assign Floating IP to an Instance via the Dashboard + +Copy the `floating ip` address for your instance. + +Use the **ssh** command to make a secure connection to the instance. For example: + +``` +ssh -i MyKey.pem ubuntu@10.0.0.2 +``` + +!!! note + A `MyKey.pem` private key is a key kept secret by the SSH user on their client machine. The user must never reveal the private key to anyone, including the server (server administrator), to ensure the their identity is never compromised. + Please look at [Create and Manage Keypairs](../create-and-manage-keypairs/index.md) to create or import a keypair for use on the RDC + +At the prompt, type `yes`. \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/launch-and-mange-instances/default-user-nesi-images.md b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/default-user-nesi-images.md new file mode 100644 index 000000000..3388d7aff --- /dev/null +++ b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/default-user-nesi-images.md @@ -0,0 +1,27 @@ +--- +hidden: false +label_names: +- instance +- launch +position: 1 +title: Launch and mange instances +vote_count: 1 +vote_sum: 1 +--- + +The following images provided to the Research Developer Cloud by NeSI all have the following default username when using ssh to connect + +`Ubuntu` +: The default user is `ubuntu` + +`CentOS` +: The default user is `centos` + +`FedoraCoreOS` +: The default user is `core` + +`Rocky` +: The default user is `cloud-user` + +`Rocky-Cloud` +: The default user is `rocky` \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/launch-and-mange-instances/deployment-of-an-instance-with-terraform.md b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/deployment-of-an-instance-with-terraform.md new file mode 100644 index 000000000..f66e44b8e --- /dev/null +++ b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/deployment-of-an-instance-with-terraform.md @@ -0,0 +1,200 @@ +--- +hidden: false +label_names: +- instance +- resize +title: Deployment of an instance with Terraform +position: 10 +--- + +!!! note + You will need to have Terraform installed on the machine that will be executing the commands. Follow the [Install Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) link from the official documentation. We also highly recommend that you use [Application Credentials](../create-and-manage-identity/creating-and-managing-application-credentials-with-the-dashboard.md) to do any automation + +Please make sure you have download the `clouds.yaml` file for your application credentials and its sitting in the directory `~/.config/openstack/` + +Generating Application Credentials is covered [here](../create-and-manage-identity/creating-and-managing-application-credentials-with-the-dashboard.md) + +Normally creating a folder space for Terraform projects can be a good thing as this ensures the Terraform state file doesn't clash with another. + +Once you are in an empty folder, example `terraform-example-flexihpc`, we will need to create a file called `main.tf` + +Inside this file we will need to define the provider + +``` hcl +provider "openstack" { + cloud = "NAME_IN_CLOUDS_YAML" +} +``` + +Replace the placeholder `NAME_IN_CLOUDS_YAML` with the name of your openstack section in the clouds.yaml file. An example `clouds.yaml` with multiple entries looks like the following: + +``` { .yaml .no-copy } +clouds: + openstack-entry-1: + auth: + auth_url: https://keystone.akl-1.cloud.nesi.org.nz + application_credential_id: "APP_CREDS_ID" + application_credential_secret: "APP_CREDS_SECRET" + interface: "public" + identity_api_version: 3 + auth_type: "v3applicationcredential" + verify: false + openstack-entry-2: + auth: + auth_url: https://keystone.akl-1.cloud.nesi.org.nz + application_credential_id: "APP_CREDS_ID" + application_credential_secret: "APP_CREDS_SECRET" + region_name: "akl-1" + interface: "public" + identity_api_version: 3 + auth_type: "v3applicationcredential" + verify: false +``` +You will want to be using the name `openstack-entry-X` as your the value in `NAME_IN_CLOUDS_YAML` + +Then within the same file we want to define the compute instance + +``` hcl +resource "openstack_compute_instance_v2" "compute_instance" { + name = "compute-instance-0" + flavor_id = "FLEXIHPC_FLAVOR_ID" + image_id = "FLEXIHPC_IMAGE_ID" + key_pair = "FLEXIHPC_KEY_PAIR_NAME" + security_groups = ["FLEXIHPC_SECURITY_GROUP_NAME"] + + network { + name = "FLEXIHPC_NETWORK_NAME" + } +} +``` + +Replace the placeholders `FLEXIHPC_FLAVOR_ID`, `FLEXIHPC_IMAGE_ID`, `FLEXIHPC_KEY_PAIR_NAME`, `FLEXIHPC_SECURITY_GROUP_NAME`, and `FLEXIHPC_NETWORK_NAME` with appropriate values from your OpenStack environment. + +The network name is normally the same as your FlexiHPC project name. + +Then we want to apply a floating IP to the instance so we can connect from outside the FlexiHPC platform + +``` hcl +resource "openstack_networking_floatingip_v2" "floating_ip" { + pool = "external" +} + +resource "openstack_compute_floatingip_associate_v2" "floating_ip_association" { + floating_ip = openstack_networking_floatingip_v2.floating_ip.address + instance_id = openstack_compute_instance_v2.compute_instance.id +} +``` + +The floating IP pool is `external` within the FlexiHPC platform. + +Once all the above is filled in then you only need to run the standard terraform commands + +``` +terraform init +``` + +This will initialize the terraform directory with all the required modules + +Then we run the command to create our resources + +``` +terraform apply +``` + +Terraform will prompt you to confirm the changes. Type "yes" to proceed with the creation of the compute instance and the floating IP association. + +Terraform will then provision the compute instance and associate the floating IP to it. + +Remember that this is a basic example, and you might need to adapt it to your specific FlexiHPC environment and configurations. + +The full `main.tf` file for completeness + +``` hcl title="main.tf" +terraform { +required_version = ">= 0.14.0" + required_providers { + openstack = { + source = "terraform-provider-openstack/openstack" + version = "~> 1.51.1" + } + } +} + +provider "openstack" { + cloud = "NAME_IN_CLOUDS_YAML" +} + +resource "openstack_compute_instance_v2" "compute_instance" { + name = "compute-instance-0" + flavor_id = "FLEXIHPC_FLAVOR_ID" + image_id = "FLEXIHPC_IMAGE_ID" + key_pair = "FLEXIHPC_KEY_PAIR_NAME" + security_groups = ["FLEXIHPC_SECURITY_GROUP_NAME"] + + network { + name = "FLEXIHPC_NETWORK_NAME" + } +} + +resource "openstack_networking_floatingip_v2" "floating_ip" { + pool = "external" +} + +resource "openstack_compute_floatingip_associate_v2" "floating_ip_association" { + floating_ip = openstack_networking_floatingip_v2.floating_ip.address + instance_id = openstack_compute_instance_v2.compute_instance.id +} +``` + +## Using FlexiHPC object storage to store the Terraform state file + +Should you wish to not include the terraform state file within the git repo then you will want to update the above with a the backend that you wish to store that file + +Within the first chunk of the file you want to add the following so it looks like this + +``` hcl +terraform { +required_version = ">= 0.14.0" + required_providers { + openstack = { + source = "terraform-provider-openstack/openstack" + version = "~> 1.51.1" + } + } + + backend "s3" { + bucket = "" + key = "state/terraform.tfstate" + endpoint = "https://object.akl-1.cloud.nesi.org.nz/" + sts_endpoint = "https://object.akl-1.cloud.nesi.org.nz/" + access_key = "" + secret_key = "" + #region = "us-east-1" + force_path_style = "true" + skip_credentials_validation = "true" + } +} +``` + +We have added the `backend "s3"` chunk to the `terraform` block + +`` +: The container name within FlexiHPC object storage. You can create this either via the [dashboard](../create-and-manage-object-storage/create-and-manage-object-storage-with-the-dashboard.md) or [CLI](../create-and-manage-object-storage/create-and-manage-object-storage-via-cli.md) + +You will need to update the following after generating [EC2 Credentials](../create-and-manage-identity/index.md) + +`` +: The EC2 Credentials Access Token + +`` +: The EC2 Credentials User Secret + +Save that file and run + +``` { .sh } +terraform init -reconfigure +``` + +This will reconfigure the backend to store the state file on FlexiHPC, you can also pass `-migrate-state` instead of `-reconfigure` should you have a state file that you want to move there from a previous run. + +Your terraform state file should now be configured and stored on FlexiHPC object storage \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/launch-and-mange-instances/index.md b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/index.md new file mode 100644 index 000000000..0ae85445c --- /dev/null +++ b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/index.md @@ -0,0 +1,34 @@ +--- +hidden: false +label_names: +- instance +- launch +position: 1 +title: Launch and mange instances +vote_count: 1 +vote_sum: 1 +--- + +Instances are virtual machines that run inside of the FlexiHPC cloud space. + +FlexiHPC offers 2 ways to Launch and instance on the platform: + +- [Launch an Instance via Dashboard](launch-an-instance-via-dashboard.md) + +This is the most user friendly way to get up and running as its all done via the FlexiHPC dashboard. + +- [Launch an Instance via CLI](launch-an-instance-via-cli.md) + +This is a more advance way of interacting with the FlexiHPC platform. It requires some environment setup however it gives you the most control over the your project within the platform. + +After reading one of the above you should be able to connect to the instance using ssh by following [Connecting to your instance with SSH](connect-to-instance-ssh.md) + +## Resizing an Instance + +Resizing an instance allows you to scale the instance either up, if your workload requires a bit more grunt, or down, should you no longer need to consume a large amount of resources. + +FlexiHPC allows you to resize and instance in 2 ways + +- [Resizing an instance via the dashboard](resizing-an-Instance-via-the-dashboard.md) + +- [Resizing an instance via CLI](resizing-an-Instance-via-cli.md) \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/launch-and-mange-instances/launch-an-instance-from-a-volume.md b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/launch-an-instance-from-a-volume.md new file mode 100644 index 000000000..3d3fac49d --- /dev/null +++ b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/launch-an-instance-from-a-volume.md @@ -0,0 +1,273 @@ +--- +hidden: false +label_names: +- instance +- launch +- cli +- volume +position: 2 +title: Launch an Instance from a volume +--- + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + +You can create a volume from an existing image, volume, or snapshot. This procedure shows you how to create a volume from an image, and use the volume to boot an instance. + +List the available images. + +``` +openstack image list +``` + +``` { .sh .no-copy } ++--------------------------------------+----------------------------------------------------------+--------+ +| ID | Name | Status | ++--------------------------------------+----------------------------------------------------------+--------+ +| 701e29ac-8963-4cf9-b90a-e1b14095866d | CentOS-Stream-8 | active | +| 42ebfb1b-f136-4947-ae1a-025ad57b369c | CentOS-stream8-baremetal | active | +| 386c661a-4c30-4f09-b536-511a862102b4 | FedoraCoreOS35 | active | +| fe8c98d3-7a87-4b5b-9f9e-0f967c53f9bd | FedoraCoreOS37 | active | +| 622c4f3f-8e62-4c81-8809-69b0a34a28e0 | PostgreSQL-Ubuntu-20.04.4 | active | +| 3936d736-e5bb-4024-a361-512fd40413bc | RockyLinux-8.5 | active | +| eb40dbb5-7da6-4784-b47c-f417c9d3b126 | RockyLinux-8.6 | active | +| 2b00f364-1bd0-432c-91f9-8d1adda6fc9f | RockyLinux-8.6-OFED-5.7 | active | +| f366dd3a-5353-47dd-9e92-662055125174 | RockyLinux-8.7 | active | +| b443a9a2-32d1-48c1-8d84-bcc10adbb0c3 | RockyLinux-8.7-OFED-5.8 | active | +| 1276db65-e5de-4721-b2db-666a73929b3e | Ubuntu-22.10-Wiki-Test | active | +| ab67f1b1-44f9-4465-9a68-82cc35ed69c0 | Ubuntu-Bionic-18.04 | active | +| d73ef17b-6b0a-4148-b3b2-f4edcf2e480e | Ubuntu-Focal-20.04 | active | +| ce869c9d-35bb-46be-9b6d-d74d4035e2f8 | Ubuntu-Focal-20.04-baremetal | active | +| 885d01da-777b-4e67-a1ec-e114e4c2786e | Ubuntu-Focal-20.04-mark-testing-dib-2022-06-30T12:47:00Z | active | +| a5c9b7b2-e77b-4094-99ac-db0cf5181da5 | Ubuntu-Jammy-22.04 | active | +| 05f13645-2ac7-44ce-aa1c-64f31ca42761 | Ubuntu-Jammy-22.04-DEMOCREDS | active | +| c7e208cb-6521-422b-8d00-1b8f003c4646 | Ubuntu20.04 | active | +| 728719c2-0a75-4411-a8fa-3230fa5d50e5 | Ubuntu22.04 | active | +| a13f3659-eed9-411c-9a33-f1584fd00328 | Windows-Server-2012-R2-Eval | active | +| 8814f28f-1dbd-4253-84e8-8e45032855c6 | Windows-Server-2019 | active | +| 15f3eebe-4c15-4565-a4f8-7369f072b50d | cirros-0.4 | active | +| 534b8b78-f455-4f85-bd21-13c2b1b14e3e | cirros-0.5 | active | +| 64dead14-9c5a-41c3-b4d6-a122a2ca8f28 | linux-test-snapshot | active | +| d479470d-ab6d-40d6-afc9-04f5f253404d | linux-test-to-boot-2 | active | +| 40ed5c78-c970-4182-a9c8-27e18a6a4251 | linux-test-to-boot-cli | active | +| 5a8e5595-d893-4d1c-8600-d7982f3915bb | ood-keycloak-1 | active | +| 04e1a31a-adee-4af2-935e-0e6e7c4b3193 | test-break | active | +| 1a0480d1-55c8-4fd7-8c7a-8c26e52d8cbd | ubuntu-jammy-server-cloudimg | active | ++--------------------------------------+----------------------------------------------------------+--------+ +``` + +Note the ID of the image that you want to use to create a volume. + +!!! note + We will use the Ubuntu-Jammy-22.04 image with the ID `a5c9b7b2-e77b-4094-99ac-db0cf5181da5` + +We also need to list the available flavors. + +``` +openstack flavor list +``` + +``` { .sh .no-copy } ++--------------------------------------+-------------------------+--------+------+-----------+-------+-----------+ +| ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public | ++--------------------------------------+-------------------------+--------+------+-----------+-------+-----------+ +| 0f71f1e2-d327-41f9-87e3-0f6c29f51af1 | gb.bm.gpu | 524288 | 240 | 0 | 48 | True | +| 1281555c-6bcb-42e4-a48e-98352dcd0fd0 | compute1.2cpu4ram | 4096 | 30 | 0 | 2 | True | +| 14505c86-765f-4971-a36f-1e867216dccf | memory1.4cpu16ram | 16384 | 30 | 0 | 4 | True | +| 1dbac08-d9a9-4c27-8534-57293785433e | balanced1.32cpu64ram | 65536 | 30 | 0 | 32 | True | +| 2d02e6a4-3937-4ed3-951a-8e27867ff53e | balanced1.8cpu16ram | 16384 | 30 | 0 | 8 | True | +| 2e7b7cc7-9e29-4ff2-98dd-03dbb99dbb5c | compute1.16cpu32ram | 32768 | 30 | 0 | 16 | True | +| 3276cd5f-c96a-4e05-960f-f4f197142c98 | memory1.1cpu4ram | 4096 | 30 | 0 | 1 | True | +| 3b5a6e01-d3ad-49e3-a4f8-183c04444330 | balanced1.1cpu2ram | 2048 | 30 | 0 | 1 | True | +| 4a0425c8-7494-473e-a5bb-acc91c378615 | c1.cpu128.ram448.disk30 | 458752 | 30 | 0 | 128 | True | +| 4e8af724-f66d-4072-a692-114126de25a0 | compute1.1cpu2ram | 2048 | 30 | 0 | 1 | True | +| 4ec785be-a422-4207-9daa-cbb71c61f9ed | devtest1.4cpu4ram | 4096 | 30 | 0 | 4 | True | +| 674fa81a-69c7-4bf7-b3a9-59989fb63618 | balanced1.16cpu32ram | 32768 | 30 | 0 | 16 | True | +| 6b2e76a8-cce0-4175-8160-76e2525d3d3d | balanced1.2cpu4ram | 4096 | 30 | 0 | 2 | True | +| 7af5c672-43e7-4296-9608-5974394851b8 | memory1.2cpu8ram | 8192 | 30 | 0 | 2 | True | +| 7ffa092c-e75a-4cb5-be9f-db8c749e8801 | compute1.4cpu8ram | 8192 | 30 | 0 | 4 | True | +| 8aef7f54-1ed6-4275-a38c-3f1e61afabd9 | memory1.16cpu64ram | 65536 | 30 | 0 | 16 | True | +| 94ba9177-cb98-4b04-870c-9a696e1c5327 | memory1.32cpu128ram | 131072 | 30 | 0 | 32 | True | +| 9d536959-dd7a-4532-b0b7-db8bb8a72ddb | compute1.8cpu16ram | 16384 | 30 | 0 | 8 | True | +| b46e184c-0dcb-44b2-a53f-c2b8eff676c9 | compute1.32cpu64ram | 65536 | 30 | 0 | 32 | True | +| d6c2e93a-d430-44ca-822b-79a4b882c0c3 | piotr-gpu | 131072 | 100 | 0 | 8 | True | +| d6e3a25a-4f9e-4c87-9342-77f807ead537 | memory1.8cpu32ram | 32768 | 30 | 0 | 8 | True | +| e07cfee1-43af-4bf6-baac-3bdf7c1b88f8 | balanced1.4cpu8ram | 8192 | 30 | 0 | 4 | True | +| e3a1ec6d-9513-4b9f-9580-671c4eee1c21 | devtest1.2cpu2ram | 2048 | 30 | 0 | 2 | True | +| ee55c523-9803-4296-91be-1c34e986baaa | devtest1.1cpu1ram | 1024 | 30 | 0 | 1 | True | ++--------------------------------------+-------------------------+--------+------+-----------+-------+-----------+ +``` + +Note the ID of the flavor that you want to use + +!!! note + We will use the `balanced1.1cpu2ram` flavor with an ID `3b5a6e01-d3ad-49e3-a4f8-183c04444330` + +Get a list of networks + +``` +openstack network list +``` + +``` { .sh .no-copy } ++--------------------------------------+--------------------------------+--------------------------------------+ +| ID | Name | Subnets | ++--------------------------------------+--------------------------------+--------------------------------------+ +| 33d0c11b-b659-4b77-9afc-5676fe965839 | external | 5c2644ad-7253-42f5-ad69-40970b84dea6 | +| d3a7ddb5-6582-42cf-978a-c99b4ed25ad4 | NeSI-Training-Test | f5715775-270c-4230-bfa7-fdbdf51352dc | ++--------------------------------------+--------------------------------+--------------------------------------+ +``` + +Note the ID for the network that is not the external one and is named the same as your project space. + +!!! note + For this example we will use NeSI-Training-Test with an ID `d3a7ddb5-6582-42cf-978a-c99b4ed25ad4` + +With we above values we then have 2 choices to booting an instance from a volume + +- Create and boot from volume in a single step +> This option doesn't give us control over the volume creation process and only allows us to specify a size for our new volume + +- Creating the volume first and boot from it +> This allows us to specify more then the size on creation, example is we might want to encrypt it + +## Create and boot from volume in a single step + +We will then create an instance from that image using the `--boot-from-volume` parameter + +!!! note + We highly recommend that you supply the parameter `--key-name` to allow connections with your SSH key + +The command will look like the following + +``` +openstack server create --flavor --network --image --boot-from-volume --key-name --wait +``` + +Using or example values the command looks like the following + +``` +openstack server create --flavor 3b5a6e01-d3ad-49e3-a4f8-183c04444330 --network d3a7ddb5-6582-42cf-978a-c99b4ed25ad4 --image a5c9b7b2-e77b-4094-99ac-db0cf5181da5 --boot-from-volume 80 --key-name kahus-key --wait Ubuntu_boot_volume +``` + +``` { .sh .no-copy } ++-----------------------------+----------------------------------------------------------+ +| Field | Value | ++-----------------------------+----------------------------------------------------------+ +| accessIPv4 | | +| accessIPv6 | | +| addresses | NeSI-Training-Test=10.1.0.57 | +| adminPass | rCs2E9BP2RZu | +| config_drive | True | +| created | 2023-09-03T22:06:56Z | +| flavor | memory1.4cpu16ram (14505c86-765f-4971-a36f-1e867216dccf) | +| hostId | c79c5b9fc6c64341b07c0408e401a28ad0b20aa123a250f77fd8c249 | +| id | ddc5d676-db4e-4fd3-b0c9-14b91a1f16d5 | +| image | N/A (booted from volume) | +| key_name | kahus-key | +| name | Ubuntu_boot_volume | +| progress | 0 | +| project_id | 4f07cc254d6c4471805d49bae1f739b9 | +| properties | | +| security_groups | name='default' | +| status | ACTIVE | +| updated | 2023-09-03T22:07:04Z | +| user_id | fb9a3d02c89e4cfdbe64658ad43ece97 | +| volumes_attached | id='0aa677c7-072b-4241-a70a-05a4de020596' | ++-----------------------------+----------------------------------------------------------+ +``` + +!!! warning + Should you not provide a key file to the deployment you will need to remake the instance as by default the Flexi environment doesn't set passwords. + + Ubuntu and CentOS cloud images also don't allow password SSH by default. + +## Creating the volume first and boot from it + +Should you wish to have more control over the volume creation process we will first create the volume then boot an instance from that. + +Cinder makes a volume bootable when `--image` parameter is passed. + +``` +openstack volume create --image IMAGE_ID --size SIZE_IN_GB bootable_volume +``` + +We will use the `Ubuntu-Jammy-22.04` image with the ID `a5c9b7b2-e77b-4094-99ac-db0cf5181da5` the command will look like + +``` +openstack volume create --image a5c9b7b2-e77b-4094-99ac-db0cf5181da5 --size 80 my_ubuntu_volume +``` + +``` { .sh .no-copy } ++---------------------+--------------------------------------+ +| Field | Value | ++---------------------+--------------------------------------+ +| attachments | [] | +| availability_zone | nova | +| bootable | false | +| consistencygroup_id | None | +| created_at | 2023-08-09T21:57:52.675096 | +| description | None | +| encrypted | False | +| id | 3dd489d8-7c44-4c59-b4af-0c804ddf4729 | +| multiattach | False | +| name | my_ubuntu_volume | +| properties | | +| replication_status | None | +| size | 30 | +| snapshot_id | None | +| source_volid | None | +| status | creating | +| type | ceph-ssd | +| updated_at | None | +| user_id | fb9a3d02c89e4cfdbe64658ad43ece97 | ++---------------------+--------------------------------------+ +``` + +Take note of the volume ID + +The following command is used to boot an instance from a volume + +``` +openstack server create --flavor --volume --network --key-name +``` + +We will supply the `balanced1.1cpu2ram` ID for flavor and our volume ID of `3dd489d8-7c44-4c59-b4af-0c804ddf4729` from the volume we created before + +``` +openstack server create --flavor 3b5a6e01-d3ad-49e3-a4f8-183c04444330 --volume 3dd489d8-7c44-4c59-b4af-0c804ddf4729 --network d3a7ddb5-6582-42cf-978a-c99b4ed25ad4 --key-name kahus-key Ubuntu_From_Volume +``` + +``` { .sh .no-copy } ++-----------------------------+-----------------------------------------------------------+ +| Field | Value | ++-----------------------------+-----------------------------------------------------------+ +| accessIPv4 | | +| accessIPv6 | | +| addresses | | +| adminPass | MPu74uppSp4r | +| config_drive | | +| created | 2023-08-09T22:05:30Z | +| flavor | balanced1.1cpu2ram (3b5a6e01-d3ad-49e3-a4f8-183c04444330) | +| hostId | | +| id | 2d4db443-eb48-4d64-8770-5624568f29ad | +| image | N/A (booted from volume) | +| key_name | kahus-key | +| name | Ubuntu_From_Volume | +| progress | 0 | +| project_id | 4f07cc254d6c4471805d49bae1f739b9 | +| properties | | +| security_groups | name='default' | +| status | BUILD | +| updated | 2023-08-09T22:05:30Z | +| user_id | fb9a3d02c89e4cfdbe64658ad43ece97 | +| volumes_attached | | ++-----------------------------+-----------------------------------------------------------+ +``` + +!!! warning + Should you not provide a key file to the deployment you will need to remake the instance as by default the Flexi environment doesn't set passwords. + + Ubuntu and CentOS cloud images also don't allow password SSH by default. + +To allow external access a floating IP will need to be provided to the newly created instance, following [Manage Floating IPs via CLI](../create-and-manage-networks/manage-floating-ips-via-cli.md) will complete this for you, You should then be able to connect to your instance using ssh which is explained more in [Connect to your instance by using SSH](connect-to-instance-ssh.md). \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/launch-and-mange-instances/launch-an-instance-from-an-image.md b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/launch-an-instance-from-an-image.md new file mode 100644 index 000000000..ba278a397 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/launch-an-instance-from-an-image.md @@ -0,0 +1,89 @@ +--- +hidden: false +label_names: +- instance +- launch +- cli +- image +position: 2 +title: Launch an Instance from an Image +vote_count: 1 +vote_sum: 1 +--- + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + + We highly recommend that you supply the parameter `--key-name` to allow connections with your SSH key + +After you gather required parameters, run the following command to launch an instance. Specify the server `name`, `flavor ID`, and `image ID`. + +``` +openstack server create --flavor FLAVOR_ID --image IMAGE_ID --key-name KEY_NAME --security-group SEC_GROUP_ID --network NETWORK_ID INSTANCE_NAME +``` + +Example with the values supplied + +``` +openstack server create --flavor e3a1ec6d-9513-4b9f-9580-671c4eee1c21 --image a5c9b7b2-e77b-4094-99ac-db0cf5181da5 --key-name test-key-pair --security-group 7200b28f-9089-4797-a094-39f1995e6f0c --network d3a7ddb5-6582-42cf-978a-c99b4ed25ad4 test-instance-wiki +``` + +``` { .sh .no-copy } ++-----------------------------+-----------------------------------------------------------+ +| Field | Value | ++-----------------------------+-----------------------------------------------------------+ +| OS-DCF:diskConfig | MANUAL | +| OS-EXT-AZ:availability_zone | | +| OS-EXT-STS:power_state | NOSTATE | +| OS-EXT-STS:task_state | scheduling | +| OS-EXT-STS:vm_state | building | +| OS-SRV-USG:launched_at | None | +| OS-SRV-USG:terminated_at | None | +| accessIPv4 | | +| accessIPv6 | | +| addresses | | +| adminPass | | +| config_drive | | +| created | 2023-07-26T22:51:53Z | +| flavor | devtest1.2cpu2ram (e3a1ec6d-9513-4b9f-9580-671c4eee1c21) | +| hostId | | +| id | 8b08a4fb-7372-4269-a583-9dbc91779ffe | +| image | Ubuntu-Jammy-22.04 (a5c9b7b2-e77b-4094-99ac-db0cf5181da5) | +| key_name | test-key-pair | +| name | test-instance-wiki | +| progress | 0 | +| project_id | 4f07cc254d6c4471805d49bae1f739b9 | +| properties | | +| security_groups | name='7200b28f-9089-4797-a094-39f1995e6f0c' | +| status | BUILD | +| updated | 2023-07-26T22:51:53Z | +| user_id | fb9a3d02c89e4cfdbe64658ad43ece97 | +| volumes_attached | | ++-----------------------------+-----------------------------------------------------------+ +``` + +A status of `BUILD` indicates that the instance has started, but is not yet online. + +A status of `ACTIVE` indicates that the instance is active. + +Copy the server ID value from the `id` field in the output. Use the ID to get server details or to delete your server. + +Check if the instance is online + +``` +openstack server list +``` + +The list shows the ID, name, status, and private (and if assigned, public) IP addresses for all instances in the project to which you belong: + +``` { .sh .no-copy } ++--------------------------------------+---------------------------------------+--------+----------------------------------------------+--------------------------+--------------------+ +| ID | Name | Status | Networks | Image | Flavor | ++--------------------------------------+---------------------------------------+--------+----------------------------------------------+--------------------------+--------------------+ +| 8b08a4fb-7372-4269-a583-9dbc91779ffe | test-instance-wiki | ACTIVE | NeSI-Training-Test=10.1.0.134 | Ubuntu-Jammy-22.04 | devtest1.2cpu2ram | ++--------------------------------------+---------------------------------------+--------+----------------------------------------------+--------------------------+--------------------+ +``` + +If the status for the instance is `ACTIVE`, the instance is online. + +If you would like to access your Compute instance outside the FlexiHPC platform you will need to associate a `floating ip` to your instance. Reading [Manage Floating IPs via CLI](../create-and-manage-networks/manage-floating-ips-via-cli.md), You should then be able to connect to your instance using ssh which is explained more in [Connect to your instance by using SSH](connect-to-instance-ssh.md). \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/launch-and-mange-instances/launch-an-instance-via-cli.md b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/launch-an-instance-via-cli.md new file mode 100644 index 000000000..b311665ea --- /dev/null +++ b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/launch-an-instance-via-cli.md @@ -0,0 +1,181 @@ +--- +hidden: false +label_names: +- instance +- launch +- cli +position: 2 +title: Launch an Instance via CLI +vote_count: 1 +vote_sum: 1 +--- + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + +Before you can launch an instance via the CLI, gather the following parameters: + +- The `instance source` can be an image, snapshot, or block storage volume that contains an image or snapshot. + +- A `name` for your instance. + +- The `flavor` for your instance, which defines the compute, memory, and storage capacity of nova computing instances. A flavor is an available hardware configuration for a server. It defines the size of a virtual server that can be launched. + +- Access and security credentials, which include one or both of the following credentials: + + - A `key pair` for your instance, which are SSH credentials that are injected into images when they are launched. Create at least one key pair for each project. If you already have generated a key pair with an external tool, you can import it into OpenStack. You can use the key pair for multiple instances that belong to that project. Read [Create and Manage Key Pairs](../create-and-manage-keypairs/index.md) if you would like to know more. + + - A `security group` that defines which incoming network traffic is forwarded to instances. Security groups hold a set of firewall policies, known as security group rules. + +- The `network` to attach the instance too. + +- If needed, you can assign a **floating (public) IP address** to a running instance to make it accessible from outside the cloud. + +- You can also attach a block storage device, or **volume**, for persistent storage. + +!!! note + Instances that use the default security group cannot, by default, be accessed from any IP address outside of the cloud. If you want those IP addresses to access the instances, you must modify the rules for the security group. Read How to add/update and remove security groups for more information. + +After you gather the parameters that you need to launch an instance, you can launch it from an image or a volume. + +## Gather parameters to launch an instance + +List the available flavors. + +``` { .sh .copy } +openstack flavor list +``` + +Note the ID of the flavor that you want to use for your instance: + +``` { .sh .no-copy } ++--------------------------------------+-------------------------+--------+------+-----------+-------+-----------+ +| ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public | ++--------------------------------------+-------------------------+--------+------+-----------+-------+-----------+ +| 0f71f1e2-d327-41f9-87e3-0f6c29f51af1 | gb.bm.gpu | 524288 | 240 | 0 | 48 | True | +| 1281555c-6bcb-42e4-a48e-98352dcd0fd0 | compute1.2cpu4ram | 4096 | 30 | 0 | 2 | True | +| 14505c86-765f-4971-a36f-1e867216dccf | memory1.4cpu16ram | 16384 | 30 | 0 | 4 | True | +| 1dbac08-d9a9-4c27-8534-57293785433e | balanced1.32cpu64ram | 65536 | 30 | 0 | 32 | True | +| 2d02e6a4-3937-4ed3-951a-8e27867ff53e | balanced1.8cpu16ram | 16384 | 30 | 0 | 8 | True | +| 2e7b7cc7-9e29-4ff2-98dd-03dbb99dbb5c | compute1.16cpu32ram | 32768 | 30 | 0 | 16 | True | +| 3276cd5f-c96a-4e05-960f-f4f197142c98 | memory1.1cpu4ram | 4096 | 30 | 0 | 1 | True | +| 3b5a6e01-d3ad-49e3-a4f8-183c04444330 | balanced1.1cpu2ram | 2048 | 30 | 0 | 1 | True | +| 4a0425c8-7494-473e-a5bb-acc91c378615 | c1.cpu128.ram448.disk30 | 458752 | 30 | 0 | 128 | True | +| 4e8af724-f66d-4072-a692-114126de25a0 | compute1.1cpu2ram | 2048 | 30 | 0 | 1 | True | +| 4ec785be-a422-4207-9daa-cbb71c61f9ed | devtest1.4cpu4ram | 4096 | 30 | 0 | 4 | True | +| 674fa81a-69c7-4bf7-b3a9-59989fb63618 | balanced1.16cpu32ram | 32768 | 30 | 0 | 16 | True | +| 6b2e76a8-cce0-4175-8160-76e2525d3d3d | balanced1.2cpu4ram | 4096 | 30 | 0 | 2 | True | +| 7af5c672-43e7-4296-9608-5974394851b8 | memory1.2cpu8ram | 8192 | 30 | 0 | 2 | True | +| 7ffa092c-e75a-4cb5-be9f-db8c749e8801 | compute1.4cpu8ram | 8192 | 30 | 0 | 4 | True | +| 8aef7f54-1ed6-4275-a38c-3f1e61afabd9 | memory1.16cpu64ram | 65536 | 30 | 0 | 16 | True | +| 94ba9177-cb98-4b04-870c-9a696e1c5327 | memory1.32cpu128ram | 131072 | 30 | 0 | 32 | True | +| 9d536959-dd7a-4532-b0b7-db8bb8a72ddb | compute1.8cpu16ram | 16384 | 30 | 0 | 8 | True | +| b46e184c-0dcb-44b2-a53f-c2b8eff676c9 | compute1.32cpu64ram | 65536 | 30 | 0 | 32 | True | +| d6c2e93a-d430-44ca-822b-79a4b882c0c3 | piotr-gpu | 131072 | 100 | 0 | 8 | True | +| d6e3a25a-4f9e-4c87-9342-77f807ead537 | memory1.8cpu32ram | 32768 | 30 | 0 | 8 | True | +| e07cfee1-43af-4bf6-baac-3bdf7c1b88f8 | balanced1.4cpu8ram | 8192 | 30 | 0 | 4 | True | +| e3a1ec6d-9513-4b9f-9580-671c4eee1c21 | devtest1.2cpu2ram | 2048 | 30 | 0 | 2 | True | +| ee55c523-9803-4296-91be-1c34e986baaa | devtest1.1cpu1ram | 1024 | 30 | 0 | 1 | True | ++--------------------------------------+-------------------------+--------+------+-----------+-------+-----------+ +``` + +List the available images. + +``` +openstack image list +``` + +Note the ID of the image from which you want to boot your instance: + +``` { .sh .no-copy } ++--------------------------------------+----------------------------------------------------------+--------+ +| ID | Name | Status | ++--------------------------------------+----------------------------------------------------------+--------+ +| 701e29ac-8963-4cf9-b90a-e1b14095866d | CentOS-Stream-8 | active | +| 42ebfb1b-f136-4947-ae1a-025ad57b369c | CentOS-stream8-baremetal | active | +| f94a4d02-661f-4df7-bb50-ad08ad89f816 | Centos-8.4-AGR | active | +| 386c661a-4c30-4f09-b536-511a862102b4 | FedoraCoreOS35 | active | +| fe8c98d3-7a87-4b5b-9f9e-0f967c53f9bd | FedoraCoreOS37 | active | +| 622c4f3f-8e62-4c81-8809-69b0a34a28e0 | PostgreSQL-Ubuntu-20.04.4 | active | +| 3936d736-e5bb-4024-a361-512fd40413bc | RockyLinux-8.5 | active | +| eb40dbb5-7da6-4784-b47c-f417c9d3b126 | RockyLinux-8.6 | active | +| 2b00f364-1bd0-432c-91f9-8d1adda6fc9f | RockyLinux-8.6-OFED-5.7 | active | +| f366dd3a-5353-47dd-9e92-662055125174 | RockyLinux-8.7 | active | +| b443a9a2-32d1-48c1-8d84-bcc10adbb0c3 | RockyLinux-8.7-OFED-5.8 | active | +| 9933eb25-b0c1-4ef2-b199-25e916c79906 | Ubuntu-20-AGR | active | +| ab67f1b1-44f9-4465-9a68-82cc35ed69c0 | Ubuntu-Bionic-18.04 | active | +| d73ef17b-6b0a-4148-b3b2-f4edcf2e480e | Ubuntu-Focal-20.04 | active | +| ce869c9d-35bb-46be-9b6d-d74d4035e2f8 | Ubuntu-Focal-20.04-baremetal | active | +| 885d01da-777b-4e67-a1ec-e114e4c2786e | Ubuntu-Focal-20.04-mark-testing-dib-2022-06-30T12:47:00Z | active | +| a5c9b7b2-e77b-4094-99ac-db0cf5181da5 | Ubuntu-Jammy-22.04 | active | +| 05f13645-2ac7-44ce-aa1c-64f31ca42761 | Ubuntu-Jammy-22.04-DEMOCREDS | active | +| c7e208cb-6521-422b-8d00-1b8f003c4646 | Ubuntu20.04 | active | +| 728719c2-0a75-4411-a8fa-3230fa5d50e5 | Ubuntu22.04 | active | +| a13f3659-eed9-411c-9a33-f1584fd00328 | Windows-Server-2012-R2-Eval | active | +| 8814f28f-1dbd-4253-84e8-8e45032855c6 | Windows-Server-2019 | active | +| 15f3eebe-4c15-4565-a4f8-7369f072b50d | cirros-0.4 | active | +| 534b8b78-f455-4f85-bd21-13c2b1b14e3e | cirros-0.5 | active | +| 04e1a31a-adee-4af2-935e-0e6e7c4b3193 | test-break | active | ++--------------------------------------+----------------------------------------------------------+--------+ +``` + +List the available security groups. + +``` +openstack security group list +``` + +Note the ID of the security group you want to attach to the instance: + +``` { .sh .no-copy } ++--------------------------------------+----------------------------------------------------------------+---------------------------------------------------------+----------------------------------+------+ +| ID | Name | Description | Project | Tags | ++--------------------------------------+----------------------------------------------------------------+---------------------------------------------------------+----------------------------------+------+ +| 7200b28f-9089-4797-a094-39f1995e6f0c | SSH Allow All | This is an open SSH that allows anyone to connect to 22 | 4f07cc254d6c4471805d49bae1f739b9 | [] | +| b24e8bef-969a-4938-8b18-0a33769b181d | kubeapi_whitelist | | 4f07cc254d6c4471805d49bae1f739b9 | [] | +| b5d30ed4-13b3-4f7a-bc5a-c48175566ea3 | My-Security-Group | This is my security group | 4f07cc254d6c4471805d49bae1f739b9 | [] | +| f2f15d6f-2a04-4196-8102-a058042694b3 | default | Default security group | 4f07cc254d6c4471805d49bae1f739b9 | [] | ++--------------------------------------+----------------------------------------------------------------+---------------------------------------------------------+----------------------------------+------+ +``` + +If you have not created any security groups, you can read How to add/update and remove security groups + +You can view rules for a specified security group: + +``` +openstack security group rule list b5d30ed4-13b3-4f7a-bc5a-c48175566ea3 +``` + +List the available key pairs, and note the key pair name that you use for SSH access. + +``` +openstack keypair list +``` + +List the available networks. + +``` +openstack network list +``` + +Note the ID for the network + +``` { .sh .no-copy } ++--------------------------------------+--------------------------------+--------------------------------------+ +| ID | Name | Subnets | ++--------------------------------------+--------------------------------+--------------------------------------+ +| 33d0c11b-b659-4b77-9afc-5676fe965839 | external | 5c2644ad-7253-42f5-ad69-40970b84dea6 | +| d3a7ddb5-6582-42cf-978a-c99b4ed25ad4 | NeSI-Training-Test | f5715775-270c-4230-bfa7-fdbdf51352dc | ++--------------------------------------+--------------------------------+--------------------------------------+ +``` + +!!! note + The recommend Network ID to take note of is the network that has the same name as your project. If external access is required then after creating the compute instance a floating ip is the recommend way to gain this external access. + +## Launch an instance + +You can launch an instance from various sources. + +- [Launch an instance from an image](launch-an-instance-from-an-image.md) + +- [Launch an instance from a volume](launch-an-instance-from-a-volume.md) \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/launch-and-mange-instances/launch-an-instance-via-dashboard.md b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/launch-an-instance-via-dashboard.md new file mode 100644 index 000000000..769370114 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/launch-an-instance-via-dashboard.md @@ -0,0 +1,151 @@ +--- +hidden: false +label_names: +- instance +- launch +position: 2 +title: Launch an Instance via Dashboard +vote_count: 1 +vote_sum: 1 +--- + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Compute` tab and select `Instances` + +Click `Launch Instance` + +
+ ![Alt text](../../assets/images/flexi/instance-overview.png) +
+ +Within the `Launch Instance` dialog box there are the following values: + +**Details** + +`Project Name` +: The name of the project that this instance will be deployed under. + +`Instance Name` +: The name of the VM/Instance. The name you assign here becomes the initial host name of the server. + +!!! note + After the server is built, if you change the server name in the API or change the host name directly, the names are not updated in the dashboard. + + Server names are not guaranteed to be unique when created so you could have two instances with the same host name. + +`Description` +: A brief description of the VM/Instance. + +`Availability Zone` +: By default this will be “nova“. This specifies which zone it will be deployed too if there were multiple zones. The current default and only zone is “nova“ at this point in time. + +`Count` +: how many of the VMs/Instances you would like to deploy. + +`Source` +: Select Boot Source + + `Boot from image` + : Selecting this option allows you to choose from a list of images to boot from, a list of images will be presented to choose from. + + `Boot from instance snapshot` + : Selecting this option allows you to choose an instance snapshot to boot from, a list of instance snapshots will be presented to choose from. + + `Boot from volume` + : Selecting this option allows you to choose a volume to boot from, a list of volumes will be presented to choose from. + + `Boot from volume snapshot` + : Selecting this option allows you to choose a volume snapshot to boot from, a list of volume snapshots will be presented to choose from. + +`Delete Volume on Instance Delete` +: Selecting YES will enable the volume to be deleted when the instance is deleted. + +`Volume Size (GB)` +: This will be present should the user choose to boot from image or instance snapshot. This setting determines the size of the boot volume. This will be overridden when selecting a flavor if its less then the flavor's size. + +**Flavor** + +`Flavor` +: Specify the size of the instance to launch, click the `^` to select the instance size you are after. + +!!! note + Instance sizes have a brief explanation in the name of what they are best used for. + + Example `compute1.1cpu2ram` is best for Compute heavy workloads with 1 vCPU and 2 GB of RAM or `memory1.1cpu4ram` is best for Memory heavy workloads with 1 vCPU and 4 GB of RAM + +**Networks** + +`Selected Networks` +: To add a network to the instance, click the `^` in the Available field. + +!!! note + If you haven't configured a network prior to the creation of a compute instance then the recommend network should be the one that has the same name as the project you are in. Example, I am in the `NeSI-SandBox-Environment` so I will pick the `NeSI-SandBox-Environment` network. + + You shouldn't need to add the instance to an external network as a floating IP will be added later on should you need to access the instance from outside the FlexiHPC network. + +**Network Ports** + +This for now can be ignored as we will use Security Groups to assign port connections for the instance. + +**Security Groups** + +Activate the security groups that you want to assign to the instance. + +Security groups are a kind of cloud firewall that define which incoming network traffic is forwarded to instances. + +If you have not created any security groups, you can assign only the default security group to the instance. + +!!! note + By default the `default` security group is added to all instances. This is required should the instance want to communicate to the outside world or to any other instance within the FlexiHPC project. + + How to create `Security Groups` are explained here How to add/update and remove security groups + +**Key Pair** + +Specify a key pair that is associated with your FlexiHPC user login. If there is none available then you can create one by clicking `Create key Pair` + +If the image uses a static root password or a static key set (neither is recommended), you do not need to provide a key pair to launch the instance. + +!!! info + The following Creating and Importing Key Pairs will also explain on how to import and create key pairs + +**Configuration** + +`Customization Script Source` +: Specify a customization script that runs after your instance launches. This can either be applied by uploading a file from your local machine or entered manually within the textbox provided. + +**Server Groups** + +Server groups determine the Policy that FlexiHPC should apply during the deployment of the instance in regards to other servers within the same group. + +!!! info + By default an instance doesn't need to be in a Server Group, however should you want to apply policies to your servers then please read Server Groups within FlexiHPC to create a Server Group and also understand each policy. + + Server Group should be created prior to the creation of the instance if so required. + +**Scheduler Hints** + +These are tags or labels that tell the underlying FlexiHPC on where to deploy an instance. An example would be, If your workload or instance requires an intel based processor then you would apply the corresponding Scheduler Hint to the instance so it is only deployed to intel based processors. + +**Metadata** + +`Available Metadata` +: Add Metadata items to your instance. + +Click `Launch Instance`. + +The instance starts on a compute node in the cloud. + +!!! info + If you require an external connection to this instance then a floating IP is required. The article + + [Manage Floating IPs via the Dashboard](../create-and-manage-networks/manage-floating-ips-via-the-dashboard.md) will detail the requirements to complete this. + +You should now be able to connect to your instance using ssh which is explained more in [Connect to your instance by using SSH](connect-to-instance-ssh.md). \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/launch-and-mange-instances/manage-security-groups-of-an-Instance-via-the-cli.md b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/manage-security-groups-of-an-Instance-via-the-cli.md new file mode 100644 index 000000000..f30848085 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/manage-security-groups-of-an-Instance-via-the-cli.md @@ -0,0 +1,116 @@ +--- +hidden: false +label_names: +- instance +- resize +position: 2 +title: Manage Security Groups of an Instance via CLI +vote_count: 1 +vote_sum: 1 +--- + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + +When adding or removing `Security Groups` from an instance via the CLI there are few details you will need, the `Instance ID` for the compute instance you want to adjust and the `Security Group ID` you want to add or remove from the instance. + +Run the following command to return a list of servers within your project space + +``` +openstack server list +``` + +``` { .sh .no-copy } ++--------------------------------------+-----------+--------+-------------------------------+-------------------------------+--------------------+ +| ID | Name | Status | Networks | Image | Flavor | ++--------------------------------------+-----------+--------+-------------------------------+-------------------------------+--------------------+ +| 4f69a45d-78ad-48e7-b427-5694c8b09e45 | kahu-test | ACTIVE | NeSI-Training-Prod=10.1.0.250 | NeSI-FlexiHPC-Rocky-9.3_cloud | balanced1.2cpu4ram | ++--------------------------------------+-----------+--------+-------------------------------+-------------------------------+--------------------+ + +``` + +Taking note of the `Instance ID` + +!!! note + For this example we will use `4f69a45d-78ad-48e7-b427-5694c8b09e45` + +Then run the following command to return a list of Security Groups + +``` +openstack security group list +``` + +``` { .sh .no-copy } ++--------------------------------------+----------------+------------------------+----------------------------------+------+ +| ID | Name | Description | Project | Tags | ++--------------------------------------+----------------+------------------------+----------------------------------+------+ +| 050e0ec4-1416-46f2-98a0-b492f2c8d81b | ssh-allow-all | | 1b899a2883da444fa6b31172dcebbc56 | [] | +| 08749b3c-f8aa-443e-a881-80f6009fff59 | http | | 1b899a2883da444fa6b31172dcebbc56 | [] | +| 0ed77965-05bf-438e-b4e4-89060f814c4c | SSH Allow All | | 1b899a2883da444fa6b31172dcebbc56 | [] | +| b713d80c-1b7d-4991-b387-514261e59b94 | 6443_Allow_ALL | | 1b899a2883da444fa6b31172dcebbc56 | [] | +| cdad3d6b-a726-4020-a6a3-7c20b1afc79f | https | | 1b899a2883da444fa6b31172dcebbc56 | [] | +| e73a47e9-cc3a-4986-95f9-c3d101c3d448 | default | Default security group | 1b899a2883da444fa6b31172dcebbc56 | [] | ++--------------------------------------+----------------+------------------------+----------------------------------+------+ +``` + +Take note of the `ID` + +!!! note + For this example we will use the id `050e0ec4-1416-46f2-98a0-b492f2c8d81b` to add `ssh-allow-all` to our instance + +## Adding a Security Group to an Instance + +Taking the Instance ID and Security Group ID we will add those to the following command + +``` +openstack server add security group +``` + +Using our example values the command will look like this + +``` +openstack server add security group 4f69a45d-78ad-48e7-b427-5694c8b09e45 050e0ec4-1416-46f2-98a0-b492f2c8d81b +``` + +You will not get a response from the endpoint on success + +So you will want to run the following command to see if the Security Group was added + +``` +openstack server show +``` + +This will return the server details and there will be the security_groups field with the newly added group + +``` { .sh .no-copy } +| security_groups | name='ssh-allow-all' | +| | name='default' | +``` + +## Removing a Security Group to an Instance + +Taking the Instance ID and Security Group ID we will add those to the following command + +``` +openstack server remove security group +``` + +Using our example values the command will look like this + +``` +openstack server remove security group 4f69a45d-78ad-48e7-b427-5694c8b09e45 050e0ec4-1416-46f2-98a0-b492f2c8d81b +``` + +You will not get a response from the endpoint on success + +So you will want to run the following command to see if the Security Group was removed + +``` +openstack server show +``` + +This will return the server details and there will be the security_groups field with the removed group not present + +``` { .sh .no-copy } +| security_groups | name='ssh-allow-all' | +``` \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/launch-and-mange-instances/manage-security-groups-of-an-Instance-via-the-dashboard.md b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/manage-security-groups-of-an-Instance-via-the-dashboard.md new file mode 100644 index 000000000..6389acffc --- /dev/null +++ b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/manage-security-groups-of-an-Instance-via-the-dashboard.md @@ -0,0 +1,77 @@ +--- +hidden: false +label_names: +- instance +- resize +position: 2 +title: Manage Security Groups of an Instance via the Dashboard +vote_count: 1 +vote_sum: 1 +--- + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Compute` tab and select `Instances` then select the compute instance you want to manage. + +## Attach a Security Group + +Under the `Actions` menu on the far right, select `Edit Security Groups` + +
+ ![Alt text](../../assets/images/flexi/instance-action-menu.png) +
+ +Within the `Edit Instance` dialog you will have 2 columns + +`All Security Groups` +: These are all security groups created in your project + +`Instance Security Groups` +: These are the security groups attached to your instance + +
+ ![Alt text](../../assets/images/flexi/manage-security-groups-dialog.png) +
+ +Clicking the `+` icon from the `All Security Groups` column will add them to the `Instance Security Groups` column + +
+ ![Alt text](../../assets/images/flexi/manage-security-groups-add-dialog.png) +
+ +Once the desired `Secuirty Groups` have been added you then click `save` + + +## Remove a Security Group + +Under the `Actions` menu on the far right, select `Edit Security Groups` + +
+ ![Alt text](../../assets/images/flexi/instance-action-menu.png) +
+ +Within the `Edit Instance` dialog you will have 2 columns + +`All Security Groups` +: These are all security groups created in your project + +`Instance Security Groups` +: These are the security groups attached to your instance + +
+ ![Alt text](../../assets/images/flexi/manage-security-groups-add-dialog.png) +
+ +Clicking the `-` icon from the `Instance Security Groups` column will remove it and add it to the `All Security Groups` column + +
+ ![Alt text](../../assets/images/flexi/manage-security-groups-dialog.png) +
+ +Once the desired `Secuirty Groups` have been removed you then click `save` diff --git a/docs/research_developer_cloud/user-guides/launch-and-mange-instances/resizing-an-Instance-via-cli.md b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/resizing-an-Instance-via-cli.md new file mode 100644 index 000000000..e54b83f46 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/resizing-an-Instance-via-cli.md @@ -0,0 +1,129 @@ +--- +hidden: false +label_names: +- instance +- resize +position: 2 +title: Resizing an Instance via CLI +vote_count: 1 +vote_sum: 1 +--- + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + +When resizing an instance via the CLI there are few details you will need, the `Instance ID` for the compute instance you want to resize and the `Flavor ID` you want to resize the instance to. + +Run the following command to return a list of servers within your project space + +``` +openstack server list +``` + +``` { .sh .no-copy } ++--------------------------------------+--------------------------+-----------+---------------------------------------------------------------------------+--------------------------+-----------------------+ +| ID | Name | Status | Networks | Image | Flavor | ++--------------------------------------+--------------------------+-----------+---------------------------------------------------------------------------+--------------------------+-----------------------+ +| 6a91e5a1-cf20-4fc5-9b7c-edc2bf1b8de4 | kahu-disk-test | ACTIVE | NeSI-Internal-Sandbox=10.1.0.147, 163.7.177.51 | N/A (booted from volume) | balanced1.4cpu8ram | ++--------------------------------------+--------------------------+-----------+---------------------------------------------------------------------------+--------------------------+-----------------------+ +``` + +Taking note of the `Instance ID` + +!!! note + For this example we will use `6a91e5a1-cf20-4fc5-9b7c-edc2bf1b8de4` + +Then run the following command to return a list of flavors + +``` +openstack flavor list +``` + +``` { .sh .no-copy } ++--------------------------------------+-------------------------+--------+------+-----------+-------+-----------+ +| ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public | ++--------------------------------------+-------------------------+--------+------+-----------+-------+-----------+ +| 1281555c-6bcb-42e4-a48e-98352dcd0fd0 | compute1.2cpu4ram | 4096 | 30 | 0 | 2 | True | +| 14505c86-765f-4971-a36f-1e867216dccf | memory1.4cpu16ram | 16384 | 30 | 0 | 4 | True | +| 1dbac08-d9a9-4c27-8534-57293785433e | balanced1.32cpu64ram | 65536 | 30 | 0 | 32 | True | +| 2d02e6a4-3937-4ed3-951a-8e27867ff53e | balanced1.8cpu16ram | 16384 | 30 | 0 | 8 | True | +| 2e7b7cc7-9e29-4ff2-98dd-03dbb99dbb5c | compute1.16cpu32ram | 32768 | 30 | 0 | 16 | True | +| 3276cd5f-c96a-4e05-960f-f4f197142c98 | memory1.1cpu4ram | 4096 | 30 | 0 | 1 | True | +| 3b5a6e01-d3ad-49e3-a4f8-183c04444330 | balanced1.1cpu2ram | 2048 | 30 | 0 | 1 | True | +| 4e8af724-f66d-4072-a692-114126de25a0 | compute1.1cpu2ram | 2048 | 30 | 0 | 1 | True | +| 4ec785be-a422-4207-9daa-cbb71c61f9ed | devtest1.4cpu4ram | 4096 | 30 | 0 | 4 | True | +| 674fa81a-69c7-4bf7-b3a9-59989fb63618 | balanced1.16cpu32ram | 32768 | 30 | 0 | 16 | True | +| 6b2e76a8-cce0-4175-8160-76e2525d3d3d | balanced1.2cpu4ram | 4096 | 30 | 0 | 2 | True | +| 7af5c672-43e7-4296-9608-5974394851b8 | memory1.2cpu8ram | 8192 | 30 | 0 | 2 | True | +| 7ffa092c-e75a-4cb5-be9f-db8c749e8801 | compute1.4cpu8ram | 8192 | 30 | 0 | 4 | True | +| 8aef7f54-1ed6-4275-a38c-3f1e61afabd9 | memory1.16cpu64ram | 65536 | 30 | 0 | 16 | True | +| 94ba9177-cb98-4b04-870c-9a696e1c5327 | memory1.32cpu128ram | 131072 | 30 | 0 | 32 | True | +| 9d536959-dd7a-4532-b0b7-db8bb8a72ddb | compute1.8cpu16ram | 16384 | 30 | 0 | 8 | True | +| b46e184c-0dcb-44b2-a53f-c2b8eff676c9 | compute1.32cpu64ram | 65536 | 30 | 0 | 32 | True | +| d6e3a25a-4f9e-4c87-9342-77f807ead537 | memory1.8cpu32ram | 32768 | 30 | 0 | 8 | True | +| e07cfee1-43af-4bf6-baac-3bdf7c1b88f8 | balanced1.4cpu8ram | 8192 | 30 | 0 | 4 | True | +| e3a1ec6d-9513-4b9f-9580-671c4eee1c21 | devtest1.2cpu2ram | 2048 | 30 | 0 | 2 | True | +| ee55c523-9803-4296-91be-1c34e986baaa | devtest1.1cpu1ram | 1024 | 30 | 0 | 1 | True | ++--------------------------------------+-------------------------+--------+------+-----------+-------+-----------+ +``` + +Take note of the `Flavor ID` + +!!! note + For this example we will resize to balanced1.2cpu4ram with an id of `6b2e76a8-cce0-4175-8160-76e2525d3d3d` + +Taking the Instance ID and Flavor ID we will add those to the following command + +``` +openstack server resize --flavor +``` + +Using our example values the command will look like this + +``` +openstack server resize --flavor 6b2e76a8-cce0-4175-8160-76e2525d3d3d 6a91e5a1-cf20-4fc5-9b7c-edc2bf1b8de4 +``` + +You will not get a response from the endpoint on success + +So you will want to run the following command to see when its in the state of `verify_resize` + +``` +openstack server show +``` + +This will return the server details and there will be the status + +``` { .sh .no-copy } +| status | VERIFY_RESIZE +``` + +You will then need to run the command below to verify the resize + +``` +openstack server resize confirm +``` + +Using the example values the command will be the following + +``` +openstack server resize confirm 6a91e5a1-cf20-4fc5-9b7c-edc2bf1b8de4 +``` + +Again there wont be a response from the endpoint so we will call the command `openstack server show` again to confirm the status of the instance + +``` +openstack server show +``` + +The status of the instance should now be `ACTIVE` + +``` { .sh .no-copy } +| status | ACTIVE +``` + +You should also see the new `flavor` that the instance has been resized too + +``` { .sh .no-copy } +| flavor | balanced1.2cpu4ram (balanced1.2cpu4ram) +``` \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/launch-and-mange-instances/resizing-an-Instance-via-the-dashboard.md b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/resizing-an-Instance-via-the-dashboard.md new file mode 100644 index 000000000..e1479642e --- /dev/null +++ b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/resizing-an-Instance-via-the-dashboard.md @@ -0,0 +1,61 @@ +--- +hidden: false +label_names: +- instance +- resize +position: 2 +title: Resizing an Instance via the Dashboard +vote_count: 1 +vote_sum: 1 +--- + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Compute` tab and select `Instances` then select the compute instance you want to resize. + +Under the `Actions` menu on the far right, select `Resize Instance` + +
+ ![Alt text](../../assets/images/flexi/instance-action-menu.png) +
+ +Within the `Resize Instance` dialog, under the `Flavor Choice` tab you have the following options + +`Old Flavor` +: This is the flavor your compute instance is currently + +`New Flavor` +: This is the flavor you would like to resize your compute instance too. + +
+ ![Alt text](../../assets/images/flexi/resize-instance-dialog.png) +
+ +Under the Advanced Options tab + +`Disk Partition` +: The Default is Automatic if you don't want the disk to resize upon resize then select Manual. + +!!! note + The disk will resize if you booted from image and the image is bigger or smaller then the current one you are running. By default flavors have a disk size of 30 GB and that will generally stay at the same size + +Click `Resize` + +After a few moments you will be asked to confirm the Resize + +
+ ![Alt text](../../assets/images/flexi/confirm-resize.png) +
+ +Under the `Actions` menu click `Confirm Resize/Migrate` to confirm and complete the resize. + +!!! note + A resize will result in the compute instance being shutdown and rebooted in the new flavor + + \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/launch-and-mange-instances/summary.md b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/summary.md new file mode 100644 index 000000000..ba48c80cd --- /dev/null +++ b/docs/research_developer_cloud/user-guides/launch-and-mange-instances/summary.md @@ -0,0 +1,15 @@ +* [Compute: Create and Manage](index.md) +* With the Dashboard + * [Launch an Instance](launch-an-instance-via-dashboard.md) + * [Resizing an Instance](resizing-an-Instance-via-the-dashboard.md) + * [Manage Security Groups of an Instance](manage-security-groups-of-an-Instance-via-the-dashboard.md) +* With the CLI + * [Gather details to launch an Instance](launch-an-instance-via-cli.md) + * [Launch an Instance from an Image](launch-an-instance-from-an-image.md) + * [Launch an Instance from a Volume](launch-an-instance-from-a-volume.md) + * [Risizing an Instance](resizing-an-Instance-via-cli.md) + * [Manage Security Groups of an Instance](manage-security-groups-of-an-Instance-via-the-cli.md) +* Other Tools + * [Deploy with Terraform](deployment-of-an-instance-with-terraform.md) +* [Connecting to your instance with SSH](connect-to-instance-ssh.md) +* [Default user for images](default-user-nesi-images.md) \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/setting-up-your-CLI-environment/index.md b/docs/research_developer_cloud/user-guides/setting-up-your-CLI-environment/index.md new file mode 100644 index 000000000..1006e4a3f --- /dev/null +++ b/docs/research_developer_cloud/user-guides/setting-up-your-CLI-environment/index.md @@ -0,0 +1,171 @@ +--- +hidden: false +label_names: +- instance +- launch +position: 1 +title: Set up your CLI environment +vote_count: 1 +vote_sum: 1 +--- + +## Linux or Mac OS CLI + +!!! note + Python 3+ is recommended for all commands in this article + +### Installation on Linux and Mac + +When installing the CLI using pip, it is recommended to use a python virtual environment to contain the required dependencies. The examples below all make reference to the use of a virtual environment. + +Operating system specific steps +Here is an outline for installing the Openstack command line tools on the common Linux/Unix based systems. This includes MacOS as it runs a BSD based system. + + +=== "Ubuntu 20.04" + # Make sure the package cache is up to date and ensure you have + # Python3 installed + sudo apt update + sudo apt install -y python3-venv python3-dev + + # create a virtual environment using the Python3 virtual environment module + python3 -m venv venv + + # activate the virtual environment + source venv/bin/activate + + # install the Openstack commandline tools into the virtual environment + pip install -U pip \ + wheel \ + python-openstackclient + +=== "MacOS" + # from a terminal session install virtualenv + sudo pip install virtualenv + + # if the above fails and your on python 2.x then run + sudo easy_install pip + sudo pip install virtualenv + + # Create a new virtual environment and activate it + virtualenv venv + source venv/bin/activate + + # Install the Python openstack client libraries into your virtual environment + pip install -U pip \ + python-openstackclient + +=== "Centos 8" + # Make sure the package cache is up to date and ensure you have + # Python3 installed + sudo yum update -y + sudo yum install -y python3 + + # create a virtual environment using the Python3 virtual environment module + python3 -m venv venv + + # activate the virtual environment + source venv/bin/activate + + # install the Openstack commandline tools into the virtual environment + pip install -U pip \ + python-openstackclient + +=== "MacOS - python3" + # Create a new virtual environment and activate it + python -m venv venv-openstackcli + source venv-openstackcli/bin/activate + + # Install the Python openstack client libraries into your virtual environment + pip install -U python-openstackclient + +### Upgrading the CLI + +To keep the command line tools up to date, you will need to perform upgrades on them after changes have come out. The following code snippet will upgrade all of the tools listed above; make sure that you have activated your virtual environment before running the command below: + +``` +pip install --upgrade pip \ +python-openstackclient +``` + +## Additional CLI tools + +Should you be moving into more advance projects that require the reader to interact with other parts of FlexiHPC then the following tools will need to be installed + +### Kubernetes CLI Tools + +!!! note + If installing the Networking or HOT templating CLI tools then you want need to install either of the following tools python-heatclient or python-neutronclient + +``` +pip install -U pip \ +python-heatclient \ +python-neutronclient \ +python-octaviaclient \ +python-magnumclient +``` + +### Networking CLI Tools + +!!! note + If installing the Kubernetes CLI tools this is included + +``` +pip install -U pip \ +python-neutronclient +``` + +### HOT Templating CLI Tools + +!!! note + If installing the Kubernetes CLI tools this is included + +``` +pip install -U pip \ +python-heatclient +``` + +### Object Storage CLI Tools + +``` +pip install -U pip \ +python-swiftclient +``` + +## Configuration on Linux and Mac + +### Source an openstack RC file + +When no configuration arguments are passed, the OpenStack client tools will try to obtain their configuration from environment variables. To help you define these variables, the cloud dashboard allows you to download an OpenStack RC file from which you can easily source the required configuration. + +To download an OpenStack RC file from the dashboard: + +- Log in to the FlexiHPC dashboard and select your project. +- From the left hand menu select “API Access” and click on “Download OpenStack RC File”. Save the “OpenStack RC File” file on to the host where the client tools are going to be used from. +- Source the configuration from the OpenStack RC file: +``` +source projectname-openrc.sh +``` +- When prompted for a password, enter the password of the user who downloaded the file. Note that your password is not displayed on the screen as you type it in. + +!!! warning + You should never type in your password on the command line (or pass it as an argument to the client tools), because the password will be stored in plain text in the shell history file. This is unsafe and could allow a potential attacker to compromise your credentials. + +- You can confirm the configuration works by running a simple command, such as `openstack network list` and ensuring it returns no errors. + +!!! note + You are also able to download the Openstack RC file from the top-right corner where your login details are display as shown below: +
+ ![Alt text](../../assets/images/flexi/user-menu.png) +
+ + +## Using the CLI on Linux and Mac + +This page assumes that you have installed the python virtual environment and other dependencies from earlier in this section of the documentation. If you have, then the following should make sense. + +1. Activate your virtual environment. +1. Source an openstack RC file +1. Invoke the CLI with the openstack command + +For a reference of all commands supported by the CLI, refer to the [OpenStack Client documentation](https://docs.openstack.org/python-openstackclient/latest/). \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/summary.md b/docs/research_developer_cloud/user-guides/summary.md new file mode 100644 index 000000000..c49c18b23 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/summary.md @@ -0,0 +1,10 @@ +* [User Guides](index.md) +* [Compute: Create and Manage](launch-and-mange-instances/) +* [Images: Upload and Manage](uploading-and-managing-Images/) +* [Volumes: Create and Manage](create-and-manage-volumes/) +* [Networks: Create and Manage](create-and-manage-networks/) +* [Identity: Create and Manage](create-and-manage-identity/) +* [Keypairs: Create and Manage](create-and-manage-keypairs/) +* [Object Storage: Create and Manage](create-and-manage-object-storage/) +* [Set up your CLI environment](setting-up-your-CLI-environment/) +* */ \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/converting_image-types.md b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/converting_image-types.md new file mode 100644 index 000000000..fc9c77cec --- /dev/null +++ b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/converting_image-types.md @@ -0,0 +1,59 @@ +--- +hidden: false +label_names: +- images +- convert +position: 1 +title: Converting Image types +vote_count: 1 +vote_sum: 1 +--- + +!!! note + The following commands are generally run from the CLI, you dont need the Openstack CLI to complete these tasks just ensure you have `qemu-img` pakcage installed + +Converting images from one format to another is generally straightforward and can be done from a single simple command + +The `qemu-img convert` command can do conversion between multiple formats, including qcow2, qed, raw, vdi, vhd, and vmdk. + +qemu-img format strings: + +| Image Format | Argument to qemu-img | +|:-:|:-:| +| QCOW2 (KVM, Xen) | `qcow2` | +| QED (KVM) | `qed` | +| raw | `raw` | +| VDI (VirtualBox) | `vdi` | +| VHD (Hyper-V) | `vpc` | +| VMDK (VMware) | `vmdk` | + +!!! note + The main formats used in the RDC are either `RAW` or `QCOW2` + + +The following command example will convert a raw image file named `image.img` to a `qcow2` image file, the `-f` specifies the first image format and the `-O` specifies the output format + +``` { .sh } +qemu-img convert -f raw -O qcow2 image.img image.qcow2 +``` + +The following command example will convert a vmdk image file to a raw image file + +``` { .sh } +qemu-img convert -f vmdk -O raw image.vmdk image.img +``` + +The following command example will convert a vmdk image file to a qcow2 image file + +``` { .sh } +qemu-img convert -f vmdk -O qcow2 image.vmdk image.qcow2 +``` + +!!! note + The `-f format` flag is optional. If omitted, qemu-img will try to infer the image format. + + When converting an image file with Windows, ensure the virtio driver is installed. Otherwise, you will get a blue screen when launching the image due to lack of the virtio driver. Another option is to set the image properties as below when you update the image in the Image service to avoid this issue, but it will reduce virtual machine performance significantly. + + ``` { .sh } + openstack image set --property hw_disk_bus='ide' image_name_or_id + ``` \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/image-filter.md b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/image-filter.md new file mode 100644 index 000000000..6a6c13b82 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/image-filter.md @@ -0,0 +1,27 @@ +--- +hidden: false +label_names: +- images +- visibility +- types +position: 1 +title: Image Visibility Types +vote_count: 1 +vote_sum: 1 +--- + +The NeSI Research Developer Cloud has different image tags that are broken down in the following way + +`Public` +: These images are built and mantained by NeSI, the nameing format is generally `NeSI-FlexiHPC-*` which is then appened with the OS flavor. + + For example `NeSI-FlexiHPC-Ubuntu-Jammy_22.04` + +`Private` +: These are images built and uploaded by the project you are in. Think of these as your images that you have created and uploaded to the Research Developer Cloud + +`Shared with Project` +: These are images that are shared from another project to your project. + +`Community` +: These are images upload by the community/other cloud users that are looking to share their images with the wider Research Cloud users \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/index.md b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/index.md new file mode 100644 index 000000000..9a67686de --- /dev/null +++ b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/index.md @@ -0,0 +1,25 @@ +--- +hidden: false +label_names: +- images +- upload +- manage +position: 1 +title: Uploading and Managing Images +vote_count: 1 +vote_sum: 1 +--- + +FlexiHPC supplies many OS images within the Platform. However should you require a specific version for an OS there is the ability to upload that image to the Flexi HPC platform. + +The two ways to add an image are as follows: + +- [Upload an Image via the Dashboard](upload-an-image-via-the-dashboard.md) + +- [Upload an Image via CLI](upload-an-image-via-cli.md) + +When managing images within the FlexiHPC platform we have the same options either via the dashboard or the cli + +- [Managing Images via the Dashboard](managing-images-via-the-dashboard.md) + +- [Managing Images via CLI](managing-images-via-cli.md) \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/managing-images-via-cli.md b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/managing-images-via-cli.md new file mode 100644 index 000000000..2ca250b4f --- /dev/null +++ b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/managing-images-via-cli.md @@ -0,0 +1,80 @@ +--- +hidden: false +label_names: +- images +- upload +- manage +- CLI +position: 1 +title: Upload an Image via CLI +vote_count: 1 +vote_sum: 1 +--- + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + +## List images + +You are able to list the images that you have uploaded to the FlexiHPC platform using the command `openstack image list --` + +``` +openstack image list --private +``` + +``` { .sh .no-copy } ++--------------------------------------+------------------------+--------+ +| ID | Name | Status | ++--------------------------------------+------------------------+--------+ +| 64dead14-9c5a-41c3-b4d6-a122a2ca8f28 | linux-test-snapshot | active | +| d479470d-ab6d-40d6-afc9-04f5f253404d | linux-test-to-boot-2 | active | +| 40ed5c78-c970-4182-a9c8-27e18a6a4251 | linux-test-to-boot-cli | active | +| 5a8e5595-d893-4d1c-8600-d7982f3915bb | ood-keycloak-1 | active | +| 04e1a31a-adee-4af2-935e-0e6e7c4b3193 | test-break | active | ++--------------------------------------+------------------------+--------+ +``` + +``` +openstack image list --shared +``` + +``` { .sh .no-copy } ++--------------------------------------+------------------------------+--------+ +| ID | Name | Status | ++--------------------------------------+------------------------------+--------+ +| 2282be79-1b79-434b-9974-162b533dab00 | Ubuntu-22.10-Wiki-Test | active | +| 1a0480d1-55c8-4fd7-8c7a-8c26e52d8cbd | ubuntu-jammy-server-cloudimg | active | ++--------------------------------------+------------------------------+--------+ +``` + +Adding `--long` to either command will present more information regarding the image + +``` +openstack image list --shared --long +``` + +``` { .sh .no-copy } ++--------------------------------------+------------------------------+-------------+------------------+-----------+----------------------------------+--------+------------+-----------+----------------------------------+------+ +| ID | Name | Disk Format | Container Format | Size | Checksum | Status | Visibility | Protected | Project | Tags | ++--------------------------------------+------------------------------+-------------+------------------+-----------+----------------------------------+--------+------------+-----------+----------------------------------+------+ +| 2282be79-1b79-434b-9974-162b533dab00 | Ubuntu-22.10-Wiki-Test | raw | bare | 740491264 | 91c3094a3ff142ce651034d41aa860c3 | active | shared | False | 4f07cc254d6c4471805d49bae1f739b9 | | +| 1a0480d1-55c8-4fd7-8c7a-8c26e52d8cbd | ubuntu-jammy-server-cloudimg | qcow2 | bare | 688193536 | e05c516fa30cf6c0fd47930449b85ac7 | active | shared | False | 4f07cc254d6c4471805d49bae1f739b9 | | ++--------------------------------------+------------------------------+-------------+------------------+-----------+----------------------------------+--------+------------+-----------+----------------------------------+------+ +``` + +## Updating an image + +If you need to modify the image details or metadata, the general practice is to create a new image with the desired changes rather than directly editing the existing one. After creating the new image, you can delete the old image if it's no longer needed. + +If you need to update an Image this can be done via the Dashboard + +## Deleting an image + +Using the same command `openstack image list --` get the `image id` as you will need to supply that to the following command + +``` +openstack image delete image_id +``` + +!!! info + Deleting an image that has been used to create a compute instance will fail until that instance has been deleted \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/managing-images-via-the-dashboard.md b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/managing-images-via-the-dashboard.md new file mode 100644 index 000000000..69b857176 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/managing-images-via-the-dashboard.md @@ -0,0 +1,71 @@ +--- +hidden: false +label_names: +- images +- upload +- manage +position: 1 +title: Upload an Image via the Dashboard +vote_count: 1 +vote_sum: 1 +--- + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Compute` tab and select `Images` + +You should see a list of all images available for your project. You can use the filter to see images that are `public`,`private`,`shared` or `community` + +Images that are `public` are uploaded and configured by the FlexiHPC team. + +Images that are specific to your project are either `private` or `shared` + +## Updating an Image + +!!! note + If you need to modify the image details or metadata, the general practice is to create a new image with the desired changes rather than directly editing the existing one. After creating the new image, you can delete the old image if it's no longer needed. + +Find the image you would like to update and then click the down arrow at the end of the image row and select `Edit Image` + +Within the `Edit Image` dialog you are able to change the following items + +**Image Details** + +`Image Name` +: !!!note + When changing this property be very careful as some ones code or CLI based deployment could be targeting this property. We normally say use Image ID’s when using any CLI or code based deployments to avoid this issue as Image ID’s are GUID’s + +`Image Description` + +**Image Requirements** + +Nothing in here should be changed or updated. + +**Image Sharing** + +`Visibility` +: This can be changed at anytime + +`Protected` +: This can be changed at anytime + +Click on `Update Image` to apply any changes made to the image. + +## Deleting an Image + +Find the image you would like to delete and then click the down arrow at the end of the image row and select `Delete Image` + +A `Confirm Delete Image` dialog will appear explaining what image you have selected to delete. + +!!! warning + Deleting images is a non-recoverable exercise proceed with caution + +If you are happy to proceed then click `Delete Image` + +The image will then be deleted from the project and underlying storage. \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/summary.md b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/summary.md new file mode 100644 index 000000000..70df76db7 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/summary.md @@ -0,0 +1,9 @@ +* [Images: Upload and Manage](index.md) +* With the Dashboard + * [Upload Image](upload-an-image-via-the-dashboard.md) + * [Managing Images](managing-images-via-the-dashboard.md) +* With the CLI + * [Upload Image](upload-an-image-via-cli.md) + * [Managing Images](managing-images-via-cli.md) +* [Converting Images](converting_image-types.md) +* [Image Visibility Types](image-filter.md) \ No newline at end of file diff --git a/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/upload-an-image-via-cli.md b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/upload-an-image-via-cli.md new file mode 100644 index 000000000..1289db84f --- /dev/null +++ b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/upload-an-image-via-cli.md @@ -0,0 +1,85 @@ +--- +hidden: false +label_names: +- images +- upload +- manage +- CLI +position: 1 +title: Upload an Image via CLI +vote_count: 1 +vote_sum: 1 +--- + +!!! note + The openstack CLI will need to be setup to interact with the FlexiHPC system. Please read [Setting up your CLI environment](../setting-up-your-CLI-environment/index.md) to interact with FlexiHPC to get started. + +To upload an image to FlexiHPC we will be using the command `openstack image create` to upload the image. + +Using Ubuntu as an example, we will upload a new Ubuntu 22.10 (kinetic) image. Heading to the Ubuntu cloud images [link](https://cloud-images.ubuntu.com/kinetic/current/) for Kinetic images we want to select the image that has the description `QCow2 UEFI/GPT Bootable disk image with linux-kvm KVM optimised kernel` + +With that download and accessible from your CLI we can upload it to FlexiHPC + +``` +openstack image create --file /path/to/your/image-file --disk-format disk_format --container-format container_format image_name +``` + +Replace the placeholders with the appropriate values depending on your environment: + +`/path/to/your/image-file` +: The local path to the image file you want to upload. + +`disk_format` +: The format of the image on disk, e.g., qcow2, raw, vhd, vmdk, etc. If your unsure then set the format to qcow2 + +!!! note + When it comes to the different image formats we generally follow the very basic guideline for them. + + Images in the `QCOW2` format are for running a single compute instance. + + Images in the `RAW` format are for running multiple compute instances. + + If you wish to convert to another format please read Converting Images between formats + +`container_format` +: The format of the container for the image, e.g., bare, ovf, aki (kernel image), etc. If you are unsure here then set the format to bare + +`image_name` +: The name you want to give to the uploaded image. + +If we run the command with the supplied settings + +``` +openstack image create --file ~/openstackcli/iso/kinetic-server-cloudimg-amd64-disk-kvm.img --disk-format qcow2 --container-format bare Ubuntu-22.10-Wiki-Test +``` + +The command window will process silently as it uploads it to the FlexiHPC platform. We should then get a response from the FlexiHPC Platform + +``` { .sh .no-copy } ++------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Field | Value | ++------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| container_format | bare | +| created_at | 2023-08-01T02:55:50Z | +| disk_format | qcow2 | +| file | /v2/images/1276db65-e5de-4721-b2db-666a73929b3e/file | +| id | 1276db65-e5de-4721-b2db-666a73929b3e | +| min_disk | 0 | +| min_ram | 0 | +| name | Ubuntu-22.10-Wiki-Test | +| owner | 4f07cc254d6c4471805d49bae1f739b9 | +| properties | locations='[]', os_hidden='False', owner_specified.openstack.md5='', owner_specified.openstack.object='images/Ubuntu-22.10-Wiki-Test', owner_specified.openstack.sha256='' | +| protected | False | +| schema | /v2/schemas/image | +| status | queued | +| tags | | +| updated_at | 2023-08-01T02:55:50Z | +| visibility | shared | ++------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +``` + +!!! note + Adding `--wait` to the end of the command will give you a progress bar rather then returning with the status `queued` + +We should then be able to use the `id` returned to launch an instance from either the [Dashboard](../launch-and-mange-instances/launch-an-instance-via-dashboard.md) or the [CLI](../launch-and-mange-instances/launch-an-instance-via-cli.md) + diff --git a/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/upload-an-image-via-the-dashboard.md b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/upload-an-image-via-the-dashboard.md new file mode 100644 index 000000000..450aa8679 --- /dev/null +++ b/docs/research_developer_cloud/user-guides/uploading-and-managing-Images/upload-an-image-via-the-dashboard.md @@ -0,0 +1,75 @@ +--- +hidden: false +label_names: +- images +- upload +- manage +position: 1 +title: Upload an Image via the Dashboard +vote_count: 1 +vote_sum: 1 +--- + +Log into the [NeSI FlexiHPC Dashboard](https://dashboard.cloud.nesi.org.nz/) + +Select the project you would like to deploy the new instance too (Use the project selector on the top left-hand side): + +
+ ![Alt text](../../assets/images/flexi/project-selector.png) +
+ +Open the `Project` tab, open the `Compute` tab and select `Images` + +Click `Create Image` + +Within the `Create Image` dialog box there are the following values: + +**Image Details** + +`Image Name` +: A friendly name for your image + +`Image Description` +: A description for your image + +**Image Source** + +`File` +: The location on your machine where the image is located + +`Format` +: - ISO - Optical Disk Image + - PLOOP - Virtuozzo/Parallels Loopback Disk + - QCOW2 - QEMU Emulator + - RAW + - VDI - Virtual Disk Image + - VHD - Virtual Hard Disk + - VMDK - Virtual Machine Disk + - AKI - Amazon Kernel Image + - AMI - Amazon Machine Image + - ARI - Amazon Ramdisk Image + + Generally the image you downloaded will have its Format in the name/file extension, An example would be kinetic-server-cloudimg-amd64.vmdk which has the vmdk extension. If it doesn't specify the format in the name assume qcow2 + +!!! note + When it comes to the different image formats we generally follow the very basic guideline for them. + + Images in the `QCOW2` format are for running a single compute instance. + + Images in the `RAW` format are for running multiple compute instances. + + If you wish to convert to another format please read Converting Images between formats + +**Image Requirements** + +The following settings can remain blank as they are not needed to upload an image to the FlexiHPC platform. + +**Image Sharing** + +`Visibility` +: We have the options of Private,Shared or Community. If you don't want anyone else outside your project to use/see the new image then select private, however if you want this to be shared with other projects we would select either Shared or Community + +`Protected` +: This setting allows the image to be protected from deletion. + +Once we have filled out the required fields we can click `Create Image`, the FlexiHPC platform will then process and save the image to the underlying CEPHS file system. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 9f1654b83..72174287c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -30,6 +30,9 @@ theme: # - navigation.prune # Reduces site size. ALSO BREAKS NAV BEHAVIOR - navigation.tracking # Put anchor in URL - navigation.path # Breadcrumbs. Insiders only + - navigation.sections + - navigation.tabs + - navigation.tabs.sticky - content.code.copy - content.action.edit - header.site_name_homepage