<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">

  <title>ARIA 0.1.0 Roadmap • Apache ARIA TOSCA</title>

  
  
  

  <meta name="viewport" content="width=device-width, initial-scale=1">
  <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->

  <!-- CSS -->
  <link rel="stylesheet" href="/css/owl.carousel.css">
  <link rel="stylesheet" href="/css/bootstrap.min.css">
  <link rel="stylesheet" href="/css/font-awesome.min.css">
  <link rel="stylesheet" href="/css/style.css">
  <link rel="stylesheet" href="/css/ionicons.min.css">
  <link rel="stylesheet" href="/css/animate.css">
  <link rel="stylesheet" href="/css/responsive.css">


  <!-- Js -->
  <script src="/js/vendor/modernizr-2.6.2.min.js"></script>
  <script src="/js/vendor/jquery-1.10.2.min.js"></script>
  <script>window.jQuery || document.write('<script src="/js/vendor/jquery-1.10.2.min.js"><\/script>')</script>
  <script src="/js/bootstrap.min.js"></script>
  <script src="/js/owl.carousel.min.js"></script>
  <script src="/js/plugins.js"></script>

  <script src="/js/min/waypoints.min.js"></script>
  <script src="/js/jquery.counterup.js"></script>






  <script src="/js/main.js"></script>
  <script src="/js/plugins/jquery.mixitup.min.js"></script>

</head>

  <body id="js-body">
    

    <!--[if lt IE 9]><div class="upgrade notice-warning"><strong>Your browser is quite old!</strong> Why not <a href="http://whatbrowser.org/">upgrade to a newer one</a> to better enjoy this site?</div><![endif]-->

    <!-- Header Start -->
<header>
<div class="container">
  <div class="row">
    <div class="col-md-12">
      <!-- header Nav Start -->
      <nav class="navbar navbar-default">
        <div class="container-fluid">
          <!-- Brand and toggle get grouped for better mobile display -->
          <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="/">
              <img src="/images/aria-logo.png" alt="Apache ARIA TOSCA">
            </a>
          </div>
            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">

              <nav role="navigation" class="menu top-menu">
                  <ul class="nav navbar-nav navbar-right">
	<li class="home"><a href="/">Apache ARIA TOSCA</a></li>
	
    
    <li><a href="/about/" >About</a></li>
  
    
    <li><a href="/community/" >Community</a></li>
  
    
    <li><a href="/getting-started/" >Getting Started</a></li>
  
    
    <li><a href="/getting-started/" >Docs</a></li>
  
    
    <li><a href="/roadmap/" >Roadmap</a></li>
  
</ul>

              </nav>
            </div><!-- /.navbar-collapse -->
          </div><!-- /.container-fluid -->
        </nav>
      </div>
    </div>
  </div>
</header><!-- header close -->



    <div id="page-wrapper">
      <div id="main" role="main">
	<article class="wrap" itemscope itemtype="http://schema.org/Article">
		
		

		<section id="global-header">
			<div class="container">
				<div class="row">
					<div class="col-md-12">
						<div class="block">
							<h1>ARIA 0.1.0 Roadmap</h1>
							<p></p>
						</div>
					</div>
				</div>
			</div>
		</section>



		<div class="inner-wrap">
			<div id="content" class="page-content" itemprop="articleBody">
				<section id="intro">
		      <div class="container">
		        <div class="row">
								<p>ARIA’s backlod is found <a href="https://issues.apache.org/jira/secure/RapidBoard.jspa?projectKey=ARIA&amp;rapidView=150&amp;view=planning">HERE</a></p>

<ul>
  <li>
    <p>OASIS TOSCA Simple Profile 1.0 - Support “OASIS TOSCA Simple Profile 1.0” YAML DSL specification.</p>
  </li>
  <li>
    <p>OASIS TOSCA Simple Profile 1.0 test suite - Comprehensive coverage of the YAML DSL specification.</p>
  </li>
  <li>
    <p>OASIS TOSCA Simple Profile 1.0 for NFV - Implement latest reversion of “TOSCA Simple Profile for NFV” draft03 specification.</p>
  </li>
  <li>
    <p>Modular DSL Parser - Modular DSL Parser capable of supporting multiple DSLs and profiles.</p>
  </li>
  <li>
    <p>TOSCA Cloud Service Archive(CSAR) Support the standard TOSCA CSAR template archiving format.</p>
  </li>
  <li>
    <p>Template Validation - Enabled template validation based on the profile used on application or VNF template</p>
  </li>
  <li>
    <p>Deployment Plans Dynamic Generation - Dynamic generation of deployment plans from on the TOSCA template and plugins used in the TOSCA templates.</p>
  </li>
  <li>Pluggable node Types Plugins mechanism that allows extending the TOSCA normative node types with custom and technology specific node types, allowing TOSCA to natively support the following:
    <ul>
      <li>Extend TOSCA Normative types and support introduction of new technology specific node types with their corresponding relationship node types, and lifecycle operation implementations.</li>
      <li>Native TOSCA support for Multi-VIM, combination of multiple and mixed environments.</li>
      <li>Native TOSCA support for any sVNFM/gVNFM</li>
    </ul>
  </li>
  <li>
    <p>Live Attribute Injection - Plugins can set node attributes and fill in TOSCA functions allowing for live requirements-and-capabilities processing</p>
  </li>
  <li>
    <p>TOSCA Workflow Execution Engine TOSCA native workflow execution engine that can run over the deployment graph, execute dynamically generated deployment plans from the TOSCA topology temple, support custom workflows addition to graph based workflow execution.</p>
  </li>
  <li>Model Storage Mechanism Storage mechanism that allows storing the generated objects model and template related resources into filesystem, database and memory.</li>
</ul>

		        </div>
		      </div>
		    </section>
				<hr />
				<footer class="page-footer">
					
					
					
				</footer><!-- /.footer -->
				<aside>
					
				</aside>
			</div><!-- /.content -->
		</div><!-- /.inner-wrap -->
		
	</article><!-- ./wrap -->
</div><!-- /#main -->

      

<!-- Wrapper Start -->
<section id="intro" style="padding-top:30px; padding-bottom:30px">
	<div class="container">
		<div class="row">
			<div class="col-md-10 col-sm-12">
				<div class="block">
					<p>
						Apache ARIA TOSCA is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
					</p>
				</div>
			</div><!-- .col-md-7 close -->
			<div class="col-md-2 col-sm-12">
				<div class="block" valign="middle" style="vertical-align: middle;">
					<img src="/images/incubator_power_ring.png" alt="ARIA Podling"  >
				</div>
			</div><!-- .col-md-5 close -->
		</div>
	</div>
</section>

<footer>
	<div class="container">
		<div class="row">
			<div class="col-md-12">
				<div class="footer-manu">

					<ul class="menu-item">
					
			      
						<li><a href="/about/" >About</a></li>
					
			      
						<li><a href="/community/" >Community</a></li>
					
			      
						<li><a href="/getting-started/" >Getting Started</a></li>
					
			      
						<li><a href="/roadmap/" >Roadmap</a></li>
					
					</ul>
				</div>

				<p> Copyright © 2017 The Apache Software Foundation. Licensed under the Apache License, Version 2.0. <br />
				    Apache, the Apache Feather logo, and the Apache Incubator project logo are trademarks of The Apache Software Foundation.</p>
			</div>
		</div>
	</div>
</footer>

    </div>

    <script src="/js/vendor/jquery-1.10.2.min.js"></script>
    <script src="/js/plugins/jquery.mixitup.min.js"></script>
    <script src="/js/owl.carousel.min.js"></script>
    <script src="/js/jquery.counterup.js"></script>

    <script src="/js/main.js"></script>

  </body>

</html>
