diff --git a/4.2.4/404.html b/4.2.4/404.html deleted file mode 100644 index fc952ca..0000000 --- a/4.2.4/404.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - - - - - · DRAGEN on Azure - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-

404

- -

Page not found :(

-

The requested page could not be found.

-
- -
- - - - - diff --git a/4.2.4/LICENSE b/4.2.4/LICENSE deleted file mode 100644 index e056e7c..0000000 --- a/4.2.4/LICENSE +++ /dev/null @@ -1,395 +0,0 @@ -Attribution 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More_considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution 4.0 International Public License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution 4.0 International Public License ("Public License"). To the -extent this Public License may be interpreted as a contract, You are -granted the Licensed Rights in consideration of Your acceptance of -these terms and conditions, and the Licensor grants You such rights in -consideration of benefits the Licensor receives from making the -Licensed Material available under these terms and conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Adapter's License means the license You apply to Your Copyright - and Similar Rights in Your contributions to Adapted Material in - accordance with the terms and conditions of this Public License. - - c. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - - d. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - e. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - f. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - g. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - h. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - i. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - j. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - k. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part; and - - b. produce, reproduce, and Share Adapted Material. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material (including in modified - form), You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - 4. If You Share Adapted Material You produce, the Adapter's - License You apply must not prevent recipients of the Adapted - Material from complying with this Public License. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material; and - - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - - -======================================================================= - -Creative Commons is not a party to its public -licenses. Notwithstanding, Creative Commons may elect to apply one of -its public licenses to material it publishes and in those instances -will be considered the “Licensor.” The text of the Creative Commons -public licenses is dedicated to the public domain under the CC0 Public -Domain Dedication. Except for the limited purpose of indicating that -material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the -public licenses. - -Creative Commons may be contacted at creativecommons.org. \ No newline at end of file diff --git a/4.2.4/LICENSE-CODE b/4.2.4/LICENSE-CODE deleted file mode 100644 index b17b032..0000000 --- a/4.2.4/LICENSE-CODE +++ /dev/null @@ -1,17 +0,0 @@ -The MIT License (MIT) -Copyright (c) Microsoft Corporation - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT -NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/4.2.4/additional-resources.md b/4.2.4/additional-resources.md deleted file mode 100644 index f347422..0000000 --- a/4.2.4/additional-resources.md +++ /dev/null @@ -1,2 +0,0 @@ -* [DRAGEN Infrastructure ARM Template](mainTemplate.json) -* [DRAGEN User Guide](https://support.illumina.com/downloads/illumina-dragen-bio-it-platform-user-guide.html) diff --git a/4.2.4/architecture.md b/4.2.4/architecture.md deleted file mode 100644 index 8d78aa9..0000000 --- a/4.2.4/architecture.md +++ /dev/null @@ -1,62 +0,0 @@ -### Supported Regions - -DRAGEN on Azure is available in regions where FPGA-enabled [Standard NP Family VMs](https://docs.microsoft.com/en-us/azure/virtual-machines/np-series) are available. At the time of this writing, supported regions currently include: - -* West US 2 -* East US -* South Central US -* Southeast Asia (Singapore) -* West Europe (Amsterdam) - -For the most current information on available regions, see the NP-series row of the chart [here](https://azure.microsoft.com/en-us/global-infrastructure/services/?products=virtual-machines). - -### Architecture Diagram - -![architecture-diagram](./images/dragen-on-azure.png) - -### Resource List - -List of Azure resources that are deployed by this quickstart if default settings and parameters are used: - -* [Azure Blob Storage Account](https://docs.microsoft.com/en-us/azure/storage/common/storage-account-overview) for input and output data - * Note: A new storage account is created by default, although users have the option to specify an existing storage account - see section on additional deployment configurations - * [Blob Storage Container](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction#containers) -* [Azure Batch Account](https://docs.microsoft.com/en-us/azure/batch/batch-technical-overview) for managing and scheduling DRAGEN jobs. - * Provisioned in [User Subscription Mode](#user-subscription-node-pools). - * [Node pool](https://docs.microsoft.com/en-us/azure/batch/nodes-and-pools) backed by one [NP-series VM](https://docs.microsoft.com/en-us/azure/virtual-machines/np-series) (fixed scale). -* [Azure Key Vault](https://docs.microsoft.com/en-us/azure/key-vault/general/basic-concepts) for batch service auth to User Subscription node pool VMs - * Note: Batch service handles auth automatically, so users do not need to take any further action after the Key Vault is created. - -### Note on Batch Node Pool Allocation - -Batch offers two options for allocation of node pools: Batch managed and user subscription modes. A single Batch Account can only support one node pool type at a time, meaning you cannot have batch managed and user subscription mode node pools under the same batch account. - -#### Batch Managed Node Pools - -When Batch Managed allocation mode is selected, users must request NP VM quota for each specific Batch instance they create. Nodes are allocated as needed from Batch-managed subscriptions. This scenario works best when users intend to persist and use one or very few Batch instances for their DRAGEN jobs. It is less ideal in situations where the creation/deletion of Batch accounts is automated or occurs frequently, as with CI/CD. - -#### User Subscription Node Pools - -When the User Subscription allocation mode is selected, users request an overall quota for NP VMs for a region within their subscription. With this model, the VMs needed for the Batch account are created directly in the user's subscription. This setup is useful for CI/CD and other cases where users are running DRAGEN across many Batch accounts within a subscription and/or the Batch accounts are short-lived. - -#### Cost Differences in Node Pool Allocation Modes - -There may be cost differences between the two different node pool allocation methods. Consider your usage scenarios and consult Azure documentation and pricing calculators to determine which approach will be most optimal for your needs. - -### Azure Costs - -Users are responsible for costs of any services deployed through this quickstart or its customization options. - -Prices are subject to change - more information can be found on the pricing pages for Azure resources deployed through this tutorial: - -* [Azure Blob Storage](https://azure.microsoft.com/en-us/pricing/details/storage/blobs/) -* [Azure Batch](https://azure.microsoft.com/en-us/pricing/details/batch/windows-virtual-machines/) - * _Note: There is currently no charge for Batch itself, only the compute resources it uses; see VM pricing below_ -* [Azure NP-series VMs](https://azure.microsoft.com/en-us/pricing/details/virtual-machines/linux/#np-series) (a NP10s is used in this reference deployment) -* [Azure Key Vault](https://azure.microsoft.com/en-us/pricing/details/key-vault/#pricing) - -Users are also responsible for costs of any licenses needed to run DRAGEN (not included in this quickstart - must be obtained separately). - -#### Estimate your Costs - -For help in estimating your costs to run DRAGEN on Azure, see the pricing calculator located [here](https://azure.microsoft.com/en-us/pricing/calculator/). diff --git a/4.2.4/assets/css/icons.css b/4.2.4/assets/css/icons.css deleted file mode 100644 index ef28b38..0000000 --- a/4.2.4/assets/css/icons.css +++ /dev/null @@ -1,146 +0,0 @@ - -@font-face { - font-family: 'icomoon'; - src: url('../icons/icons.eot.eot?5nh0xx'); - src: url('../icons/icons.eot#iefix') format('embedded-opentype'), - url('../icons/icons.ttf') format('truetype'), - url('../icons/icons.woff') format('woff'), - url('../icons/icons.svg?#icomoon') format('svg'); - font-weight: normal; - font-style: normal; - font-display: block; -} - -[class^="icon-"], [class*=" icon-"] { - /* use !important to prevent issues with browser extensions that change fonts */ - font-family: 'icomoon' !important; - speak: never; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.icon-plus:before { - content: "\ea0a"; -} - -.icon-azure:before { - content: "\e900"; - color: #0089d6; -} - -.icon-dragen:before { - content: "\e901"; - color: #fbb041; -} - -.icon-azure-text:before { - content: "\e902"; - color: #0089d6; -} - -.icon-ms-azure .path1:before { - content: "\e903"; - color: #737474; -} -.icon-ms-azure .path2:before { - content: "\e904"; - color: #737474; - margin-left: -3.54296875em; -} -.icon-ms-azure .path3:before { - content: "\e905"; - color: #737474; - margin-left: -3.54296875em; -} -.icon-ms-azure .path4:before { - content: "\e906"; - color: #737474; - margin-left: -3.54296875em; -} -.icon-ms-azure .path5:before { - content: "\e907"; - color: #737474; - margin-left: -3.54296875em; -} -.icon-ms-azure .path6:before { - content: "\e908"; - color: #737474; - margin-left: -3.54296875em; -} -.icon-ms-azure .path7:before { - content: "\e909"; - color: #f05225; - margin-left: -3.54296875em; -} -.icon-ms-azure .path8:before { - content: "\e90a"; - color: #7fbb42; - margin-left: -3.54296875em; -} -.icon-ms-azure .path9:before { - content: "\e90b"; - color: #f05125; - margin-left: -3.54296875em; -} -.icon-ms-azure .path10:before { - content: "\e90c"; - color: #7ebb42; - margin-left: -3.54296875em; -} -.icon-ms-azure .path11:before { - content: "\e90d"; - color: #33a0da; - margin-left: -3.54296875em; -} -.icon-ms-azure .path12:before { - content: "\e90e"; - color: #fdb813; - margin-left: -3.54296875em; -} - -.icon-dragen-text .path1:before { - content: "\e90f"; - color: #737474; -} -.icon-dragen-text .path2:before { - content: "\e910"; - color: #737474; - margin-left: -2.7392578125em; -} -.icon-dragen-text .path3:before { - content: "\e911"; - color: #737474; - margin-left: -2.7392578125em; -} -.icon-dragen-text .path4:before { - content: "\e912"; - color: #737474; - margin-left: -2.7392578125em; -} -.icon-dragen-text .path5:before { - content: "\e913"; - color: #737474; - margin-left: -2.7392578125em; -} -.icon-dragen-text .path6:before { - content: "\e914"; - color: #737474; - margin-left: -2.7392578125em; -} -.icon-dragen-text .path7:before { - content: "\e915"; - color: #ffb441; - margin-left: -2.7392578125em; -} -.icon-dragen-text .path8:before { - content: "\e916"; - color: #ffb441; - margin-left: -2.7392578125em; -} \ No newline at end of file diff --git a/4.2.4/assets/css/main.css b/4.2.4/assets/css/main.css deleted file mode 100644 index 525ff31..0000000 --- a/4.2.4/assets/css/main.css +++ /dev/null @@ -1,453 +0,0 @@ -/* Most of these imports are derived from https://github.com/poole/poole. Designed, built, and released under MIT license by @mdo. */ -* { box-sizing: border-box; } - -html, body { margin: 0; padding: 0; } - -html { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif; font-size: 1rem; line-height: 1.5; } - -@media (min-width: 49rem) { html { font-size: 1.25rem; } } - -body { text-size-adjust: 100%; } - -main, article, section { display: block; } - -a { color: #268bd2; text-decoration: none; } - -a:hover, a:focus { text-decoration: underline; } - -a strong { color: inherit; } - -img { border-radius: 5px; display: block; height: auto; margin: 0 0 1rem; max-width: 100%; } - -table { border: 1px solid #e5e5e5; border-collapse: collapse; font-size: 85%; margin-bottom: 1rem; width: 100%; } - -td, th { border: 1px solid #e5e5e5; padding: 0.25rem 0.5rem; } - -th { text-align: left; } - -tbody tr:nth-child(odd) td, tbody tr:nth-child(odd) th { background-color: #f9f9f9; } - -button, input[type='text'], input[type='email'], input[type='search'], input[type='submit'] { border: 1px solid #e5e5e5; border-radius: 300px; padding: 1em 1.5em; } - -button, input[type='submit'] { background: transparent; border-color: #e5e5e5; color: #268bd2; cursor: pointer; transition: color 0.6s ease-in-out, border-color 0.6s ease-in-out, background 0.6s ease-in-out; } - -button:hover, input[type='submit']:hover { background: #268bd2; border-color: #268bd2; box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.16); color: #fff; } - -.video-container { overflow: hidden; position: relative; width: 100%; } - -.video-container::after { padding-top: 56.25%; display: block; content: ''; } - -.video-container iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - -h1, h2, h3, h4, h5, h6, .site-title { color: #313131; font-weight: 600; line-height: 1.25; margin-bottom: 0.5rem; text-rendering: optimizeLegibility; } - -h1 { font-size: 2rem; } - -h2 { font-size: 1.5rem; margin-top: 1rem; } - -h3 { font-size: 1.25rem; margin-top: 1.5rem; } - -h4, h5, h6 { font-size: 1rem; margin-top: 1rem; } - -p { margin-bottom: 1rem; margin-top: 0; } - -strong { color: #303030; } - -ul, ol, dl { margin-bottom: 1rem; margin-top: 0; } - -dt { font-weight: bold; } - -dd { margin-bottom: 0.5rem; } - -hr { border: 0; border-bottom: 1px solid #fff; border-top: 1px solid #eee; margin: 1.5rem 0; position: relative; } - -abbr { color: #555; font-size: 85%; font-weight: bold; text-transform: uppercase; } - -abbr[title] { border-bottom: 1px dotted #e5e5e5; cursor: help; } - -blockquote { border-left: 0.25rem solid #e5e5e5; color: #7a7a7a; margin: 0.8rem 0; padding: 0.5rem 1rem; } - -blockquote p:last-child { margin-bottom: 0; } - -@media (min-width: 30em) { blockquote { padding-left: 1.25rem; padding-right: 5rem; } } - -a[href^='#fn:'], a[href^='#fnref:'] { display: inline-block; font-weight: bold; margin-left: 0.1rem; } - -.footnotes { font-size: 85%; margin-top: 2rem; } - -.lead { font-size: 1.25rem; font-weight: 300; } - -a svg { fill: #268bd2; } - -a svg, .icon svg { height: 1em; } - -.icon { vertical-align: middle; } - -.highlight .hll { background-color: #ffc; } - -.highlight .c { color: #999; } - -/* Comment */ -.highlight .err { /* Error */ background-color: #faa; color: #a00; } - -.highlight .k { color: #069; } - -/* Keyword */ -.highlight .o { color: #555; } - -/* Operator */ -.highlight .cm { /* Comment.Multiline */ color: #09f; font-style: italic; } - -.highlight .cp { color: #099; } - -/* Comment.Preproc */ -.highlight .c1 { color: #999; } - -/* Comment.Single */ -.highlight .cs { color: #999; } - -/* Comment.Special */ -.highlight .gd { /* Generic.Deleted */ background-color: #fcc; border: 1px solid #c00; } - -.highlight .ge { font-style: italic; } - -/* Generic.Emph */ -.highlight .gr { color: #f00; } - -/* Generic.Error */ -.highlight .gh { color: #030; } - -/* Generic.Heading */ -.highlight .gi { /* Generic.Inserted */ background-color: #cfc; border: 1px solid #0c0; } - -.highlight .go { color: #aaa; } - -/* Generic.Output */ -.highlight .gp { color: #009; } - -/* Generic.Prompt */ -.highlight .gu { color: #030; } - -/* Generic.Subheading */ -.highlight .gt { color: #9c6; } - -/* Generic.Traceback */ -.highlight .kc { color: #069; } - -/* Keyword.Constant */ -.highlight .kd { color: #069; } - -/* Keyword.Declaration */ -.highlight .kn { color: #069; } - -/* Keyword.Namespace */ -.highlight .kp { color: #069; } - -/* Keyword.Pseudo */ -.highlight .kr { color: #069; } - -/* Keyword.Reserved */ -.highlight .kt { color: #078; } - -/* Keyword.Type */ -.highlight .m { color: #f60; } - -/* Literal.Number */ -.highlight .s { color: #d44950; } - -/* Literal.String */ -.highlight .na { color: #4f9fcf; } - -/* Name.Attribute */ -.highlight .nb { color: #366; } - -/* Name.Builtin */ -.highlight .nc { color: #0a8; } - -/* Name.Class */ -.highlight .no { color: #360; } - -/* Name.Constant */ -.highlight .nd { color: #99f; } - -/* Name.Decorator */ -.highlight .ni { color: #999; } - -/* Name.Entity */ -.highlight .ne { color: #c00; } - -/* Name.Exception */ -.highlight .nf { color: #c0f; } - -/* Name.Function */ -.highlight .nl { color: #99f; } - -/* Name.Label */ -.highlight .nn { color: #0cf; } - -/* Name.Namespace */ -.highlight .nt { color: #2f6f9f; } - -/* Name.Tag */ -.highlight .nv { color: #033; } - -/* Name.Variable */ -.highlight .ow { color: #000; } - -/* Operator.Word */ -.highlight .w { color: #bbb; } - -/* Text.Whitespace */ -.highlight .mf { color: #f60; } - -/* Literal.Number.Float */ -.highlight .mh { color: #f60; } - -/* Literal.Number.Hex */ -.highlight .mi { color: #f60; } - -/* Literal.Number.Integer */ -.highlight .mo { color: #f60; } - -/* Literal.Number.Oct */ -.highlight .sb { color: #c30; } - -/* Literal.String.Backtick */ -.highlight .sc { color: #c30; } - -/* Literal.String.Char */ -.highlight .sd { /* Literal.String.Doc */ color: #c30; font-style: italic; } - -.highlight .s2 { color: #c30; } - -/* Literal.String.Double */ -.highlight .se { color: #c30; } - -/* Literal.String.Escape */ -.highlight .sh { color: #c30; } - -/* Literal.String.Heredoc */ -.highlight .si { color: #a00; } - -/* Literal.String.Interpol */ -.highlight .sx { color: #c30; } - -/* Literal.String.Other */ -.highlight .sr { color: #3aa; } - -/* Literal.String.Regex */ -.highlight .s1 { color: #c30; } - -/* Literal.String.Single */ -.highlight .ss { color: #fc3; } - -/* Literal.String.Symbol */ -.highlight .bp { color: #366; } - -/* Name.Builtin.Pseudo */ -.highlight .vc { color: #033; } - -/* Name.Variable.Class */ -.highlight .vg { color: #033; } - -/* Name.Variable.Global */ -.highlight .vi { color: #033; } - -/* Name.Variable.Instance */ -.highlight .il { color: #f60; } - -/* Literal.Number.Integer.Long */ -.css .o, .css .o + .nt, .css .nt + .nt { color: #999; } - -code, pre { font-family: Menlo, Monaco, "Courier New", monospace; } - -code { background-color: #f9f9f9; border-radius: 3px; color: #bf616a; font-size: 85%; padding: 0.25em 0.5em; } - -pre { margin-bottom: 1rem; margin-top: 0; max-width: 100%; overflow-x: auto; } - -pre code { background-color: transparent; color: inherit; font-size: 100%; padding: 0; } - -.highlight { background-color: #f9f9f9; border-radius: 0.25rem; font-size: 0.8rem; line-height: 1.4; margin-bottom: 1rem; padding: 1rem; } - -.highlight pre { margin-bottom: 0; overflow-x: auto; } - -.highlight .lineno { color: #999; display: inline-block; padding-left: 0.25rem; padding-right: 0.75rem; user-select: none; } - -/* Layout Styles for managing the structural hierarchy of the site. Hydeout features the large colored sidebar from Hyde that houses the site name, intro, and "footer" content. Sidebar is on top of content on mobile and expands into sidebar on larger width displays. Sidebar CSS assumes HTML looks like this for post pages: body > #sidebar > header (primary sidebar content -- i.e. title) > h1 (home page only, otherwise div or span) > secondary nav content we may want to hide on certain pages > .container > h1 (non-home page) > .content Basic approach is to color in body, make sidebar background transparent, and then fill in the .container or .content elements depending on how far we want the sidebar or header to stretch. */ -body { background-attachment: fixed; background-color: #202020; background-image: linear-gradient(to bottom, #323232, #0e0e0e); color: rgba(255, 255, 255, 0.75); display: flex; flex-direction: column; min-height: 100vh; } - -#sidebar { flex: 0 0 auto; padding: 2rem; } - -#sidebar .site-title { font-family: 'Abril Fatface', serif; font-size: 1.25rem; font-weight: normal; margin-bottom: 0.5rem; margin-top: 0; } - -#sidebar .site-title .back-arrow { margin-right: 0.5rem; } - -.content { background: #fff; color: #515151; padding: 2rem; } - -.container { display: flex; flex: 1 1 auto; flex-direction: column; } - -.container > .content { flex-grow: 1; padding-bottom: 4rem; } - -/* ----------------------------------------------------------- Mobile view ----------------------------------------------------------- */ -#sidebar header ~ *, #sidebar header ~ nav, #sidebar p.lead { display: none; } - -.container > header { background: transparent; color: #fff; margin: -1.5rem 2rem 2rem; } - -.container > header h1, .container > header h2 { color: inherit; } - -.container > header h1:last-child, .container > header h2:last-child { margin-bottom: 0; } - -/* ----------------------------------------------------------- Mobile view for home page) ----------------------------------------------------------- */ -.home #sidebar { text-align: center; } - -.home #sidebar .site-title { font-size: 3.25rem; } - -.home #sidebar header ~ *, .home #sidebar p.lead { display: block; } - -.home #sidebar header ~ nav { display: flex; } - -.home #sidebar > *:last-child { margin-bottom: 0.5rem; } - -/* ----------------------------------------------------------- Tablet / Desktop view ----------------------------------------------------------- */ -@media (min-width: 49rem) { body { flex-direction: row; min-height: 100vh; -webkit-overflow-scrolling: touch; overflow-y: auto; } body > * { -webkit-overflow-scrolling: touch; overflow-y: auto; } /* Undo mobile CSS */ #sidebar, .home #sidebar { text-align: left; width: 18rem; } #sidebar > *:last-child, .home #sidebar > *:last-child { margin-bottom: 0; } #sidebar { position: fixed; bottom: 0; left: 0; } #sidebar .site-title { font-size: 3.25rem; } #sidebar .site-title .back-arrow { display: none; } #sidebar p.lead, #sidebar header ~ * { display: block; } #sidebar header ~ nav { display: flex; } .index #sidebar { margin-bottom: 0; } .container { background: #fff; color: #515151; min-height: 100vh; padding: 4rem 4rem 0; margin-left: 18rem; } .container > header { color: #313131; margin: 0; } .container > header h1, .container > header h2 { color: inherit; } .container > header h1:last-child, .container > header h2:last-child { margin-bottom: 0.5rem; } .container > * { max-width: 38rem; padding: 0; } } - -/* ----------------------------------------------------------- Sidebar links + nav ----------------------------------------------------------- */ -#sidebar a { color: #fff; } - -#sidebar a svg { fill: rgba(255, 255, 255, 0.85); } - -#sidebar a:hover svg, #sidebar a:focus svg, #sidebar a.active svg { fill: rgba(255, 255, 255, 0.85); } - -#sidebar a:hover, #sidebar a:focus { text-decoration: underline; } - -#sidebar a.icon:hover, #sidebar a.icon:focus { text-decoration: none; } - -#sidebar a.active { font-weight: bold; } - -#sidebar .site-title { color: #fff; } - -#sidebar .site-title a { color: inherit; } - -#sidebar nav { display: flex; } - -#sidebar-nav-links { flex-flow: column nowrap; } - -#sidebar-icon-links { flex-flow: row wrap; justify-content: center; margin-top: 1rem; max-width: 100%; } - -@media (min-width: 49rem) { #sidebar-icon-links { justify-content: flex-start; margin-left: -0.25em; } } - -#sidebar nav > * { display: block; line-height: 1.75; } - -#sidebar nav > .icon { display: inline-block; font-size: 1.5rem; margin: 0 0.25em; } - -@media print { #sidebar { display: none; } body { display: block; } .container { display: block; margin-left: 0; margin-right: 0; padding: 0; } .container > * { max-width: 100%; } html { font-size: normal; } } - -.masthead { margin-bottom: 3rem; padding-bottom: 1rem; padding-top: 1rem; } - -.masthead-title { color: #515151; margin-bottom: 0; margin-top: 0; } - -.masthead-title a { color: inherit; } - -.masthead-title small { font-size: 75%; font-weight: 400; opacity: 0.5; } - -.posts-by-tag h2 { text-transform: capitalize; } - -.page-title, .post-title { margin-top: 0; } - -.page-title, .post-title, .post-title a { color: #313131; } - -h2.post-title, h2.page-title { font-size: 2rem; } - -.post-tags a { font-size: 0.8em; margin-right: 0.5rem; opacity: 0.75; white-space: nowrap; } - -.post-tags a .tag-name { text-transform: capitalize; } - -.post-tags a:hover { opacity: 1; text-decoration: none; } - -.posts-list { list-style: none; padding-left: 0; } - -.posts-list h3 { margin-top: 0; } - -.posts-list li small { color: #999; font-size: 75%; white-space: nowrap; } - -.posts-list li a:hover { color: #268bd2; text-decoration: none; } - -.posts-list li a:hover small { color: inherit; } - -article + *, .post-body ~ section { border-top: 1px solid #e5e5e5; margin-top: 2rem; padding-top: 2rem; } - -article + * > h2:first-child, article + * > h3:first-child, .post-body ~ section > h2:first-child, .post-body ~ section > h3:first-child { margin-top: 0; } - -.post-meta { color: #767676; margin-bottom: 1rem; margin-top: -0.5rem; } - -.post .content li + li, .page .content li + li { margin-top: 0.25rem; } - -button.disqus-load { margin-top: 1em; } - -/* Pagination Super lightweight (HTML-wise) blog pagination. Should only be visible when there is navigation available -- single buttons at top or bottom of each page. */ -.pagination { color: #ccc; margin-bottom: 2rem; text-align: center; } - -.pagination > a { background: #fff; border: solid #e5e5e5; border-radius: 300px; border-width: 1px; box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.16); display: inline-block; max-width: 18rem; padding: 1em 1.5em; width: 60%; } - -.pagination > a:hover { background-color: #e5e5e5; } - -* + .pagination { margin-top: 2rem; } - -.content .pagination:first-child { margin-top: -4rem; } - -.index #sidebar { padding-bottom: calc(2rem + 1em); } - -.home.index #sidebar { padding-bottom: 2rem; } - -@media (min-width: 49rem) { .pagination > a { box-shadow: none; } .pagination > a:hover { box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.16); } .content .pagination:first-child { margin-top: 0; } .content .pagination:first-child + * { border-top: 1px solid #e5e5e5; margin-top: 2rem; padding-top: 2rem; } .index #sidebar { padding-bottom: 2rem; } } - -.message { background-color: #f9f9f9; color: #717171; margin-bottom: 1rem; padding: 1rem; } - -.search-row { border: 1px solid #e5e5e5; border-radius: 300px; display: flex; padding: 2px; } - -.search-row input { border: 0; } - -.search-row input + input { margin-left: 2px; } - -.search-row input[type='text'], .search-row input[type='search'] { flex-grow: 1; } - -.tags-list a { margin-right: 0.5em; opacity: 0.75; white-space: nowrap; } - -.tags-list a .tag-count { background: #268bd2; border-radius: 1000px; color: rgba(255, 255, 255, 0.8); font-size: 0.75em; margin-left: 0.25em; padding-left: 0.6em; padding-right: 0.6em; } - -.tags-list a:hover { opacity: 1; text-decoration: none; } - -@keyframes posts-for-tag-fade-in { from { opacity: 0; } - to { opacity: 1; } } - -.posts-for-tag { display: none; } - -.posts-for-tag:target { animation: posts-for-tag-fade-in 0.6s ease-in-out; display: block; } - -.back-link { font-size: 80%; } - -.back-link a { color: currentColor; } - -.back-link a svg { fill: currentColor; } - -select { padding: 5px; border-radius: 5px; margin-bottom: 20px; width: 100%; margin-left: 1.3em; } - -.home #sidebar { position: fixed; top: 0; } - -.home #sidebar .site-title { font-size: 4.0rem; } - -.home #sidebar .icon-dragen-text { font-size: 1.299em; } - -.home #sidebar .lead { font-size: 1.5em; } - -.sidebar-nav-list > .sidebar-nav-list { margin-left: 10px; } - -li > ul { margin-bottom: 0; } - -.spacer { text-align: center; font-size: 0.3em; display: block; margin: 0.35em; color: #444; } - -.mobile-header { display: none; } - -@media (max-width: 768px) { .home #sidebar { display: none; } .mobile-header { display: block; } .mobile-header .logo { text-align: center; font-size: 6.0rem; } #page-header { margin: 10px auto; } } - -/*# sourceMappingURL=main.css.map */ \ No newline at end of file diff --git a/4.2.4/assets/css/main.css.map b/4.2.4/assets/css/main.css.map deleted file mode 100644 index 506c161..0000000 --- a/4.2.4/assets/css/main.css.map +++ /dev/null @@ -1,40 +0,0 @@ -{ - "version": 3, - "file": "main.css", - "sources": [ - "main.scss", - "vendor/bundle/ruby/2.7.0/gems/jekyll-theme-hydeout-4.2.0/_sass/hydeout.scss", - "vendor/bundle/ruby/2.7.0/gems/jekyll-theme-hydeout-4.2.0/_sass/hydeout/_variables.scss", - "vendor/bundle/ruby/2.7.0/gems/jekyll-theme-hydeout-4.2.0/_sass/hydeout/_base.scss", - "vendor/bundle/ruby/2.7.0/gems/jekyll-theme-hydeout-4.2.0/_sass/hydeout/_type.scss", - "vendor/bundle/ruby/2.7.0/gems/jekyll-theme-hydeout-4.2.0/_sass/hydeout/_syntax.scss", - "vendor/bundle/ruby/2.7.0/gems/jekyll-theme-hydeout-4.2.0/_sass/hydeout/_code.scss", - "vendor/bundle/ruby/2.7.0/gems/jekyll-theme-hydeout-4.2.0/_sass/hydeout/_layout.scss", - "vendor/bundle/ruby/2.7.0/gems/jekyll-theme-hydeout-4.2.0/_sass/hydeout/_masthead.scss", - "vendor/bundle/ruby/2.7.0/gems/jekyll-theme-hydeout-4.2.0/_sass/hydeout/_posts.scss", - "vendor/bundle/ruby/2.7.0/gems/jekyll-theme-hydeout-4.2.0/_sass/hydeout/_pagination.scss", - "vendor/bundle/ruby/2.7.0/gems/jekyll-theme-hydeout-4.2.0/_sass/hydeout/_message.scss", - "vendor/bundle/ruby/2.7.0/gems/jekyll-theme-hydeout-4.2.0/_sass/hydeout/_search.scss", - "vendor/bundle/ruby/2.7.0/gems/jekyll-theme-hydeout-4.2.0/_sass/hydeout/_tags.scss", - "vendor/bundle/ruby/2.7.0/gems/jekyll-theme-hydeout-4.2.0/_sass/hydeout/_back-link.scss" - ], - "sourcesContent": [ - "@import \"hydeout\";\n\nselect {\n padding: 5px;\n border-radius: 5px;\n margin-bottom: 20px;\n width: 100%;\n margin-left: 1.3em;\n}\n\n.home #sidebar {\n position: fixed;\n top: 0;\n\n .site-title {\n font-size: 4.0rem;\n }\n\n .icon-dragen-text {\n font-size: 1.299em;\n }\n\n .lead {\n font-size: 1.5em;\n }\n}\n\n.sidebar-nav-list > .sidebar-nav-list {\n margin-left: 10px;\n}\n\nli > ul {\n margin-bottom: 0;\n}\n\n.spacer {\n text-align: center;\n font-size:0.3em;\n display: block;\n margin: 0.35em;\n color: #444;\n}\n\n.mobile-header { display:none; }\n\n@media (max-width: 768px) {\n .home #sidebar {\n display: none;\n }\n\n .mobile-header {\n display: block;\n .logo {\n text-align: center;\n font-size: 6.0rem;\n }\n }\n\n\n #page-header {\n margin: 10px auto;\n }\n}\n", - "/*\n Most of these imports are derived from https://github.com/poole/poole.\n Designed, built, and released under MIT license by @mdo.\n*/\n\n@import 'hydeout/variables';\n@import 'hydeout/base';\n@import 'hydeout/type';\n@import 'hydeout/syntax';\n@import 'hydeout/code';\n@import 'hydeout/layout';\n@import 'hydeout/masthead';\n@import 'hydeout/posts';\n@import 'hydeout/pagination';\n@import 'hydeout/message';\n@import 'hydeout/search';\n@import 'hydeout/tags';\n@import 'hydeout/back-link';\n", - "$gray-1: #f9f9f9 !default;\n$gray-2: #e5e5e5 !default;\n$gray-3: #ccc !default;\n$gray-4: #767676 !default;\n$gray-5: #515151 !default;\n$gray-6: #313131 !default;\n\n$red: #ac4142 !default;\n$orange: #d28445 !default;\n$yellow: #f4bf75 !default;\n$green: #90a959 !default;\n$cyan: #75b5aa !default;\n$blue: #268bd2 !default;\n$brown: #8f5536 !default;\n\n$root-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', Arial, sans-serif !default;\n$root-font-size: 1rem !default;\n$root-line-height: 1.5 !default;\n\n$body-color: $gray-5 !default;\n$body-muted: $gray-4 !default;\n$body-bg: #fff !default;\n$link-color: $blue !default;\n$heading-color: $gray-6 !default;\n\n$border-color: $gray-2 !default;\n$border-radius: 300px !default;\n$padding-v: 1em !default;\n$padding-h: 1.5em !default;\n$heading-spacing: 0.5rem !default;\n$section-spacing: 2rem !default;\n$sidebar-width: 18rem !default;\n\n$large-breakpoint: 49rem !default;\n$large-font-size: 1.25rem !default;\n\n$box-shadow-size: 1px !default;\n$box-shadow-opacity: 0.16 !default;\n$default-box-shadow: $box-shadow-size $box-shadow-size $box-shadow-size rgba(0, 0, 0, $box-shadow-opacity);\n\n$code-font-family: Menlo, Monaco, 'Courier New', monospace !default;\n$code-color: #bf616a !default;\n\n// Hyde theming\n$sidebar-bg-color: #202020 !default;\n$sidebar-fg-color: #fff !default;\n$sidebar-sticky: true !default;\n$layout-reverse: false !default;\n\n$sidebar-title-color: $sidebar-fg-color !default;\n$sidebar-link-color: $sidebar-fg-color !default;\n$sidebar-text-color: rgba($sidebar-fg-color, 0.75) !default;\n$sidebar-icon-color: rgba($sidebar-fg-color, 0.85) !default;\n", - "// Body resets\n//\n// Update the foundational and global aspects of the page.\n\n* {\n box-sizing: border-box;\n}\n\nhtml,\nbody {\n margin: 0;\n padding: 0;\n}\n\nhtml {\n font-family: $root-font-family;\n font-size: $root-font-size;\n line-height: $root-line-height;\n\n @media (min-width: $large-breakpoint) {\n font-size: $large-font-size;\n }\n}\n\nbody {\n text-size-adjust: 100%;\n}\n\nmain,\narticle,\nsection {\n display: block;\n}\n\n// No `:visited` state is required by default (browsers will use `a`)\na {\n color: $link-color;\n text-decoration: none;\n\n // `:focus` is linked to `:hover` for basic accessibility\n &:hover,\n &:focus {\n text-decoration: underline;\n }\n\n strong {\n color: inherit;\n }\n}\n\nimg {\n border-radius: 5px;\n display: block;\n height: auto; // prevent max-width from squishing images with defined height\n margin: 0 0 1rem;\n max-width: 100%;\n}\n\ntable {\n border: 1px solid $border-color;\n border-collapse: collapse;\n font-size: 85%;\n margin-bottom: 1rem;\n width: 100%;\n}\n\ntd,\nth {\n border: 1px solid $border-color;\n padding: 0.25rem 0.5rem;\n}\n\nth {\n text-align: left;\n}\n\ntbody tr:nth-child(odd) td,\ntbody tr:nth-child(odd) th {\n background-color: $gray-1;\n}\n\nbutton,\ninput[type='text'],\ninput[type='email'],\ninput[type='search'],\ninput[type='submit'] {\n border: 1px solid $border-color;\n border-radius: $border-radius;\n padding: $padding-v $padding-h;\n}\n\nbutton,\ninput[type='submit'] {\n background: transparent;\n border-color: $border-color;\n color: $link-color;\n cursor: pointer;\n transition:\n color 0.6s ease-in-out,\n border-color 0.6s ease-in-out,\n background 0.6s ease-in-out;\n\n &:hover {\n background: $link-color;\n border-color: $link-color;\n box-shadow: $default-box-shadow;\n color: #fff;\n }\n}\n\n.video-container {\n overflow: hidden;\n position: relative;\n width:100%;\n}\n\n.video-container::after {\n padding-top: 56.25%;\n display: block;\n content: '';\n}\n\n.video-container iframe {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}", - "// Typography\n//\n// Headings, body text, lists, and other misc typographic elements.\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.site-title {\n color: $heading-color;\n font-weight: 600;\n line-height: 1.25;\n margin-bottom: $heading-spacing;\n text-rendering: optimizeLegibility;\n}\n\nh1 {\n font-size: 2rem;\n}\n\nh2 {\n font-size: 1.5rem;\n margin-top: 1rem;\n}\n\nh3 {\n font-size: 1.25rem;\n margin-top: 1.5rem;\n}\n\nh4,\nh5,\nh6 {\n font-size: 1rem;\n margin-top: 1rem;\n}\n\np {\n margin-bottom: 1rem;\n margin-top: 0;\n}\n\nstrong {\n color: #303030;\n}\n\nul,\nol,\ndl {\n margin-bottom: 1rem;\n margin-top: 0;\n}\n\ndt {\n font-weight: bold;\n}\n\ndd {\n margin-bottom: 0.5rem;\n}\n\nhr {\n border: 0;\n border-bottom: 1px solid #fff;\n border-top: 1px solid #eee;\n margin: 1.5rem 0;\n position: relative;\n}\n\nabbr {\n color: #555;\n font-size: 85%;\n font-weight: bold;\n text-transform: uppercase;\n\n &[title] {\n border-bottom: 1px dotted $border-color;\n cursor: help;\n }\n}\n\nblockquote {\n border-left: 0.25rem solid $border-color;\n color: #7a7a7a;\n margin: 0.8rem 0;\n padding: 0.5rem 1rem;\n\n p:last-child {\n margin-bottom: 0;\n }\n\n @media (min-width: 30em) {\n padding-left: 1.25rem;\n padding-right: 5rem;\n }\n}\n\n// Markdown footnotes\n//\n// See the example content post for an example.\n\n// Footnote number within body text\na[href^='#fn:'],\n// Back to footnote link\na[href^='#fnref:'] {\n display: inline-block;\n font-weight: bold;\n margin-left: 0.1rem;\n}\n\n// List of footnotes\n.footnotes {\n font-size: 85%;\n margin-top: 2rem;\n}\n\n// Custom type\n//\n// Extend paragraphs with `.lead` for larger introductory text.\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n// SVG Icons\na svg {\n fill: $link-color;\n}\n\na svg,\n.icon svg {\n height: 1em;\n}\n\n.icon {\n vertical-align: middle;\n}\n", - ".highlight .hll { background-color: #ffc; }\n.highlight .c { color: #999; } /* Comment */\n.highlight .err { /* Error */\n background-color: #faa;\n color: #a00;\n}\n.highlight .k { color: #069; } /* Keyword */\n.highlight .o { color: #555; } /* Operator */\n.highlight .cm { /* Comment.Multiline */\n color: #09f;\n font-style: italic;\n}\n.highlight .cp { color: #099; } /* Comment.Preproc */\n.highlight .c1 { color: #999; } /* Comment.Single */\n.highlight .cs { color: #999; } /* Comment.Special */\n.highlight .gd { /* Generic.Deleted */\n background-color: #fcc;\n border: 1px solid #c00;\n}\n.highlight .ge { font-style: italic; } /* Generic.Emph */\n.highlight .gr { color: #f00; } /* Generic.Error */\n.highlight .gh { color: #030; } /* Generic.Heading */\n.highlight .gi { /* Generic.Inserted */\n background-color: #cfc;\n border: 1px solid #0c0;\n}\n.highlight .go { color: #aaa; } /* Generic.Output */\n.highlight .gp { color: #009; } /* Generic.Prompt */\n// .highlight .gs { } /* Generic.Strong */\n.highlight .gu { color: #030; } /* Generic.Subheading */\n.highlight .gt { color: #9c6; } /* Generic.Traceback */\n.highlight .kc { color: #069; } /* Keyword.Constant */\n.highlight .kd { color: #069; } /* Keyword.Declaration */\n.highlight .kn { color: #069; } /* Keyword.Namespace */\n.highlight .kp { color: #069; } /* Keyword.Pseudo */\n.highlight .kr { color: #069; } /* Keyword.Reserved */\n.highlight .kt { color: #078; } /* Keyword.Type */\n.highlight .m { color: #f60; } /* Literal.Number */\n.highlight .s { color: #d44950; } /* Literal.String */\n.highlight .na { color: #4f9fcf; } /* Name.Attribute */\n.highlight .nb { color: #366; } /* Name.Builtin */\n.highlight .nc { color: #0a8; } /* Name.Class */\n.highlight .no { color: #360; } /* Name.Constant */\n.highlight .nd { color: #99f; } /* Name.Decorator */\n.highlight .ni { color: #999; } /* Name.Entity */\n.highlight .ne { color: #c00; } /* Name.Exception */\n.highlight .nf { color: #c0f; } /* Name.Function */\n.highlight .nl { color: #99f; } /* Name.Label */\n.highlight .nn { color: #0cf; } /* Name.Namespace */\n.highlight .nt { color: #2f6f9f; } /* Name.Tag */\n.highlight .nv { color: #033; } /* Name.Variable */\n.highlight .ow { color: #000; } /* Operator.Word */\n.highlight .w { color: #bbb; } /* Text.Whitespace */\n.highlight .mf { color: #f60; } /* Literal.Number.Float */\n.highlight .mh { color: #f60; } /* Literal.Number.Hex */\n.highlight .mi { color: #f60; } /* Literal.Number.Integer */\n.highlight .mo { color: #f60; } /* Literal.Number.Oct */\n.highlight .sb { color: #c30; } /* Literal.String.Backtick */\n.highlight .sc { color: #c30; } /* Literal.String.Char */\n.highlight .sd { /* Literal.String.Doc */\n color: #c30;\n font-style: italic;\n}\n.highlight .s2 { color: #c30; } /* Literal.String.Double */\n.highlight .se { color: #c30; } /* Literal.String.Escape */\n.highlight .sh { color: #c30; } /* Literal.String.Heredoc */\n.highlight .si { color: #a00; } /* Literal.String.Interpol */\n.highlight .sx { color: #c30; } /* Literal.String.Other */\n.highlight .sr { color: #3aa; } /* Literal.String.Regex */\n.highlight .s1 { color: #c30; } /* Literal.String.Single */\n.highlight .ss { color: #fc3; } /* Literal.String.Symbol */\n.highlight .bp { color: #366; } /* Name.Builtin.Pseudo */\n.highlight .vc { color: #033; } /* Name.Variable.Class */\n.highlight .vg { color: #033; } /* Name.Variable.Global */\n.highlight .vi { color: #033; } /* Name.Variable.Instance */\n.highlight .il { color: #f60; } /* Literal.Number.Integer.Long */\n\n.css .o,\n.css .o + .nt,\n.css .nt + .nt { color: #999; }\n", - "// Code\n//\n// Inline and block-level code snippets. Includes tweaks to syntax highlighted\n// snippets from Pygments/Rouge and Gist embeds.\n\ncode,\npre {\n font-family: $code-font-family;\n}\n\ncode {\n background-color: #f9f9f9;\n border-radius: 3px;\n color: $code-color;\n font-size: 85%;\n padding: 0.25em 0.5em;\n}\n\npre {\n margin-bottom: 1rem;\n margin-top: 0;\n max-width: 100%;\n overflow-x: auto;\n}\n\npre code {\n background-color: transparent;\n color: inherit;\n font-size: 100%;\n padding: 0;\n}\n\n// Pygments/Rouge via Jekyll\n.highlight {\n background-color: #f9f9f9;\n border-radius: 0.25rem;\n font-size: 0.8rem;\n line-height: 1.4;\n margin-bottom: 1rem;\n padding: 1rem;\n\n pre {\n margin-bottom: 0;\n overflow-x: auto;\n }\n\n .lineno {\n color: #999;\n display: inline-block; // Ensures the null space also isn't selectable\n padding-left: 0.25rem;\n padding-right: 0.75rem;\n user-select: none; // Make sure numbers aren't selectable\n }\n}\n\n// Gist via GitHub Pages\n// .gist .gist-file {\n// font-family: Menlo, Monaco, \"Courier New\", monospace !important;\n// }\n// .gist .markdown-body {\n// padding: 15px;\n// }\n// .gist pre {\n// padding: 0;\n// background-color: transparent;\n// }\n// .gist .gist-file .gist-data {\n// font-size: .8rem !important;\n// line-height: 1.4;\n// }\n// .gist code {\n// padding: 0;\n// color: inherit;\n// background-color: transparent;\n// border-radius: 0;\n// }\n", - "/*\n Layout\n\n Styles for managing the structural hierarchy of the site.\n Hydeout features the large colored sidebar from Hyde that houses the\n site name, intro, and \"footer\" content. Sidebar is on top of content on\n mobile and expands into sidebar on larger width displays.\n\n Sidebar CSS assumes HTML looks like this for post pages:\n\n body\n > #sidebar\n > header (primary sidebar content -- i.e. title)\n > h1 (home page only, otherwise div or span)\n > secondary nav content we may want to hide on certain pages\n > .container\n > h1 (non-home page)\n > .content\n\n Basic approach is to color in body, make sidebar background transparent,\n and then fill in the .container or .content elements depending on how far\n we want the sidebar or header to stretch.\n*/\n\nbody {\n background-attachment: fixed;\n background-color: $sidebar-bg-color;\n background-image: linear-gradient(to bottom, lighten($sidebar-bg-color, 7%), darken($sidebar-bg-color, 7%));\n color: $sidebar-text-color;\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n}\n\n#sidebar {\n flex: 0 0 auto;\n padding: $section-spacing;\n\n .site-title {\n font-family: 'Abril Fatface', serif;\n font-size: $large-font-size;\n font-weight: normal;\n margin-bottom: $heading-spacing;\n margin-top: 0;\n }\n\n .site-title .back-arrow { margin-right: 0.5rem; }\n}\n\n.content {\n background: $body-bg;\n color: $body-color;\n padding: $section-spacing;\n}\n\n// Container is flexbox as well -- we want content div to stretch and fill\n.container {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n\n > .content {\n flex-grow: 1;\n padding-bottom: $section-spacing * 2;\n }\n}\n\n/* -----------------------------------------------------------\n Mobile view\n----------------------------------------------------------- */\n\n// Hide secondary nav content in sidebar\n// Hide lead paragraph in sidebar\n#sidebar {\n header ~ *,\n header ~ nav,\n p.lead {\n display: none;\n }\n}\n\n// Make header elements blend into sidebar / background\n.container > header {\n background: transparent;\n color: $sidebar-title-color;\n margin:\n ($heading-spacing - $section-spacing)\n $section-spacing\n $section-spacing;\n\n h1,\n h2 {\n color: inherit;\n }\n\n h1:last-child,\n h2:last-child {\n margin-bottom: 0;\n }\n}\n\n/* -----------------------------------------------------------\n Mobile view for home page)\n----------------------------------------------------------- */\n\n.home #sidebar {\n\n // Center sidebar content\n text-align: center;\n\n // Bigger title\n .site-title {\n font-size: 3.25rem;\n }\n\n // Show secondary nav content + lead\n header ~ *,\n p.lead {\n display: block;\n }\n\n header ~ nav {\n display: flex;\n }\n\n // Slightly more bottom padding to compensate for heading not match 100% of\n // line-height on top\n > *:last-child {\n margin-bottom: 0.5rem;\n }\n}\n\n/* -----------------------------------------------------------\n Tablet / Desktop view\n----------------------------------------------------------- */\n\n@media (min-width: $large-breakpoint) {\n body {\n flex-direction: row;\n min-height: 100vh;\n -webkit-overflow-scrolling: touch;\n overflow-y: auto;\n\n > * {\n -webkit-overflow-scrolling: touch;\n overflow-y: auto;\n }\n }\n\n /* Undo mobile CSS */\n\n #sidebar,\n .home #sidebar {\n text-align: left;\n width: $sidebar-width;\n\n > *:last-child {\n margin-bottom: 0;\n }\n }\n\n #sidebar {\n position: fixed;\n\n // Attach to bottom or top of window\n @if $sidebar-sticky {\n bottom: 0;\n }\n\n @else {\n top: 0;\n }\n\n // Attach to right or left of window\n @if $layout-reverse {\n right: 0;\n }\n\n @else {\n left: 0;\n }\n\n .site-title {\n font-size: 3.25rem;\n .back-arrow { display: none; }\n }\n\n p.lead,\n header ~ * {\n display: block;\n }\n\n header ~ nav {\n display: flex;\n }\n }\n\n .index #sidebar { margin-bottom: 0; }\n\n // Make entire container background white to contrast against sidebar\n .container {\n background: $body-bg;\n color: $body-color;\n min-height: 100vh;\n padding:\n $section-spacing * 2\n $section-spacing * 2\n 0;\n\n @if $layout-reverse {\n margin-right: $sidebar-width;\n }\n\n @else {\n margin-left: $sidebar-width;\n }\n\n > header {\n color: $heading-color;\n margin: 0;\n\n h1,\n h2 {\n color: inherit;\n\n &:last-child {\n margin-bottom: $heading-spacing;\n }\n }\n }\n\n > * {\n max-width: 38rem;\n padding: 0;\n }\n }\n}\n\n/* -----------------------------------------------------------\n Sidebar links + nav\n----------------------------------------------------------- */\n\n#sidebar a {\n color: $sidebar-link-color;\n\n svg {\n fill: $sidebar-icon-color;\n }\n}\n\n#sidebar a:hover,\n#sidebar a:focus,\n#sidebar a.active {\n svg { fill: $sidebar-icon-color; }\n}\n\n#sidebar a:hover,\n#sidebar a:focus {\n text-decoration: underline;\n\n &.icon {\n text-decoration: none;\n }\n}\n\n#sidebar a.active {\n font-weight: bold;\n}\n\n#sidebar .site-title {\n color: $sidebar-title-color;\n a { color: inherit; }\n}\n\n#sidebar nav {\n display: flex;\n}\n\n#sidebar-nav-links {\n flex-flow: column nowrap;\n}\n\n#sidebar-icon-links {\n flex-flow: row wrap;\n justify-content: center;\n margin-top: 1rem;\n max-width: 100%;\n\n @media (min-width: $large-breakpoint) {\n justify-content: flex-start;\n margin-left: -0.25em;\n }\n}\n\n#sidebar nav > * {\n display: block;\n line-height: 1.75;\n}\n\n#sidebar nav > .icon {\n display: inline-block;\n font-size: 1.5rem;\n margin: 0 0.25em;\n}\n\n@media print {\n #sidebar {\n display: none;\n }\n\n body {\n display: block;\n }\n\n .container {\n display: block;\n margin-left: 0;\n margin-right: 0;\n padding: 0;\n\n > * {\n max-width: 100%;\n }\n }\n\n html {\n font-size: normal;\n }\n}\n", - "// Masthead\n//\n// Super small header above the content for site name and short description.\n\n.masthead {\n margin-bottom: 3rem;\n padding-bottom: 1rem;\n padding-top: 1rem;\n}\n\n.masthead-title {\n color: $gray-5;\n margin-bottom: 0;\n margin-top: 0;\n\n a {\n color: inherit;\n }\n\n small {\n font-size: 75%;\n font-weight: 400;\n opacity: 0.5;\n }\n}\n", - "// Posts and pages\n//\n// Each post is wrapped in `.post` and is used on default and post layouts. Each\n// page is wrapped in `.page` and is only used on the page layout.\n\n.posts-by-tag h2 {\n text-transform: capitalize;\n}\n\n// Blog post or page title\n.page-title,\n.post-title {\n margin-top: 0;\n}\n\n.page-title,\n.post-title,\n.post-title a {\n color: $heading-color;\n}\n\nh2.post-title,\nh2.page-title {\n font-size: 2rem;\n}\n\n.post-tags a {\n font-size: 0.8em;\n margin-right: 0.5rem;\n opacity: 0.75;\n white-space: nowrap;\n\n .tag-name { text-transform: capitalize; }\n\n &:hover {\n opacity: 1;\n text-decoration: none;\n }\n}\n\n.posts-list {\n list-style: none;\n padding-left: 0;\n\n h3 {\n margin-top: 0;\n }\n\n li small {\n color: #999;\n font-size: 75%;\n white-space: nowrap;\n }\n\n li a:hover {\n color: $link-color;\n text-decoration: none;\n }\n\n li a:hover small {\n color: inherit;\n }\n}\n\narticle + *,\n.post-body ~ section {\n border-top: 1px solid $border-color;\n margin-top: $section-spacing;\n padding-top: $section-spacing;\n\n > h2:first-child,\n > h3:first-child {\n margin-top: 0;\n }\n}\n\n// Meta data line below post title\n.post-meta {\n color: $body-muted;\n margin-bottom: 1rem;\n margin-top: -0.5rem;\n}\n\n.post,\n.page {\n .content li + li {\n margin-top: 0.25rem;\n }\n}\n\nbutton.disqus-load {\n margin-top: 1em;\n}\n", - "/*\n Pagination\n\n Super lightweight (HTML-wise) blog pagination. Should only be visible\n when there is navigation available -- single buttons at top or bottom\n of each page.\n*/\n\n.pagination {\n color: $gray-3;\n margin-bottom: $section-spacing;\n text-align: center;\n\n > a {\n background: $body-bg;\n border: solid $border-color;\n border-radius: $border-radius;\n border-width: 1px;\n box-shadow: $default-box-shadow;\n display: inline-block;\n max-width: $sidebar-width;\n padding: $padding-v $padding-h;\n width: 60%;\n }\n\n > a:hover {\n background-color: $border-color;\n }\n}\n\n// Bottom -> margin-top;\n* + .pagination {\n margin-top: $section-spacing;\n}\n\n// Push above header if newer on mobile\n.content .pagination:first-child {\n margin-top: -$section-spacing * 2;\n}\n\n// Make room for larger header by extending margin below title\n.index #sidebar {\n padding-bottom: calc(#{$section-spacing} + #{$padding-v});\n}\n\n// But not on page1\n.home.index #sidebar {\n padding-bottom: $section-spacing;\n}\n\n// Undo for larger screens\n@media (min-width: $large-breakpoint) {\n .pagination > a {\n box-shadow: none;\n\n &:hover { box-shadow: $default-box-shadow; }\n }\n\n .content .pagination:first-child {\n margin-top: 0;\n\n + * {\n border-top: 1px solid $border-color;\n margin-top: $section-spacing;\n padding-top: $section-spacing;\n }\n }\n\n .index #sidebar {\n padding-bottom: $section-spacing;\n }\n}\n", - "// Messages\n//\n// Show alert messages to users. You may add it to single elements like a `

`,\n// or to a parent if there are multiple elements to show.\n\n.message {\n background-color: #f9f9f9;\n color: #717171;\n margin-bottom: 1rem;\n padding: 1rem;\n}\n", - ".search-row {\n border: 1px solid $border-color;\n border-radius: $border-radius;\n display: flex;\n padding: 2px;\n\n input {\n border: 0;\n }\n\n input + input { margin-left: 2px; }\n\n input[type='text'],\n input[type='search'] {\n flex-grow: 1;\n }\n}\n", - ".tags-list a {\n margin-right: 0.5em;\n opacity: 0.75;\n white-space: nowrap;\n}\n\n.tags-list a .tag-count {\n background: $link-color;\n border-radius: 1000px;\n color: rgba(255, 255, 255, 0.8);\n font-size: 0.75em;\n margin-left: 0.25em;\n padding-left: 0.6em;\n padding-right: 0.6em;\n}\n\n.tags-list a:hover {\n opacity: 1;\n text-decoration: none;\n}\n\n@keyframes posts-for-tag-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n// Display only if targeted\n.posts-for-tag {\n display: none;\n\n &:target {\n animation: posts-for-tag-fade-in 0.6s ease-in-out;\n display: block;\n }\n}\n", - ".back-link {\n font-size: 80%;\n a {\n color: currentColor;\n\t svg {\n fill: currentColor;\n }\n }\n}\n\n" - ], - "names": [], - "mappings": "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" -} \ No newline at end of file diff --git a/4.2.4/assets/icons/icons.eot b/4.2.4/assets/icons/icons.eot deleted file mode 100644 index fe0b204..0000000 Binary files a/4.2.4/assets/icons/icons.eot and /dev/null differ diff --git a/4.2.4/assets/icons/icons.svg b/4.2.4/assets/icons/icons.svg deleted file mode 100644 index 026a986..0000000 --- a/4.2.4/assets/icons/icons.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/4.2.4/assets/icons/icons.ttf b/4.2.4/assets/icons/icons.ttf deleted file mode 100644 index 3bd9a71..0000000 Binary files a/4.2.4/assets/icons/icons.ttf and /dev/null differ diff --git a/4.2.4/assets/icons/icons.woff b/4.2.4/assets/icons/icons.woff deleted file mode 100644 index 6cdf6ea..0000000 Binary files a/4.2.4/assets/icons/icons.woff and /dev/null differ diff --git a/4.2.4/contributing.md b/4.2.4/contributing.md deleted file mode 100644 index 1fa955c..0000000 --- a/4.2.4/contributing.md +++ /dev/null @@ -1,13 +0,0 @@ -Contributions are welcome! - -[https://github.com/Illumina/dragen-azure-quickstart](https://github.com/Illumina/dragen-azure-quickstart) - -As the documentation within the above repository is not directly managed through the repository, please do not submit pull requests. - -### How to contribute - -When you have an idea for contribution, or want to report a bug or issue, please open an [*issue*](https://github.com/Illumina/dragen-azure-quickstart/issues)! - -### Feedback - -Please open a [*issue*](https://github.com/Illumina/dragen-azure-quickstart/issues) if you would like to provide any feedback on the contents of this repository. diff --git a/4.2.4/create-batch-task.sh b/4.2.4/create-batch-task.sh deleted file mode 100755 index 21f1d01..0000000 --- a/4.2.4/create-batch-task.sh +++ /dev/null @@ -1,161 +0,0 @@ -#!/bin/bash - -set -e - -# A DRAGEN license is required, and should be set as an environment variable -: "${LICENSE_URL?}" - -# The resource group created by the ARM template that holds the batch account -RESOURCE_GROUP="" -# The name of the batch account created by the ARM template -BATCH_ACCOUNT_NAME="" -# A unique id to assign to the batch job. -JOB_ID="" -# The pool id of the batch bool created by the ARM template. -POOL_ID="" -# The name of the storage account the outputFiles will be placed in. -# This can be the storage account created by the ARM template. -BATCH_SA="" -# The name of the container under the storage account to place the outputFiles in. -BATCH_C="" -# Set a short window for an expiration date for the SAS token to -# access the storage container. Example: 2018-01-01T00:00:00Z -SAS_EXPIRATION="" - -# Genomic hash-table tarball -GENOME_URL="https://webdata.illumina.com/downloads/software/dragen/references/genome-files/hg38-alt_masked.cnv.graph.hla.rna-9-r3.0-1.tar.gz" -# FastQ Sample 1 -FASTQ_1="https://ilmn-dragen-giab-samples.s3.amazonaws.com/WGS/precisionFDA_v2_HG002/HG002.novaseq.pcr-free.35x.R1.fastq.gz" -# FastQ Sample 2 -FASTQ_2="https://ilmn-dragen-giab-samples.s3.amazonaws.com/WGS/precisionFDA_v2_HG002/HG002.novaseq.pcr-free.35x.R2.fastq.gz" -# Associated RGSM -RGSM="NA24385-AJ-Son-R1-NS_S33" -# A unique id to assign to the batch task. -TASK_ID="" - -REF_DIR="dragen" -OUT_DIR="output" - -# Set command to run on batch node -COMMAND=$(cat < task.json -{ - "id": "$TASK_ID", - "commandLine": "$COMMAND", - "resourceFiles": [{ - "filePath": "dragen.tar", - "httpUrl": "$GENOME_URL" - }, { - "filePath": "fq1.gz", - "httpUrl": "$FASTQ_1" - }, { - "filePath": "fq2.gz", - "httpUrl": "$FASTQ_2" - }], - "outputFiles": [{ - "filePattern": "../stdout.txt", - "destination": { - "container": { - "containerUrl": "$CONTAINER_URL", - "path": "$TASK_ID/stdout.txt" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } - }, { - "filePattern": "../stderr.txt", - "destination": { - "container": { - "containerUrl": "$CONTAINER_URL", - "path": "$TASK_ID/stderr.txt" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } - }, { - "filePattern": "$OUT_DIR/**/*", - "destination": { - "container": { - "containerUrl": "$CONTAINER_URL", - "path": "$TASK_ID/$OUT_DIR" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } - }, { - "filePattern": "/var/log/dragen.log", - "destination": { - "container": { - "containerUrl": "$CONTAINER_URL", - "path": "$TASK_ID/log/dragen.log" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } - }, { - "filePattern": "/var/log/dragen/**/*", - "destination": { - "container": { - "containerUrl": "$CONTAINER_URL", - "path": "$TASK_ID/log/dragen" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } - }] -} -EOF -) - -# Create a task within the job. Set environment variables, command, and resource -# files to be used. -az batch task create \ - --job-id $JOB_ID \ - --json-file task.json diff --git a/4.2.4/deployment-configurations.md b/4.2.4/deployment-configurations.md deleted file mode 100644 index 286433d..0000000 --- a/4.2.4/deployment-configurations.md +++ /dev/null @@ -1,106 +0,0 @@ -### Advanced Usage: ARM Template - -Incorporating DRAGEN on Azure into an existing solution may be as easy as using the [ARM template](mainTemplate.json) that is exported alongside this documentation. - -#### Usage Scenarios - -Deployment using the ARM template enables several more advanced scenarios, such as: - -* Incorporation of infrastructure components needed for DRAGEN into an existing infrastructure -* Automated deployments via CI/CD pipelines -* Customization of the deployment to meet your needs - -#### Prerequisites for ARM Template Deployment - -Before attempting to deploy to your subscription via the ARM template, ensure that you have completed all of the [prerequisites](#prerequisites) for running DRAGEN on Azure. - -#### Parameters - -The ARM template takes the following input parameters: - -##### Required parameters (no default value set) - -| Parameter Name | Description | -| -------------- | ----------- | -| `prefix` | Prefix for resource names (1-17 alphanumeric characters) | -| `azureBatchServiceOid` | Object ID for Azure Batch on the user's tenant (Can be found by running the command `az ad sp show --id ddbf3205-c6bd-46ae-8127-60eb93363864 --query objectId`) | - -##### Optional parameters (default values are set but can be overridden) - -| Parameter Name | Default Value | Description | -| -------------- | ------------- | ----------- | -| `location` | Resource group location | Azure Region where resources should be deployed | -| `storageAccountName` | `prefix` + "storage" | Name for Azure Blob Storage account (Total of 3-24 alphanumeric characters including prefix) | -| `storageSku` | Standard_LRS* | [Azure Storage SKU](https://docs.microsoft.com/en-us/rest/api/storagerp/srp_sku_types) | -| `storageNewOrExisting` | new | Specify whether to use an existing storage account or create a new one (Allowed values: `new` or `existing`) | -| `offerSku` | dragen-4-2 | SKU for the DRAGEN offer in the Marketplace | -| `vmImageVersion` | 4.2.4 | DRAGEN version | - -***NOTE:** The "Premium" type SKUs are not currently supported by this offering. - -#### Sample ARM Template Deployment - -The following sample deploys the ARM template into a resource group using the Azure CLI [deployment group create](https://docs.microsoft.com/en-us/cli/azure/deployment/group?view=azure-cli-latest#az_deployment_group_create) command: - -```sh -# Set variables for command inputs -RESOURCE_GROUP_NAME="dragen-rg" -LOCATION="EastUS" -PREFIX="dragen" -BATCH_OID= - -# Create a resource group -az group create -n "$RESOURCE_GROUP_NAME" -l "$LOCATION" - -# Deploy the ARM template -az deployment group create \ - -g "$RESOURCE_GROUP_NAME" \ - -p prefix="$PREFIX" \ - -p azureBatchServiceOid="$BATCH_OID" \ - -f mainTemplate.json \ - --query "properties.outputs" -``` - -#### Using a New vs. Existing Storage Account - -By default, the ARM template included with this quickstart creates a new storage account and container. Some users may already have data uploaded to an existing Azure Blob Storage account. To use existing storage, specify the following input parameters to the ARM template in your deployment: - -* `storageNewOrExisting: existing` -* `storageAccountName: ` - -### Batch Job & Task Timeout - -It is possible to set a max run time on either the batch job or batch task. - -The below command will terminate the batch job as well as all tasks within -it after the job has been present for 360 minutes. - -* JOB_ID: The job id of the already created job. -* PT360M: An ISO-8601 duration, PT360M = 360 minutes. - -```sh -az batch job set \ - --job-id $JOB_ID \ - --on-all-tasks-complete "terminatejob" \ - --job-max-wall-clock-time "PT360M" -``` - -If you would like to set a max run time on the batch task instead, you can add -the following section to the task.json: - -```json -"constraints": { - "maxWallClockTime": "PT360M" -} -``` - -### Other Deployment Considerations - -After deploying DRAGEN on Azure, users will want to take into account the following additional deployment considerations and options, which are *not* included as part of this quickstart template: - -* Compliance -* Authentication -* Security -* Monitoring and Observability - -Decisions regarding implementation of any of the above are left to the end user's discretion. diff --git a/4.2.4/deployment-steps.md b/4.2.4/deployment-steps.md deleted file mode 100644 index af27bf9..0000000 --- a/4.2.4/deployment-steps.md +++ /dev/null @@ -1,26 +0,0 @@ -### Login to your Azure Portal account - -1. Log in to your Azure account in the [Azure Portal](https://portal.azure.com). -1. Ensure you have Quota for NP-series Virtual Machines, as outlined in the - pre-requisites section above, by navigating to: - - * Subscriptions -> Choose your subscription - * Click **Usages + quotas** from the left-side menu - * Filter the list by typing **NP** into the left search bar. - * You should see `Standard NPS Family vCPUs`, and a denomination. If you see - `0 of 0`, click the edit icon to request quota. - -### Deploy the Quickstart (solution template) - -1. While signed in to your Azure account, open the page for the DRAGEN Solution: - 1. Navigate to the [Marketplace](https://ms.portal.azure.com/#blade/Microsoft_Azure_Marketplace/GalleryMenuBlade/selectedMenuItemId/home) - 1. Search for "DRAGEN" and select DRAGEN Bio-IT Platform for Genomic Data Analysis on Azure Batch -1. If prompted, review the terms and conditions and then choose **Accept Terms** -1. Click **Create** -1. You'll be prompted to select a resource group and other particulars of the solution to deploy - - **NOTE:** For storage settings, the "Premium" type SKUs are not currently supported by this offering -1. Once you've made your selections, click **Review + Create** - at the bottom of the screen and click **Create** -1. You can check deployment status in the top right of the Azure Portal page - ![deployment-status](./images/deployment-status.png) diff --git a/4.2.4/deployment-test.md b/4.2.4/deployment-test.md deleted file mode 100644 index db2d45a..0000000 --- a/4.2.4/deployment-test.md +++ /dev/null @@ -1,624 +0,0 @@ -Once your batch account infrastructure has been created, the following guide -can be used to create batch jobs and tasks. This guide makes use of the -Azure CLI. - -### Azure CLI Authentication - -The first step is to make sure you are -[authenticated](https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli) -through [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli), -and using the subscription in which your batch account has been provisioned. - -### Batch Account Login - -You will need to authenticate with the provisioned batch account in order to -create jobs and tasks. - -```sh -az batch account login -n -g -``` - -### Create Batch Job - -Once authenticated, the next step is to create a batch job using the following variables: - -* JOB_ID: A unique id to assign to the job being created. -* POOL_ID: The name of the pool created with the provided ARM template. - -```sh -az batch job create --id --pool-id -``` - -### Create Batch Task - -Once the batch job has been created, a task can be added to it. This can be done using the JOB_ID and -a task.json specification file: - -* JOB_ID: The same job id used when creating the batch job. -* JSON_FILE: A file that defines a task in JSON format. - -#### Batch Command - -The command passed to the batch task is what will run once the batch task -starts. The following is an example that will run a series of commands -using bash. - -This example takes advantage of bash to execute commands, as well as make sure that -[environment variables](https://docs.microsoft.com/en-us/azure/batch/batch-compute-node-environment-variables#environment-variable-visibility) -are available. The following are example environment variables and bash command: - -* REF_DIR: The directory to untar the genome hash table to. -* OUT_DIR: The directory to write the DRAGEN results to. -* FQ1: The path to the first local FASTQ file on the node. -* FQ2: The path to the second local FASTQ file on the node. -* RGID: The RGID associated with this DRAGEN run. -* RGSM: THE RGSM associated with this DRAGEN run. -* OUTPUT_PREFIX: The prefix that will be used for the DRAGEN output files. -* LICENSE: The DRAGEN license. - -```bash -/bin/bash -c \ -"mkdir ; \ -tar xvf dragen.tar -C ; \ -/opt/edico/bin/dragen --partial-reconfig HMM --ignore-version-check true; \ -/opt/edico/bin/dragen -f -r \ - -1 \ - -2 \ - --RGID \ - --RGSM \ - --enable-bam-indexing true \ - --enable-map-align-output true \ - --enable-sort true \ - --output-file-prefix \ - --enable-map-align true \ - --output-format BAM \ - --output-directory \ - --enable-variant-caller true \ - --lic-server " -``` - -#### SAS - -The following example will generate a full URL with SAS token to access a -file in a private blob storage account. This is useful when wanting to -obtain read access to a specific file in a protected storage account. - -* BLOB_PATH: The path to the file within the container. -* STORAGE_ACCOUNT: The name of the blob storage account. -* STORAGE_ACCOUNT_KEY: An access key to the storage account. -* EXPIRE_DATE: The datetime when the SAS token should expire. - -```sh -az storage blob generate-sas \ - --name \ - --account-name \ - --account-key \ - --container-name \ - --expiry \ - --permissions r \ - --https \ - --full-uri \ - --output tsv -``` - -If obtaining write access to a container within a storage account is -necessary, a slightly different command can be used. - -```sh -az storage container generate-sas \ - --name \ - --account-name \ - --expiry \ - --permissions aclrw \ - --https-only \ - --output tsv -``` - -In this case, the SAS token returned by the command will need to be -appended to the container URL, for example: - -```sh -CONTAINER_URL="https://.blob.core.windows.net/?" -``` - -* [SAS CLI Reference](https://docs.microsoft.com/en-us/cli/azure/storage/blob?view=azure-cli-latest#az_storage_blob_generate_sas) - -#### Resource Files - -In this example, both the genome file and the FASTQ files need to be on the -batch node when running the batch command. This script takes advantage of the -`resourceFiles` configuration to facilitate this. - -If the genome tarball and FASTQ files are in a private blob storage account, a -[SAS token](#sas) will need to be generated to allow batch to download the file. - -```json -"resourceFiles": [{ - "filePath": "dragen.tar", - "httpUrl": "$GENOME_URL" -}, { - "filePath": "1.fq.gz", - "httpUrl": "$FQ1_URL" -}, { - "filePath": "2.fq.gz", - "httpUrl": "$FQ2_URL" -}] -``` - -* [Resource Files Reference](https://docs.microsoft.com/en-us/azure/batch/resource-files#single-resource-file-from-web-endpoint) - -#### Output Files - -Output files configuration tells batch tasks to write certain files to external -locations, triggered by certain events. We will use this feature in this example -to get various logs and DRAGEN output out to our storage container at the end -of the run. - -* CONTAINER_URL: The container url generated above with the SAS token appended to it. -* TASK_ID: A task id, used in this case to organize the output. -* OUT_DIR: The directory the DRAGEN results were written to. - -```json -"outputFiles": [{ - "filePattern": "../stdout.txt", - "destination": { - "container": { - "containerUrl": "", - "path": "/stdout.txt" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } -}, { - "filePattern": "../stderr.txt", - "destination": { - "container": { - "containerUrl": "", - "path": "/stderr.txt" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } -}, { - "filePattern": "/**/*", - "destination": { - "container": { - "containerUrl": "", - "path": "/" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } -}, { - "filePattern": "/var/log/dragen.log", - "destination": { - "container": { - "containerUrl": "", - "path": "/log/dragen.log" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } -}, { - "filePattern": "/var/log/dragen/**/*", - "destination": { - "container": { - "containerUrl": "", - "path": "/log/dragen" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } -}] -``` - -#### task.json - -The overall structure of the task.json will look like the following, -with each of the sections described in detail above. - -```json -{ - "id": "", - "commandLine": "", - "resourcesFiles": [], - "outputFiles": [] -} -``` - -#### Create Task - -With the command generated to run within the task, and accessible URLs -generated for the genome tarball and FASTQ files, the following command -can be used to create the batch task: - -The following URLs must either be public, or private but made accessible -(for example, with a SAS token): - -* GENOME_URL: URL of a genome tarball. -* FQ1_URL: URL of the first FASTQ file. -* FQ2_URL: URL of the second FASTQ file. - -```sh -az batch task create \ - --job-id \ - --json-file task.json -``` - -* [Batch task create CLI reference](https://docs.microsoft.com/en-us/cli/azure/batch/task?view=azure-cli-latest#az_batch_task_create) - -#### Working Example - -##### Batch Job Create - -```sh -az batch job create --id job1 --pool-id mypool -``` - -##### Create `$COMMAND` - -The following command line string is assigned to the `$COMMAND` variable. - -##### `$COMMAND` Variable - -```bash -COMMAND=$(cat <" - -EOF -) -``` - -This one-liner achieves the following: - -1. Sets up Genome and Output directories -1. Unarchives the genome file -1. Runs a partial reconfig on the FPGA -1. Runs DRAGEN - -The `$COMMAND` variable is now interpolated in the `task.json` file below. - -##### Create task.json - -```json -{ - "id": "task1", - "commandLine": "$COMMAND", - "resourceFiles": [{ - "filePath": "dragen.tar", - "httpUrl": "https://dragentestdata.blob.core.windows.net/reference-genomes/Hsapiens/hash-tables/hg38-alt_masked.cnv.graph.hla.rna-9-r3.0-1.tar" - }, { - "filePath": "1.fq.gz", - "httpUrl": "https://dragentestdata.blob.core.windows.net/samples/wes/NA24385-AJ-Son-R1-NS_S33/NA24385-AJ-Son-R1-NS_S33_L001_R1_001.fastq.gz" - }, { - "filePath": "2.fq.gz", - "httpUrl": "https://dragentestdata.blob.core.windows.net/samples/wes/NA24385-AJ-Son-R1-NS_S33/NA24385-AJ-Son-R1-NS_S33_L001_R2_001.fastq.gz" - }], - "outputFiles": [{ - "filePattern": "../stdout.txt", - "destination": { - "container": { - "containerUrl": "$CONTAINER_URL", - "path": "task1/stdout.txt" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } - }, { - "filePattern": "../stderr.txt", - "destination": { - "container": { - "containerUrl": "$CONTAINER_URL", - "path": "task1/stderr.txt" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } - }, { - "filePattern": "output/**/*", - "destination": { - "container": { - "containerUrl": "$CONTAINER_URL", - "path": "task1/output" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } - }, { - "filePattern": "/var/log/dragen.log", - "destination": { - "container": { - "containerUrl": "$CONTAINER_URL", - "path": "task1/log/dragen.log" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } - }, { - "filePattern": "/var/log/dragen/**/*", - "destination": { - "container": { - "containerUrl": "", - "path": "task1/log/dragen" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } - }] -} -``` - -##### Batch Task Create - -```sh -az batch task create \ - --job-id job1 \ - --json-file task.json -``` - -#### File Streaming - -While it is always necessary to have the genome file saved locally on the node, DRAGEN can stream input FASTQ files and -BAMs from private Azure Blob containers for faster processing. DRAGEN does not currently support streaming from public -Blob containers. - -Blob storage authentication has been improved with DRAGEN v3.10. Credential management is now controlled via environment -variables used in the Azure SDK, allowing support for Azure SAS streaming and BLOB identity-based credential management. -Support for Azure managed identity authentication was introduced with v3.10. - -Starting with DRAGEN v3.10, the need for and use of the "~/.azure-credentials" file for input streaming has been -deprecated. New environment variables were introduced for input streaming. Environment variables remove the -need for file parsing logic. Using access keys will improve security since the key will only live in memory. - -DRAGEN v3.10 supports two cases for Azure authentication: - -* Storage account access keys -* Managed identities - -When using storage account access keys for authentication, DRAGEN can read from Azure Blob storage regardless of whether -it is run on or off Azure. To use this method of authentication, "AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME" and -"AZ_ACCOUNT_KEY=$STORAGE_ACCOUNT_KEY" environment variables must precede the DRAGEN invocation on the command line, -e.g.: - -```sh -sudo AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME AZ_ACCOUNT_KEY=$STORAGE_ACCOUNT_KEY \ -/opt/edico/bin/dragen -f -r $ref \ --1 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R1_001.fastq.gz' \ --2 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R2_001.fastq.gz' \ -... -``` - -Authentication with -[managed identities](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview#managed-identity-types) -is only available to DRAGEN when run on Azure. The DRAGEN VMs must have Contributor permissions (read/write) to the -Storage Account that it wants to read from using managed identities authentication. In order to grant these permissions -to a VM, a managed identity is needed. System-assigned managed identities can be assigned during creation of a VM or to -existing VMs using either the -[Azure Portal](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vm#system-assigned-managed-identity) -or [Azure CLI](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/qs-configure-cli-windows-vm#system-assigned-managed-identity). -User-assigned managed identities can also be assigned during creation of a VM if the -[Azure CLI](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/qs-configure-cli-windows-vm#user-assigned-managed-identity) -is used for creation. However, user-assigned managed identities cannot be assigned at time of creation to VMs that are -created using the portal. Assignment of user-assigned managed identities to portal-created VMs can only be performed -after creation of the VM. In this case, the user-assigned managed identity must first be created using the -[portal](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities?pivots=identity-mi-methods-azp#create-a-user-assigned-managed-identity) -or [CLI](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities?pivots=identity-mi-methods-azcli#create-a-user-assigned-managed-identity-1) -before being assigned to an existing VM, which can also be performed either with the -[portal](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vm#assign-a-user-assigned-managed-identity-to-an-existing-vm) -or [CLI.](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/qs-configure-cli-windows-vm#assign-a-user-assigned-managed-identity-to-an-existing-azure-vm) -After assigning a managed identity to a VM, it must be granted permission to a storage account using either the -[portal](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/howto-assign-access-portal) -or [CLI](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/howto-assign-access-cli). - -If a single managed identity exists on a VM, only the "AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME" environment -variable is required to stream inputs with DRAGEN. For VMs with multiple managed identities, the -"AZR_IDENT_CLIENT_ID=$IDENTITY_CLIENT_ID" environment variable with the client id of the managed identity that can access the -storage container must also be specified. To use managed identities authentication, these environment variables must -precede the DRAGEN invocation on the command line, e.g. (for a VM with multiple managed identities): - -```sh -sudo AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME AZR_IDENT_CLIENT_ID=$IDENTITY_CLIENT_ID \ -/opt/edico/bin/dragen -f -r $ref \ --1 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R1_001.fastq.gz' \ --2 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R2_001.fastq.gz' \ -... -``` - -##### Stream from Azure Blob Storage - -The following parameters are needed for streaming from Blob storage using storage account access keys: - -* STORAGE_ACCOUNT_NAME: The name of the blob storage account. -* STORAGE_ACCOUNT_KEY: An access key to the storage account. -* FQ1_URL: The full URL to the first FASTQ file in Azure Blob Storage. -* FQ2_URL: The full URL to the second FASTQ file in Azure Blob Storage. - -##### `$COMMAND` Variable for Streaming FASTQ Inputs with Storage Account Access Key - -The following is an example `$COMMAND` variable that streams FASTQ inputs from Blob storage using a storage account -access key: - -```bash -COMMAND=$(cat < \ -AZ_ACCOUNT_KEY= \ -/opt/edico/bin/dragen -f -r dragen \ - -1 \ - -2 \ - --RGID \ - --RGSM \ - --enable-bam-indexing true \ - --enable-map-align-output true \ - --enable-sort true \ - --output-file-prefix \ - --enable-map-align true \ - --output-format BAM \ - --output-directory output \ - --enable-variant-caller true \ - --lic-server " - -EOF -) -``` - -The following parameters are needed for streaming from Blob storage using Azure managed identities authentication: - -* STORAGE_ACCOUNT_NAME: The name of the blob storage account. -* IDENTITY_CLIENT_ID: The client id of the managed identity that can access the storage container. (Only required for -VMs with multiple managed identities.) -* FQ1_URL: The full URL to the first FASTQ file in Azure Blob Storage. -* FQ2_URL: The full URL to the second FASTQ file in Azure Blob Storage. - -##### `$COMMAND` Variable for Streaming FASTQ Inputs with Managed Identities - -The following is an example `$COMMAND` variable that streams FASTQ inputs from Blob storage using a VM with more than -one managed identities: - -```bash -COMMAND=$(cat < \ -AZR_IDENT_CLIENT_ID= \ -/opt/edico/bin/dragen -f -r dragen \ - -1 \ - -2 \ - --RGID \ - --RGSM \ - --enable-bam-indexing true \ - --enable-map-align-output true \ - --enable-sort true \ - --output-file-prefix \ - --enable-map-align true \ - --output-format BAM \ - --output-directory output \ - --enable-variant-caller true \ - --lic-server " - -EOF -) -``` - -The above examples achieve the same as the `$COMMAND` [before](#command-variable) with the addition of the -environment variables required for streaming inputs from Blob storage: AZ_ACCOUNT_NAME and AZ_ACCESS_KEY or -AZ_ACCOUNT_NAME and AZR_IDENT_CLIENT_ID. - -In these cases, the FASTQ files will no longer need to be referenced in the resourceFiles in the task.json - -##### FASTQ List - -If using a FASTQ list file to reference and stream FASTQ files, the FASTQ list file must -also be local to the node. The FASTQ files referenced in the FASTQ list can be in the form of URLs -to files on an Azure Storage Account, in which case, the FASTQs will be streamed by DRAGEN. - -The following is an example of streaming inputs with a FASTQ list using the -resourceFiles configuration as well as a SAS token to access the FASTQ list file in Azure Blob Storage. -This is stored as the [`$LIST_URL`](#list_url-for-input-streaming) variable. - -##### `$LIST_URL` for Input Streaming - -```bash -LIST_URL=$(az storage blob generate-sas \ - --name \ - --account-name \ - --account-key \ - --container-name \ - --expiry \ - --permissions r \ - --https \ - --full-uri \ - --output tsv) -``` - -In this example, the FASTQ files will be streamed from Azure Blob Storage using a storage account access key. Hence, we -will once again need the AZ_ACCOUNT_NAME and AZ_ACCESS_KEY environment variables in the $COMMAND Variable. If using -managed identities to stream the FASTQ files, use the AZ_ACCOUNT_NAME (for VMs with a single managed identity) or -AZ_ACCOUNT_NAME and AZR_IDENT_CLIENT_ID (for VMs with multiple managed identities), instead. - -##### `$COMMAND` Variable for Input Streaming with FASTQ List and Storage Account Access Key - -```bash -COMMAND=$(cat < \ -AZ_ACCOUNT_KEY= \ -/opt/edico/bin/dragen -f -r dragen \ - --fastq-list fastq_list.csv \ - --fastq-list-sample-id \ - --enable-bam-indexing true \ - --enable-map-align-output true \ - --enable-sort true \ - --output-file-prefix \ - --enable-map-align true \ - --output-format BAM \ - --output-directory output \ - --enable-variant-caller true \ - --lic-server " - -EOF -) -``` - -##### task.json resourceFiles for FASTQ List Input - -```json -"resourceFiles": [{ - "filePath": "dragen.tar", - "httpUrl": "$GENOME_URL" -}, { - "filePath": "fastq_list.csv", - "httpUrl": "$LIST_URL" -}] -``` - -##### Example Bash Script - -An [example bash script](./create-batch-task.sh) using some of the commands shown above is available for reference. -There is a required `LICENSE_URL` environment variable, as well as some variables within the script -that must be set before running it, ie: - -```sh -LICENSE_URL=https://:@license.edicogenome.com ./create-batch-task.sh -``` - -There are accompanying comments within the bash script to help set these. diff --git a/4.2.4/feed.xml b/4.2.4/feed.xml deleted file mode 100644 index 639602e..0000000 --- a/4.2.4/feed.xml +++ /dev/null @@ -1 +0,0 @@ -Jekyll2023-09-14T21:34:10+00:00/feed.xmlDRAGEN on AzureQuickstart \ No newline at end of file diff --git a/4.2.4/images/batch-task-file-list.png b/4.2.4/images/batch-task-file-list.png deleted file mode 100644 index d9c2d37..0000000 Binary files a/4.2.4/images/batch-task-file-list.png and /dev/null differ diff --git a/4.2.4/images/deployment-status.png b/4.2.4/images/deployment-status.png deleted file mode 100644 index 54e3e59..0000000 Binary files a/4.2.4/images/deployment-status.png and /dev/null differ diff --git a/4.2.4/images/dragen-on-azure.drawio b/4.2.4/images/dragen-on-azure.drawio deleted file mode 100644 index e016568..0000000 --- a/4.2.4/images/dragen-on-azure.drawio +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/4.2.4/images/dragen-on-azure.png b/4.2.4/images/dragen-on-azure.png deleted file mode 100644 index 1b50db8..0000000 Binary files a/4.2.4/images/dragen-on-azure.png and /dev/null differ diff --git a/4.2.4/index.html b/4.2.4/index.html deleted file mode 100644 index b069dbc..0000000 --- a/4.2.4/index.html +++ /dev/null @@ -1,1374 +0,0 @@ - - - - - - - - - - - - - - Illumina DRAGEN on Azure · DRAGEN on Azure - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - -
- -
-
- -
-
- -

Introduction

- -

This Quick Start guide provides instructions and resources to guide users through deploying Dynamic Read Analysis for GENomics (DRAGEN) on Azure. It is primarily intended for users who are interested in a quick and easy setup for running genomics workloads in the cloud.

- -

This tutorial and its associated Marketplace solution in Azure were developed by Illumina in collaboration with Microsoft. The reference deployment described below serves as a starting point, but can be further customized to meet your needs.

- -

If you run into any issues while going through the tutorial, please share your feedback with us!

- - - -


- -

Architecture

- -

Supported Regions

- -

DRAGEN on Azure is available in regions where FPGA-enabled Standard NP Family VMs are available. At the time of this writing, supported regions currently include:

- - - -

For the most current information on available regions, see the NP-series row of the chart here.

- -

Architecture Diagram

- -

architecture-diagram

- -

Resource List

- -

List of Azure resources that are deployed by this quickstart if default settings and parameters are used:

- - - -

Note on Batch Node Pool Allocation

- -

Batch offers two options for allocation of node pools: Batch managed and user subscription modes. A single Batch Account can only support one node pool type at a time, meaning you cannot have batch managed and user subscription mode node pools under the same batch account.

- -

Batch Managed Node Pools

- -

When Batch Managed allocation mode is selected, users must request NP VM quota for each specific Batch instance they create. Nodes are allocated as needed from Batch-managed subscriptions. This scenario works best when users intend to persist and use one or very few Batch instances for their DRAGEN jobs. It is less ideal in situations where the creation/deletion of Batch accounts is automated or occurs frequently, as with CI/CD.

- -

User Subscription Node Pools

- -

When the User Subscription allocation mode is selected, users request an overall quota for NP VMs for a region within their subscription. With this model, the VMs needed for the Batch account are created directly in the user’s subscription. This setup is useful for CI/CD and other cases where users are running DRAGEN across many Batch accounts within a subscription and/or the Batch accounts are short-lived.

- -

Cost Differences in Node Pool Allocation Modes

- -

There may be cost differences between the two different node pool allocation methods. Consider your usage scenarios and consult Azure documentation and pricing calculators to determine which approach will be most optimal for your needs.

- -

Azure Costs

- -

Users are responsible for costs of any services deployed through this quickstart or its customization options.

- -

Prices are subject to change - more information can be found on the pricing pages for Azure resources deployed through this tutorial:

- - - -

Users are also responsible for costs of any licenses needed to run DRAGEN (not included in this quickstart - must be obtained separately).

- -

Estimate your Costs

- -

For help in estimating your costs to run DRAGEN on Azure, see the pricing calculator located here.

- -


- -

Prerequisites

- - - -

Technical Requirements

- - - -

Quota Requirements

- -

DRAGEN runs on a specific Virtual Machine SKU family in Azure, because it requires -field-programmable gate array (FPGA) hardware. Due to this requirement, you -will need to request access to this Virtual Machine SKU family, as described below.

- -

NP-Series VMs

- -

DRAGEN runs on FPGA-enabled VMs, which are now generally available as the NP-series on Azure.

- -
-

Currently, the vCPU requirements for NP-series SKUs are in increments of 10. When requesting an updated quota, we recommend requesting vCPUs in batches of 10. You will need a minimum increase of 10 vCPU Quota for NP-series machines for this tutorial.

-
- -

For steps to increase or verify your NP-series vCPU quota on Azure, follow this deployment step.

- -

Batch Accounts

- -

This quickstart will utilize Azure Batch as the computing environment for DRAGEN, in user subscription mode.

- -

It is also possible to run Azure Batch in Batch service allocation mode. In Batch service allocation mode, compute nodes are subject to a separate quota. For DRAGEN, in Batch service allocation mode, you will need to request additional quota for NP-series vCPUs for your discrete Azure Batch account. Current default quotas for Batch accounts can be found here. You can increase your Azure Batch account quota by following the steps here.

- -

Required Permissions (Authorization / Access Controls)

- -

To provision this solution, the Active Directory principal (account, service principal, etc.) should require at least Azure subscription-wide contributor access.

- -

If your organization is concerned about this level of access, a deployment pipeline (e.g., GitHub Actions) running as a managed service principal with contributor access can allow others to have a more restricted privilege level (e.g., Resource Group Contributor, Subscription Reader).

- -

When utilizing a User Subscription Mode Batch Account, the Azure Batch Service must be added to the Azure Subscription as a Contributor. To add this level of access, you must be at least a Subscription Contributor. For more information, see additional configuration for user subscription mode.

- -


- -

Deployment

- -

Steps

- -

Login to your Azure Portal account

- -
    -
  1. Log in to your Azure account in the Azure Portal.
  2. -
  3. -

    Ensure you have Quota for NP-series Virtual Machines, as outlined in the -pre-requisites section above, by navigating to:

    - -
      -
    • Subscriptions -> Choose your subscription
    • -
    • Click Usages + quotas from the left-side menu
    • -
    • Filter the list by typing NP into the left search bar. -
        -
      • You should see Standard NPS Family vCPUs, and a denomination. If you see -0 of 0, click the edit icon to request quota.
      • -
      -
    • -
    -
  4. -
- -

Deploy the Quickstart (solution template)

- -
    -
  1. While signed in to your Azure account, open the page for the DRAGEN Solution: -
      -
    1. Navigate to the Marketplace
    2. -
    3. Search for “DRAGEN” and select DRAGEN Bio-IT Platform for Genomic Data Analysis on Azure Batch
    4. -
    -
  2. -
  3. If prompted, review the terms and conditions and then choose Accept Terms
  4. -
  5. Click Create
  6. -
  7. -

    You’ll be prompted to select a resource group and other particulars of the solution to deploy

    - -

    NOTE: For storage settings, the “Premium” type SKUs are not currently supported by this offering

    -
  8. -
  9. Once you’ve made your selections, click Review + Create -at the bottom of the screen and click Create
  10. -
  11. You can check deployment status in the top right of the Azure Portal page -deployment-status
  12. -
- -


- -

Additional Configurations

- -

Advanced Usage: ARM Template

- -

Incorporating DRAGEN on Azure into an existing solution may be as easy as using the ARM template that is exported alongside this documentation.

- -

Usage Scenarios

- -

Deployment using the ARM template enables several more advanced scenarios, such as:

- - - -

Prerequisites for ARM Template Deployment

- -

Before attempting to deploy to your subscription via the ARM template, ensure that you have completed all of the prerequisites for running DRAGEN on Azure.

- -

Parameters

- -

The ARM template takes the following input parameters:

- -
Required parameters (no default value set)
- - - - - - - - - - - - - - - - - - -
Parameter NameDescription
prefixPrefix for resource names (1-17 alphanumeric characters)
azureBatchServiceOidObject ID for Azure Batch on the user’s tenant (Can be found by running the command az ad sp show --id ddbf3205-c6bd-46ae-8127-60eb93363864 --query objectId)
- -
Optional parameters (default values are set but can be overridden)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Parameter NameDefault ValueDescription
locationResource group locationAzure Region where resources should be deployed
storageAccountNameprefix + “storage”Name for Azure Blob Storage account (Total of 3-24 alphanumeric characters including prefix)
storageSkuStandard_LRS*Azure Storage SKU
storageNewOrExistingnewSpecify whether to use an existing storage account or create a new one (Allowed values: new or existing)
offerSkudragen-4-2SKU for the DRAGEN offer in the Marketplace
vmImageVersion4.2.4DRAGEN version
- -

*NOTE: The “Premium” type SKUs are not currently supported by this offering.

- -

Sample ARM Template Deployment

- -

The following sample deploys the ARM template into a resource group using the Azure CLI deployment group create command:

- -
# Set variables for command inputs
-RESOURCE_GROUP_NAME="dragen-rg"
-LOCATION="EastUS"
-PREFIX="dragen"
-BATCH_OID=<Batch Object Id for your tenant - see Parameters section>
-
-# Create a resource group
-az group create -n "$RESOURCE_GROUP_NAME" -l "$LOCATION"
-
-# Deploy the ARM template
-az deployment group create \
-    -g "$RESOURCE_GROUP_NAME" \
-    -p prefix="$PREFIX" \
-    -p azureBatchServiceOid="$BATCH_OID" \
-    -f mainTemplate.json \
-    --query "properties.outputs"
-
- -

Using a New vs. Existing Storage Account

- -

By default, the ARM template included with this quickstart creates a new storage account and container. Some users may already have data uploaded to an existing Azure Blob Storage account. To use existing storage, specify the following input parameters to the ARM template in your deployment:

- - - -

Batch Job & Task Timeout

- -

It is possible to set a max run time on either the batch job or batch task.

- -

The below command will terminate the batch job as well as all tasks within -it after the job has been present for 360 minutes.

- - - -
az batch job set \
-    --job-id $JOB_ID \
-    --on-all-tasks-complete "terminatejob" \
-    --job-max-wall-clock-time "PT360M"
-
- -

If you would like to set a max run time on the batch task instead, you can add -the following section to the task.json:

- -
"constraints": {
-    "maxWallClockTime": "PT360M"
-}
-
- -

Other Deployment Considerations

- -

After deploying DRAGEN on Azure, users will want to take into account the following additional deployment considerations and options, which are not included as part of this quickstart template:

- - - -

Decisions regarding implementation of any of the above are left to the end user’s discretion.

- -


- -

Testing using the Azure CLI

- -

Once your batch account infrastructure has been created, the following guide -can be used to create batch jobs and tasks. This guide makes use of the -Azure CLI.

- -

Azure CLI Authentication

- -

The first step is to make sure you are -authenticated -through Azure CLI, -and using the subscription in which your batch account has been provisioned.

- -

Batch Account Login

- -

You will need to authenticate with the provisioned batch account in order to -create jobs and tasks.

- -
az batch account login -n <batch account name> -g <resource group name>
-
- -

Create Batch Job

- -

Once authenticated, the next step is to create a batch job using the following variables:

- - - -
az batch job create --id <JOB_ID> --pool-id <POOL_ID>
-
- -

Create Batch Task

- -

Once the batch job has been created, a task can be added to it. This can be done using the JOB_ID and -a task.json specification file:

- - - -

Batch Command

- -

The command passed to the batch task is what will run once the batch task -starts. The following is an example that will run a series of commands -using bash.

- -

This example takes advantage of bash to execute commands, as well as make sure that -environment variables -are available. The following are example environment variables and bash command:

- - - -
/bin/bash -c \
-"mkdir <REF_DIR> <OUT_DIR>; \
-tar xvf dragen.tar -C <REF_DIR>; \
-/opt/edico/bin/dragen --partial-reconfig HMM --ignore-version-check true; \
-/opt/edico/bin/dragen -f -r <REF_DIR> \
-    -1 <FQ1> \
-    -2 <FQ2> \
-    --RGID <RGID> \
-    --RGSM <RGSM> \
-    --enable-bam-indexing true \
-    --enable-map-align-output true \
-    --enable-sort true \
-    --output-file-prefix <OUTPUT_PREFIX> \
-    --enable-map-align true \
-    --output-format BAM \
-    --output-directory <OUT_DIR> \
-    --enable-variant-caller true \
-    --lic-server <LICENSE>"
-
- -

SAS

- -

The following example will generate a full URL with SAS token to access a -file in a private blob storage account. This is useful when wanting to -obtain read access to a specific file in a protected storage account.

- - - -
az storage blob generate-sas \
-    --name <BLOB_PATH> \
-    --account-name <STORAGE_ACCOUNT> \
-    --account-key <STORAGE_ACCOUNT_KEY> \
-    --container-name <CONTAINER_NAME> \
-    --expiry <EXPIRE_DATE> \
-    --permissions r \
-    --https \
-    --full-uri \
-    --output tsv
-
- -

If obtaining write access to a container within a storage account is -necessary, a slightly different command can be used.

- -
az storage container generate-sas \
-    --name <CONTAINER_NAME> \
-    --account-name <STORAGE_ACCOUNT> \
-    --expiry <EXPIRE_DATE> \
-    --permissions aclrw \
-    --https-only \
-    --output tsv
-
- -

In this case, the SAS token returned by the command will need to be -appended to the container URL, for example:

- -
CONTAINER_URL="https://<STORAGE_ACCOUNT>.blob.core.windows.net/<CONTAINER>?<SAS_TOKEN>"
-
- - - -

Resource Files

- -

In this example, both the genome file and the FASTQ files need to be on the -batch node when running the batch command. This script takes advantage of the -resourceFiles configuration to facilitate this.

- -

If the genome tarball and FASTQ files are in a private blob storage account, a -SAS token will need to be generated to allow batch to download the file.

- -
"resourceFiles": [{
-    "filePath": "dragen.tar",
-    "httpUrl": "$GENOME_URL"
-}, {
-    "filePath": "1.fq.gz",
-    "httpUrl": "$FQ1_URL"
-}, {
-    "filePath": "2.fq.gz",
-    "httpUrl": "$FQ2_URL"
-}]
-
- - - -

Output Files

- -

Output files configuration tells batch tasks to write certain files to external -locations, triggered by certain events. We will use this feature in this example -to get various logs and DRAGEN output out to our storage container at the end -of the run.

- - - -
"outputFiles": [{
-    "filePattern": "../stdout.txt",
-    "destination": {
-        "container": {
-            "containerUrl": "<CONTAINER_URL>",
-            "path": "<TASK_ID>/stdout.txt"
-        }
-    },
-    "uploadOptions": {
-        "uploadCondition": "taskcompletion"
-    }
-}, {
-    "filePattern": "../stderr.txt",
-    "destination": {
-        "container": {
-            "containerUrl": "<CONTAINER_URL>",
-            "path": "<TASK_ID>/stderr.txt"
-        }
-    },
-    "uploadOptions": {
-        "uploadCondition": "taskcompletion"
-    }
-}, {
-    "filePattern": "<OUT_DIR>/**/*",
-    "destination": {
-        "container": {
-            "containerUrl": "<CONTAINER_URL>",
-            "path": "<TASK_ID>/<OUT_DIR>"
-        }
-    },
-    "uploadOptions": {
-        "uploadCondition": "taskcompletion"
-    }
-}, {
-    "filePattern": "/var/log/dragen.log",
-    "destination": {
-        "container": {
-            "containerUrl": "<CONTAINER_URL>",
-            "path": "<TASK_ID>/log/dragen.log"
-        }
-    },
-    "uploadOptions": {
-        "uploadCondition": "taskcompletion"
-    }
-}, {
-    "filePattern": "/var/log/dragen/**/*",
-    "destination": {
-        "container": {
-            "containerUrl": "<CONTAINER_URL>",
-            "path": "<TASK_ID>/log/dragen"
-        }
-    },
-    "uploadOptions": {
-        "uploadCondition": "taskcompletion"
-    }
-}]
-
- -

task.json

- -

The overall structure of the task.json will look like the following, -with each of the sections described in detail above.

- -
{
-    "id": "<TASK_ID>",
-    "commandLine": "<COMMAND>",
-    "resourcesFiles": [<RESOURCE_FILES>],
-    "outputFiles": [<OUTPUT_FILES>]
-}
-
- -

Create Task

- -

With the command generated to run within the task, and accessible URLs -generated for the genome tarball and FASTQ files, the following command -can be used to create the batch task:

- -

The following URLs must either be public, or private but made accessible -(for example, with a SAS token):

- - - -
az batch task create \
-    --job-id <JOB_ID> \
-    --json-file task.json
-
- - - -

Working Example

- -
Batch Job Create
- -
az batch job create --id job1 --pool-id mypool
-
- -
Create $COMMAND
- -

The following command line string is assigned to the $COMMAND variable.

- -
$COMMAND Variable
- -
COMMAND=$(cat <<EOF
-
-/bin/bash -c \
-"mkdir dragen output; \
-tar xvf dragen.tar -C dragen; \
-/opt/edico/bin/dragen --partial-reconfig HMM --ignore-version-check true; \
-/opt/edico/bin/dragen -f -r dragen \
-    -1 1.fq.gz \
-    -2 2.fq.gz \
-    --RGID NA24385-AJ-Son-R1-NS_S33 \
-    --RGSM NA24385-AJ-Son-R1-NS_S33 \
-    --enable-bam-indexing true \
-    --enable-map-align-output true \
-    --enable-sort true \
-    --output-file-prefix NA24385-AJ-Son-R1-NS_S33 \
-    --enable-map-align true \
-    --output-format BAM \
-    --output-directory output \
-    --enable-variant-caller true \
-    --lic-server <LICENSE>"
-
-EOF
-)
-
- -

This one-liner achieves the following:

- -
    -
  1. Sets up Genome and Output directories
  2. -
  3. Unarchives the genome file
  4. -
  5. Runs a partial reconfig on the FPGA
  6. -
  7. Runs DRAGEN
  8. -
- -

The $COMMAND variable is now interpolated in the task.json file below.

- -
Create task.json
- -
{
-    "id": "task1",
-    "commandLine": "$COMMAND",
-    "resourceFiles": [{
-        "filePath": "dragen.tar",
-        "httpUrl": "https://dragentestdata.blob.core.windows.net/reference-genomes/Hsapiens/hash-tables/hg38-alt_masked.cnv.graph.hla.rna-9-r3.0-1.tar"
-    }, {
-        "filePath": "1.fq.gz",
-        "httpUrl": "https://dragentestdata.blob.core.windows.net/samples/wes/NA24385-AJ-Son-R1-NS_S33/NA24385-AJ-Son-R1-NS_S33_L001_R1_001.fastq.gz"
-    }, {
-        "filePath": "2.fq.gz",
-        "httpUrl": "https://dragentestdata.blob.core.windows.net/samples/wes/NA24385-AJ-Son-R1-NS_S33/NA24385-AJ-Son-R1-NS_S33_L001_R2_001.fastq.gz"
-    }],
-    "outputFiles": [{
-        "filePattern": "../stdout.txt",
-        "destination": {
-            "container": {
-                "containerUrl": "$CONTAINER_URL",
-                "path": "task1/stdout.txt"
-            }
-        },
-        "uploadOptions": {
-            "uploadCondition": "taskcompletion"
-        }
-    }, {
-        "filePattern": "../stderr.txt",
-        "destination": {
-            "container": {
-                "containerUrl": "$CONTAINER_URL",
-                "path": "task1/stderr.txt"
-            }
-        },
-        "uploadOptions": {
-            "uploadCondition": "taskcompletion"
-        }
-    }, {
-        "filePattern": "output/**/*",
-        "destination": {
-            "container": {
-                "containerUrl": "$CONTAINER_URL",
-                "path": "task1/output"
-            }
-        },
-        "uploadOptions": {
-            "uploadCondition": "taskcompletion"
-        }
-    }, {
-        "filePattern": "/var/log/dragen.log",
-        "destination": {
-            "container": {
-                "containerUrl": "$CONTAINER_URL",
-                "path": "task1/log/dragen.log"
-            }
-        },
-        "uploadOptions": {
-            "uploadCondition": "taskcompletion"
-        }
-    }, {
-        "filePattern": "/var/log/dragen/**/*",
-        "destination": {
-            "container": {
-                "containerUrl": "<CONTAINER_URL>",
-                "path": "task1/log/dragen"
-            }
-        },
-        "uploadOptions": {
-            "uploadCondition": "taskcompletion"
-        }
-    }]
-}
-
- -
Batch Task Create
- -
az batch task create \
-    --job-id job1 \
-    --json-file task.json
-
- -

File Streaming

- -

While it is always necessary to have the genome file saved locally on the node, DRAGEN can stream input FASTQ files and -BAMs from private Azure Blob containers for faster processing. DRAGEN does not currently support streaming from public -Blob containers.

- -

Blob storage authentication has been improved with DRAGEN v3.10. Credential management is now controlled via environment -variables used in the Azure SDK, allowing support for Azure SAS streaming and BLOB identity-based credential management. -Support for Azure managed identity authentication was introduced with v3.10.

- -

Starting with DRAGEN v3.10, the need for and use of the “~/.azure-credentials” file for input streaming has been -deprecated. New environment variables were introduced for input streaming. Environment variables remove the -need for file parsing logic. Using access keys will improve security since the key will only live in memory.

- -

DRAGEN v3.10 supports two cases for Azure authentication:

- - - -

When using storage account access keys for authentication, DRAGEN can read from Azure Blob storage regardless of whether -it is run on or off Azure. To use this method of authentication, “AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME” and -“AZ_ACCOUNT_KEY=$STORAGE_ACCOUNT_KEY” environment variables must precede the DRAGEN invocation on the command line, -e.g.:

- -
sudo AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME AZ_ACCOUNT_KEY=$STORAGE_ACCOUNT_KEY \
-/opt/edico/bin/dragen -f -r $ref \
--1 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R1_001.fastq.gz' \
--2 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R2_001.fastq.gz' \
-...
-
- -

Authentication with -managed identities -is only available to DRAGEN when run on Azure. The DRAGEN VMs must have Contributor permissions (read/write) to the -Storage Account that it wants to read from using managed identities authentication. In order to grant these permissions -to a VM, a managed identity is needed. System-assigned managed identities can be assigned during creation of a VM or to -existing VMs using either the -Azure Portal -or Azure CLI. -User-assigned managed identities can also be assigned during creation of a VM if the -Azure CLI -is used for creation. However, user-assigned managed identities cannot be assigned at time of creation to VMs that are -created using the portal. Assignment of user-assigned managed identities to portal-created VMs can only be performed -after creation of the VM. In this case, the user-assigned managed identity must first be created using the -portal -or CLI -before being assigned to an existing VM, which can also be performed either with the -portal -or CLI. -After assigning a managed identity to a VM, it must be granted permission to a storage account using either the -portal -or CLI.

- -

If a single managed identity exists on a VM, only the “AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME” environment -variable is required to stream inputs with DRAGEN. For VMs with multiple managed identities, the -“AZR_IDENT_CLIENT_ID=$IDENTITY_CLIENT_ID” environment variable with the client id of the managed identity that can access the -storage container must also be specified. To use managed identities authentication, these environment variables must -precede the DRAGEN invocation on the command line, e.g. (for a VM with multiple managed identities):

- -
sudo AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME AZR_IDENT_CLIENT_ID=$IDENTITY_CLIENT_ID \
-/opt/edico/bin/dragen -f -r $ref \
--1 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R1_001.fastq.gz' \
--2 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R2_001.fastq.gz' \
-...
-
- -
Stream from Azure Blob Storage
- -

The following parameters are needed for streaming from Blob storage using storage account access keys:

- - - -
$COMMAND Variable for Streaming FASTQ Inputs with Storage Account Access Key
- -

The following is an example $COMMAND variable that streams FASTQ inputs from Blob storage using a storage account -access key:

- -
COMMAND=$(cat <<EOF
-
-/bin/bash -c \
-"mkdir dragen output; \
-tar xvf dragen.tar -C dragen; \
-/opt/edico/bin/dragen --partial-reconfig HMM --ignore-version-check true; \
-AZ_ACCOUNT_NAME=<STORAGE_ACCOUNT_NAME> \
-AZ_ACCOUNT_KEY=<STORAGE_ACCOUNT_KEY> \
-/opt/edico/bin/dragen -f -r dragen \
-    -1 <FQ1_URL> \
-    -2 <FQ2_URL> \
-    --RGID <RGID> \
-    --RGSM <RGSM> \
-    --enable-bam-indexing true \
-    --enable-map-align-output true \
-    --enable-sort true \
-    --output-file-prefix <OUTPUT_PREFIX> \
-    --enable-map-align true \
-    --output-format BAM \
-    --output-directory output \
-    --enable-variant-caller true \
-    --lic-server <LICENSE>"
-
-EOF
-)
-
- -

The following parameters are needed for streaming from Blob storage using Azure managed identities authentication:

- - - -
$COMMAND Variable for Streaming FASTQ Inputs with Managed Identities
- -

The following is an example $COMMAND variable that streams FASTQ inputs from Blob storage using a VM with more than -one managed identities:

- -
COMMAND=$(cat <<EOF
-
-/bin/bash -c \
-"mkdir dragen output; \
-tar xvf dragen.tar -C dragen; \
-/opt/edico/bin/dragen --partial-reconfig HMM --ignore-version-check true; \
-AZ_ACCOUNT_NAME=<STORAGE_ACCOUNT_NAME> \
-AZR_IDENT_CLIENT_ID=<IDENTITY_CLIENT_ID> \
-/opt/edico/bin/dragen -f -r dragen \
-    -1 <FQ1_URL> \
-    -2 <FQ2_URL> \
-    --RGID <RGID> \
-    --RGSM <RGSM> \
-    --enable-bam-indexing true \
-    --enable-map-align-output true \
-    --enable-sort true \
-    --output-file-prefix <OUTPUT_PREFIX> \
-    --enable-map-align true \
-    --output-format BAM \
-    --output-directory output \
-    --enable-variant-caller true \
-    --lic-server <LICENSE>"
-
-EOF
-)
-
- -

The above examples achieve the same as the $COMMAND before with the addition of the -environment variables required for streaming inputs from Blob storage: AZ_ACCOUNT_NAME and AZ_ACCESS_KEY or -AZ_ACCOUNT_NAME and AZR_IDENT_CLIENT_ID.

- -

In these cases, the FASTQ files will no longer need to be referenced in the resourceFiles in the task.json

- -
FASTQ List
- -

If using a FASTQ list file to reference and stream FASTQ files, the FASTQ list file must -also be local to the node. The FASTQ files referenced in the FASTQ list can be in the form of URLs -to files on an Azure Storage Account, in which case, the FASTQs will be streamed by DRAGEN.

- -

The following is an example of streaming inputs with a FASTQ list using the -resourceFiles configuration as well as a SAS token to access the FASTQ list file in Azure Blob Storage. -This is stored as the $LIST_URL variable.

- -
$LIST_URL for Input Streaming
- -
LIST_URL=$(az storage blob generate-sas \
-    --name <FASTQ_LIST_BLOB_PATH> \
-    --account-name <STORAGE_ACCOUNT> \
-    --account-key <STORAGE_ACCOUNT_KEY> \
-    --container-name <CONTAINER_NAME> \
-    --expiry <EXPIRE_DATE> \
-    --permissions r \
-    --https \
-    --full-uri \
-    --output tsv)
-
- -

In this example, the FASTQ files will be streamed from Azure Blob Storage using a storage account access key. Hence, we -will once again need the AZ_ACCOUNT_NAME and AZ_ACCESS_KEY environment variables in the $COMMAND Variable. If using -managed identities to stream the FASTQ files, use the AZ_ACCOUNT_NAME (for VMs with a single managed identity) or -AZ_ACCOUNT_NAME and AZR_IDENT_CLIENT_ID (for VMs with multiple managed identities), instead.

- -
$COMMAND Variable for Input Streaming with FASTQ List and Storage Account Access Key
- -
COMMAND=$(cat <<EOF
-
-/bin/bash -c \
-"mkdir dragen output; \
-tar xvf dragen.tar -C dragen; \
-/opt/edico/bin/dragen --partial-reconfig HMM --ignore-version-check true; \
-AZ_ACCOUNT_NAME=<STORAGE_ACCOUNT_NAME> \
-AZ_ACCOUNT_KEY=<STORAGE_ACCOUNT_KEY> \
-/opt/edico/bin/dragen -f -r dragen \
-    --fastq-list fastq_list.csv \
-    --fastq-list-sample-id <RGSM> \
-    --enable-bam-indexing true \
-    --enable-map-align-output true \
-    --enable-sort true \
-    --output-file-prefix <OUTPUT_PREFIX> \
-    --enable-map-align true \
-    --output-format BAM \
-    --output-directory output \
-    --enable-variant-caller true \
-    --lic-server <LICENSE>"
-
-EOF
-)
-
- -
task.json resourceFiles for FASTQ List Input
- -
"resourceFiles": [{
-    "filePath": "dragen.tar",
-    "httpUrl": "$GENOME_URL"
-}, {
-    "filePath": "fastq_list.csv",
-    "httpUrl": "$LIST_URL"
-}]
-
- -
Example Bash Script
- -

An example bash script using some of the commands shown above is available for reference. -There is a required LICENSE_URL environment variable, as well as some variables within the script -that must be set before running it, ie:

- -
LICENSE_URL=https://<username>:<password>@license.edicogenome.com ./create-batch-task.sh
-
- -

There are accompanying comments within the bash script to help set these.

- -


- -


- -

Troubleshooting

- -

ARM Deployment

- -

If you are running into issues getting the infrastructure spun up through the -ARM template, there are a few options for debugging:

- -
    -
  1. -

    If the resource group was created, navigate to the resource group, and -then the deployments menu option. Here you will find the list of deployments -tied to this resource group, and navigating deeper into each deployment -may show additional information for the deployment of each resource.

    -
  2. -
  3. -

    Open the Activity Log -for an additional source of information for recent issues within your subscription.

    -
  4. -
- -

Batch Tasks

- -

If you are running into issues getting your batch task to run successfully, -the best place to get information to help debug the problem is within the -stdout and stderr of the batch task itself. This can be accessed by navigating -to your batch account in the portal, and then to the specific job and task -that ran. Once there, you will be able to access stdout.txt and stderr.txt:

- -

batch-task-file-list

- -

DRAGEN Issues

- -

For failed DRAGEN runs, navigate to the batch account in the portal, then job and task associated with the failed run -to view DRAGEN log files.

- -

Common Issues

- -
    -
  1. -

    Quota issues: If quota increases haven’t been requested, it can be common -to run into quota issues for both the number of batch accounts as well as for -the Standard NPS Family vCPUs. Please make sure you have available -quota before deploying the ARM template.

    -
  2. -
  3. -

    Input file streaming: Currently, DRAGEN does not support input streaming -from public Blob containers. Input files from private Blob containers can be -streamed provided that the proper storage credentials are passed to the batch -command.

    -
  4. -
  5. -

    Command lines: Ensure that variables supplied to Azure CLI commands (e.g., account keys, license URLs, names of -resource groups, batch accounts, storage accounts and containers, batch pools, etc.) are correct. Ensure that DRAGEN -command lines are formed properly and that the correct variables are passed to it.

    -
  6. -
  7. -

    Task JSON: Ensure that keys and values supplied to the json task file are correct and complete. Ensure that the -file adheres to JSON formatting rules.

    -
  8. -
  9. -

    Authentication: Ensure that the Azure CLI is authenticated for use with the proper subscription prior to creating -resource groups and deploying ARM templates. Log in to the proper Azure batch account prior to creating -batch jobs and tasks. Provide the required authentication (e.g., SAS tokens) for private storage accounts and/or -input files, as needed. Ensure that sufficient expiration periods are specified when generating authentication tokens.

    -
  10. -
- -


- -

Additional Resources

- - - -


- -

Contributing

- -

Contributions are welcome!

- -

https://github.com/Illumina/dragen-azure-quickstart

- -

As the documentation within the above repository is not directly managed through the repository, please do not submit pull requests.

- -

How to contribute

- -

When you have an idea for contribution, or want to report a bug or issue, please open an issue!

- -

Feedback

- -

Please open a issue if you would like to provide any feedback on the contents of this repository.

- -


- -

Notices

- -

This document is provided for informational purposes only. It represents Azure’s current product offerings and practices as of the date of issue of this document, which are subject to change without notice. Customers are responsible for making their own independent assessment of the information in this document and any use of Azure’s products or services, each of which is provided “as is” without warranty of any kind, whether expressed or implied. This document does not create any warranties, representations, contractual commitments, conditions, or assurances from Azure, its affiliates, suppliers, or licensors. The responsibilities and liabilities of Azure to its customers are controlled by Azure agreements, and this document is not part of, nor does it modify, any agreement between Azure and its customers.

- - - -

Microsoft and any contributors grant you a license to the Microsoft documentation and other content in this repository under the Creative Commons Attribution 4.0 International Public License, see the LICENSE file, and grant you a license to any code in the repository under the MIT License, see the LICENSE-CODE file.

- -

Microsoft, Windows, Microsoft Azure and/or other Microsoft products and services referenced in the documentation may be either trademarks or registered trademarks of Microsoft in the United States and/or other countries. The licenses for this project do not grant you rights to use any Microsoft names, logos, or trademarks. Microsoft’s general trademark guidelines can be found at http://go.microsoft.com/fwlink/?LinkID=254653.

- -


- -

Privacy

- -

Privacy information can be found at https://privacy.microsoft.com/en-us/

- -

Microsoft and any contributors reserve all others rights, whether under their respective copyrights, patents, or trademarks, whether by implication, estoppel or otherwise.

- -


- - -
- - - - - - -
- - - - - diff --git a/4.2.4/introduction.md b/4.2.4/introduction.md deleted file mode 100644 index 7fe4d2e..0000000 --- a/4.2.4/introduction.md +++ /dev/null @@ -1,7 +0,0 @@ -This Quick Start guide provides instructions and resources to guide users through deploying [Dynamic Read Analysis for GENomics (DRAGEN)](https://www.illumina.com/products/by-type/informatics-products/dragen-bio-it-platform.html) on Azure. It is primarily intended for users who are interested in a quick and easy setup for running genomics workloads in the cloud. - -This tutorial and its associated Marketplace solution in Azure were developed by Illumina in collaboration with Microsoft. The reference deployment described below serves as a starting point, but can be further customized to meet your needs. - -If you run into any issues while going through the tutorial, please [share your feedback with us](#contributing)! - -* [DRAGEN Infrastructure ARM Template](mainTemplate.json) diff --git a/4.2.4/mainTemplate.json b/4.2.4/mainTemplate.json deleted file mode 100644 index e6fc484..0000000 --- a/4.2.4/mainTemplate.json +++ /dev/null @@ -1,259 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "location": { - "type": "string", - "defaultValue": "[resourceGroup().location]" - }, - "prefix": { - "type": "string", - "metadata": { - "description": "Must be 1-17 characters in length, letters and numbers only (no hyphens or special characters)." - }, - "minLength": 1, - "maxLength": 17 - }, - "storageAccountName": { - "type": "string", - "defaultValue": "[concat(parameters('prefix'), 'storage')]" - }, - "storageSku": { - "type": "string", - "defaultValue": "Standard_LRS", - "allowedValues": [ - "Standard_LRS", - "Standard_GRS", - "Standard_RAGRS", - "Standard_ZRS", - "Standard_GZRS", - "Standard_RAGZRS" - ] - }, - "storageNewOrExisting": { - "type": "string", - "defaultValue": "new", - "allowedValues": [ - "new", - "existing" - ] - }, - "storageResourceGroup": { - "type": "string", - "defaultValue": "[resourceGroup().id]" - }, - "offerSku": { - "type": "string", - "defaultValue": "dragen-4-2" - }, - "vmImageVersion": { - "type": "string", - "defaultValue": "4.2.4" - }, - "azureBatchServiceOid": { - "type": "string" - }, - "VmSize": { - "type": "string", - "defaultValue": "STANDARD_NP20s", - "metadata": { - "description": "Size for the virtual machine." - } - } - }, - "variables": { - "batchAccountName": "[concat(parameters('prefix'), 'batch')]", - "batchPoolName": "[concat(parameters('prefix'), 'pool')]", - "publisher": "illuminainc1586452220102", - "offer": "dragen-vm", - "nodeAgentSku": "batch.node.centos 7", - "batchKeyVault": "[concat(parameters('prefix'),'kv')]", - "tenantId": "[subscription().tenantId]", - "storageAccountContainerName": "[concat(parameters('storageAccountName'), 'container')]" - }, - "resources": [ - { - "condition": "[equals(parameters('storageNewOrExisting'),'new')]", - "type": "Microsoft.Storage/storageAccounts", - "apiVersion": "2022-05-01", - "name": "[parameters('storageAccountName')]", - "location": "[parameters('location')]", - "sku": { - "name": "[parameters('storageSku')]" - }, - "kind": "StorageV2", - "properties": { - "allowBlobPublicAccess": false - }, - "resources": [ - { - "type": "blobServices/containers", - "apiVersion": "2022-05-01", - "name": "[concat('default/', variables('storageAccountContainerName'))]", - "dependsOn": [ - "[parameters('storageAccountName')]" - ], - "properties": { - "publicAccess": "None" - } - } - ] - }, - { - "type": "Microsoft.KeyVault/vaults", - "apiVersion": "2022-07-01", - "name": "[variables('batchKeyVault')]", - "location": "[parameters('location')]", - "properties": { - "sku": { - "family": "A", - "name": "Standard" - }, - "tenantId": "[variables('tenantId')]", - "accessPolicies": [ - { - "tenantId": "[variables('tenantId')]", - "objectId": "[parameters('azureBatchServiceOid')]", - "permissions": { - "secrets": [ - "Get", - "List", - "Set", - "Delete", - "Recover", - "Backup", - "Restore", - "Purge" - ], - "keys": [ - "Get", - "List", - "Update", - "Create", - "Import", - "Delete", - "Recover", - "Backup", - "Restore", - "Decrypt", - "Encrypt", - "UnwrapKey", - "WrapKey", - "Verify", - "Sign", - "Purge" - ], - "certificates": [ - "Get", - "List", - "Update", - "Create", - "Import", - "Delete", - "Recover", - "Backup", - "Restore", - "ManageContacts", - "ManageIssuers", - "GetIssuers", - "ListIssuers", - "SetIssuers", - "DeleteIssuers", - "Purge" - ] - } - } - ], - "enabledForDeployment": true, - "enabledForDiskEncryption": true, - "enabledForTemplateDeployment": true, - "enableSoftDelete": true, - "softDeleteRetentionInDays": 90, - "enableRbacAuthorization": false - } - }, - { - "type": "Microsoft.Batch/batchAccounts", - "name": "[variables('batchAccountName')]", - "dependsOn": [ - "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]", - "[resourceId('Microsoft.KeyVault/vaults', variables('batchKeyVault'))]" - ], - "apiVersion": "2022-06-01", - "location": "[parameters('location')]", - "identity": { - "type": "None" - }, - "properties": { - "poolAllocationMode": "UserSubscription", - "keyVaultReference": { - "id": "[resourceId('Microsoft.KeyVault/vaults', variables('batchKeyVault'))]", - "url": "[reference(resourceId('Microsoft.KeyVault/vaults', variables('batchKeyVault'))).vaultUri]" - }, - "publicNetworkAccess": "Enabled", - "encryption": { - "keySource": "Microsoft.Batch" - }, - "autoStorage": { - "storageAccountId": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]" - } - } - }, - { - "type": "Microsoft.Batch/batchAccounts/pools", - "apiVersion": "2022-06-01", - "name": "[concat(variables('batchAccountName'), '/', variables('batchPoolName'))]", - "dependsOn": [ - "[resourceId('Microsoft.Batch/batchAccounts', variables('batchAccountName'))]" - ], - "properties": { - "vmSize": "[parameters('VmSize')]", - "interNodeCommunication": "Disabled", - "taskSlotsPerNode": 1, - "taskSchedulingPolicy": { - "nodeFillType": "Spread" - }, - "deploymentConfiguration": { - "virtualMachineConfiguration": { - "imageReference": { - "publisher": "[variables('publisher')]", - "offer": "[variables('offer')]", - "sku": "[parameters('offerSku')]", - "version": "[parameters('vmImageVersion')]" - }, - "nodeAgentSkuId": "[variables('nodeAgentSku')]" - } - }, - "scaleSettings": { - "fixedScale": { - "targetDedicatedNodes": 1, - "targetLowPriorityNodes": 0, - "resizeTimeout": "PT15M" - } - } - } - } - ], - "outputs": { - "jobPool": { - "type": "string", - "value": "[variables('batchPoolName')]" - }, - "batchAccount": { - "type": "string", - "value": "[variables('batchAccountName')]" - }, - "batchStorageAccount": { - "type": "string", - "value": "[parameters('storageAccountName')]" - }, - "batchStorageContainer": { - "type": "string", - "value": "[variables('storageAccountContainerName')]" - }, - "storageResourceGroupId": { - "type": "string", - "value": "[parameters('storageResourceGroup')]" - } - } -} diff --git a/4.2.4/notices.md b/4.2.4/notices.md deleted file mode 100644 index d183ca7..0000000 --- a/4.2.4/notices.md +++ /dev/null @@ -1,7 +0,0 @@ -This document is provided for informational purposes only. It represents Azure’s current product offerings and practices as of the date of issue of this document, which are subject to change without notice. Customers are responsible for making their own independent assessment of the information in this document and any use of Azure’s products or services, each of which is provided “as is” without warranty of any kind, whether expressed or implied. This document does not create any warranties, representations, contractual commitments, conditions, or assurances from Azure, its affiliates, suppliers, or licensors. The responsibilities and liabilities of Azure to its customers are controlled by Azure agreements, and this document is not part of, nor does it modify, any agreement between Azure and its customers. - -### Legal Notices - -Microsoft and any contributors grant you a license to the Microsoft documentation and other content in this repository under the [Creative Commons Attribution 4.0 International Public License](https://creativecommons.org/licenses/by/4.0/legalcode), see the [LICENSE](LICENSE) file, and grant you a license to any code in the repository under the [MIT License](https://opensource.org/licenses/MIT), see the [LICENSE-CODE](LICENSE-CODE) file. - -Microsoft, Windows, Microsoft Azure and/or other Microsoft products and services referenced in the documentation may be either trademarks or registered trademarks of Microsoft in the United States and/or other countries. The licenses for this project do not grant you rights to use any Microsoft names, logos, or trademarks. Microsoft's general trademark guidelines can be found at . diff --git a/4.2.4/prerequisites.md b/4.2.4/prerequisites.md deleted file mode 100644 index 3007f05..0000000 --- a/4.2.4/prerequisites.md +++ /dev/null @@ -1,40 +0,0 @@ -* **A DRAGEN License** - To obtain a license, please contact Illumina at techsupport@illumina.com. -* **Access to DRAGEN Image via Azure Marketplace** - If you would like to gain access, please contact Illumina at techsupport@illumina.com. - -### Technical Requirements - -* **Azure Subscription.** An Azure Cloud Subscription. -* **Quota for NP-Series Virtual Machines.** You will need to request a quota - for vCPU cores for the NP-series of virtual machines on Azure. -* **Azure CLI.** You'll need to [install](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) the Azure CLI. -* **Genomic Data.** This quick start will create (if it does not already exist) an - Azure Blob Storage Account. You will need to upload your genomics data to this - storage account to utilize DRAGEN. - -### Quota Requirements - -DRAGEN runs on a specific Virtual Machine SKU family in Azure, because it requires -**field-programmable gate array** (FPGA) hardware. Due to this requirement, you -will need to request access to this Virtual Machine SKU family, as described below. - -#### NP-Series VMs - -DRAGEN runs on FPGA-enabled VMs, which are now generally available as the [NP-series](https://docs.microsoft.com/en-us/azure/virtual-machines/np-series) on Azure. - -> Currently, the vCPU requirements for NP-series SKUs are in increments of 10. When requesting an updated quota, we recommend requesting vCPUs in batches of 10. You will need a minimum increase of 10 vCPU Quota for NP-series machines for this tutorial. - -For steps to increase or verify your NP-series vCPU quota on Azure, follow [this deployment step](#login-to-your-azure-portal-account). - -#### Batch Accounts - -This quickstart will utilize [Azure Batch](https://azure.microsoft.com/en-us/services/batch/) as the computing environment for DRAGEN, in [user subscription mode](https://docs.microsoft.com/en-us/azure/batch/scripts/batch-cli-sample-create-user-subscription-account). - -It is also possible to run Azure Batch in **Batch service allocation mode**. In Batch service allocation mode, compute nodes are subject to a separate quota. For DRAGEN, in Batch service allocation mode, you will need to request additional quota for NP-series vCPUs for your discrete Azure Batch account. Current default quotas for Batch accounts can be found [here](https://docs.microsoft.com/en-us/azure/batch/batch-quota-limit#resource-quotas). You can increase your Azure Batch account quota by [following the steps here](https://docs.microsoft.com/en-us/azure/batch/batch-quota-limit#increase-a-quota). - -#### Required Permissions (Authorization / Access Controls) - -To provision this solution, the Active Directory principal (account, service principal, etc.) should require at least Azure subscription-wide [contributor access](https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#contributor). - -If your organization is concerned about this level of access, a deployment pipeline (e.g., GitHub Actions) running as a managed service principal with ***contributor*** access can allow others to have a more restricted privilege level (e.g., Resource Group Contributor, Subscription Reader). - -When utilizing a User Subscription Mode Batch Account, the Azure Batch Service must be added to the Azure Subscription as a Contributor. To add this level of access, you must be at least a Subscription Contributor. For more information, see [additional configuration for user subscription mode](https://docs.microsoft.com/en-us/azure/batch/batch-account-create-portal#additional-configuration-for-user-subscription-mode). diff --git a/4.2.4/privacy.md b/4.2.4/privacy.md deleted file mode 100644 index 81d723c..0000000 --- a/4.2.4/privacy.md +++ /dev/null @@ -1,3 +0,0 @@ -Privacy information can be found at - -Microsoft and any contributors reserve all others rights, whether under their respective copyrights, patents, or trademarks, whether by implication, estoppel or otherwise. diff --git a/4.2.4/troubleshooting.md b/4.2.4/troubleshooting.md deleted file mode 100644 index 9ff030e..0000000 --- a/4.2.4/troubleshooting.md +++ /dev/null @@ -1,51 +0,0 @@ -### ARM Deployment - -If you are running into issues getting the infrastructure spun up through the -ARM template, there are a few options for debugging: - -1. If the resource group was created, navigate to the resource group, and -then the deployments menu option. Here you will find the list of deployments -tied to this resource group, and navigating deeper into each deployment -may show additional information for the deployment of each resource. - -2. Open the [Activity Log](https://ms.portal.azure.com/#blade/Microsoft_Azure_ActivityLog/ActivityLogBlade) -for an additional source of information for recent issues within your subscription. - -### Batch Tasks - -If you are running into issues getting your batch task to run successfully, -the best place to get information to help debug the problem is within the -`stdout` and `stderr` of the batch task itself. This can be accessed by navigating -to your batch account in the portal, and then to the specific job and task -that ran. Once there, you will be able to access `stdout.txt` and `stderr.txt`: - -![batch-task-file-list](./images/batch-task-file-list.png) - -### DRAGEN Issues - -For failed DRAGEN runs, navigate to the batch account in the portal, then job and task associated with the failed run -to view DRAGEN log files. - -### Common Issues - -1. Quota issues: If quota increases haven't been requested, it can be common -to run into quota issues for both the number of batch accounts as well as for -the `Standard NPS Family vCPUs`. Please make sure you have available -[quota](#deployment-steps) before deploying the ARM template. - -2. Input file streaming: Currently, DRAGEN does not support input streaming -from public Blob containers. Input files from private Blob containers can be -streamed provided that the proper storage credentials are passed to the batch -command. - -3. Command lines: Ensure that variables supplied to Azure CLI commands (e.g., account keys, license URLs, names of -resource groups, batch accounts, storage accounts and containers, batch pools, etc.) are correct. Ensure that DRAGEN -command lines are formed properly and that the correct variables are passed to it. - -4. Task JSON: Ensure that keys and values supplied to the json task file are correct and complete. Ensure that the -file adheres to JSON formatting rules. - -5. Authentication: Ensure that the Azure CLI is authenticated for use with the proper subscription prior to creating -resource groups and deploying ARM templates. Log in to the proper Azure batch account prior to creating -batch jobs and tasks. Provide the required authentication (e.g., SAS tokens) for private storage accounts and/or -input files, as needed. Ensure that sufficient expiration periods are specified when generating authentication tokens. diff --git a/4.2.4/tutorial-docs/.gitignore b/4.2.4/tutorial-docs/.gitignore deleted file mode 100644 index 50742e1..0000000 --- a/4.2.4/tutorial-docs/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -_site -.sass-cache -.jekyll-metadata -.bundle diff --git a/4.2.4/tutorial-docs/.jekyll-cache/Jekyll/Cache/Jekyll--Cache/b7/9606fb3afea5bd1609ed40b622142f1c98125abcfe89a76a661b0e8e343910 b/4.2.4/tutorial-docs/.jekyll-cache/Jekyll/Cache/Jekyll--Cache/b7/9606fb3afea5bd1609ed40b622142f1c98125abcfe89a76a661b0e8e343910 deleted file mode 100644 index 775e873..0000000 --- a/4.2.4/tutorial-docs/.jekyll-cache/Jekyll/Cache/Jekyll--Cache/b7/9606fb3afea5bd1609ed40b622142f1c98125abcfe89a76a661b0e8e343910 +++ /dev/null @@ -1 +0,0 @@ -I"{"source"=>"./tutorial-docs", "destination"=>"/tmp/dragen-azure-quickstart/4.2.4", "collections_dir"=>"", "cache_dir"=>".jekyll-cache", "plugins_dir"=>"_plugins", "layouts_dir"=>"_layouts", "data_dir"=>"_data", "includes_dir"=>"_includes", "collections"=>{"posts"=>{"output"=>true, "permalink"=>"/:categories/:year/:month/:day/:title:output_ext"}}, "safe"=>false, "include"=>[".htaccess"], "exclude"=>[".sass-cache", ".jekyll-cache", "gemfiles", "Gemfile", "Gemfile.lock", "node_modules", "vendor/bundle/", "vendor/cache/", "vendor/gems/", "vendor/ruby/"], "keep_files"=>[".git", ".svn"], "encoding"=>"utf-8", "markdown_ext"=>"markdown,mkdown,mkdn,mkd,md", "strict_front_matter"=>false, "show_drafts"=>nil, "limit_posts"=>0, "future"=>false, "unpublished"=>false, "whitelist"=>[], "plugins"=>["jekyll-feed"], "markdown"=>"kramdown", "highlighter"=>"rouge", "lsi"=>false, "excerpt_separator"=>"\n\n", "incremental"=>false, "detach"=>false, "port"=>"4000", "host"=>"127.0.0.1", "baseurl"=>"", "show_dir_listing"=>false, "permalink"=>"date", "paginate_path"=>"/page:num", "timezone"=>nil, "quiet"=>false, "verbose"=>false, "defaults"=>[], "liquid"=>{"error_mode"=>"warn", "strict_filters"=>false, "strict_variables"=>false}, "kramdown"=>{"auto_ids"=>true, "toc_levels"=>[1, 2, 3, 4, 5, 6], "entity_output"=>"as_char", "smart_quotes"=>"lsquo,rsquo,ldquo,rdquo", "input"=>"GFM", "hard_wrap"=>false, "guess_lang"=>true, "footnote_nr"=>1, "show_warnings"=>false}, "title"=>"DRAGEN on Azure", "email"=>"your-email@example.com", "description"=>"Quickstart", "url"=>"", "twitter_username"=>"jekyllrb", "github_username"=>"jekyll", "theme"=>"jekyll-theme-hydeout", "dragen_version"=>"3.8.4-1", "serving"=>false}:ET \ No newline at end of file diff --git a/4.2.4/tutorial-docs/.jekyll-cache/Jekyll/Cache/Jekyll--Converters--Markdown/98/3091e24a3db885e82dc1c330f62759552fb552e14e30ce8f45663859152504 b/4.2.4/tutorial-docs/.jekyll-cache/Jekyll/Cache/Jekyll--Converters--Markdown/98/3091e24a3db885e82dc1c330f62759552fb552e14e30ce8f45663859152504 deleted file mode 100644 index 4c7ffb4..0000000 --- a/4.2.4/tutorial-docs/.jekyll-cache/Jekyll/Cache/Jekyll--Converters--Markdown/98/3091e24a3db885e82dc1c330f62759552fb552e14e30ce8f45663859152504 +++ /dev/null @@ -1,1115 +0,0 @@ -I"3 -

Introduction

- -

This Quick Start guide provides instructions and resources to guide users through deploying Dynamic Read Analysis for GENomics (DRAGEN) on Azure. It is primarily intended for users who are interested in a quick and easy setup for running genomics workloads in the cloud.

- -

This tutorial and its associated Marketplace solution in Azure were developed by Illumina in collaboration with Microsoft. The reference deployment described below serves as a starting point, but can be further customized to meet your needs.

- -

If you run into any issues while going through the tutorial, please share your feedback with us!

- - - -


- -

Architecture

- -

Supported Regions

- -

DRAGEN on Azure is available in regions where FPGA-enabled Standard NP Family VMs are available. At the time of this writing, supported regions currently include:

- - - -

For the most current information on available regions, see the NP-series row of the chart here.

- -

Architecture Diagram

- -

architecture-diagram

- -

Resource List

- -

List of Azure resources that are deployed by this quickstart if default settings and parameters are used:

- - - -

Note on Batch Node Pool Allocation

- -

Batch offers two options for allocation of node pools: Batch managed and user subscription modes. A single Batch Account can only support one node pool type at a time, meaning you cannot have batch managed and user subscription mode node pools under the same batch account.

- -

Batch Managed Node Pools

- -

When Batch Managed allocation mode is selected, users must request NP VM quota for each specific Batch instance they create. Nodes are allocated as needed from Batch-managed subscriptions. This scenario works best when users intend to persist and use one or very few Batch instances for their DRAGEN jobs. It is less ideal in situations where the creation/deletion of Batch accounts is automated or occurs frequently, as with CI/CD.

- -

User Subscription Node Pools

- -

When the User Subscription allocation mode is selected, users request an overall quota for NP VMs for a region within their subscription. With this model, the VMs needed for the Batch account are created directly in the user’s subscription. This setup is useful for CI/CD and other cases where users are running DRAGEN across many Batch accounts within a subscription and/or the Batch accounts are short-lived.

- -

Cost Differences in Node Pool Allocation Modes

- -

There may be cost differences between the two different node pool allocation methods. Consider your usage scenarios and consult Azure documentation and pricing calculators to determine which approach will be most optimal for your needs.

- -

Azure Costs

- -

Users are responsible for costs of any services deployed through this quickstart or its customization options.

- -

Prices are subject to change - more information can be found on the pricing pages for Azure resources deployed through this tutorial:

- - - -

Users are also responsible for costs of any licenses needed to run DRAGEN (not included in this quickstart - must be obtained separately).

- -

Estimate your Costs

- -

For help in estimating your costs to run DRAGEN on Azure, see the pricing calculator located here.

- -


- -

Prerequisites

- - - -

Technical Requirements

- - - -

Quota Requirements

- -

DRAGEN runs on a specific Virtual Machine SKU family in Azure, because it requires -field-programmable gate array (FPGA) hardware. Due to this requirement, you -will need to request access to this Virtual Machine SKU family, as described below.

- -

NP-Series VMs

- -

DRAGEN runs on FPGA-enabled VMs, which are now generally available as the NP-series on Azure.

- -
-

Currently, the vCPU requirements for NP-series SKUs are in increments of 10. When requesting an updated quota, we recommend requesting vCPUs in batches of 10. You will need a minimum increase of 10 vCPU Quota for NP-series machines for this tutorial.

-
- -

For steps to increase or verify your NP-series vCPU quota on Azure, follow this deployment step.

- -

Batch Accounts

- -

This quickstart will utilize Azure Batch as the computing environment for DRAGEN, in user subscription mode.

- -

It is also possible to run Azure Batch in Batch service allocation mode. In Batch service allocation mode, compute nodes are subject to a separate quota. For DRAGEN, in Batch service allocation mode, you will need to request additional quota for NP-series vCPUs for your discrete Azure Batch account. Current default quotas for Batch accounts can be found here. You can increase your Azure Batch account quota by following the steps here.

- -

Required Permissions (Authorization / Access Controls)

- -

To provision this solution, the Active Directory principal (account, service principal, etc.) should require at least Azure subscription-wide contributor access.

- -

If your organization is concerned about this level of access, a deployment pipeline (e.g., GitHub Actions) running as a managed service principal with contributor access can allow others to have a more restricted privilege level (e.g., Resource Group Contributor, Subscription Reader).

- -

When utilizing a User Subscription Mode Batch Account, the Azure Batch Service must be added to the Azure Subscription as a Contributor. To add this level of access, you must be at least a Subscription Contributor. For more information, see additional configuration for user subscription mode.

- -


- -

Deployment

- -

Steps

- -

Login to your Azure Portal account

- -
    -
  1. Log in to your Azure account in the Azure Portal.
  2. -
  3. -

    Ensure you have Quota for NP-series Virtual Machines, as outlined in the -pre-requisites section above, by navigating to:

    - -
      -
    • Subscriptions -> Choose your subscription
    • -
    • Click Usages + quotas from the left-side menu
    • -
    • Filter the list by typing NP into the left search bar. -
        -
      • You should see Standard NPS Family vCPUs, and a denomination. If you see -0 of 0, click the edit icon to request quota.
      • -
      -
    • -
    -
  4. -
- -

Deploy the Quickstart (solution template)

- -
    -
  1. While signed in to your Azure account, open the page for the DRAGEN Solution: -
      -
    1. Navigate to the Marketplace
    2. -
    3. Search for “DRAGEN” and select DRAGEN Bio-IT Platform for Genomic Data Analysis on Azure Batch
    4. -
    -
  2. -
  3. If prompted, review the terms and conditions and then choose Accept Terms
  4. -
  5. Click Create
  6. -
  7. -

    You’ll be prompted to select a resource group and other particulars of the solution to deploy

    - -

    NOTE: For storage settings, the “Premium” type SKUs are not currently supported by this offering

    -
  8. -
  9. Once you’ve made your selections, click Review + Create -at the bottom of the screen and click Create
  10. -
  11. You can check deployment status in the top right of the Azure Portal page -deployment-status
  12. -
- -


- -

Additional Configurations

- -

Advanced Usage: ARM Template

- -

Incorporating DRAGEN on Azure into an existing solution may be as easy as using the ARM template that is exported alongside this documentation.

- -

Usage Scenarios

- -

Deployment using the ARM template enables several more advanced scenarios, such as:

- - - -

Prerequisites for ARM Template Deployment

- -

Before attempting to deploy to your subscription via the ARM template, ensure that you have completed all of the prerequisites for running DRAGEN on Azure.

- -

Parameters

- -

The ARM template takes the following input parameters:

- -
Required parameters (no default value set)
- - - - - - - - - - - - - - - - - - -
Parameter NameDescription
prefixPrefix for resource names (1-17 alphanumeric characters)
azureBatchServiceOidObject ID for Azure Batch on the user’s tenant (Can be found by running the command az ad sp show --id ddbf3205-c6bd-46ae-8127-60eb93363864 --query objectId)
- -
Optional parameters (default values are set but can be overridden)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Parameter NameDefault ValueDescription
locationResource group locationAzure Region where resources should be deployed
storageAccountNameprefix + “storage”Name for Azure Blob Storage account (Total of 3-24 alphanumeric characters including prefix)
storageSkuStandard_LRS*Azure Storage SKU
storageNewOrExistingnewSpecify whether to use an existing storage account or create a new one (Allowed values: new or existing)
offerSkudragen-4-2SKU for the DRAGEN offer in the Marketplace
vmImageVersion4.2.4DRAGEN version
- -

*NOTE: The “Premium” type SKUs are not currently supported by this offering.

- -

Sample ARM Template Deployment

- -

The following sample deploys the ARM template into a resource group using the Azure CLI deployment group create command:

- -
# Set variables for command inputs
-RESOURCE_GROUP_NAME="dragen-rg"
-LOCATION="EastUS"
-PREFIX="dragen"
-BATCH_OID=<Batch Object Id for your tenant - see Parameters section>
-
-# Create a resource group
-az group create -n "$RESOURCE_GROUP_NAME" -l "$LOCATION"
-
-# Deploy the ARM template
-az deployment group create \
-    -g "$RESOURCE_GROUP_NAME" \
-    -p prefix="$PREFIX" \
-    -p azureBatchServiceOid="$BATCH_OID" \
-    -f mainTemplate.json \
-    --query "properties.outputs"
-
- -

Using a New vs. Existing Storage Account

- -

By default, the ARM template included with this quickstart creates a new storage account and container. Some users may already have data uploaded to an existing Azure Blob Storage account. To use existing storage, specify the following input parameters to the ARM template in your deployment:

- - - -

Batch Job & Task Timeout

- -

It is possible to set a max run time on either the batch job or batch task.

- -

The below command will terminate the batch job as well as all tasks within -it after the job has been present for 360 minutes.

- - - -
az batch job set \
-    --job-id $JOB_ID \
-    --on-all-tasks-complete "terminatejob" \
-    --job-max-wall-clock-time "PT360M"
-
- -

If you would like to set a max run time on the batch task instead, you can add -the following section to the task.json:

- -
"constraints": {
-    "maxWallClockTime": "PT360M"
-}
-
- -

Other Deployment Considerations

- -

After deploying DRAGEN on Azure, users will want to take into account the following additional deployment considerations and options, which are not included as part of this quickstart template:

- - - -

Decisions regarding implementation of any of the above are left to the end user’s discretion.

- -


- -

Testing using the Azure CLI

- -

Once your batch account infrastructure has been created, the following guide -can be used to create batch jobs and tasks. This guide makes use of the -Azure CLI.

- -

Azure CLI Authentication

- -

The first step is to make sure you are -authenticated -through Azure CLI, -and using the subscription in which your batch account has been provisioned.

- -

Batch Account Login

- -

You will need to authenticate with the provisioned batch account in order to -create jobs and tasks.

- -
az batch account login -n <batch account name> -g <resource group name>
-
- -

Create Batch Job

- -

Once authenticated, the next step is to create a batch job using the following variables:

- - - -
az batch job create --id <JOB_ID> --pool-id <POOL_ID>
-
- -

Create Batch Task

- -

Once the batch job has been created, a task can be added to it. This can be done using the JOB_ID and -a task.json specification file:

- - - -

Batch Command

- -

The command passed to the batch task is what will run once the batch task -starts. The following is an example that will run a series of commands -using bash.

- -

This example takes advantage of bash to execute commands, as well as make sure that -environment variables -are available. The following are example environment variables and bash command:

- - - -
/bin/bash -c \
-"mkdir <REF_DIR> <OUT_DIR>; \
-tar xvf dragen.tar -C <REF_DIR>; \
-/opt/edico/bin/dragen --partial-reconfig HMM --ignore-version-check true; \
-/opt/edico/bin/dragen -f -r <REF_DIR> \
-    -1 <FQ1> \
-    -2 <FQ2> \
-    --RGID <RGID> \
-    --RGSM <RGSM> \
-    --enable-bam-indexing true \
-    --enable-map-align-output true \
-    --enable-sort true \
-    --output-file-prefix <OUTPUT_PREFIX> \
-    --enable-map-align true \
-    --output-format BAM \
-    --output-directory <OUT_DIR> \
-    --enable-variant-caller true \
-    --lic-server <LICENSE>"
-
- -

SAS

- -

The following example will generate a full URL with SAS token to access a -file in a private blob storage account. This is useful when wanting to -obtain read access to a specific file in a protected storage account.

- - - -
az storage blob generate-sas \
-    --name <BLOB_PATH> \
-    --account-name <STORAGE_ACCOUNT> \
-    --account-key <STORAGE_ACCOUNT_KEY> \
-    --container-name <CONTAINER_NAME> \
-    --expiry <EXPIRE_DATE> \
-    --permissions r \
-    --https \
-    --full-uri \
-    --output tsv
-
- -

If obtaining write access to a container within a storage account is -necessary, a slightly different command can be used.

- -
az storage container generate-sas \
-    --name <CONTAINER_NAME> \
-    --account-name <STORAGE_ACCOUNT> \
-    --expiry <EXPIRE_DATE> \
-    --permissions aclrw \
-    --https-only \
-    --output tsv
-
- -

In this case, the SAS token returned by the command will need to be -appended to the container URL, for example:

- -
CONTAINER_URL="https://<STORAGE_ACCOUNT>.blob.core.windows.net/<CONTAINER>?<SAS_TOKEN>"
-
- - - -

Resource Files

- -

In this example, both the genome file and the FASTQ files need to be on the -batch node when running the batch command. This script takes advantage of the -resourceFiles configuration to facilitate this.

- -

If the genome tarball and FASTQ files are in a private blob storage account, a -SAS token will need to be generated to allow batch to download the file.

- -
"resourceFiles": [{
-    "filePath": "dragen.tar",
-    "httpUrl": "$GENOME_URL"
-}, {
-    "filePath": "1.fq.gz",
-    "httpUrl": "$FQ1_URL"
-}, {
-    "filePath": "2.fq.gz",
-    "httpUrl": "$FQ2_URL"
-}]
-
- - - -

Output Files

- -

Output files configuration tells batch tasks to write certain files to external -locations, triggered by certain events. We will use this feature in this example -to get various logs and DRAGEN output out to our storage container at the end -of the run.

- - - -
"outputFiles": [{
-    "filePattern": "../stdout.txt",
-    "destination": {
-        "container": {
-            "containerUrl": "<CONTAINER_URL>",
-            "path": "<TASK_ID>/stdout.txt"
-        }
-    },
-    "uploadOptions": {
-        "uploadCondition": "taskcompletion"
-    }
-}, {
-    "filePattern": "../stderr.txt",
-    "destination": {
-        "container": {
-            "containerUrl": "<CONTAINER_URL>",
-            "path": "<TASK_ID>/stderr.txt"
-        }
-    },
-    "uploadOptions": {
-        "uploadCondition": "taskcompletion"
-    }
-}, {
-    "filePattern": "<OUT_DIR>/**/*",
-    "destination": {
-        "container": {
-            "containerUrl": "<CONTAINER_URL>",
-            "path": "<TASK_ID>/<OUT_DIR>"
-        }
-    },
-    "uploadOptions": {
-        "uploadCondition": "taskcompletion"
-    }
-}, {
-    "filePattern": "/var/log/dragen.log",
-    "destination": {
-        "container": {
-            "containerUrl": "<CONTAINER_URL>",
-            "path": "<TASK_ID>/log/dragen.log"
-        }
-    },
-    "uploadOptions": {
-        "uploadCondition": "taskcompletion"
-    }
-}, {
-    "filePattern": "/var/log/dragen/**/*",
-    "destination": {
-        "container": {
-            "containerUrl": "<CONTAINER_URL>",
-            "path": "<TASK_ID>/log/dragen"
-        }
-    },
-    "uploadOptions": {
-        "uploadCondition": "taskcompletion"
-    }
-}]
-
- -

task.json

- -

The overall structure of the task.json will look like the following, -with each of the sections described in detail above.

- -
{
-    "id": "<TASK_ID>",
-    "commandLine": "<COMMAND>",
-    "resourcesFiles": [<RESOURCE_FILES>],
-    "outputFiles": [<OUTPUT_FILES>]
-}
-
- -

Create Task

- -

With the command generated to run within the task, and accessible URLs -generated for the genome tarball and FASTQ files, the following command -can be used to create the batch task:

- -

The following URLs must either be public, or private but made accessible -(for example, with a SAS token):

- - - -
az batch task create \
-    --job-id <JOB_ID> \
-    --json-file task.json
-
- - - -

Working Example

- -
Batch Job Create
- -
az batch job create --id job1 --pool-id mypool
-
- -
Create $COMMAND
- -

The following command line string is assigned to the $COMMAND variable.

- -
$COMMAND Variable
- -
COMMAND=$(cat <<EOF
-
-/bin/bash -c \
-"mkdir dragen output; \
-tar xvf dragen.tar -C dragen; \
-/opt/edico/bin/dragen --partial-reconfig HMM --ignore-version-check true; \
-/opt/edico/bin/dragen -f -r dragen \
-    -1 1.fq.gz \
-    -2 2.fq.gz \
-    --RGID NA24385-AJ-Son-R1-NS_S33 \
-    --RGSM NA24385-AJ-Son-R1-NS_S33 \
-    --enable-bam-indexing true \
-    --enable-map-align-output true \
-    --enable-sort true \
-    --output-file-prefix NA24385-AJ-Son-R1-NS_S33 \
-    --enable-map-align true \
-    --output-format BAM \
-    --output-directory output \
-    --enable-variant-caller true \
-    --lic-server <LICENSE>"
-
-EOF
-)
-
- -

This one-liner achieves the following:

- -
    -
  1. Sets up Genome and Output directories
  2. -
  3. Unarchives the genome file
  4. -
  5. Runs a partial reconfig on the FPGA
  6. -
  7. Runs DRAGEN
  8. -
- -

The $COMMAND variable is now interpolated in the task.json file below.

- -
Create task.json
- -
{
-    "id": "task1",
-    "commandLine": "$COMMAND",
-    "resourceFiles": [{
-        "filePath": "dragen.tar",
-        "httpUrl": "https://dragentestdata.blob.core.windows.net/reference-genomes/Hsapiens/hash-tables/hg38-alt_masked.cnv.graph.hla.rna-9-r3.0-1.tar"
-    }, {
-        "filePath": "1.fq.gz",
-        "httpUrl": "https://dragentestdata.blob.core.windows.net/samples/wes/NA24385-AJ-Son-R1-NS_S33/NA24385-AJ-Son-R1-NS_S33_L001_R1_001.fastq.gz"
-    }, {
-        "filePath": "2.fq.gz",
-        "httpUrl": "https://dragentestdata.blob.core.windows.net/samples/wes/NA24385-AJ-Son-R1-NS_S33/NA24385-AJ-Son-R1-NS_S33_L001_R2_001.fastq.gz"
-    }],
-    "outputFiles": [{
-        "filePattern": "../stdout.txt",
-        "destination": {
-            "container": {
-                "containerUrl": "$CONTAINER_URL",
-                "path": "task1/stdout.txt"
-            }
-        },
-        "uploadOptions": {
-            "uploadCondition": "taskcompletion"
-        }
-    }, {
-        "filePattern": "../stderr.txt",
-        "destination": {
-            "container": {
-                "containerUrl": "$CONTAINER_URL",
-                "path": "task1/stderr.txt"
-            }
-        },
-        "uploadOptions": {
-            "uploadCondition": "taskcompletion"
-        }
-    }, {
-        "filePattern": "output/**/*",
-        "destination": {
-            "container": {
-                "containerUrl": "$CONTAINER_URL",
-                "path": "task1/output"
-            }
-        },
-        "uploadOptions": {
-            "uploadCondition": "taskcompletion"
-        }
-    }, {
-        "filePattern": "/var/log/dragen.log",
-        "destination": {
-            "container": {
-                "containerUrl": "$CONTAINER_URL",
-                "path": "task1/log/dragen.log"
-            }
-        },
-        "uploadOptions": {
-            "uploadCondition": "taskcompletion"
-        }
-    }, {
-        "filePattern": "/var/log/dragen/**/*",
-        "destination": {
-            "container": {
-                "containerUrl": "<CONTAINER_URL>",
-                "path": "task1/log/dragen"
-            }
-        },
-        "uploadOptions": {
-            "uploadCondition": "taskcompletion"
-        }
-    }]
-}
-
- -
Batch Task Create
- -
az batch task create \
-    --job-id job1 \
-    --json-file task.json
-
- -

File Streaming

- -

While it is always necessary to have the genome file saved locally on the node, DRAGEN can stream input FASTQ files and -BAMs from private Azure Blob containers for faster processing. DRAGEN does not currently support streaming from public -Blob containers.

- -

Blob storage authentication has been improved with DRAGEN v3.10. Credential management is now controlled via environment -variables used in the Azure SDK, allowing support for Azure SAS streaming and BLOB identity-based credential management. -Support for Azure managed identity authentication was introduced with v3.10.

- -

Starting with DRAGEN v3.10, the need for and use of the “~/.azure-credentials” file for input streaming has been -deprecated. New environment variables were introduced for input streaming. Environment variables remove the -need for file parsing logic. Using access keys will improve security since the key will only live in memory.

- -

DRAGEN v3.10 supports two cases for Azure authentication:

- - - -

When using storage account access keys for authentication, DRAGEN can read from Azure Blob storage regardless of whether -it is run on or off Azure. To use this method of authentication, “AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME” and -“AZ_ACCOUNT_KEY=$STORAGE_ACCOUNT_KEY” environment variables must precede the DRAGEN invocation on the command line, -e.g.:

- -
sudo AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME AZ_ACCOUNT_KEY=$STORAGE_ACCOUNT_KEY \
-/opt/edico/bin/dragen -f -r $ref \
--1 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R1_001.fastq.gz' \
--2 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R2_001.fastq.gz' \
-...
-
- -

Authentication with -managed identities -is only available to DRAGEN when run on Azure. The DRAGEN VMs must have Contributor permissions (read/write) to the -Storage Account that it wants to read from using managed identities authentication. In order to grant these permissions -to a VM, a managed identity is needed. System-assigned managed identities can be assigned during creation of a VM or to -existing VMs using either the -Azure Portal -or Azure CLI. -User-assigned managed identities can also be assigned during creation of a VM if the -Azure CLI -is used for creation. However, user-assigned managed identities cannot be assigned at time of creation to VMs that are -created using the portal. Assignment of user-assigned managed identities to portal-created VMs can only be performed -after creation of the VM. In this case, the user-assigned managed identity must first be created using the -portal -or CLI -before being assigned to an existing VM, which can also be performed either with the -portal -or CLI. -After assigning a managed identity to a VM, it must be granted permission to a storage account using either the -portal -or CLI.

- -

If a single managed identity exists on a VM, only the “AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME” environment -variable is required to stream inputs with DRAGEN. For VMs with multiple managed identities, the -“AZR_IDENT_CLIENT_ID=$IDENTITY_CLIENT_ID” environment variable with the client id of the managed identity that can access the -storage container must also be specified. To use managed identities authentication, these environment variables must -precede the DRAGEN invocation on the command line, e.g. (for a VM with multiple managed identities):

- -
sudo AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME AZR_IDENT_CLIENT_ID=$IDENTITY_CLIENT_ID \
-/opt/edico/bin/dragen -f -r $ref \
--1 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R1_001.fastq.gz' \
--2 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R2_001.fastq.gz' \
-...
-
- -
Stream from Azure Blob Storage
- -

The following parameters are needed for streaming from Blob storage using storage account access keys:

- - - -
$COMMAND Variable for Streaming FASTQ Inputs with Storage Account Access Key
- -

The following is an example $COMMAND variable that streams FASTQ inputs from Blob storage using a storage account -access key:

- -
COMMAND=$(cat <<EOF
-
-/bin/bash -c \
-"mkdir dragen output; \
-tar xvf dragen.tar -C dragen; \
-/opt/edico/bin/dragen --partial-reconfig HMM --ignore-version-check true; \
-AZ_ACCOUNT_NAME=<STORAGE_ACCOUNT_NAME> \
-AZ_ACCOUNT_KEY=<STORAGE_ACCOUNT_KEY> \
-/opt/edico/bin/dragen -f -r dragen \
-    -1 <FQ1_URL> \
-    -2 <FQ2_URL> \
-    --RGID <RGID> \
-    --RGSM <RGSM> \
-    --enable-bam-indexing true \
-    --enable-map-align-output true \
-    --enable-sort true \
-    --output-file-prefix <OUTPUT_PREFIX> \
-    --enable-map-align true \
-    --output-format BAM \
-    --output-directory output \
-    --enable-variant-caller true \
-    --lic-server <LICENSE>"
-
-EOF
-)
-
- -

The following parameters are needed for streaming from Blob storage using Azure managed identities authentication:

- - - -
$COMMAND Variable for Streaming FASTQ Inputs with Managed Identities
- -

The following is an example $COMMAND variable that streams FASTQ inputs from Blob storage using a VM with more than -one managed identities:

- -
COMMAND=$(cat <<EOF
-
-/bin/bash -c \
-"mkdir dragen output; \
-tar xvf dragen.tar -C dragen; \
-/opt/edico/bin/dragen --partial-reconfig HMM --ignore-version-check true; \
-AZ_ACCOUNT_NAME=<STORAGE_ACCOUNT_NAME> \
-AZR_IDENT_CLIENT_ID=<IDENTITY_CLIENT_ID> \
-/opt/edico/bin/dragen -f -r dragen \
-    -1 <FQ1_URL> \
-    -2 <FQ2_URL> \
-    --RGID <RGID> \
-    --RGSM <RGSM> \
-    --enable-bam-indexing true \
-    --enable-map-align-output true \
-    --enable-sort true \
-    --output-file-prefix <OUTPUT_PREFIX> \
-    --enable-map-align true \
-    --output-format BAM \
-    --output-directory output \
-    --enable-variant-caller true \
-    --lic-server <LICENSE>"
-
-EOF
-)
-
- -

The above examples achieve the same as the $COMMAND before with the addition of the -environment variables required for streaming inputs from Blob storage: AZ_ACCOUNT_NAME and AZ_ACCESS_KEY or -AZ_ACCOUNT_NAME and AZR_IDENT_CLIENT_ID.

- -

In these cases, the FASTQ files will no longer need to be referenced in the resourceFiles in the task.json

- -
FASTQ List
- -

If using a FASTQ list file to reference and stream FASTQ files, the FASTQ list file must -also be local to the node. The FASTQ files referenced in the FASTQ list can be in the form of URLs -to files on an Azure Storage Account, in which case, the FASTQs will be streamed by DRAGEN.

- -

The following is an example of streaming inputs with a FASTQ list using the -resourceFiles configuration as well as a SAS token to access the FASTQ list file in Azure Blob Storage. -This is stored as the $LIST_URL variable.

- -
$LIST_URL for Input Streaming
- -
LIST_URL=$(az storage blob generate-sas \
-    --name <FASTQ_LIST_BLOB_PATH> \
-    --account-name <STORAGE_ACCOUNT> \
-    --account-key <STORAGE_ACCOUNT_KEY> \
-    --container-name <CONTAINER_NAME> \
-    --expiry <EXPIRE_DATE> \
-    --permissions r \
-    --https \
-    --full-uri \
-    --output tsv)
-
- -

In this example, the FASTQ files will be streamed from Azure Blob Storage using a storage account access key. Hence, we -will once again need the AZ_ACCOUNT_NAME and AZ_ACCESS_KEY environment variables in the $COMMAND Variable. If using -managed identities to stream the FASTQ files, use the AZ_ACCOUNT_NAME (for VMs with a single managed identity) or -AZ_ACCOUNT_NAME and AZR_IDENT_CLIENT_ID (for VMs with multiple managed identities), instead.

- -
$COMMAND Variable for Input Streaming with FASTQ List and Storage Account Access Key
- -
COMMAND=$(cat <<EOF
-
-/bin/bash -c \
-"mkdir dragen output; \
-tar xvf dragen.tar -C dragen; \
-/opt/edico/bin/dragen --partial-reconfig HMM --ignore-version-check true; \
-AZ_ACCOUNT_NAME=<STORAGE_ACCOUNT_NAME> \
-AZ_ACCOUNT_KEY=<STORAGE_ACCOUNT_KEY> \
-/opt/edico/bin/dragen -f -r dragen \
-    --fastq-list fastq_list.csv \
-    --fastq-list-sample-id <RGSM> \
-    --enable-bam-indexing true \
-    --enable-map-align-output true \
-    --enable-sort true \
-    --output-file-prefix <OUTPUT_PREFIX> \
-    --enable-map-align true \
-    --output-format BAM \
-    --output-directory output \
-    --enable-variant-caller true \
-    --lic-server <LICENSE>"
-
-EOF
-)
-
- -
task.json resourceFiles for FASTQ List Input
- -
"resourceFiles": [{
-    "filePath": "dragen.tar",
-    "httpUrl": "$GENOME_URL"
-}, {
-    "filePath": "fastq_list.csv",
-    "httpUrl": "$LIST_URL"
-}]
-
- -
Example Bash Script
- -

An example bash script using some of the commands shown above is available for reference. -There is a required LICENSE_URL environment variable, as well as some variables within the script -that must be set before running it, ie:

- -
LICENSE_URL=https://<username>:<password>@license.edicogenome.com ./create-batch-task.sh
-
- -

There are accompanying comments within the bash script to help set these.

- -


- -


- -

Troubleshooting

- -

ARM Deployment

- -

If you are running into issues getting the infrastructure spun up through the -ARM template, there are a few options for debugging:

- -
    -
  1. -

    If the resource group was created, navigate to the resource group, and -then the deployments menu option. Here you will find the list of deployments -tied to this resource group, and navigating deeper into each deployment -may show additional information for the deployment of each resource.

    -
  2. -
  3. -

    Open the Activity Log -for an additional source of information for recent issues within your subscription.

    -
  4. -
- -

Batch Tasks

- -

If you are running into issues getting your batch task to run successfully, -the best place to get information to help debug the problem is within the -stdout and stderr of the batch task itself. This can be accessed by navigating -to your batch account in the portal, and then to the specific job and task -that ran. Once there, you will be able to access stdout.txt and stderr.txt:

- -

batch-task-file-list

- -

DRAGEN Issues

- -

For failed DRAGEN runs, navigate to the batch account in the portal, then job and task associated with the failed run -to view DRAGEN log files.

- -

Common Issues

- -
    -
  1. -

    Quota issues: If quota increases haven’t been requested, it can be common -to run into quota issues for both the number of batch accounts as well as for -the Standard NPS Family vCPUs. Please make sure you have available -quota before deploying the ARM template.

    -
  2. -
  3. -

    Input file streaming: Currently, DRAGEN does not support input streaming -from public Blob containers. Input files from private Blob containers can be -streamed provided that the proper storage credentials are passed to the batch -command.

    -
  4. -
  5. -

    Command lines: Ensure that variables supplied to Azure CLI commands (e.g., account keys, license URLs, names of -resource groups, batch accounts, storage accounts and containers, batch pools, etc.) are correct. Ensure that DRAGEN -command lines are formed properly and that the correct variables are passed to it.

    -
  6. -
  7. -

    Task JSON: Ensure that keys and values supplied to the json task file are correct and complete. Ensure that the -file adheres to JSON formatting rules.

    -
  8. -
  9. -

    Authentication: Ensure that the Azure CLI is authenticated for use with the proper subscription prior to creating -resource groups and deploying ARM templates. Log in to the proper Azure batch account prior to creating -batch jobs and tasks. Provide the required authentication (e.g., SAS tokens) for private storage accounts and/or -input files, as needed. Ensure that sufficient expiration periods are specified when generating authentication tokens.

    -
  10. -
- -


- -

Additional Resources

- - - -


- -

Contributing

- -

Contributions are welcome!

- -

https://github.com/Illumina/dragen-azure-quickstart

- -

As the documentation within the above repository is not directly managed through the repository, please do not submit pull requests.

- -

How to contribute

- -

When you have an idea for contribution, or want to report a bug or issue, please open an issue!

- -

Feedback

- -

Please open a issue if you would like to provide any feedback on the contents of this repository.

- -


- -

Notices

- -

This document is provided for informational purposes only. It represents Azure’s current product offerings and practices as of the date of issue of this document, which are subject to change without notice. Customers are responsible for making their own independent assessment of the information in this document and any use of Azure’s products or services, each of which is provided “as is” without warranty of any kind, whether expressed or implied. This document does not create any warranties, representations, contractual commitments, conditions, or assurances from Azure, its affiliates, suppliers, or licensors. The responsibilities and liabilities of Azure to its customers are controlled by Azure agreements, and this document is not part of, nor does it modify, any agreement between Azure and its customers.

- - - -

Microsoft and any contributors grant you a license to the Microsoft documentation and other content in this repository under the Creative Commons Attribution 4.0 International Public License, see the LICENSE file, and grant you a license to any code in the repository under the MIT License, see the LICENSE-CODE file.

- -

Microsoft, Windows, Microsoft Azure and/or other Microsoft products and services referenced in the documentation may be either trademarks or registered trademarks of Microsoft in the United States and/or other countries. The licenses for this project do not grant you rights to use any Microsoft names, logos, or trademarks. Microsoft’s general trademark guidelines can be found at http://go.microsoft.com/fwlink/?LinkID=254653.

- -


- -

Privacy

- -

Privacy information can be found at https://privacy.microsoft.com/en-us/

- -

Microsoft and any contributors reserve all others rights, whether under their respective copyrights, patents, or trademarks, whether by implication, estoppel or otherwise.

- -


- -:ET \ No newline at end of file diff --git a/4.2.4/tutorial-docs/404.html b/4.2.4/tutorial-docs/404.html deleted file mode 100644 index c472b4e..0000000 --- a/4.2.4/tutorial-docs/404.html +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: default ---- - - - -
-

404

- -

Page not found :(

-

The requested page could not be found.

-
diff --git a/4.2.4/tutorial-docs/Gemfile b/4.2.4/tutorial-docs/Gemfile deleted file mode 100644 index 34aae02..0000000 --- a/4.2.4/tutorial-docs/Gemfile +++ /dev/null @@ -1,9 +0,0 @@ -source 'https://rubygems.org' - -gem 'jekyll', '~> 4.2' - -gem 'jekyll-theme-hydeout', '~> 4.2' - -group :development do - gem "webrick", "~> 1.7" -end diff --git a/4.2.4/tutorial-docs/Gemfile.lock b/4.2.4/tutorial-docs/Gemfile.lock deleted file mode 100644 index ec31acd..0000000 --- a/4.2.4/tutorial-docs/Gemfile.lock +++ /dev/null @@ -1,101 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - addressable (2.7.0) - public_suffix (>= 2.0.2, < 5.0) - colorator (1.1.0) - concurrent-ruby (1.1.9) - em-websocket (0.5.2) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0.6.0) - eventmachine (1.2.7) - faraday (1.4.3) - faraday-em_http (~> 1.0) - faraday-em_synchrony (~> 1.0) - faraday-excon (~> 1.1) - faraday-net_http (~> 1.0) - faraday-net_http_persistent (~> 1.1) - multipart-post (>= 1.2, < 3) - ruby2_keywords (>= 0.0.4) - faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) - faraday-excon (1.1.0) - faraday-net_http (1.0.1) - faraday-net_http_persistent (1.1.0) - ffi (1.15.3) - forwardable-extended (2.6.0) - http_parser.rb (0.6.0) - i18n (1.8.10) - concurrent-ruby (~> 1.0) - jekyll (4.2.0) - addressable (~> 2.4) - colorator (~> 1.0) - em-websocket (~> 0.5) - i18n (~> 1.0) - jekyll-sass-converter (~> 2.0) - jekyll-watch (~> 2.0) - kramdown (~> 2.3) - kramdown-parser-gfm (~> 1.0) - liquid (~> 4.0) - mercenary (~> 0.4.0) - pathutil (~> 0.9) - rouge (~> 3.0) - safe_yaml (~> 1.0) - terminal-table (~> 2.0) - jekyll-feed (0.15.1) - jekyll (>= 3.7, < 5.0) - jekyll-gist (1.5.0) - octokit (~> 4.2) - jekyll-paginate (1.1.0) - jekyll-sass-converter (2.1.0) - sassc (> 2.0.1, < 3.0) - jekyll-theme-hydeout (4.2.0) - jekyll (>= 3.6, < 5.0) - jekyll-feed (~> 0.6) - jekyll-gist (~> 1.4) - jekyll-paginate (~> 1.1) - jekyll-watch (2.2.1) - listen (~> 3.0) - kramdown (2.3.1) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - liquid (4.0.3) - listen (3.5.1) - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) - mercenary (0.4.0) - multipart-post (2.1.1) - octokit (4.21.0) - faraday (>= 0.9) - sawyer (~> 0.8.0, >= 0.5.3) - pathutil (0.16.2) - forwardable-extended (~> 2.6) - public_suffix (4.0.6) - rb-fsevent (0.11.0) - rb-inotify (0.10.1) - ffi (~> 1.0) - rexml (3.2.5) - rouge (3.26.0) - ruby2_keywords (0.0.4) - safe_yaml (1.0.5) - sassc (2.4.0) - ffi (~> 1.9) - sawyer (0.8.2) - addressable (>= 2.3.5) - faraday (> 0.8, < 2.0) - terminal-table (2.0.0) - unicode-display_width (~> 1.1, >= 1.1.1) - unicode-display_width (1.7.0) - webrick (1.7.0) - -PLATFORMS - ruby - -DEPENDENCIES - jekyll (~> 4.2) - jekyll-theme-hydeout (~> 4.2) - webrick (~> 1.7) - -BUNDLED WITH - 2.2.3 diff --git a/4.2.4/tutorial-docs/LICENSE b/4.2.4/tutorial-docs/LICENSE deleted file mode 100644 index e056e7c..0000000 --- a/4.2.4/tutorial-docs/LICENSE +++ /dev/null @@ -1,395 +0,0 @@ -Attribution 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More_considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution 4.0 International Public License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution 4.0 International Public License ("Public License"). To the -extent this Public License may be interpreted as a contract, You are -granted the Licensed Rights in consideration of Your acceptance of -these terms and conditions, and the Licensor grants You such rights in -consideration of benefits the Licensor receives from making the -Licensed Material available under these terms and conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Adapter's License means the license You apply to Your Copyright - and Similar Rights in Your contributions to Adapted Material in - accordance with the terms and conditions of this Public License. - - c. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - - d. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - e. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - f. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - g. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - h. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - i. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - j. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - k. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part; and - - b. produce, reproduce, and Share Adapted Material. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material (including in modified - form), You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - 4. If You Share Adapted Material You produce, the Adapter's - License You apply must not prevent recipients of the Adapted - Material from complying with this Public License. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material; and - - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - - -======================================================================= - -Creative Commons is not a party to its public -licenses. Notwithstanding, Creative Commons may elect to apply one of -its public licenses to material it publishes and in those instances -will be considered the “Licensor.” The text of the Creative Commons -public licenses is dedicated to the public domain under the CC0 Public -Domain Dedication. Except for the limited purpose of indicating that -material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the -public licenses. - -Creative Commons may be contacted at creativecommons.org. \ No newline at end of file diff --git a/4.2.4/tutorial-docs/LICENSE-CODE b/4.2.4/tutorial-docs/LICENSE-CODE deleted file mode 100644 index b17b032..0000000 --- a/4.2.4/tutorial-docs/LICENSE-CODE +++ /dev/null @@ -1,17 +0,0 @@ -The MIT License (MIT) -Copyright (c) Microsoft Corporation - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT -NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/4.2.4/tutorial-docs/_config.yml b/4.2.4/tutorial-docs/_config.yml deleted file mode 100644 index 7f15c80..0000000 --- a/4.2.4/tutorial-docs/_config.yml +++ /dev/null @@ -1,44 +0,0 @@ -# Welcome to Jekyll! -# -# This config file is meant for settings that affect your whole blog, values -# which you are expected to set up once and rarely edit after that. If you find -# yourself editing this file very often, consider using Jekyll's data files -# feature for the data you need to update frequently. -# -# For technical reasons, this file is *NOT* reloaded automatically when you use -# 'bundle exec jekyll serve'. If you change this file, please restart the -# server process. - -# Site settings -# These are used to personalize your new site. If you look in the HTML files, -# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. -# You can create any custom variable you would like, and they will be accessible -# in the templates via {{ site.myvariable }}. -title: DRAGEN on Azure -email: your-email@example.com -description: >- # this means to ignore newlines until "baseurl:" - Quickstart -baseurl: "" # the subpath of your site, e.g. /blog -url: "" # the base hostname & protocol for your site, e.g. http://example.com -twitter_username: jekyllrb -github_username: jekyll - -# Build settings -markdown: kramdown -theme: jekyll-theme-hydeout -plugins: - - jekyll-feed - -dragen_version: 3.8.4-1 - -# Exclude from processing. -# The following items will not be processed, by default. Create a custom list -# to override the default setting. -# exclude: -# - Gemfile -# - Gemfile.lock -# - node_modules -# - vendor/bundle/ -# - vendor/cache/ -# - vendor/gems/ -# - vendor/ruby/ diff --git a/4.2.4/tutorial-docs/_includes/custom-nav-links.html b/4.2.4/tutorial-docs/_includes/custom-nav-links.html deleted file mode 100644 index b944d31..0000000 --- a/4.2.4/tutorial-docs/_includes/custom-nav-links.html +++ /dev/null @@ -1,3 +0,0 @@ -
- -{% include nav.html nav=page.nav %} diff --git a/4.2.4/tutorial-docs/_includes/head.html b/4.2.4/tutorial-docs/_includes/head.html deleted file mode 100644 index 2d74a2c..0000000 --- a/4.2.4/tutorial-docs/_includes/head.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - {% if page.title == "Home" %} - {{ site.title }}{% if site.tagline %} · {{ site.tagline }}{% endif %} - {% else %} - {{ page.title }} · {{ site.title }} - {% endif %} - - - {% include google-analytics.html %} - - - - - {% include font-includes.html %} - - - {% include favicons.html %} - - - - - {% include custom-head.html %} - - \ No newline at end of file diff --git a/4.2.4/tutorial-docs/_includes/include_content.html b/4.2.4/tutorial-docs/_includes/include_content.html deleted file mode 100644 index f715863..0000000 --- a/4.2.4/tutorial-docs/_includes/include_content.html +++ /dev/null @@ -1,14 +0,0 @@ - - -{% for item in include.nav %} -

{{ item.title }}

-{% if item.file %} - -{% include_relative {{ item.file }} %} -{% endif %} - -{% if item.subnav %} -{% include include_content.html nav=item.subnav %} -{% endif %} -
-{% endfor %} diff --git a/4.2.4/tutorial-docs/_includes/nav.html b/4.2.4/tutorial-docs/_includes/nav.html deleted file mode 100644 index 4908db3..0000000 --- a/4.2.4/tutorial-docs/_includes/nav.html +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/4.2.4/tutorial-docs/_includes/sidebar.html b/4.2.4/tutorial-docs/_includes/sidebar.html deleted file mode 100644 index a2172e5..0000000 --- a/4.2.4/tutorial-docs/_includes/sidebar.html +++ /dev/null @@ -1,58 +0,0 @@ - - diff --git a/4.2.4/tutorial-docs/_layouts/page.html b/4.2.4/tutorial-docs/_layouts/page.html deleted file mode 100644 index bc9b49c..0000000 --- a/4.2.4/tutorial-docs/_layouts/page.html +++ /dev/null @@ -1,48 +0,0 @@ ---- -layout: default ---- - -
-
- -
-
- {{ content }} -
-{% include back-link.html %} - - diff --git a/4.2.4/tutorial-docs/additional-resources.md b/4.2.4/tutorial-docs/additional-resources.md deleted file mode 100644 index f347422..0000000 --- a/4.2.4/tutorial-docs/additional-resources.md +++ /dev/null @@ -1,2 +0,0 @@ -* [DRAGEN Infrastructure ARM Template](mainTemplate.json) -* [DRAGEN User Guide](https://support.illumina.com/downloads/illumina-dragen-bio-it-platform-user-guide.html) diff --git a/4.2.4/tutorial-docs/architecture.md b/4.2.4/tutorial-docs/architecture.md deleted file mode 100644 index 8d78aa9..0000000 --- a/4.2.4/tutorial-docs/architecture.md +++ /dev/null @@ -1,62 +0,0 @@ -### Supported Regions - -DRAGEN on Azure is available in regions where FPGA-enabled [Standard NP Family VMs](https://docs.microsoft.com/en-us/azure/virtual-machines/np-series) are available. At the time of this writing, supported regions currently include: - -* West US 2 -* East US -* South Central US -* Southeast Asia (Singapore) -* West Europe (Amsterdam) - -For the most current information on available regions, see the NP-series row of the chart [here](https://azure.microsoft.com/en-us/global-infrastructure/services/?products=virtual-machines). - -### Architecture Diagram - -![architecture-diagram](./images/dragen-on-azure.png) - -### Resource List - -List of Azure resources that are deployed by this quickstart if default settings and parameters are used: - -* [Azure Blob Storage Account](https://docs.microsoft.com/en-us/azure/storage/common/storage-account-overview) for input and output data - * Note: A new storage account is created by default, although users have the option to specify an existing storage account - see section on additional deployment configurations - * [Blob Storage Container](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction#containers) -* [Azure Batch Account](https://docs.microsoft.com/en-us/azure/batch/batch-technical-overview) for managing and scheduling DRAGEN jobs. - * Provisioned in [User Subscription Mode](#user-subscription-node-pools). - * [Node pool](https://docs.microsoft.com/en-us/azure/batch/nodes-and-pools) backed by one [NP-series VM](https://docs.microsoft.com/en-us/azure/virtual-machines/np-series) (fixed scale). -* [Azure Key Vault](https://docs.microsoft.com/en-us/azure/key-vault/general/basic-concepts) for batch service auth to User Subscription node pool VMs - * Note: Batch service handles auth automatically, so users do not need to take any further action after the Key Vault is created. - -### Note on Batch Node Pool Allocation - -Batch offers two options for allocation of node pools: Batch managed and user subscription modes. A single Batch Account can only support one node pool type at a time, meaning you cannot have batch managed and user subscription mode node pools under the same batch account. - -#### Batch Managed Node Pools - -When Batch Managed allocation mode is selected, users must request NP VM quota for each specific Batch instance they create. Nodes are allocated as needed from Batch-managed subscriptions. This scenario works best when users intend to persist and use one or very few Batch instances for their DRAGEN jobs. It is less ideal in situations where the creation/deletion of Batch accounts is automated or occurs frequently, as with CI/CD. - -#### User Subscription Node Pools - -When the User Subscription allocation mode is selected, users request an overall quota for NP VMs for a region within their subscription. With this model, the VMs needed for the Batch account are created directly in the user's subscription. This setup is useful for CI/CD and other cases where users are running DRAGEN across many Batch accounts within a subscription and/or the Batch accounts are short-lived. - -#### Cost Differences in Node Pool Allocation Modes - -There may be cost differences between the two different node pool allocation methods. Consider your usage scenarios and consult Azure documentation and pricing calculators to determine which approach will be most optimal for your needs. - -### Azure Costs - -Users are responsible for costs of any services deployed through this quickstart or its customization options. - -Prices are subject to change - more information can be found on the pricing pages for Azure resources deployed through this tutorial: - -* [Azure Blob Storage](https://azure.microsoft.com/en-us/pricing/details/storage/blobs/) -* [Azure Batch](https://azure.microsoft.com/en-us/pricing/details/batch/windows-virtual-machines/) - * _Note: There is currently no charge for Batch itself, only the compute resources it uses; see VM pricing below_ -* [Azure NP-series VMs](https://azure.microsoft.com/en-us/pricing/details/virtual-machines/linux/#np-series) (a NP10s is used in this reference deployment) -* [Azure Key Vault](https://azure.microsoft.com/en-us/pricing/details/key-vault/#pricing) - -Users are also responsible for costs of any licenses needed to run DRAGEN (not included in this quickstart - must be obtained separately). - -#### Estimate your Costs - -For help in estimating your costs to run DRAGEN on Azure, see the pricing calculator located [here](https://azure.microsoft.com/en-us/pricing/calculator/). diff --git a/4.2.4/tutorial-docs/assets/css/icons.css b/4.2.4/tutorial-docs/assets/css/icons.css deleted file mode 100644 index ef28b38..0000000 --- a/4.2.4/tutorial-docs/assets/css/icons.css +++ /dev/null @@ -1,146 +0,0 @@ - -@font-face { - font-family: 'icomoon'; - src: url('../icons/icons.eot.eot?5nh0xx'); - src: url('../icons/icons.eot#iefix') format('embedded-opentype'), - url('../icons/icons.ttf') format('truetype'), - url('../icons/icons.woff') format('woff'), - url('../icons/icons.svg?#icomoon') format('svg'); - font-weight: normal; - font-style: normal; - font-display: block; -} - -[class^="icon-"], [class*=" icon-"] { - /* use !important to prevent issues with browser extensions that change fonts */ - font-family: 'icomoon' !important; - speak: never; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.icon-plus:before { - content: "\ea0a"; -} - -.icon-azure:before { - content: "\e900"; - color: #0089d6; -} - -.icon-dragen:before { - content: "\e901"; - color: #fbb041; -} - -.icon-azure-text:before { - content: "\e902"; - color: #0089d6; -} - -.icon-ms-azure .path1:before { - content: "\e903"; - color: #737474; -} -.icon-ms-azure .path2:before { - content: "\e904"; - color: #737474; - margin-left: -3.54296875em; -} -.icon-ms-azure .path3:before { - content: "\e905"; - color: #737474; - margin-left: -3.54296875em; -} -.icon-ms-azure .path4:before { - content: "\e906"; - color: #737474; - margin-left: -3.54296875em; -} -.icon-ms-azure .path5:before { - content: "\e907"; - color: #737474; - margin-left: -3.54296875em; -} -.icon-ms-azure .path6:before { - content: "\e908"; - color: #737474; - margin-left: -3.54296875em; -} -.icon-ms-azure .path7:before { - content: "\e909"; - color: #f05225; - margin-left: -3.54296875em; -} -.icon-ms-azure .path8:before { - content: "\e90a"; - color: #7fbb42; - margin-left: -3.54296875em; -} -.icon-ms-azure .path9:before { - content: "\e90b"; - color: #f05125; - margin-left: -3.54296875em; -} -.icon-ms-azure .path10:before { - content: "\e90c"; - color: #7ebb42; - margin-left: -3.54296875em; -} -.icon-ms-azure .path11:before { - content: "\e90d"; - color: #33a0da; - margin-left: -3.54296875em; -} -.icon-ms-azure .path12:before { - content: "\e90e"; - color: #fdb813; - margin-left: -3.54296875em; -} - -.icon-dragen-text .path1:before { - content: "\e90f"; - color: #737474; -} -.icon-dragen-text .path2:before { - content: "\e910"; - color: #737474; - margin-left: -2.7392578125em; -} -.icon-dragen-text .path3:before { - content: "\e911"; - color: #737474; - margin-left: -2.7392578125em; -} -.icon-dragen-text .path4:before { - content: "\e912"; - color: #737474; - margin-left: -2.7392578125em; -} -.icon-dragen-text .path5:before { - content: "\e913"; - color: #737474; - margin-left: -2.7392578125em; -} -.icon-dragen-text .path6:before { - content: "\e914"; - color: #737474; - margin-left: -2.7392578125em; -} -.icon-dragen-text .path7:before { - content: "\e915"; - color: #ffb441; - margin-left: -2.7392578125em; -} -.icon-dragen-text .path8:before { - content: "\e916"; - color: #ffb441; - margin-left: -2.7392578125em; -} \ No newline at end of file diff --git a/4.2.4/tutorial-docs/assets/css/main.scss b/4.2.4/tutorial-docs/assets/css/main.scss deleted file mode 100644 index 25085d1..0000000 --- a/4.2.4/tutorial-docs/assets/css/main.scss +++ /dev/null @@ -1,66 +0,0 @@ ---- ---- - -@import "hydeout"; - -select { - padding: 5px; - border-radius: 5px; - margin-bottom: 20px; - width: 100%; - margin-left: 1.3em; -} - -.home #sidebar { - position: fixed; - top: 0; - - .site-title { - font-size: 4.0rem; - } - - .icon-dragen-text { - font-size: 1.299em; - } - - .lead { - font-size: 1.5em; - } -} - -.sidebar-nav-list > .sidebar-nav-list { - margin-left: 10px; -} - -li > ul { - margin-bottom: 0; -} - -.spacer { - text-align: center; - font-size:0.3em; - display: block; - margin: 0.35em; - color: #444; -} - -.mobile-header { display:none; } - -@media (max-width: 768px) { - .home #sidebar { - display: none; - } - - .mobile-header { - display: block; - .logo { - text-align: center; - font-size: 6.0rem; - } - } - - - #page-header { - margin: 10px auto; - } -} diff --git a/4.2.4/tutorial-docs/assets/icons/icons.eot b/4.2.4/tutorial-docs/assets/icons/icons.eot deleted file mode 100644 index fe0b204..0000000 Binary files a/4.2.4/tutorial-docs/assets/icons/icons.eot and /dev/null differ diff --git a/4.2.4/tutorial-docs/assets/icons/icons.svg b/4.2.4/tutorial-docs/assets/icons/icons.svg deleted file mode 100644 index 026a986..0000000 --- a/4.2.4/tutorial-docs/assets/icons/icons.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/4.2.4/tutorial-docs/assets/icons/icons.ttf b/4.2.4/tutorial-docs/assets/icons/icons.ttf deleted file mode 100644 index 3bd9a71..0000000 Binary files a/4.2.4/tutorial-docs/assets/icons/icons.ttf and /dev/null differ diff --git a/4.2.4/tutorial-docs/assets/icons/icons.woff b/4.2.4/tutorial-docs/assets/icons/icons.woff deleted file mode 100644 index 6cdf6ea..0000000 Binary files a/4.2.4/tutorial-docs/assets/icons/icons.woff and /dev/null differ diff --git a/4.2.4/tutorial-docs/contributing.md b/4.2.4/tutorial-docs/contributing.md deleted file mode 100644 index 1fa955c..0000000 --- a/4.2.4/tutorial-docs/contributing.md +++ /dev/null @@ -1,13 +0,0 @@ -Contributions are welcome! - -[https://github.com/Illumina/dragen-azure-quickstart](https://github.com/Illumina/dragen-azure-quickstart) - -As the documentation within the above repository is not directly managed through the repository, please do not submit pull requests. - -### How to contribute - -When you have an idea for contribution, or want to report a bug or issue, please open an [*issue*](https://github.com/Illumina/dragen-azure-quickstart/issues)! - -### Feedback - -Please open a [*issue*](https://github.com/Illumina/dragen-azure-quickstart/issues) if you would like to provide any feedback on the contents of this repository. diff --git a/4.2.4/tutorial-docs/deployment-configurations.md b/4.2.4/tutorial-docs/deployment-configurations.md deleted file mode 100644 index 286433d..0000000 --- a/4.2.4/tutorial-docs/deployment-configurations.md +++ /dev/null @@ -1,106 +0,0 @@ -### Advanced Usage: ARM Template - -Incorporating DRAGEN on Azure into an existing solution may be as easy as using the [ARM template](mainTemplate.json) that is exported alongside this documentation. - -#### Usage Scenarios - -Deployment using the ARM template enables several more advanced scenarios, such as: - -* Incorporation of infrastructure components needed for DRAGEN into an existing infrastructure -* Automated deployments via CI/CD pipelines -* Customization of the deployment to meet your needs - -#### Prerequisites for ARM Template Deployment - -Before attempting to deploy to your subscription via the ARM template, ensure that you have completed all of the [prerequisites](#prerequisites) for running DRAGEN on Azure. - -#### Parameters - -The ARM template takes the following input parameters: - -##### Required parameters (no default value set) - -| Parameter Name | Description | -| -------------- | ----------- | -| `prefix` | Prefix for resource names (1-17 alphanumeric characters) | -| `azureBatchServiceOid` | Object ID for Azure Batch on the user's tenant (Can be found by running the command `az ad sp show --id ddbf3205-c6bd-46ae-8127-60eb93363864 --query objectId`) | - -##### Optional parameters (default values are set but can be overridden) - -| Parameter Name | Default Value | Description | -| -------------- | ------------- | ----------- | -| `location` | Resource group location | Azure Region where resources should be deployed | -| `storageAccountName` | `prefix` + "storage" | Name for Azure Blob Storage account (Total of 3-24 alphanumeric characters including prefix) | -| `storageSku` | Standard_LRS* | [Azure Storage SKU](https://docs.microsoft.com/en-us/rest/api/storagerp/srp_sku_types) | -| `storageNewOrExisting` | new | Specify whether to use an existing storage account or create a new one (Allowed values: `new` or `existing`) | -| `offerSku` | dragen-4-2 | SKU for the DRAGEN offer in the Marketplace | -| `vmImageVersion` | 4.2.4 | DRAGEN version | - -***NOTE:** The "Premium" type SKUs are not currently supported by this offering. - -#### Sample ARM Template Deployment - -The following sample deploys the ARM template into a resource group using the Azure CLI [deployment group create](https://docs.microsoft.com/en-us/cli/azure/deployment/group?view=azure-cli-latest#az_deployment_group_create) command: - -```sh -# Set variables for command inputs -RESOURCE_GROUP_NAME="dragen-rg" -LOCATION="EastUS" -PREFIX="dragen" -BATCH_OID= - -# Create a resource group -az group create -n "$RESOURCE_GROUP_NAME" -l "$LOCATION" - -# Deploy the ARM template -az deployment group create \ - -g "$RESOURCE_GROUP_NAME" \ - -p prefix="$PREFIX" \ - -p azureBatchServiceOid="$BATCH_OID" \ - -f mainTemplate.json \ - --query "properties.outputs" -``` - -#### Using a New vs. Existing Storage Account - -By default, the ARM template included with this quickstart creates a new storage account and container. Some users may already have data uploaded to an existing Azure Blob Storage account. To use existing storage, specify the following input parameters to the ARM template in your deployment: - -* `storageNewOrExisting: existing` -* `storageAccountName: ` - -### Batch Job & Task Timeout - -It is possible to set a max run time on either the batch job or batch task. - -The below command will terminate the batch job as well as all tasks within -it after the job has been present for 360 minutes. - -* JOB_ID: The job id of the already created job. -* PT360M: An ISO-8601 duration, PT360M = 360 minutes. - -```sh -az batch job set \ - --job-id $JOB_ID \ - --on-all-tasks-complete "terminatejob" \ - --job-max-wall-clock-time "PT360M" -``` - -If you would like to set a max run time on the batch task instead, you can add -the following section to the task.json: - -```json -"constraints": { - "maxWallClockTime": "PT360M" -} -``` - -### Other Deployment Considerations - -After deploying DRAGEN on Azure, users will want to take into account the following additional deployment considerations and options, which are *not* included as part of this quickstart template: - -* Compliance -* Authentication -* Security -* Monitoring and Observability - -Decisions regarding implementation of any of the above are left to the end user's discretion. diff --git a/4.2.4/tutorial-docs/deployment-steps.md b/4.2.4/tutorial-docs/deployment-steps.md deleted file mode 100644 index af27bf9..0000000 --- a/4.2.4/tutorial-docs/deployment-steps.md +++ /dev/null @@ -1,26 +0,0 @@ -### Login to your Azure Portal account - -1. Log in to your Azure account in the [Azure Portal](https://portal.azure.com). -1. Ensure you have Quota for NP-series Virtual Machines, as outlined in the - pre-requisites section above, by navigating to: - - * Subscriptions -> Choose your subscription - * Click **Usages + quotas** from the left-side menu - * Filter the list by typing **NP** into the left search bar. - * You should see `Standard NPS Family vCPUs`, and a denomination. If you see - `0 of 0`, click the edit icon to request quota. - -### Deploy the Quickstart (solution template) - -1. While signed in to your Azure account, open the page for the DRAGEN Solution: - 1. Navigate to the [Marketplace](https://ms.portal.azure.com/#blade/Microsoft_Azure_Marketplace/GalleryMenuBlade/selectedMenuItemId/home) - 1. Search for "DRAGEN" and select DRAGEN Bio-IT Platform for Genomic Data Analysis on Azure Batch -1. If prompted, review the terms and conditions and then choose **Accept Terms** -1. Click **Create** -1. You'll be prompted to select a resource group and other particulars of the solution to deploy - - **NOTE:** For storage settings, the "Premium" type SKUs are not currently supported by this offering -1. Once you've made your selections, click **Review + Create** - at the bottom of the screen and click **Create** -1. You can check deployment status in the top right of the Azure Portal page - ![deployment-status](./images/deployment-status.png) diff --git a/4.2.4/tutorial-docs/deployment-test.md b/4.2.4/tutorial-docs/deployment-test.md deleted file mode 100644 index db2d45a..0000000 --- a/4.2.4/tutorial-docs/deployment-test.md +++ /dev/null @@ -1,624 +0,0 @@ -Once your batch account infrastructure has been created, the following guide -can be used to create batch jobs and tasks. This guide makes use of the -Azure CLI. - -### Azure CLI Authentication - -The first step is to make sure you are -[authenticated](https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli) -through [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli), -and using the subscription in which your batch account has been provisioned. - -### Batch Account Login - -You will need to authenticate with the provisioned batch account in order to -create jobs and tasks. - -```sh -az batch account login -n -g -``` - -### Create Batch Job - -Once authenticated, the next step is to create a batch job using the following variables: - -* JOB_ID: A unique id to assign to the job being created. -* POOL_ID: The name of the pool created with the provided ARM template. - -```sh -az batch job create --id --pool-id -``` - -### Create Batch Task - -Once the batch job has been created, a task can be added to it. This can be done using the JOB_ID and -a task.json specification file: - -* JOB_ID: The same job id used when creating the batch job. -* JSON_FILE: A file that defines a task in JSON format. - -#### Batch Command - -The command passed to the batch task is what will run once the batch task -starts. The following is an example that will run a series of commands -using bash. - -This example takes advantage of bash to execute commands, as well as make sure that -[environment variables](https://docs.microsoft.com/en-us/azure/batch/batch-compute-node-environment-variables#environment-variable-visibility) -are available. The following are example environment variables and bash command: - -* REF_DIR: The directory to untar the genome hash table to. -* OUT_DIR: The directory to write the DRAGEN results to. -* FQ1: The path to the first local FASTQ file on the node. -* FQ2: The path to the second local FASTQ file on the node. -* RGID: The RGID associated with this DRAGEN run. -* RGSM: THE RGSM associated with this DRAGEN run. -* OUTPUT_PREFIX: The prefix that will be used for the DRAGEN output files. -* LICENSE: The DRAGEN license. - -```bash -/bin/bash -c \ -"mkdir ; \ -tar xvf dragen.tar -C ; \ -/opt/edico/bin/dragen --partial-reconfig HMM --ignore-version-check true; \ -/opt/edico/bin/dragen -f -r \ - -1 \ - -2 \ - --RGID \ - --RGSM \ - --enable-bam-indexing true \ - --enable-map-align-output true \ - --enable-sort true \ - --output-file-prefix \ - --enable-map-align true \ - --output-format BAM \ - --output-directory \ - --enable-variant-caller true \ - --lic-server " -``` - -#### SAS - -The following example will generate a full URL with SAS token to access a -file in a private blob storage account. This is useful when wanting to -obtain read access to a specific file in a protected storage account. - -* BLOB_PATH: The path to the file within the container. -* STORAGE_ACCOUNT: The name of the blob storage account. -* STORAGE_ACCOUNT_KEY: An access key to the storage account. -* EXPIRE_DATE: The datetime when the SAS token should expire. - -```sh -az storage blob generate-sas \ - --name \ - --account-name \ - --account-key \ - --container-name \ - --expiry \ - --permissions r \ - --https \ - --full-uri \ - --output tsv -``` - -If obtaining write access to a container within a storage account is -necessary, a slightly different command can be used. - -```sh -az storage container generate-sas \ - --name \ - --account-name \ - --expiry \ - --permissions aclrw \ - --https-only \ - --output tsv -``` - -In this case, the SAS token returned by the command will need to be -appended to the container URL, for example: - -```sh -CONTAINER_URL="https://.blob.core.windows.net/?" -``` - -* [SAS CLI Reference](https://docs.microsoft.com/en-us/cli/azure/storage/blob?view=azure-cli-latest#az_storage_blob_generate_sas) - -#### Resource Files - -In this example, both the genome file and the FASTQ files need to be on the -batch node when running the batch command. This script takes advantage of the -`resourceFiles` configuration to facilitate this. - -If the genome tarball and FASTQ files are in a private blob storage account, a -[SAS token](#sas) will need to be generated to allow batch to download the file. - -```json -"resourceFiles": [{ - "filePath": "dragen.tar", - "httpUrl": "$GENOME_URL" -}, { - "filePath": "1.fq.gz", - "httpUrl": "$FQ1_URL" -}, { - "filePath": "2.fq.gz", - "httpUrl": "$FQ2_URL" -}] -``` - -* [Resource Files Reference](https://docs.microsoft.com/en-us/azure/batch/resource-files#single-resource-file-from-web-endpoint) - -#### Output Files - -Output files configuration tells batch tasks to write certain files to external -locations, triggered by certain events. We will use this feature in this example -to get various logs and DRAGEN output out to our storage container at the end -of the run. - -* CONTAINER_URL: The container url generated above with the SAS token appended to it. -* TASK_ID: A task id, used in this case to organize the output. -* OUT_DIR: The directory the DRAGEN results were written to. - -```json -"outputFiles": [{ - "filePattern": "../stdout.txt", - "destination": { - "container": { - "containerUrl": "", - "path": "/stdout.txt" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } -}, { - "filePattern": "../stderr.txt", - "destination": { - "container": { - "containerUrl": "", - "path": "/stderr.txt" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } -}, { - "filePattern": "/**/*", - "destination": { - "container": { - "containerUrl": "", - "path": "/" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } -}, { - "filePattern": "/var/log/dragen.log", - "destination": { - "container": { - "containerUrl": "", - "path": "/log/dragen.log" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } -}, { - "filePattern": "/var/log/dragen/**/*", - "destination": { - "container": { - "containerUrl": "", - "path": "/log/dragen" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } -}] -``` - -#### task.json - -The overall structure of the task.json will look like the following, -with each of the sections described in detail above. - -```json -{ - "id": "", - "commandLine": "", - "resourcesFiles": [], - "outputFiles": [] -} -``` - -#### Create Task - -With the command generated to run within the task, and accessible URLs -generated for the genome tarball and FASTQ files, the following command -can be used to create the batch task: - -The following URLs must either be public, or private but made accessible -(for example, with a SAS token): - -* GENOME_URL: URL of a genome tarball. -* FQ1_URL: URL of the first FASTQ file. -* FQ2_URL: URL of the second FASTQ file. - -```sh -az batch task create \ - --job-id \ - --json-file task.json -``` - -* [Batch task create CLI reference](https://docs.microsoft.com/en-us/cli/azure/batch/task?view=azure-cli-latest#az_batch_task_create) - -#### Working Example - -##### Batch Job Create - -```sh -az batch job create --id job1 --pool-id mypool -``` - -##### Create `$COMMAND` - -The following command line string is assigned to the `$COMMAND` variable. - -##### `$COMMAND` Variable - -```bash -COMMAND=$(cat <" - -EOF -) -``` - -This one-liner achieves the following: - -1. Sets up Genome and Output directories -1. Unarchives the genome file -1. Runs a partial reconfig on the FPGA -1. Runs DRAGEN - -The `$COMMAND` variable is now interpolated in the `task.json` file below. - -##### Create task.json - -```json -{ - "id": "task1", - "commandLine": "$COMMAND", - "resourceFiles": [{ - "filePath": "dragen.tar", - "httpUrl": "https://dragentestdata.blob.core.windows.net/reference-genomes/Hsapiens/hash-tables/hg38-alt_masked.cnv.graph.hla.rna-9-r3.0-1.tar" - }, { - "filePath": "1.fq.gz", - "httpUrl": "https://dragentestdata.blob.core.windows.net/samples/wes/NA24385-AJ-Son-R1-NS_S33/NA24385-AJ-Son-R1-NS_S33_L001_R1_001.fastq.gz" - }, { - "filePath": "2.fq.gz", - "httpUrl": "https://dragentestdata.blob.core.windows.net/samples/wes/NA24385-AJ-Son-R1-NS_S33/NA24385-AJ-Son-R1-NS_S33_L001_R2_001.fastq.gz" - }], - "outputFiles": [{ - "filePattern": "../stdout.txt", - "destination": { - "container": { - "containerUrl": "$CONTAINER_URL", - "path": "task1/stdout.txt" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } - }, { - "filePattern": "../stderr.txt", - "destination": { - "container": { - "containerUrl": "$CONTAINER_URL", - "path": "task1/stderr.txt" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } - }, { - "filePattern": "output/**/*", - "destination": { - "container": { - "containerUrl": "$CONTAINER_URL", - "path": "task1/output" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } - }, { - "filePattern": "/var/log/dragen.log", - "destination": { - "container": { - "containerUrl": "$CONTAINER_URL", - "path": "task1/log/dragen.log" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } - }, { - "filePattern": "/var/log/dragen/**/*", - "destination": { - "container": { - "containerUrl": "", - "path": "task1/log/dragen" - } - }, - "uploadOptions": { - "uploadCondition": "taskcompletion" - } - }] -} -``` - -##### Batch Task Create - -```sh -az batch task create \ - --job-id job1 \ - --json-file task.json -``` - -#### File Streaming - -While it is always necessary to have the genome file saved locally on the node, DRAGEN can stream input FASTQ files and -BAMs from private Azure Blob containers for faster processing. DRAGEN does not currently support streaming from public -Blob containers. - -Blob storage authentication has been improved with DRAGEN v3.10. Credential management is now controlled via environment -variables used in the Azure SDK, allowing support for Azure SAS streaming and BLOB identity-based credential management. -Support for Azure managed identity authentication was introduced with v3.10. - -Starting with DRAGEN v3.10, the need for and use of the "~/.azure-credentials" file for input streaming has been -deprecated. New environment variables were introduced for input streaming. Environment variables remove the -need for file parsing logic. Using access keys will improve security since the key will only live in memory. - -DRAGEN v3.10 supports two cases for Azure authentication: - -* Storage account access keys -* Managed identities - -When using storage account access keys for authentication, DRAGEN can read from Azure Blob storage regardless of whether -it is run on or off Azure. To use this method of authentication, "AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME" and -"AZ_ACCOUNT_KEY=$STORAGE_ACCOUNT_KEY" environment variables must precede the DRAGEN invocation on the command line, -e.g.: - -```sh -sudo AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME AZ_ACCOUNT_KEY=$STORAGE_ACCOUNT_KEY \ -/opt/edico/bin/dragen -f -r $ref \ --1 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R1_001.fastq.gz' \ --2 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R2_001.fastq.gz' \ -... -``` - -Authentication with -[managed identities](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview#managed-identity-types) -is only available to DRAGEN when run on Azure. The DRAGEN VMs must have Contributor permissions (read/write) to the -Storage Account that it wants to read from using managed identities authentication. In order to grant these permissions -to a VM, a managed identity is needed. System-assigned managed identities can be assigned during creation of a VM or to -existing VMs using either the -[Azure Portal](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vm#system-assigned-managed-identity) -or [Azure CLI](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/qs-configure-cli-windows-vm#system-assigned-managed-identity). -User-assigned managed identities can also be assigned during creation of a VM if the -[Azure CLI](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/qs-configure-cli-windows-vm#user-assigned-managed-identity) -is used for creation. However, user-assigned managed identities cannot be assigned at time of creation to VMs that are -created using the portal. Assignment of user-assigned managed identities to portal-created VMs can only be performed -after creation of the VM. In this case, the user-assigned managed identity must first be created using the -[portal](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities?pivots=identity-mi-methods-azp#create-a-user-assigned-managed-identity) -or [CLI](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities?pivots=identity-mi-methods-azcli#create-a-user-assigned-managed-identity-1) -before being assigned to an existing VM, which can also be performed either with the -[portal](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vm#assign-a-user-assigned-managed-identity-to-an-existing-vm) -or [CLI.](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/qs-configure-cli-windows-vm#assign-a-user-assigned-managed-identity-to-an-existing-azure-vm) -After assigning a managed identity to a VM, it must be granted permission to a storage account using either the -[portal](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/howto-assign-access-portal) -or [CLI](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/howto-assign-access-cli). - -If a single managed identity exists on a VM, only the "AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME" environment -variable is required to stream inputs with DRAGEN. For VMs with multiple managed identities, the -"AZR_IDENT_CLIENT_ID=$IDENTITY_CLIENT_ID" environment variable with the client id of the managed identity that can access the -storage container must also be specified. To use managed identities authentication, these environment variables must -precede the DRAGEN invocation on the command line, e.g. (for a VM with multiple managed identities): - -```sh -sudo AZ_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME AZR_IDENT_CLIENT_ID=$IDENTITY_CLIENT_ID \ -/opt/edico/bin/dragen -f -r $ref \ --1 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R1_001.fastq.gz' \ --2 'https://myaccount.blob.core.windows.net/mycontainer/myblob/sample_S1_L001_R2_001.fastq.gz' \ -... -``` - -##### Stream from Azure Blob Storage - -The following parameters are needed for streaming from Blob storage using storage account access keys: - -* STORAGE_ACCOUNT_NAME: The name of the blob storage account. -* STORAGE_ACCOUNT_KEY: An access key to the storage account. -* FQ1_URL: The full URL to the first FASTQ file in Azure Blob Storage. -* FQ2_URL: The full URL to the second FASTQ file in Azure Blob Storage. - -##### `$COMMAND` Variable for Streaming FASTQ Inputs with Storage Account Access Key - -The following is an example `$COMMAND` variable that streams FASTQ inputs from Blob storage using a storage account -access key: - -```bash -COMMAND=$(cat < \ -AZ_ACCOUNT_KEY= \ -/opt/edico/bin/dragen -f -r dragen \ - -1 \ - -2 \ - --RGID \ - --RGSM \ - --enable-bam-indexing true \ - --enable-map-align-output true \ - --enable-sort true \ - --output-file-prefix \ - --enable-map-align true \ - --output-format BAM \ - --output-directory output \ - --enable-variant-caller true \ - --lic-server " - -EOF -) -``` - -The following parameters are needed for streaming from Blob storage using Azure managed identities authentication: - -* STORAGE_ACCOUNT_NAME: The name of the blob storage account. -* IDENTITY_CLIENT_ID: The client id of the managed identity that can access the storage container. (Only required for -VMs with multiple managed identities.) -* FQ1_URL: The full URL to the first FASTQ file in Azure Blob Storage. -* FQ2_URL: The full URL to the second FASTQ file in Azure Blob Storage. - -##### `$COMMAND` Variable for Streaming FASTQ Inputs with Managed Identities - -The following is an example `$COMMAND` variable that streams FASTQ inputs from Blob storage using a VM with more than -one managed identities: - -```bash -COMMAND=$(cat < \ -AZR_IDENT_CLIENT_ID= \ -/opt/edico/bin/dragen -f -r dragen \ - -1 \ - -2 \ - --RGID \ - --RGSM \ - --enable-bam-indexing true \ - --enable-map-align-output true \ - --enable-sort true \ - --output-file-prefix \ - --enable-map-align true \ - --output-format BAM \ - --output-directory output \ - --enable-variant-caller true \ - --lic-server " - -EOF -) -``` - -The above examples achieve the same as the `$COMMAND` [before](#command-variable) with the addition of the -environment variables required for streaming inputs from Blob storage: AZ_ACCOUNT_NAME and AZ_ACCESS_KEY or -AZ_ACCOUNT_NAME and AZR_IDENT_CLIENT_ID. - -In these cases, the FASTQ files will no longer need to be referenced in the resourceFiles in the task.json - -##### FASTQ List - -If using a FASTQ list file to reference and stream FASTQ files, the FASTQ list file must -also be local to the node. The FASTQ files referenced in the FASTQ list can be in the form of URLs -to files on an Azure Storage Account, in which case, the FASTQs will be streamed by DRAGEN. - -The following is an example of streaming inputs with a FASTQ list using the -resourceFiles configuration as well as a SAS token to access the FASTQ list file in Azure Blob Storage. -This is stored as the [`$LIST_URL`](#list_url-for-input-streaming) variable. - -##### `$LIST_URL` for Input Streaming - -```bash -LIST_URL=$(az storage blob generate-sas \ - --name \ - --account-name \ - --account-key \ - --container-name \ - --expiry \ - --permissions r \ - --https \ - --full-uri \ - --output tsv) -``` - -In this example, the FASTQ files will be streamed from Azure Blob Storage using a storage account access key. Hence, we -will once again need the AZ_ACCOUNT_NAME and AZ_ACCESS_KEY environment variables in the $COMMAND Variable. If using -managed identities to stream the FASTQ files, use the AZ_ACCOUNT_NAME (for VMs with a single managed identity) or -AZ_ACCOUNT_NAME and AZR_IDENT_CLIENT_ID (for VMs with multiple managed identities), instead. - -##### `$COMMAND` Variable for Input Streaming with FASTQ List and Storage Account Access Key - -```bash -COMMAND=$(cat < \ -AZ_ACCOUNT_KEY= \ -/opt/edico/bin/dragen -f -r dragen \ - --fastq-list fastq_list.csv \ - --fastq-list-sample-id \ - --enable-bam-indexing true \ - --enable-map-align-output true \ - --enable-sort true \ - --output-file-prefix \ - --enable-map-align true \ - --output-format BAM \ - --output-directory output \ - --enable-variant-caller true \ - --lic-server " - -EOF -) -``` - -##### task.json resourceFiles for FASTQ List Input - -```json -"resourceFiles": [{ - "filePath": "dragen.tar", - "httpUrl": "$GENOME_URL" -}, { - "filePath": "fastq_list.csv", - "httpUrl": "$LIST_URL" -}] -``` - -##### Example Bash Script - -An [example bash script](./create-batch-task.sh) using some of the commands shown above is available for reference. -There is a required `LICENSE_URL` environment variable, as well as some variables within the script -that must be set before running it, ie: - -```sh -LICENSE_URL=https://:@license.edicogenome.com ./create-batch-task.sh -``` - -There are accompanying comments within the bash script to help set these. diff --git a/4.2.4/tutorial-docs/images/batch-task-file-list.png b/4.2.4/tutorial-docs/images/batch-task-file-list.png deleted file mode 100644 index d9c2d37..0000000 Binary files a/4.2.4/tutorial-docs/images/batch-task-file-list.png and /dev/null differ diff --git a/4.2.4/tutorial-docs/images/deployment-status.png b/4.2.4/tutorial-docs/images/deployment-status.png deleted file mode 100644 index 54e3e59..0000000 Binary files a/4.2.4/tutorial-docs/images/deployment-status.png and /dev/null differ diff --git a/4.2.4/tutorial-docs/images/dragen-on-azure.drawio b/4.2.4/tutorial-docs/images/dragen-on-azure.drawio deleted file mode 100644 index e016568..0000000 --- a/4.2.4/tutorial-docs/images/dragen-on-azure.drawio +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/4.2.4/tutorial-docs/images/dragen-on-azure.png b/4.2.4/tutorial-docs/images/dragen-on-azure.png deleted file mode 100644 index 1b50db8..0000000 Binary files a/4.2.4/tutorial-docs/images/dragen-on-azure.png and /dev/null differ diff --git a/4.2.4/tutorial-docs/index.md b/4.2.4/tutorial-docs/index.md deleted file mode 100644 index 9f172bf..0000000 --- a/4.2.4/tutorial-docs/index.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -layout: page -title: Illumina DRAGEN on Azure -nav: - - title: Introduction - file: introduction.md - - title: Architecture - file: architecture.md - - title: Prerequisites - file: prerequisites.md - - title: Deployment - subnav: - - title: Steps - file: deployment-steps.md - - title: Additional Configurations - file: deployment-configurations.md - - title: Testing using the Azure CLI - file: deployment-test.md - - title: Troubleshooting - file: troubleshooting.md - - title: Additional Resources - file: additional-resources.md - - title: Contributing - file: contributing.md - - title: Notices - file: notices.md - - title: Privacy - file: privacy.md ---- - -{% include include_content.html nav=page.nav %} diff --git a/4.2.4/tutorial-docs/introduction.md b/4.2.4/tutorial-docs/introduction.md deleted file mode 100644 index 7fe4d2e..0000000 --- a/4.2.4/tutorial-docs/introduction.md +++ /dev/null @@ -1,7 +0,0 @@ -This Quick Start guide provides instructions and resources to guide users through deploying [Dynamic Read Analysis for GENomics (DRAGEN)](https://www.illumina.com/products/by-type/informatics-products/dragen-bio-it-platform.html) on Azure. It is primarily intended for users who are interested in a quick and easy setup for running genomics workloads in the cloud. - -This tutorial and its associated Marketplace solution in Azure were developed by Illumina in collaboration with Microsoft. The reference deployment described below serves as a starting point, but can be further customized to meet your needs. - -If you run into any issues while going through the tutorial, please [share your feedback with us](#contributing)! - -* [DRAGEN Infrastructure ARM Template](mainTemplate.json) diff --git a/4.2.4/tutorial-docs/notices.md b/4.2.4/tutorial-docs/notices.md deleted file mode 100644 index d183ca7..0000000 --- a/4.2.4/tutorial-docs/notices.md +++ /dev/null @@ -1,7 +0,0 @@ -This document is provided for informational purposes only. It represents Azure’s current product offerings and practices as of the date of issue of this document, which are subject to change without notice. Customers are responsible for making their own independent assessment of the information in this document and any use of Azure’s products or services, each of which is provided “as is” without warranty of any kind, whether expressed or implied. This document does not create any warranties, representations, contractual commitments, conditions, or assurances from Azure, its affiliates, suppliers, or licensors. The responsibilities and liabilities of Azure to its customers are controlled by Azure agreements, and this document is not part of, nor does it modify, any agreement between Azure and its customers. - -### Legal Notices - -Microsoft and any contributors grant you a license to the Microsoft documentation and other content in this repository under the [Creative Commons Attribution 4.0 International Public License](https://creativecommons.org/licenses/by/4.0/legalcode), see the [LICENSE](LICENSE) file, and grant you a license to any code in the repository under the [MIT License](https://opensource.org/licenses/MIT), see the [LICENSE-CODE](LICENSE-CODE) file. - -Microsoft, Windows, Microsoft Azure and/or other Microsoft products and services referenced in the documentation may be either trademarks or registered trademarks of Microsoft in the United States and/or other countries. The licenses for this project do not grant you rights to use any Microsoft names, logos, or trademarks. Microsoft's general trademark guidelines can be found at . diff --git a/4.2.4/tutorial-docs/prerequisites.md b/4.2.4/tutorial-docs/prerequisites.md deleted file mode 100644 index 3007f05..0000000 --- a/4.2.4/tutorial-docs/prerequisites.md +++ /dev/null @@ -1,40 +0,0 @@ -* **A DRAGEN License** - To obtain a license, please contact Illumina at techsupport@illumina.com. -* **Access to DRAGEN Image via Azure Marketplace** - If you would like to gain access, please contact Illumina at techsupport@illumina.com. - -### Technical Requirements - -* **Azure Subscription.** An Azure Cloud Subscription. -* **Quota for NP-Series Virtual Machines.** You will need to request a quota - for vCPU cores for the NP-series of virtual machines on Azure. -* **Azure CLI.** You'll need to [install](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) the Azure CLI. -* **Genomic Data.** This quick start will create (if it does not already exist) an - Azure Blob Storage Account. You will need to upload your genomics data to this - storage account to utilize DRAGEN. - -### Quota Requirements - -DRAGEN runs on a specific Virtual Machine SKU family in Azure, because it requires -**field-programmable gate array** (FPGA) hardware. Due to this requirement, you -will need to request access to this Virtual Machine SKU family, as described below. - -#### NP-Series VMs - -DRAGEN runs on FPGA-enabled VMs, which are now generally available as the [NP-series](https://docs.microsoft.com/en-us/azure/virtual-machines/np-series) on Azure. - -> Currently, the vCPU requirements for NP-series SKUs are in increments of 10. When requesting an updated quota, we recommend requesting vCPUs in batches of 10. You will need a minimum increase of 10 vCPU Quota for NP-series machines for this tutorial. - -For steps to increase or verify your NP-series vCPU quota on Azure, follow [this deployment step](#login-to-your-azure-portal-account). - -#### Batch Accounts - -This quickstart will utilize [Azure Batch](https://azure.microsoft.com/en-us/services/batch/) as the computing environment for DRAGEN, in [user subscription mode](https://docs.microsoft.com/en-us/azure/batch/scripts/batch-cli-sample-create-user-subscription-account). - -It is also possible to run Azure Batch in **Batch service allocation mode**. In Batch service allocation mode, compute nodes are subject to a separate quota. For DRAGEN, in Batch service allocation mode, you will need to request additional quota for NP-series vCPUs for your discrete Azure Batch account. Current default quotas for Batch accounts can be found [here](https://docs.microsoft.com/en-us/azure/batch/batch-quota-limit#resource-quotas). You can increase your Azure Batch account quota by [following the steps here](https://docs.microsoft.com/en-us/azure/batch/batch-quota-limit#increase-a-quota). - -#### Required Permissions (Authorization / Access Controls) - -To provision this solution, the Active Directory principal (account, service principal, etc.) should require at least Azure subscription-wide [contributor access](https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#contributor). - -If your organization is concerned about this level of access, a deployment pipeline (e.g., GitHub Actions) running as a managed service principal with ***contributor*** access can allow others to have a more restricted privilege level (e.g., Resource Group Contributor, Subscription Reader). - -When utilizing a User Subscription Mode Batch Account, the Azure Batch Service must be added to the Azure Subscription as a Contributor. To add this level of access, you must be at least a Subscription Contributor. For more information, see [additional configuration for user subscription mode](https://docs.microsoft.com/en-us/azure/batch/batch-account-create-portal#additional-configuration-for-user-subscription-mode). diff --git a/4.2.4/tutorial-docs/privacy.md b/4.2.4/tutorial-docs/privacy.md deleted file mode 100644 index 81d723c..0000000 --- a/4.2.4/tutorial-docs/privacy.md +++ /dev/null @@ -1,3 +0,0 @@ -Privacy information can be found at - -Microsoft and any contributors reserve all others rights, whether under their respective copyrights, patents, or trademarks, whether by implication, estoppel or otherwise. diff --git a/4.2.4/tutorial-docs/troubleshooting.md b/4.2.4/tutorial-docs/troubleshooting.md deleted file mode 100644 index 9ff030e..0000000 --- a/4.2.4/tutorial-docs/troubleshooting.md +++ /dev/null @@ -1,51 +0,0 @@ -### ARM Deployment - -If you are running into issues getting the infrastructure spun up through the -ARM template, there are a few options for debugging: - -1. If the resource group was created, navigate to the resource group, and -then the deployments menu option. Here you will find the list of deployments -tied to this resource group, and navigating deeper into each deployment -may show additional information for the deployment of each resource. - -2. Open the [Activity Log](https://ms.portal.azure.com/#blade/Microsoft_Azure_ActivityLog/ActivityLogBlade) -for an additional source of information for recent issues within your subscription. - -### Batch Tasks - -If you are running into issues getting your batch task to run successfully, -the best place to get information to help debug the problem is within the -`stdout` and `stderr` of the batch task itself. This can be accessed by navigating -to your batch account in the portal, and then to the specific job and task -that ran. Once there, you will be able to access `stdout.txt` and `stderr.txt`: - -![batch-task-file-list](./images/batch-task-file-list.png) - -### DRAGEN Issues - -For failed DRAGEN runs, navigate to the batch account in the portal, then job and task associated with the failed run -to view DRAGEN log files. - -### Common Issues - -1. Quota issues: If quota increases haven't been requested, it can be common -to run into quota issues for both the number of batch accounts as well as for -the `Standard NPS Family vCPUs`. Please make sure you have available -[quota](#deployment-steps) before deploying the ARM template. - -2. Input file streaming: Currently, DRAGEN does not support input streaming -from public Blob containers. Input files from private Blob containers can be -streamed provided that the proper storage credentials are passed to the batch -command. - -3. Command lines: Ensure that variables supplied to Azure CLI commands (e.g., account keys, license URLs, names of -resource groups, batch accounts, storage accounts and containers, batch pools, etc.) are correct. Ensure that DRAGEN -command lines are formed properly and that the correct variables are passed to it. - -4. Task JSON: Ensure that keys and values supplied to the json task file are correct and complete. Ensure that the -file adheres to JSON formatting rules. - -5. Authentication: Ensure that the Azure CLI is authenticated for use with the proper subscription prior to creating -resource groups and deploying ARM templates. Log in to the proper Azure batch account prior to creating -batch jobs and tasks. Provide the required authentication (e.g., SAS tokens) for private storage accounts and/or -input files, as needed. Ensure that sufficient expiration periods are specified when generating authentication tokens. diff --git a/index.html b/index.html index acca2d1..25e43d1 100644 --- a/index.html +++ b/index.html @@ -1,7 +1,5 @@ - + diff --git a/versions.json b/versions.json index 1f3f93c..4e2edb2 100644 --- a/versions.json +++ b/versions.json @@ -15,10 +15,7 @@ "version": "3.9.5" }, { - "version": "4.0.3" - }, - { - "version": "4.2.4", + "version": "4.0.3", "latest": true } ]