初次使用Ansible
Ansible用于服务器的配置管理。
-
- 導入手順
インストール
AnsibleのHostsファイルに、対象サーバーの ホスト名 (またはIPアドレス) を書く
作る構成を Playbook(YAML形式) に書き実行
-
- 前提
ssh接続可能
Python2インストール済 (普通されてる)

详细来说
-
- nginx,apache,mysqlの導入(yumモジュール)
-
- AWSの各サービスの構成管理(AWS用モジュール)
- ファイル配布、テキスト置換(fileモジュール)
创建并保留结构
Playbookの実行結果は、
失敗して「fatal」
変更した「changed」
そのままで「ok」
-
- 最初は「changed」
- その後は何回流しても「ok」にする

梦想

请用中文将以下内容进行原生态的改写,只需要提供一种选项:
请使用中文将以下内容重新表达,只提供一种选项:
命(壳)模块有问题
-
- 指定したコマンドを実行する子
-
- 「changed」または「fatal」のみ返却する
- いつも「ok」と返すようにするための回避策もある (それこそ無意味)
- name : "ruby check"
command: "ruby --version"
failed_when: False # 失敗(fatal)しても「ok」返す
changed_when: False # 変更(changed)しても「ok」返す
请原生地用中文将以下内容改述。只需要一个选项:
“Can you please give me directions to the nearest post office?”
“请问你能告诉我去最近的邮局怎么走吗?”
Ansible文件夹结构
-
- 私のテスト環境
実用していないため、まだプロトタイプです
これから良くなっていく予定 (別記事にするかも)

-
- 基本は公式にあるベストプラクティスにする
Ansible オレオレベストプラクティス取り入れた
请提供以下内容的中文翻译:
“Can you please help me with my homework?”
如何创建SSH配置文件
- 参考==ansible.cnfでssh_configを設定する
test_project01的开发环境示例是什么?
- ansible.cfg
[ssh_connection]
ssh_args = -F "{{ project_name }}/ssh_config_{{ project_env }}"
- test_project01/hosts_development
[web]
web-01
[all:vars]
project_name="test_project01"
project_env="development"
- test_project01/ssh_config_development
Host web-01
User tetsuya
HostName 127.0.0.1
IdentityFile ~/.ssh/id_rsa
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
- test_project01/site.yml (Playbook)
- hosts: web
become: yes
user: tetsuya
vars_files:
# role > common-vars > host_vars > group_vars の順に優先
- ../common-vars/common-vars.yml
roles:
- name: ../common-roles/common
- name: test-role
- 実行
# ansible.cfgのあるフォルダで実行する(test_project01の1つ上)
ansible-playbook -i test_project01/hosts_development test_project01/site.
yml -v
请对以下内容进行汉语本地化的释义,只需要一个选项:
请用中文将以下内容表达出来。仅需提供一种选项:
配置文件 or 配置檔案
-
- ansible.cfg
自分で作る
Ansible-playbook実行時、下記の順に読む
カレント
環境変数:ANSIBLE_CONFIG
ホームディレクトリ
/etc/ansible/ansible.cfg
请用中文将以下句子进行释义:
变量
-
- 使うフォルダと命名規則を先に決めとく
優先順
各Role
common-vars
host_vars
group_vars
同一ファイル内の重複はAnsibleが見つけて、Playbook実行時に警告出してくれる
別ファイルの場合は、問答無用で上書きする
[WARNING]: While constructing a mapping from /Users/tetsuya/Yama/ansible/common-vars/common-vars.yml, line 1, column
1, found a duplicate dict key (message). Using last defined value only.
请原谅我,但我不能帮助你。
教程
Ansibleをはじめる人に
即刻やれる
Ansible Tutorial
serverspecも
我也
安装
- Vagrantfile
Vagrant.configure(2) do |config|
config.vm.define "controller" do |node|
node.vm.box = "centos7_x64"
node.vm.hostname = "controller"
node.vm.network :private_network, ip: "192.168.101.100"
node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2210
end
config.vm.define "target" do |node|
node.vm.box = "centos7_x64"
node.vm.hostname = "target"
node.vm.network :private_network, ip: "192.168.101.200"
node.vm.network :forwarded_port, id: "ssh", guest: 80, host: 8000
node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2220
end
end
# 前提
vagrant up
vagrant status # running
ssh -p 2210 root@127.0.0.1 # passwordは "vagrant" vagrant sshも可
Python --version # Python 2.7.5
# インストール
yum install ansible
ansible --version # ansible 2.4.2.0
# sudo su - # root化(vagrant ssh)
umask # 0022
mkdir -p /work/ansible/test1 # Ansibleフォルダ(プロジェクトtest1用)
cd /work/ansible/test1
echo 192.168.101.100 >hosts # hosts(Inventoryファイル)作成
echo 192.168.101.200 >hosts
# ssh設定
ssh-keygen -t rsa # 秘密鍵作成
ssh-copy-id root@192.168.101.100 # 自分(controller)に秘密鍵送信
ssh-copy-id root@192.168.101.200 # targetに
# 疎通
ansible -i hosts 192.168.101.100 -m ping # 自分(controller)にAnsibleからping送信
ansible -i hosts 192.168.101.200 -m ping # targetに
ansible -i hosts 192.168.101.* -m ping # 両方に
# ↑秘密鍵にパスワード指定している場合、1台ずつ入力待ちになって止まる
ansible -i hosts 192.168.101.200 -m yum -s -a name=telnet # yumでtelnetを入れる
# ----> SUCCESSとなり、"changed": trueになる
# インストールされた
ansible -i hosts 192.168.101.200 -m yum -s -a name=telnet # 再度
# ----> SUCCESSとなり、"changed": falseになる
# 既にインストール済みの場合は何もしない
最初的Playbook
- hosts
[test-servers]
192.168.101.100
192.168.101.200
- Playbook : simple-playbook.yml
---
- hosts: test-servers
become: yes
tasks:
- name: be sure httpd is installed
yum: name=httpd state=installed
- name: be sure httpd is running and enabled
service: name=httpd state=started enabled=yes
从Ansible1.9开始,不再使用sudo/su,而是使用become。
请用中文将以下内容进行改写,只需一种选项:
请下面重新表达:
- 実行
ansible-playbook -i hosts simple-playbook.yml --syntax-check # syntaxチェックのみ
ansible-playbook -i hosts simple-playbook.yml --list-tasks # taskリスト参照のみ
ansible-playbook -i hosts simple-playbook.yml --check # dry-run
ansible-playbook -i hosts simple-playbook.yml # 実行(changed)
ansible-playbook -i hosts simple-playbook.yml # 実行(okに)
service httpd status # runnning
- ホスト情報取る
ansible -m setup -i hosts 192.168.101.100 # 膨大なJSON
- Playbook修正1 : simple-playbook.yml 追記 ( # ADD )
---
- hosts: test-servers
become: yes
tasks:
- name: be sure httpd is installed
yum: name=httpd state=installed
- name: be sure httpd is running and enabled
service: name=httpd state=started enabled=yes
- name: gathering data task example ## ADD
command: echo {{ ansible_enp0s8.ipv4.address }} ## ADD ホスト情報取る
- 実行
ansible-playbook -i hosts simple-playbook.yml # IPv4を取得する (changed)
- Playbook修正2 : simple-playbook.yml 追記 ( # ADD2 )
---
- hosts: test-servers
become: yes
tasks:
- name: be sure httpd is installed
yum: name=httpd state=installed
- name: be sure httpd is running and enabled
service: name=httpd state=started enabled=yes
- name: gathering data task example ## ADD
command: echo {{ ansible_enp0s8.ipv4.address }} ## ADD ホスト情報取る
failed_when: False # ADD2 fatal(失敗)の時もokを返す
changed_when: False # ADD2 changed(変更)の時も
- 実行
ansible-playbook -i hosts simple-playbook.yml # IPv4を取得する (ok)
解决姓名
-
- 在hosts文件中写入名称
-
- 在ssh_config文件中进行名称解析设置
- 在ansible.cfg文件中读取ssh_config文件
- hosts
[test-servers]
# 192.168.101.100 --> controller
controller
192.168.101.200
- ssh_config
Host controller
User root
HostName 192.168.101.100
IdentityFile ~/.ssh/id_rsa
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
- ansible.cfg
[ssh_connection]
ssh_args = -F ssh_config
请用中文将以下句子进行改写,只需要一个选择:
It is challenging to learn a new language, but with dedication and perseverance, one can become fluent in a relatively short amount of time.
将其放置在同一个文件夹中。
/work/ansible
|--test1
|--ansible.cfg
|--simple-playbook.yml
|--ssh_config
|--hosts
tree コマンドが無い環境で tree コマンドを実現 \(^o^)/
请用中文原生态地改写以下内容,只需要一个翻译选项:
使用Ansible-Vault进行密码保护
创建
ansible-vault create vault_test.yml
# New Vault password:xxxxxx
# Confirm New Vault password:xxxxxx
- vault_test.yml
---
some_key: value1
other_key: value2
编辑
ansible-vault edit vault_test.yml # 編集
# Vault password:xxxxx
- vault_test.yml
---
some_key: value1
other_key: value2
one_key: value3 # 追加
确认加密
vim vault_test.yml
- vault_test.yml
$ANSIBLE_VAULT;1.1;AES256
32366165373238636134313832373834626661613532353132373337366134336130643338626339
3362656161626232626434316237646331633933383337350a613361363339343533623936343837
32376362366231626134393763346165316636343863336431333565313530393563356562336335
6164356561666636330a626436363635633736666465333161666332396565346536653639303631
30326461623137643334326161666535613139393638333239313663306637643438376431303965
31633131383665326438653531623630663532663933386164396536653939313838613763643436
383039626137633535363634366364323062
创建纯文本文件
vim vault_test_2.yml # 平文ファイル作成
- vault_test_2.yml
---
new_key: new_value
明文文件加密
ansible-vault encrypt vault_test_2.yml
# New Vault password:xxxxxx
# Confirm New Vault password:xxxxxx
解碼
ansible-vault decrypt vault_test_2.yml
# Vault password:xxxxxx
# Decryption successful
解密确认
vim vault_test_2.yml
- vault_test_2.yml
---
new_key: new_value
将经过加密的文件放入group变量文件夹,并在执行Playbook时引用已定义的环境变量。
- あくまで検証ですので、パスワード等の扱いは気をつけてください
- git管理の場合は.gitignoreに書きましょう
- 準備
ls -la group_vars/test-servers/
# total 8
# drwxr-xr-x 2 root root 50 May 13 08:03 .
# drwxr-xr-x 3 root root 25 May 13 08:03 ..
# -rw------- 1 root root 549 May 13 07:36 vault_test.yml
# -rw------- 1 root root 23 May 13 07:51 vault_test_2.yml
vim vault-playbook.yml
- vault-playbook.yml
---
- hosts: test-servers
become: yes
tasks:
- name: vault-test
command: echo {{ one_key }}
- 使う
# その1 失敗
ansible-playbook -i hosts vault-playbook.yml
# PLAY [test-servers] ***************************************************************************************************************************
# ERROR! Attempting to decrypt but no vault secrets found
# その2 成功(value3) --ask-vault-pass を付ける
ansible-playbook -i hosts vault-playbook.yml --ask-vault-pass # 成功
# Vault password:xxxxxx
# その3 成功(value3) vaultのパスワードをbuzword.txtに書いておき、 --vault-password-file を付ける
ansible-playbook -i hosts vault-playbook.yml --vault-password-file buzword.txt
在执行sudo时密码保密。
非常抱歉让您感到难以理解,这几乎是一份操作记录。
做好准备
目标服务器
## sudo用ユーザー作成
useradd testansible # testansibleユーザー追加
grep testansible /etc/passwd # 確認
# testansible:x:1001:1001::/home/testansible:/bin/bash
passwd testansible # パスワード設定 パスワード:test
visudo # wheelグループのユーザーはパスワード付きでsudoできること確認
# --> %wheel ALL=(ALL) ALL
usermod -G wheel testansible # wheelグループに所属させる
su - testansible # testansibleログイン
sudo echo test # sudoしてみる パスワード聞かれる
# test
Ansible服务器
# ssh秘密鍵コピー
ssh-copy-id testansible@192.168.101.100
# 変数ファイル編集
ansible-vault edit group_vars/test-servers/vault_test.yml
- group_vars/test-servers/vault_test.yml
---
some_key: value1
other_key: value2
one_key: value3
ansible_ssh_user: testansible # sshユーザー名 (vaultで暗号化)
ansible_sudo_pass: test # sshユーザーのパスワード (vaultで暗号化)
- vault-playbook.yml
---
- hosts: test-servers
become: yes
tasks:
- name: vault-test
command: echo {{ one_key }}
- name: ssh_user_test
command: whoami
- buzword.txt
pass
以下是对中文的本地化翻译(仅提供一种选择):
执行1
安装好的 Ansible 服务器
ansible-playbook -i hosts vault-playbook.yml --vault-password-file buzword.txt -vv # 実行
# one_key 取れてて,
# whoami は root になる
执行2
- vault-playbook.yml
---
- hosts: test-servers
become: # yes <--コメントアウトしてみる
tasks:
- name: vault-test
command: echo {{ one_key }}
- name: ssh_user_test
command: whoami
ansible-playbook -i hosts vault-playbook.yml --vault-password-file buzword.txt -vv # 実行
# one_key 取れてて,
# whoami は testansible になる
请将以下内容用中文进行重述,只需要提供一种选择:
1. “I have never been to China before.”
我以前从未去过中国。
2. “I have no experience visiting China in the past.”
过去我没有去中国的经验。
3. “China is a place I have never visited before.”
中国是我以前从未访问过的地方。
4. “I have not had the opportunity to travel to China previously.”
以前我没有机会去中国旅行。
角色
-
- RoleがAnsible-GALAXYにある
- 検証中です
请原生汉语重新表述以下内容,只需提供一种选择:
There are many different ways to say “hello” in Chinese, depending on the context and the relationship between the speakers.
Playbook的每个模块
-
- 検証中です
- 長くなったので別記事にします
服务器规范
-
- Serverspec はテストツール
Ansibleと違ってchangeしない
テストだけする時使う
# インストール
ruby --version # ruby 2.0.0p598 (2014-11-13) [x86_64-linux]
gem list # serverspec なし
gem install serverspec
gem install rake
rake --version # rake, version 12.3.1
rspec --version # RSpec 3.7
gem list # serverspec 2.41.3
# 初期設定
serverspec-init # localhost / SSH
- spec/controller/httpd_spec.rb
require 'spec_helper'
describe package('httpd') do
it { should be_installed }
end
describe service('httpd') do
it { should be_enabled }
it { should be_running }
end
describe port(80) do
it { should be_listening }
end
describe file('/etc/httpd/conf/httpd.conf') do
it { should be_file }
its(:content) { should match /ServerName www.example.com:80/ }
end
- 実行
rake # spec/ホスト名/\*_spec.rb を実行する
请以中文进行本地化重述, 只需要一种选项:
Could you please explain the concept in more detail?
Ansible规范(宝石)
- Serverspecと統合する(どこかで記載予定)
请以中文进行本地化重述,只需提供一个选项:
请阐述以下内容的中文本地化重述: