如何通过注册变量在模块用户中设置shell?

时间:2019-08-26 11:46:23

标签: ansible

要禁用root的登录,我想将其外壳设置为nologin的路径,该路径由命令确定。

命令模块正确注册了变量:

- name: Get nologin path
  command: which nologin
  register: nologin
- debug:
    var: nologin

调试信息:

ok: [192.168.178.25] => {
"nologin": {
    "changed": true, 
    "cmd": [
        "which", 
        "nologin"
    ], 
    "delta": "0:00:00.001612", 
    "end": "2019-08-26 11:23:41.764847", 
    "failed": false, 
    "rc": 0, 
    "start": "2019-08-26 11:23:41.763235", 
    "stderr": "", 
    "stderr_lines": [], 
    "stdout": "/usr/sbin/nologin", 
    "stdout_lines": [
        "/usr/sbin/nologin"
    ]
}

}

但是当我使用用户模块时,它将注册变量作为字符串:

- name: Disable root
  user:
    name: root
    shell: nologin.stdout
    state: present

结果/etc/passwd

$ cat /etc/passwd
root:x:0:0:root:/root:nologin.stdout

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

这是一个变量,要使用它,您需要按照yAML的要求将jinja2模板class Node{ public: virtual ~Node() {} virtual double evaluate(); }; class NumNode: public Node { private: double number; public: double evaluate(); NumNode(int); }; class BinaryOpNode: public Node{ private: std::unique_ptr<Node> left; std::unique_ptr<Node> right; public: BinaryOpNode(std::unique_ptr<Node> a, std::unique_ptr<Node> b) : left{std::move(a)} , right{std::move(b)} { } double evaluate() { return binaryOperator(left->evaluate(), right->evaluate()); } virtual double binaryOperator(double a, double b) = 0; }; class AddOpNode : public BinaryOpNode { public: using BinaryOpNode::BinaryOpNode; double binaryOperator(double a, double b) { return a + b; } }; int main(){ AddOpNode n { std::make_unique<NumNode>(2), std::make_unique<NumNode>(3) }; cout << n.evaluate() << endl; return 0; } 放在{{ }}内:

" "

参考: