pythonでconohaのACLにIPの設定変更する

基本的にセキュリティグループルールの追加及び更新を行うだけなので、対象にセキュリティグループがすでに設定されている事が条件となります。

#ちょっとだけ説明
+ 前記事の[トークンの取得](http://qiita.com/ototo/items/a0bfd65af8c460d563b1)と[IP取得](http://qiita.com/ototo/items/3a1212e785fc53114b5b)の`` `my_token.txt` ``と`` `my_ip.txt` ``を使用します
+ 基本的には[Requests](http://requests-docs-ja.readthedocs.io/en/latest/)でやり取りを行う
+ jsonモジュールで受け取ったjsonデータの処理を実施
+ セキュリティグループに旧IPが登録されていれば、削除も行い新たにルールを追加
+ 投稿に合わせてコメントを日本語で入れてます。削除するか書き直して使ってください。

#コード
```python:set_acl.py
#!/usr/bin/env python
import requests
import json
import os

class set_rule():

        def __init__(self): #初期化
                my_ip = ""
                my_token = ""
                my_rule =""

        def set_data(self,rule): #セキュリティグループID、トークン、現在のIPのセット
                self.my_rule = rule
                with open('my_ip.txt','r') as f:
                        self.my_ip = f.read()

                with open('my_token.txt','r') as f:
                        self.my_token = f.read()

        def remove(self): #旧登録情報の削除
                rule_data = ''
                rule_flug = os.path.exists("./my_rule.txt")

                if rule_flug: #ファイルが無ければ削除を行わない
                        with open('my_rule.txt', 'r') as f:
                                rule_data = f.read()
                        url='https://networking.tyo1.conoha.io/v2.0/security-group-rules/'+rule_data
                        header={'Accept':'application/json','X-Auth-Token':''}
                        header['X-Auth-Token']=self.my_token
                        r = requests.delete(url,headers=header)
                        print "delete_rule_data="+rule_data

                if rule_flug == False:
                        print "no_rule_data"

        def set_ip(self): #セキュリティグループへルールの追加 外部の指定IPからtcp通信を許可する設定、ポート制限なし
                url = "https://networking.tyo1.conoha.io/v2.0/security-group-rules"
                header = {'Accept':'application/json','X-Auth-Token':''}
                header['X-Auth-Token']=self.my_token
                data = {"security_group_rule":{"direction": "ingress","ethertype": "IPv4","security_group_id":"","protocol":"tcp" ,"remote_ip_prefix":""}}
                data["security_group_rule"]["security_group_id"]=self.my_rule
                data["security_group_rule"]["remote_ip_prefix"]=self.my_ip

                r = requests.post(url,data=json.dumps(data),headers=header)

                with open('rule_data.json','w') as f:
                        f.write(r.text)

                with open('rule_data.json','r') as f:
                        jsonData = json.loads(f.read())

                with open('my_rule.txt','w') as f: #ルールIDを記録
                        f.write(jsonData["security_group_rule"]["id"])
                        print "set_rule="+jsonData["security_group_rule"]["id"]

def set_rule_main(group): #メインの処理
        groupid = group
        rule_setter = set_rule()
        rule_setter.set_data(groupid)
        rule_setter.remove()
        rule_setter.set_ip()


if __name__ == '__main__':
        set_rule_main("セキュリティグループID")

```
更新だけなら、下記のように[トークンの取得](http://qiita.com/ototo/items/a0bfd65af8c460d563b1)と[IP取得](http://qiita.com/ototo/items/3a1212e785fc53114b5b)と今回のスクリプトをインポートして一括処理して使います。

#使用例

```python:set_acl_main.py
#!/usr/bin/env python
import ip
import get_token
import set_acl

get_ip_url = "http://www.axisnetworks.biz/tools/gip/"
user = 'XXXXXX'
key = 'XXXXXX'
tenantId = 'XXXXXXX'
security_group = "XXXXXXXXX"

if __name__ == '__main__':
        ip.ip_get(get_ip_url)
        get_token.token_get_main(user,key,tenantId)
        set_acl.set_rule_main(security_group)
```

ACLに自宅のIPを設定していたのですが、自宅のルータが再起動したときにIPが変わってしまい、その時の再設定が面倒だったので作成したのですが、最近回線を変えたらほぼ必要無くなってしまいました。