How to run a closure that returns a value in parallel in Jenkins pipeline?

I want to check if I can delete some of our AWS EBS snapshots that meet a certain criteria. However, since we have a LOT of snapshots, I don’t want to iterate one-by-one, and instead perform the check if I can delete them in parallel. I get a list of snapshots in JSON form like this

{
    "Snapshots": [
        {
            "Description": "",
            "Encrypted": false,
            "OwnerId": "0123456789",
            "Progress": "100%",
            "SnapshotId": "snap-0123456789",
            "StartTime": "2021-03-23T23:58:42.019000+00:00",
            "State": "completed",
            "VolumeId": "vol-ffffffff",
            "VolumeSize": 8,
            "OwnerAlias": "amazon",
            "StorageTier": "standard"
        },
        // more snapshots
    ]
}

Here’s the (simplified) closure to determine if I can delete a snapshot, passing to it a snapshot element from the JSON

// Closure to check if I can delete snapshot
private Closure snapshotCanBeDeleted(final String s) {
  return {
    s.State.equals("completed")
  }
}

Here’s the code that uses the above closure.

// Get a list of snapshots via AWS SDK or CLI in JSON
def snapshots = functionToGetAListOfSnapshots() // function not shown

// Create a map of snapshots and closures that can be run in parallel
Map<String, Closure> map = new TreeMap()
snapshots.Snapshots.each {
  map.put(it.SnapshotId, snapshotCanBeDeleted(it))
}
parallel map // This runs the snapshotCanBeDeleted(it) closures in parallel

But how I now print out the values of the closure, which are boolean values? I tried this

map.each {k,v ->
  println "Snapshot $k can be deleted: $v"
}

But I think this is trying to print the closure itself, instead of its value, which should be true for false, because I just get, without the v part of the map being printed out.

snap-0123456789 can be deleted: 
[Pipeline] echo
snap-1234567890 can be deleted: 
[Pipeline] echo
snap-9876543210 can be deleted: 

I want

snap-0123456789 can be deleted: true
[Pipeline] echo
snap-1234567890 can be deleted: false
[Pipeline] echo
snap-9876543210 can be deleted: true

Any clues? Is this not the proper way to run a closure that returns a value? Thanks.

4

parallel step doesn’t modify the map you provide. Think of it as .each{}. So you will have to define a list outside the closure and put all the results there:

def completedSnapshots = []

private Closure snapshotCanBeDeleted(final String s) {
  return {
    if (s.State.equals("completed")) {
      completedSnapshots.add(s.SnapshotId)
    }
  }
}

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật