{"id":422,"date":"2015-05-06T18:37:56","date_gmt":"2015-05-06T17:37:56","guid":{"rendered":"https:\/\/www.inovex.de\/\/?p=422"},"modified":"2015-05-06T18:37:56","modified_gmt":"2015-05-06T17:37:56","slug":"foreman-provision-a-comfortable-resource-management-tool-for-foreman","status":"publish","type":"post","link":"https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/","title":{"rendered":"Foreman Provision: A Comfortable Resource Management Tool for Foreman"},"content":{"rendered":"<p>At inovex we use open source technology\u00a0on a daily basis\u00a0and try to give back to the community in return. One great example is the Foreman Provision project that was initially created by my\u00a0co-worker\u00a0Nils Domrose in\u00a0co-operation with our customer Filiadata GmbH,\u00a0the IT service provider for German company\u00a0<a title=\"https:\/\/www.inovex.de\/de\/referenzen\/kunden\/\" href=\"https:\/\/www.inovex.de\/de\/referenzen\/kunden\/\">dm-drogerie markt GmbH + Co. KG<\/a>. Foreman Provision is a comfortable wrapper that uses the <a title=\"http:\/\/theforeman.org\/api_v2.html\" href=\"http:\/\/theforeman.org\/api_v2.html\">Foreman REST API<\/a> to create and manage resources in <a title=\"http:\/\/theforeman.org\/\" href=\"http:\/\/theforeman.org\/\">Foreman<\/a>. Filiadata has published the Foreman Provision tool on\u00a0<a title=\"https:\/\/github.com\/FILIADATAGmbH\/foreman_provision\" href=\"https:\/\/github.com\/FILIADATAGmbH\/foreman_provision\">Github<\/a>\u00a0under the terms and conditions of the MIT license which allows it\u00a0to be\u00a0enhanced and used by the public. Let&#8217;s take a look at the technical details of this project!<!--more--><\/p>\n<h2>Getting Started with Foreman Provision<\/h2>\n<p>Foreman Provision is a Ruby Gem available on\u00a0<a title=\"https:\/\/github.com\/FILIADATAGmbH\/foreman_provision\" href=\"https:\/\/github.com\/FILIADATAGmbH\/foreman_provision\">Github<\/a>. One of its\u00a0few dependencies is the official Foreman API Ruby Gem. After you&#8217;ve entered\u00a0your Foreman user credentials you are ready\u00a0to\u00a0start using the Foreman Provision Gem in your Ruby project or creating\u00a0configuration files that describe the resources you want to manage. At the time of writing Foreman 1.8.0 is\u00a0the latest stable version. We will\u00a0use it\u00a0along with the latest Foreman Provision source code (master branch).<\/p>\n<pre class=\"lang:sh decode:true \"># yum install ruby-devel git gcc-c++\n\n# git clone https:\/\/github.com\/FILIADATAGmbH\/foreman_provision.git\n\n# cd foreman_provision\/\n\n# gem install --verbose --no-document foreman_api\n\n<\/pre>\n<pre class=\"lang:sh decode:true\"># .\/bin\/foreman-provision -h\n\nUsage: foreman-provision -c conf\/config.yaml -a conf\/foreman.yaml -v -d\n\n -c, --config_file FILE|DIR location of the configuration file or a directory containing *.YAML files\n\n -a, --auth_credentials FILE location of the foreman auth credentials YAML file\n\n -v, --[no-]verbose Run verbosely\n\n -l, --log_file FILE location of the log file\n\n -d, --[no-]debug Run in debug mode\n\n -t, --test Only show what whould have been executed in no-test mode<\/pre>\n<p>Right now there are no hosts in Foreman. We&#8217;ll use Foreman Provision to add some automatically.<\/p>\n<p>Set the Foreman Provision authentication credentials that will be used to log into Foreman. You can find the OAuth credentials in the Foreman Settings tab:<\/p>\n<p><a href=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/Screen-Shot-2015-04-30-at-14.07.43.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-432 size-large\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/Screen-Shot-2015-04-30-at-14.07.43-1024x355.png\" alt=\"OAuth Settings\" width=\"800\" height=\"277\" \/><\/a><\/p>\n<pre class=\"lang:default decode:true \"># cp conf\/auth.yaml.sample conf\/foreman.yaml\n\n# cat conf\/foreman.yaml\n\n---\n\n:base_url: https:\/\/127.0.0.1\n\n:oauth:\n\n :consumer_key: qdoDReaienP8396KVwUKRKCZ2HsafxVt\n\n :consumer_secret: 6SGE3MWh2oDq8PtfwWUC5CSpQsVpzBpW\n\n:headers:\n\n :foreman_user: admin\n\n:options:\n\n :verify_ssl: 0\n\n<\/pre>\n<p>Let&#8217;s get\u00a0to the interesting part, the file that describes our services. You can find examples in the <span class=\"lang:default decode:true crayon-inline \">examples\/<\/span>\u00a0\u00a0directory of your repository clone. We&#8217;ll use the following config:<\/p>\n<pre class=\"lang:default decode:true\"># cat conf\/config.yaml\n\n---\n\n:subnets:\n\n  - :name: default\n\n    :network: 10.10.30.0\n\n    :mask: 255.255.255.0\n\n    :gateway: 10.0.2.15\n\n    :from: 10.10.30.200\n\n    :to: 10.10.30.250\n\n    :dns_primary: 10.10.30.100\n\n    :dhcp_proxy: foreman.vagrant.inovex.de\n\n    :tftp_proxy: foreman.vagrant.inovex.de\n\n    :dns_proxy: foreman.vagrant.inovex.de\n\n    :domain_names:\n\n      - vagrant.inovex.de\n\n:domains:\n\n  - :name: vagrant.inovex.de\n\n    :dns_proxy: foreman.vagrant.inovex.de\n\n    :fullname: Main Domain\n\n:hostgroups:\n\n  - :name: Test-Hosts\n\n    :architecture: x86_64\n\n    :operatingsystem: CentOS 7.0\n\n    :medium: CentOS mirror\n\n    :ptable: Kickstart default\n\n    :environment: production\n\n    # Requires imported classes:\n\n    #:puppetclasses:\n\n    #  - stdlib\n\n    :subnet: default\n\n    :domain: vagrant.inovex.de\n\n    :puppet_proxy: foreman.vagrant.inovex.de\n\n    :puppet_ca_proxy: foreman.vagrant.inovex.de\n\n    :root_pass: $1$HBWWOy7F$BtZTzR5x1T.nikDzxLusu1 # PleaseChangeMeSoon!\n\n:hosts:\n\n  - :name: test1.vagrant.inovex.de\n\n    :hostgroup: Test-Hosts\n\n    :mac: 06:10:9f:dc:aa:a1\n\n  - :name: test2.vagrant.inovex.de\n\n    :hostgroup: Test-Hosts\n\n    :mac: 06:10:9f:dc:aa:a2\n\n  - :name: test3.vagrant.inovex.de\n\n    :hostgroup: Test-Hosts\n\n    :mac: 06:10:9f:dc:aa:a3\n\n  - :name: test4.vagrant.inovex.de\n\n    :hostgroup: Test-Hosts\n\n    :mac: 06:10:9f:dc:aa:a4\n\n  - :name: test5.vagrant.inovex.de\n\n    :hostgroup: Test-Hosts\n\n    :mac: 06:10:9f:dc:aa:a5\n\n  - :name: test6.vagrant.inovex.de\n\n    :hostgroup: Test-Hosts\n\n    :mac: 06:10:9f:dc:aa:a6\n\n  - :name: test7.vagrant.inovex.de\n\n    :hostgroup: Test-Hosts\n\n    :mac: 06:10:9f:dc:aa:a7\n\n  - :name: test8.vagrant.inovex.de\n\n    :hostgroup: Test-Hosts\n\n    :mac: 06:10:9f:dc:aa:a8<\/pre>\n<p>Here we define four arrays: subnets, domains, hostgroups and hosts. Each of them expects a minimum list of attributes. Hosts for example make use of hostgroups that define attributes on a higher abstraction level. Hosts that are added to the hostgroup Test-Hosts run\u00a0the operating system CentOS 7.0, have an IP address in the subnet named default, will be added to the production environment and much more.<\/p>\n<p>Simply copy &amp; paste this YAML-formatted data into the file <span class=\"lang:default decode:true crayon-inline\">conf\/config.yaml<\/span>. We&#8217;ll execute the\u00a0tool in test mode first to see what it does.<\/p>\n<pre class=\"lang:sh decode:true\"># .\/bin\/foreman-provision --auth_credentials=conf\/foreman.yaml --config_file=conf\/config.yaml --verbose --test\n\nI, [2015-04-30T14:19:45.548110 #7558] INFO -- : Running provision in test mode\n\nI, [2015-04-30T14:19:48.145201 #7558] INFO -- : Would have created ForemanProvision::Subnet {:dhcp_proxy=&gt;\"foreman.vagrant.inovex.de\", :dns_primary=&gt;\"10.10.30.100\", :dns_proxy=&gt;\"foreman.vagrant.inovex.de\", :domain_names=&gt;[\"vagrant.inovex.de\"], :from=&gt;\"10.10.30.200\", :gateway=&gt;\"10.0.2.15\", :mask=&gt;\"255.255.255.0\", :name=&gt;\"default\", :network=&gt;\"10.10.30.0\", :ensure=&gt;\"present\", :tftp_proxy=&gt;\"foreman.vagrant.inovex.de\", :to=&gt;\"10.10.30.250\"}\n\nI, [2015-04-30T14:19:48.205820 #7558] INFO -- : Would have created ForemanProvision::Domain {:dns_proxy=&gt;\"foreman.vagrant.inovex.de\", :name=&gt;\"vagrant.inovex.de\", :ensure=&gt;\"present\"}\n\nI, [2015-04-30T14:19:48.262722 #7558] INFO -- : Would have created ForemanProvision::Hostgroup {:architecture=&gt;\"x86_64\", :domain=&gt;\"vagrant.inovex.de\", :environment=&gt;\"production\", :medium=&gt;\"CentOS mirror\", :name=&gt;\"Test-Hosts\", :operatingsystem=&gt;\"CentOS 7.0\", :ptable=&gt;\"Kickstart default\", :puppet_ca_proxy=&gt;\"foreman.vagrant.inovex.de\", :puppet_proxy=&gt;\"foreman.vagrant.inovex.de\", :ensure=&gt;\"present\", :subnet=&gt;\"default\", :root_pass=&gt;\"$1$HBWWOy7F$BtZTzR5x1T.nikDzxLusu1\"}\n\nI, [2015-04-30T14:19:48.520832 #7558] INFO -- : Would have created ForemanProvision::Host {:build=&gt;true, :hostgroup=&gt;\"Test-Hosts\", :mac=&gt;\"06:10:9f:dc:aa:a1\", :name=&gt;\"test1.vagrant.inovex.de\", :ensure=&gt;\"present\"}\n\nI, [2015-04-30T14:19:48.573815 #7558] INFO -- : Would have created ForemanProvision::Host {:build=&gt;true, :hostgroup=&gt;\"Test-Hosts\", :mac=&gt;\"06:10:9f:dc:aa:a2\", :name=&gt;\"test2.vagrant.inovex.de\", :ensure=&gt;\"present\"}\n\nI, [2015-04-30T14:19:48.620808 #7558] INFO -- : Would have created ForemanProvision::Host {:build=&gt;true, :hostgroup=&gt;\"Test-Hosts\", :mac=&gt;\"06:10:9f:dc:aa:a3\", :name=&gt;\"test3.vagrant.inovex.de\", :ensure=&gt;\"present\"}\n\nI, [2015-04-30T14:19:48.664718 #7558] INFO -- : Would have created ForemanProvision::Host {:build=&gt;true, :hostgroup=&gt;\"Test-Hosts\", :mac=&gt;\"06:10:9f:dc:aa:a4\", :name=&gt;\"test4.vagrant.inovex.de\", :ensure=&gt;\"present\"}\n\nI, [2015-04-30T14:19:48.710835 #7558] INFO -- : Would have created ForemanProvision::Host {:build=&gt;true, :hostgroup=&gt;\"Test-Hosts\", :mac=&gt;\"06:10:9f:dc:aa:a5\", :name=&gt;\"test5.vagrant.inovex.de\", :ensure=&gt;\"present\"}\n\nI, [2015-04-30T14:19:48.755936 #7558] INFO -- : Would have created ForemanProvision::Host {:build=&gt;true, :hostgroup=&gt;\"Test-Hosts\", :mac=&gt;\"06:10:9f:dc:aa:a6\", :name=&gt;\"test6.vagrant.inovex.de\", :ensure=&gt;\"present\"}\n\nI, [2015-04-30T14:19:48.806524 #7558] INFO -- : Would have created ForemanProvision::Host {:build=&gt;true, :hostgroup=&gt;\"Test-Hosts\", :mac=&gt;\"06:10:9f:dc:aa:a7\", :name=&gt;\"test7.vagrant.inovex.de\", :ensure=&gt;\"present\"}\n\nI, [2015-04-30T14:19:48.852077 #7558] INFO -- : Would have created ForemanProvision::Host {:build=&gt;true, :hostgroup=&gt;\"Test-Hosts\", :mac=&gt;\"06:10:9f:dc:aa:a8\", :name=&gt;\"test8.vagrant.inovex.de\", :ensure=&gt;\"present\"}<\/pre>\n<p>Looks great, now fire up those commands in god mode! \ud83d\ude42<\/p>\n<pre class=\"lang:sh decode:true\"># .\/bin\/foreman-provision --auth_credentials=conf\/foreman.yaml --config_file=conf\/config.yaml --verbose\n\nI, [2015-04-30T14:31:26.803539 #8876] INFO -- : Creating ForemanProvision::Subnet \"default\"\n\nI, [2015-04-30T14:31:27.153563 #8876] INFO -- : Creating ForemanProvision::Domain \"vagrant.inovex.de\"\n\nI, [2015-04-30T14:31:27.346275 #8876] INFO -- : Creating ForemanProvision::Hostgroup \"Test-Hosts\"\n\nI, [2015-04-30T14:31:28.094002 #8876] INFO -- : Creating ForemanProvision::Host \"test1\"\n\nI, [2015-04-30T14:31:31.497792 #8876] INFO -- : Creating ForemanProvision::Host \"test2\"\n\nI, [2015-04-30T14:31:35.019888 #8876] INFO -- : Creating ForemanProvision::Host \"test3\"\n\nI, [2015-04-30T14:31:38.693246 #8876] INFO -- : Creating ForemanProvision::Host \"test4\"\n\nI, [2015-04-30T14:31:42.596104 #8876] INFO -- : Creating ForemanProvision::Host \"test5\"\n\nI, [2015-04-30T14:31:46.213550 #8876] INFO -- : Creating ForemanProvision::Host \"test6\"\n\nI, [2015-04-30T14:31:49.861588 #8876] INFO -- : Creating ForemanProvision::Host \"test7\"\n\nI, [2015-04-30T14:31:53.421355 #8876] INFO -- : Creating ForemanProvision::Host \"test8\"<\/pre>\n<p>That was easy! What happens when we execute this again?<\/p>\n<pre class=\"lang:sh decode:true\"># .\/bin\/foreman-provision --auth_credentials=conf\/foreman.yaml --config_file=conf\/config.yaml --verbose\n\nI, [2015-04-30T14:35:23.659289 #22543] INFO -- : Skipping - ForemanProvision::Subnet \"default\" already exists!\n\nI, [2015-04-30T14:35:23.704458 #22543] INFO -- : Skipping - ForemanProvision::Domain \"vagrant.inovex.de\" already exists!\n\nI, [2015-04-30T14:35:23.761573 #22543] INFO -- : Skipping - ForemanProvision::Hostgroup \"Test-Hosts\" already exists!\n\nI, [2015-04-30T14:35:23.965082 #22543] INFO -- : Skipping - ForemanProvision::Host \"test1.vagrant.inovex.de\" already exists!\n\nI, [2015-04-30T14:35:24.037171 #22543] INFO -- : Skipping - ForemanProvision::Host \"test2.vagrant.inovex.de\" already exists!\n\nI, [2015-04-30T14:35:24.126529 #22543] INFO -- : Skipping - ForemanProvision::Host \"test3.vagrant.inovex.de\" already exists!\n\nI, [2015-04-30T14:35:24.202907 #22543] INFO -- : Skipping - ForemanProvision::Host \"test4.vagrant.inovex.de\" already exists!\n\nI, [2015-04-30T14:35:24.272970 #22543] INFO -- : Skipping - ForemanProvision::Host \"test5.vagrant.inovex.de\" already exists!\n\nI, [2015-04-30T14:35:24.346133 #22543] INFO -- : Skipping - ForemanProvision::Host \"test6.vagrant.inovex.de\" already exists!\n\nI, [2015-04-30T14:35:24.425876 #22543] INFO -- : Skipping - ForemanProvision::Host \"test7.vagrant.inovex.de\" already exists!\n\nI, [2015-04-30T14:35:24.494396 #22543] INFO -- : Skipping - ForemanProvision::Host \"test8.vagrant.inovex.de\" already exists!<\/pre>\n<p>Right, the tool recognizes the existence\u00a0of these resources and simply skips creation. Now we see that hosts appear in the Foreman UI:<\/p>\n<p><a href=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/Screen-Shot-2015-04-30-at-14.37.26.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-433 size-large\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/Screen-Shot-2015-04-30-at-14.37.26-1024x438.png\" alt=\"Foreman Hosts Added\" width=\"800\" height=\"342\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/Screen-Shot-2015-04-30-at-14.41.43.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-434 size-large\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/04\/Screen-Shot-2015-04-30-at-14.41.43-1024x720.png\" alt=\"Foreman Host Details\" width=\"800\" height=\"563\" \/><\/a><\/p>\n<p>Now these hosts will PXE boot over\u00a0the network, install an operating system on hard disk and after\u00a0booting for the first time\u00a0tools like SaltStack, Rex or Puppet will take care of installing and configuring additional software that makes your new hosts ready to use in production.<\/p>\n<p>You can also use compute resources like KVM\/vsphere to deploy VMs in your virtual infrastructure. See the\u00a0<span class=\"lang:default decode:true crayon-inline\">examples\/<\/span>\u00a0directory for some examples.<\/p>\n<p>Want to learn more about Foreman? Take a look at our <a title=\"https:\/\/www.inovex.de\/de\/content-pool\/vortraege\/\" href=\"https:\/\/www.inovex.de\/de\/content-pool\/vortraege\/\">slides and videos<\/a>\u00a0of the talks we give at\u00a0various events.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>At inovex we use open source technology\u00a0on a daily basis\u00a0and try to give back to the community in return. One great example is the Foreman Provision project that was initially created by my\u00a0co-worker\u00a0Nils Domrose in\u00a0co-operation with our customer Filiadata GmbH,\u00a0the IT service provider for German company\u00a0dm-drogerie markt GmbH + Co. KG. Foreman Provision is a [&hellip;]<\/p>\n","protected":false},"author":21,"featured_media":12071,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"ep_exclude_from_search":false,"footnotes":""},"tags":[71,66],"service":[],"coauthors":[{"id":21,"display_name":"Arnold Bechtoldt","user_nicename":"abechtoldt"}],"class_list":["post-422","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-cloud","tag-devops"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Foreman Provision: Comfortable Resource Management<\/title>\n<meta name=\"description\" content=\"Foreman Provision is a comfortable wrapper that uses the Foreman REST API to create and manage resources in Foreman.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Foreman Provision: Comfortable Resource Management\" \/>\n<meta property=\"og:description\" content=\"Foreman Provision is a comfortable wrapper that uses the Foreman REST API to create and manage resources in Foreman.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/\" \/>\n<meta property=\"og:site_name\" content=\"inovex GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/inovexde\" \/>\n<meta property=\"article:published_time\" content=\"2015-05-06T17:37:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/05\/foreman-titelbild.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2300\" \/>\n\t<meta property=\"og:image:height\" content=\"678\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Arnold Bechtoldt\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/05\/foreman-titelbild-1024x302.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:site\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Arnold Bechtoldt\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"8\u00a0Minuten\" \/>\n\t<meta name=\"twitter:label3\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data3\" content=\"Arnold Bechtoldt\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\\\/\"},\"author\":{\"name\":\"Arnold Bechtoldt\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/3cb57585db2220584e0f6e48d048cc60\"},\"headline\":\"Foreman Provision: A Comfortable Resource Management Tool for Foreman\",\"datePublished\":\"2015-05-06T17:37:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\\\/\"},\"wordCount\":514,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2015\\\/05\\\/foreman-titelbild.jpg\",\"keywords\":[\"Cloud\",\"DevOps\"],\"articleSection\":[\"English Content\",\"General\",\"Infrastructure\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\\\/\",\"name\":\"Foreman Provision: Comfortable Resource Management\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2015\\\/05\\\/foreman-titelbild.jpg\",\"datePublished\":\"2015-05-06T17:37:56+00:00\",\"description\":\"Foreman Provision is a comfortable wrapper that uses the Foreman REST API to create and manage resources in Foreman.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2015\\\/05\\\/foreman-titelbild.jpg\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2015\\\/05\\\/foreman-titelbild.jpg\",\"width\":2300,\"height\":678,\"caption\":\"Foreman Logo auf blauem Hintergrund\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Foreman Provision: A Comfortable Resource Management Tool for Foreman\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"name\":\"inovex GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\",\"name\":\"inovex GmbH\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"width\":1921,\"height\":1081,\"caption\":\"inovex GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/inovexde\",\"https:\\\/\\\/x.com\\\/inovexgmbh\",\"https:\\\/\\\/www.instagram.com\\\/inovexlife\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/inovex\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UC7r66GT14hROB_RQsQBAQUQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/3cb57585db2220584e0f6e48d048cc60\",\"name\":\"Arnold Bechtoldt\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0c28f8dbb67c94f608c092cc625fbf1b8bacff2b6ef0e6218c1d8fd87afc8393?s=96&d=retro&r=g18a91ac4e28685d3afe9ee4473a3b229\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0c28f8dbb67c94f608c092cc625fbf1b8bacff2b6ef0e6218c1d8fd87afc8393?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0c28f8dbb67c94f608c092cc625fbf1b8bacff2b6ef0e6218c1d8fd87afc8393?s=96&d=retro&r=g\",\"caption\":\"Arnold Bechtoldt\"},\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/author\\\/abechtoldt\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Foreman Provision: Comfortable Resource Management","description":"Foreman Provision is a comfortable wrapper that uses the Foreman REST API to create and manage resources in Foreman.","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:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/","og_locale":"de_DE","og_type":"article","og_title":"Foreman Provision: Comfortable Resource Management","og_description":"Foreman Provision is a comfortable wrapper that uses the Foreman REST API to create and manage resources in Foreman.","og_url":"https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/","og_site_name":"inovex GmbH","article_publisher":"https:\/\/www.facebook.com\/inovexde","article_published_time":"2015-05-06T17:37:56+00:00","og_image":[{"width":2300,"height":678,"url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/05\/foreman-titelbild.jpg","type":"image\/jpeg"}],"author":"Arnold Bechtoldt","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/05\/foreman-titelbild-1024x302.jpg","twitter_creator":"@inovexgmbh","twitter_site":"@inovexgmbh","twitter_misc":{"Verfasst von":"Arnold Bechtoldt","Gesch\u00e4tzte Lesezeit":"8\u00a0Minuten","Written by":"Arnold Bechtoldt"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/#article","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/"},"author":{"name":"Arnold Bechtoldt","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/3cb57585db2220584e0f6e48d048cc60"},"headline":"Foreman Provision: A Comfortable Resource Management Tool for Foreman","datePublished":"2015-05-06T17:37:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/"},"wordCount":514,"commentCount":3,"publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/05\/foreman-titelbild.jpg","keywords":["Cloud","DevOps"],"articleSection":["English Content","General","Infrastructure"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/","url":"https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/","name":"Foreman Provision: Comfortable Resource Management","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/#primaryimage"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/05\/foreman-titelbild.jpg","datePublished":"2015-05-06T17:37:56+00:00","description":"Foreman Provision is a comfortable wrapper that uses the Foreman REST API to create and manage resources in Foreman.","breadcrumb":{"@id":"https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/#primaryimage","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/05\/foreman-titelbild.jpg","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/05\/foreman-titelbild.jpg","width":2300,"height":678,"caption":"Foreman Logo auf blauem Hintergrund"},{"@type":"BreadcrumbList","@id":"https:\/\/www.inovex.de\/de\/blog\/foreman-provision-a-comfortable-resource-management-tool-for-foreman\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.inovex.de\/de\/"},{"@type":"ListItem","position":2,"name":"Foreman Provision: A Comfortable Resource Management Tool for Foreman"}]},{"@type":"WebSite","@id":"https:\/\/www.inovex.de\/de\/#website","url":"https:\/\/www.inovex.de\/de\/","name":"inovex GmbH","description":"","publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.inovex.de\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.inovex.de\/de\/#organization","name":"inovex GmbH","url":"https:\/\/www.inovex.de\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","width":1921,"height":1081,"caption":"inovex GmbH"},"image":{"@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/inovexde","https:\/\/x.com\/inovexgmbh","https:\/\/www.instagram.com\/inovexlife\/","https:\/\/www.linkedin.com\/company\/inovex","https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ"]},{"@type":"Person","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/3cb57585db2220584e0f6e48d048cc60","name":"Arnold Bechtoldt","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/0c28f8dbb67c94f608c092cc625fbf1b8bacff2b6ef0e6218c1d8fd87afc8393?s=96&d=retro&r=g18a91ac4e28685d3afe9ee4473a3b229","url":"https:\/\/secure.gravatar.com\/avatar\/0c28f8dbb67c94f608c092cc625fbf1b8bacff2b6ef0e6218c1d8fd87afc8393?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c28f8dbb67c94f608c092cc625fbf1b8bacff2b6ef0e6218c1d8fd87afc8393?s=96&d=retro&r=g","caption":"Arnold Bechtoldt"},"url":"https:\/\/www.inovex.de\/de\/blog\/author\/abechtoldt\/"}]}},"_links":{"self":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/422","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/comments?post=422"}],"version-history":[{"count":0,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/422\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media\/12071"}],"wp:attachment":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media?parent=422"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/tags?post=422"},{"taxonomy":"service","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/service?post=422"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/coauthors?post=422"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}