<br />
<b>Deprecated</b>:  YoastSEO_Vendor\Symfony\Component\DependencyInjection\Container::__construct(): Implicitly marking parameter $parameterBag as nullable is deprecated, the explicit nullable type must be used instead in <b>/home/nubelus/sharedove/adisjugo/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Container.php</b> on line <b>60</b><br />
<br />
<b>Deprecated</b>:  YoastSEO_Vendor\League\OAuth2\Client\Provider\AbstractProvider::authorize(): Implicitly marking parameter $redirectHandler as nullable is deprecated, the explicit nullable type must be used instead in <b>/home/nubelus/sharedove/adisjugo/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/AbstractProvider.php</b> on line <b>416</b><br />
<br />
<b>Deprecated</b>:  YoastSEO_Vendor\GuzzleHttp\Client::getConfig(): Implicitly marking parameter $option as nullable is deprecated, the explicit nullable type must be used instead in <b>/home/nubelus/sharedove/adisjugo/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Client.php</b> on line <b>181</b><br />
<br />
<b>Deprecated</b>:  YoastSEO_Vendor\GuzzleHttp\ClientInterface::getConfig(): Implicitly marking parameter $option as nullable is deprecated, the explicit nullable type must be used instead in <b>/home/nubelus/sharedove/adisjugo/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/ClientInterface.php</b> on line <b>77</b><br />
{"id":2459,"date":"2015-12-10T20:45:36","date_gmt":"2015-12-10T19:45:36","guid":{"rendered":"https:\/\/blog.sharedove.com\/adisjugo\/?p=2459"},"modified":"2016-01-12T11:46:07","modified_gmt":"2016-01-12T11:46:07","slug":"minroles-under-the-hood","status":"publish","type":"post","link":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/","title":{"rendered":"Minroles under the hood"},"content":{"rendered":"<p>Today I was playing with the minroles, a new concept inside SharePoint 2016. Basically, the idea of minrole is to streamline and \u201ctemplatize\u201d deployment of SharePoint farms. You need another web front end? No problem, just deploy another server with the \u201cFront-End\u201d minrole, and voila, there you go \u2013 no need to think about services which should run on that server, Microsoft is doing that sort of thinking for you now.<\/p>\n<p>It can help. I\u2019ve seen a lot of (and I mean: a lot of!) screwed up SharePoint deployments. Sure, you can argue that minroles are not customizable, they are what they are, and that you\u2019ll do better on your own. And if you know what you are doing, you are probably right, I\u2019ve already heard plenty of arguments pro and contra minroles. I don\u2019t want to go there, here I just want to explore the architecture under the minroles, and actually to test new Open Live Writer which appeared on the github today \ud83d\ude09<\/p>\n<p><!--more--><\/p>\n<p>So, the minroles. Each server joined to the farm can be member of one of the following minroles:<\/p>\n<p>(information from )<\/p>\n<p><b>Front-end<\/b><br \/>\nService applications, services, and components that serve user requests belong on Front-end web servers. These servers are optimized for low latency.<\/p>\n<p><b>Application<\/b><br \/>\nService applications, services, and components that serve backend requests (such as background jobs or search crawl requests) belong on Application servers. These servers are optimized for high throughput.<\/p>\n<p><b>Distributed cache<\/b><br \/>\nService applications, services, and components that are required for a distributed cache belong on Distributed Cache servers.<\/p>\n<p><b>Search<\/b><br \/>\nService applications, services, and components that are required for searching belong on Search servers.<\/p>\n<p><b>Custom<\/b><br \/>\nCustom service applications, services, and components that do not integrate with MinRole belong on Custom servers. The farm administrator has full control over which service instances can run on servers assigned to the Custom role. MinRole does not control which service instances are provisioned on this role.<\/p>\n<p><b>Single-server farm<\/b><br \/>\nService applications, services, and components required for a single machine farm belong on a Single-Server Farm. A Single-Server Farm is meant for development, testing, and very limited production use. A SharePoint farm with the Single-Server Farm role cannot have more than one SharePoint server in the farm.<\/p>\n<h3>GUI Options in the Central Admin<\/h3>\n<p>When we deploy the farm, in Central Administration -&gt; System Settings, in servers and services management, we can see some minrole specific options:<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2015\/12\/minrole1.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"minrole1\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2015\/12\/minrole1_thumb.png\" alt=\"minrole1\" width=\"1230\" height=\"773\" border=\"0\" \/><\/a><\/p>\n<p>In the server management, we can see which server got assigned which minrole, and if the server is actually compliant with that role. In this case, \u201ccompliant\u201d means that the services on that server correspond to the services meant to be in that minrole. You could, after server is deployed, start some more service instances on that server, which are not in correspondence with that role. For example, starting Word Automation Services on a server with Front-End Role would bring that server in &#8220;not compliant&#8221; state. Central Admin will hereby allow you to identify, and to repair such the issues with one (or few) clicks, and to bring that server back to the compliant state.<\/p>\n<p>The same way, you can \u2013 on the service management page \u2013 see if the services installed on farm are compliant. That\u2019s the flip side, you would see the Word Automation Service here not being compliant, in the above mentioned case, because it runs on the server where it is not supposed to run (server with the Front-end minrole).<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2015\/12\/minrole2.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"minrole2\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2015\/12\/minrole2_thumb.png\" alt=\"minrole2\" width=\"1235\" height=\"776\" border=\"0\" \/><\/a><\/p>\n<h3>Behind GUI<\/h3>\n<p>So, that\u2019s GUI. I don\u2019t know how far\/deep will it go with PowerShell cmdlets, I\u2019ve seen scripts which can be used to change server minrole (basically to disconnect server from the farm, and to rejoin it with a new role), and that\u2019s already well documented in the abovementioned link, and in Bill Baer\u2019s blog post (). But, let\u2019s see what server side object model is offering us. Yes, server side \u2013 we are dealing with on-prem administrative feature here, so it\u2019s ok. Writing PowerShell is easy when we know what is in the treasure chest.<\/p>\n<p>First of all, we\u2019ll notice SPServerRole enum in Microsoft.SharePoint.Administration namespace:<\/p>\n<pre class=\"brush: csharp; title: Code sample:; notranslate\" title=\"Code sample:\">\r\n\/\/\/ &lt;summary&gt;Specifies the role of the server with respect to the Windows SharePoint Services deployment.&lt;\/summary&gt;\r\npublic enum SPServerRole\r\n{\r\n    \/\/\/ &lt;summary&gt;Specifies that the server does not have a registered role in the configuration database.&lt;\/summary&gt;\r\n    Invalid,\r\n    \/\/\/ &lt;summary&gt;Specifies that the server is a front-end Web server within the Windows SharePoint Services deployment.&lt;\/summary&gt;\r\n    WebFrontEnd,\r\n    \/\/\/ &lt;summary&gt;Specifies that the server runs a Web application.&lt;\/summary&gt;\r\n    Application,\r\n    \/\/\/ &lt;summary&gt;Specifies that the server is the only server in the Windows SharePoint Services deployment.&lt;\/summary&gt;\r\n    &#x5B;System.Obsolete(&quot;Use SPServerRole.SingleServerFarm instead.&quot;)]\r\n    SingleServer,\r\n    SingleServerFarm,\r\n    DistributedCache,\r\n    Search,\r\n    Custom = 8\r\n}\r\n<\/pre>\n<p>This enum was there in the earlier versions of SharePoint, but only with &#8220;WebFrontEnd&#8221;, &#8220;Application&#8221;, &#8220;SingleServer&#8221; and &#8220;Invalid&#8221; values (&#8220;Invalid&#8221; for the servers for which the server role could not be determined). The values &#8220;WebFrontEnd&#8221; and &#8220;Application&#8221; have been reused for the minroles with the same or similar names, and &#8220;SingleServer&#8221; has been deprecated. For the SharePoint 2016 servers with &#8220;Single Server&#8221; minrole, the value &#8220;SingleServerFarm&#8221; is now used.<\/p>\n<p>The values &#8220;DistributedCache&#8221;, &#8220;Search&#8221; and &#8220;Custom&#8221; have been added to this enum in SharePoint Server 2016, for new minroles with the same names.<\/p>\n<p>Next, we\u2019ll notice that SPService object (Microsoft.SharePoint.Administration) has got the \u201cCompliantWithMinRole\u201d boolean property, which determines if that service is compliant with the role of the server where it runs. So, basically, you can iterate services in farm, to determine if all of your services \/ servers are in the minrole compliant state:<\/p>\n<pre class=\"brush: csharp; title: Code sample:; notranslate\" title=\"Code sample:\">\r\n\/\/get the farm\r\nSPFarm farm = SPFarm.Local;\r\n\r\n\/\/We need to get service instances, running on each server\r\n\/\/and to see if it is compliant with the minrole that server has been assigned to\r\n\/\/of course we can ignore the custom minrole\r\nforeach (SPServer server in farm.Servers)\r\n{\r\n    \/\/get a server from farm\r\n    Console.WriteLine(&quot;Server name: &quot; + server.Name);\r\n    Console.WriteLine(&quot;Server role: &quot; + server.Role.ToString());\r\n\r\n    Console.WriteLine(&quot;-------------------------------&quot;);\r\n\r\n    \/\/a bool variable where we will check if the server is compliant with its role\r\n    bool serverCompliantWithRole = true;\r\n\r\n    \/\/get all service instances provisioned on this server\r\n    foreach (var instance in server.ServiceInstances)\r\n    {\r\n        \/\/get the parenet service for selected instance\r\n        SPService service = (SPService)farm.GetObject(instance.Service.Id);\r\n\r\n        \/\/determine if service is compliant with the minrole associated with this server\r\n        bool isServiceCompliant = service.CompliantWithMinRole.HasValue ? service.CompliantWithMinRole.Value : true;\r\n\r\n        \/\/list it in console\r\n        Console.WriteLine(&quot;Compliant with &quot; + server.Role.ToString() + &quot; : &quot; + isServiceCompliant.ToString());\r\n        Console.WriteLine(&quot;&quot;);\r\n\r\n        \/\/and it with server compliance status, it all has to be &quot;true&quot;\r\n        serverCompliantWithRole = serverCompliantWithRole &amp;&amp; isServiceCompliant;\r\n    }\r\n\r\n    Console.WriteLine(&quot;-------------------------------&quot;);\r\n\r\n    \/\/output if the whole server is compliant with minrole\r\n    Console.WriteLine(&quot;Is server compliant with MinRole: &quot; + serverCompliantWithRole.ToString());\r\n}\r\n<\/pre>\n<p>But, how does the property SPService.CompliantWithMinRole know if the service on that server is minrole compliant? If we reflect that property, it will very soon take us to the classes \u201cSPServerRoleManager\u201d and &#8220;SPServerRoleConversionUtil&#8221;, which offer all those beautiful things like configuring servers for a specific minrole, checking server states, repairing server states, bringing server back to the compliant mode, etc. The only problem with those classes is \u2013 they are internal, and they are sealed. Now, whoever thought that Microsoft might not be sandboxing SharePoint after all, there is the answer. They are.<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2015\/12\/minrole3.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"minrole3\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2015\/12\/minrole3_thumb.png\" alt=\"minrole3\" width=\"1200\" height=\"829\" border=\"0\" \/><\/a><\/p>\n<p>Anyway, reflecting these classes gives us some valuable insights in how minroles actually work. One of the interesting things is, there is no \u201cdatabase\u201d or \u201cdefinite list\u201d, which would state which services are compliant with which minrole. More the less, each service <b>instance<\/b> has \u201cShouldProvision()\u201d method, which accepts the minrole as the only parameter, and outputs a boolean value which gives that information. That is what SPService.CompliantWithMinRole property is invoking.<\/p>\n<p>So, if you really want to know which services belong to which minrole, you should iterate service instances (yes, instances) on a vanilla deployment, which includes all roles, and then take a look what is there:<\/p>\n<pre class=\"brush: csharp; title: Code sample:; notranslate\" title=\"Code sample:\">\r\n\/\/first get all possible minroles\r\nArray minRoleValues = Enum.GetValues(typeof(SPServerRole));\r\n\r\n\/\/now initialize a dictionary, which will contain roles as keys, and all services belonging to a role as a list of string values\r\nDictionary&lt;SPServerRole, List&lt;string&gt;&gt; servicesInRole = new Dictionary&lt;SPServerRole, List&lt;string&gt;&gt;();\r\nforeach (SPServerRole minrole in minRoleValues)\r\n{\r\n    servicesInRole.Add(minrole, new List&lt;string&gt;());\r\n}\r\n\r\n\/\/now iterate all service instances - \r\n\/\/this is where the information if service belongs to a minrole is stored - \r\n\/\/and check to which service it belongs\r\n\r\n\/\/get services in farm\r\nforeach (SPService service in farm.Services)\r\n{\r\n    \/\/get instances of the service\r\n    foreach (var instance in service.Instances)\r\n    {\r\n        \/\/check in which minrole can an instance live\r\n        \/\/iterate through all of the minroles\r\n        foreach (SPServerRole minrole in minRoleValues)\r\n        {\r\n            \/\/check for a specific minrole\r\n            if (instance.ShouldProvision(minrole))\r\n            {\r\n                \/\/add it if there, and if not already added\r\n                if (!servicesInRole&#x5B;minrole].Contains(service.TypeName))\r\n                {\r\n                    servicesInRole&#x5B;minrole].Add(service.TypeName);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n\/\/list it in console\r\nforeach(SPServerRole role in servicesInRole.Keys)\r\n{\r\n    Console.WriteLine(role.ToString());\r\n               \r\n    foreach (string serviceTypeName in servicesInRole&#x5B;role])\r\n    {\r\n        Console.WriteLine(serviceTypeName);\r\n    }\r\n    Console.WriteLine(&quot;&quot;);\r\n}\r\n<\/pre>\n<h3>Conclusion<\/h3>\n<p>It is noteworthy to mention that the minroles are sealed concept. You cannot change or create your own minroles or change anything about comliant\/not compliant definition. And, as we\u2019ve seen it, the \u201cjuicy\u201d APIs are concealed, and only the basic functionality is exposed. It is as it is &#8211; if you would like it to be changed, vote at SharePoint UserVoice here &#8211; <\/p>\n<h3>Appendix \u2013 Services \/ Minroles compliancy list<\/h3>\n<p>At the moment of writing this article, the following services are compliant with the following roles:<\/p>\n<p><strong>WebFrontEnd<\/strong><\/p>\n<ul>\n<li>Access Services<\/li>\n<li>Access Services 2010<\/li>\n<li>App Management Service<\/li>\n<li>Business Data Connectivity Service<\/li>\n<li>Claims to Windows Token Service<\/li>\n<li>Information Management Policy Configuration Service<\/li>\n<li>Machine Translation Service<\/li>\n<li>Managed Metadata Web Service<\/li>\n<li>Microsoft Project Server Calculation Service<\/li>\n<li>Microsoft Project Server Events Service<\/li>\n<li>Microsoft Project Server Queuing Service<\/li>\n<li>Microsoft SharePoint Foundation Administration<\/li>\n<li>Microsoft SharePoint Foundation Database<\/li>\n<li>Microsoft SharePoint Foundation Sandboxed Code Service<\/li>\n<li>Microsoft SharePoint Foundation Subscription Settings Service<\/li>\n<li>Microsoft SharePoint Foundation Timer<\/li>\n<li>Microsoft SharePoint Foundation Tracing<\/li>\n<li>Microsoft SharePoint Foundation Usage<\/li>\n<li>Microsoft SharePoint Foundation Web Application<\/li>\n<li>Microsoft SharePoint Insights<\/li>\n<li>PerformancePoint Service<\/li>\n<li>Portal Service<\/li>\n<li>Project Server Application Service<\/li>\n<li>Request Management<\/li>\n<li>Secure Store Service<\/li>\n<li>Security Token Service<\/li>\n<li>SharePoint Server Search<\/li>\n<li>SSP Job Control Service<\/li>\n<li>User Profile Service<\/li>\n<li>Visio Graphics Service<\/li>\n<\/ul>\n<p><strong>Application<\/strong><\/p>\n<ul>\n<li>App Management Service<\/li>\n<li>Application Discovery and Load Balancer Service<\/li>\n<li>Business Data Connectivity Service<\/li>\n<li>Claims to Windows Token Service<\/li>\n<li>Information Management Policy Configuration Service<\/li>\n<li>Machine Translation Service<\/li>\n<li>Managed Metadata Web Service<\/li>\n<li>Microsoft Project Server Calculation Service<\/li>\n<li>Microsoft Project Server Events Service<\/li>\n<li>Microsoft Project Server Queuing Service<\/li>\n<li>Microsoft SharePoint Foundation Administration<\/li>\n<li>Microsoft SharePoint Foundation Database<\/li>\n<li>Microsoft SharePoint Foundation Incoming E-Mail<\/li>\n<li>Microsoft SharePoint Foundation Subscription Settings Service<\/li>\n<li>Microsoft SharePoint Foundation Timer<\/li>\n<li>Microsoft SharePoint Foundation Tracing<\/li>\n<li>Microsoft SharePoint Foundation Usage<\/li>\n<li>Microsoft SharePoint Foundation Web Application<\/li>\n<li>Microsoft SharePoint Foundation Workflow Timer Service<\/li>\n<li>Microsoft SharePoint Insights<\/li>\n<li>Portal Service<\/li>\n<li>PowerPoint Conversion Service<\/li>\n<li>Project Server Application Service<\/li>\n<li>Request Management<\/li>\n<li>Secure Store Service<\/li>\n<li>Security Token Service<\/li>\n<li>SSP Job Control Service<\/li>\n<li>User Profile Service<\/li>\n<li>Word Automation Services<\/li>\n<\/ul>\n<p><strong>SingleServerFarm<\/strong><\/p>\n<ul>\n<li>Access Services<\/li>\n<li>Access Services 2010<\/li>\n<li>App Management Service<\/li>\n<li>Application Discovery and Load Balancer Service<\/li>\n<li>Business Data Connectivity Service<\/li>\n<li>Claims to Windows Token Service<\/li>\n<li>Distributed Cache<\/li>\n<li>Information Management Policy Configuration Service<\/li>\n<li>Lotus Notes Connector<\/li>\n<li>Machine Translation Service<\/li>\n<li>Managed Metadata Web Service<\/li>\n<li>Microsoft Project Server Calculation Service<\/li>\n<li>Microsoft Project Server Events Service<\/li>\n<li>Microsoft Project Server Queuing Service<\/li>\n<li>Microsoft SharePoint Foundation Administration<\/li>\n<li>Microsoft SharePoint Foundation Database<\/li>\n<li>Microsoft SharePoint Foundation Incoming E-Mail<\/li>\n<li>Microsoft SharePoint Foundation Sandboxed Code Service<\/li>\n<li>Microsoft SharePoint Foundation Subscription Settings Service<\/li>\n<li>Microsoft SharePoint Foundation Timer<\/li>\n<li>Microsoft SharePoint Foundation Tracing<\/li>\n<li>Microsoft SharePoint Foundation Usage<\/li>\n<li>Microsoft SharePoint Foundation Web Application<\/li>\n<li>Microsoft SharePoint Foundation Workflow Timer Service<\/li>\n<li>Microsoft SharePoint Insights<\/li>\n<li>PerformancePoint Service<\/li>\n<li>Portal Service<\/li>\n<li>PowerPoint Conversion Service<\/li>\n<li>Project Server Application Service<\/li>\n<li>Request Management<\/li>\n<li>Search Administration Web Service<\/li>\n<li>Search Host Controller Service<\/li>\n<li>Search Query and Site Settings Service<\/li>\n<li>Secure Store Service<\/li>\n<li>Security Token Service<\/li>\n<li>SharePoint Server Search<\/li>\n<li>SSP Job Control Service<\/li>\n<li>User Profile Service<\/li>\n<li>Visio Graphics Service<\/li>\n<li>Word Automation Services<\/li>\n<\/ul>\n<p><strong>DistributedCache<\/strong><\/p>\n<ul>\n<li>Claims to Windows Token Service<\/li>\n<li>Distributed Cache<\/li>\n<li>Microsoft SharePoint Foundation Administration<\/li>\n<li>Microsoft SharePoint Foundation Database<\/li>\n<li>Microsoft SharePoint Foundation Timer<\/li>\n<li>Microsoft SharePoint Foundation Tracing<\/li>\n<li>Microsoft SharePoint Foundation Usage<\/li>\n<li>Microsoft SharePoint Foundation Web Application<\/li>\n<li>Microsoft SharePoint Insights<\/li>\n<li>Portal Service<\/li>\n<li>Request Management<\/li>\n<li>Security Token Service<\/li>\n<li>SSP Job Control Service<\/li>\n<\/ul>\n<p><strong>Search<\/strong><\/p>\n<ul>\n<li>Application Discovery and Load Balancer Service<\/li>\n<li>Claims to Windows Token Service<\/li>\n<li>Microsoft SharePoint Foundation Administration<\/li>\n<li>Microsoft SharePoint Foundation Database<\/li>\n<li>Microsoft SharePoint Foundation Timer<\/li>\n<li>Microsoft SharePoint Foundation Tracing<\/li>\n<li>Microsoft SharePoint Foundation Usage<\/li>\n<li>Microsoft SharePoint Insights<\/li>\n<li>Portal Service<\/li>\n<li>Search Administration Web Service<\/li>\n<li>Search Host Controller Service<\/li>\n<li>Search Query and Site Settings Service<\/li>\n<li>Security Token Service<\/li>\n<li>SharePoint Server Search<\/li>\n<li>SSP Job Control Service<\/li>\n<\/ul>\n<div class=\"fb-background-color\">\n\t\t\t  <div \n\t\t\t  \tclass = \"fb-comments\" \n\t\t\t  \tdata-href = \"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/\"\n\t\t\t  \tdata-numposts = \"59\"\n\t\t\t  \tdata-lazy = \"true\"\n\t\t\t\tdata-colorscheme = \"light\"\n\t\t\t\tdata-order-by = \"time\"\n\t\t\t\tdata-mobile=true>\n\t\t\t  <\/div><\/div>\n\t\t  <style>\n\t\t    .fb-background-color {\n\t\t\t\tbackground:  !important;\n\t\t\t}\n\t\t\t.fb_iframe_widget_fluid_desktop iframe {\n\t\t\t    width: 100% !important;\n\t\t\t}\n\t\t  <\/style>\n\t\t  ","protected":false},"excerpt":{"rendered":"<p>Today I was playing with the minroles, a new concept inside SharePoint 2016. Basically, the idea of minrole is to streamline and \u201ctemplatize\u201d deployment of SharePoint farms. You need another web front end? No problem, just deploy another server with the \u201cFront-End\u201d minrole, and voila, there you go \u2013 no need to think about services [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3235,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[10,11,12],"tags":[58],"class_list":["post-2459","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-architecture","category-development","category-howto","tag-sharepoint2016"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Minroles under the hood - Adis Jugo blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Minroles under the hood - Adis Jugo blog\" \/>\n<meta property=\"og:description\" content=\"Today I was playing with the minroles, a new concept inside SharePoint 2016. Basically, the idea of minrole is to streamline and \u201ctemplatize\u201d deployment of SharePoint farms. You need another web front end? No problem, just deploy another server with the \u201cFront-End\u201d minrole, and voila, there you go \u2013 no need to think about services [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/\" \/>\n<meta property=\"og:site_name\" content=\"Adis Jugo blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-12-10T19:45:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-01-12T11:46:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2015\/12\/gears-164556.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1271\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"adis.jugo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"adis.jugo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/\",\"url\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/\",\"name\":\"Minroles under the hood - Adis Jugo blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2015\/12\/gears-164556.jpg\",\"datePublished\":\"2015-12-10T19:45:36+00:00\",\"dateModified\":\"2016-01-12T11:46:07+00:00\",\"author\":{\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/#\/schema\/person\/a5ca63552094ce9d5a0440f3a1ac9a4c\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/#primaryimage\",\"url\":\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2015\/12\/gears-164556.jpg\",\"contentUrl\":\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2015\/12\/gears-164556.jpg\",\"width\":1920,\"height\":1271},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.sharedove.com\/adisjugo\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Minroles under the hood\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/#website\",\"url\":\"https:\/\/blog.sharedove.com\/adisjugo\/\",\"name\":\"Adis Jugo blog\",\"description\":\"The Southern Side\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.sharedove.com\/adisjugo\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/#\/schema\/person\/a5ca63552094ce9d5a0440f3a1ac9a4c\",\"name\":\"adis.jugo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cc5a23cf1bd0b9d8401c9dd65c6c141041ec0c6e37eedbb511779e4a40a198fd?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cc5a23cf1bd0b9d8401c9dd65c6c141041ec0c6e37eedbb511779e4a40a198fd?s=96&d=mm&r=g\",\"caption\":\"adis.jugo\"},\"url\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/author\/adisjugo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Minroles under the hood - Adis Jugo blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/","og_locale":"en_US","og_type":"article","og_title":"Minroles under the hood - Adis Jugo blog","og_description":"Today I was playing with the minroles, a new concept inside SharePoint 2016. Basically, the idea of minrole is to streamline and \u201ctemplatize\u201d deployment of SharePoint farms. You need another web front end? No problem, just deploy another server with the \u201cFront-End\u201d minrole, and voila, there you go \u2013 no need to think about services [&hellip;]","og_url":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/","og_site_name":"Adis Jugo blog","article_published_time":"2015-12-10T19:45:36+00:00","article_modified_time":"2016-01-12T11:46:07+00:00","og_image":[{"width":1920,"height":1271,"url":"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2015\/12\/gears-164556.jpg","type":"image\/jpeg"}],"author":"adis.jugo","twitter_card":"summary_large_image","twitter_misc":{"Written by":"adis.jugo","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/","url":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/","name":"Minroles under the hood - Adis Jugo blog","isPartOf":{"@id":"https:\/\/blog.sharedove.com\/adisjugo\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/#primaryimage"},"image":{"@id":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2015\/12\/gears-164556.jpg","datePublished":"2015-12-10T19:45:36+00:00","dateModified":"2016-01-12T11:46:07+00:00","author":{"@id":"https:\/\/blog.sharedove.com\/adisjugo\/#\/schema\/person\/a5ca63552094ce9d5a0440f3a1ac9a4c"},"breadcrumb":{"@id":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/#primaryimage","url":"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2015\/12\/gears-164556.jpg","contentUrl":"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2015\/12\/gears-164556.jpg","width":1920,"height":1271},{"@type":"BreadcrumbList","@id":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2015\/12\/10\/minroles-under-the-hood\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.sharedove.com\/adisjugo\/"},{"@type":"ListItem","position":2,"name":"Minroles under the hood"}]},{"@type":"WebSite","@id":"https:\/\/blog.sharedove.com\/adisjugo\/#website","url":"https:\/\/blog.sharedove.com\/adisjugo\/","name":"Adis Jugo blog","description":"The Southern Side","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.sharedove.com\/adisjugo\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.sharedove.com\/adisjugo\/#\/schema\/person\/a5ca63552094ce9d5a0440f3a1ac9a4c","name":"adis.jugo","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.sharedove.com\/adisjugo\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/cc5a23cf1bd0b9d8401c9dd65c6c141041ec0c6e37eedbb511779e4a40a198fd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cc5a23cf1bd0b9d8401c9dd65c6c141041ec0c6e37eedbb511779e4a40a198fd?s=96&d=mm&r=g","caption":"adis.jugo"},"url":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/author\/adisjugo\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/posts\/2459","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/comments?post=2459"}],"version-history":[{"count":2,"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/posts\/2459\/revisions"}],"predecessor-version":[{"id":3264,"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/posts\/2459\/revisions\/3264"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/media\/3235"}],"wp:attachment":[{"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/media?parent=2459"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/categories?post=2459"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/tags?post=2459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}