puppet code for windows environment?

Building blocks of Puppet

  1. Resources
  2. Classes
  3. Manifest
  4. Modules

Install Puppet Windows Module Pack

puppet module install puppetlabs/windows

puppet module list

How to copy directory and it’s files using puppet

$soure_dir=c:\temp\puppetcode\Source
$destination_dir= c:\temp\puppetcode\Destination

file { $destination_dir :
ensure  => 'directory',
source  => "file://${source_dir}",
recurse => true,
}

Copy folder and remove the original folder

$soure_dir=c:\temp\puppetcode\Source
$destination_dir= c:\temp\puppetcode\Destination

file { $destination_dir :
ensure  => 'directory',
source  => "file://${source_dir}",
recurse => true,
before=> File[$source_dir],
}

file{$source_dir :
	ensure=>'absent',
	purge=>true,
	recurse=>,
	force=>true,

}

Simple code to copy folders

file {'/my/path':
    ensure  => 'directory',
    path    => '/my/path',
    recurse => true,
    source  => '/home/user_name/scripts',
    }

Running puppet code on different environment

puppet agent -t --environment production
puppet agent -t --environment stage
puppet agent -t --environment development

Adding git and auto deploy puppet code

git init --bare /srv/git/repos/mypuppetcode.git
git clone  /srv/git/repos/mypuppetcode.git

Add environment.conf file

moudulepath=site:modules:$basemodulepath
mainfest=mainfests/site.pp

Add working environment

puppet config print environment #Display the current environment

sudo puppet config set environment set environment dev

Create Modules

cd / etc/puppetlabs/code/environments/production/modules

sudo mkdir -p motd/{manifests,files,examples}

sudo vim motd/examples/init.pp

motd/mainfest/init.pp

class motd{
       file{'/etc/motd':
       ensure=> 'present',
       content=>file('motd/message'),
      }
}

sudo vim motd/files/message

write a content such as “Welcome to my server”

<environment> /modules

<modulename>/mainfests/init.pp

class motd{

}

content=>file(‘motd/message’) # motd/files/message

Modules Metadata

cd /etc/puppetlabs/code/environments/production/modules

sudo puppet module generate shiva/test

sudo puppet module generate shiva/test –skip-interview # skip

Create NTP module

/etc/puppetlabs/code/enviroments/production/modules

sudo mkdir -p ntp / {manifests,files,examples}

in windows

puppet module generate modules/ntp

Add puppet ACL for IIS Default App Pool

acl { 'C:\inetpub\wwwroot\uploads':
  permissions => [
   { identity => 'IIS AppPool\DefaultAppPool', rights => ['full'] }
 ],
}

Adding Registry Key Value

registry_key { 'hklm\software\mykey':
  ensure => present,
}

registry_value { 'hklm\software\mykey\value1':
  type => string,
  data => 'this is a value'
}

Configure Firewall

firewall-cmd --permanent --zone=public --add-port=8140/tcp
firewall-cmd –reload

Start/Enable puppet server

systemctl start puppetserver
systemctl enable puppetserver
systemctl status puppetserver
puppet status
netstat -anpl | grep 8140

Puppet syntax for if condition, variable, selector and class

Puppet Site:https://puppet.com/

Puppet Forge :https://forge.puppet.com/

git and puppet https://puppet.com/blog/how-to-use-git-commit-hooks-puppet-enterprise

Puppet variables=A variable hold the value for e.g.  x=1 where x is a variable which holds value 1.

Example that displays how to create and use variable in puppet

class linux{

    $admintools=['git','nano','othersoftware']
    
   package { $admintools:
      ensure=>'installed',
   }
}

 Puppet selectors =A selector assigns one of a set of possible values to a defined variable based on the condition
$ntpservice= variable
$osfamily = one of the fact from puppet

$ntpservice=$osfamily ? {
     'redhat' => 'ntpd',
     'debian' => 'ntp',
     'default' => 'ntp',
}

How to use it?

Replace 
service {'ntpd':
       ensure=>'running',
       enable => true,
}
With
service{$ntpservice:
       ensure => 'running',
       enable =>  true,
}

Class in puppet != Object Oriented Programming (oop) class  in puppet class represent  a named collection of resources declaration such as variable, selector or any other puppet code. It is simply a code container. Class does help to maintain DRY(Don’t repeat yourself principle).

How to create a class in puppet?

class linux{
   package{ 'ntp':
   ensure=> 'installed',
   }
}

How to use/reuse a class?

node 'wiki'{ {class 'linux':} }

node 'wikiexample'{ {class 'linux':} }

Use of If condition in puppet

//checking a condition if osfamily is redhat then install package otherwise skip the block of code
if $osfamily=='redhat'{
  package{'php-xml':
       ensure=>'present',
  }
}

A complete example showing  if condition, variable, selector and class usages in a file init.pp (,pp is the extension for the puppet file)

//define this code under init.pp
class mediawiki{

   $phpmysql=$osfamily ? {
    'redhat' => 'php-mysql'.
    'debian' => 'php5-mysql',
    default  =>  'php-mysql',
  }
  
  package{$phpmysql:
   ensure=>'present',
 }
if $osfamily=='redhat'{
    package{'php-xml':
    ensure=>'present', 
   }
 }
}
//end of code for init.pp

//create nodes.pp file

node 'wiki'{
   class {'mediawiki':}
}

node 'wikiTest'{
   class {'mediawiki':}
}

node 'wikiStage'{
   class {'mediawiki':}
}

node 'wikiProd'{
   class {'mediawiki':}
}
RESOURCE_TYPE { TITLE:
  ATTRIBUTE => VALUE,
  ...
}

Puppet Commands:

List all certificates

puppet cert list --all  # This code will show list of certificates 
puppet cert sing -a  #Sign all certificate

Useful links

http://www.infoq.com/

http://www.dotnetrocks.com/

http://www.theverge.com/

http://thehackernews.com/

http://bitnative.com

http://www.codeguru.com/csharp/.net/net_asp/mvc/using-the-repository-pattern-with-asp.net-mvc-and-entity-framework.htm

Automapper

http://cpratt.co/using-automapper-creating-mappings/

http://www.velir.com/blog/index.php/2012/08/27/organizing-automappers-map-configurations-in-mvc/

http://www.codeguru.com/columns/experts/using-automapper-in-your-asp.net-mvc-applications.htm

Repository

http://jasonwatmore.com/post/2015/01/28/Unit-of-Work-Repository-Pattern-in-MVC5-with-Fluent-NHibernate-and-Ninject.aspx

http://rahulrajatsingh.com/2014/06/understanding-repository-and-unit-of-work-pattern-and-implementing-generic-repository-in-asp-net-mvc-using-entity-framework/

http://www.codeguru.com/csharp/.net/net_asp/mvc/using-the-repository-pattern-with-asp.net-mvc-and-entity-framework.htm

http://gaui.is/how-to-mock-the-datacontext-entity-framework/

https://medium.com/@severinperez/writing-flexible-code-with-the-single-responsibility-principle-b71c4f3f883f

Zencoding using VS Essential Plugin

Create div with class date

div.date and press tab result  <div class=”date”></div>

Create two div with class date and details

div.date+div.details press tab result

<divclass="date"></div>
<divclass="details"></div>

Learning JavaScript

Creating Object in JavaScript

1) Dot  Notation

var object={}; object.value="This is a value";

2) Square Bracket Notation

var object ={};

object['value']="This is a value";

3) Anonymous Function

function functionWithName(){
 alert("Function with name");
}

var anonymous=function(){
 alert("Function without name");
}

4) Module Pattern

(function () {
  /* module code */
}) ( );

				
								
			

Enabling OData Queries in Web API

Enabling OData Queries in Web API

Add EnableQuery Attribute (Action filter)

Change the IEnumerable return type to IQueryable

Add AsQueryable() to convert the IEnumerable to an IQueryable

[EnableQuery()]

public IQueryable<Product> Get()

{

var productRepository=new ProductRepository();

return productRepositriy.Retrieve().AsQueryable();

}

Refactoring Repository

 First Repo
IpersonRepository repository = new ServiceRepository();
var people =repository.GetPeople();
foreach(var person in people)
{
    personListBox.Items.Add(person);
}
------------------------------------------
Second Repo

IpersonRepository repository = new CSVRepository();
var people =repository.GetPeople();
foreach(var person in people)
{
    personListBox.Items.Add(person);
}

-------------------------------------
ThirdRepo

IpersonRepository repository = new SQLRepositroy();
var people =repository.GetPeople();
foreach(var person in people)
{
    personListBox.Items.Add(person);
}
-------------------------------------------------
Add new class Repository Factory class
----------------------------------------------
public static class RepositoryFactory
{
   public static IPersonRepository GetRepository(string repositoryType)
   {
       IPersonRepository repo =null;
       switch(repositoryType) 
       {
          case RepoType.Service:
             return new ServiceRepository();
            
           case RepoType.CSV:
            return new CSVRepository();
         
          case RepoType.SQL:
           return new SQLRepository();
          
         default:
            throw new ArgumentException("Invalid Repository Type");
          
       }
       return repo;
   }
}
---------------------


public enum RepoType
{
    Service,
    CSV,
    SQL
}
Take Method and Extract to method FetchData Method that takes string argument

private void FetchData(string repositoyType)
{
    IpersonRepositroy repositroy = RepositoryFactory.GetRepository(repositroyTpye);
    var people =repository.GetPeople();
    foreach(var person in people)
   {
     personListBox.Items.Add(person);
   }
}

----------------------------------
Now going back to the each method and replace the code 

FetchData( RepoType.Service);
FetchData( RepoType.CSV);
FetchData( RepoType.SQL);

 

Responsive Typography

Responsive Web Typography  for Modern Web

Measurement and Scale

  • Using max-width to make text readable  @media{ min-width: 100em){p{}}
  • Using EMs(1ems=16px) or REMs =relative ems tide to the root element. For REM need to add poly fill to support older browers.
  • Don’t use pixel.
  • Use real content instead of garbage content.

Clean Up

  • Matching based on oval/ round, wide/tall, thick/thin.
  •  Performance, Progression, Proportion, Polish.

 Selecting Typography for different business

  • Select typeface the suits your business and  project.
  • Look after the pattern that industries follows.

Useful Resources

  • Typecast.com
  • fonts.com
  • webtype.com
  • fontdeck.com
  • typekit.com