{"id":42612,"date":"2023-07-17T07:08:14","date_gmt":"2022-11-25T18:57:42","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%88%9d%e6%ac%a1%e4%bd%bf%e7%94%a8ansible\/"},"modified":"2024-04-30T13:58:59","modified_gmt":"2024-04-30T05:58:59","slug":"%e5%88%9d%e6%ac%a1%e4%bd%bf%e7%94%a8ansible","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%88%9d%e6%ac%a1%e4%bd%bf%e7%94%a8ansible\/","title":{"rendered":"\u521d\u6b21\u4f7f\u7528Ansible"},"content":{"rendered":"<h1>Ansible\u7528\u4e8e\u670d\u52a1\u5668\u7684\u914d\u7f6e\u7ba1\u7406\u3002<\/h1>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u5c0e\u5165\u624b\u9806<\/ul>\n<\/li>\n<\/ul>\n<p>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<br \/>\nAnsible\u306eHosts\u30d5\u30a1\u30a4\u30eb\u306b\u3001\u5bfe\u8c61\u30b5\u30fc\u30d0\u30fc\u306e \u30db\u30b9\u30c8\u540d (\u307e\u305f\u306fIP\u30a2\u30c9\u30ec\u30b9) \u3092\u66f8\u304f<br \/>\n\u4f5c\u308b\u69cb\u6210\u3092 Playbook(YAML\u5f62\u5f0f) \u306b\u66f8\u304d\u5b9f\u884c<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u524d\u63d0<\/ul>\n<\/li>\n<\/ul>\n<p>ssh\u63a5\u7d9a\u53ef\u80fd<\/p>\n<p>Python2\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08 (\u666e\u901a\u3055\u308c\u3066\u308b)<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4d9337434c4406cbdffa\/4-0.png\" alt=\"Screen Shot 2018-05-11 at 23.49.37.png\" \/><\/div>\n<p>\u8be6\u7ec6\u6765\u8bf4<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">nginx,apache,mysql\u306e\u5c0e\u5165(yum\u30e2\u30b8\u30e5\u30fc\u30eb)<\/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\">AWS\u306e\u5404\u30b5\u30fc\u30d3\u30b9\u306e\u69cb\u6210\u7ba1\u7406(AWS\u7528\u30e2\u30b8\u30e5\u30fc\u30eb)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u30d5\u30a1\u30a4\u30eb\u914d\u5e03\u3001\u30c6\u30ad\u30b9\u30c8\u7f6e\u63db(file\u30e2\u30b8\u30e5\u30fc\u30eb)<\/ul>\n<h2>\u521b\u5efa\u5e76\u4fdd\u7559\u7ed3\u6784<\/h2>\n<p>Playbook\u306e\u5b9f\u884c\u7d50\u679c\u306f\u3001<\/p>\n<p>\u5931\u6557\u3057\u3066\u300cfatal\u300d<br \/>\n\u5909\u66f4\u3057\u305f\u300cchanged\u300d<br \/>\n\u305d\u306e\u307e\u307e\u3067\u300cok\u300d<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u6700\u521d\u306f\u300cchanged\u300d<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u305d\u306e\u5f8c\u306f\u4f55\u56de\u6d41\u3057\u3066\u3082\u300cok\u300d\u306b\u3059\u308b<\/ul>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4d9337434c4406cbdffa\/14-0.png\" alt=\"Screen Shot 2018-05-12 at 0.30.37.png\" \/><\/div>\n<h3>\u68a6\u60f3<\/h3>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4d9337434c4406cbdffa\/17-0.png\" alt=\"Screen Shot 2018-05-12 at 0.35.28.png\" \/><\/div>\n<p>\u8bf7\u7528\u4e2d\u6587\u5c06\u4ee5\u4e0b\u5185\u5bb9\u8fdb\u884c\u539f\u751f\u6001\u7684\u6539\u5199\uff0c\u53ea\u9700\u8981\u63d0\u4f9b\u4e00\u79cd\u9009\u9879\uff1a<\/p>\n<p>\u8bf7\u4f7f\u7528\u4e2d\u6587\u5c06\u4ee5\u4e0b\u5185\u5bb9\u91cd\u65b0\u8868\u8fbe\uff0c\u53ea\u63d0\u4f9b\u4e00\u79cd\u9009\u9879\uff1a<\/p>\n<h3>\u547d\uff08\u58f3\uff09\u6a21\u5757\u6709\u95ee\u9898<\/h3>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u6307\u5b9a\u3057\u305f\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u5b50<\/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\">\u300cchanged\u300d\u307e\u305f\u306f\u300cfatal\u300d\u306e\u307f\u8fd4\u5374\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u3044\u3064\u3082\u300cok\u300d\u3068\u8fd4\u3059\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u306e\u56de\u907f\u7b56\u3082\u3042\u308b (\u305d\u308c\u3053\u305d\u7121\u610f\u5473)<\/ul>\n<pre class=\"post-pre\"><code><span class=\"pi\">-<\/span> <span class=\"na\">name <\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">ruby<\/span> <span class=\"s\">check\"<\/span>\r\n  <span class=\"na\">command<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">ruby<\/span> <span class=\"s\">--version\"<\/span>\r\n  <span class=\"na\">failed_when<\/span><span class=\"pi\">:<\/span>  <span class=\"s\">False<\/span>  <span class=\"c1\"># \u5931\u6557(fatal)\u3057\u3066\u3082\u300cok\u300d\u8fd4\u3059<\/span>\r\n  <span class=\"na\">changed_when<\/span><span class=\"pi\">:<\/span> <span class=\"s\">False<\/span>  <span class=\"c1\"># \u5909\u66f4(changed)\u3057\u3066\u3082\u300cok\u300d\u8fd4\u3059<\/span>\r\n\r\n\r\n<\/code><\/pre>\n<p>\u8bf7\u539f\u751f\u5730\u7528\u4e2d\u6587\u5c06\u4ee5\u4e0b\u5185\u5bb9\u6539\u8ff0\u3002\u53ea\u9700\u8981\u4e00\u4e2a\u9009\u9879\uff1a<\/p>\n<p>&#8220;Can you please give me directions to the nearest post office?&#8221;<\/p>\n<p>&#8220;\u8bf7\u95ee\u4f60\u80fd\u544a\u8bc9\u6211\u53bb\u6700\u8fd1\u7684\u90ae\u5c40\u600e\u4e48\u8d70\u5417\uff1f&#8221;<\/p>\n<h1>Ansible\u6587\u4ef6\u5939\u7ed3\u6784<\/h1>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u79c1\u306e\u30c6\u30b9\u30c8\u74b0\u5883<\/ul>\n<\/li>\n<\/ul>\n<p>\u5b9f\u7528\u3057\u3066\u3044\u306a\u3044\u305f\u3081\u3001\u307e\u3060\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u3067\u3059<br \/>\n\u3053\u308c\u304b\u3089\u826f\u304f\u306a\u3063\u3066\u3044\u304f\u4e88\u5b9a (\u5225\u8a18\u4e8b\u306b\u3059\u308b\u304b\u3082)<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4d9337434c4406cbdffa\/25-0.png\" alt=\"folfol.png\" \/><\/div>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u57fa\u672c\u306f\u516c\u5f0f\u306b\u3042\u308b\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>Ansible \u30aa\u30ec\u30aa\u30ec\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u53d6\u308a\u5165\u308c\u305f<\/p>\n<p>\u8bf7\u63d0\u4f9b\u4ee5\u4e0b\u5185\u5bb9\u7684\u4e2d\u6587\u7ffb\u8bd1\uff1a<br \/>\n&#8220;Can you please help me with my homework?&#8221;<\/p>\n<h2>\u5982\u4f55\u521b\u5efaSSH\u914d\u7f6e\u6587\u4ef6<\/h2>\n<ul class=\"post-ul\">\u53c2\u8003\uff1d\uff1dansible.cnf\u3067ssh_config\u3092\u8a2d\u5b9a\u3059\u308b<\/ul>\n<p>test_project01\u7684\u5f00\u53d1\u73af\u5883\u793a\u4f8b\u662f\u4ec0\u4e48\uff1f<\/p>\n<ul class=\"post-ul\">ansible.cfg<\/ul>\n<pre class=\"post-pre\"><code><span class=\"pi\">[<\/span><span class=\"nv\">ssh_connection<\/span><span class=\"pi\">]<\/span>\r\n<span class=\"s\">ssh_args = -F \"{{ project_name }}\/ssh_config_{{ project_env }}\"<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">test_project01\/hosts_development<\/ul>\n<pre class=\"post-pre\"><code><span class=\"pi\">[<\/span><span class=\"nv\">web<\/span><span class=\"pi\">]<\/span>\r\n<span class=\"s\">web-01<\/span>\r\n\r\n<span class=\"pi\">[<\/span><span class=\"nv\">all<\/span><span class=\"pi\">:<\/span><span class=\"nv\">vars<\/span><span class=\"pi\">]<\/span>\r\n<span class=\"s\">project_name=\"test_project01\"<\/span>\r\n<span class=\"s\">project_env=\"development\"<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">test_project01\/ssh_config_development<\/ul>\n<pre class=\"post-pre\"><code><span class=\"s\">Host web-01<\/span>\r\n  <span class=\"s\">User tetsuya<\/span>\r\n  <span class=\"s\">HostName 127.0.0.1<\/span>\r\n  <span class=\"s\">IdentityFile ~\/.ssh\/id_rsa<\/span>\r\n  <span class=\"s\">StrictHostKeyChecking no<\/span>\r\n  <span class=\"s\">UserKnownHostsFile \/dev\/null<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">test_project01\/site.yml (Playbook)<\/ul>\n<pre class=\"post-pre\"><code><span class=\"pi\">-<\/span> <span class=\"na\">hosts<\/span><span class=\"pi\">:<\/span> <span class=\"s\">web<\/span>\r\n  <span class=\"na\">become<\/span><span class=\"pi\">:<\/span> <span class=\"s\">yes<\/span>\r\n  <span class=\"na\">user<\/span><span class=\"pi\">:<\/span> <span class=\"s\">tetsuya<\/span>\r\n  <span class=\"na\">vars_files<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"c1\"># role &gt; common-vars &gt; host_vars &gt; group_vars \u306e\u9806\u306b\u512a\u5148<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"s\">..\/common-vars\/common-vars.yml<\/span>\r\n  <span class=\"na\">roles<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">..\/common-roles\/common<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">test-role<\/span>\r\n\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u5b9f\u884c<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c\"># ansible.cfg\u306e\u3042\u308b\u30d5\u30a9\u30eb\u30c0\u3067\u5b9f\u884c\u3059\u308b(test_project01\u306e1\u3064\u4e0a)<\/span>\r\nansible-playbook <span class=\"nt\">-i<\/span> test_project01\/hosts_development test_project01\/site.\r\nyml <span class=\"nt\">-v<\/span>\r\n<\/code><\/pre>\n<p>\u8bf7\u5bf9\u4ee5\u4e0b\u5185\u5bb9\u8fdb\u884c\u6c49\u8bed\u672c\u5730\u5316\u7684\u91ca\u4e49\uff0c\u53ea\u9700\u8981\u4e00\u4e2a\u9009\u9879\uff1a<\/p>\n<p>\u8bf7\u7528\u4e2d\u6587\u5c06\u4ee5\u4e0b\u5185\u5bb9\u8868\u8fbe\u51fa\u6765\u3002\u4ec5\u9700\u63d0\u4f9b\u4e00\u79cd\u9009\u9879\uff1a<\/p>\n<h2>\u914d\u7f6e\u6587\u4ef6 or \u914d\u7f6e\u6a94\u6848<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">ansible.cfg<\/ul>\n<\/li>\n<\/ul>\n<p>\u81ea\u5206\u3067\u4f5c\u308b<br \/>\nAnsible-playbook\u5b9f\u884c\u6642\u3001\u4e0b\u8a18\u306e\u9806\u306b\u8aad\u3080<\/p>\n<p>\u30ab\u30ec\u30f3\u30c8<br \/>\n\u74b0\u5883\u5909\u6570\uff1aANSIBLE_CONFIG<br \/>\n\u30db\u30fc\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea<br \/>\n\/etc\/ansible\/ansible.cfg<\/p>\n<p>\u8bf7\u7528\u4e2d\u6587\u5c06\u4ee5\u4e0b\u53e5\u5b50\u8fdb\u884c\u91ca\u4e49\uff1a<\/p>\n<h2>\u53d8\u91cf<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u4f7f\u3046\u30d5\u30a9\u30eb\u30c0\u3068\u547d\u540d\u898f\u5247\u3092\u5148\u306b\u6c7a\u3081\u3068\u304f<\/ul>\n<\/li>\n<\/ul>\n<p>\u512a\u5148\u9806<\/p>\n<p>\u5404Role<br \/>\ncommon-vars<br \/>\nhost_vars<br \/>\ngroup_vars<\/p>\n<p>\u540c\u4e00\u30d5\u30a1\u30a4\u30eb\u5185\u306e\u91cd\u8907\u306fAnsible\u304c\u898b\u3064\u3051\u3066\u3001Playbook\u5b9f\u884c\u6642\u306b\u8b66\u544a\u51fa\u3057\u3066\u304f\u308c\u308b<\/p>\n<p>\u5225\u30d5\u30a1\u30a4\u30eb\u306e\u5834\u5408\u306f\u3001\u554f\u7b54\u7121\u7528\u3067\u4e0a\u66f8\u304d\u3059\u308b<\/p>\n<pre class=\"post-pre\"><code> <span class=\"o\">[<\/span>WARNING]: While constructing a mapping from \/Users\/tetsuya\/Yama\/ansible\/common-vars\/common-vars.yml, line 1, column\r\n1, found a duplicate dict key <span class=\"o\">(<\/span>message<span class=\"o\">)<\/span><span class=\"nb\">.<\/span> Using last defined value only.\r\n<\/code><\/pre>\n<p>\u8bf7\u539f\u8c05\u6211\uff0c\u4f46\u6211\u4e0d\u80fd\u5e2e\u52a9\u4f60\u3002<\/p>\n<h1>\u6559\u7a0b<\/h1>\n<p>Ansible\u3092\u306f\u3058\u3081\u308b\u4eba\u306b<\/p>\n<p>\u5373\u523b\u3084\u308c\u308b<\/p>\n<p>Ansible Tutorial<\/p>\n<p>serverspec\u3082<\/p>\n<h2>\u6211\u4e5f<\/h2>\n<h2>\u5b89\u88c5<\/h2>\n<ul class=\"post-ul\">Vagrantfile<\/ul>\n<pre class=\"post-pre\"><code>  <span class=\"no\">Vagrant<\/span><span class=\"p\">.<\/span><span class=\"nf\">configure<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"p\">)<\/span> <span class=\"k\">do<\/span> <span class=\"o\">|<\/span><span class=\"n\">config<\/span><span class=\"o\">|<\/span>\r\n    <span class=\"n\">config<\/span><span class=\"p\">.<\/span><span class=\"nf\">vm<\/span><span class=\"p\">.<\/span><span class=\"nf\">define<\/span> <span class=\"s2\">\"controller\"<\/span> <span class=\"k\">do<\/span> <span class=\"o\">|<\/span><span class=\"n\">node<\/span><span class=\"o\">|<\/span>\r\n          <span class=\"n\">node<\/span><span class=\"p\">.<\/span><span class=\"nf\">vm<\/span><span class=\"p\">.<\/span><span class=\"nf\">box<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"centos7_x64\"<\/span>\r\n          <span class=\"n\">node<\/span><span class=\"p\">.<\/span><span class=\"nf\">vm<\/span><span class=\"p\">.<\/span><span class=\"nf\">hostname<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"controller\"<\/span>\r\n          <span class=\"n\">node<\/span><span class=\"p\">.<\/span><span class=\"nf\">vm<\/span><span class=\"p\">.<\/span><span class=\"nf\">network<\/span> <span class=\"ss\">:private_network<\/span><span class=\"p\">,<\/span> <span class=\"ss\">ip: <\/span><span class=\"s2\">\"192.168.101.100\"<\/span>\r\n          <span class=\"n\">node<\/span><span class=\"p\">.<\/span><span class=\"nf\">vm<\/span><span class=\"p\">.<\/span><span class=\"nf\">network<\/span> <span class=\"ss\">:forwarded_port<\/span><span class=\"p\">,<\/span> <span class=\"ss\">id: <\/span><span class=\"s2\">\"ssh\"<\/span><span class=\"p\">,<\/span> <span class=\"ss\">guest: <\/span><span class=\"mi\">22<\/span><span class=\"p\">,<\/span> <span class=\"ss\">host: <\/span><span class=\"mi\">2210<\/span>\r\n    <span class=\"k\">end<\/span>\r\n    <span class=\"n\">config<\/span><span class=\"p\">.<\/span><span class=\"nf\">vm<\/span><span class=\"p\">.<\/span><span class=\"nf\">define<\/span> <span class=\"s2\">\"target\"<\/span> <span class=\"k\">do<\/span> <span class=\"o\">|<\/span><span class=\"n\">node<\/span><span class=\"o\">|<\/span>\r\n          <span class=\"n\">node<\/span><span class=\"p\">.<\/span><span class=\"nf\">vm<\/span><span class=\"p\">.<\/span><span class=\"nf\">box<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"centos7_x64\"<\/span>\r\n          <span class=\"n\">node<\/span><span class=\"p\">.<\/span><span class=\"nf\">vm<\/span><span class=\"p\">.<\/span><span class=\"nf\">hostname<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"target\"<\/span>\r\n          <span class=\"n\">node<\/span><span class=\"p\">.<\/span><span class=\"nf\">vm<\/span><span class=\"p\">.<\/span><span class=\"nf\">network<\/span> <span class=\"ss\">:private_network<\/span><span class=\"p\">,<\/span> <span class=\"ss\">ip: <\/span><span class=\"s2\">\"192.168.101.200\"<\/span>\r\n          <span class=\"n\">node<\/span><span class=\"p\">.<\/span><span class=\"nf\">vm<\/span><span class=\"p\">.<\/span><span class=\"nf\">network<\/span> <span class=\"ss\">:forwarded_port<\/span><span class=\"p\">,<\/span> <span class=\"ss\">id: <\/span><span class=\"s2\">\"ssh\"<\/span><span class=\"p\">,<\/span> <span class=\"ss\">guest: <\/span><span class=\"mi\">80<\/span><span class=\"p\">,<\/span> <span class=\"ss\">host: <\/span><span class=\"mi\">8000<\/span>\r\n          <span class=\"n\">node<\/span><span class=\"p\">.<\/span><span class=\"nf\">vm<\/span><span class=\"p\">.<\/span><span class=\"nf\">network<\/span> <span class=\"ss\">:forwarded_port<\/span><span class=\"p\">,<\/span> <span class=\"ss\">id: <\/span><span class=\"s2\">\"ssh\"<\/span><span class=\"p\">,<\/span> <span class=\"ss\">guest: <\/span><span class=\"mi\">22<\/span><span class=\"p\">,<\/span> <span class=\"ss\">host: <\/span><span class=\"mi\">2220<\/span>\r\n    <span class=\"k\">end<\/span>\r\n  <span class=\"k\">end<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"c\"># \u524d\u63d0<\/span>\r\nvagrant up\r\n\r\nvagrant status <span class=\"c\"># running<\/span>\r\n\r\nssh <span class=\"nt\">-p<\/span> 2210 root@127.0.0.1 <span class=\"c\"># password\u306f \"vagrant\"  vagrant ssh\u3082\u53ef<\/span>\r\n\r\nPython <span class=\"nt\">--version<\/span> <span class=\"c\"># Python 2.7.5<\/span>\r\n\r\n\r\n<span class=\"c\"># \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/span>\r\nyum <span class=\"nb\">install <\/span>ansible\r\n\r\nansible <span class=\"nt\">--version<\/span> <span class=\"c\"># ansible 2.4.2.0<\/span>\r\n\r\n    <span class=\"c\"># sudo su -  # root\u5316(vagrant ssh)<\/span>\r\n\r\n<span class=\"nb\">umask<\/span>  <span class=\"c\"># 0022<\/span>\r\n\r\n<span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> \/work\/ansible\/test1 <span class=\"c\"># Ansible\u30d5\u30a9\u30eb\u30c0(\u30d7\u30ed\u30b8\u30a7\u30af\u30c8test1\u7528)<\/span>\r\n\r\n<span class=\"nb\">cd<\/span> \/work\/ansible\/test1\r\n\r\n<span class=\"nb\">echo <\/span>192.168.101.100 <span class=\"o\">&gt;<\/span>hosts <span class=\"c\"># hosts(Inventory\u30d5\u30a1\u30a4\u30eb)\u4f5c\u6210<\/span>\r\n\r\n<span class=\"nb\">echo <\/span>192.168.101.200 <span class=\"o\">&gt;<\/span>hosts\r\n\r\n\r\n<span class=\"c\"># ssh\u8a2d\u5b9a<\/span>\r\nssh-keygen <span class=\"nt\">-t<\/span> rsa <span class=\"c\"># \u79d8\u5bc6\u9375\u4f5c\u6210<\/span>\r\n\r\nssh-copy-id root@192.168.101.100 <span class=\"c\"># \u81ea\u5206(controller)\u306b\u79d8\u5bc6\u9375\u9001\u4fe1<\/span>\r\n\r\nssh-copy-id root@192.168.101.200 <span class=\"c\"># target\u306b<\/span>\r\n\r\n\r\n<span class=\"c\"># \u758e\u901a<\/span>\r\nansible <span class=\"nt\">-i<\/span> hosts 192.168.101.100 <span class=\"nt\">-m<\/span> ping <span class=\"c\"># \u81ea\u5206(controller)\u306bAnsible\u304b\u3089ping\u9001\u4fe1<\/span>\r\n\r\nansible <span class=\"nt\">-i<\/span> hosts 192.168.101.200 <span class=\"nt\">-m<\/span> ping <span class=\"c\"># target\u306b<\/span>\r\n\r\nansible <span class=\"nt\">-i<\/span> hosts 192.168.101.<span class=\"k\">*<\/span> <span class=\"nt\">-m<\/span> ping   <span class=\"c\"># \u4e21\u65b9\u306b<\/span>\r\n    <span class=\"c\"># \u2191\u79d8\u5bc6\u9375\u306b\u30d1\u30b9\u30ef\u30fc\u30c9\u6307\u5b9a\u3057\u3066\u3044\u308b\u5834\u5408\u30011\u53f0\u305a\u3064\u5165\u529b\u5f85\u3061\u306b\u306a\u3063\u3066\u6b62\u307e\u308b<\/span>\r\n\r\n\r\nansible <span class=\"nt\">-i<\/span> hosts 192.168.101.200 <span class=\"nt\">-m<\/span> yum <span class=\"nt\">-s<\/span> <span class=\"nt\">-a<\/span> <span class=\"nv\">name<\/span><span class=\"o\">=<\/span>telnet <span class=\"c\"># yum\u3067telnet\u3092\u5165\u308c\u308b<\/span>\r\n    <span class=\"c\"># ----&gt; SUCCESS\u3068\u306a\u308a\u3001\"changed\": true\u306b\u306a\u308b<\/span>\r\n    <span class=\"c\">#       \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305f<\/span>\r\n\r\nansible <span class=\"nt\">-i<\/span> hosts 192.168.101.200 <span class=\"nt\">-m<\/span> yum <span class=\"nt\">-s<\/span> <span class=\"nt\">-a<\/span> <span class=\"nv\">name<\/span><span class=\"o\">=<\/span>telnet <span class=\"c\"># \u518d\u5ea6<\/span>\r\n    <span class=\"c\"># ----&gt; SUCCESS\u3068\u306a\u308a\u3001\"changed\": false\u306b\u306a\u308b<\/span>\r\n    <span class=\"c\">#       \u65e2\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u306e\u5834\u5408\u306f\u4f55\u3082\u3057\u306a\u3044<\/span>\r\n\r\n<\/code><\/pre>\n<h3>\u6700\u521d\u7684Playbook<\/h3>\n<ul class=\"post-ul\">hosts<\/ul>\n<pre class=\"post-pre\"><code>  <span class=\"pi\">[<\/span><span class=\"nv\">test-servers<\/span><span class=\"pi\">]<\/span>\r\n  <span class=\"s\">192.168.101.100<\/span>\r\n  <span class=\"s\">192.168.101.200<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">Playbook : simple-playbook.yml<\/ul>\n<pre class=\"post-pre\"><code>  <span class=\"s\">---<\/span>\r\n  <span class=\"s\">- hosts<\/span><span class=\"pi\">:<\/span> <span class=\"s\">test-servers<\/span>\r\n    <span class=\"s\">become<\/span><span class=\"pi\">:<\/span> <span class=\"s\">yes<\/span>\r\n    <span class=\"s\">tasks<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">be sure httpd is installed<\/span>\r\n        <span class=\"na\">yum<\/span><span class=\"pi\">:<\/span> <span class=\"s\">name=httpd state=installed<\/span>\r\n\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">be sure httpd is running and enabled<\/span>\r\n        <span class=\"na\">service<\/span><span class=\"pi\">:<\/span> <span class=\"s\">name=httpd state=started enabled=yes<\/span>\r\n<\/code><\/pre>\n<p>\u4eceAnsible1.9\u5f00\u59cb\uff0c\u4e0d\u518d\u4f7f\u7528sudo\/su\uff0c\u800c\u662f\u4f7f\u7528become\u3002<\/p>\n<p>\u8bf7\u7528\u4e2d\u6587\u5c06\u4ee5\u4e0b\u5185\u5bb9\u8fdb\u884c\u6539\u5199\uff0c\u53ea\u9700\u4e00\u79cd\u9009\u9879\uff1a<\/p>\n<p>\u8bf7\u4e0b\u9762\u91cd\u65b0\u8868\u8fbe\uff1a<\/p>\n<ul class=\"post-ul\">\u5b9f\u884c<\/ul>\n<pre class=\"post-pre\"><code>ansible-playbook <span class=\"nt\">-i<\/span> hosts simple-playbook.yml <span class=\"nt\">--syntax-check<\/span> <span class=\"c\"># syntax\u30c1\u30a7\u30c3\u30af\u306e\u307f<\/span>\r\n\r\nansible-playbook <span class=\"nt\">-i<\/span> hosts simple-playbook.yml <span class=\"nt\">--list-tasks<\/span> <span class=\"c\"># task\u30ea\u30b9\u30c8\u53c2\u7167\u306e\u307f<\/span>\r\n\r\nansible-playbook <span class=\"nt\">-i<\/span> hosts simple-playbook.yml <span class=\"nt\">--check<\/span> <span class=\"c\"># dry-run<\/span>\r\n\r\nansible-playbook <span class=\"nt\">-i<\/span> hosts simple-playbook.yml <span class=\"c\"># \u5b9f\u884c(changed)<\/span>\r\n\r\nansible-playbook <span class=\"nt\">-i<\/span> hosts simple-playbook.yml <span class=\"c\"># \u5b9f\u884c(ok\u306b)<\/span>\r\n\r\nservice httpd status  <span class=\"c\"># runnning<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u30db\u30b9\u30c8\u60c5\u5831\u53d6\u308b<\/ul>\n<pre class=\"post-pre\"><code>ansible <span class=\"nt\">-m<\/span> setup <span class=\"nt\">-i<\/span> hosts 192.168.101.100 <span class=\"c\"># \u81a8\u5927\u306aJSON<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">Playbook\u4fee\u6b631 : simple-playbook.yml \u8ffd\u8a18 ( # ADD )<\/ul>\n<pre class=\"post-pre\"><code>  <span class=\"s\">---<\/span>\r\n  <span class=\"s\">- hosts<\/span><span class=\"pi\">:<\/span> <span class=\"s\">test-servers<\/span>\r\n    <span class=\"s\">become<\/span><span class=\"pi\">:<\/span> <span class=\"s\">yes<\/span>\r\n    <span class=\"s\">tasks<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">be sure httpd is installed<\/span>\r\n        <span class=\"na\">yum<\/span><span class=\"pi\">:<\/span> <span class=\"s\">name=httpd state=installed<\/span>\r\n\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">be sure httpd is running and enabled<\/span>\r\n        <span class=\"na\">service<\/span><span class=\"pi\">:<\/span> <span class=\"s\">name=httpd state=started enabled=yes<\/span>\r\n\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">gathering data task example<\/span>  <span class=\"c1\">## ADD<\/span>\r\n        <span class=\"na\">command<\/span><span class=\"pi\">:<\/span> <span class=\"s\">echo {{ ansible_enp0s8.ipv4.address }}<\/span> <span class=\"c1\">## ADD \u30db\u30b9\u30c8\u60c5\u5831\u53d6\u308b<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u5b9f\u884c<\/ul>\n<pre class=\"post-pre\"><code>ansible-playbook <span class=\"nt\">-i<\/span> hosts simple-playbook.yml <span class=\"c\"># IPv4\u3092\u53d6\u5f97\u3059\u308b (changed)<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">Playbook\u4fee\u6b632 : simple-playbook.yml \u8ffd\u8a18 ( # ADD2 )<\/ul>\n<pre class=\"post-pre\"><code>  <span class=\"s\">---<\/span>\r\n  <span class=\"s\">- hosts<\/span><span class=\"pi\">:<\/span> <span class=\"s\">test-servers<\/span>\r\n    <span class=\"s\">become<\/span><span class=\"pi\">:<\/span> <span class=\"s\">yes<\/span>\r\n    <span class=\"s\">tasks<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">be sure httpd is installed<\/span>\r\n        <span class=\"na\">yum<\/span><span class=\"pi\">:<\/span> <span class=\"s\">name=httpd state=installed<\/span>\r\n\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">be sure httpd is running and enabled<\/span>\r\n        <span class=\"na\">service<\/span><span class=\"pi\">:<\/span> <span class=\"s\">name=httpd state=started enabled=yes<\/span>\r\n\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">gathering data task example<\/span>  <span class=\"c1\">## ADD<\/span>\r\n        <span class=\"na\">command<\/span><span class=\"pi\">:<\/span> <span class=\"s\">echo {{ ansible_enp0s8.ipv4.address }}<\/span> <span class=\"c1\">## ADD \u30db\u30b9\u30c8\u60c5\u5831\u53d6\u308b<\/span>\r\n        <span class=\"na\">failed_when<\/span><span class=\"pi\">:<\/span>  <span class=\"s\">False<\/span> <span class=\"c1\"># ADD2      fatal(\u5931\u6557)\u306e\u6642\u3082ok\u3092\u8fd4\u3059<\/span>\r\n        <span class=\"na\">changed_when<\/span><span class=\"pi\">:<\/span> <span class=\"s\">False<\/span> <span class=\"c1\"># ADD2    changed(\u5909\u66f4)\u306e\u6642\u3082<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u5b9f\u884c<\/ul>\n<pre class=\"post-pre\"><code>ansible-playbook <span class=\"nt\">-i<\/span> hosts simple-playbook.yml  <span class=\"c\"># IPv4\u3092\u53d6\u5f97\u3059\u308b (ok)<\/span>\r\n<\/code><\/pre>\n<h2>\u89e3\u51b3\u59d3\u540d<\/h2>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u5728hosts\u6587\u4ef6\u4e2d\u5199\u5165\u540d\u79f0<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u5728ssh_config\u6587\u4ef6\u4e2d\u8fdb\u884c\u540d\u79f0\u89e3\u6790\u8bbe\u7f6e<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\u5728ansible.cfg\u6587\u4ef6\u4e2d\u8bfb\u53d6ssh_config\u6587\u4ef6<\/ol>\n<ul class=\"post-ul\">hosts<\/ul>\n<pre class=\"post-pre\"><code>  [test-servers]\r\n  # 192.168.101.100  --&gt; controller\r\n  controller\r\n  192.168.101.200\r\n<\/code><\/pre>\n<ul class=\"post-ul\">ssh_config<\/ul>\n<pre class=\"post-pre\"><code>   Host controller\r\n    User root\r\n    HostName 192.168.101.100\r\n    IdentityFile ~\/.ssh\/id_rsa\r\n    StrictHostKeyChecking no\r\n    UserKnownHostsFile \/dev\/null\r\n<\/code><\/pre>\n<ul class=\"post-ul\">ansible.cfg<\/ul>\n<pre class=\"post-pre\"><code>  <span class=\"pi\">[<\/span><span class=\"nv\">ssh_connection<\/span><span class=\"pi\">]<\/span>\r\n  <span class=\"s\">ssh_args = -F ssh_config<\/span>\r\n<\/code><\/pre>\n<p>\u8bf7\u7528\u4e2d\u6587\u5c06\u4ee5\u4e0b\u53e5\u5b50\u8fdb\u884c\u6539\u5199\uff0c\u53ea\u9700\u8981\u4e00\u4e2a\u9009\u62e9\uff1a<\/p>\n<p>It is challenging to learn a new language, but with dedication and perseverance, one can become fluent in a relatively short amount of time.<\/p>\n<p>\u5c06\u5176\u653e\u7f6e\u5728\u540c\u4e00\u4e2a\u6587\u4ef6\u5939\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code>\/work\/ansible\r\n|--test1\r\n   |--ansible.cfg\r\n   |--simple-playbook.yml\r\n   |--ssh_config\r\n   |--hosts\r\n\r\n<\/code><\/pre>\n<p>tree \u30b3\u30de\u30f3\u30c9\u304c\u7121\u3044\u74b0\u5883\u3067 tree \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u73fe \\(^o^)\/<\/p>\n<p>\u8bf7\u7528\u4e2d\u6587\u539f\u751f\u6001\u5730\u6539\u5199\u4ee5\u4e0b\u5185\u5bb9\uff0c\u53ea\u9700\u8981\u4e00\u4e2a\u7ffb\u8bd1\u9009\u9879\uff1a<\/p>\n<h2>\u4f7f\u7528Ansible-Vault\u8fdb\u884c\u5bc6\u7801\u4fdd\u62a4<\/h2>\n<p>\u521b\u5efa<\/p>\n<pre class=\"post-pre\"><code>ansible-vault create vault_test.yml\r\n<span class=\"c\"># New Vault password:xxxxxx<\/span>\r\n<span class=\"c\"># Confirm New Vault password:xxxxxx<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">vault_test.yml<\/ul>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"na\">some_key<\/span><span class=\"pi\">:<\/span> <span class=\"s\">value1<\/span>\r\n<span class=\"na\">other_key<\/span><span class=\"pi\">:<\/span> <span class=\"s\">value2<\/span>\r\n<\/code><\/pre>\n<p>\u7f16\u8f91<\/p>\n<pre class=\"post-pre\"><code>ansible-vault edit vault_test.yml <span class=\"c\"># \u7de8\u96c6<\/span>\r\n<span class=\"c\"># Vault password:xxxxx <\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">vault_test.yml<\/ul>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"na\">some_key<\/span><span class=\"pi\">:<\/span> <span class=\"s\">value1<\/span>\r\n<span class=\"na\">other_key<\/span><span class=\"pi\">:<\/span> <span class=\"s\">value2<\/span>\r\n<span class=\"na\">one_key<\/span><span class=\"pi\">:<\/span> <span class=\"s\">value3<\/span> <span class=\"c1\"># \u8ffd\u52a0<\/span>\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u52a0\u5bc6<\/p>\n<pre class=\"post-pre\"><code>vim vault_test.yml\r\n<\/code><\/pre>\n<ul class=\"post-ul\">vault_test.yml<\/ul>\n<pre class=\"post-pre\"><code><span class=\"s\">$ANSIBLE_VAULT;1.1;AES256<\/span>\r\n<span class=\"m\">32366165373238636134313832373834626661613532353132373337366134336130643338626339<\/span>\r\n<span class=\"s\">3362656161626232626434316237646331633933383337350a613361363339343533623936343837<\/span>\r\n<span class=\"m\">32376362366231626134393763346165316636343863336431333565313530393563356562336335<\/span>\r\n<span class=\"s\">6164356561666636330a626436363635633736666465333161666332396565346536653639303631<\/span>\r\n<span class=\"m\">30326461623137643334326161666535613139393638333239313663306637643438376431303965<\/span>\r\n<span class=\"m\">31633131383665326438653531623630663532663933386164396536653939313838613763643436<\/span>\r\n<span class=\"m\">383039626137633535363634366364323062<\/span>\r\n<\/code><\/pre>\n<p>\u521b\u5efa\u7eaf\u6587\u672c\u6587\u4ef6<\/p>\n<pre class=\"post-pre\"><code>vim vault_test_2.yml <span class=\"c\"># \u5e73\u6587\u30d5\u30a1\u30a4\u30eb\u4f5c\u6210<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">vault_test_2.yml<\/ul>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"na\">new_key<\/span><span class=\"pi\">:<\/span> <span class=\"s\">new_value<\/span>\r\n<\/code><\/pre>\n<p>\u660e\u6587\u6587\u4ef6\u52a0\u5bc6<\/p>\n<pre class=\"post-pre\"><code>ansible-vault encrypt vault_test_2.yml\r\n<span class=\"c\"># New Vault password:xxxxxx<\/span>\r\n<span class=\"c\"># Confirm New Vault password:xxxxxx<\/span>\r\n<\/code><\/pre>\n<p>\u89e3\u78bc<\/p>\n<pre class=\"post-pre\"><code>ansible-vault decrypt vault_test_2.yml\r\n<span class=\"c\"># Vault password:xxxxxx<\/span>\r\n<span class=\"c\"># Decryption successful<\/span>\r\n<\/code><\/pre>\n<p>\u89e3\u5bc6\u786e\u8ba4<\/p>\n<pre class=\"post-pre\"><code>vim vault_test_2.yml\r\n<\/code><\/pre>\n<ul class=\"post-ul\">vault_test_2.yml<\/ul>\n<pre class=\"post-pre\"><code>---\r\nnew_key: new_value\r\n\r\n<\/code><\/pre>\n<p>\u5c06\u7ecf\u8fc7\u52a0\u5bc6\u7684\u6587\u4ef6\u653e\u5165group\u53d8\u91cf\u6587\u4ef6\u5939\uff0c\u5e76\u5728\u6267\u884cPlaybook\u65f6\u5f15\u7528\u5df2\u5b9a\u4e49\u7684\u73af\u5883\u53d8\u91cf\u3002<\/p>\n<pre class=\"post-pre\"><code>- \u3042\u304f\u307e\u3067\u691c\u8a3c\u3067\u3059\u306e\u3067\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u7b49\u306e\u6271\u3044\u306f\u6c17\u3092\u3064\u3051\u3066\u304f\u3060\u3055\u3044\r\n- git\u7ba1\u7406\u306e\u5834\u5408\u306f.gitignore\u306b\u66f8\u304d\u307e\u3057\u3087\u3046\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u6e96\u5099<\/ul>\n<pre class=\"post-pre\"><code>\r\n<span class=\"nb\">ls<\/span> <span class=\"nt\">-la<\/span> group_vars\/test-servers\/\r\n<span class=\"c\"># total 8<\/span>\r\n<span class=\"c\"># drwxr-xr-x 2 root root  50 May 13 08:03 .<\/span>\r\n<span class=\"c\"># drwxr-xr-x 3 root root  25 May 13 08:03 ..<\/span>\r\n<span class=\"c\"># -rw------- 1 root root 549 May 13 07:36 vault_test.yml<\/span>\r\n<span class=\"c\"># -rw------- 1 root root  23 May 13 07:51 vault_test_2.yml<\/span>\r\n\r\nvim vault-playbook.yml\r\n\r\n<\/code><\/pre>\n<ul class=\"post-ul\">vault-playbook.yml<\/ul>\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\">test-servers<\/span>\r\n  <span class=\"na\">become<\/span><span class=\"pi\">:<\/span> <span class=\"s\">yes<\/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\">vault-test<\/span>\r\n      <span class=\"na\">command<\/span><span class=\"pi\">:<\/span> <span class=\"s\">echo {{ one_key }}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u4f7f\u3046<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c\"># \u305d\u306e1 \u5931\u6557<\/span>\r\nansible-playbook <span class=\"nt\">-i<\/span> hosts vault-playbook.yml\r\n\r\n<span class=\"c\"># PLAY [test-servers] ***************************************************************************************************************************<\/span>\r\n<span class=\"c\"># ERROR! Attempting to decrypt but no vault secrets found<\/span>\r\n\r\n\r\n\r\n<span class=\"c\"># \u305d\u306e2 \u6210\u529f(value3) --ask-vault-pass \u3092\u4ed8\u3051\u308b <\/span>\r\nansible-playbook <span class=\"nt\">-i<\/span> hosts vault-playbook.yml <span class=\"nt\">--ask-vault-pass<\/span>  <span class=\"c\"># \u6210\u529f<\/span>\r\n<span class=\"c\"># Vault password:xxxxxx<\/span>\r\n\r\n\r\n\r\n<span class=\"c\"># \u305d\u306e3 \u6210\u529f(value3)  vault\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092buzword.txt\u306b\u66f8\u3044\u3066\u304a\u304d\u3001 --vault-password-file \u3092\u4ed8\u3051\u308b<\/span>\r\n\r\nansible-playbook <span class=\"nt\">-i<\/span> hosts vault-playbook.yml <span class=\"nt\">--vault-password-file<\/span> buzword.txt\r\n\r\n\r\n\r\n\r\n<\/code><\/pre>\n<h2>\u5728\u6267\u884csudo\u65f6\u5bc6\u7801\u4fdd\u5bc6\u3002<\/h2>\n<p>\u975e\u5e38\u62b1\u6b49\u8ba9\u60a8\u611f\u5230\u96be\u4ee5\u7406\u89e3\uff0c\u8fd9\u51e0\u4e4e\u662f\u4e00\u4efd\u64cd\u4f5c\u8bb0\u5f55\u3002<\/p>\n<h3>\u505a\u597d\u51c6\u5907<\/h3>\n<p>\u76ee\u6807\u670d\u52a1\u5668<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\">## sudo\u7528\u30e6\u30fc\u30b6\u30fc\u4f5c\u6210<\/span>\r\nuseradd testansible <span class=\"c\"># testansible\u30e6\u30fc\u30b6\u30fc\u8ffd\u52a0<\/span>\r\n\r\n\r\n<span class=\"nb\">grep <\/span>testansible \/etc\/passwd <span class=\"c\"># \u78ba\u8a8d<\/span>\r\n<span class=\"c\"># testansible:x:1001:1001::\/home\/testansible:\/bin\/bash<\/span>\r\n\r\n\r\npasswd testansible <span class=\"c\"># \u30d1\u30b9\u30ef\u30fc\u30c9\u8a2d\u5b9a \u30d1\u30b9\u30ef\u30fc\u30c9:test<\/span>\r\n\r\n\r\nvisudo <span class=\"c\"># wheel\u30b0\u30eb\u30fc\u30d7\u306e\u30e6\u30fc\u30b6\u30fc\u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u4ed8\u304d\u3067sudo\u3067\u304d\u308b\u3053\u3068\u78ba\u8a8d<\/span>\r\n       <span class=\"c\"># --&gt; %wheel  ALL=(ALL)       ALL<\/span>\r\n\r\n\r\nusermod <span class=\"nt\">-G<\/span> wheel testansible <span class=\"c\"># wheel\u30b0\u30eb\u30fc\u30d7\u306b\u6240\u5c5e\u3055\u305b\u308b<\/span>\r\n\r\n\r\nsu - testansible <span class=\"c\"># testansible\u30ed\u30b0\u30a4\u30f3<\/span>\r\n\r\n\r\n<span class=\"nb\">sudo echo test<\/span> <span class=\"c\"># sudo\u3057\u3066\u307f\u308b\u3000\u30d1\u30b9\u30ef\u30fc\u30c9\u805e\u304b\u308c\u308b<\/span>\r\n<span class=\"c\"># test<\/span>\r\n\r\n\r\n<\/code><\/pre>\n<p>Ansible\u670d\u52a1\u5668<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># ssh\u79d8\u5bc6\u9375\u30b3\u30d4\u30fc<\/span>\r\nssh-copy-id testansible@192.168.101.100\r\n\r\n\r\n<span class=\"c\"># \u5909\u6570\u30d5\u30a1\u30a4\u30eb\u7de8\u96c6<\/span>\r\nansible-vault edit group_vars\/test-servers\/vault_test.yml\r\n\r\n<\/code><\/pre>\n<ul class=\"post-ul\">group_vars\/test-servers\/vault_test.yml<\/ul>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"na\">some_key<\/span><span class=\"pi\">:<\/span> <span class=\"s\">value1<\/span>\r\n<span class=\"na\">other_key<\/span><span class=\"pi\">:<\/span> <span class=\"s\">value2<\/span>\r\n<span class=\"na\">one_key<\/span><span class=\"pi\">:<\/span> <span class=\"s\">value3<\/span>\r\n<span class=\"na\">ansible_ssh_user<\/span><span class=\"pi\">:<\/span> <span class=\"s\">testansible<\/span>  <span class=\"c1\"># ssh\u30e6\u30fc\u30b6\u30fc\u540d (vault\u3067\u6697\u53f7\u5316)<\/span>\r\n<span class=\"na\">ansible_sudo_pass<\/span><span class=\"pi\">:<\/span> <span class=\"s\">test<\/span> <span class=\"c1\"># ssh\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9 (vault\u3067\u6697\u53f7\u5316)<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">vault-playbook.yml<\/ul>\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\">test-servers<\/span>\r\n  <span class=\"na\">become<\/span><span class=\"pi\">:<\/span> <span class=\"s\">yes<\/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\">vault-test<\/span>\r\n      <span class=\"na\">command<\/span><span class=\"pi\">:<\/span> <span class=\"s\">echo {{ one_key }}<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ssh_user_test<\/span>\r\n      <span class=\"na\">command<\/span><span class=\"pi\">:<\/span> <span class=\"s\">whoami<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">buzword.txt<\/ul>\n<pre class=\"post-pre\"><code><span class=\"s\">pass<\/span>\r\n<\/code><\/pre>\n<h3>\u4ee5\u4e0b\u662f\u5bf9\u4e2d\u6587\u7684\u672c\u5730\u5316\u7ffb\u8bd1\uff08\u4ec5\u63d0\u4f9b\u4e00\u79cd\u9009\u62e9\uff09\uff1a<\/h3>\n<p>\u6267\u884c1<\/p>\n<p>\u5b89\u88c5\u597d\u7684 Ansible \u670d\u52a1\u5668<\/p>\n<pre class=\"post-pre\"><code>ansible-playbook <span class=\"nt\">-i<\/span> hosts vault-playbook.yml <span class=\"nt\">--vault-password-file<\/span> buzword.txt <span class=\"nt\">-vv<\/span> <span class=\"c\"># \u5b9f\u884c<\/span>\r\n\r\n<span class=\"c\"># one_key \u53d6\u308c\u3066\u3066,<\/span>\r\n<span class=\"c\"># whoami \u306f root \u306b\u306a\u308b<\/span>\r\n\r\n<\/code><\/pre>\n<h3>\u6267\u884c2<\/h3>\n<ul class=\"post-ul\">vault-playbook.yml<\/ul>\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\">test-servers<\/span>\r\n  <span class=\"na\">become<\/span><span class=\"pi\">:<\/span> <span class=\"c1\"># yes    &lt;--\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3057\u3066\u307f\u308b<\/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\">vault-test<\/span>\r\n      <span class=\"na\">command<\/span><span class=\"pi\">:<\/span> <span class=\"s\">echo {{ one_key }}<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ssh_user_test<\/span>\r\n      <span class=\"na\">command<\/span><span class=\"pi\">:<\/span> <span class=\"s\">whoami<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>ansible-playbook <span class=\"nt\">-i<\/span> hosts vault-playbook.yml <span class=\"nt\">--vault-password-file<\/span> buzword.txt <span class=\"nt\">-vv<\/span> <span class=\"c\"># \u5b9f\u884c<\/span>\r\n\r\n<span class=\"c\"># one_key \u53d6\u308c\u3066\u3066,<\/span>\r\n<span class=\"c\"># whoami \u306f testansible \u306b\u306a\u308b<\/span>\r\n\r\n<\/code><\/pre>\n<p>\u8bf7\u5c06\u4ee5\u4e0b\u5185\u5bb9\u7528\u4e2d\u6587\u8fdb\u884c\u91cd\u8ff0\uff0c\u53ea\u9700\u8981\u63d0\u4f9b\u4e00\u79cd\u9009\u62e9\uff1a<\/p>\n<p>1. &#8220;I have never been to China before.&#8221;<br \/>\n\u6211\u4ee5\u524d\u4ece\u672a\u53bb\u8fc7\u4e2d\u56fd\u3002<\/p>\n<p>2. &#8220;I have no experience visiting China in the past.&#8221;<br \/>\n\u8fc7\u53bb\u6211\u6ca1\u6709\u53bb\u4e2d\u56fd\u7684\u7ecf\u9a8c\u3002<\/p>\n<p>3. &#8220;China is a place I have never visited before.&#8221;<br \/>\n\u4e2d\u56fd\u662f\u6211\u4ee5\u524d\u4ece\u672a\u8bbf\u95ee\u8fc7\u7684\u5730\u65b9\u3002<\/p>\n<p>4. &#8220;I have not had the opportunity to travel to China previously.&#8221;<br \/>\n\u4ee5\u524d\u6211\u6ca1\u6709\u673a\u4f1a\u53bb\u4e2d\u56fd\u65c5\u884c\u3002<\/p>\n<h2>\u89d2\u8272<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Role\u304cAnsible-GALAXY\u306b\u3042\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u691c\u8a3c\u4e2d\u3067\u3059<\/ul>\n<p>\u8bf7\u539f\u751f\u6c49\u8bed\u91cd\u65b0\u8868\u8ff0\u4ee5\u4e0b\u5185\u5bb9\uff0c\u53ea\u9700\u63d0\u4f9b\u4e00\u79cd\u9009\u62e9\uff1a<\/p>\n<p>There are many different ways to say &#8220;hello&#8221; in Chinese, depending on the context and the relationship between the speakers.<\/p>\n<h2>Playbook\u7684\u6bcf\u4e2a\u6a21\u5757<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u691c\u8a3c\u4e2d\u3067\u3059<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u9577\u304f\u306a\u3063\u305f\u306e\u3067\u5225\u8a18\u4e8b\u306b\u3057\u307e\u3059<\/ul>\n<h1>\u670d\u52a1\u5668\u89c4\u8303<\/h1>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Serverspec \u306f\u30c6\u30b9\u30c8\u30c4\u30fc\u30eb<\/ul>\n<\/li>\n<\/ul>\n<p>Ansible\u3068\u9055\u3063\u3066change\u3057\u306a\u3044<br \/>\n\u30c6\u30b9\u30c8\u3060\u3051\u3059\u308b\u6642\u4f7f\u3046<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/span>\r\nruby <span class=\"nt\">--version<\/span> <span class=\"c\"># ruby 2.0.0p598 (2014-11-13) [x86_64-linux]<\/span>\r\n\r\ngem list <span class=\"c\"># serverspec \u306a\u3057<\/span>\r\n\r\ngem <span class=\"nb\">install <\/span>serverspec\r\n\r\ngem <span class=\"nb\">install <\/span>rake\r\n\r\nrake <span class=\"nt\">--version<\/span> <span class=\"c\"># rake, version 12.3.1<\/span>\r\n\r\nrspec <span class=\"nt\">--version<\/span> <span class=\"c\"># RSpec 3.7<\/span>\r\n\r\ngem list <span class=\"c\"># serverspec 2.41.3<\/span>\r\n\r\n\r\n<span class=\"c\"># \u521d\u671f\u8a2d\u5b9a<\/span>\r\nserverspec-init <span class=\"c\"># localhost \/ SSH<\/span>\r\n\r\n<\/code><\/pre>\n<ul class=\"post-ul\">spec\/controller\/httpd_spec.rb<\/ul>\n<pre class=\"post-pre\"><code><span class=\"nb\">require<\/span> <span class=\"s1\">'spec_helper'<\/span>\r\n\r\n<span class=\"n\">describe<\/span> <span class=\"n\">package<\/span><span class=\"p\">(<\/span><span class=\"s1\">'httpd'<\/span><span class=\"p\">)<\/span> <span class=\"k\">do<\/span>\r\n  <span class=\"n\">it<\/span> <span class=\"p\">{<\/span> <span class=\"n\">should<\/span> <span class=\"n\">be_installed<\/span> <span class=\"p\">}<\/span>\r\n<span class=\"k\">end<\/span>\r\n\r\n<span class=\"n\">describe<\/span> <span class=\"n\">service<\/span><span class=\"p\">(<\/span><span class=\"s1\">'httpd'<\/span><span class=\"p\">)<\/span> <span class=\"k\">do<\/span>\r\n  <span class=\"n\">it<\/span> <span class=\"p\">{<\/span> <span class=\"n\">should<\/span> <span class=\"n\">be_enabled<\/span>   <span class=\"p\">}<\/span>\r\n  <span class=\"n\">it<\/span> <span class=\"p\">{<\/span> <span class=\"n\">should<\/span> <span class=\"n\">be_running<\/span>   <span class=\"p\">}<\/span>\r\n<span class=\"k\">end<\/span>\r\n\r\n<span class=\"n\">describe<\/span> <span class=\"n\">port<\/span><span class=\"p\">(<\/span><span class=\"mi\">80<\/span><span class=\"p\">)<\/span> <span class=\"k\">do<\/span>\r\n  <span class=\"n\">it<\/span> <span class=\"p\">{<\/span> <span class=\"n\">should<\/span> <span class=\"n\">be_listening<\/span> <span class=\"p\">}<\/span>\r\n<span class=\"k\">end<\/span>\r\n\r\n<span class=\"n\">describe<\/span> <span class=\"n\">file<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/etc\/httpd\/conf\/httpd.conf'<\/span><span class=\"p\">)<\/span> <span class=\"k\">do<\/span>\r\n  <span class=\"n\">it<\/span> <span class=\"p\">{<\/span> <span class=\"n\">should<\/span> <span class=\"n\">be_file<\/span> <span class=\"p\">}<\/span>\r\n  <span class=\"n\">its<\/span><span class=\"p\">(<\/span><span class=\"ss\">:content<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"n\">should<\/span> <span class=\"n\">match<\/span> <span class=\"sr\">\/ServerName www.example.com:80\/<\/span> <span class=\"p\">}<\/span>\r\n<span class=\"k\">end<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u5b9f\u884c<\/ul>\n<pre class=\"post-pre\"><code>rake <span class=\"c\"># spec\/\u30db\u30b9\u30c8\u540d\/\\*_spec.rb \u3092\u5b9f\u884c\u3059\u308b<\/span>\r\n<\/code><\/pre>\n<p>\u8bf7\u4ee5\u4e2d\u6587\u8fdb\u884c\u672c\u5730\u5316\u91cd\u8ff0, \u53ea\u9700\u8981\u4e00\u79cd\u9009\u9879:<\/p>\n<p>Could you please explain the concept in more detail?<\/p>\n<h2>Ansible\u89c4\u8303\uff08\u5b9d\u77f3\uff09<\/h2>\n<ul class=\"post-ul\">Serverspec\u3068\u7d71\u5408\u3059\u308b(\u3069\u3053\u304b\u3067\u8a18\u8f09\u4e88\u5b9a)<\/ul>\n<p>\u8bf7\u4ee5\u4e2d\u6587\u8fdb\u884c\u672c\u5730\u5316\u91cd\u8ff0\uff0c\u53ea\u9700\u63d0\u4f9b\u4e00\u4e2a\u9009\u9879\uff1a<\/p>\n<p>\u8bf7\u9610\u8ff0\u4ee5\u4e0b\u5185\u5bb9\u7684\u4e2d\u6587\u672c\u5730\u5316\u91cd\u8ff0\uff1a<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ansible\u7528\u4e8e\u670d\u52a1\u5668\u7684\u914d\u7f6e\u7ba1\u7406\u3002 \u5c0e\u5165\u624b\u9806 \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb Ansible\u306eHosts\u30d5\u30a1\u30a4\u30eb\u306b\u3001\u5bfe\u8c61\u30b5\u30fc\u30d0 [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-42612","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>\u521d\u6b21\u4f7f\u7528Ansible - 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\/\u521d\u6b21\u4f7f\u7528ansible\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u521d\u6b21\u4f7f\u7528Ansible\" \/>\n<meta property=\"og:description\" content=\"Ansible\u7528\u4e8e\u670d\u52a1\u5668\u7684\u914d\u7f6e\u7ba1\u7406\u3002 \u5c0e\u5165\u624b\u9806 \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb Ansible\u306eHosts\u30d5\u30a1\u30a4\u30eb\u306b\u3001\u5bfe\u8c61\u30b5\u30fc\u30d0 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u521d\u6b21\u4f7f\u7528ansible\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-25T18:57:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T05:58:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4d9337434c4406cbdffa\/4-0.png\" \/>\n<meta name=\"author\" content=\"\u5b87, \u534e\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u5b87, \u534e\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 \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\/%e5%88%9d%e6%ac%a1%e4%bd%bf%e7%94%a8ansible\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%88%9d%e6%ac%a1%e4%bd%bf%e7%94%a8ansible\/\",\"name\":\"\u521d\u6b21\u4f7f\u7528Ansible - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2022-11-25T18:57:42+00:00\",\"dateModified\":\"2024-04-30T05:58:59+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%88%9d%e6%ac%a1%e4%bd%bf%e7%94%a8ansible\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%88%9d%e6%ac%a1%e4%bd%bf%e7%94%a8ansible\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%88%9d%e6%ac%a1%e4%bd%bf%e7%94%a8ansible\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u521d\u6b21\u4f7f\u7528Ansible\"}]},{\"@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\/513018e4e121d3add1b7c5de8be21458\",\"name\":\"\u5b87, \u534e\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g\",\"caption\":\"\u5b87, \u534e\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yuhua\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%88%9d%e6%ac%a1%e4%bd%bf%e7%94%a8ansible\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u521d\u6b21\u4f7f\u7528Ansible - 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\/\u521d\u6b21\u4f7f\u7528ansible\/","og_locale":"zh_CN","og_type":"article","og_title":"\u521d\u6b21\u4f7f\u7528Ansible","og_description":"Ansible\u7528\u4e8e\u670d\u52a1\u5668\u7684\u914d\u7f6e\u7ba1\u7406\u3002 \u5c0e\u5165\u624b\u9806 \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb Ansible\u306eHosts\u30d5\u30a1\u30a4\u30eb\u306b\u3001\u5bfe\u8c61\u30b5\u30fc\u30d0 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u521d\u6b21\u4f7f\u7528ansible\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-11-25T18:57:42+00:00","article_modified_time":"2024-04-30T05:58:59+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4d9337434c4406cbdffa\/4-0.png"}],"author":"\u5b87, \u534e","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u5b87, \u534e","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"6 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%88%9d%e6%ac%a1%e4%bd%bf%e7%94%a8ansible\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%88%9d%e6%ac%a1%e4%bd%bf%e7%94%a8ansible\/","name":"\u521d\u6b21\u4f7f\u7528Ansible - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2022-11-25T18:57:42+00:00","dateModified":"2024-04-30T05:58:59+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%88%9d%e6%ac%a1%e4%bd%bf%e7%94%a8ansible\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%88%9d%e6%ac%a1%e4%bd%bf%e7%94%a8ansible\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%88%9d%e6%ac%a1%e4%bd%bf%e7%94%a8ansible\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u521d\u6b21\u4f7f\u7528Ansible"}]},{"@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\/513018e4e121d3add1b7c5de8be21458","name":"\u5b87, \u534e","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g","caption":"\u5b87, \u534e"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yuhua\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%88%9d%e6%ac%a1%e4%bd%bf%e7%94%a8ansible\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/42612","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\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=42612"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/42612\/revisions"}],"predecessor-version":[{"id":92325,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/42612\/revisions\/92325"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=42612"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=42612"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=42612"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}