<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="text-align:left; direction:ltr;">
<div>On Mon, 2020-11-02 at 16:40 +0000, Sorin Sbarnea wrote:</div>
<blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex">
<pre>IMHO, roles (inside collections) do provide quite good abstraction layer as they allow us to change implementation without changing the API (the variables passed to the role).</pre>
<pre><br></pre>
<pre>If the role uses an embedded module, external one or lots of tasks to achieve the same functionality it is an implementation details.</pre>
<pre><br></pre>
<pre>At any point in time we can refactor the role internals and create new modules, swap them, .... without messing its consumption.</pre>
<pre><br></pre>
<pre>I cannot say the same about playbooks, especially those that call modules directly. If they call roles, we should be fine.</pre>
</blockquote>
<div><br>
</div>
<div>Good point.</div>
<div><br>
</div>
<div>That reminds me - to really make roles work more like an API, we should also probably implement tests which determine whether the API is changing in an acceptable way. We'd have to agree what 'acceptable' looks like - at the very least, I would imagine
 that we should be enforcing the same inputs & results with changes being additive unless there's sufficient deprecation.</div>
</body>
</html>