From 594ef4ac4454681a17443ca8cbbd69a57360cd14 Mon Sep 17 00:00:00 2001 From: Heorhi Vysotski Date: Mon, 17 Apr 2017 08:14:57 +0300 Subject: [PATCH 1/8] Create Vagrantfile (server) --- Vagrantfile (server) | 94 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 Vagrantfile (server) diff --git a/Vagrantfile (server) b/Vagrantfile (server) new file mode 100644 index 0000000..81fe6c7 --- /dev/null +++ b/Vagrantfile (server) @@ -0,0 +1,94 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure("2") do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + # Every Vagrant development environment requires a box. You can search for + # boxes at https://atlas.hashicorp.com/search. + config.vm.box = "centos/7" + + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + # config.vm.box_check_update = false + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + # config.vm.network "forwarded_port", guest: 80, host: 8080 + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + # config.vm.network "private_network", ip: "192.168.33.10" + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + # config.vm.network "public_network" do |vb| + + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + #config.vm.synced_folder "../data", "/vagrant_data" + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + #config.vm.provider "virtualbox" do |vb| + # # Display the VirtualBox GUI when booting the machine + # vb.gui = true + # + #Customize the amount of memory on the VM1: + #vb.name = "my_nginx" + #vb.memory = 2048 + # end + + #config.vm.provider "virtualbox" do |v| + # # Display the VirtualBox GUI when booting the machine + # vb.gui = true + # + #Customize the amount of memory on the VM2: + #v.name = "my_tomcat" + #v.memory = 4096 + #end + # + + config.vm.define "server" do |puppet| + puppet.vm.hostname = "server.hv" + puppet.vm.network :private_network, ip: "192.168.20.100" + puppet.vm.provision "shell", inline: <<-SHELL + echo "192.168.20.10 agent.hv" >> /etc/hosts + echo "192.168.20.20 agent2.hv" >> /etc/hosts + systemctl restart network.service + rpm -Uvh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm + yum install puppetserver -y + SHELL + end + + # puppet resource package puppetdb ensure=latest + + # View the documentation for the provider you are using for more + # information on available options. + + # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies + # such as FTP and Heroku are also available. See the documentation at + # https://docs.vagrantup.com/v2/push/atlas.html for more information. + # config.push.define "atlas" do |push| + # push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME" + # end + + # Enable provisioning with a shell script. Additional provisioners such as + # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the + # documentation for more information about their specific syntax and use. + +end From 0177f4cf0c4516100e1f431e7f404106243daa91 Mon Sep 17 00:00:00 2001 From: Heorhi Vysotski Date: Mon, 17 Apr 2017 08:15:38 +0300 Subject: [PATCH 2/8] Create Vagrantfile (node1) --- Vagrantfile (node1) | 92 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 Vagrantfile (node1) diff --git a/Vagrantfile (node1) b/Vagrantfile (node1) new file mode 100644 index 0000000..29db5d9 --- /dev/null +++ b/Vagrantfile (node1) @@ -0,0 +1,92 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure("2") do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + # Every Vagrant development environment requires a box. You can search for + # boxes at https://atlas.hashicorp.com/search. + config.vm.box = "centos/7" + + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + # config.vm.box_check_update = false + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + # config.vm.network "forwarded_port", guest: 80, host: 8080 + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + # config.vm.network "private_network", ip: "192.168.33.10" + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + # config.vm.network "public_network" do |vb| + + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + #config.vm.synced_folder "../data", "/vagrant_data" + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + #config.vm.provider "virtualbox" do |vb| + # # Display the VirtualBox GUI when booting the machine + # vb.gui = true + # + #Customize the amount of memory on the VM1: + #vb.name = "my_nginx" + #vb.memory = 2048 + # end + + #config.vm.provider "virtualbox" do |v| + # # Display the VirtualBox GUI when booting the machine + # vb.gui = true + # + #Customize the amount of memory on the VM2: + #v.name = "my_tomcat" + #v.memory = 4096 + #end + # + + config.vm.define "agent" do |puppet| + puppet.vm.hostname = "agent.hv" + puppet.vm.network :private_network, ip: "192.168.20.10" + puppet.vm.provision "shell", inline: <<-SHELL + echo "192.168.20.100 server.hv" >> /etc/hosts + systemctl restart network.service + rpm -Uvh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm + yum install puppet-agent -y + SHELL + end + + # puppet resource package puppetdb ensure=latest + + # View the documentation for the provider you are using for more + # information on available options. + + # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies + # such as FTP and Heroku are also available. See the documentation at + # https://docs.vagrantup.com/v2/push/atlas.html for more information. + # config.push.define "atlas" do |push| + # push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME" + # end + + # Enable provisioning with a shell script. Additional provisioners such as + # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the + # documentation for more information about their specific syntax and use. +end From fa71208a8c15fce6a1af562a777d66556973fae3 Mon Sep 17 00:00:00 2001 From: Heorhi Vysotski Date: Mon, 17 Apr 2017 08:16:37 +0300 Subject: [PATCH 3/8] Create Vagrantfile (node2) --- Vagrantfile (node2) | 92 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 Vagrantfile (node2) diff --git a/Vagrantfile (node2) b/Vagrantfile (node2) new file mode 100644 index 0000000..2af07f3 --- /dev/null +++ b/Vagrantfile (node2) @@ -0,0 +1,92 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure("2") do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + # Every Vagrant development environment requires a box. You can search for + # boxes at https://atlas.hashicorp.com/search. + config.vm.box = "centos/7" + + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + # config.vm.box_check_update = false + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + # config.vm.network "forwarded_port", guest: 80, host: 8080 + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + # config.vm.network "private_network", ip: "192.168.33.10" + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + # config.vm.network "public_network" do |vb| + + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + #config.vm.synced_folder "../data", "/vagrant_data" + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + #config.vm.provider "virtualbox" do |vb| + # # Display the VirtualBox GUI when booting the machine + # vb.gui = true + # + #Customize the amount of memory on the VM1: + #vb.name = "my_nginx" + #vb.memory = 2048 + # end + + #config.vm.provider "virtualbox" do |v| + # # Display the VirtualBox GUI when booting the machine + # vb.gui = true + # + #Customize the amount of memory on the VM2: + #v.name = "my_tomcat" + #v.memory = 4096 + #end + # + + config.vm.define "agent" do |puppet| + puppet.vm.hostname = "agent2.hv" + puppet.vm.network :private_network, ip: "192.168.20.20" + puppet.vm.provision "shell", inline: <<-SHELL + echo "192.168.20.100 server.hv" >> /etc/hosts + systemctl restart network.service + rpm -Uvh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm + yum install puppet-agent -y + SHELL + end + + # puppet resource package puppetdb ensure=latest + + # View the documentation for the provider you are using for more + # information on available options. + + # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies + # such as FTP and Heroku are also available. See the documentation at + # https://docs.vagrantup.com/v2/push/atlas.html for more information. + # config.push.define "atlas" do |push| + # push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME" + # end + + # Enable provisioning with a shell script. Additional provisioners such as + # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the + # documentation for more information about their specific syntax and use. +end From 65456579e2e63670439045da2d08bdd93cd62a1e Mon Sep 17 00:00:00 2001 From: Heorhi Vysotski Date: Mon, 17 Apr 2017 08:18:22 +0300 Subject: [PATCH 4/8] Create site.pp (production environment) --- site.pp (production environment) | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 site.pp (production environment) diff --git a/site.pp (production environment) b/site.pp (production environment) new file mode 100644 index 0000000..ada377a --- /dev/null +++ b/site.pp (production environment) @@ -0,0 +1,30 @@ +node 'server.hv' { + class { 'puppetdb': } + class { 'puppetdb::master::config': } + class { '::puppetexplorer': + vhost_options => { + rewrites => [{ rewrite_rule => ['^/api/metrics/v1/mbeans/puppetlabs.pupetdb.query.population:type=default, name=(.*)$ https://%{HTTP_HOST}/api/metrics/mbeans/v1/puppetlabs.puppetdb.population:name=$1 [R=301,L]']}] + } + } +} + +node 'agent.hv' { + class {'::mysql::server': + root_password => 'password', + } + mysql_database {'test_mdb': + ensure => present, + charset => 'utf8', + } + mysql_user { 'test_user@localhost': + ensure => present, + password_hash => mysql_password('test'), + } + mysql_grant {'test_user@localhost/test_mdb.*': + ensure => present, + options => ['GRANT'], + privileges => ['ALL'], + table => 'test_mdb.*', + user => 'test_user@localhost', + } +} From 9f1a2a100acfa6f901d84a43854e0e6759ec90ce Mon Sep 17 00:00:00 2001 From: Heorhi Vysotski Date: Mon, 17 Apr 2017 08:18:51 +0300 Subject: [PATCH 5/8] Create site.pp (prod environment) --- site.pp (prod environment) | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 site.pp (prod environment) diff --git a/site.pp (prod environment) b/site.pp (prod environment) new file mode 100644 index 0000000..9f8fecd --- /dev/null +++ b/site.pp (prod environment) @@ -0,0 +1,26 @@ +node 'agent2.hv' { + + class {"nginx":} + + class {'::mysql::server': + root_password => 'password', + } + + mysql_database {'test_mdb': + ensure => present, + charset => 'utf8', + } + + mysql_user { 'test_user@localhost': + ensure => present, + password_hash => mysql_password('test'), + } + + mysql_grant {'test_user@localhost/test_mdb.*': + ensure => present, + options => ['GRANT'], + privileges => ['ALL'], + table => 'test_mdb.*', + user => 'test_user@localhost', + } +} From 7a291dff99e0a87d959209293e27b259be8e9bc3 Mon Sep 17 00:00:00 2001 From: Heorhi Vysotski Date: Mon, 17 Apr 2017 08:19:32 +0300 Subject: [PATCH 6/8] Create puppet.conf --- puppet.conf | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 puppet.conf diff --git a/puppet.conf b/puppet.conf new file mode 100644 index 0000000..40b05c4 --- /dev/null +++ b/puppet.conf @@ -0,0 +1,19 @@ +# This file can be used to override the default puppet settings. +# See the following links for more details on what settings are available: +# - https://docs.puppetlabs.com/puppet/latest/reference/config_important_settings.html +# - https://docs.puppetlabs.com/puppet/latest/reference/config_about_settings.html +# - https://docs.puppetlabs.com/puppet/latest/reference/config_file_main.html +# - https://docs.puppetlabs.com/puppet/latest/reference/configuration.html +[master] +vardir = /opt/puppetlabs/server/data/puppetserver +logdir = /var/log/puppetlabs/puppetserver +rundir = /var/run/puppetlabs/puppetserver +pidfile = /var/run/puppetlabs/puppetserver/puppetserver.pid +codedir = /etc/puppetlabs/code +storeconfigs = true +storeconfigs_backend = puppetdb +reports = store, puppetdb + +[main] +server_urls = https://server.hv:8081/ +soft_write_failure = false From 3fe99f659bf9b1cbb3bf4e8b82270ae11122d9a8 Mon Sep 17 00:00:00 2001 From: Heorhi Vysotski Date: Mon, 17 Apr 2017 08:28:04 +0300 Subject: [PATCH 7/8] Update README.md --- README.md | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 142 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f000ce..06bde34 100644 --- a/README.md +++ b/README.md @@ -1 +1,142 @@ -# lesson13 \ No newline at end of file +# Lesson 13 + +## Vagranfile for agent1 + +``` ruby +Vagrant.configure("2") do |config| + config.vm.box = "centos/7" + config.vm.define "agent" do |puppet| + puppet.vm.hostname = "agent.hv" + puppet.vm.network :private_network, ip: "192.168.20.10" + puppet.vm.provision "shell", inline: <<-SHELL + echo "192.168.20.100 server.hv" >> /etc/hosts + systemctl restart network.service + rpm -Uvh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm + yum install puppet-agent -y + SHELL + end +end +``` + +## Vagranfile for agent2 + +``` ruby +Vagrant.configure("2") do |config| + config.vm.define "agent" do |puppet| + puppet.vm.hostname = "agent2.hv" + puppet.vm.network :private_network, ip: "192.168.20.20" + puppet.vm.provision "shell", inline: <<-SHELL + echo "192.168.20.100 server.hv" >> /etc/hosts + systemctl restart network.service + rpm -Uvh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm + yum install puppet-agent -y + SHELL + end +end +``` + + +## Vagranfile for server +``` ruby +Vagrant.configure("2") do |config| + config.vm.define "server" do |puppet| + puppet.vm.hostname = "server.hv" + puppet.vm.network :private_network, ip: "192.168.20.100" + puppet.vm.provision "shell", inline: <<-SHELL + echo "192.168.20.10 agent.hv" >> /etc/hosts + echo "192.168.20.20 agent2.hv" >> /etc/hosts + systemctl restart network.service + rpm -Uvh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm + yum install puppetserver -y + SHELL + end +end +``` + +## Site.pp (prod environment) +```ruby + +node 'agent2.hv' { + + class {"nginx":} + + class {'::mysql::server': + root_password => 'password', + } + + mysql_database {'test_mdb': + ensure => present, + charset => 'utf8', + } + + mysql_user { 'test_user@localhost': + ensure => present, + password_hash => mysql_password('test'), + } + + mysql_grant {'test_user@localhost/test_mdb.*': + ensure => present, + options => ['GRANT'], + privileges => ['ALL'], + table => 'test_mdb.*', + user => 'test_user@localhost', + } +} +``` + +## Site.pp (production environment) +```ruby +node 'server.hv' { + class { 'puppetdb': } + class { 'puppetdb::master::config': } + class { '::puppetexplorer': + vhost_options => { + rewrites => [{ rewrite_rule => ['^/api/metrics/v1/mbeans/puppetlabs.pupetdb.query.population:type=default, name=(.*)$ https://%{HTTP_HOST}/api/metrics/mbeans/v1/puppetlabs.puppetdb.population:name=$1 [R=301,L]']}] + } + } +} + +node 'agent.hv' { + class {'::mysql::server': + root_password => 'password', + } + mysql_database {'test_mdb': + ensure => present, + charset => 'utf8', + } + mysql_user { 'test_user@localhost': + ensure => present, + password_hash => mysql_password('test'), + } + mysql_grant {'test_user@localhost/test_mdb.*': + ensure => present, + options => ['GRANT'], + privileges => ['ALL'], + table => 'test_mdb.*', + user => 'test_user@localhost', + } +} +``` + +## Puppet.conf +```ruby +# This file can be used to override the default puppet settings. +# See the following links for more details on what settings are available: +# - https://docs.puppetlabs.com/puppet/latest/reference/config_important_settings.html +# - https://docs.puppetlabs.com/puppet/latest/reference/config_about_settings.html +# - https://docs.puppetlabs.com/puppet/latest/reference/config_file_main.html +# - https://docs.puppetlabs.com/puppet/latest/reference/configuration.html +[master] +vardir = /opt/puppetlabs/server/data/puppetserver +logdir = /var/log/puppetlabs/puppetserver +rundir = /var/run/puppetlabs/puppetserver +pidfile = /var/run/puppetlabs/puppetserver/puppetserver.pid +codedir = /etc/puppetlabs/code +storeconfigs = true +storeconfigs_backend = puppetdb +reports = store, puppetdb + +[main] +server_urls = https://server.hv:8081/ +soft_write_failure = false +``` From e5e87e22bf817f11698ddaa030a31c10e7406ec4 Mon Sep 17 00:00:00 2001 From: Heorhi Vysotski Date: Mon, 17 Apr 2017 08:35:57 +0300 Subject: [PATCH 8/8] Create puppet.conf (agent2) --- puppet.conf (agent2) | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 puppet.conf (agent2) diff --git a/puppet.conf (agent2) b/puppet.conf (agent2) new file mode 100644 index 0000000..1787561 --- /dev/null +++ b/puppet.conf (agent2) @@ -0,0 +1,8 @@ +# This file can be used to override the default puppet settings. +# See the following links for more details on what settings are available: +# - https://docs.puppetlabs.com/puppet/latest/reference/config_important_settings.html +# - https://docs.puppetlabs.com/puppet/latest/reference/config_about_settings.html +# - https://docs.puppetlabs.com/puppet/latest/reference/config_file_main.html +# - https://docs.puppetlabs.com/puppet/latest/reference/configuration.html +server = server.hv +environment = prod