push then action model, like puppet