Let's take another step back and consider what we want to achieve with the roles part of the pattern. The overarching task is to piece together these building-brick-like profile classes into full tech stacks, which we call roles, and are now the second part of our full pattern:
![](https://static.packt-cdn.com/products/9781788831864/graphics/assets/4d3448fc-c27c-4e1f-b40c-d1d927a6a65d.png)
Here you can see that we have taken the composite profiles from our previous example, and stacked them one on top of the other, to produce a full tech stack. We are also utilizing two additional shared profiles:
- profile::base is included in all machines, including workstations. It manages security baselines and so on, using conditional logic for OS-specific profiles; for example, profile:: base::ubuntu, profile::base::redhat, and so on, as needed.
- profile::server is included in all machines that provide a service over the network, and configures services such as NTP, firewalls,...