Step 1: Create double sticky piston extender.
Place sticky pistons such that when fully extended, they come to one block behind the wall, like this (ignore the observer for now):
The rear sticky piston should have three blocks between it and the wall.
Place redstone torches below both pistons and the under the block in front of the two pistons. Place repeaters and dust going into the blocks those torches are stood on with the rear repeater set to the second position, the and front repeater set to the fourth position
Put a lever down next to the dust, and a block in front of the front piston, and double-check the pistons move and correctly retract the block.
Step 2: Create the piston feed tape
Put a piston at each corner of the ring you want to create, such that the pistons push the blocks (lava cauldrons here, use something safer for testing) in a circle. Mine is set up to spin counterclockwise.
The lower left piston is the “trigger” – it’ll be the first to move. Make sure your feed tape has a gap in the lower-right for it to push a block into.
Place an observer against the piston, and wire it up to a second-position repeater pointing into the next (top left) piston. Do the same from the second to third, and third to fourth pistons.
Check that when you provide redstone power to the first piston, it moves the blocks in a circle. (Make sure the double-extender is retracted first!). When you remove power, this should trigger the other pistons in turn to complete the rotation.
Step 3: block detection and connecting it together
Place the observer ignored in step 1, and a button diagonally left:
Wire up five repeaters (all on max setting) in this configuration underneath the observer and button. The observer and button are both directly above the yellow blocks. In the screenshot, the right-most repeaters send the signal away from the camera, two redstone at the far end connect to the left repeaters which bring the signal back into the side of the final repeater.
Add one more repeater with minimal delay as a diode (just offscreen in the above screenshot), and then connect that to the piston extender, and then through two more repeaters on 3rd and 4th position to the first piston in the feed tape:
Press the button, and the block at the front should retract, be advanced on in the feed tape, and then the next block should be presented to you.
Make sure the blocks in the feed tape are cauldrons, and when you fill or remove water from a cauldron it the observer should detect it and advance automatically for you.
Making this infinite
Above every cauldron in the feed tape, place a lava (or water!) source block leaving one gap of air between the cauldron and the block the lava is on top of. Attach pointed dripstone to the bottom of these blocks. Lava should drip down from the point of the dripstone into the cauldron, and randomly fill it after some time has passed.
If you need lava faster than the dripstone can refill the cauldrons, you can simply make the feed tape larger or more complex to increase the amount of time the cauldrons are underneath lava.