cleanup.rake 2.88 KB
Newer Older
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
1 2 3
namespace :gitlab do
  namespace :cleanup do
    desc "GITLAB | Cleanup | Clean namespaces"
4
    task dirs: :environment  do
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
5 6 7 8 9
      warn_user_is_not_gitlab
      remove_flag = ENV['REMOVE']


      namespaces = Namespace.pluck(:path)
10
      git_base_path = Gitlab.config.gitlab_shell.repos_path
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
      all_dirs = Dir.glob(git_base_path + '/*')

      puts git_base_path.yellow
      puts "Looking for directories to remove... "

      all_dirs.reject! do |dir|
        # skip if git repo
        dir =~ /.git$/
      end

      all_dirs.reject! do |dir|
        dir_name = File.basename dir

        # skip if namespace present
        namespaces.include?(dir_name)
      end

      all_dirs.each do |dir_path|

        if remove_flag
          if FileUtils.rm_rf dir_path
            puts "Removed...#{dir_path}".red
          else
            puts "Cannot remove #{dir_path}".red
          end
        else
          puts "Can be removed: #{dir_path}".red
        end
      end

      unless remove_flag
        puts "To cleanup this directories run this command with REMOVE=true".yellow
      end
    end

Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
46
    desc "GITLAB | Cleanup | Clean repositories"
47
    task repos: :environment  do
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
48 49 50
      warn_user_is_not_gitlab
      remove_flag = ENV['REMOVE']

51
      git_base_path = Gitlab.config.gitlab_shell.repos_path
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
      all_dirs = Dir.glob(git_base_path + '/*')

      global_projects = Project.where(namespace_id: nil).pluck(:path)

      puts git_base_path.yellow
      puts "Looking for global repos to remove... "

      # skip non git repo
      all_dirs.select! do |dir|
        dir =~ /.git$/
      end

      # skip existing repos
      all_dirs.reject! do |dir|
        repo_name = File.basename dir
        path = repo_name.gsub(/\.git$/, "")
        global_projects.include?(path)
      end

      all_dirs.each do |dir_path|
        if remove_flag
          if FileUtils.rm_rf dir_path
            puts "Removed...#{dir_path}".red
          else
            puts "Cannot remove #{dir_path}".red
          end
        else
          puts "Can be removed: #{dir_path}".red
        end
      end

      unless remove_flag
        puts "To cleanup this directories run this command with REMOVE=true".yellow
      end
    end
87 88 89 90 91 92 93 94

    desc "GITLAB | Cleanup | Block users that have been removed in LDAP"
    task block_removed_ldap_users: :environment  do
      warn_user_is_not_gitlab
      block_flag = ENV['BLOCK']

      User.ldap.each do |ldap_user|
        print "#{ldap_user.name} (#{ldap_user.extern_uid}) ..."
95
        if Gitlab::LDAP::Access.allowed?(ldap_user)
96 97 98
          puts " [OK]".green
        else
          if block_flag
99
            ldap_user.block! unless ldap_user.blocked?
100 101 102 103 104 105 106 107 108 109 110
            puts " [BLOCKED]".red
          else
            puts " [NOT IN LDAP]".yellow
          end
        end
      end

      unless block_flag
        puts "To block these users run this command with BLOCK=true".yellow
      end
    end
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
111 112
  end
end