{"id":42920,"date":"2022-12-13T13:33:38","date_gmt":"2023-08-17T22:33:30","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible-lint%e8%bf%9b%e8%a1%8c%e6%a3%80%e6%9f%a5%e5%8a%9f%e8%83%bd%e7%9a%84%e7%a1%ae%e8%ae%a4%e3%80%82\/"},"modified":"2024-04-29T05:05:58","modified_gmt":"2024-04-28T21:05:58","slug":"%e4%bd%bf%e7%94%a8ansible-lint%e8%bf%9b%e8%a1%8c%e6%a3%80%e6%9f%a5%e5%8a%9f%e8%83%bd%e7%9a%84%e7%a1%ae%e8%ae%a4%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible-lint%e8%bf%9b%e8%a1%8c%e6%a3%80%e6%9f%a5%e5%8a%9f%e8%83%bd%e7%9a%84%e7%a1%ae%e8%ae%a4%e3%80%82\/","title":{"rendered":"\u4f7f\u7528ansible-lint\u8fdb\u884c\u68c0\u67e5\u529f\u80fd\u7684\u786e\u8ba4"},"content":{"rendered":"<h1>\u901a\u8fc7ansible-lint\u8fdb\u884c\u7684\u68c0\u67e5\u529f\u80fd<\/h1>\n<p>\u300eAnsible\u69cb\u7bc9\u30fb\u904b\u7528\u30ac\u30a4\u30c9\u30d6\u30c3\u30af \u30a4\u30f3\u30d5\u30e9\u81ea\u52d5\u5316\u306e\u305f\u3081\u306e\u73fe\u5834\u306e\u30ce\u30a6\u30cf\u30a6\u300f\u7684\u7b2c4\u7ae0\u63d0\u5230\u4e86\u53ef\u4ee5\u4f7f\u7528 ansible-lint \u6765\u68c0\u67e5 Playbook\u3002\u4e66\u4e2d\u5199\u5230\u4f7f\u7528 ansible-lint \u6765\u8fdb\u884c\u5b9e\u9645\u7684\u68c0\u67e5\u6b65\u9aa4\u3002<br \/>\n\u51fa\u4e8e\u4e2a\u4eba\u7684\u5174\u8da3\uff0c\u6211\u5728\u8fd9\u91cc\u8bb0\u5f55\u4e0b\u6765\uff0c\u4ee5\u4fee\u6b63 Playbook \u5e76\u786e\u8ba4\u5176\u884c\u4e3a\u662f\u5426\u53d1\u751f\u4e86\u53d8\u5316\u3002<\/p>\n<h2>\u8bf7\u7b80\u8ff0<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">ansible-lint \u306f\u3001\u63a8\u5968\u3055\u308c\u3066\u3044\u308b Playbook \u306e\u66f8\u304d\u65b9\u3092\u63d0\u6848\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">ansible-lint \u306f\u3001\u69cb\u6587\u306e\u30c1\u30a7\u30c3\u30af\u306f\u3057\u306a\u3044<\/ul>\n<h2>\u4fee\u6b63\u524d\u7684 Playbook \u548c\u6267\u884c\u7ed3\u679c<\/h2>\n<p>Playbook \u4fee\u6b63\u524d\u7684\u6267\u884c\u7ed3\u679c\u5982\u4e0b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"pi\">-<\/span> <span class=\"na\">hosts<\/span><span class=\"pi\">:<\/span> <span class=\"s\">all<\/span>\r\n  <span class=\"na\">vars<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">ansible_become<\/span><span class=\"pi\">:<\/span> <span class=\"s\">yes<\/span>\r\n    <span class=\"na\">ansible_become_method<\/span><span class=\"pi\">:<\/span> <span class=\"s\">sudo<\/span>\r\n  <span class=\"na\">tasks<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Install Nginx<\/span>\r\n      <span class=\"na\">block<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">yum<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nginx<\/span>\r\n            <span class=\"na\">state<\/span><span class=\"pi\">:<\/span> <span class=\"s\">latest<\/span>\r\n      <span class=\"na\">rescue<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">debug<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">msg<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">Error!\"<\/span>\r\n      <span class=\"na\">always<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">debug<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">msg<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">Always<\/span> <span class=\"s\">run<\/span> <span class=\"s\">this<\/span> <span class=\"s\">section\"<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>[vagrant@localhost chapter4]$ ansible-lint nginx_install.yml \r\n[403] Package installs should not use latest\r\nnginx_install.yml:9\r\nTask\/Handler: yum state=latest name=nginx __file__=nginx_install.yml __line__=10\r\n\r\n[502] All tasks should be named\r\nnginx_install.yml:9\r\nTask\/Handler: yum state=latest name=nginx __file__=nginx_install.yml __line__=10\r\n<\/code><\/pre>\n<h2>\u5b9e\u9645\u6267\u884c\u7ed3\u679c\u7684\u542b\u4e49<\/h2>\n<p>\u5728ansible-lint\u7684\u9ed8\u8ba4\u89c4\u5219\u4e2d\u8be6\u7ec6\u89e3\u91ca\u4e86\u610f\u4e49\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">[403] Package installs should not use latest<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Defalut Rules \u3067\u306f\u3001<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Package installs should use state=present with or without a version<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u3068\u306a\u3063\u3066\u304a\u308a\u3001 version \u306e\u6709\u7121\u306b\u304b\u304b\u308f\u3089\u305a state=present \u3092\u4f7f\u3046\u3079\u304d\u3060\u3068\u8a18\u8f09\u304c\u3042\u308a\u307e\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u66f8\u7c4d\u3067\u306f version \u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u3066\u3044\u308b\u3068\u8aac\u660e\u3055\u308c\u3066\u3044\u307e\u3057\u305f\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>[502] All tasks should be named<br \/>\nDefalut Rules \u3067\u306f\u3001<br \/>\nAll tasks should have a distinct name for readability and for &#8211;start-at-task to work<br \/>\n\u3059\u3079\u3066\u306e\u30bf\u30b9\u30af\u306f\u3001\u8aad\u3080\u8fbc\u307f\u53ef\u80fd\u304b\u3064 &#8211;start-at-task \u304c\u6a5f\u80fd\u3059\u308b\u305f\u3081\u306e\u3001\u500b\u5225\u306e\u540d\u524d\u3092\u6301\u3064\u3079\u304d\u3060\u3068\u8a18\u8f09\u304c\u3042\u308a\u307e\u3059\u3002<br \/>\n\u66f8\u7c4d\u3067\u306f\u540d\u524d\u3092\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u30bf\u30b9\u30af\u304c\u3042\u308a\u3001\u4fee\u6b63\u3059\u308c\u3070\u3088\u3044\u3068\u8aac\u660e\u3055\u308c\u3066\u307e\u3057\u305f\u3002<\/p>\n<h2>\u4fee\u6539 Playbook\uff08\u7b2c\u4e00\u6b21\uff09\u3002<\/h2>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"pi\">-<\/span> <span class=\"na\">hosts<\/span><span class=\"pi\">:<\/span> <span class=\"s\">all<\/span>\r\n  <span class=\"na\">vars<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">ansible_become<\/span><span class=\"pi\">:<\/span> <span class=\"s\">yes<\/span>\r\n    <span class=\"na\">ansible_become_method<\/span><span class=\"pi\">:<\/span> <span class=\"s\">sudo<\/span>\r\n  <span class=\"na\">tasks<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Install Nginx<\/span>\r\n    <span class=\"na\">block<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Install Nginx in block<\/span>\r\n        <span class=\"na\">yum<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nginx<\/span>\r\n          <span class=\"na\">state<\/span><span class=\"pi\">:<\/span> <span class=\"s\">1.16.1<\/span>\r\n    <span class=\"na\">rescue<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">debug<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">msg<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">Error!\"<\/span>\r\n    <span class=\"na\">always<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">debug<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">msg<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">Always<\/span> <span class=\"s\">run<\/span> <span class=\"s\">this<\/span> <span class=\"s\">section\"<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>[vagrant@localhost chapter4]$ ansible-lint nginx_install.yml \r\n[vagrant@localhost chapter4]$ ansible-playbook -i hosts nginx_install.yml --check\r\n\r\nPLAY [all] *********************************************************************************\r\n\r\nTASK [Gathering Facts] *********************************************************************\r\nok: [localhost]\r\n\r\nTASK [Install Nginx in block] **************************************************************\r\nfatal: [localhost]: FAILED! =&gt; {\"changed\": false, \"msg\": \"value of state must be one of: absent, installed, latest, present, removed, got: 1.16.1\"}\r\n\r\nTASK [debug] *******************************************************************************\r\nok: [localhost] =&gt; {\r\n    \"msg\": \"Error!\"\r\n}\r\n\r\nTASK [debug] *******************************************************************************\r\nok: [localhost] =&gt; {\r\n    \"msg\": \"Always run this section\"\r\n}\r\n\r\nPLAY RECAP *********************************************************************************\r\nlocalhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=1    ignored=0   \r\n\r\n[vagrant@localhost chapter4]$ \r\n<\/code><\/pre>\n<p>ansible-lint \u6c92\u6709\u554f\u984c\uff0c\u4f46\u5728\u6a21\u64ec\u904b\u884c\u6642\uff0c\u51fa\u73fe\u4e86\u72c0\u614b(state)\u6307\u5b9a\u7684\u65b9\u5f0f\u4e0d\u540c\u7684\u63d0\u793a\u3002<\/p>\n<p>\u56b4\u91cd\u932f\u8aa4: [localhost]: \u5931\u6557! =&gt; {&#8220;changed&#8221;: false, &#8220;msg&#8221;: &#8220;\u72c0\u614b(state)\u7684\u503c\u5fc5\u9808\u662f\u4ee5\u4e0b\u4e4b\u4e00: absent\u3001installed\u3001latest\u3001present\u3001removed\uff0c\u4f46\u5f97\u5230\u7684\u662f: 1.16.1\u3002&#8221;}<\/p>\n<p>\u56e0\u6b64\uff0c\u6211\u5011\u5c07\u6307\u5b9a name: nginx-1.16.0\uff0cstate: present\u3002<\/p>\n<h2>\u4fee\u6539Playbook\uff08\u7b2c\u4e8c\u6b21\uff09<\/h2>\n<pre class=\"post-pre\"><code>- hosts: all\r\n  vars:\r\n    ansible_become: yes\r\n    ansible_become_method: sudo\r\n  tasks:\r\n  - name: Install Nginx\r\n    block:\r\n      - name: Install Nginx in block\r\n        yum:\r\n          name: nginx-1.16.0\r\n          state: present\r\n    rescue:\r\n      - debug:\r\n          msg: \"Error!\"\r\n    always:\r\n      - debug:\r\n          msg: \"Always run this section\"\r\n<\/code><\/pre>\n<p>\u4f5c\u4e3a\u51c6\u5907\u5de5\u4f5c\uff0c\u6309\u7167\u4e0a\u8ff0\u4fee\u6539\u8fdb\u884c\uff0c\u786e\u4fdd\u53ef\u4ee5\u901a\u8fc7yum\u4f7f\u7528\u65e7\u7248\u672c\u7684Nginx\u3002\u51c6\u5907\u6b65\u9aa4\u53ef\u4ee5\u53c2\u8003\u6b64\u5904\u3002\u4e3a\u4e86\u786e\u4fdd\uff0c\u518d\u6b21\u786e\u8ba4\u4e00\u4e0b\u3002<\/p>\n<pre class=\"post-pre\"><code>[vagrant@localhost chapter4]$ yum --showduplicates list nginx\r\n(\u4e2d\u7565)\r\nnginx.x86_64                        1:1.16.1-1.el7                              @epel       \r\nAvailable Packages\r\n(\u4e2d\u7565)\r\nnginx.x86_64                        1:1.16.0-1.el7.ngx                          nginx-stable\r\nnginx.x86_64                        1:1.16.1-1.el7                              epel        \r\nnginx.x86_64                        1:1.16.1-1.el7.ngx                          nginx-stabl\r\n<\/code><\/pre>\n<p>\u5728 Yum \u4e2d\u663e\u793a\u4e86\u53ef\u5b89\u88c5\u7684 Nginx \u7248\u672c\u5217\u8868\u3002<br \/>\n\u5c1d\u8bd5\u8fd0\u884c ansible-lint \u548c\u5e72\u8fd0\u884c\u3002<\/p>\n<pre class=\"post-pre\"><code>[vagrant@localhost chapter4]$ ansible-lint nginx_install.yml \r\n[vagrant@localhost chapter4]$ ansible-playbook -i hosts nginx_install.yml --check\r\n\r\nPLAY [all] *********************************************************************************\r\n\r\nTASK [Gathering Facts] *********************************************************************\r\nok: [localhost]\r\n\r\nTASK [Install Nginx in block] **************************************************************\r\nchanged: [localhost]\r\n\r\nTASK [debug] *******************************************************************************\r\nok: [localhost] =&gt; {\r\n    \"msg\": \"Always run this section\"\r\n}\r\n\r\nPLAY RECAP *********************************************************************************\r\nlocalhost                  : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   \r\n\r\n[vagrant@localhost chapter4]$ \r\n<\/code><\/pre>\n<p>ansible-lint \u4e0d\u518d\u663e\u793a\u9519\u8bef\uff0c\u5e76\u4e14\u56e0\u4e3a\u8981\u66f4\u6539\u4e3a\u65e7\u7248\u672c\u7684 Nginx\uff0c\u6240\u4ee5 PLAY RECAP \u4e2d\u7684 change=1\u3002<\/p>\n<h2>\u78b0\u5230\u4e4b\u65f6\u65e0\u6cd5\u7406\u89e3\u7684\u4e8b\u60c5<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">state=present<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u72b6\u614b\u3092\u7dad\u6301\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u3066\u3044\u308b\u3068\u610f\u5473\u306b\u6c17\u3065\u304f\u306e\u306b\u6642\u9593\u304c\u304b\u304b\u308a\u307e\u3057\u305f\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">&#8211;start-at-task<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">ansibleplaybook \u30b3\u30de\u30f3\u30c9\u3067\u6307\u5b9a\u3067\u304d\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u3002\u6307\u5b9a\u3057\u305f\u30bf\u30b9\u30af\u540d\u306e\u3068\u3053\u308d\u304b\u3089\u5b9f\u65bd\u3067\u304d\u308b\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">playbook \u306e\u66f8\u304d\u65b9 (name \u306e\u4f4d\u7f6e\u3068version\u306e\u6307\u5b9a\uff09<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u516c\u5f0f\u306e yum \u30e2\u30b8\u30e5\u30fc\u30eb\u306e name \u306e\u6307\u5b9a\u306e\u4ed5\u65b9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">A package name or package specifier with version, like name-1.0.<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u3057\u305f\u304c\u3063\u3066\u3001 name=nginx-1.16.0 \u3068\u8a18\u8f09\u3057\u307e\u3057\u305f\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">name \u306e\u4f4d\u7f6e\u306f\u3001\u3044\u304f\u3064\u304b\u306e Playbook \u3092\u53c2\u8003\u306b\u3001\u611f\u899a\u7684\u306b\u4fee\u6b63\u3057\u3066\u307e\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">ansible-lint \u3067\u306f\u3001typo \u3092\u691c\u77e5\u3057\u3066\u304f\u308c\u306a\u304b\u3063\u305f\u3053\u3068<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">state=least \u3068\u6253\u3061\u9593\u9055\u3048\u3092\u3057\u307e\u3057\u305f\u304c\u3001 ansible-lint \u3067\u306f\u69cb\u6587\u306e\u30a8\u30e9\u30fc\u3092\u62fe\u3063\u3066\u304f\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u5f8c\u306b Dry Run \u5f8c\u306b\u69cb\u6587\u306e\u30a8\u30e9\u30fc\u304c\u51fa\u529b\u3055\u308c\u305f\u305f\u3081\u4fee\u6b63\u3057\u307e\u3057\u305f\u3002<\/ul>\n<h2>\u6587\u732e\u5f15\u7528<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u516b\u6728\u6fa4 \u5065\u4eba\uff082019\uff09\u300eAnsible\u69cb\u7bc9\u30fb\u904b\u7528\u30ac\u30a4\u30c9\u30d6\u30c3\u30af \u30a4\u30f3\u30d5\u30e9\u81ea\u52d5\u5316\u306e\u305f\u3081\u306e\u73fe\u5834\u306e\u30ce\u30a6\u30cf\u30a6\u300f,\u682a\u5f0f\u4f1a\u793e\u30de\u30a4\u30ca\u30d3\u51fa\u7248,P80-81<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Nginx &#8211; Installation instructions &#8211; RHEL\/CentOS<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">CentOS\u306b\u3061\u3087\u3063\u3068\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u306eNginx\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Ansible &#8211; playbooks_intro<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u901a\u8fc7ansible-lint\u8fdb\u884c\u7684\u68c0\u67e5\u529f\u80fd \u300eAnsible\u69cb\u7bc9\u30fb\u904b\u7528\u30ac\u30a4\u30c9\u30d6\u30c3\u30af \u30a4\u30f3\u30d5\u30e9\u81ea\u52d5\u5316\u306e\u305f\u3081\u306e\u73fe\u5834 [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-42920","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528ansible-lint\u8fdb\u884c\u68c0\u67e5\u529f\u80fd\u7684\u786e\u8ba4 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528ansible-lint\u8fdb\u884c\u68c0\u67e5\u529f\u80fd\u7684\u786e\u8ba4\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528ansible-lint\u8fdb\u884c\u68c0\u67e5\u529f\u80fd\u7684\u786e\u8ba4\" \/>\n<meta property=\"og:description\" content=\"\u901a\u8fc7ansible-lint\u8fdb\u884c\u7684\u68c0\u67e5\u529f\u80fd \u300eAnsible\u69cb\u7bc9\u30fb\u904b\u7528\u30ac\u30a4\u30c9\u30d6\u30c3\u30af \u30a4\u30f3\u30d5\u30e9\u81ea\u52d5\u5316\u306e\u305f\u3081\u306e\u73fe\u5834 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528ansible-lint\u8fdb\u884c\u68c0\u67e5\u529f\u80fd\u7684\u786e\u8ba4\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-17T22:33:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-28T21:05:58+00:00\" \/>\n<meta name=\"author\" content=\"\u96c5, \u609f\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u96c5, \u609f\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible-lint%e8%bf%9b%e8%a1%8c%e6%a3%80%e6%9f%a5%e5%8a%9f%e8%83%bd%e7%9a%84%e7%a1%ae%e8%ae%a4%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible-lint%e8%bf%9b%e8%a1%8c%e6%a3%80%e6%9f%a5%e5%8a%9f%e8%83%bd%e7%9a%84%e7%a1%ae%e8%ae%a4%e3%80%82\/\",\"name\":\"\u4f7f\u7528ansible-lint\u8fdb\u884c\u68c0\u67e5\u529f\u80fd\u7684\u786e\u8ba4 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-08-17T22:33:30+00:00\",\"dateModified\":\"2024-04-28T21:05:58+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible-lint%e8%bf%9b%e8%a1%8c%e6%a3%80%e6%9f%a5%e5%8a%9f%e8%83%bd%e7%9a%84%e7%a1%ae%e8%ae%a4%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible-lint%e8%bf%9b%e8%a1%8c%e6%a3%80%e6%9f%a5%e5%8a%9f%e8%83%bd%e7%9a%84%e7%a1%ae%e8%ae%a4%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible-lint%e8%bf%9b%e8%a1%8c%e6%a3%80%e6%9f%a5%e5%8a%9f%e8%83%bd%e7%9a%84%e7%a1%ae%e8%ae%a4%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528ansible-lint\u8fdb\u884c\u68c0\u67e5\u529f\u80fd\u7684\u786e\u8ba4\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6\",\"name\":\"\u96c5, \u609f\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g\",\"caption\":\"\u96c5, \u609f\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yawu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible-lint%e8%bf%9b%e8%a1%8c%e6%a3%80%e6%9f%a5%e5%8a%9f%e8%83%bd%e7%9a%84%e7%a1%ae%e8%ae%a4%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528ansible-lint\u8fdb\u884c\u68c0\u67e5\u529f\u80fd\u7684\u786e\u8ba4 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528ansible-lint\u8fdb\u884c\u68c0\u67e5\u529f\u80fd\u7684\u786e\u8ba4\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528ansible-lint\u8fdb\u884c\u68c0\u67e5\u529f\u80fd\u7684\u786e\u8ba4","og_description":"\u901a\u8fc7ansible-lint\u8fdb\u884c\u7684\u68c0\u67e5\u529f\u80fd \u300eAnsible\u69cb\u7bc9\u30fb\u904b\u7528\u30ac\u30a4\u30c9\u30d6\u30c3\u30af \u30a4\u30f3\u30d5\u30e9\u81ea\u52d5\u5316\u306e\u305f\u3081\u306e\u73fe\u5834 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528ansible-lint\u8fdb\u884c\u68c0\u67e5\u529f\u80fd\u7684\u786e\u8ba4\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-08-17T22:33:30+00:00","article_modified_time":"2024-04-28T21:05:58+00:00","author":"\u96c5, \u609f","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u96c5, \u609f","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"2 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible-lint%e8%bf%9b%e8%a1%8c%e6%a3%80%e6%9f%a5%e5%8a%9f%e8%83%bd%e7%9a%84%e7%a1%ae%e8%ae%a4%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible-lint%e8%bf%9b%e8%a1%8c%e6%a3%80%e6%9f%a5%e5%8a%9f%e8%83%bd%e7%9a%84%e7%a1%ae%e8%ae%a4%e3%80%82\/","name":"\u4f7f\u7528ansible-lint\u8fdb\u884c\u68c0\u67e5\u529f\u80fd\u7684\u786e\u8ba4 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-08-17T22:33:30+00:00","dateModified":"2024-04-28T21:05:58+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible-lint%e8%bf%9b%e8%a1%8c%e6%a3%80%e6%9f%a5%e5%8a%9f%e8%83%bd%e7%9a%84%e7%a1%ae%e8%ae%a4%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible-lint%e8%bf%9b%e8%a1%8c%e6%a3%80%e6%9f%a5%e5%8a%9f%e8%83%bd%e7%9a%84%e7%a1%ae%e8%ae%a4%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible-lint%e8%bf%9b%e8%a1%8c%e6%a3%80%e6%9f%a5%e5%8a%9f%e8%83%bd%e7%9a%84%e7%a1%ae%e8%ae%a4%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528ansible-lint\u8fdb\u884c\u68c0\u67e5\u529f\u80fd\u7684\u786e\u8ba4"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6","name":"\u96c5, \u609f","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g","caption":"\u96c5, \u609f"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yawu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8ansible-lint%e8%bf%9b%e8%a1%8c%e6%a3%80%e6%9f%a5%e5%8a%9f%e8%83%bd%e7%9a%84%e7%a1%ae%e8%ae%a4%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/42920","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=42920"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/42920\/revisions"}],"predecessor-version":[{"id":83219,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/42920\/revisions\/83219"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=42920"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=42920"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=42920"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}