def take# {{{
      options = {}
      opts = OptionParser.new do |opts|
        opts.banner = "Usage: vagrant snap take [TARGET] [-n SNAP_NAME] [-d DESC]"
        opts.on("-n", "--name STR", "Name of snapshot"       ){ |v| options[:name] = v }
        opts.on("-d", "--desc STR", "Description of snapshot"){ |v| options[:desc] = v }
      end

      begin
        argv =  parse_options(opts)
      rescue OptionParser::MissingArgument
        raise ::Vagrant::Errors::CLIInvalidOptions, :help => opts.help.chomp
      end
      return if !argv
      @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
      # p @sub_args
      # return
      # snapshot, target = *@sub_args
      safe_with_target_vms(target_vmname) do |vm|
        VBox::SnapShot.parse_tree( vm.uuid )
        if options[:name] and VBox::SnapShot.include? options[:name]
          ui.warn "'#{options[:name]}' is already exist"
          next
        end
        snapshot = options[:name] ? options[:name] : VBox::SnapShot.next_available_snapname
        cmd = "VBoxManage snapshot '#{vm.uuid}' take '#{snapshot}' --pause"
        if options[:desc]
          cmd << " --description '#{options[:desc]}'"
        end
        exe cmd
      end
    end
def take# {{{
      options = {}
      opts = OptionParser.new do |opts|
        opts.banner = "Usage: vagrant snap take [TARGET] [-n SNAP_NAME] [-d DESC]"
        opts.on("-n", "--name STR", "Name of snapshot"       ){ |v| options[:name] = v }
        opts.on("-d", "--desc STR", "Description of snapshot"){ |v| options[:desc] = v }
      end

      begin
        argv =  parse_options(opts)
      rescue OptionParser::MissingArgument
        raise ::Vagrant::Errors::CLIInvalidOptions, :help => opts.help.chomp
      end
      return if !argv
      @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
      # p @sub_args
      # return
      # snapshot, target = *@sub_args
      safe_with_target_vms(target_vmname) do |vm|
        VBox::SnapShot.parse_tree( vm.uuid )
        if options[:name] and VBox::SnapShot.include? options[:name]
          ui.warn "'#{options[:name]}' is already exist"
          next
        end
        snapshot = options[:name] ? options[:name] : VBox::SnapShot.next_available_snapname
        cmd = "VBoxManage snapshot '#{vm.uuid}' take '#{snapshot}' --pause"
        if options[:desc]
          cmd << " --description '#{options[:desc]}'"
        end
        exe cmd
      end
    end
}}}