【备忘录】 Ansible② Playbook与清单的编写方法
环境
· 实例类型:T2微型
· 操作系统:Amazon Linux 2
安装
由于Amazon Linux2环境中包含了Extras Library,因此它包含了Ansible软件包。
可立即使用以下命令进行安装。(也可使用Python包进行安装)
$ sudo amazon-linux-extras install -y ansible2
$ ansible --version
ansible 2.x.x
执行Ansible所需的元素
要执行Ansible,需要以下输入。
要素備考Playbook実行する内容を記述したファイルインベントリPlaybookの実行対象のホスト情報を記述した設定ファイルクレデンシャル実行対象に接続するための認証情報(ログインに使用する)変数Playbook内で変数化された部分に値を設定(使用しない場合あり)
设置库存
在 /etc/ansible/ansible.cfg 中添加对应的目录以指定清单文件的位置。(示例中将 /etc/ansible/hosts 设置为清单文件)
[defaults]
# some basic default values...
↓ この行がコメントアウトされているので#を削除する
inventory = /etc/ansible/hosts
#library = /usr/share/my_modules/
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp
#local_tmp = ~/.ansible/tmp
#forks = 5
#poll_interval = 15
#sudo_user = root
#ask_sudo_pass = True
#ask_pass = True
#transport = smart
#remote_port = 22
往下列通道設定清除物品後,存量檔案已經存在。
[文字列] 用于指定每个主机所属的组。例如,web服务器 → [web],应用服务器 → [app],数据库服务器 → [db]。
每个组都可以描述多个连接目标主机。
ansible_connection 是用于指定连接方式的。
如果未指定,则选择ssh。如果选择ssh,则在运行时将进行ssh连接和身份验证。
ansible_host是指定连接目标主机的IP地址的选项,在希望给连接目标主机指定别名时使用(在下面的示例中,使用了别名node-1和node-2)。
[group1]
127.0.0.1 ansible_connection=local
[group2]
127.0.0.1 ansible_connection=local
[nodes]
node-1 ansible_host=127.0.0.1 ansible_connection=local
node-2 ansible_host=127.0.0.1 ansible_connection=local
使用Playbook来指定变量和连接到主机进行执行。
在这里,我们将创建一个Playbook,它将在由存储库文件中指定的群组中显示通过变量(运行时参数)指定的字符串。
创建Playbook
vi ~/sample.yml
样本.yml文件的内容
- hosts: group1 # ここでグループを指定
vars:
sample_args: "書き換えられる文字列"
tasks: # tasks で定義された内容が実行される
- debug:
msg: "{{ sample_args }}" # 変数を展開する場合 "{{}}" を使用する
完成后,使用以下命令执行Playbook。
在Playbook中,您可以使用’-e’选项将值传递给变量,变量名为您设定的值。
$ ansible-playbook sample.yml -e 'sample_args=上書き後の文字 列'
PLAY [group1] ***************************************************************************
TASK [Gathering Facts] ******************************************************************
ok: [127.0.0.1]
TASK [debug] ****************************************************************************
ok: [127.0.0.1] => {
"msg": "上書き後の文字列"
}
PLAY RECAP ******************************************************************************
127.0.0.1 : ok=2 changed=0 unreachable=0 failed=0
如果没有传递变量,则会显示在Playbook内声明的值。
ansible-playbook sample.yml
PLAY [group1] ***************************************************************************
TASK [Gathering Facts] ******************************************************************
ok: [127.0.0.1]
TASK [debug] ****************************************************************************
ok: [127.0.0.1] => {
"msg": "書き換えられる文字列"
}
PLAY RECAP ******************************************************************************
127.0.0.1 : ok=2 changed=0 unreachable=0 failed=0
请将以下内容用中文进行同义转述:
“Can you please pass me the salt?”
“请你把盐递给我好吗?”