48/120
テンプレートコメント /etc/ansible/ansible.cfg
次の内容をコピーansible.cfg
[defaults]
ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}
templates/port.cnf.j2
{{ ansible_managed | comment }}
[mysqld]
port={{ database["svc_port"] }}
コメントコメントコメントが作成されます
警告の目的
効果の再使用
Artefact,Artifact:人工物
[defaults]
ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}
{{ ansible_managed | comment }}
[mysqld]
port={{ database["svc_port"] }}
Artefact,Artifact:人工物
再利用可能な領域
変数ファイル
vars_files
ゲームのキーワード
- hosts: x
vars_files:
- vars/a.yaml
tasks:
...
include varsモジュール
- hosts: x
tasks:
- include_vars:
dir: vars/
いくつかのオプション簡単な実践
-hosts: 192.168.100.11
tasks:
- include_vars: var.yaml
- debug:
msg: "{{ message }}"
var.yaml---
message: hello world
在庫変数
在庫内部ファイルに変数を設定する
ホスト変数
node1 message="hello world" # 호스트에게 부여
グループ変数
[wordpress]
node1
node2
[wordpress:vars]
message="hello world"
在庫外部ファイルでの変数の設定
https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable
ディレクトリで、
group_vars/<GROUP NAME>
host_vars/<HOST NAME>
次の2つのディレクトリがある場合:変換可能な自動生成エンジンにディレクトリがある場合は、ディレクトリから変数をインポートします.
<GROUP NAME>
,<HOST NAME>
ディレクトリまたはファイルの作成簡単な実践
[vagrant@controller ~]$ mkdir host_vars # 디렉토리명은 정해져있음 호스트 부분에 변수 설정
[vagrant@controller ~]$ code host_vars/192.168.100.11
# 호스트에 부여하니까 호스트이름과 같은 파일을 만듬
[vagrant@controller ~]$ mkdir group_vars
[vagrant@controller ~]$ code group_vars/nodes
[vagrant@controller ~]$ tree
.
├── ansible.cfg
├── group_vars
│ └── nodes
├── host_vars
│ ├── 192.168.100.11
│ └── 192.168.100.12
│ └── var.yaml
└── inven.ini
host_vars\192.168.100.11
---
message: hello node1
host_vars\192.168.100.12\var.yaml
ファイル名に関係なく->ファイルを分類可能---
message: hello node2
group_vars\nodes
service_port: 8080
message: hello world
ansible-inventory --list
ansible-inventory --host <HOST>
test.yaml
---
- hosts: nodes
tasks:
- debug:
msg: "{{ message }} - {{ service_port }}"
[vagrant@controller ~]$ ansible-playbook test.yaml
TASK [debug] ***************************************************
ok: [192.168.100.11] => {
"msg": "hello node1 - 8080"
}
ansible-inventory --host node1
# node1에 부여된 변수만 확인 가능
[vagrant@controller ~]$ ansible-inventory --host 192.168.100.11
{
"message": "hello node1",
"service_port": 8080
}
タスクの再使用
モジュールの場所
ansible-doc -l | grep include
ansible-doc -l | grep import_
include vars:変数のインポートinclude role:ロールのインポート
include tasks:タスクのインポート
import playbook:playbookのインポート
import role:ロールのインポート
import tasks:タスクのインポート
include vs. import
includeimportが有効になった場合、動的静的ループは使用できません.プロセッサを呼び出すことはできません.
プリスタティックかカウントか->対応するモジュールで処理する違い
動的インポートと静的インポート→機能の違い
importからループできません
import tasksはloopを使用できません
- hosts: 192.168.100.11
tasks:
- debug:
msg: in play
- import_tasks:
file: task.yaml
with_sequence: start=1 end=3 # 안됨
- debug:
msg: in play
解決策
- hosts: 192.168.100.11
tasks:
- debug:
msg: in play
- import_tasks:
file: task.yaml
- debug:
msg: in play
task.yaml
- debug:
with_sequence: start=1 end=3
yamlファイルに重複を追加->実際にimport tasksで3回のdebugが生成されますincludeからハンドラを呼び出せません
- hosts: 192.168.100.11
tasks:
- command: hostname
notify:
- hello notify
handlers:
- include_tasks: task.yaml
Handlerはダイナミックなのでアラームを受信できませんtask.yaml
- name: hello notify
debug:
msg: hello notify
解決策
アラートを受信するコードを追加
- hosts: 192.168.100.11
tasks:
- command: hostname
notify:
- hello notify
handlers:
- name: hello notify
include_tasks: task.yaml
饰演的角色
キャラクタの作成-->統合-->ゲームマニュアル
統一された構造mkdir roles # 반드시 roles 디렉토리 사용
ansible-galaxy init common --init-path roles # 구조화된 형식을 자동으로 만들어주는 명령어
.
└── roles
└── common
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
roles/common
:ロール名tasks/main.yml
:タスクはここにありますhandlers/main.yml
:ここでハンドラ操作tests/inventory
:ロールをテストするためのインベントリtests/test.yml
:キャラクターをテストするゲームマニュアルdefaults/main.yml
:デフォルトのロール変数(優先度が低い)vars/main.yml
:ロール変数(優先度が高い)files
:ファイル関連モジュールsrc:
パラメータ参照ファイルの場所files/a.txt
:パスを指定する必要はありません- copy:
src: a.txt
templates
:テンプレートモジュールsrc:
パラメータ参照ファイルの場所templates/a.j2
- templates:
src: a.j2
meta/main.yml
:ロールを記述するファイル
mkdir roles # 반드시 roles 디렉토리 사용
ansible-galaxy init common --init-path roles # 구조화된 형식을 자동으로 만들어주는 명령어
.
└── roles
└── common
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
- copy:
src: a.txt
- templates:
src: a.j2
例
ロールを使用して次のファイルを構成
- hosts: 192.168.100.12
become: yes
vars:
web_port: 81
tasks:
- yum:
name: httpd
state: installed
- replace:
path: /etc/httpd/conf/httpd.conf
regexp: '^Listen'
replace: '#Listen'
- template:
src: web_config/ports.conf.j2
dest: /etc/httpd/conf.d/ports.conf
notify:
- Restart Web Service
- copy:
src: web_contents/index.html
dest: /var/www/html/
- service:
name: httpd
state: started
enabled: yes
handlers:
- name: Restart Web Service
service:
name: httpd
state: restarted
[vagrant@controller sample]$ tree
.
├── sample.yaml
├── web_config
│ └── ports.conf.j2
└── web_contents
└── index.html
[vagrant@controller sample]$ mkdir roles
[vagrant@controller sample]$ mkdir -p roles/common
[vagrant@controller sample]$ mkdir -p roles/common/vars
[vagrant@controller sample]$ mkdir -p roles/common/tasks
[vagrant@controller sample]$ mkdir -p roles/common/handlers
[vagrant@controller sample]$ mkdir -p roles/common/files
[vagrant@controller sample]$ mkdir -p roles/common/templates
tasks:
- yum:
name: httpd
state: installed
- replace:
path: /etc/httpd/conf/httpd.conf
regexp: '^Listen'
replace: '#Listen'
- template:
src: ports.conf.j2
dest: /etc/httpd/conf.d/ports.conf
notify:
- Restart Web Service
- copy:
src: index.html
dest: /var/www/html/
- service:
name: httpd
state: started
enabled: yes
handlers/main.yaml
- name: Restart Web Service
service:
name: httpd
state: restarted
vars/main.yaml
---
web_port: 81
templates/
とfiles/
の間のファイル移動[vagrant@controller sample]$ cp web_contents/index.html roles/common/files/
[vagrant@controller sample]$ cp web_config/ports.conf.j2 roles/common/templates/
[vagrant@controller sample]$ ansible-playbook site.yaml
PLAY [192.168.100.11]
TASK [Gathering Facts]
ok: [192.168.100.11]
TASK [common : yum]
changed: [192.168.100.11]
TASK [common : replace]
changed: [192.168.100.11]
TASK [common : template]
changed: [192.168.100.11]
TASK [common : copy]
changed: [192.168.100.11]
TASK [common : service]
changed: [192.168.100.11]
RUNNING HANDLER [common : Restart Web Service]
changed: [192.168.100.11]
こうぞう
[vagrant@controller sample]$ tree
.
├── roles
│ └── common
│ ├── files
│ │ └── index.html
│ ├── handlers
│ │ └── main.yaml
│ ├── tasks
│ │ └── main.yaml
│ ├── templates
│ │ └── ports.conf.j2
│ └── vars
│ └── main.yaml
└── site.yaml
在游戏内实行塔斯克的顺序
# Play
- hosts:
pre_tasks:
roles:
tasks:
post_tasks:
handlers:
かどこうじ
ansible-galaxy
https://galaxy.ansible.com/
ロール・リストの表示
ansible-galaxy list
ansible-galaxy list --roles-path roles # 역할있는 디렉토리 직접 지정
[vagrant@controller sample]$ ansible-galaxy list --roles-path roles/common
# /home/vagrant/sample/roles/common
# /usr/share/ansible/roles
# /etc/ansible/roles
ansible-galaxy init 역할의 뼈대를 만들어줌
ansible-galaxy search elasticsearch # 역할 검색
ansible-galaxy info geerlingguy.elasticsearch # 역할의 정보 확인
ansible-galaxy install geerlingguy.elasticsearch
ansible-galaxy remove geerlingguy.elasticsearch
Reference
この問題について(48/120), 我々は、より多くの情報をここで見つけました https://velog.io/@numerok/48120テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol