[root@mgt puppet]# cat modules/development/user/manifests/init.pp
class user {
  define account($ensure = present, $uid, $gid,
    $groups = [], $comment, $shell = "/bin/bash", $password) {
    $username = $name

    # realize the group
    Group <| gid == $gid |>

    # Create the user with their groups as specified
    user { $username:
      ensure      => $ensure,
      uid         => $uid,
      gid         => $gid,
      groups      => $groups,
      comment     => $comment,
      home        => "/home/$username",
      shell       => $shell,
      password    => $password,
      allowdupe   => false,
      managehome  => true
    }

    file { "/home/$username/.ssh":
      # and so on
    }
  }

  @account { "admin":
    ensure    => present,
    uid       => "500",
    gid       => "admin",
    comment   => "Administrator",
    # single quotes to avoid interpolation
    password  => '$1$password'
  }

  @account { "logger":
    # etc
  }

  @group { "admin": ensure => present, gid => "500" }
  @group { "logger": ensure => present, gid => "501" }
}

[root@mgt puppet]# cat modules/development/ntp/manifests/init.pp 
class ntp {
  package { "ntp": ensure => installed }

  class timesync {
    include user
    Account <| title == "admin" |>

    cron { "timesync":
      command => "/usr/local/bin/timesync.sh",
      user    => "admin",
      minute  => "10",
      require => Account["admin"]
    }
  }
}

err: Could not retrieve catalog: Could not find resource type account at /etc/puppet/modules/development/ntp/manifests/init.pp:12 on node web332