Infra/Ansible
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
-プロビジョニングツール
#contents
*Warning対応 [#i7ef1687]
[DEPRECATION WARNING]: Invoking "dnf" only once while us...
**ループ除去 [#k8a87920]
- name: install bind
dnf:
name={{ item }} state=latest
with_items:
- bind
- bind-utils
- name: install bind
dnf:
name:
- bind
- bind-utils
state:
latest
*改善 [#hccf5463]
+yum から dkfへ
+S3から使ってないarchive除去
+mavenが手動ダウンロード前提なのでなんとかする
+geo_ipもなんとかしたい
*自作Ansible対応状況 [#ge8f3b71]
**aws graviton2 [#tf1f1e1f]
-armなのでリポジトリを削る必要がある。percona toolkitは一...
-PHPが文字化ける。mbstringはあるのに再起動で回復するのだ...
*通信量計測 202005 [#e4bca407]
-centos8で計測してみた
|setup|400M||
|apps|180M|jdkがでかい|
|myapps java|500|他が無視できるほどjava関連の容量と時間食...
-recover前までで1.2G程度(javaが大きい?)
**CentOS8 [#zcfe7d1d]
-dockerの代わりにpodman-docker
|Kagoya|Postgresでエラー|
|Conoha||
|自宅vmware|minimalだとpythonすらないのでsecureで|
**VPS [#z7fa81b4]
|Sakura VPS 2G||
|KAGOYA VPS KVM|PyYAMLがバージョン競合(インストールする...
|お名前.com VPS 2G||
|awshost|centos7限定のところを見直し(python-selinux),dnf...
**自宅 [#oa39e9bc]
*Ansible完全読本 [#l3e80e0d]
-ansible-pullを使うとpull型アーキテクチャにも対応できる。
-rawモジュールを利用するとpythonなしでも利用できる。pytho...
*最新版はつかわないこと [#s4fa997d]
-2.3.1.0にてs3のアップロードに失敗するバグに遭遇
*2.0への移行 [#rd5387f6]
2.0が2016/01にリリースされたが随所で変更が必要。
**Block [#v37181ca]
複数の処理をまとめることができる。さらにrescue,alwaysを組...
**インベントリなどのsudo [#icc08fa4]
|ansible_sudo|ansible_become|
**playbookのsudo [#of0cf1ed]
|sudo|become|
|sudo_user|become_user|
**playbookの変数 [#s9b522c0]
[DEPRECATION WARNING]: Using bare variables is deprecate...
with_items:
yum_epel_items → '{{ yum_epel_items }}'に変更
**定義済み変数の確認 [#p1436667]
ansible -m setup localhost
ansible -m setup -i hoset HOSTNAME
*インストール前に [#m389e3bc]
コントロールされる側に以下のパッケージが必要。
python-simplejson
*Install [#a1ef0832]
-Ubuntuでは公式が古いのでPPA利用してインストール
sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
-Pythonのパッケージ管理であるpipを使うと楽。python-devel...
yum install python27-devel
pip-2.7 install ansible
-EPEL から yum でもインストール可能。
yum install ansible --enablerepo=epel
**CentOS 6.x [#b4b68f6c]
yum install python-pip.noarch
yum install python-devel.x86_64
pip install PyCrypto==2.3
pip install ansible
**yumかaptかの判定 [#vbeb6ad7]
when: ansible_pkg_mgr == 'apt' or 'yum'
*Windows/CygwinでAnsible [#ic405092]
-以下のパッケージが必要
+gcc-core
+openssh
+python
+python-setuptools
-cygwinで以下のコマンド実施して入れる
easy_install-2.7 pip
pip2.7 install ansible
-sshパスワードログインするにはsshpassが必要。
http://server-setting.info/blog/sshpass-cygwin-autologi...
*設定ファイル [#e36529ef]
ansible.cfgファイルの探す順番は以下の通り。
+カレントディレクトリ
+環境変数の ANSIBLE_CONFIG or ~/ansible.cfg
+/etc/ansible/ansible.cfg
カレントにおいておけばそこが一番に読み込まれる。以下のよ...
[defaults]
hostfile = hosts
*インベントリ(操作対象ホスト) [#b06e7a3f]
# local
localhost ansible_connection=local
# SSHポート 10022でユーザーはremote_user
remote.example.com ansible_ssh_port=10022 ansible_ssh_...
クラウド向けにはDynamic Inventoryという概念がある。詳細は...
**パラメータ [#ff63884d]
|ansible_ssh_host|ホスト名に対しての実IP|
|ansible_ssh_port|SSHポート|
|ansible_ssh_user|SSHユーザ|
|ansible_ssh_pass|SSHパスワード。べた書きは非推奨なので--...
|ansible_sudo|sudoを使うかどうか。デフォルトはfalse|
|ansible_sudo_pass|sudo のパスワード。危険なので--ask-sud...
|ansible_sudo_exe (new in version 1.8)|sudo コマンドへの...
|ansible_connection|local, ssh or paramiko. |
|ansible_ssh_private_key_file|秘密鍵ファイルの場所|
|ansible_shell_type|シェル|
|ansible_python_interpreter|ログイン側のpython|
|ansible\_\*\_interpreter|ansibleのインタープリタの場所|
*変数定義 [#e5941d20]
hoge: value
hogearray:
- one
- two
- three
*ワンラインで簡易実行 [#t77c2971]
-インベントリを用意を用意して以下のように実行する。
|ansible web03 -a "ls" -i hosts|ls|
|ansible web03 -a "ls" -i hosts --ask-pass|ls|
|ansible web03 -m copy -a "src=/etc/hosts dest=/tmp/hosts...
*文法チェックと空実行(dry run) [#lcd9b61e]
-文法チェック
ansible-playbook -i hosts simple-playbook.yml --syntax-c...
-タスク一覧の表示
ansible-playbook -i hosts simple-playbook.yml --list-tasks
-空実行(dry run)
ansible-playbook -i hosts simple-playbook.yml -C
*推奨ディレクトリ構成 [#b34b0116]
TOP
-vars
-roles
hosts
*Role [#k4b4d2c0]
-公式サイトによればRoleは非常に便利とのこと
*Playbook [#a57e2726]
- hosts: all
user: hoge
tasks:
- script: /home/hoge/test.sh
**インクルード(条件分岐あり) [#uc4e9c01]
---
- include: setup-web.yml
when: type == "WEB"
- include: setup-db.yml
when: type== "DB"
**yum まとめてインスコ [#ic6d2445]
- name: yum install
yum:
name={{ item }}
with_items:
- httpd
- php
**httpd,openjdkインストール(分割推奨) [#i7e16019]
- hosts: web03
user: ec2-user
tasks:
- name: Install httpd
yum: name=httpd state=latest
sudo: yes
- name: apacheが起動していることを確認
action: service name=httpd state=started
sudo: yes
- name: "設定の修正(1)"
lineinfile: >-
dest='/etc/httpd/conf/httpd.conf'
state=present
backrefs=yes
regexp='^#?\s*ServerTokens'
line='ServerTokens Prod'
sudo: yes
notify: apache restart
- name: Install openJDK
yum: name=java-1.8.0-openjdk-devel state=latest
sudo: yes
handlers:
- name: apache restart
service:
name=httpd
state=restarted
sudo: yes
-セキュリティ周りの設定tag名称をsecurityにしている。
ansible-playbook -i hosts tcp_wrapper.yml --tags "securi...
- hosts: web03
user: ec2-user
tasks:
- name: deny all service
lineinfile: >-
dest='/etc/hosts.deny'
state=present
line='ALL: ALL'
sudo: yes
tags:
- security
- name: enable ssh for limited ip
lineinfile: >-
dest='/etc/hosts.allow'
state=present
line='sshd: 172.20.128.'
tags:
- security
- othertag
sudo: yes
-こちらはユーザーの作成。パスワードはハッシュ化したものを...
python -c 'import crypt; print crypt.crypt("YOURPASSWORD...
- hosts: web03
user: ec2-user
vars:
user_name: normaluser
user_pass: '$6$P0ky3YE5$JNFD0EuY52rXeVtNVypSMkB3chjH...
tasks:
- name: Add a new user
user: name={{user_name}} password={{user_pass}} gr...
sudo: yes
- hosts: web03
user: ec2-user
tasks:
- name: touch
shell: touch /var/tmp/{{ item.path }}
with_items:
- { path: 'hoge' }
- { path: 'fuga' }
- name: result test
shell: echo "hoge"
register: result
failed_when: result.rc not in [0, 1]
- name: catしたものをcontents変数に入れる
shell: cat /etc/passwd
register: contents
- name: contents変数の標準出力にrootが含まれるときは...
shell: ls
when: contents.stdout.find('root') != -1
- name: 日付変数を作成してそのファイルを作る
shell: date +'%Y%M%d%I%M%S'
register: datestring
- name: 日付のフォルダ作成
shell: touch /var/tmp/{{ datestring.stdout }}
- name: symlink作成
file: src=/var/tmp/{{ datestring.stdout }} dest=/v...
-公開鍵を設定
- name: setup authorized_key
authorized_key: user=user1 key="{{ item }}"
with_file:
- id_rsa.pub
-ディレクトリを列挙して、それを消す
- name: 古いディレクトリを特定する。
shell: ls -t1 | tail -n +5
args:
chdir: /var/tmp
register: old_dirs
- name: 古いディレクトリ削除
file: path={{ item }}
with_items: old_dirs.stdout_lines
-Jenkins.warがなければダウンロードさせる(ファイル存在チェ...
- name: jenkins exists check
stat: path=/var/cache/ansible/jenkins.war
register: jenkins
- name: Jenkinsをダウンロードする
get_url:
url: http://mirrors.jenkins-ci.org/war/latest/jenkin...
dest: /var/cache/ansible/
when: jenkins.stat.exists == False
*Taskモジュール [#oe3c52a8]
-出来合いのモジュールがたくさんある
**一覧 [#cc8a4160]
|ec2|Amazon ec2|boto required for this moduleとでたら、pi...
|s3|Amazon s3|
|shell|シェルを実行だが、コマンドも実行できる|
**変数の出力 [#tb00edce]
-name: debug
debug: var=p
**MySQL操作 [#sef8c376]
''リモート側にMySQL-pythonモジュールが必要。場合によって...
- name: MySQL DB 設定
mysql_db: name=DB_NAME state=present
- name: MySQL user hoge 追加(ローカル限定のユーザ)
mysql_user: name=hoge password=hoge priv=DB_NAME.*:ALL...
- name: MySQL user hoge 追加(どこからでもOKユーザー)
mysql_user: name=hoge host=% password=hoge priv=DB_NAM...
**EC2作成 [#o8365895]
- name: ec2インスタンスを作成する
ec2:
aws_access_key: アクセスキー
aws_secret_key: シークレットキー
region: ap-northeast-1
instance_type: t2.micro
keypair: キーペア名称
group: セキュリティグループ(複数ある場合はカンマ区...
image: AMIイメージID
vpc_subnet_id: サブネットID
assign_public_ip: yes
wait: yes
instance_tags:
Name: 名前
volumes:
- device_name: /dev/xvda
snapshot: snap-07b5593c→AMIが利用しているsnapsho...
volume_size: 100
register: ec2_status
tags: create
**EC2作成後.ssh/configにIP記載 [#h7815eba]
- name: .ssh/configに追記
shell: >-
echo Host awshost >> ~/.ssh/config;
echo User ec2-user >> ~/.ssh/config;
echo HostName {{ ec2_status.instances[0].public_ip }...
echo IdentityFile ~/.ssh/YOUR_KEY.pem >> ~/.ssh/conf...
tags: ssh_config
-結果の変数から取得できる値
|インスタンスID|ec2_status.instances[0].ID|
|private_ip|ec2_status.instances[0].private_ip|
|public_ip|ec2_status.instances[0].public_ip|
**s3アップロード/ダウンロード [#z29ea7bb]
-get
- name: S3からMasterのIPをダウンロードする
s3:
aws_access_key:
aws_secret_key:
region: ap-northeast-1
bucket: バケット名
dest: /var/tmp/任意のパス
object: /バケット名以下のパス/ファイル名
mode: get
**lineinfile[#ie79a670]
置換に便利なモジュール
-無条件で以下の一行を追加する(二度実行しても大丈夫)
- name: tomcat memory setting
lineinfile:
dest: /etc/tomcat8/tomcat8.conf
line: JAVA_OPTS="-server"
-正規表現に引っかかる行を置換する(複数の場合は最後に一致...
- name: tomcat javahome setting
lineinfile:
dest: /etc/tomcat8/tomcat8.conf
regexp: ^JAVA_HOME
line: JAVA_HOME="/usr/local/java/jdk1.8.0"
**Command Module [#da755925]
リモートでOSコマンドを実施する。
# Example from Ansible Playbooks.
- command: /sbin/shutdown -t now
# createsに指定されたファイルがない場合はcommandの処理を...
- command: /usr/bin/make_database.sh arg1 arg2 creates=/...
# somedir以下に移動し、かつ
# createsに指定されたファイルがない場合はcommandの処理を...
- command: /usr/bin/make_database.sh arg1 arg2
args:
chdir: somedir/
creates: /path/to/database
#繰り返し処理のサンプル。変数定義済みであればwith_items:...
- name: add several users
user: name={{ item }} state=present groups=wheel
with_items:
- testuser1
- testuser2
#コンパイルのタスクだが、実際にはシェルが実行できるので...
- name: Apacheコンパイル
shell:
make
chdir=/usr/local/src/httpd-2.4.12
creates=/usr/local/apache/2.4.12/bin/httpd
**Script Module [#o42793d1]
操作先にShellを送り込んで実行。操作先にpythonが必要ないの...
**Shell Module [#b6a7badd]
Ansibleの実行サーバー先にあるshファイルをリモートに送り込...
*Tips [#k0924b99]
**Dry-run [#befa66a4]
***チェックモードと実行ログにチェックモードであることを表...
--check
ansible.cfgに以下の記述を追加
[defaults]
check_mode_markers = yes
***実行後の差分を表示するdiffオプション。checkと併用可能 ...
--diff
**途中から実施 [#t6969604]
--start-at="taskのname"
**一ステップずつ確認 [#b3c26666]
--step
**外部変数(extra_vars) [#ff48ddad]
http://d.hatena.ne.jp/akishin999/20130818/1376824640
-実行時に変数を指定する(extra-varsで指定したもの場すべて...
ansible-playbook -i hosts setup.yml --extra-vars "admint...
**SSH接続時のキーチェック無効化 [#b73a72a0]
-新規のサーバーだとそこで処理が止まってしまうので、鍵のチ...
|実行時の環境変数で設定|export ANSIBLE_HOST_KEY_CHECKING=...
**Playbookがまったく実行されない [#wd060084]
- name: OK
-name: NG
**謎のエラー [#vbc47341]
ローカルのパーミッションがNGだと内部モジュールでエラーが...
**roleの条件の変数を勝手に書き換えたらroleの残りがスキッ...
考えてみりゃそりゃーそうだ。というわけで条件に使っている...
*条件 [#e7f8c9ad]
変数は{{}}で囲まないので注意
- user: root
hosts: all
tasks:
- name: install mlocate
yum: name=mlocate state=installed
when: install == "y"
**初接続時の注意 [#wed2c9f0]
公開鍵が保持されていないとエラー。以下の記事を参考に自動...
http://qiita.com/kawaz/items/20983ec286088a1ae5c7
**SSHパスワード接続時の注意 [#j1d4eeda]
--ask-passオプションをつけるとSSHパスワード接続で実行で...
export ANSIBLE_HOST_KEY_CHECKING=False
**Selinux有効だとエラー [#b1af8f8b]
target uses selinux but python bindings (libselinux-pyth...
無効にしてしまう!
**MysqlDB作成できない [#d59e94a1]
-以下のエラー・・・。クライアント側にインストールが必要!
the python mysqldb module is required
**マルチバイトのファイル名をunarchiveするとエラー。 [#med...
マルチバイトがあるのが残念なので、以下のコマンドで見つけ...
find . | grep \[^\ a-zA-Z0-9_:/@,%\\=\;\'\&\\\[\\+\\\(\\...
*proxy利用 [#o443a382]
接続先がproxy必須の場合、Linuxの設定としてproxyをセットす...
-/etc/environment
*ansible完全読本メモ [#b91235b6]
-YAML 1.2には対応していないが、他のライブラリとの互換性で...
終了行:
-プロビジョニングツール
#contents
*Warning対応 [#i7ef1687]
[DEPRECATION WARNING]: Invoking "dnf" only once while us...
**ループ除去 [#k8a87920]
- name: install bind
dnf:
name={{ item }} state=latest
with_items:
- bind
- bind-utils
- name: install bind
dnf:
name:
- bind
- bind-utils
state:
latest
*改善 [#hccf5463]
+yum から dkfへ
+S3から使ってないarchive除去
+mavenが手動ダウンロード前提なのでなんとかする
+geo_ipもなんとかしたい
*自作Ansible対応状況 [#ge8f3b71]
**aws graviton2 [#tf1f1e1f]
-armなのでリポジトリを削る必要がある。percona toolkitは一...
-PHPが文字化ける。mbstringはあるのに再起動で回復するのだ...
*通信量計測 202005 [#e4bca407]
-centos8で計測してみた
|setup|400M||
|apps|180M|jdkがでかい|
|myapps java|500|他が無視できるほどjava関連の容量と時間食...
-recover前までで1.2G程度(javaが大きい?)
**CentOS8 [#zcfe7d1d]
-dockerの代わりにpodman-docker
|Kagoya|Postgresでエラー|
|Conoha||
|自宅vmware|minimalだとpythonすらないのでsecureで|
**VPS [#z7fa81b4]
|Sakura VPS 2G||
|KAGOYA VPS KVM|PyYAMLがバージョン競合(インストールする...
|お名前.com VPS 2G||
|awshost|centos7限定のところを見直し(python-selinux),dnf...
**自宅 [#oa39e9bc]
*Ansible完全読本 [#l3e80e0d]
-ansible-pullを使うとpull型アーキテクチャにも対応できる。
-rawモジュールを利用するとpythonなしでも利用できる。pytho...
*最新版はつかわないこと [#s4fa997d]
-2.3.1.0にてs3のアップロードに失敗するバグに遭遇
*2.0への移行 [#rd5387f6]
2.0が2016/01にリリースされたが随所で変更が必要。
**Block [#v37181ca]
複数の処理をまとめることができる。さらにrescue,alwaysを組...
**インベントリなどのsudo [#icc08fa4]
|ansible_sudo|ansible_become|
**playbookのsudo [#of0cf1ed]
|sudo|become|
|sudo_user|become_user|
**playbookの変数 [#s9b522c0]
[DEPRECATION WARNING]: Using bare variables is deprecate...
with_items:
yum_epel_items → '{{ yum_epel_items }}'に変更
**定義済み変数の確認 [#p1436667]
ansible -m setup localhost
ansible -m setup -i hoset HOSTNAME
*インストール前に [#m389e3bc]
コントロールされる側に以下のパッケージが必要。
python-simplejson
*Install [#a1ef0832]
-Ubuntuでは公式が古いのでPPA利用してインストール
sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
-Pythonのパッケージ管理であるpipを使うと楽。python-devel...
yum install python27-devel
pip-2.7 install ansible
-EPEL から yum でもインストール可能。
yum install ansible --enablerepo=epel
**CentOS 6.x [#b4b68f6c]
yum install python-pip.noarch
yum install python-devel.x86_64
pip install PyCrypto==2.3
pip install ansible
**yumかaptかの判定 [#vbeb6ad7]
when: ansible_pkg_mgr == 'apt' or 'yum'
*Windows/CygwinでAnsible [#ic405092]
-以下のパッケージが必要
+gcc-core
+openssh
+python
+python-setuptools
-cygwinで以下のコマンド実施して入れる
easy_install-2.7 pip
pip2.7 install ansible
-sshパスワードログインするにはsshpassが必要。
http://server-setting.info/blog/sshpass-cygwin-autologi...
*設定ファイル [#e36529ef]
ansible.cfgファイルの探す順番は以下の通り。
+カレントディレクトリ
+環境変数の ANSIBLE_CONFIG or ~/ansible.cfg
+/etc/ansible/ansible.cfg
カレントにおいておけばそこが一番に読み込まれる。以下のよ...
[defaults]
hostfile = hosts
*インベントリ(操作対象ホスト) [#b06e7a3f]
# local
localhost ansible_connection=local
# SSHポート 10022でユーザーはremote_user
remote.example.com ansible_ssh_port=10022 ansible_ssh_...
クラウド向けにはDynamic Inventoryという概念がある。詳細は...
**パラメータ [#ff63884d]
|ansible_ssh_host|ホスト名に対しての実IP|
|ansible_ssh_port|SSHポート|
|ansible_ssh_user|SSHユーザ|
|ansible_ssh_pass|SSHパスワード。べた書きは非推奨なので--...
|ansible_sudo|sudoを使うかどうか。デフォルトはfalse|
|ansible_sudo_pass|sudo のパスワード。危険なので--ask-sud...
|ansible_sudo_exe (new in version 1.8)|sudo コマンドへの...
|ansible_connection|local, ssh or paramiko. |
|ansible_ssh_private_key_file|秘密鍵ファイルの場所|
|ansible_shell_type|シェル|
|ansible_python_interpreter|ログイン側のpython|
|ansible\_\*\_interpreter|ansibleのインタープリタの場所|
*変数定義 [#e5941d20]
hoge: value
hogearray:
- one
- two
- three
*ワンラインで簡易実行 [#t77c2971]
-インベントリを用意を用意して以下のように実行する。
|ansible web03 -a "ls" -i hosts|ls|
|ansible web03 -a "ls" -i hosts --ask-pass|ls|
|ansible web03 -m copy -a "src=/etc/hosts dest=/tmp/hosts...
*文法チェックと空実行(dry run) [#lcd9b61e]
-文法チェック
ansible-playbook -i hosts simple-playbook.yml --syntax-c...
-タスク一覧の表示
ansible-playbook -i hosts simple-playbook.yml --list-tasks
-空実行(dry run)
ansible-playbook -i hosts simple-playbook.yml -C
*推奨ディレクトリ構成 [#b34b0116]
TOP
-vars
-roles
hosts
*Role [#k4b4d2c0]
-公式サイトによればRoleは非常に便利とのこと
*Playbook [#a57e2726]
- hosts: all
user: hoge
tasks:
- script: /home/hoge/test.sh
**インクルード(条件分岐あり) [#uc4e9c01]
---
- include: setup-web.yml
when: type == "WEB"
- include: setup-db.yml
when: type== "DB"
**yum まとめてインスコ [#ic6d2445]
- name: yum install
yum:
name={{ item }}
with_items:
- httpd
- php
**httpd,openjdkインストール(分割推奨) [#i7e16019]
- hosts: web03
user: ec2-user
tasks:
- name: Install httpd
yum: name=httpd state=latest
sudo: yes
- name: apacheが起動していることを確認
action: service name=httpd state=started
sudo: yes
- name: "設定の修正(1)"
lineinfile: >-
dest='/etc/httpd/conf/httpd.conf'
state=present
backrefs=yes
regexp='^#?\s*ServerTokens'
line='ServerTokens Prod'
sudo: yes
notify: apache restart
- name: Install openJDK
yum: name=java-1.8.0-openjdk-devel state=latest
sudo: yes
handlers:
- name: apache restart
service:
name=httpd
state=restarted
sudo: yes
-セキュリティ周りの設定tag名称をsecurityにしている。
ansible-playbook -i hosts tcp_wrapper.yml --tags "securi...
- hosts: web03
user: ec2-user
tasks:
- name: deny all service
lineinfile: >-
dest='/etc/hosts.deny'
state=present
line='ALL: ALL'
sudo: yes
tags:
- security
- name: enable ssh for limited ip
lineinfile: >-
dest='/etc/hosts.allow'
state=present
line='sshd: 172.20.128.'
tags:
- security
- othertag
sudo: yes
-こちらはユーザーの作成。パスワードはハッシュ化したものを...
python -c 'import crypt; print crypt.crypt("YOURPASSWORD...
- hosts: web03
user: ec2-user
vars:
user_name: normaluser
user_pass: '$6$P0ky3YE5$JNFD0EuY52rXeVtNVypSMkB3chjH...
tasks:
- name: Add a new user
user: name={{user_name}} password={{user_pass}} gr...
sudo: yes
- hosts: web03
user: ec2-user
tasks:
- name: touch
shell: touch /var/tmp/{{ item.path }}
with_items:
- { path: 'hoge' }
- { path: 'fuga' }
- name: result test
shell: echo "hoge"
register: result
failed_when: result.rc not in [0, 1]
- name: catしたものをcontents変数に入れる
shell: cat /etc/passwd
register: contents
- name: contents変数の標準出力にrootが含まれるときは...
shell: ls
when: contents.stdout.find('root') != -1
- name: 日付変数を作成してそのファイルを作る
shell: date +'%Y%M%d%I%M%S'
register: datestring
- name: 日付のフォルダ作成
shell: touch /var/tmp/{{ datestring.stdout }}
- name: symlink作成
file: src=/var/tmp/{{ datestring.stdout }} dest=/v...
-公開鍵を設定
- name: setup authorized_key
authorized_key: user=user1 key="{{ item }}"
with_file:
- id_rsa.pub
-ディレクトリを列挙して、それを消す
- name: 古いディレクトリを特定する。
shell: ls -t1 | tail -n +5
args:
chdir: /var/tmp
register: old_dirs
- name: 古いディレクトリ削除
file: path={{ item }}
with_items: old_dirs.stdout_lines
-Jenkins.warがなければダウンロードさせる(ファイル存在チェ...
- name: jenkins exists check
stat: path=/var/cache/ansible/jenkins.war
register: jenkins
- name: Jenkinsをダウンロードする
get_url:
url: http://mirrors.jenkins-ci.org/war/latest/jenkin...
dest: /var/cache/ansible/
when: jenkins.stat.exists == False
*Taskモジュール [#oe3c52a8]
-出来合いのモジュールがたくさんある
**一覧 [#cc8a4160]
|ec2|Amazon ec2|boto required for this moduleとでたら、pi...
|s3|Amazon s3|
|shell|シェルを実行だが、コマンドも実行できる|
**変数の出力 [#tb00edce]
-name: debug
debug: var=p
**MySQL操作 [#sef8c376]
''リモート側にMySQL-pythonモジュールが必要。場合によって...
- name: MySQL DB 設定
mysql_db: name=DB_NAME state=present
- name: MySQL user hoge 追加(ローカル限定のユーザ)
mysql_user: name=hoge password=hoge priv=DB_NAME.*:ALL...
- name: MySQL user hoge 追加(どこからでもOKユーザー)
mysql_user: name=hoge host=% password=hoge priv=DB_NAM...
**EC2作成 [#o8365895]
- name: ec2インスタンスを作成する
ec2:
aws_access_key: アクセスキー
aws_secret_key: シークレットキー
region: ap-northeast-1
instance_type: t2.micro
keypair: キーペア名称
group: セキュリティグループ(複数ある場合はカンマ区...
image: AMIイメージID
vpc_subnet_id: サブネットID
assign_public_ip: yes
wait: yes
instance_tags:
Name: 名前
volumes:
- device_name: /dev/xvda
snapshot: snap-07b5593c→AMIが利用しているsnapsho...
volume_size: 100
register: ec2_status
tags: create
**EC2作成後.ssh/configにIP記載 [#h7815eba]
- name: .ssh/configに追記
shell: >-
echo Host awshost >> ~/.ssh/config;
echo User ec2-user >> ~/.ssh/config;
echo HostName {{ ec2_status.instances[0].public_ip }...
echo IdentityFile ~/.ssh/YOUR_KEY.pem >> ~/.ssh/conf...
tags: ssh_config
-結果の変数から取得できる値
|インスタンスID|ec2_status.instances[0].ID|
|private_ip|ec2_status.instances[0].private_ip|
|public_ip|ec2_status.instances[0].public_ip|
**s3アップロード/ダウンロード [#z29ea7bb]
-get
- name: S3からMasterのIPをダウンロードする
s3:
aws_access_key:
aws_secret_key:
region: ap-northeast-1
bucket: バケット名
dest: /var/tmp/任意のパス
object: /バケット名以下のパス/ファイル名
mode: get
**lineinfile[#ie79a670]
置換に便利なモジュール
-無条件で以下の一行を追加する(二度実行しても大丈夫)
- name: tomcat memory setting
lineinfile:
dest: /etc/tomcat8/tomcat8.conf
line: JAVA_OPTS="-server"
-正規表現に引っかかる行を置換する(複数の場合は最後に一致...
- name: tomcat javahome setting
lineinfile:
dest: /etc/tomcat8/tomcat8.conf
regexp: ^JAVA_HOME
line: JAVA_HOME="/usr/local/java/jdk1.8.0"
**Command Module [#da755925]
リモートでOSコマンドを実施する。
# Example from Ansible Playbooks.
- command: /sbin/shutdown -t now
# createsに指定されたファイルがない場合はcommandの処理を...
- command: /usr/bin/make_database.sh arg1 arg2 creates=/...
# somedir以下に移動し、かつ
# createsに指定されたファイルがない場合はcommandの処理を...
- command: /usr/bin/make_database.sh arg1 arg2
args:
chdir: somedir/
creates: /path/to/database
#繰り返し処理のサンプル。変数定義済みであればwith_items:...
- name: add several users
user: name={{ item }} state=present groups=wheel
with_items:
- testuser1
- testuser2
#コンパイルのタスクだが、実際にはシェルが実行できるので...
- name: Apacheコンパイル
shell:
make
chdir=/usr/local/src/httpd-2.4.12
creates=/usr/local/apache/2.4.12/bin/httpd
**Script Module [#o42793d1]
操作先にShellを送り込んで実行。操作先にpythonが必要ないの...
**Shell Module [#b6a7badd]
Ansibleの実行サーバー先にあるshファイルをリモートに送り込...
*Tips [#k0924b99]
**Dry-run [#befa66a4]
***チェックモードと実行ログにチェックモードであることを表...
--check
ansible.cfgに以下の記述を追加
[defaults]
check_mode_markers = yes
***実行後の差分を表示するdiffオプション。checkと併用可能 ...
--diff
**途中から実施 [#t6969604]
--start-at="taskのname"
**一ステップずつ確認 [#b3c26666]
--step
**外部変数(extra_vars) [#ff48ddad]
http://d.hatena.ne.jp/akishin999/20130818/1376824640
-実行時に変数を指定する(extra-varsで指定したもの場すべて...
ansible-playbook -i hosts setup.yml --extra-vars "admint...
**SSH接続時のキーチェック無効化 [#b73a72a0]
-新規のサーバーだとそこで処理が止まってしまうので、鍵のチ...
|実行時の環境変数で設定|export ANSIBLE_HOST_KEY_CHECKING=...
**Playbookがまったく実行されない [#wd060084]
- name: OK
-name: NG
**謎のエラー [#vbc47341]
ローカルのパーミッションがNGだと内部モジュールでエラーが...
**roleの条件の変数を勝手に書き換えたらroleの残りがスキッ...
考えてみりゃそりゃーそうだ。というわけで条件に使っている...
*条件 [#e7f8c9ad]
変数は{{}}で囲まないので注意
- user: root
hosts: all
tasks:
- name: install mlocate
yum: name=mlocate state=installed
when: install == "y"
**初接続時の注意 [#wed2c9f0]
公開鍵が保持されていないとエラー。以下の記事を参考に自動...
http://qiita.com/kawaz/items/20983ec286088a1ae5c7
**SSHパスワード接続時の注意 [#j1d4eeda]
--ask-passオプションをつけるとSSHパスワード接続で実行で...
export ANSIBLE_HOST_KEY_CHECKING=False
**Selinux有効だとエラー [#b1af8f8b]
target uses selinux but python bindings (libselinux-pyth...
無効にしてしまう!
**MysqlDB作成できない [#d59e94a1]
-以下のエラー・・・。クライアント側にインストールが必要!
the python mysqldb module is required
**マルチバイトのファイル名をunarchiveするとエラー。 [#med...
マルチバイトがあるのが残念なので、以下のコマンドで見つけ...
find . | grep \[^\ a-zA-Z0-9_:/@,%\\=\;\'\&\\\[\\+\\\(\\...
*proxy利用 [#o443a382]
接続先がproxy必須の場合、Linuxの設定としてproxyをセットす...
-/etc/environment
*ansible完全読本メモ [#b91235b6]
-YAML 1.2には対応していないが、他のライブラリとの互換性で...
ページ名: