Trong khi thay thế quy tắc nguyên tử được ghi lại:
Thay thế quy tắc nguyên tử
Bạn có thể dùng -f
tùy chọn để cập nhật nguyên tử bộ quy tắc của bạn:
%nft-f tập tin
nó không được ghi lại rõ ràng cho thành phần thay thế, nhưng đó thực sự chỉ là một trường hợp thay thế quy tắc. Người ta có thể xóa và thêm lại phần tử trong một giao dịch nguyên tử được giới thiệu với -f
: điều này sẽ thay thế mục cũ hơn bằng mục mới hơn và thời gian hết hạn được cập nhật của nó mà không bao giờ làm mất phần tử tạm thời.
Vì vậy, thay vì làm như sau, điều này sẽ không phải là nguyên tử vì giữa hai lần gọi nft
, phần tử sẽ tạm thời không tồn tại và các quy tắc tùy thuộc vào bộ này sẽ tạm thời không khớp:
# nft xóa phần tử ip mytable myset '{ 10.10.10.1 }'
# nft add element ip mytable myset '{ 10.10.10.1 hết thời gian 60 giây hết hạn 60 giây }'
điều này nên được thực hiện bằng cách sử dụng -f
và một tệp đầu vào (-
đứng tiêu chuẩn được tính là tệp đầu vào hợp lệ):
# nft -f - <<'EOF'
xóa phần tử ip mytable myset { 10.10.10.1 }
thêm phần tử ip mytable myset { 10.10.10.1 hết thời gian 60 giây }
EOF
nơi phần tử sẽ không bao giờ ngừng tồn tại bởi vì nó là một sự thay đổi nguyên tử.
Như thường lệ với điều này nft xây dựng, nếu một người muốn thực hiện việc này một cách bình thường, mà không cần biết phần tử đã tồn tại hay chưa và không chạm vào các phần tử khác, thì nên thêm, xóa và thêm lại phần tử đó, bởi vì trong khi thêm phần tử hiện có không phải là lỗi, việc xóa một yếu tố bị thiếu sẽ là một lỗi:
# nft -f - <<'EOF'
thêm phần tử ip mytable myset { 10.10.10.1 }
xóa phần tử ip mytable myset { 10.10.10.1 }
thêm phần tử ip mytable myset { 10.10.10.1 hết thời gian 60 giây }
EOF
Nó vẫn là một giao dịch nguyên tử duy nhất.
Ghi chú bổ sung
từ đường dẫn gói
Khi thực hiện việc này từ đường dẫn gói, có sự khác biệt giữa thêm @myset
sẽ chỉ đặt thời gian chờ khi tạo phần tử mới, nhưng sẽ không cập nhật thời gian chờ của phần tử đã tồn tại, cho phép phần tử đó hết thời gian chờ trong toàn bộ thời gian sau đó và cập nhật @myset
cái nào đặt thời gian chờ trong mọi trường hợp.
cập nhật quy tắc nguyên tử không giới hạn ở các phần tử nhưng có thể được sử dụng ở mọi cấp độ
Ví dụ: điều tương tự có thể được thực hiện ở cấp độ đã đặt nếu có một yếu tố duy nhất cần quan tâm:
# nft -f - <<'EOF'
thêm bộ ip mytable myset { gõ ipv4_addr; cờ hết thời gian chờ; }
xóa bộ ip mytable myset
thêm bộ ip mytable myset {
gõ ipv4_addr
cờ hết thời gian chờ
các phần tử = { 127.0.0.1 hết thời gian 1 phút }
}
EOF
Trên thực tế, ví dụ trên có thể sẽ thất bại vì có thể có một quy tắc tham chiếu đến tập hợp, vì vậy không được phép xóa nó ngay cả trong khi giao dịch (thay vào đó, người ta có thể viết lại toàn bộ bảng, với thêm bảng ip mytable
, xóa bảng ip mytable
, thêm bảng ip mytable {...
). Nếu tập hợp được biết là tồn tại trước đó, hãy xóa nó trước khi thêm lại phần tử đơn lẻ là đủ:
# nft -f - <<'EOF'
flush set ip mytable myset
thêm phần tử ip mytable myset { 127.0.0.1 hết thời gian 1 phút }
EOF
Tất nhiên một tập tin thực tế có thể được sử dụng thay vì - <<'EOF'
...EOF
.